Structure of a Contract

Solidityのコントラクトはオブジェクト志向の言語のクラスに似ています。各コントラクトは State VariablesFunctionsFunction ModifiersEventsStruct TypesEnum 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 を持ちます。パラメータや値を受け渡しするために、Functionsparameters 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 を参照ください。

Struct Types

構造体は複数の変数をグループ化できるカスタム定義されたタイプです (タイプセクションの Structs を参照下さい)。

pragma solidity >=0.4.0 <0.6.0;

contract Ballot {
    struct Voter { // Struct
        uint weight;
        bool voted;
        address delegate;
        uint vote;
    }
}

Enum Types

Enumsは有限個の'constant values'を持つカスタムタイプを作成するのに使用されます(タイプセクションの Enums を参照ください)。

pragma solidity >=0.4.0 <0.6.0;

contract Purchase {
    enum State { Created, Locked, Inactive } // Enum
}