前面讲了部署私有链以及新增账户,现在进行到了部署合约了,此操作真是踩了无数无数无数的坑,到写文章为止确实是已经部署好了,但是还有些坑是还没有解决的!
一、Solidity编译器
开始的时候用的https://remix.ethereum.org/ 这个官网在线编译器,但不知道怎么回事,我k学上网都没问题,但就是访问这个网站有问题(事后用http就可以了),没办法我就打了其它编译器的主意,最开始是用的remix有一个中文版的编译器,但是用着发现好像无法连接私有链,没办法参照官方文档找其它编译器(文档地址:https://learnblockchain.cn/docs/solidity/installing-solidity.html),这么多里面看了一下,决定安装本地的Remix-Ide,参考安装文档(https://learnblockchain.cn/2018/06/07/remix-ide/),安装的过程中我已经不知道出现了多少问题了,直到最后!!!还是没有解决,卡在这这一步:npm install remix-ide -g安装已经成功了,执行remix-ide & remixd能看到安装的remix-ide,但是运行remix-ide又提示不支持的命令。搞了半天也没搞好,后来在群里有友人说还需要配置环境变量,但是我那时已经没有耐心了直接改了http用在线的remix了。后面我还是回去装本地版本的,实在不行的话安装docker再弄,环境问题真是糟心。
二、简单的helloBlockchain合约
1、新加sol文件,内容如下:
pragma solidity ^0.4.0; contract helloBlockchain{ function renderHello() public pure returns (string){ return "Hello Blockchain"; } }
因为我参考的文档都是老旧的,所以合约也是0.4.0-0.5.0版本的才行
2、编译
这是因为使用的版本问题,要找到0.4.0-0.5.0的版本添加进去
网上随便找到一个在线版本:https://solc-bin.ethereum.org/bin/soljson-v0.4.26+commit.4563c3fc.js,其它的也都可以在https://github.com/ethereum/solc-bin里面自行下载
3、部署合约
使用metamask的时候会自动选择Injected Web3来进行连接,请注意,这里的链网络一定要核查是与创世区块里面写的chainid、与启动区块链写的networdid一致的才行,不然会报错:invalid sender
部署要启动挖矿别忘了
四、遇到的问题
1、部署时报这个错:
原因:重启了电脑,私有链忘记启动了,哈哈哈
2、部署合约提示[ethjs-query] while formatting outputs from RPC '{"value":{"code":-32603"data":{"code":-32000"message":"invalid sender"}}}'
排查如下几点:
①需要解锁账户
②创世区块里面写的chainid与启动区块链写的networdid要一致,同时MetaMask设置-网络里面配置的id要同样是这个id
③启动私有链时要打开--allow-insecure-unlock,请参考我在第一章讲到的启动方式
好像还有其它问题,但只能想起来这三个了,真的是弄了好久啊,泪牛满面!!!