我有一个过早实施的复仇游戏。 我已经分了我的代码在两个合同,分离由管理员调用的函数“游戏”的功能。
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取得数据的变化? 如果是的话,它怎么办?
谢谢您的帮助。
对的,这是可能的。 你必须先了解几件事情是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.职能