2018年10月17日 星期三

編譯 Solidity 智能合約

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

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

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

{
	"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()替代方案

沒有留言: