很多假設的知識在任何地方都沒有得到很好的解釋。例如將外部合約和庫匯入到智慧合約中。
您可能很確切地知道智慧合約的作用並且您的對於智慧合約的使用也非常得心應手,但是實際匯入它的語義是一個障礙。
在早段時間,我記得複製和貼上庫程式碼到我的.sol檔案中作為一個良好的解決方法。
本文介紹瞭如何將外部智慧合約或庫匯入到智慧合約中。
從Remix開始
您進行智慧合約開發的第一步很可能是使用Remix線上IDE。這是一款非常出色的編譯工具,可讓你快速地訪問Solidity編譯器,因此您可以更快上手學習該語言。
一旦你對於使用Solidity充滿信心,您就會希望在桌面IDE的本地環境中進行開發。將程式碼放在專案目錄中,在本地執行,允許快速開發,並允許使用版本控制和開放原始碼。
這就是Truffle Suite的來源。
它將所有程式碼儲存在一個地方,而不需要太多配置,而且獲得基本工作的學習曲線非常淺。
下次建立包含智慧合約的新專案時,請從Truffle開始。讓我們開始做吧…
Node
Truffle在Node.js上執行,如果尚未安裝,請轉到其網站並按照安裝說明進行操作。
Truffle
使用節點軟體包管理器(npm)透過執行以下命令安裝Truffle:
npminstall-gtruffle
文字編輯器
確保您安裝了最新的文字編輯器。我正在使用VS Code。
安裝完所有內容後,導航到您首選的工作空間並建立一個新目錄,該目錄將存放我們的Truffle專案,然後初始化一個Truffle專案:
mkdirmy-projectcdmy-project/truffleinit
在文字編輯器中開啟新的專案目錄。您的資料夾結構應該如圖1所示。應該有三個子目錄:contract/、migrations/和test/;以及一個檔案:truffle-配置js.
contract/是儲存Solidity智慧合約程式碼的位置。Truffle知道在這裡尋找編譯和遷移到區塊鏈的.sol檔案。
migrations/是我們的遷移邏輯所在。在這裡,我們可以描述部署智慧合約的正確部署它們時所需的步驟。
test/是我們為智慧合約編寫的地方,以確保它們按預期執行。
truffle-config.js包含有關Truffle框架的網路,編譯器,檔案位置和其他自定義配置的資訊,以瞭解我們所處的位置。
安裝和匯入
OpenZeppelin是以太坊智慧合約的黃金標準可重用儲存庫。在此專案中,我們將安裝智慧合約repo作為依賴項,然後匯入Ownable合約,這樣我們就可以限制對某些函式的訪問。
你可能以前見過或使用過類似的模式。初始化智慧合約後,msg.sender地址將儲存在指示合約所有者的狀態變數中。使用自定義修飾符_onlyOwner,某些功能透過要求msg.sender等於所有者來限制訪問。
在儲存庫根目錄中,執行:
npminstall@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顯示了完成所有這些之後的框架智慧合約。
pragmasolidity^0.6.0;import"openzeppelin-solidity/contracts/access/Ownable.sol";cont
在此合同中編寫新功能時,我們可以在public,private,internal或external修飾符之後新增onlyOwner修飾符,以宣告該功能僅應由所有者執行。
這是一個簡單的示例:
//ThisfunctionhasnorestrictionsonwhocancallitfunctionnoRestrictions()public{...}//Thisfunctionisrestrictedonlytotheowner.Anyoneelse//whotriestocallitwillresultinarevertedtransactionfunctionrestrictedFunction()publiconlyOwner{...}
為確保智慧合約在新增新的受限功能後能夠編譯,請執行:
trufflecompile
如果一切順利,您可以開始將智慧合約遷移到本地區塊鏈,編寫測試並部署到公共測試網!