欢迎订阅专栏:10分钟智能合约:进阶实战
什么是ABI编码
ABI(Application Binary Interface)合约应用二进制接口,是一种与以太坊智能合约交互的标准规范,无论从外部调用合约,还是合约调用合约,都需要使用ABI规范对交互数据进行编码,确保数据能够被EVM正确解析和处理.
示例
编码
abi.encode(…) returns (bytes memory)
- 标准ABI编码
- 占用更多空间,gas消耗更多
- 适用于合约函数调用等场景
abi.encodePacked(...) returns (bytes memory)
- 紧凑格式编码,不进行填充
- 更节省空间,gas消耗少
- 适用于生成哈希值等场景
解码
abi.decode(bytes memory encodedData,(...)) returns (...)
- 数据解码
- 将abi.encode或低级调用返回的bytes数据解码成指定的Solidity数据类型
动态数组编码组成
- 偏移量:指向动态数组实际数据在ABI编码中的起始位置
- 数组长度:动态数组的元素个数
- 数组内容:按顺序存储每个元素