区块链 区块链技术 比特币公众号手机端

关于ABIEncoderV2的使用

liumuhui 2年前 (2023-06-28) 阅读数 132 #技术
  • ABIEncoder介绍
  • ABIEncoder应用
  • ABIEncoderV2和ABIEncoderV1的区别

1. ABIEncoder介绍

ABIEncodeV2和V1是对整个合约的编译检查和更丰富的编译功能,跟 abi.encode/decode 无关。

2. ABIEncoder应用

Solidity0.8.0,默认是ABIEncoderV2,无需多余操作,<https://docs.soliditylang.org/en/v0.8.1/layout-of-source-files.html?highlight=0.8.0#abi-coder-pragma> 

在Solidity0.8.0之前,默认是ABIEncoderV1:

  1. 刚开始实验阶段需要添加代码`pragma experimental ABIEncoderV2`。
  2. 之后进入非实验阶段需要添加代码`pragma abicoder v2`。
  3. 最后什么代码都不用加,默认是ABIEncoderV2。
应用 版本 状态 链接
添加代码`pragma experimental ABIEncoderV2` 0.5.0 experimental <https://docs.soliditylang.org/en/v0.5.0/layout-of-source-files.html#abiencoderv2>
添加代码`pragma abicoder v2` 0.7.4 nonexperimental <https://docs.soliditylang.org/en/v0.7.5/layout-of-source-files.html?#abiencoderv2>
无需多余操作,默认ABIEncoderV2 0.8.0 nonexperimental <https://docs.soliditylang.org/en/v0.8.1/layout-of-source-files.html?highlight=0.8.0#abi-coder-pragma>&lt;https://docs.soliditylang.org/en/v0.8.0/080-breaking-changes.html?highlight=ABIEncoderV2#how-to-update-your-code>

Ps: 0.8.0之后,如果想使用ABIEncoderV1,可以引用代码`pragma abicoder v1`


3. ABIEncoderV2和ABIEncoderV1的区别

  1. V2能够编码和解码任意嵌套的数组和结构体,V2支持的类型集是V1支持的类型集的超集。

    1. 引用:<https://docs.soliditylang.org/en/v0.8.1/layout-of-source-files.html?#abi-coder-pragma>
  2. V2使某些函数调用更加昂贵,因为V2比V1支持更多的类型,并且对函数输入执行更多的完整性检查。

    1. 引用:<https://docs.soliditylang.org/en/v0.8.1/080-breaking-changes.html?highlight=abicoder#silent-changes-of-the-semantics>
  3. V1中, external函数不能接受多维数组作为参数。

  4. V1中, 不能从非内部函数返回某些类型,尤其是多维数组和结构体。

版权声明

本文仅代表作者观点,不代表区块链技术网立场。
本文系作者授权本站发表,未经许可,不得转载。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门