将费用平均分配到 Solidity 中的多个地址(拉取方法)

Distribute fees evenly to many addresses(pull method) in Solidity

我想将每笔交易的费用平均分配给 3000 个地址的映射(地址=>uint)。

现在,这是一个问题,因为该函数将 运行 耗尽,所以我听说,拉取方法应该能够将其拉出,而不是推入方法。

因此,将所有费用集中在一个 uint 下,然后让每 3k 个地址中的每一个提取自己的份额。

现在这带来了新问题,因为矿池 uint 永远在增加和减少(当人们拿走他们的份额并从交易​​中获得新的收入时),我如何控制一个可能只拿走他们的份额一次但仍然持续 &均匀分布?

我将不胜感激关于如何解决这些分配问题的一些指导,因为我的数学远非我拥有的最强资产。

通过为每个用户存储他们上次申请份额时的总入金并将其从当前总入金中扣除并根据差异(如果有)给出他们的削减百分比来解决此问题。

Psuedo Solidity(不包括适当的检查和交互):

uint256 totalRevShare = onDeposit() pub payable {...+=msg.value}

//..in Withdraw Function
...
uint256 unclaimedScope = totalRevShare - LastTotalRevShare[user];
LastTotalRevShare[user] = totalRevShare;
uint256 _userUnclaimedCut = unclaimedScope / totalReceivers;
...
msg.sender.call{value:_userUnclaimedCut}("");

希望它能帮助您从推送功能转变为拉取功能。