2018年10月17日 星期三

編譯 Solidity 智能合約

快速紀錄,因為需要讓 web3.py 使用合約,官方的範例是寫說可以用程式碼直接編譯,不過好像需要環境本身的支援,感覺很麻煩 XD。所以直接在 Windows 裝了 Solidity 的編譯程式 solc,然後執行以下的指令(假設要編譯的智能合約的檔名叫做 contract.sol):

1
solc --combined-json abi,bin contract.sol > contract.json

以上的指令會建立 abi,並把智能合約的原始碼編譯成 hex 表示的字串,然後寫成一個 JSON 檔。JSON 檔的格式大略會長成這樣:

1
2
3
4
5
6
7
8
9
10
11
12
13
{
    "contracts": {
        "./XXX.sol:XXX": {
            "abi": "....",
            "bin": "...."
        },
        "./OOO.sol:OOO": {
            "abi": "....",
            "bin": "...."
        }
    },
    "version": "0.4.25+commit.59dbf8f1.Windows.msvc"
}

在這個範例中,是假設要編譯的智能合約包含了超過一個合約,也就是智能合約會引用其他智能合約的狀況。因此編譯出來會有很多個合約一起包在這個 JSON 裡,而每個合約都會有 abi 和 bin 兩個 key,反映我們的指令要求的輸出 abi 和 bin。

參考資料
  1. Installing the Solidity Compiler
  2. Ethereum Dapp初心者之路(7): web3.eth.compile.solidity()替代方案

沒有留言: