return-value - 来自合约的合约调用失败(在 VM 中成功)
问题描述
以下测试合约通过 Remix 在 JavaScript VM 中部署和运行时按预期工作,但是当使用“Injected Web3”运行时,二级合约 TestA02 T2 的生成按预期生成和填充,所有 get 函数都通过主合约 TestA01 调用返回“0”值。如果您复制 TestA02 合约的地址并直接从 Remix 中寻址,则会返回预期值。代码如下。
这是我的错误还是误解?
说明:使用 Mist 版本 0.10.0 中的 Remix 编译和部署主合约代码 TestA01。
调用传递任何地址的 genEntry 函数。
然后调用任何 get 函数。
代码:
主合约代码TestA01:
pragma solidity ^0.4.17;
import "browser/TestA02.sol";
contract TestA01 {
TestA02 T2;
constructor() public {
T2 = new TestA02();
}
function genEntry(address a) public {
T2.add(a);
}
function get() public view returns(address) {return(T2.get(0));}
function get(uint i) view public returns(address) {return(T2.get(i));}
function getSize() public view returns(uint) {return(T2.getSize());}
function getT2() public view returns(address) {return(address(T2));}
}
二级合约代码TestA02:
pragma solidity ^0.4.17;
contract TestA02 {
uint _size;
mapping(uint => address) private arrayMap;
constructor() public {
_size = 0;
}
function add(address a) public {
arrayMap[_size++] = a;
}
function get() public view returns(address) {return(arrayMap[0]);}
function get(uint i) public view returns(address) {return(arrayMap[i]);}
function getSize() public view returns(uint) {return(_size);}
}
解决方案
推荐阅读
- vb.net - 如何使用小时、分钟和秒创建倒数计时器?
- regex - 用制表符分隔行的正则表达式
- excel - 从 SAS 导出到 Excel 时出错 - 逗号问题
- arduino-ide - Arduino(ESP8266)没有收到所有字符
- scala - play框架生成的路由文件会自动重新生成,即使conf/routes没有变化
- r - 将列添加到基于列表 dplyr 设置为初始值的数据框
- .net - 搜索奇怪的换行符的字符串?
- powershell - 在日本机器上运行powershell脚本,\变成¥
- php - 修复 InitRuntimeInterface 的 TWIG 弃用警告
- vba - 仅将消息正文输出到 txt 文件