合约开发中遇到很多质押挖矿类的需求,单币质押、双币质押、算力挖矿等等,这些需求大多都是美秒产多少币(每个块产多少币),根据质押的量加权平分产出的币。如果中心化的程序很容易完成这个需求,但在区块链上没有定时器,不能实现大量循环。这些局限让我们体会了区块链的极简之美。
合约开发中遇到很多质押挖矿类的需求,单币质押、双币质押、算力挖矿等等,这些需求大多都是美秒产多少币(每个块产多少币),根据质押的量加权平分产出的币。如果中心化的程序很容易完成这个需求,但在区块链上没有定时器,不能实现大量循环。这些局限让我们体会了区块链的极简之美。为了实现质押挖矿采用了以下算法
(此阶段产量/ A) + (此阶段产量/ A+B)+ (此阶段产量/ A+B+C)+ ......
实际上是算的是每个阶段每个币挖矿数量的之和。
我们根据代码来解析https://github.com/Uniswap/liquiditystaker/blob/master/contracts/StakingRewards.sol
uint256 public lastUpdateTime;
uint256 public rewardPerTokenStored;
uint256 private _totalSupply;
rewardPerTokenStored 全局变量 就是保存的上面算法的数据 lastUpdateTime 是上次结算的时间, 或者说是上阶段截止的时间 _totalSupply也就是质押的总量
这两个全局变量只要有用户调用合约写入方法 都会更新
function...
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!