1. 程式人生 > >使用修飾符讓Solidity開發以太坊有更好的可讀性

使用修飾符讓Solidity開發以太坊有更好的可讀性

修飾符是可以應用於其他函式的一個函式。在呼叫函式之前,確保滿足某些先決條件非常有用。我們舉一個簡單的例子,在我們已經寫過的合約中,我們經常要檢查函式的呼叫者是否是合約的所有者:

    function increment() public {
       if (owner == msg.sender) { // We check who calls the function
          count = count + 1;
       }
    }

想象一下,如果我們的智慧合約有多個只能由所有者呼叫的函式,那麼如果owner == msg.sender部分需要重構那麼怎麼做?這是修飾語將幫助我們的地方。讓我們看第一個修飾符:

    modifier isAdmin() {
        require(msg.sender == owner);
        _;
    }
 
    function increment() public isAdmin {
        count = count + 1;
    }

我們的修飾符看起來像一個函式。require()函式評估條件,如果不滿足條件將丟擲異常,這將停止執行我們的智慧合約。_關鍵字告訴編譯器用函式體替換_

與函式一樣,修飾符可以接受引數。假設我們可以擁有多個使用者,並希望檢查所有權,看下面的程式碼:

    modifier onlyBy(address _account) {
        require(msg.sender == _account);
        _;
    }
 
    function increment() public onlyBy(owner) {
        count = count + 1;
    }

正如你所看到的,我們的修飾符更通用,這讓我們可以做更多事。

你還可以編寫最通用的修飾符,只有在任何條件為真時才執行:

    modifier onlyIf(bool _condition) {
        require(_condition);
        _;
    }
 
    function increment() public onlyIf(msg.sender == owner) {
        count = count + 1;

通過在空格分隔的列表中指定多個修飾符,將多個修飾符應用於函式,並按所顯示的順序進行評估。

    modifier onlyIf(bool _condition) {
        require(_condition);
        _;
    }
 
    function increment() public onlyIf(msg.sender == owner) onlyIf(count < 200) {
        count = count + 1;
    }

在下一個教程中,我們將學習如何使用一個智慧合約來建立其他智慧合約並與之互動,用工廠模式管理多個solidity智慧合約

======================================================================

分享一些以太坊、EOS、比特幣等區塊鏈相關的互動式線上程式設計實戰教程:

  • java以太坊開發教程,主要是針對java和android程式設計師進行區塊鏈以太坊開發的web3j詳解。
  • python以太坊,主要是針對python工程師使用web3.py進行區塊鏈以太坊開發的詳解。
  • php以太坊,主要是介紹使用php進行智慧合約開發互動,進行賬號建立、交易、轉賬、代幣開發以及過濾器和交易等內容。
  • 以太坊入門教程,主要介紹智慧合約與dapp應用開發,適合入門。
  • 以太坊開發進階教程,主要是介紹使用node.js、mongodb、區塊鏈、ipfs實現去中心化電商DApp實戰,適合進階。
  • C#以太坊,主要講解如何使用C#開發基於.Net的以太坊應用,包括賬戶管理、狀態與交易、智慧合約開發與互動、過濾器和交易等。
  • EOS教程,本課程幫助你快速入門EOS區塊鏈去中心化應用的開發,內容涵蓋EOS工具鏈、賬戶與錢包、發行代幣、智慧合約開發與部署、使用程式碼與智慧合約互動等核心知識點,最後綜合運用各知識點完成一個便籤DApp的開發。
  • java比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈儲存、去中心化共識機制、金鑰與指令碼、交易與UTXO等,同時也詳細講解如何在Java程式碼中整合比特幣支援功能,例如建立地址、管理錢包、構造裸交易等,是Java工程師不可多得的比特幣開發學習課程。
  • php比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈儲存、去中心化共識機制、金鑰與指令碼、交易與UTXO等,同時也詳細講解如何在Php程式碼中整合比特幣支援功能,例如建立地址、管理錢包、構造裸交易等,是Php工程師不可多得的比特幣開發學習課程。
  • tendermint區塊鏈開發詳解,本課程適合希望使用tendermint進行區塊鏈開發的工程師,課程內容即包括tendermint應用開發模型中的核心概念,例如ABCI介面、默克爾樹、多版本狀態庫等,也包括代幣發行等豐富的實操程式碼,是go語言工程師快速入門區塊鏈開發的最佳選擇。