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