以下测试合同在JavaScript VM中部署并运行时可以通过Remix正常工作,但是当与“ 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);}
}