我想將每筆交易的費用平均分配到 3000 個地址的映射(地址 => uint)。
現在,這是一個問題,因為該函式將耗盡 gas,所以我聽說,而不是 push 方法,pull 方法應該能夠將其拉下來。
因此,相反,將所有費用集中在一個 uint 下,然后讓每個 3k 地址中的每一個都提取自己的份額。
現在這帶來了新的問題,因為池 uint 永遠在增加和減少(當人們從交易中取出他們的份額和新的收入費用時),我如何控制一個可能只獲得一次份額但仍然連續且均勻分布的人?
對于如何解決這些分布問題,這里的一些指導將不勝感激,因為我的數學遠非我擁有的最強資產。
uj5u.com熱心網友回復:
通過為每個用戶存盤他們上次申領份額時的總入金并從當前入金總額中扣除,并根據差異(如果有)給出他們的百分比削減來解決這個問題。
偽 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}("");
希望它可以幫助您從推送功能轉變為拉動功能。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/476274.html
