首页 > 解决方案 > 通过 new 创建实例时调用方法在另一个合约中失败

问题描述

我正在尝试将合同实例用作另一个合同的变量,例如下面的示例。

pragma solidity ^0.4.23;

contract basic {
    uint num1 = 10;
    
    function getNum1() public view returns(uint) {
        return num1;
    }
    function setNum1(uint _num) public returns(uint) {
         num1 = _num;
    }
}

contract parent {
    uint public num2;
    basic public b;

    constructor() public {
        b = new basic();
        num2 = 20;
    }
        
    function getNum1() public constant returns(uint) {
        return b.getNum1();
    }
    
}

而当我在 remix 和 truffle 中测试合约时,它运行良好。 在此处输入图像描述, 但由于我在我的专用网络上部署了合同“父”,parent.getNum1() 返回了“0”而不是“10”。

此外,我尝试了其他类型的构造函数,例如将“基本”地址作为参数,但效果不佳。

我还尝试了一些将另一个合同实例作为变量的合同,它们在专用网络上都无法正常工作。

有人遇到过这个问题吗?帮助!!!

标签: ethereumsoliditysmartcontractsremixprivate-network

解决方案


现在来结束这个问题!我在 ropsten 测试网络上部署了我的合约,并且合约运行良好。看来我的专用网络不支持从另一个合约调用。有兴趣的可以去看看。


推荐阅读