Solidity言語学習ノート——31、インテリジェント契約の基本ファイル構造の概要
5456 ワード
Solidityインテリジェント契約ファイル構造
コンパイラバージョン宣言:
pragma solidity ^0.4.0;
説明:
pragmaはsolidity 04を下回ることなくコンパイラにソースコードをどのように処理するかを示すバージョンの雑注のコンパイルコマンドである.0のバージョンですが、0.5.0以下のコンパイラで作成されています.
その他のソースファイルを参照
pragma solidity ^0.4.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によって構築されたネットワーク上の仮想ディレクトリである可能性が高いからです.
コンパイラ解析リファレンスファイルメカニズム
各コンパイラは、ファイル接頭辞マッピングメカニズムを提供します.
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翻訳ドキュメント