Tokens

如何計算地址持有代幣的時間?(用於支付利息/獎勵)

  • April 13, 2020

我正在編寫一個智能合約功能,獎勵使用者一定的利率/獎勵持有我的穩定幣而不是擁有競爭對手(Dai、Tether 等)。在函式中計算這個最有效的方法是collect_interest什麼?我研究了 Dai 儲蓄率 (DSR) 和 Compound.finance 的工作原理,我認為我的實施需要稍有不同,因為使用者不會將穩定幣存入 DSR 或 Compound 之類的合約中。他們只需在其地址中擁有穩定幣即可賺取利息/獎勵。他們在其地址中擁有的穩定幣數量可能會隨時間而變化,因此他們的獎勵可能會因此而變化,並且該功能必須檢查使用者已經在哪些時間視窗中收集了利息/獎勵,因此他們收集的利息不會超過每個時期一次。

這是否太複雜或效率太低/成本太高?我是否應該只複製 Compound/DSR 並讓我的穩定幣持有者將其存入interest_rate智能合約並獲得 1:1 的代interest_rate_ERC20幣(如 Compound)?還是有一種我沒有看到的簡單方法來做到這一點?在此先感謝,即使只是將我指向範例連結也會有所幫助。

您可以根據最後收取的利息日期計算利息:

function collect_interest() public {
   uint256 daysSinceLastCollect = now.sub(lastCollectionTime).div(1 day);
   uint256 newInterests = daysSinceLastCollect.mul(interestRatePerDay).mul(balanceOf(msg.sender));

   _mint(msg.sender, newInterests);

   lastCollectionTime = now;
}

唯一需要注意的是令牌何時被轉移。collect_interest()但是,您可以通過在每次令牌傳輸之前添加呼叫來避免問題。

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