Ethereum Dapp初心者之路(7): web3.eth.compile.solidity()替代方案

Solidity Code Compilation Output

我們使用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讓大家自己回去看。以上若有發現錯誤的地方,或者我的觀念有誤,拜託各位大大不吝嗇給於糾正。若有問題也歡迎留言在下面,我們可以一起討論尋找答案。希望這篇文章可以給各位有一點點的幫助,下篇見囉!


Reference:
[1] https://www.udemy.com/ethereum-dapp/
[2] https://github.com/ericxtang/browser-solc
[3] https://github.com/ksin751119/OnlineSolCompiler.git
[4] https://solidity.readthedocs.io/en/latest/installing-solidity.html

若您覺得我的文章有所幫助,歡迎按下「拍手」給我支持並轉發給你的朋友們!
若想請小弟喝杯咖啡也非常歡迎喔XD
BTC: 35wkJ1LvrjnqjxaUqfkx3XCnRrmiZv57XJ
ETH: 0xe5206a8d961a2af5d0be28549432db99e22c5be5
LTC: LYQFY4sKU8CWqae8DCQ8NTLcwZMazdHuKB

林瑋宸 Albert Lin

Written by

A Novice of Blockchain, Ethereum and Smart Contract.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade