SUN.io 中文文档
SUN.ioSunPump
  • SUN.io 简介
    • 入门指南(TRON)
      • 创建钱包
      • TRON 网络代币标准
      • 连接钱包
    • 风险
    • 白皮书
    • 服务条款
    • 隐私协议
    • 最新公告
  • 开始使用
    • 兑换
      • 代币兑换
        • 如何给token授权?
        • 如何兑换token?
        • 如何查看我最近的交易记录?
        • 如何查看交易对价格走势?
      • 稳定币兑换
        • 稳定币池介绍
        • 如何进行稳定币交易?
        • 如何提供稳定币池的流动性?
        • 如何提取稳定币池流动性?
        • 如何查看自己提供的流动性?
      • 智能路由
      • 交易手续费
        • 收取手续费奖励
      • 流动性资金池
        • 如何创建交易对
        • 如何增加流动性?
        • 如何删除流动性?
        • 增加/删除资金池的token比例是如何计算的?
        • 如何录入一个新的token?
        • 创建资金池初始价格是多少?
      • 代币列表
    • 矿池
      • SUN.io 平台挖矿细则
      • 如何参与LP挖矿?
      • 如何获取LP挖矿收益?
      • 如何退出LP挖矿?
      • 如何计算LP矿池加速倍数?
      • 如何锁定SUN?
      • 如何投票?
      • 如何重置投票?
      • 智能矿池
        • 如何参与 LP 矿池的定期质押?
        • 如何在 LP 矿池中追加定期质押?
        • 如何中途延长 LP 矿池定期质押锁定期?
        • 如何提前解锁 LP 矿池中定期质押的资产?
        • 如何领取 LP 矿池的定期质押奖励?
      • Farm
      • 历史矿池
    • SunPump
      • 🌞 怎么运行的?
      • 🚀 如何启动?
      • 💡代币详情
      • 👤 个人主页
      • 🏦 服务费
      • SunPump DLive Streaming 功能使用教程
    • SunPump Referral
      • 参与方式
      • 活动规则
      • FAQ
    • PSM
      • 如何使用 PSM 在 USDD 和其他稳定币之间进行 1:1 兑换?
    • 代币经济
      • SUN 代币经济模型
        • SUN 回购及销毁
      • veSUN
      • 空投
  • 治理
    • SUN DAO 治理
    • 参与治理
      • 提案
        • SUN DAO 论坛
        • 获得选票
        • 发起提案
        • 进行投票
        • SUN DAO 提案查看
      • DAO 权益
        • 矿池权重
        • veSUN
  • 开发者
    • 兑换
      • 稳定币兑换简介
      • SunSwap兑换简介
      • SunSwap v3兑换简介
      • 智能路由
    • 挖矿
      • 智能挖矿V1
      • 智能挖矿V2
      • 治理挖矿
    • Sunpump
      • Sunpump Contracts
    • Github
    • 相关合约及ABIs
  • FAQ
    • 如何在手机 TronLink APP中使用SUN.io?
    • 价格是由什么决定的?
    • 兑换支持哪些Token?
    • 为什么我的兑换会失败?
    • 关于 SUN.io 平台能量补贴的详细说明
Powered by GitBook
On this page
  • 背景
  • 原理简介
  • 矿池
  • 与合约交互
  • 获取矿池信息
  • 执行交易
  1. 开发者
  2. 挖矿

智能挖矿V1

智能挖矿V1:一种随存随取的灵活挖矿模式

Previous挖矿Next智能挖矿V2

Last updated 2 years ago

背景

挖矿服务是SUN.io平台数字金融衍生品之一,为加密数字资产持有用户提供稳定、安全、可靠的理财产品申购和赎回服务。智能挖矿V1又名活期挖矿,是SUN.io挖矿服务重要组成部分。其原理是根据存款用户质押金额在整个矿池的质押金额占比分配奖励,且用户可以随时赎回相关资产。

原理简介

SUN.io挖矿奖励代币分成在一定时间窗口以均匀通货膨胀速度发行,如下图所示。

矿池在不同时间节点上发生质押总资金的变化都会引起个人奖励的变化。个人奖励公式:

f(ti,tn)=∑i=1n(ti−ti−1)rt∗UiSi(1)f(t_i,t_n)=\sum_{i=1}^{n}(t_i-t_{i-1})r_t * \frac {U_i}{S_i}(1)f(ti​,tn​)=i=1∑n​(ti​−ti−1​)rt​∗Si​Ui​​(1)

其中 rtr_trt​表示奖励代币的膨胀系数, tit_iti​表示第i次变化, SiS_iSi​表示ti−1t_{i-1}ti−1​到tit_iti​阶段时刻质押总金额,UiU_iUi​表示用户在ti−1t_{i-1}ti−1​到tit_iti​阶段时刻的质押金额。

根据以上公式,矿池一旦发生质押金额的变化都会影响其他用户的分成,为了避免checkpoint全量用户数据造成的燃料费开销过大,将上述公式进行变换如下:

f(ti,tn)=∑i=1mUi∑j=startiendi(ti−ti−1)rtSi(2)f(t_i,t_n)= \sum_{i=1}^{m}U_i \sum_{j=start_i}^{end_i}\frac{(t_i-t_{i-1})r_t}{S_i}(2)f(ti​,tn​)=i=1∑m​Ui​j=starti​∑endi​​Si​(ti​−ti−1​)rt​​(2)

在 startistart_istarti​和 endiend_iendi​时间范围内用户存款如未发生变化,当矿池质押总金额发生变化之后,只需checkpoint如下求和公式:

∑j=startiendi(ti−ti−1)rtSi(3)\sum_{j=start_i}^{end_i} \frac{(t_i-t_{i-1})r_t}{S_i}(3)j=starti​∑endi​​Si​(ti​−ti−1​)rt​​(3)

对应合约代码

modifier updateReward(address account) {
    rewardPerTokenStored = rewardPerToken();
    lastUpdateTime = lastTimeRewardApplicable();
    if (canNext && block.timestamp > periodFinish && DURATION_NEXT > 0) {
        rewardRate = rewardNext.div(DURATION_NEXT);
        uint256 nextRound = (block.timestamp - periodFinish) / DURATION_NEXT + 1;
        periodFinish = periodFinish.add(nextRound * DURATION_NEXT);
        rewardPerTokenStored = rewardPerToken();
        lastUpdateTime = lastTimeRewardApplicable();
        rewardNow = rewardNext;
        DURATION = DURATION_NEXT;
        emit RewardAdded(nextRound * rewardNext);
    }
    if (account != address(0)) {
        userInfo[account].rewards = earned(account);
        userInfo[account].rewardPerTokenPaid = rewardPerTokenStored;
    }
    _;
}

矿池

2pool farm

主网合约地址:TFpg63byqDwniXnyxVYpSzBfWGBwZExM9J

USDD-USDT V2 farm

主网合约地址:TCkNadwxyik1D66qCGmavuneowDRXPgdkL

与合约交互

我们利用TronWeb与合约交互, 初始化TronWeb实例后, 就能很方便的与线上合约交互。

初始化TronWeb实例
const TronWeb = require('tronweb')
const privateKey = process.env.PRIVATE_KEY
const apiKey = process.env.API_KEY

var tronWeb = new TronWeb({
	fullHost: "https://api.trongrid.io",
	headers: { "TRON-PRO-API-KEY": apiKey },
	privateKey: privateKey,
      })
     

获取矿池信息

查看定活期矿池地址

  • 函数名称:reward_contract()

>>> let contract = await tronWeb.getContract('TFpg63byqDwniXnyxVYpSzBfWGBwZExM9J')
>>> await contract.methods.reward_contract().call()
TWHM9Lkf78pHy68yhxdP8SUaRpn1hgaCpS

查看活期奖励

  • 函数名称:earned(address)

  • 参数:用户地址

>>> let contract = await tronWeb.getContract('TUgVp8FzZcFLHwruuncXaQo2js5Ym2GqSj')
>>> await contract.methods.earned('TF5MekHgFz6neU7zTpX4h2tha5miPDUj3z').call()
1000000000000000000

执行交易

存款

  • 函数名称:deposit(uint256)

  • 参数:存款金额

>>> let contract = await tronWeb.getContract('TFpg63byqDwniXnyxVYpSzBfWGBwZExM9J')
>>> await contract.methods.deposit(1000000000000000000).send()

取款

  • 函数名称:withdraw(uint256)

  • 参数:取款金额

>>> let contract = await tronWeb.getContract('TFpg63byqDwniXnyxVYpSzBfWGBwZExM9J')
>>> await contract.methods.withdraw(1000000000000000000).send()