我们使用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放这里,想知道如何实作也欢迎点进去看看喔。