天天看點

solidity源檔案布局源檔案的布局

源檔案的布局

源檔案包括任意數量的合約定義和 include指令 引入其他源檔案

文法和語義

Solidity支援 import語句,非常類似于JavaScript(ES6),雖然Solidity不知道“預設導出”的概念。

在全局層次上,你可以用下列形式使用import語句

import "filename";            

将會從”filename”導入所有的全局符号(和目前導入的符号)到目前的全局範圍裡(不同于ES6,但是Solidity保持向後相容)

**import** ***** as symbolName from "filename";           

創立了一個全局的符号名 symbolName,其中的成員就來自“filename”的所有符号

import {symbol1 as alias, symbol2} from “filename”;            

将創立一個新的全局變量别名:alias 和 symbol2, 它将分别從”filename” 引入symbol1 和 symbol2

另外,Solidity文法不是ES6的子集,但可能(使用)更便利

import “filename” as symbolName;            

等價于 import * as symbolName from “filename”;.

路徑

  • 在上面,檔案名總是用/作為目錄分割符,. 是目前的目錄,.. 是父目錄,路徑名稱不用.開頭的都将視為絕對路徑。
  • 從同一個目錄下import 一個檔案 x 作為目前檔案,用 import ”./x” as x; 如果使用
  • import “x” as x; 是不同的檔案引用(在全局中使用”include directory”),。
  • 它将依賴于編譯器(見後)來解析路徑。通常,目錄層次不必嚴格限定映射到你的本地檔案系統,它也可以映射到ipfs,http或git上的其他資源

使用真正的編譯器

當編譯器啟動時,不僅可以定義如何找到第一個元素的路徑,也可能定義字首重映射的路徑,如 github.com/ethereum/dapp-bin/library将重映射到 /usr/local/dapp-bin/library ,編譯器将從這個路徑下讀取檔案。 如果重映射的keys是字首, (編譯器将嘗試)最長的路徑。允許回退并且映射到“/usr/local/include/solidity”。

solc:

solc(行指令編譯器),重映射将提供 key=值參數, =值 部分是可選的(預設就是key ) 。

所有重映射的正常檔案都将被編譯(包括他們的依賴檔案),這個機制完全向後相容(隻要沒有檔案名包含 a=) ,這不是一個很大的變化,

比如 ,如果你從 github.com/ethereum/dapp-bin/ 克隆到本地 /usr/local/dapp-bin, 你可以用下列源檔案
           

import “github.com/ethereum/dapp-bin/library/iterable_mapping.sol” as it_mapping;

運作編譯器時如下

solc github.com/ethereum/dapp-bin/=/usr/local/dapp-bin/ source.sol

注意: solc僅僅允許你從特定的目錄下include檔案,他們必須是一個顯式定義的,包含目錄或子目錄的源檔案, 或者是重映射目标的目錄(子目錄)。如果你允許直接include, 要增加remapping =/.

如果有多個重映射,就要做一個合法檔案,檔案中選擇最長的公共字首

基于浏覽器的solidity

基于浏覽器的編譯器提供了從github上的自動重映射,并且自動檢索網絡上的檔案,你可以import 疊代映射 如

import “github.com/ethereum/dapp-bin/library/iterable_mapping.sol” as it_mapping;.           

其他源代碼提供者可以以後增加進來。

注釋

可用單行注釋 (//) 和多行注釋 (/…/)

有種特别的注釋 叫做 “natspec ” (文檔以後寫出來),在函數聲明或定義的右邊用三個斜杠(///)或者用 兩個星号 (/* … /). 。如果想要調用一個函數,可以使用doxygen-style标簽裡面文檔功能,形式驗證,并提供一個确認條件的文本注釋顯示給使用者。

轉自:

https://github.com/twq0076262/solidity-zh/edit/master/layout-state-variables-storage.md
如果你希望高效的學習以太坊DApp開發,可以通路彙智網提供的最熱門線上互動教程:

其他更多内容也可以通路

這個以太坊部落格

繼續閱讀