关于ABIEncoderV2的使用

ABIEncoder介绍ABIEncoder应用ABIEncoderV2和ABIEncoderV1的区别1.ABIEncoder介绍ABIEncodeV2和V1是对整个合约的编译检查和更丰富的编译功能,跟abi.encode/decode无关。2.ABIEncoder应用So

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中, 不能从非内部函数返回某些类型,尤其是多维数组和结构体。

点赞 0
收藏 1
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
DawnInShatter
DawnInShatter
江湖只有他的大名,没有他的介绍。