solidity學習1

solidity智能合約文件結構

版本聲明

pragma solidity ^0.4.0;

說明:
1. 版本要高於0.4纔可以編譯
2. 表示高於0.5的版本則不可編譯,第三位的版本號可以變,流出來用作bug修復(如0.4.1的編譯器有bug,可在0.4.2修復,現有合約不用改代碼)。

引用其它源文件

  • 全局引入
import "filename";
  • 自定義命名空間引入
import *as symbolName from "filename"
  • 分別定義引入
import {symbol1 as alias,symbol2} from "filename"
  • 非es6兼容的簡寫語法
import "filename" as symbolName
  • 等同於上述
import *as symbolName from "filename"
關於路徑

引入文件路徑時要注意,非.打頭的路徑會被認爲是絕對路徑,所以要引用同目錄下的文件使用

import "./x" as x;

也不要使用下述方式,這樣會是在一個全局的目錄下

import "x" as x;

爲什麼會有這個區別,是因爲這取決於編譯器,如果解析路徑,通常來說目錄層級結構並不與我們本地的文件一一對應,它非常有可能是通過ipfs,http或git建立的一個網絡上的虛擬目錄。

編譯器解析引用文件機制

各編譯器提供了文件前綴映射機制。
1. 可以將一個域名下的文件映射到本地,從而本地的某個文件中讀取
2. 提供對同一實現的的不同版本的支持(可能某版本的實現前後不兼容,需要區分)
3. 如果前綴相同,取最長
4. 有一個fallback-remapping機制,空串會映射到“/usr/local/include/solidify”

solc編譯器

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

context:prefix=target

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

import "github.com/ethereum/dapp-bin/library/iterable_maping.sol" as it_mapping;

要編譯這個文件,使用下述命令:

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

另一個更復雜的例子,如果你使用一個更舊版本的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僅僅允許包含實際存在的文件。它必須存在於你重映射後目錄裏,或其子目錄裏。如果你想包含直接的絕對路徑包含,那麼可以將命名空間重映射爲=\
備註:如果有多個重映射指向了同一個文件,那麼取最長的那個文件。

browser-solidity編譯器

browser-solidity編譯器默認會自動映射到github上,然後會自動從網絡上檢索文件。例如:你可以通過下述方式引入一個迭代包:

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

備註:未來可能會支持其他的源碼方式

代碼註釋

兩種方式,單行(//),多行(/**/
示例


// 這是一行註釋
/*
這是
多行註釋
*/

文檔註釋

寫文檔用三個斜槓////**...*/,可以使用Doxygen語法,以支持生成對文檔的說明,參數體驗的註解,或者是在用戶調用這個函數式,彈出來的確認內容。
示例

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) ;

    }

}

本文章轉載地址:http://www.tryblockchain.org/Solidity%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6%E6%96%87%E4%BB%B6%E7%BB%93%E6%9E%84.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章