首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向每个令牌持有者发送一定比例的ETH

问向每个令牌持有者发送一定比例的ETH
EN

Ethereum用户
提问于 2020-12-17 00:23:03
回答 1查看 56关注 0票数 1

我正在创造一个象征,我可以创造一个无限的数量。我会把它们卖给别人。

然后,我需要发送另一个令牌,或ETH,给每个持有人我的令牌。发送的金额应与其持有的令牌数量成比例。

EN

回答 1

Ethereum用户

发布于 2020-12-19 20:33:12

一般来说,您应该避免在基本的智能契约代码中使用循环,因为它们最终会花费越来越多的汽油,并且有更多的令牌持有者。

因此,我推荐一种类似于这样的模式:

代码语言:javascript
复制
mapping(address => uint256) public withdrawableETH;
mapping(address => uint256) public lastUpdateTotalETHdistributedPerToken;
uint256 public totalETHdistributedPerToken;

function updateTokenHolderWithdrawableETH(address _tokenHolder) public
{
     uint256 tokens = balanceOf(_tokenHolder);
     uint256 newETHperToken = totalETHdistributedPerToken - lastUpdateTotalETHdistributedPerToken[_tokenHolder];
     if (newETHperToken > 0)
     {
         withdrawableETH[_tokenHolder] += tokens * newETHperToken / (1 ether);
     }
     lastUpdateTotalETHdistributedPerToken[_tokenHolder] = totalETHdistributedPerToken;
}

function distributeETH() external onlyOwner payable
{
    totalETHdistributedPerToken += msg.value * (1 ether) / totalSupply;
}

function withdrawETH() external
{
     updateTokenHolderWithdrawableETH(msg.sender);
     uint256 amount = withdrawableETH[msg.sender];
     withdrawableETH[msg.sender] = 0;
     msg.sender.transfer(amount);
}

updateTokenHolderWithdrawableETH(addr)应该在addr余额的每一次更改之前执行。

令牌持有者可以调用withdrawETH(),以获取自上次退出以来发生的部分ETH分发。

如果您真的想将ETH“推送”给令牌持有者,您可以添加一个批提取函数。

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/91212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档