(见此处[106]) 使用 ABIEncoderV2 带符号整数的存储数组。将带符号整数数组分配给不同类型的存储数组可能导致数组中的数据损坏。 (见这里[107]) 动态构造函数参数被 ABIEncoderV2。当使用 ABIEncoderV2 时,包含动态大小数组的结构体或数组的合约构造函数会回退或解码为无效数据。 (参见这里[110]) **使用 ABIEncoderV2 的打包存储:**如果使用 ABIEncoderV2 直接从存储中编码,类型短于 32 字节的存储结构体和数组可能导致数据损坏。 只有当 ABIEncoderV2 被激活,并且除了编译器设置中的常规优化器外,还手动激活了实验性的 Yul 优化器,才会发生这种情况。 (参见这里[113]) **在使用 ABIEncoderV2 时,格式化过程中缺少转义:**当 ABIEncoderV2 被启用时,直接传递给外部或编码函数调用的包含双反斜杠字符的字符串常量会导致使用不同的字符串
tempPath[0] = tokenIn; tempPath[1] = baseTokens[i]; tempPath[2] = tokenOut; 最后,返回二维数组,在默认情况下是不支持的,要用 ABIEncoderV2 才能支持,需要对合约添加以下指令才能使用: pragma experimental ABIEncoderV2; experimental 说明这还是实验性的,所以建议尽量少用,因为可能存在未知的 bug
// OracleInterface.sol pragma solidity ^0.4.22; // 使用预言机 API 需要在用户合约中开启 ABIEncoderV2 特性 pragma experimental ABIEncoderV2; interface OracleInterface { /** * function: 发送 CURL 请求 * parameters: 示例 pragma solidity ^0.4.22; // 使用预言机 API 需要在用户合约中开启 ABIEncoderV2 特性 pragma experimental ABIEncoderV2;
你必须为迁移做出的改变包括: ABIEncoderV2现在是默认自动激活。
// SPDX-License-Identifier: MIT pragma solidity 0.7.1; pragma experimental ABIEncoderV2; contract StackTooDeepTest3
// SPDX-License-Identifier: MIT pragma solidity 0.7.1; pragma experimental ABIEncoderV2; contract StackTooDeepTest3
未初始化的数组局部变量 pragma solidity ^0.4.24; pragma experimental ABIEncoderV2; contract UnfixedArr {
pragma solidity ^0.5.16; pragma experimental ABIEncoderV2; interface Comp { function delegateBySig(
5、API 请注意,如果你想要从公有函数(public function)返回Heap.Node数据类型,你必须在代码中使用选项experimental ABIEncoderV2。 ?