合约开发中遇到很多质押挖矿类的需求,单币质押、双币质押、算力挖矿等等,这些需求大多都是美秒产多少币(每个块产多少币),根据质押的量加权平分产出的币。如果中心化的程序很容易完成这个需求,但在区块链上没有定时器,不能实现大量循环。这些局限让我们体会了区块链的极简之美。为了实现质押挖矿采用了以下算法
(此阶段产量/ A) + (此阶段产量/ A+B)+ (此阶段产量/ A+B+C)+ …
实际上是算的是每个阶段每个币挖矿数量的之和。
我们根据代码来解析
uniswap 质押
uint256 public lastUpdateTime;
uint256 public rewardPerTokenStored;
uint256 private _totalSupply;
rewardPerTokenStored 全局变量 就是保存的上面算法的数据
lastUpdateTime 是上次结算的时间, 或者说是上阶段截止的时间
_totalSupply也就是质押的总量
这两个全局变量只要有用户调用合约写入方法 都会更新
function rewardPerToken() public view returns (uint256) {
if (_totalSupply == 0) {
return rewardPerTokenStored;
}
return
rewardPerTokenStored.add(
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)