web3.eth.compile.solidity()替代方案

我们使用soldidity撰写smart contract并存成.sol档。在布署smart contract之前,我们必须要先将solidity code编译成EVM(Ethereum Virtual Machine)可以看懂的程式码。编译后会出现:

  • Bytecode/EVM code
  • ABI(Application Binary Interface)

Btyecode主要是布署在blockchain上,让EVM所执行的程式码。ABI主要定义如何跟smart contract互动。ABI内容包含smart contract所定义的行为,也就是contract中所定义的funcation。在布署smart contract时也需要ABI。

不幸的消息

Web3.js原本有提供可以让我们直接compile solidity code的功能(web3.eth.compile.solidity())。但非常不幸Geth从1.5.9版本之后就不在支援compile solidity code的功能了。所以当你连接到1.5.9以上版本的Geth,呼叫web3.eth.compile.solidity()时会发生错误。Metamask原本就没有支援compile solidity code功能。而EthereumJS TestRPC v6.0.3经过测试也没有支援compile的功能。

代替方案

那我们要如何来compile solidity code呢?这里提供两种替代方案来解决这个问题。第一种是直接安装Solidity Compiler(Solc)在本地端电脑,先在本地端利用solc先将sol档编译后再布署。安装Solc的过程非常简单,如果你的环境跟我一样是ubuntu的话,利用apt-get安装即可。

sudo add-apt-repository ppa:ethereum/ethereum 
sudo apt-get update 
sudo apt-get install solc

安装好之后就可以直接在command line上利用solc指令编译。

solc [options] [input file …] 
solc — bin sample.sol > sample.bin 
solc — abi sample.sol > sample.abi 
solc — combined-json abi,bin sample.sol > sample.json

Browser Solc

另一种方法就是使用线上的solc( browser-solc )来进行编译。browser-solc其实就是浏览器版的solc.js。这边有用browser-solc写一个简易的Online Solc网站,可以把你的solidity code放到左边的栏位,选择你要什么版本的solc,按下Complie Code按钮。在右方就会出现编译完过后的Bytecode和ABI。我也把source code放这里,想知道如何实作也欢迎点进去看看喔。

利用broswer-solc所作的online solc网站

结尾

主要是因为当初在使用web3.eth.compile.solidity()时候,发现无法使用而卡了一阵子,花了点时间找寻其他的替代方案。其实也有人直接使用nodejs的solc来进行编译,但我没有试过所以就不在这里提出来。网路上应该可以找到许多范例。这一篇的篇幅很明显变短了,主要是因为我发现写文章真的花太多时间了!所以我决定把一些废话变少。观念的部份我还是会比较详细的跟大家讲述,至于一些比较偏实作的方式可能就不会打太多,但我都会附上source code让大家自己回去看。以上若有发现错误的地方,或者我的观念有误,拜托各位大大不吝啬给于纠正。

本文链接地址:https://www.wwsww.cn/btbjiaoxue/6249.html
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

标签:

相关文章阅读

2023年白银价格走势分析,白银投资方式2023年白银价格走势分析,白银投资方式
六大方面让你找到好的合约跟单交易六大方面让你找到好的合约跟单交易
搬砖套利干货:在熊市中也能获利3搬砖套利干货:在熊市中也能获利3
原来可以这样玩!五种在Axie Infinity边原来可以这样玩!五种在Axie Infinity边