Solidity:Parent 合约能否看到来自 Child 合约的数据更新?

Solidity: Can a Parent contract see data updates from a Child contract?

我过早地实施了一款以太坊游戏。我将我的代码分成两个合同,将 "game" 函数与管理员调用的函数分开。

Admin.sol 继承自 Game.sol 如下所示。 Admin中创建了一个struct object,但Game看不到它。 (Getter 函数 returns 没有)

import "./Game.sol";

contract Admin is Game

相同的代码,如果不分成两个合同,可以完美运行。

Header Admin.sol 中创建 object:

的函数
function createJob(string memory _jname, uint _reward, uint _application_period, uint _job_duration) public {
Game.sol中getter函数的

Header:

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

我从 getter 得到的是:

Result { '0': '', '1': , '2': , '3': , '4': }

这很清楚,它只是向我展示了映射中的 "empty" 点。

是否可以让 Game.sol 看到 Admin.sol 中所做的数据更改?如果有,是怎么做到的?

感谢您的帮助。

是的,这是可能的。您首先需要了解的几件事是智能合约只能访问自己在 EVM 中分配的存储,因此一个智能合约在继承之前无法访问另一个智能合约的变量。在您的情况下,您可能会单独部署它们,并且在更新您使用不同实例的值时。

你只需要部署一个具有继承性的合约contract(在下面的例子中是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 中相同的 space 存储空间中,这可以可以使用正确的值访问。

你也可以在remix上查看,只需部署ContractB,你就可以看到Contract A的功能。