-->

坚固性:父合同可以看到一个孩子合同数据更新?(Solidity: Can a Parent cont

2019-09-26 15:44发布

我有一个过早实施的复仇游戏。 我已经分了我的代码在两个合同,分离由管理员调用的函数“游戏”的功能。

Admin.sol从Game.sol继承,如下图所示。 一个结构对象在管理员创建的,但比赛还看不出来。 (getter函数没有返回值)

import "./Game.sol";

contract Admin is Game

同样的代码,如果两份合同没有划分,完美的作品。

在Admin.sol函数标题创建该对象:

function createJob(string memory _jname, uint _reward, uint _application_period, uint _job_duration) public {

在Game.sol吸气剂功能的报头:

function getJob(uint _jID) public view returns (string memory, uint, uint, uint, uint)

我从吸气得到的是:

结果{ '0': '', '1':, '2': '3': '4':}

这使得它清楚它只是带我在映射一个“空”的地方。

是否有可能有通过Game.sol看到Admin.sol取得数据的变化? 如果是的话,它怎么办?

谢谢您的帮助。

Answer 1:

对的,这是可能的。 你必须先了解几件事情是SmartContract只能访问在EVM分配,直到他们继承一个smartcontract无法访问另一个SmartContract的变量自己的存储。 在你的情况,你可能会seprately部署他们同时要更新的值使用的是不同的实例。

你所要做的是部署只有一个的传承建筑合同(以下例如其ContractB)。 当你可以使用父合同的功能了。 下面是示例

pragma solidity >=0.4.22 <0.6.0;

contract ContractA {

      int a;

      function setA(int _a)  public {
           a = _a;
      }
      function getA() view public returns(int){
           return a;
      }
}

而合约B是这样的

pragma solidity >=0.4.22 <0.6.0;
import"./ContractA.sol";

contract ContractB is ContractA {
       function getContractAvalue() pure public returns(int){
           // For reference that you can also access the function of ContractA in ContractB
           return ContractA.a;
       }
}

所以,如果你只部署合同B,你可以用一个实例访问合同A的功能,这样你就可以做的修改,这将是在EVM存储的同一个空间,它可以用正确的值进入商店。

您可以通过只部署ContractB检查它混音太,你可以看到合同A.职能



文章来源: Solidity: Can a Parent contract see data updates from a Child contract?