如投入LP代幣可以獲得獎勵
其計算是假設總獎勵是1000,週期是10秒,所以每秒獎勵是100,第一秒A投入100,總量是100,所以第一秒可獲得是100%獎勵,是100,第二秒B投入100,總量是200,所以第二秒A可以獲得是50%獎勵,是50,以此類推。
設每秒獎勵R 投入代幣總量T 個人用戶投入量S 時間為起始k 結束n
求用戶獎勵=X
計算用戶獎勵量
但這樣每秒需要計算每秒T的變化量
將T沒有變化的時間提出來,有變化就執行計算
把S提出用rn及rk表示不同T時的每秒可獲得獎勵累積,其不受用戶S影響(r=R/T)
將rn變化成rk
這樣我們只剩下rk是無法計算的,而rk在一開始沒有T時會是0,所以rk會從零開始累加,每次T變化就記錄下來T和時間n&k,逐步累加直到提出所有獎勵,就可以計算出X。
更多程式碼可以參考youtube頻道:@smartcontractprogrammer
首先第一行 Calculate reward per token 對應
r += (R/totalSupply)*(current time - last updated time);
第二行 Calculate reward earned by user 對應
rewards[user] += balanceOf[user]*(r-userRewardPerTokenPaid[user]);
第三行 將舊的r(rk)更新為新的r(rn),更新加入mapping
userRewardPerTokenPaid[user] = r;
後面就是更新時間以及更新代幣量