修飾符是能夠應用於其餘函數的一個函數。在調用函數以前,確保知足某些先決條件很是有用。咱們舉一個簡單的例子,在咱們已經寫過的合約中,咱們常常要檢查函數的調用者是不是合約的全部者:php
function increment() public { if (owner == msg.sender) { // We check who calls the function count = count + 1; } }
想象一下,若是咱們的智能合約有多個只能由全部者調用的函數,那麼若是owner == msg.sender
部分須要重構那麼怎麼作?這是修飾語將幫助咱們的地方。讓咱們看第一個修飾符:java
modifier isAdmin() { require(msg.sender == owner); _; } function increment() public isAdmin { count = count + 1; }
咱們的修飾符看起來像一個函數。require()
函數評估條件,若是不知足條件將拋出異常,這將中止執行咱們的智能合約。_
關鍵字告訴編譯器用函數體替換_
。node
與函數同樣,修飾符能夠接受參數。假設咱們能夠擁有多個用戶,並但願檢查全部權,看下面的代碼:python
modifier onlyBy(address _account) { require(msg.sender == _account); _; } function increment() public onlyBy(owner) { count = count + 1; }
正如你所看到的,咱們的修飾符更通用,這讓咱們能夠作更多事。android
你還能夠編寫最通用的修飾符,只有在任何條件爲真時才運行:程序員
modifier onlyIf(bool _condition) { require(_condition); _; } function increment() public onlyIf(msg.sender == owner) { count = count + 1;
經過在空格分隔的列表中指定多個修飾符,將多個修飾符應用於函數,並按所顯示的順序進行評估。web
modifier onlyIf(bool _condition) { require(_condition); _; } function increment() public onlyIf(msg.sender == owner) onlyIf(count < 200) { count = count + 1; }
在下一個教程中,咱們將學習如何使用一個智能合約來建立其餘智能合約並與之交互,用工廠模式管理多個solidity智能合約。mongodb
======================================================================編程
分享一些以太坊、EOS、比特幣等區塊鏈相關的交互式在線編程實戰教程:app
- 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語言工程師快速入門區塊鏈開發的最佳選擇。
匯智網原創翻譯,轉載請標明出處。這裏是原文使用修飾符讓Solidity開發有更好的可讀性