建议和反馈

请填写你的反馈内容

问答 > 以太坊 > 问答详情

从另一个访问数据的一个合同失败10LK

我想获得两个互动合同:


pragma solidity ^0.5.10;



contract C2 {


    address public addr;


    constructor(address per) public {

        addr = per;

    }


    function remote_get_number() external view returns(uint) {

        return C1(addr).get_a_number();

    }


    function remote_set_number(uint num) external {

        C1(addr).set_a_number(num);

    }

}


contract C1 {


    uint public a_number;


    function get_a_number() external view returns(uint) {

        return(a_number);

    }


    function set_a_number(uint num) external  {

        a_number = num;

    }

}

我创建一个实例C1,然后使用C2实例的地址C1作为C2构造函数的参数创建一个实例。


如果我打电话,说它remote_set_number(42)工作正常; 调用get_a_number()返回42.同样适用于任何uint值。但是,当我调用remote_get_number()event 时,尽管所有操作都返回C1(addr).remote_get_number()调用的结果,但返回的值始终为0。


如何在一个合约中调用函数,以便在另一个函数调用时正确返回一个值?在我看来,这遵循Solidity文档中给出的模式,所以我不知道为什么它不起作用。谁能流下一点光?


(这是在Remix中的私有区块链上使用Injected Web3完成的)


2019-09-11
0
请先登陆或注册

heart2019-09-11

有可能miner没有工作,用同步的方式调用,看看会不会卡住?

投一票
评论(0)
赞赏(0)
Ronaldo2019-09-11

合同看起来很好,我在Remix中使用JavaScript VM进行了一些肤浅的调整。

转换到“真实”链时常见的障碍是需要等待事务确认。如果您在没有人首先挖掘包含设置事务的块的情况下进行设置和检查,那么您将读取旧值(因为它仍然是当前的)。

当您发送交易时,您收到的收据不是确认交易已成功执行 - 只确认您的节点知道您希望它发送。很大的区别。

尝试放慢一切,确保挖掘出一些东西。


投一票
评论(0)
赞赏(0)

求助中

解决了这个问题,预计可以帮助到

  • 0
  • 1
  • 0
  • 8
  • 3
邀请

感谢您的善举,每一次解答会成为新人的灯塔,回答被采纳后获得20算力和相应的LK币奖励