Следующие тестовые контракты работают должным образом через Remix при развертывании и запуске в виртуальной машине JavaScript, но при запуске с «Injected Web3» генерируется вторичный контракт TestA02 T2, который заполняется, как и ожидалось, все функции get, вызываемые через Первичный контракт TestA01 возвращает значения «0». Если вы копируете адрес контракта TestA02 и адресуете его непосредственно из Remix, ожидаемые значения возвращаются. Код следует ниже.
Это ошибка или недоразумение с моей стороны?
Инструкция:
Использование Remix из Mist версии 0.10.0 Скомпилируйте и разверните КОД основного контракта 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);}
}