Solidity言語学習ノート——31、インテリジェント契約の基本ファイル構造の概要


Solidityインテリジェント契約ファイル構造


コンパイラバージョン宣言:

pragma solidity ^0.4.0;

説明:
pragmaはsolidity 04を下回ることなくコンパイラにソースコードをどのように処理するかを示すバージョンの雑注のコンパイルコマンドである.0のバージョンですが、0.5.0以下のコンパイラで作成されています.

その他のソースファイルを参照

  • グローバル導入
  • import “filename”;
  • カスタムネーミングスペース導入
  • import * as symbolName from “filename”
  • それぞれ定義導入
  • import  {symbol1 as alias, symbol2} from “filename”

    非es 6互換の略語構文
    import “filename” as symbolName

    上記と同等
    import * as symbolName from “filename”

    パスについて


    ファイルパスを導入する際に注意が必要です.」の先頭のパスは絶対パスとみなされるので、同じディレクトリの下のファイルを参照して使用します.
    import “./x” as x

    次の方法も使用しないでください.これはグローバルなディレクトリの下にあります.
    import “x” as x;

    なぜこの違いがあるのかは、コンパイラによって異なります.解析パスの場合、通常、ディレクトリ階層構造はローカルのファイルに1つ1つ対応していません.ipfs、http、gitによって構築されたネットワーク上の仮想ディレクトリである可能性が高いからです.

    コンパイラ解析リファレンスファイルメカニズム


    各コンパイラは、ファイル接頭辞マッピングメカニズムを提供します.
  • は、ドメイン名の下のファイルをローカルにマッピングし、ローカルのファイルから
  • を読み出すことができる.
  • は、同じ実装の異なるバージョンのサポート(あるバージョンの実習前後が互換性がなく、区別が必要である可能性がある)
  • を提供する.
  • 接頭辞が同じ場合、最長
  • をとる.
  • には「faceback-remapping」メカニズムがあり、空白列は「/usr/local/include/solidity」
  • にマッピングされます.

    Solcコンパイラ


    コマンドラインコンパイラ、次のコマンドネーミングスペースマッピングでサポート
    context:prefix=target

    上記のcontext:および=targetはオプションです.すべてのcontextディレクトリの下のprefixで始まるものはtargetに置き換えられます
    たとえば、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

    もう1つのより複雑な例では、より古いバージョンのdapp-binを使用し、古いバージョンが「/usr/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

    メモ:将来、他のソースコードがサポートされる可能性があります.

    コードコメント


    2つの方法、1行コメント(//)、複数行コメント(/*......*/)
    例:
    // this is a single-line comment
    /*
        this is a
        mulit-line comment
    */
    

    ドキュメントコメント


    文書作成用.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) ;
        }
    }

    インテリジェント契約ソースファイルの基本要素

  • 契約は、オブジェクト向け言語のクラスに似ています.
  • は、
  • の継承をサポートします.
    各契約には、ステータス変数(State Variables)、関数(function)、関数修飾子(Function modifiers)、イベント(Event)、構造タイプ(struct types)、列挙タイプ(Enum Type)を含めることができます.

    ステータス変数(state Variable)


    変数値は、契約内のストレージ領域に永遠に存在します.
    pragma solidity ^0.4.0;
    
    // simple store example
    contract simpleStorage{
        uint valueStore;   //state variable
    
    }

    詳細は「タイプ(type)」の項を参照し、サポートされているすべてのタイプと変数に関する可視性(Visibility and Accessors)について説明する.

    関数(Function)


    インテリジェント契約の実行可能ユニット
    pragma solidity ^0.4.0;
    
    contract simpleMath{
        //Simple add function,try a divide action?
        function add(uint x, uint y) returns (uint z){
            z = x + y;
        }
    }
    

    上記の例は簡単な加算関数を示している.
    関数呼び出しは、内部(internal)および外部(External)に設定できます.同時に、他の契約の異なるレベルの可視性とアクセス制御(Visibility and Accessors)について.詳細については、後述のタイプの関数に関する章を参照してください.

    関数修飾子(Function Modifiers)


    関数修飾子は、意味を強化するために使用されます.主にpublic、private、internal、externalなどがあり、後の内容で詳しくお話しします.

    イベント(Events)


    イベントは、イーサー坊仮想マシン(EVM)ログインフラストラクチャの便利なインタフェースです.現在発生しているイベントを取得します.
    例:
    pragma solidity ^0.4.0;
    contract SimpleAuction {
    
        event aNewHigherBid(address bidder, uint amount);
     
        function  bid(uint bidValue) external {
            aNewHigherBid(msg.sender, msg.value);
        }
    }

    イベントがどのように宣言され、どのように使用されるかについては、後述する.

    Struct types


    いくつかの変数を組み合わせて作成される新しいデータ型をカスタマイズします.
    例:
    pragma solidity ^0.4.0;
    contract Company {
        //user defined `Employee` struct type
        //group with serveral variables
        
       struct employee{
            string name;
            uint age;
            uint salary;
        }
        
        //User defined `manager` struct type
        //group with serveral variables
        struct manager{
            employee employ;
            string title;
        }
    }

    列挙タイプ


    特殊なカスタムタイプで、タイプのすべての値が列挙できる場合.詳しくは後続の章を参照してください.
    例:
    pragma solidity ^0.4.0;
    
    contract Home {
        enum Switch{On,Off}
    }

    コンテンツ参照先:Solidity翻訳ドキュメント