区块链学习日记——部署智能合约到私有链

仅学习记录之用

使用 truffle 部署智能合约

首先新建文件夹 test2

mkdir test2
cd test2

用truffle初始化,由于时3.0版本,可以用以下命令

truffle init webpack

初始化完成后,打开contracts 文件夹,建立新的合约,我这里用到的是官方的例子。投票合约
把它复制为新的合约文件Ballot.sol。
然后在migrations 文件夹里修改1_initial_migration.js文件,如图

区块链学习日记——部署智能合约到私有链_第1张图片

这里由于Ballot构造方法参数为数字,我随便写了个8作为测试。

启动私有链

区块链学习日记——部署智能合约到私有链_第2张图片

建立账户,挖矿。

personal.newAccount('123456')
miner.start()

等挖一段时间矿,在停止

miner.stop()

部署合约

这里要修改test2中的truffle.js文件
要与私有链启动命令的端口保持一致,由于我的节点在8081启动所以这里port也设置为8081

区块链学习日记——部署智能合约到私有链_第3张图片

然后输入

truffle compile

成功,再输入

truffle migrate

出错,说 network up to date .这个错误我刚开始不知道怎么解决,在网上有没有人提起。后来看到有人在部署时用

truffle migrate --reset

区块链学习日记——部署智能合约到私有链_第4张图片

接近成功!!!

后来查明原因。由于合约移植是懒编译的,如果发现已经发布过,且发布的版本号没有变化就不会再发布,所以使用–reset。使用truffle migrate –reset来强制重编译并发布所有合约。

但是账户没有解锁,所以在节点解锁账户,默认第一个账户。

personal.unlockAccount('这里是账户地址')

账户地址可以用

personal.listAccounts

查看。

接下来再次部署

区块链学习日记——部署智能合约到私有链_第5张图片

可以看到有一个节点这边已经有了提示
输入

txpool.status

查看未打包合约,显示有一个
然后再次启动挖矿,进行打包。
区块链学习日记——部署智能合约到私有链_第6张图片
这里看到合约部署成功,并显示在哪个块上。

接下来尝试调用合约,将官方投票例子右边的合约接口interface复制,治理的合约接口是我们调用合约可以用到的方法,
区块链学习日记——部署智能合约到私有链_第7张图片

赋值建立一个实例

区块链学习日记——部署智能合约到私有链_第8张图片

区块链学习日记——部署智能合约到私有链_第9张图片

尝试调用合约方法

区块链学习日记——部署智能合约到私有链_第10张图片

以上就我对私有链部署合约的相关实践。

你可能感兴趣的:(区块链)