在文字編輯器中開啟新的專案目錄。您的資料夾結構應該如圖1所示。應該有三個子目錄:contract/、migrations/和test/;以及一個檔案:truffle-配置js.
· contract/是儲存Solidity智慧合約程式碼的位置。Truffle知道在這裡尋找編譯和遷移到區塊鏈的.sol檔案。
· migrations/是我們的遷移邏輯所在。在這裡,我們可以描述部署智慧合約的正確部署它們時所需的步驟。
· test/是我們為智慧合約編寫的地方,以確保它們按預期執行。
· truffle-config.js包含有關Truffle框架的網路,編譯器,檔案位置和其他自定義配置的資訊,以瞭解我們所處的位置。
安裝和匯入
OpenZeppelin是以太坊智慧合約的黃金標準可重用儲存庫。在此專案中,我們將安裝智慧合約repo作為依賴項,然後匯入Ownable合約,這樣我們就可以限制對某些函式的訪問。
你可能以前見過或使用過類似的模式。初始化智慧合約後,msg.sender地址將儲存在指示合約所有者的狀態變數中。使用自定義修飾符_onlyOwner,某些功能透過要求msg.sender等於所有者來限制訪問。
在儲存庫根目錄中,執行:
npm install @openzeppelin/contracts --save
完成後,您應該會在根目錄中看到一個名為node_modules的新資料夾。
在node_modules中,npm下載了OpenZeppelin/contracts儲存庫,其中包含OpenZeppelin必須提供的所有合約和庫。
我們將使用Ownable合約,該合約從專案根目錄位於@openzeppelin-solidity/contracts/access/Ownable.sol中。
在合約/資料夾中,建立一個新的Solidity檔案,該檔案將匯入Ownable合約。我將其命名為TestContract.sol。
首先要宣告Solidity編譯器版本,我們使用的是0.6.0;那麼我們需要使用找到的路徑匯入Ownable合約;最後我們需要宣告合約,並且合約應來自Ownable。
圖2顯示了完成所有這些之後的框架智慧合約。
pragma solidity ^0.6.0;
import "openzeppelin-solidity/contracts/access/Ownable.sol";
cont
在此合同中編寫新功能時,我們可以在public,private,internal或external修飾符之後新增onlyOwner修飾符,以宣告該功能僅應由所有者執行。
這是一個簡單的示例:
// This function has no restrictions on who can call it
function noRestrictions() public { ... }
// This function is restricted only to the owner. Anyone else
// who tries to call it will result in a reverted transaction
function restrictedFunction() public onlyOwner { ... }
為確保智慧合約在新增新的受限功能後能夠編譯,請執行:
truffle compile
如果一切順利,您可以開始將智慧合約遷移到本地區塊鏈,編寫測試並部署到公共測試網!