Estrutura de um contrato

Contratos em Solidity são similares a classes em linguagens orientadas a objetos. Cada contrato pode conter declarações de Variáveis de Estado, Funções, Modificadores de Função, Eventos, Tipos de Estrutura and Tipos de Enum. Além disso, contratos podem herdar de outros contratos.

Contracts in Solidity are similar to classes in object-oriented languages. Each contract can contain declarations of Variáveis de Estado, Funções, Modificadores de Função, Eventos, Tipos de Estrutura and Tipos de Enum. Furthermore, contracts can inherit from other contracts.

Variáveis de Estado

Variáveis de estado são valores armazenados permanentemente na memória de contrato.

pragma solidity ^0.4.0;

contract SimpleStorage {
    uint storedData; // Variáveis de estado
    // ...
}

Veja a seção Types para tipos válidos de variáveis de estado e Visibility and Getters para possíveis escolhad de visibilidade.

Funções

Funções são unidades executáveis de código dentro de um contrato.

pragma solidity ^0.4.0;

contract SimpleAuction {
    function bid() payable { // Função
        // ...
    }
}

Function Calls podem acontecer internamente ou externamente e tem diferentes níveis de visibilidade (Visibility and Getters) para outros contratos.

Modificadores de Função

Modificadores de função podem ser usados para alterar a semântica das funções de forma declarativa (veja Function Modifiers na seção contratos).

pragma solidity ^0.4.11;

contract Purchase {
    address public seller;

    modifier onlySeller() { // Modificador
        require(msg.sender == seller);
        _;
    }

    function abort() onlySeller { // Uso do Modificador
        // ...
    }
}

Eventos

Eventos são interfaces de conveniência com facilidades de log na EVM.

pragma solidity ^0.4.0;

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

    function bid() payable {
        // ...
        HighestBidIncreased(msg.sender, msg.value); // Evento Trigger
    }
}

Consulte: ref: eventos na seção de contratos para obter informações sobre como eventos são declarados e podem ser usados dentro de uma dapp.

Tipos de Estrutura

Estruturas são tipos personalizados que podem agrupar diversas variáveis (ver : ref: structs na seção de tipos).

pragma solidity ^0.4.0;

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

Tipos de Enum

Enums podem ser usados para criar tipos personalizados com um conjunto finito de valores (veja : ref: enums na seção de tipos).

pragma solidity ^0.4.0;

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