My Docs
My BlogLinkedin
Solidarity-Blockchain-NFTs
Solidarity-Blockchain-NFTs
  • Initial page
  • Solidarity
    • Solidity
    • Ethereum
    • Structure of a Contract
  • NFT's
    • NFT's
      • Purpose
    • How to Create NFTs
    • How to Sell NFTs
  • Blockchain & Crypto
    • Blockchain Basics
  • Misc
    • Misc
  • Practice
    • Untitled
  • Docs
    • Docs & Research
  • Resources
    • Resources
Powered by GitBook
On this page
  • Structure of a Contract
  • State Variables
  • Functions
  • Function Modifiers
  • Events
  • Errors
  • Struct Types
  • Enum Types

Was this helpful?

  1. Solidarity

Structure of a Contract

PreviousEthereumNextNFT's

Last updated 3 years ago

Was this helpful?

Structure of a Contract

Contracts in Solidity are similar to classes in object-oriented languages. Each contract can contain declarations of , , , , , and . Furthermore, contracts can inherit from other contracts.

There are also special kinds of contracts called and .

The section about contains more details than this section, which serves to provide a quick overview.

State Variables

State variables are variables whose values are permanently stored in contract storage.

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

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

See the section for valid state variable types and for possible choices for visibility.

Functions

Functions are the executable units of code. Functions are usually defined inside a contract, but they can also be defined outside of contracts.

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.1 <0.9.0;

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

// Helper function defined outside of a contract
function helper(uint x) pure returns (uint) {
    return x * 2;
}

Function Modifiers

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

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

Events are convenience interfaces with the EVM logging facilities.

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

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

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

Errors

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.4;

/// Not enough funds for transfer. Requested `requested`,
/// but only `available` available.
error NotEnoughFunds(uint requested, uint available);

contract Token {
    mapping(address => uint) balances;
    function transfer(address to, uint amount) public {
        uint balance = balances[msg.sender];
        if (balance < amount)
            revert NotEnoughFunds(amount, balance);
        balances[msg.sender] -= amount;
        balances[to] += amount;
        // ...
    }
}

Struct Types

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

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

Enum Types

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

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

can happen internally or externally and have different levels of towards other contracts. accept to pass parameters and values between them.

Function modifiers can be used to amend the semantics of functions in a declarative way (see in the contracts section).

Like functions, modifiers can be .

See in contracts section for information on how events are declared and can be used from within a dapp.

Errors allow you to define descriptive names and data for failure situations. Errors can be used in . In comparison to string descriptions, errors are much cheaper and allow you to encode additional data. You can use NatSpec to describe the error to the user.

See in the contracts section for more information.

Structs are custom defined types that can group several variables (see in types section).

Enums can be used to create custom types with a finite set of ‘constant values’ (see in types section).

State Variables
Functions
Function Modifiers
Events
Errors
Struct Types
Enum Types
libraries
interfaces
contracts
Types
Visibility and Getters
Function Calls
visibility
Functions
parameters and return variables
Function Modifiers
overridden
Events
revert statements
Errors and the Revert Statement
Structs
Enums
Next
Previous