http://www.7klian.com

慢雾:YFValue,一行代码如何锁定上亿资产

        super.tokenStake(reward);
    function withdraw(uint256 amount) public updateReward(msg.sender) checkNextEpoch {

从代码中得知,unfrozenStakeTime 是利用用户的上次抵押时间加上 FROZEN_STAKING_TIME 常量得出锁按时间,只要高出时间,就能通过 withdraw 函数提现收益。整个抵押和领取收益的简化流程如下:

        yfv.safeTransferFrom(msg.sender, address(this), amount);
function stakeReward() public updateReward(msg.sender) checkNextEpoch {
    function stakeOnBehalf(address stakeFor, uint256 amount) public updateReward(stakeFor) checkNextEpoch {
        _totalSupply = _totalSupply.add(amount);
通过阐明代码和裂痕细节,针对本次裂痕,修复方案也很简朴,只要在抵押的时候查抄用户的抵押状态是否为已经抵押,假如已经抵押,则不答允再次抵押。可能对每次的抵押举办单独的处理惩罚,不能对先前的抵押状态发生影响。

        emit Staked(msg.sender, amount);

        _balances[msg.sender] = _balances[msg.sender].add(amount);
    

前车之鉴
 function stake(uint256 amount, address referrer) public updateReward(msg.sender) checkNextEpoch {
        if (rewardReferral != address(0) && referrer != address(0)) {
可以看到这里只是简朴的把对应的 token 用 transferFrom 的方法转入到合约中,没有什么出格的逻辑点。到这里整个抵押流程就很清晰了,接下来是收益的进程。计较用户收益的是 stakeReward 函数,领取收益的为 withdraw 函数,代码别离如下:
        require(amount > 0, “Cannot stake 0”);
        _balances[stakeFor] = _balances[stakeFor].add(amount);

        super.tokenStakeOnBehalf(stakeFor, amount);
        emit Staked(msg.sender, reward);
    }
    }

媒介
        }
    }

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。