iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 9
0

小明一早與各團隊主管開完會後,開始思考交易所跟行銷獎勵兩個 POC 的可行性。不過無論是哪個 DApp 應用都會建構在智能合約的基礎上,因此他決定先深入學習以太坊上智能合約的主流開發語言 - Solidity。

Solidity 與其他程式語言無太大差異,它是一種靜態型別的程式語言。用於開發在以太坊虛擬機(EVM)上執行的智慧型合約,並編譯為可在 EVM 上執行的位元組碼。使用 Solidity,能夠編寫出可自我執行商業邏輯的應用程式,且是經部署後便永不可修改程式碼的交易合約。最新的官方文件可參考 https://solidity.readthedocs.io/

Solidity 的語法與 JavaScript 相似,且是一種物件導向的語言。
而一個智能合約的組成必要元素有:

  1. 版本宣告 pragma solidity ^0..;
  2. 宣告一個合約 contract 合約名稱{...},contract 就像物件導向語言中的 class 類別相似,同時也支援繼承。
pragma solidity ^0.4.25; //宣告版本要高於0.4.25才可編譯

contract HelloWorld{
    address creator;
    string message;

    //合約的建構函式
    constructor() public {
        creator = msg.sender;
    }

    //可公開(public)呼叫並回傳字串(string)型別的無傳入參數之函式
    function say() public constant returns (string)  {
        return message;
    }

    function setMessage(string _newMsg) public {
        message = _newMsg;
    }

    function kill() public { 
        if (msg.sender == creator)
            selfdestruct(creator); //銷毀合約並將合約內的金額轉回給合約創建者地址
    }

}

熟悉多種程式語言的小明覺得 Solidity 程式語法非常容易入門,主要的差異還是在於智能合約去中心化的特性:

  1. 以太坊底層是基於帳戶,而非UTXO的,所以有一個特殊的Address的類型。用於定位用戶,定位合約,及定位合約的程式碼(合約本身也是一個帳戶)。
  2. 由於智能合約支援支付功能,所以提供了相關功能的關鍵字,如payable,可以在程式語言中使用支付功能。
  3. 智能合約的資料儲存是使用網絡上的區塊鏈,變數資料的每一個狀態都可以永久存儲,所以開發時需要確定變數要使用記憶體暫存,還是永久儲存在區塊鏈上。
  4. 智能合約程式執行環境是在去中心化的網路上,所以為了避免數據不一致。一旦出現異常,所有的執行都將會被撤銷。

本文同時發佈於作者部落格:https://www.bdetw.com/blockchain-dapps-solidity/


/images/emoticon/emoticon34.gif想找區塊鏈人才或想學習區塊鏈知識的夥伴。歡迎參加社群小聚,一起來輕鬆交流、互相學習成長、認識新朋友、發現新機會!
 
台北區塊鏈社群
https://bitlly.co/Q4dIK
 
BDE 區塊鏈學院 - 讓每個企業都懂區塊鏈。
https://bitlly.co/mbDwX


上一篇
08. 區塊鏈應用 POC
下一篇
10. 智能合約開發環境 Remix
系列文
區塊鏈應用開發實戰30

尚未有邦友留言

立即登入留言