天天看點

智能合約從入門到精通:Solidity語言的開發規範和開發流程

簡介:上面介紹的在Solidity中嵌入的内聯彙編語言也可以單獨使用。實際上,它是被計劃用來作為編譯器的一種中間語言。本文我們将介紹開發智能合約過程中Solidity語言的開發規範和開發流程。

Solidity作為編譯器的一種中間語言。在開發智能合約時需要遵守相應的開發規範和開發流程。

開發規範

命名規範

目錄和檔案

  • 目錄使用小寫,請勿使用特殊符号;
  • 庫檔案和合約檔案統一以.sol為字尾;
  • 合約檔案名保持與合約名一緻;
  • 檔案名采用駝峰命名(首字母大寫);

合約、庫檔案命名

  • 合約名采用駝峰命名(首字元大寫),例如:UserManager、ActionManager;
  • 方法的命名使用駝峰法(首字母小寫),例如:getNumber;
  • 屬性的命名使用駝峰法(首字母小寫),例如:userName;
  • 以雙下劃線__打頭的函數或方法作為内部合約調用方法;
  • 合約library庫命名以字首Lib+結構體名稱,如:LibUser、LibAction;

常量和配置

  • 常量以大寫字母和下劃線命名,例如 APP_PATH;
  • 配置參數以小寫字母和下劃線命名,例如url_route_on和url_convert;

目錄結構

|-app(truffle服務目錄)
|-contracts(合約目錄)                    
|  └─interfaces(抽象合約目錄)                   
|                  
|  └─library(結構解析庫目錄)                    
|     
|  └─sysbase(公共合約目錄)                
|     |-OwnerNamed.sol(基礎合約,所有使用者業務合約,必須繼承此基礎合約)       
|     └─BaseModule.sol  
|        
|  └─utillib(工具庫目錄)                    
|     |-LibDB.sol
|     |-LibDecode.sol
|     |-LibInt.sol
|     |-LibJson.sol
|     |-LibLog.sol
|     |-LibNIZK.sol
|     |-LibNizkParam.sol
|     |-LibPaillier.sol
|     |-LibStack.sol
|     |-LibString.sol
|     └─Strings.sol
|  
|-migrations(truffle釋出配置目錄)
|-test(測試腳本目錄)
|-truffle.js
Copy
           

正常開發中,使用目錄對合約檔案的功能進行分類,下面逐一介紹功能:

  • contracts truffle 标準工作目錄中的合約目錄,合約存放在此目錄下,如:UserManager.sol;
  • interfaces 存放抽象合約,如:IConsumerManager.sol;
  • library 存放struct結構庫檔案;
  • sysbase 存儲公共合約目錄,例如:OwnerNamed.sol;
  • utillib 存放工具庫,如:LibString.sol, LibLog.sol;

開發流程

  • 合約接口定義

按照良好的程式設計習慣,在編寫業務方法前,首先定義接口,并傳遞給調用者。

  • 資料結構定義

使用者定義的合約接口中,如果有比較複雜的輸入/輸出資料,就有必要提前定義一些資料結構,并提供操作這些資料結構的一些常用方法(主要是一些序列化成JSON字元串的方法)。

  • 業務合約編寫

實作合約接口定義,并實作使用者的業務邏輯。在業務合約的構造函數中,需要把業務合約注冊到子產品合約中。

如果使用者隻是想編寫業務合約,做學習,測試用,則可以把業務合約注冊到"juzix.io.debugModule"這個特殊名稱的子產品合約中,則使用者可以不需要編寫子產品合約,進而在JUICE用戶端IDE中直接調用業務合約的方法。

  • 子產品合約編寫

編寫子產品合約,這是JUICE開放服務平台的要求,以便管理使用者的DAPP應用、業務合約。在子產品合約的構造函數中,需要把子產品合約注冊到鍊上,并在構造函數中說明子產品合約将會使用到的所有業務合約。

使用者編寫了子產品合約、并部署到JUICE區塊鍊後,子產品的名稱将會顯示在JUICE開放服務平台的“我的應用”中,點選“我的應用”的某個應用,将會跳轉到使用者開放的DAPP應用。如何設定應用的跳轉URL,參考子產品合約編寫

 https://open.juzix.net/api_doc/part03/example/modules.md

  • 編譯部署、測試

通過JUICE用戶端,或者線上IDE,都可以完成編譯、部署、測試使用者合約。

參考内容:https://open.juzix.net/doc

智能合約開發教程視訊:區塊鍊系列視訊課程之智能合約簡介