关于ABIEncoderV2的使用
- 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:
- 刚开始实验阶段需要添加代码`pragma experimental ABIEncoderV2`。
- 之后进入非实验阶段需要添加代码`pragma abicoder v2`。
- 最后什么代码都不用加,默认是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><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的区别
-
V2能够编码和解码任意嵌套的数组和结构体,V2支持的类型集是V1支持的类型集的超集。
- 引用:<https://docs.soliditylang.org/en/v0.8.1/layout-of-source-files.html?#abi-coder-pragma>
-
V2使某些函数调用更加昂贵,因为V2比V1支持更多的类型,并且对函数输入执行更多的完整性检查。
- 引用:<https://docs.soliditylang.org/en/v0.8.1/080-breaking-changes.html?highlight=abicoder#silent-changes-of-the-semantics>
-
V1中, external函数不能接受多维数组作为参数。
-
V1中, 不能从非内部函数返回某些类型,尤其是多维数组和结构体。
版权声明
本文仅代表作者观点,不代表区块链技术网立场。
本文系作者授权本站发表,未经许可,不得转载。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。