主页 > imtoken钱包转usdt > 使用 truffle 与以太坊平台交互
使用 truffle 与以太坊平台交互
今天研究了一个上午truffle和以太坊平台的交互,终于搞定了,所以做个笔记。 备忘(truffle与以太坊私链的交互)
1.首先启动geth客户端,使用如下命令
>./geth --datadir "./chaintest" --networkid 314590 --port 61910 --rpc --rpcapi "web3,eth,net" --rpccorsdomain "*" --rpcport 8200 控制台
将合约部署到私链时需要注意:geth启动节点时,必须有--rpcapi选项,选项的值必须包含“web3”、“eth”、“ “网”。 另外,为了保证启用rpc,还必须有--rpc等一系列参数。
客户端启动后,如果是新客户端,需要为客户端创建1-2个账号,方便测试。 创建新账户的命令如下:
>personal.newAccount("123456"); //其中123456是账户密码
如果客户已经有账户,我们解锁账户,这样就可以在私有链上部署智能合约了,因为部署合约时默认是使用第一个账户进行操作,所以我们只需要解锁第一个账户. 解锁命令如下:
>personal.unlockAccount(eth.accounts[0],密码,1000*60*60); //第三个参数是账户被锁多久,我们可以设置的长一些,这里是60分钟
2.启动geth客户端后,我们来构建一个truffle项目。 前提是你的机器上已经安装了truffle。 我在linux上测试过,系统是centos7
>mkdir 松露3
>cd 松露3
>truffle init //这条命令后truffle会自动在truffle3目录下建立一个truffle工程,格式如下
这是编译后的目录结构。 其实刚创建完以太坊 平台,我在这个目录下标出的四个文件
删除contracts目录下除Migrations.sol外的其他两个文件。 当然,您也可以保留它们。 这里我们使用自己编写的智能合约进行测试。 Migrations.sol文件在迁移的时候需要用到,所以保留。 添加Greeter.sol文件。内容如下
pragma solidity ^0.4.11;
contract Greeter
{
address creator;
string greeting;
function Greeter(string _greeting) public
{
creator = msg.sender;
greeting = _greeting;
}
function greet() constant returns (string)
{
return greeting;
}
function setGreeting(string _newgreeting)
{
greeting = _newgreeting;
}
/**********
Standard kill() function to recover funds
**********/
function kill()
{
if (msg.sender == creator)
suicide(creator); // kills this contract and sends remaining funds back to creator
}
}
修改migrations目录下的2_deploy_contracts.js文件如下:
var Greeter = artifacts.require("./Greeter.sol");
module.exports = function(deployer) {
deployer.deploy(Greeter);
};
修改truffle3下的truffle.js内容如下:
module.exports = {
rpc: {
host:"localhost",
port:8200
},
networks: {
development: {
host: "localhost",
port: 8200,
network_id: 314590 // Match any network id
}
}
};
这里rpc-port是geth客户端启动时的端口号,networks-development-network_id是geth客户端启动时的networkid。
设置好后就可以编译了
> 编译
松露编译
编译后会出现如上目录结构
> 部署
松露迁移
执行部署操作后,返回geth客户端进行挖矿操作 miner.start();admin.sleepBlocks(13);miner.stop();
挖矿成功后,智能合约部署在以太坊私链上
然后我们在geth客户端上测试
> var abi = [{"constant": false,"inputs": [],"name": "kill","outputs": [],"payable": false,"type": "function"},{"constant": false,"inputs": [{"name": "_newgreeting","type": "string"}],"name": "setGreeting","outputs": [],"payable": false,"type": "function"},{"constant": true,"inputs": [],"name": "greet","outputs": [{"name": "","type": "string"}],"payable": false,"type": "function"},{"inputs": [{"name": "_greeting","type": "string"}],"payable": false,"type": "constructor"}]
undefined
>
>
> var address = "0x231485032a7159202382515d4f90baef00ef9cdb";
undefined
>
> var greeter = web3.eth.contract(abi).at(address);
undefined
> greeter.setGreeting("Hello world!",{from : eth.accounts[0]});
INFO [09-12|16:09:43] Submitted transaction fullhash=0x54dd41fde0b5fa8b362713568ef2eddfea3d9075759376dbc0e6de22106a4d8e recipient=0x231485032a7159202382515d4f90baef00ef9cdb
"0x54dd41fde0b5fa8b362713568ef2eddfea3d9075759376dbc0e6de22106a4d8e"
>
> miner.start();admin.sleepBlocks(13);miner.stop();
> var aaa = greeter.greet();
undefined
> console.log(aaa);
Hello world!
undefined
>
部署时遇到的问题以太坊 平台,截图如下:
Exceeds block gas limit 是指超过了区块的最大gas limit,将genesis文件中的gas limit参数改大即可。