Structure of a Contract¶
Solidityのコントラクトはオブジェクト志向の言語のクラスに似ています。各コントラクトは State Variables、Functions、Function Modifiers、Events、Struct Types、Enum Types の宣言を含んでいます。更に、コントラクトは他のコントラクトを継承できます。
ライブラリ と インターフェース と呼ばれる特別な種類のコントラクトもあります。
コントラクト に関するセクションはより詳細な説明があります。このセクションは簡単な全体像です。
State Variables¶
状態変数とは値が永久的にコントラクトのストレージに保存される値です。
pragma solidity >=0.4.0 <0.6.0;
contract SimpleStorage {
uint storedData; // State variable
// ...
}
有効な状態変数のタイプは Types を、可視性の実行可能な選択肢については Visibility and Getters を参照ください。
Functions¶
ファンクションはコントラクト内にある実行可能なコードの一式です。
pragma solidity >=0.4.0 <0.6.0;
contract SimpleAuction {
function bid() public payable { // Function
// ...
}
}
Function Calls は内部でも外部でも行うことができ、他のコントラクトに対して異なったレベルの visibility を持ちます。パラメータや値を受け渡しするために、Functions は parameters and return variables を受け入れます。
Function Modifiers¶
ファンクションModifierは宣言的な方法でファンクションのセマンティクスを修正することができます(コントラクトセクションの Function Modifiers を参照ください)。
pragma solidity >=0.4.22 <0.6.0;
contract Purchase {
address public seller;
modifier onlySeller() { // Modifier
require(
msg.sender == seller,
"Only seller can call this."
);
_;
}
function abort() public view onlySeller { // Modifier usage
// ...
}
}
Events¶
イベントはEVMのロギング機能で使われる便利なインターフェースです。
pragma solidity >=0.4.21 <0.6.0;
contract SimpleAuction {
event HighestBidIncreased(address bidder, uint amount); // Event
function bid() public payable {
// ...
emit HighestBidIncreased(msg.sender, msg.value); // Triggering event
}
}
DApp内でイベントがどの様に宣言され、使用されるかはコントラクトセクションの Events を参照ください。