Structure d’un contrat

Les contrats Solidity sont similaires à des classes dans des langages orientés objet. Chaque contrat peut contenir des déclarations de Variables d’état, structure-fonctions, structure-fonction-modificateurs, structure-événements, Types Structure et Types Enum. De plus, les contrats peuvent hériter d’autres contrats.

Il existe également des types de contrats spéciaux appelés libraries et interfaces.

La section sur les contrats contient plus de détails que cette section, qui permet d’avoir une vue d’ensemble rapide.

Variables d’état

Les variables d’état sont des variables dont les valeurs sont stockées en permanence dans le storage du contrat.

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.0 <0.7.0;

contract SimpleStorage {
    uint storedData; // State variable
    // ...
}

Voir la section Types pour les types de variables d’état valides et Visibilité et Getters pour les choix possibles de visibilité.

Fonctions

Les fonctions sont les unités exécutables du code d’un contrat.

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.0 <0.7.0;

contract SimpleAuction {
    function bid() public payable { // Function
        // ...
    }
}

Les Appels de fonction peuvent se faire en interne ou en externe et ont différents niveaux de visibilité pour d’autres contrats. Functions accept parameters and return variables to pass parameters and values between them.

Modificateurs de fonction

Les modificateurs de fonction peuvent être utilisés pour modifier la sémantique des fonctions d’une manière déclarative (voir Modificateurs de fonctions dans la section contrats).

Overloading, that is, having the same modifier name with different parameters, is not possible.

Like functions, modifiers can be overridden.

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.22 <0.7.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
        // ...
    }
}

Évènements

Les évènements (event) sont une interface d’accès aux fonctionnalités de journalisation (logs) de l’EVM.

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.21 <0.7.0;

contract SimpleAuction {
    event HighestBidIncreased(address bidder, uint amount); // Event

    function bid() public payable {
        // ...
        emit HighestBidIncreased(msg.sender, msg.value); // Triggering event
    }
}

Voir Événements dans la section contrats pour plus d’informations sur la façon dont les événements sont déclarés et peuvent être utilisés à partir d’une dapp.

Types Structure

Les structures sont des types personnalisés qui peuvent regrouper plusieurs variables (voir Structs dans la section types).

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.0 <0.7.0;

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

Types Enum

Les Enumérateurs (enum) peuvent être utilisés pour créer des types personnalisés avec un ensemble fini de “valeurs constantes” (voir Énumérateurs dans la section Types).

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.0 <0.7.0;

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