3 单币矿池开发问题

开发一个单币矿池,发现当质押和奖励的币种是同一个的时候,例如质押cake获得cake;计算会出现问题,无论用masterchef还是smartchef暂时还是没有计算对,请问是否有相关项目案例可以做参考学习,谢谢。

请先 登录 后评论

最佳答案 2021-07-21 17:51

同一个币的时候才会出问题吗,能提供更详细的信息吗

提供一个猜测可能,以masterchef为例

// Update reward variables of the given pool to be up-to-date.
function updatePool(uint256 _pid) public {
    PoolInfo storage pool = poolInfo[_pid];
    if (block.number <= pool.lastRewardBlock) {
        return;
    }
    uint256 lpSupply = pool.lpToken.balanceOf(address(this));
    if (lpSupply == 0) {
        pool.lastRewardBlock = block.number;
        return;
    }
    uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number);
    uint256 pudReward = multiplier.mul(pudPerBlock).mul(pool.allocPoint).div(totalAllocPoint);
    pud.mint(devaddr, pudReward.div(10));
    pud.mint(address(xPudding), pudReward);
    pool.accPuddingPerShare = pool.accPuddingPerShare.add(pudReward.mul(1e12).div(lpSupply));
    pool.lastRewardBlock = block.number;
}

以上是masterchef中更新奖励时的逻辑,计算奖励主要使用的是pool.accPuddingPerShare字段,更新时用的是pool.lpToken.balanceOf(address(this))。如果reward 和 stake的币是一个,那么用balanceOf,就会把reward的和stake的混在一起。

如果是这种情况的话,增加一个字段单独存储stake的总数量,代替用balanceOf的方式查询stake的总数量

请先 登录 后评论

其它 2 个回答

区块链爱好者007
请先 登录 后评论
区块链爱好者007
请先 登录 后评论