我使用的是OpenZeppelin克隆库,这样我的dapp用户就可以创建我的实现契约的克隆。我的dapp将遵循EIP-1167标准.
对于功能,我需要保存部署者地址(实现契约)。传统的方法是在构造函数中这样做,但是克隆契约不读取“创建-代码”,它们只查看“运行时代码”,因此如果我使用构造函数保存部署人员地址,则克隆的合同将无法访问保存的变量(据我所知)。
我想保存部署者地址的原因是因为我希望得到所有克隆合同余额的一定百分比的报酬。
请有人告诉我,我将如何保存部署者的地址,这样我就可以从克隆的合同中得到报酬。我也愿意接受其他途径,只要我能够收到付款给我的部署者的地址。
我的一个想法是将部署者地址(或任何其他个人地址)存储为实现契约中的变量,并将所有付款转移到该地址。这将消除在构造函数中设置部署程序地址的需要。
这是一个很好的方法去做,还是有一个更“正确”的方法,我可以使用这一点?
任何帮助都将不胜感激!提前感谢!
发布于 2022-09-03 22:56:45
最常用的方法是在实现中有一个initialize函数,您可以在其中存储“一劳永逸”的工厂变量。
因此,例如,实现可能是这样的:
contract Implementation {
bool private initialized;
address public deployer; // aka the factory
address public user;
function initialize(address _user) public {
require(!initialized, "Already initialized!");
initialized = true;
deployer = msg.sender;
user = _user;
}
...
}部署人员(Factory)必须在部署契约后立即调用initialize函数。示例:
interface IImplementation {
function initialize(address) external;
}
contract Factory {
address public implementation = 0x...;
// an user calls this function to make a new contract (clone)
function createNewContract() public {
address newcontract = Clones.clone(implementation);
IImplementation(newcontract).initialize(msg.sender);
}
...
}https://ethereum.stackexchange.com/questions/134857
复制相似问题