首页 > 解决方案 > 来自合约的合约调用失败(在 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);}
}

标签: return-valuesolidityremix

解决方案


推荐阅读