Solidity

計算百分比

  • September 16, 2021

我想計算每天的使用者獎勵。

uint256 totalBalance = 111;
uint256 rewardPerDay = 1000;

function calculateReward(uint256 userBalance) public view returns (uint256) {
   
   uint256 poolShare = userBalance * 1000 / totalBalance;
   uint256 reward = poolShare * rewardPerDay / (1000);
   return reward;

}

問題是,如果

1號使用者userBalance = 28,poolShare = 25.22%,reward = 252

使用者 2 userBalance = 83 ,poolShare = 74,77% ,reward = 747

剩餘 1個代幣,1000 - (252 + 747) = 1;

我該如何解決這個問題?2號使用者應該收到748,1號使用者應該收到252

這種舍入問題在加密項目中非常典型。你有兩個選擇:1)嘗試決定誰應該得到更多(或更少)2)用剩菜做其他事情(也稱為灰塵)。

通常,開始計算誰應該得到更多是不值得的——尤其是在 Solidity 中的計算不准確(由於沒有小數)。所以發生的情況是,通常項目只是簡單地收集灰塵並將其用於其他用途。也許他們以某種方式將其返還給使用者,將其作為內部費用保留或用於某些原因。灰塵通常很小,對使用者來說並不重要。

引用自:https://ethereum.stackexchange.com/questions/110036