iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 12
0
Blockchain

以太坊-探索智能合約的多種面向系列 第 12

Day 12 智能合約(三) - 編譯 - 使用solc

  • 分享至 

  • xImage
  •  

Day 12 :
在Day 10的文章中,使用了SimpleStorage程式碼,說明了一些語法的功能,當撰寫好程式碼之後,在副檔名加上 .sol 透過編譯,輸出ABI與Binary組成的js檔,再透過客戶端發布至以太坊網路,透過EVM執行。

- 安裝 solc (系統 : Ubuntu )

  1. 打開Terminal,輸入 :
  2. sudo add-apt-repository ppa:ethereum/ethereum
  3. sudo apt-get update
  4. sudo apt-get install solc
  5. 再輸入 : which solc 確認是否安裝成功。

- 編譯
輸入 :
使用echo指令將編譯內容寫進SimpleStorage.js檔 :

echo `solc --optimize --combined-json abi,bin,interface SimpleStorage.sol` > SimpleStorage.js

使用cat指令觀看 SimpleStorage.js 內容 :

cat SimpleStorage.js

= > 顯示 :

{"contracts":{"SimpleStorage.sol:SimpleStorage":{"abi":"[{\"constant\":false,\"inputs\":[{\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"set\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}]","bin":"608060405234801561001057600080fd5b5060bf8061001f6000396000f30060806040526004361060485763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166360fe47b18114604d5780636d4ce63c146064575b600080fd5b348015605857600080fd5b5060626004356088565b005b348015606f57600080fd5b506076608d565b60408051918252519081900360200190f35b600055565b600054905600a165627a7a72305820de38e7fb1c9054802b9261cbdc522574f536564824ab5627c23f8be841d3e28e0029"}},"version":"0.4.25+commit.59dbf8f1.Linux.g++"}

-SimpleStorage.js 內容(以JSON檔的格式顯示)
abi (Application Binary Interface) :
可以看到每個Method的資訊 :
constant : Bool值,是否可以修改函數中的變數內容。
inputs : 輸入參數說明 :
name : 參數名稱。
type : 參數類型。
name : 函數名稱。
outputs : 輸出參數說明,組成方式與input相同。
payable : bool值,函數是否可以接受ether。
stateMutability : 有四種類型,分別為pure , view , payable , nonpayable。
type : Method的類型,分別為function , constructor , fallback, Default為function。

bin(binary) :
編譯後的二進位表示。


上一篇
Day 11 智能合約(二) - Coin
下一篇
Day 13 智能合約(三) - 佈署
系列文
以太坊-探索智能合約的多種面向20
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言