在我的众卖合同中,我提供了一个索赔功能,让投资者可以索取他们的代币(拉)。这没什么问题。
function claim() external nonReentrant {
claimInvestor(msg.sender);
}然而,我想提供的功能,也把他们的令牌从合同管理(PUSH)交付给投资者。第一个想法是这样的:
function claimAll() external nonReentrant onlyOwner {
for (uint i = 0; i < investors.length; i++) {
claimInvestor(investors[i]);
}
}然而,这似乎是一个不好的做法,因为无界循环。
因此,我计划应用工程摊销并通过在合同中提供以下内容将这个循环移动到客户端:
function claimAddress(address investor) external nonReentrant onlyOwner {
claimInvestor(investor);
}然后我需要客户端的JS
for (var i = 0; i < investors.length; i++) {
await ICO_CONTRACT?.claimAddress(investors[i]).then(processClaimSuccess).catch(handleError);
}问题:
Update1:正如我在这里看到的,它取决于用来签署交易的私钥的钱包。如果是元询问帐户,则应打开元询问。因此,就我的情况而言,第一件事是将合同的所有者更改为钱包中允许以编程方式签名的帐户。
发布于 2023-03-28 10:56:28
为什么不使用额外的映射来存储每个投资者有权拥有的令牌数量
mapping(address => uint256) public entitledTokens;更确切地说,他们一个接一个地发送给他们,这样他们就可以自行声明他们的令牌,这将是一种更有效和更好的方法。
function claimTokens() public {
erc20.transferFrom(owner, msg.sender, entitledTokens[msg.sender])
}https://ethereum.stackexchange.com/questions/148090
复制相似问题