Solidity智能合約的文件結(jié)構(gòu)

Solidity智能合約文件結(jié)構(gòu)

版本申明


pragma solidity ^0.4.0;

說明:
1 版本要高于0.4才可以編譯
2 ^號(hào)表示高于0.5的版本則不可編譯,第三位的版本號(hào)但可以變,留出來用做bug可以修復(fù)(如0.4.1的編譯器有bug,可在0.4.2修復(fù),現(xiàn)有合約不用改代碼)。

引用其它源文件

  • 全局引入 *

import “filename”;

  • 自定義命名空間引入 *

import * as symbolName from “filename”

分別定義引入


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

非es6兼容的簡(jiǎn)寫語法


import “filename” as symbolName

等同于上述


import * as symbolName from “filename”

關(guān)于路徑

引入文件路徑時(shí)要注意,非.打頭的路徑會(huì)被認(rèn)為是絕對(duì)路徑,所以要引用同目錄下的文件使用


import “./x” as x

也不要使用下述方式,這樣會(huì)是在一個(gè)全局的目錄下


import “x” as x;

為什么會(huì)有這個(gè)區(qū)別,是因?yàn)檫@取決于編譯器,如果解析路徑,通常來說目錄層級(jí)結(jié)構(gòu)并不與我們本地的文件一一對(duì)應(yīng),它非常有可能是通過ipfs,http,或git建立的一個(gè)網(wǎng)絡(luò)上的虛擬目錄。

編譯器解析引用文件機(jī)制

各編譯器提供了文件前綴映射機(jī)制。

  1. 可以將一個(gè)域名下的文件映射到本地,從而從本地的某個(gè)文件中讀取
  2. 提供對(duì)同一實(shí)現(xiàn)的不同版本的支持(可能某版本的實(shí)現(xiàn)前后不兼容,需要區(qū)分)
  3. 如果前綴相同,取最長(zhǎng),
  4. 有一個(gè)”fallback-remapping”機(jī)制,空串會(huì)映射到“/usr/local/include/solidify”

solc編譯器

命令行編譯器,通過下述命令命名空間映射提供支持


context:prefix=target

上述的context:=target是可選的。所有context目錄下的以prefix開頭的會(huì)被替換為target
舉例來說,如果你將github.com/ethereum/dapp-bin拷到本地的/usr/local/dapp-bin,并使用下述方式使用文件


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

要編譯這個(gè)文件,使用下述命令:


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

另一個(gè)更復(fù)雜的例子,如果你使用一個(gè)更舊版本的dapp-bin,舊版本在/url/local/dapp-bin_old,那么,你可以使用下述命令編譯


solc module1:github.com/ethereum/dapp-bin=/usr/local/dapp-bin  \
        modeule2:github.com/ethereum/dapp-bin=/usr/local/dapp-bin_old \
        source.sol

需要注意的是solc僅僅允許包含實(shí)際存在的文件。它必須存在于你重映射后目錄里,或其子目錄里。如果你想包含直接的絕對(duì)路徑包含,那么可以將命名空間重映射為=\
備注:如果有多個(gè)重映射指向了同一個(gè)文件,那么取最長(zhǎng)的那個(gè)文件。

browser-solidity編譯器:

browser-solidity編譯器默認(rèn)會(huì)自動(dòng)映射到github上,然后會(huì)自動(dòng)從網(wǎng)絡(luò)上檢索文件。例如:你可以通過下述方式引入一個(gè)迭代包:


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

備注:未來可能會(huì)支持其它的源碼方式

代碼注釋

兩種方式,單行(//),多行使用(/*…*/)

示例


// this is a single-line comment
/*
this is a
mulit-line comment
*/

文檔注釋

寫文檔用。三個(gè)斜杠////** … */,可使用Doxygen語法,以支持生成對(duì)文檔的說明,參數(shù)驗(yàn)證的注解,或者是在用戶調(diào)用這個(gè)函數(shù)時(shí),彈出來的確認(rèn)內(nèi)容。

示例


pragma solidity ^0.4.0;
/** @title Shape calculator.*/
contract shapeCalculator{
    /**
    *@dev calculate a rectangle's suface and perimeter

    *@param w width of the rectangles

    *@param h height of the rectangles

    *@return s surface of the rectangles

    *@return p perimeter of the rectangles

    */

    function rectangles(uint w, uint h) returns (uint s, uint p){

        s = w * h;

        p = 2 * ( w + h) ;

    }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,363評(píng)論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,497評(píng)論 3 416
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,305評(píng)論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,962評(píng)論 1 311
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,727評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,193評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,257評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,411評(píng)論 0 288
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,945評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,777評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,978評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,519評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,216評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評(píng)論 1 286
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,657評(píng)論 3 391
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,960評(píng)論 2 373

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,782評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,643評(píng)論 25 708
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,898評(píng)論 6 342
  • 一、溫故而知新 1. 內(nèi)存不夠怎么辦 內(nèi)存簡(jiǎn)單分配策略的問題地址空間不隔離內(nèi)存使用效率低程序運(yùn)行的地址不確定 關(guān)于...
    SeanCST閱讀 7,857評(píng)論 0 27
  • 耳邊懸掛著多少往事 才能使你聽到我的呢喃 紅木前寂寞的座椅 何時(shí)才...
    蘭格里閱讀 74評(píng)論 0 0