利用truffle框架部署应用到自己搭建的私有链

本次实验Ubuntu 14.04 、truffle 3.2.4、node 6.9.1、npm 3.10.8和geth 1.4.5搭建的私有链。
truffle官方文档: http://truffleframework.com/docs/
用到的几个truffle命令:
truffle init 创建项目
truffle compile 编译
truffle migrate 部署

一、首先要在要有一个node环境,然后用npm全局安装truffle,用npm install -f truffle即可。

二、创建项目
用truffle创建项目很方便,直接用truffle init即可。
在任意位置创建一个目录,例如truffleTest,进入到目录,在此处打开一个终端(终端1),执行truffle init,执行完成后会有contracts、migrations和tests
三个目录以及truffle.js文档,它是配置文件。
其中contracts中存放的是合约,truffle compile进行编译的时候就会在这里面寻找合约文件。migrations目录里面存放的是Javascript文件,它帮助部署合约到以太坊网络中,它们表示了进行部署任务的步骤,它们是在假设你的部署需要不断改变的情况下进行的命名。它里面的文件的文件名由数字开头,后缀往往表明了该文件的作用。

三、编写合约
合约都存放在contracts目录下,执行truffle compile时会自动去contracts目录下寻找。
创建一个文件,取名为MyContract.sol,代码如下:
pragma solidity ^0.4.0;
contract MyContract{
function multiply(uint a) returns(uint d){
return a * 7;
}
}
合约就是以太坊、solidity中的那个例子,很简单。
四、修改配置文件
暂时不需要多做什么,只需把network_id字段的“×” 改成一个数字,例如1123。
五、增加一个migration文件
例如3_example_migartion.js
var MyContract = artifacts.require("./MyContract.sol");
module.exports = function(deployer){
deployer.deploy(MyContract);
};
六、启动一个先前搭建好的私有链节点
搭建方法,我 上篇博客有写。
启动另外一个终端(终端2),输入
geth --identity "ethTest" --rpc --rpccorsdomain "*" --datadir ~/ether/node1 --port 30303 --rpcapi "db,eth,net,web3" --networkid 1123 console
其中,--datadir为你的节点路径,--networkid 1123要跟配置文件truffle.js中的一致,这样就打开了console。

1、在终端2,解锁你的账户,部署的时候要用到,所以账户必须是可用状态:personal.unlockAccount(eth.accounts[0])。
2、进入终端1,编译合约truffle compile,编译结果如下:
然后部署:truffle migrate --network development 。development为你配置文件truffle.js中networks里面的key。此时终端2会显示如下:
终端1结果为
此时暂没成功部署,因为只是把交易发送给了网络,没有被区块收录,在终端2可以用txpool.status查看有一条未处理的交易。启动挖矿:miner.start(),部署成功会显示结果如下:
终端2结束挖矿,miner.stop()。
七、与合约交互
部署成功之后,build/contracts目录下都是json文件。它就是合约的元数据,我们要与合约进行交互就是用到其中的abi和address。先用在线压缩转义工具( http://www.bejson.com/zhuanyi/),把abi的json格式转换为字符串,在终端2里赋值给变量abi。地址赋值给变量address。
然后就可以创建对象,调用合约了,结果如下图:
好了,至此我们就把合约部署到了自己搭建的私有链上,而不是官网的那个testrpc了,主要的一点就是在配置文件中写入网络ID为你启动私有链时用的那个ID。然后再调用合约时就得用到相应合约的abi和在区块链上的地址address。

猜你喜欢

转载自blog.csdn.net/yooliee/article/details/72821521