IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> SushiSwap质押挖矿里的3个时期 -> 正文阅读

[区块链]SushiSwap质押挖矿里的3个时期

1 质押挖矿的3个时期

? ? SushiSwap支持质押挖矿,它有3个时期:激励期、普通期、交叉期。激励期的奖励倍数为10,普通期的奖励倍数为1,交叉期的奖励倍数不固定。
? ? 这3个时期是通过区块高度来进行区分的,不同时期的倍乘系数multiplier也不相同。
? ? 在 MasterChef.sol合约里,通过getMultiplier()函数来计算倍乘系数multiplier,其计算方式如下:

    function getMultiplier(uint256 _from, uint256 _to)
        public
        view
        returns (uint256)
    {
        if (_to <= bonusEndBlock) {
            return _to.sub(_from).mul(BONUS_MULTIPLIER);
        } else if (_from >= bonusEndBlock) {
            return _to.sub(_from);
        } else {
            return
                bonusEndBlock.sub(_from).mul(BONUS_MULTIPLIER).add(
                    _to.sub(bonusEndBlock)
                );
        }
    }

? ? 写成公式如下:
m u l t i p l i e r ( m , n ) = { ( n ? m ) ? B o n u s , n?>?m?>?e?,? ?? 激励期 n ? m , e > n > m , ?? 普 通 期 ( e ? m ) ? B o n u s + n ? e , n > e > m , ?? 交 叉 期 multiplier(m,n)= \begin{cases} (n-m)*Bonus, & \text{n > m > e , \;激励期} \\ n-m , & e > n> m , \;普通期\\ (e - m)*Bonus+n-e, & n > e > m , \;交叉期 \end{cases} multiplier(m,n)=??????(n?m)?Bonus,n?m,(e?m)?Bonus+n?e,?n?>?m?>?e?,?激励期e>n>m,n>e>m,?

? ? 倍乘系数 multiplier 与起点区块高度、终点区块高度、奖励截止高度、固定奖励系数这4个参数有关。
? ? 在cn.etherscan.com里查询 MasterChef的部署参数可知,如图(1)所示:

图(1) MasterChef合约的部署参数

变量含义默认参数
m质押时(deposit)的区块高度未知数m
n提取时(withdraw)的区块高度未知数n
s奖励起点区块高度1075000
e奖励截止区块高度1085000
Bonus固定奖励系数100枚Sushi

? ? 由图(1)可知,MasterChef在以太坊上的质押挖矿,用区块高度分为3个时期:

  • 激励期:质押和提取,都在1075万~1085万区块高度内,即 m 、 n ∈ [ 1075 w , 1085 w ] m、n \in [1075w, 1085w] mn[1075w,1085w],区块奖励 = 固定奖励x10 = 100x10 = 1000枚Sushi,固定。
  • 普通期:质押和提取,都在1085万区块高度之上,即 m 、 n ∈ ( 1085 w , + ∞ ) m、n \in (1085w,+\infty) mn(1085w,+), 区块奖励 = 固定奖励 = 100枚Sushi,固定。
  • 交叉期:质押在[1075万, 1085万]区块高度内,提取在1085万区块高度之后,即 m ∈ [ 1075 w , 1085 w ] , n ∈ ( 1085 w , + ∞ ) m \in [1075w, 1085w] , n \in (1085w,+\infty) m[1075w,1085w],n(1085w,+)
    ,区块奖励 = 100或1000枚Sushi,不固定。

? ? 需要说明的是,这里的区块奖励,指的是每挖出一个区块,奖励的Sushi代币个数。

2 质押与提取

2.1 质押deposit

? ? MasterChef.sol的deposit()函数,用于将lpToken发送到MasterChef合约地址,同时将用户的待入账奖励币SuShi发送到用户地址,并发送质押事件给其他程序。

    function deposit(uint256 _pid, uint256 _amount) public {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];
        console.log("pid= %s, msg.sender= %s",_pid, msg.sender);
        updatePool(_pid);
        if (user.amount > 0) {
            uint256 pending =
                user.amount.mul(pool.accSushiPerShare).div(1e12).sub(
                    user.rewardDebt
                );
            safeSushiTransfer(msg.sender, pending); //将待入账的奖励币发给用户
        }
        pool.lpToken.safeTransferFrom(   //将lpToken存到MasterChef合约里
            address(msg.sender),
            address(this),
            _amount
        );
        user.amount = user.amount.add(_amount);    //更新质押个数(余额)
        user.rewardDebt = user.amount.mul(pool.accSushiPerShare).div(1e12); //更新账务值
        emit Deposit(msg.sender, _pid, _amount);
    }

2.2 提取withdraw

? ? MasterChef.sol的withdraw()函数,用于提取本金lpToken与奖励币Sushi到用户地址,同时更新用户的账户余额amount与账务值rewardDebt,并发送提取事件给其他程序。

    function withdraw(uint256 _pid, uint256 _amount) public {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];
        require(user.amount >= _amount, "withdraw: not good");
        updatePool(_pid);
        uint256 pending =
            user.amount.mul(pool.accSushiPerShare).div(1e12).sub(
                user.rewardDebt
            );
        safeSushiTransfer(msg.sender, pending);  //将待入账的sushi奖励币发给用户
        user.amount = user.amount.sub(_amount);  //更新lpToken个数(余额)
        user.rewardDebt = user.amount.mul(pool.accSushiPerShare).div(1e12); //更新账务值
        pool.lpToken.safeTransfer(address(msg.sender), _amount); //将lpToken返还给用户
        emit Withdraw(msg.sender, _pid, _amount);
    }
  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2021-11-09 19:34:31  更:2021-11-09 19:35:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:58:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码