我正在处理两个合同,一个管理用户对特定足球比赛的下注,另一个(工厂风格)生成这些单独的合同,以便单独管理。
Generator合同如下:
pragma solidity ^0.8.0;
contract Generator {
address immutable public owner;
string public matchGenerated;
Management[] public bettingHistory;
constructor(string memory _league, string memory _match) {
owner = msg.sender;
matchGenerated = string(abi.encodePacked(_league, "_", _match));
Management newBetContract = new Management(address(this));
bettingHistory.push(newBetContract);
}
}管理契约从Generator接收数据以定义管理器和匹配值,如下所示(简称):
contract Management {
address payable immutable public manager;
string public matchDispute;
Generator generator;
constructor(address _contract) {
generator = Generator(_contract);
manager = payable(generator.owner());
matchDispute = generator.matchGenerated();
}一旦我尝试在Remix中部署Generator契约,就会导致一个还原错误。如果我在管理契约中删除生成器的实例,并在两个契约中重复构造函数参数,它就可以工作,但我希望避免冗余,并自动获取已存储在generator变量中的值。
发布于 2021-07-17 03:08:34
要使用接口实现上述内容,您的解决方案将如下所示:
Generator.sol文件
pragma solidity ^0.8.0;
contract Generator {
address immutable public owner;
string public matchGenerated;
Management[] public bettingHistory;
constructor(string memory _league, string memory _match) {
owner = msg.sender;
matchGenerated = string(abi.encodePacked(_league, "_", _match));
Management newBetContract = new Management(address(this));
bettingHistory.push(newBetContract);
}
}IGenerator.sol文件
pragma solidity ^0.8.0;
interface IGenerator{
function owner() external view returns (address);
function matchGenerated() external view returns (string)
}Management.sol文件
pragma solidity ^0.8.0;
import "IGenerator.sol";
contract Management {
address payable immutable public manager;
string public matchDispute;
constructor(address _contract) {
manager = payable(IGenerator(_contract).owner());
matchDispute = IGenerator(_contract).matchGenerated();
}正如您在上面看到的,我已经公开了管理所需的Generator的所有函数,并将两者的定义分开。试一试,看看它是否工作,如果不能,让我们知道新的错误消息是什么。
https://stackoverflow.com/questions/68386743
复制相似问题