1. 登录eth-host,在防火墙上放开8545端口后,然后启动testrpc服务。
firewall-cmd --zone=public --add-port=8545/tcp --permanent systemctl restart firewalld testrpc
启动后界面如下
2. 回到tru-host主机,进入t01目录,在console执行truffle命令
truffle compile truffle migratecompile执行完成后,目录下增加了build目录。
从上图可以看出,compile之后把contract(合约)中的三个sol脚本(solidity开发的脚本)编译到build目录中。好奇心驱使我们去看看build后的文件有啥不同…以ConvertLib为例,编译前后的比较如下图。
可见:
(1) compile的过程就是把sol脚本转换成json格式的脚本
(2) compile将sol中定义的函数体转换成了binary格式,方便EVM解读执行;
(3) 截止目前,貌似尚未与eth网络搭上边,networks编号为空。
但执行migrate的时候报错,意思是在localhost上未找到rpc服务(对应的是8545端口)。当然找不到咯,因为本实验就是想让truffle调用另一台主机上的eth rpc服务嘛。编辑下truffle.js文件,将其中localhost改为eth-host即可。
vim truffle.js
(4)再次执行truffle migrate执行成功。
truffle migrate
(5)运行合约服务
npm run dev服务显示成功启动。是不是觉得太顺畅了反倒有点不安心了呢?
(6) 在页面上测试合约执行
结果提示错误。:(
(7)根据错误提示“There was an error fetching your accounts.”查找报错的脚本…
find . -name “*.js” | xargs grep -ril “fetching your accounts”查到报错的脚本是:./app/javascripts/app.js
vim ./app/javascripts/app.js查看端口情况,发现最后几行写着“localhost:8545”,修改成”eth-host:8545”
然后重新执行(5)、(6)步,最后成功现实了合约页面。
最后,终于成功了。有点小激动有木有?
最后总结下本次实验:
(1) 实现了把eth rpc服务与truffle合约服务分开到两个不同的主机上部署;
(3) 在部署过程中遇到的问题,要耐心定位脚本然后分析问题解决问题,这个过程非常增长经验值;
(4) 在解决问题中发现node_modules目录下很多目录都有README.md文件,该文件中写了不少有关模块的调用与设计的说明,该说明也是非常难得的学习资料。比如,这段文字,有木有让你发现点什么…
Set a provider (HttpProvider) ```js if (typeof web3 !== 'undefined') { web3 = new Web3(web3.currentProvider); } else { // set the provider you want from Web3.providers web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")); } ``` Set a provider (HttpProvider using [HTTP Basic Authentication](https://en.wikipedia.org/wiki/Basic_access_authentication)) ```js web3.setProvider(new web3.providers.HttpProvider('http://host.url', 0, BasicAuthUsername, BasicAuthPassword)); ``` There you go, now you can use it: ```js var coinbase = web3.eth.coinbase; var balance = web3.eth.getBalance(coinbase); ```
好,今天先到这里。日后有机会再来研究上述代码...
Have a good weekend and a happy 10.1 ! :D