根据 web3.js编译Solidity,发布,调用全部流程(手把手教程)进行。因为这篇文章中的一些方法和最新版本的不一样了,中间遇到了一些坑,现把解决方法记录如下:
准备工作
安装 Node.js 、安装以太节点以及合约代码等与web3.js编译Solidity,发布,调用全部流程(手把手教程)中的一致。
- 安装好的NodeJs版本为:v10.15.3
- 安装好的以太节点版本为:ethereumjs-testrpc@6.0.3
遇到的坑
第一个坑:Solidity安装
按照官方文档使用 npm install -g solc
安装。
安装后验证版本应该使用 solcjs --version
,而不是 solc --version
。而且这边安装的是最新版本,也为后面的步骤埋下了坑。
第二个坑:TypeError: Cannot read property ‘solidity’ of undefined
使用以下代码:
|
|
运行的时候报:
|
|
这个是因为 Geth 在 1.5.9 版本以后就不支持此功能。见:Ethereum Dapp初心者之路(7): web3.eth.compile.solidity()替代方案。
所以参考 https://ethereum.stackexchange.com/questions/6346/solc-version-command-not-found 文章,将代码改为:
|
|
第三个坑:编译报错
编译的时候,如果遇到以下报错:
|
|
这个是因为 solc 的版本不对,我们的代码中的版本是 ^0.4.0
,而安装的 solc 的版本为 ^0.5.7
。应该用一样的版本。
代码中的版本改为^0.5.7
,即pragma solidity ^0.5.7;
。运行后,报:
|
|
|
|
然后将代码中的版本号改为:pragma solidity ^0.4.25;
完整源码
index.js:
|
|
Calc.sol:
|
|
package.json:
|
|