前言
solidity作为以太坊网络中的智能合约编程语言,这个篇章将以合约结构,类型,单位和全局变量,表达式和控制结构,以及合约demo来整理solidity相关的基础内容。

状态变量
状态变量是永久地存储在合约存储中的。


contract TinyStorage {
    uint storedXlbData; // 状态变量
    // ...
}

函数
函数是代码的可执行单元。函数通常在合约内部定义,但也可以在合约外定义

pragma solidity >0.7.0 <0.9.0;

contract TinyAuction {
    function Mybid() public payable { // 定义函数
        // ...
    }
}
// Helper function defined outside of a contract
function helper(uint x) pure returns (uint) {
    return x * 2;
}

函数修改器
函数修改器modifier可以用来以声明的方式修改函数语义。


contract MyPurchase {
    address public seller;

    modifier onlySeller() { // 修改器
        require(
            msg.sender == seller,
            "Only seller can call this."
        );
        _;
    }

    function abort() public onlySeller { // 修改器用法
        // ...
    }
}

事件 Event
事件是能方便地调用以太坊虚拟机日志功能的接口。

contract TinyAuction {
    event HighestBidIncreased(address bidder, uint amount); // 事件

    function bid() public payable {
        // ...
        emit HighestBidIncreased(msg.sender, msg.value); // 触发事件
    }
}

结构体
结构体是可以将几个变量分组的自定义类型。


contract TinyBallot {
    struct Voter { // 结构体
        uint weight;
        bool voted;
        address delegate;
        uint vote;
    }
}

枚举类型
枚举可用来创建由一定数量的“常量值”构成的自定义类型


contract Upchain {
    enum State { Created, Locked, InValid } // 枚举
}