以下测试合约通过 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);}
}