ethereum - 类工厂智能合约的构造器不断还原
问题描述
我正在使用 2 份合同,一份管理用户对特定足球比赛的投注,另一份(工厂风格)生成这些单独的合同以单独管理。
生成器合约是这样的:
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);
}
}
管理合约从生成器接收数据以定义管理器和匹配值,如下(短版):
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 中部署生成器合约,就会导致恢复错误。如果我在管理合同中删除生成器的实例并在两个合同中重复构造函数参数,它可以工作,但我想避免冗余并自动获取已经存储在生成器变量中的值。
解决方案
要实现上述使用接口,您的解决方案将如下所示:
生成器.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();
}
正如您在上面看到的,我已经公开了管理所需的所有生成器功能,并将两者的定义分开。试试看它是否有效,如果没有,让我们知道新的错误消息是什么。
推荐阅读
- google-colaboratory - 如何在不运行的情况下展开和折叠 Google Colab 单元?
- html - 在引导程序中填充列空间
- slack - 为什么我得到对象 Promise 试图使用 Slack search.messages?
- html - 第一个站点页面显示到第二个站点
- go - golang解析2s补码二进制字符串
- php - 网络数据传输和 API
- python-3.x - 在 Mac 上的 IDLE 中使用 Python 时鼠标指针未对齐
- html - Hơ 在访问 Windows 10 热点后自动启动网站
- reactjs - React Redux 订阅方法以指数方式触发?
- flutter - 为什么 Text 小部件的行高从英文变为中文?