Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Solidity

Solidity 是面向 EVM 的智能合约语言,编译结果为字节码及 ABI。状态存储、调用上下文和回滚语义共同决定程序行为,语法正确或编译成功不等同于业务安全。

语言与执行机制

  • 值类型、引用类型和函数可见性定义数据及接口边界。
  • storage、memory、calldata 区分数据位置;映射与数组寻址遵循存储布局。
  • 事件写入执行日志,错误和 revert 影响调用结果及状态回滚。
  • 继承、接口和库组织合约代码;CALL 与 DELEGATECALL 具有不同执行上下文。
  • ERC 接口规定交互约定,权限、代理升级及 Gas 成本需要分别分析。

状态转换示例

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

contract Counter {
    uint256 public value;
    event Increased(address indexed caller, uint256 value);

    function increment() external {
        value += 1;
        emit Increased(msg.sender, value);
    }
}

value 写入持久存储,msg.sender 来自当前调用帧,事件写入日志。日志可由链外索引和查询,合约不能直接读取过去的事件日志。

合约行为检查

  • 编译器、优化器和目标 EVM 版本与执行环境一致。
  • 外部输入满足相应边界和权限约束。
  • 时间、区块和外部报价的使用符合业务假设。
  • 升级保持既有存储布局和状态含义兼容。
  • 状态转换验证覆盖回滚、事件、授权和外部回调路径。

相关机制:ERC-20、EVM、合约安全。