iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 13
1
Blockchain

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

Day 13 智能合約(三) - 佈署

Day 13 :
在Day12 編譯了SimpleStorage合約之後,在Terminal中啟動geth控制台,佈署合約並呼叫測試。
-開啟geth 控制台
解鎖佈署合約的帳戶 :

personal.unlockAccount(eth.accounts[0],”123456”)

-佈署合約
輸入:

> var simplecontract = eth.contract(JSON.parse("[{\"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\"}]")).new({from:eth.accounts[0],data:"0x608060405234801561001057600080fd5b5060bf8061001f6000396000f30060806040526004361060485763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166360fe47b18114604d5780636d4ce63c146064575b600080fd5b348015605857600080fd5b5060626004356088565b005b348015606f57600080fd5b506076608d565b60408051918252519081900360200190f35b600055565b600054905600a165627a7a723058201b1ac848def04a12fe60651863449af427bb408c4d623d63684777366daedfeb0029",gas:5000000});

說明 :
var simplecontract (將simplecontract設定成返回的合約地址)
eth.contract().new() :
1.參數為合約的abi內容,。
2. from=佈署合約的帳戶,data=合約中的二進制碼,因為是以十六進位表示,作為參數傳入時要加上0x
為開頭,gas=佈署合約的手續費。
JSON.parse() :
將JSON字串解析為物件。

- 查看合約內容
輸入 :

> simplecontract
{
  abi: [{
      constant: false,
      inputs: [{...}],
      name: "set",
      outputs: [],
      payable: false,
      stateMutability: "nonpayable",
      type: "function"
  }, {
      constant: true,
      inputs: [],
      name: "get",
      outputs: [{...}],
      payable: false,
      stateMutability: "view",
      type: "function"
  }],
  address: undefined,
  transactionHash: "0x47bd325bcdaaebad6469416957c3cc3aa6df16fa57747d30eedd6a084a19eb6e"
}

合約資訊和交易雜湊值,因為交易還沒有被確認,所以address還是未定義的。

-查看交易

> txpool.inspect.pending
{
  0x4ca5F4A1612EBe48d8E48c7dF7B2f0d2839EbC56: {
    2: "contract creation: 0 wei + 5000000 gas × 1000000000 wei"
  }
}

交易尚在緩衝區中等待。

- 確認交易 ,開啟挖礦

> miner.start(1);admin.sleepBlocks(1);miner.stop();

挖礦成功之後,查看合約。

-查看合約內容

> simplecontract
{
  abi: [{
      constant: false,
      inputs: [{...}],
      name: "set",
      outputs: [],
      payable: false,
      stateMutability: "nonpayable",
      type: "function"
  }, {
      constant: true,
      inputs: [],
      name: "get",
      outputs: [{...}],
      payable: false,
      stateMutability: "view",
      type: "function"
  }],
  address: "0x2231a1d1e604cac2eb0ac86680a5384d3c940c16",
  transactionHash: "0x47bd325bcdaaebad6469416957c3cc3aa6df16fa57747d30eedd6a084a19eb6e",
  allEvents: function(),
  get: function(),
  set: function()
}

在合約佈署成功之後,會出現合約地址和可以呼叫的Method。


上一篇
Day 12 智能合約(三) - 編譯 - 使用solc
下一篇
Day 14 智能合約(三) - 交互
系列文
以太坊-探索智能合約的多種面向20
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言