10分钟智能合约:进阶实战-2.3 ABI编码

14 阅读1分钟

欢迎订阅专栏10分钟智能合约:进阶实战

什么是ABI编码

ABI(Application Binary Interface)合约应用二进制接口,是一种与以太坊智能合约交互的标准规范,无论从外部调用合约,还是合约调用合约,都需要使用ABI规范对交互数据进行编码,确保数据能够被EVM正确解析和处理.

image.png

示例

编码

abi.encode(…) returns (bytes memory)

  • 标准ABI编码
  • 占用更多空间,gas消耗更多
  • 适用于合约函数调用等场景

abi.encodePacked(...) returns (bytes memory)

  • 紧凑格式编码,不进行填充
  • 更节省空间,gas消耗少
  • 适用于生成哈希值等场景

解码

abi.decode(bytes memory encodedData,(...)) returns (...)

  • 数据解码
  • 将abi.encode或低级调用返回的bytes数据解码成指定的Solidity数据类型

动态数组编码组成

  • 偏移量:指向动态数组实际数据在ABI编码中的起始位置
  • 数组长度:动态数组的元素个数
  • 数组内容:按顺序存储每个元素