名稱
Market Cap
Price
Change(24h)
Price Graph(7d)
不是全端工程師也可以10分鐘寫出智能合約
區塊鏈議題這兩年打得火熱,人人都被新技術、ICO爆富話題吸引目光,而其中最關鍵的核心莫過於智能合約的撰寫,智能合約的好壞甚至也被納為評斷ICO的標準之一。
作者:加密卡麥隆
2018-07-19

點擊查看今日新聞要點

講起來阿雜、作起來複雜,儘管同時牽扯到前後端語言以及以太坊節點的設置,但我們仍然可以萬變不離其宗,先作出點小東西來玩玩,增加增加一點信心先!

看完這篇文章你可以了解到以下幾點:
1) 如何於私人節點上建立一簡單可溝通的智能合約 (用Remix 執行Solidity)
2) 如何用你我都會的html 網頁與私人節點裡的智能合約進行溝通 (用web3.js)

*了解以上項目只需要花你10分鐘的時間*

*此篇教學文章會與先前的文章有關聯,在此之前,建議先了解過:15分鐘建立你的私人區塊鏈

第一步:撰寫一簡單易讀的智能合約

重點1:此合約需有將資料寫入及從合約讀取資料的功能

使用Solidity 撰寫的簡單範例如下:

pragma solidity ^0.4.18;
contract sample {
 string public name = "mibinews";
 function set(string _name) {
    name = _name;
 }
 
 function get() constant returns (string) {
   return name;
 }
}

從這裡可以看出來,此段合約程式裡包含了3個主要的部份

  1. 全域變數:name
  2. 寫入/更新變數的Function:set
  3. 讀取合約變數的Function:get
重點2:複製範例程式至Remix

Remix 是Solidity 官方的線上IDE,可用來編譯程式及將合約寫入節點

*Solidity 的基本介紹請見 Solidity 的維基百科

  1. 關閉Remix 的範例(ballot.sol)
  2. 開啟一個新的sol檔案
  3. 複製貼上範例程式碼並儲存成sample.sol

第二步:開啟其中一個之前練習時所建立的以太坊節點

重點1:使用適當的指令進入geth console 模式
$ geth --nodiscover --rpc --rpcaddr "0.0.0.0" --rpcport "8545" --rpccorsdomain "*" console 2>>process.log

指令說明:

  1. rpc : 開啟Remote Procedure Call 模式
  2. rpcaddr : 指定可使用rpc 的來源IP。0.0.0.0 為不限制連線來源
  3. rpcport:指定可使用rpc 的port (預設為8545)
  4. rpccorsdomain:指定可連線rpc 的網址,* 代表不限制 (如果向rpc 發出需求的是一個網頁,則此參數需作設定)
重點2:讓節點進入挖礦狀態

節點進入挖礦狀態才能讓合約被建立及寫入資料至合約

> miner.start()

第三步:使用Remix 將合約建立於私人節點

重點1:讓Remix 連上私人節點

選擇"Run" 這個tab,並且在Environment 的下拉選單選擇"Web3 Provider"

輸入節點 http://IP:port 並按OK

*特別注意:如果此時remix 的網址protocol 是https 會造成無法連上只有支援http 的節點。解法:只要把remix 的網址改成用http 即可*

重點2:送出合約至私人節點

記得送出合約前要先作的2件事:
1) unlock coinbase account
2) start miner

合約建立完成,可點擊複製icon 先把合約地址記下,待會用得到!

第四步:此時節點與合約已準備完畢,需於另一台主機開啟一個網頁

重點1:於此網頁路徑下安裝web3.js

我們在這裡採用npm 安裝 (npm相關安裝及介紹)

此指令會協助你建立所需要package.json 檔案(基本上就是一直enter 即可完成package initial )

$ npm init

安裝web3.js

$ npm install ethereum/web3.js --save
重點2:建立一個基本可與合約互動的網頁

網頁範例:


 

 

 

Simple Web3 Communication


 

 

 

 

Simple Contract Testing


 
 

 
 

 

1. 輸入想要寫進合約的字串


 
 

 
Set

 

 

2. 讀取目前合約裡最新一筆字串資料


 
 

 
 
目前的資料是: 

 
Get

 

 

 

 

啟用網頁時的樣子如下:

此時需於網頁裡加入web3.js 的程式碼,讓它與合約進行溝通

將以下程式碼放置於之後


 

此範例程式碼還需完成2件事情

  1. 放入合約的地址(前面步驟有要求先進行複製)
  2. 放入合約的ABI程式碼 (請見下方截圖找到ABI)
  3. 放入要執行此互動行為的帳號(在這裡指的是eth.coinbase 也就是創始帳號)

重點3:開始用此頁面與節點的智能合約溝通
  1. 先點擊Get button:會發現此時顯示的是合約預設回傳的字串mibinews

2. 輸入想寫進合約的字串後,再點擊Set button,此時"密幣電報" 4 個字會被寫進合約裡

3. 過一陣子再點擊Get button,會發現回傳的字串由"mibinews" 變成 "密幣電報" 了(把字串寫進合約的行為被視為一種transction ,故此時需要等待一些時間,讓節點挖礦,處理完此筆交易)

看到此結果,表示我們已經成功

  1. 用Remix 發佈一合約至私人節點
  2. 用存在於A主機的網頁,寫入資料並讀取B節點主機上的智能合約

就這樣!是不是很簡單啊!!

以上就是本次的教學文章,希望藉由簡單的程式與互動,能讓大家更了解與智能合約溝通的方式

想要了解與智能合約相關的技術,歡迎提出討論,也請大家持續支持關注密幣電報 :)


持續追蹤,強化認知

我們打從心裏認定密幣電報是你的最佳選擇,密幣電報提供的資訊有幾種

  1. 踏入幣圈的最短捷徑,3句話讓你快速吸收幣圈即時新聞
  2. 到底該對誰有信心?每週五提供您國際唯一虛擬貨幣評價資訊,強化你的分析觀點
  3. 不可錯過的幣圈資訊,都將持續以深入淺出的角度為您解析
加入密幣電報 Line@頻道
加入密幣電報 Telegram