LISTA 机制

LISTA 机制

LISTA功能的关键组成部分在于一套跨区块链互动的智能合约和现有合约之间。LISTA在MakerDAO智能合约集的分叉基础上创建了其定制的智能合约。

模块

LISTA由2个主要模块组成:

  • 核心模块(MakerDAO分叉和Lista的交互合约)--提供抵押品,借入lisUSD,偿还lisUSD,提取抵押品,清算抵押资产。

  • 奖励模块--在LISTA中索取奖励。

要求

  • 最低存款金额 - 0.5021 BNB

  • 最低提款金额 - 0.5 BNB

  • 提取时间—7-15天

  • 最低借贷金额 - 50 lisUSD

  • 贷款不能低于50 lisUSD,所以用户可以选择偿还到剩余50 lisUSD 部分或全额偿还。

费用

  • 借款利息 - 为借入lisUSD而支付给Lista的利息。该利率是由Lista治理平台设定的固定数字。

  • 清算罚金 - 在清算过程中,在荷兰式拍卖中出售用户的抵押品时,以lisUSD的形式扣除的百分比。Interaction 比率

抵押品比率 - 用户抵押品价值的一个百分比,决定了用户的最大借款限额;它的计算方式如下。(lisUSD铸币的总金额/抵押品的总价值*100)。不同的资产将有不同的抵押品比率,取决于资产的波动性。抵押品比率被用作清算栏,以决定清算事件应该何时发生。

奖励

  • 借款奖励 - 用户借入lisUSD获得奖励,以LISTA--Lista代币的形式。奖励是动态计算的,是奖励率和用户在lisUSD中的总债务的乘积。奖励率是由Lista设定的固定数额。

  • 拍卖开始的奖励 - 任何触发CDP清算事件的人,即开始荷兰式拍卖的人,都会收到一笔固定费用(小费)和一定比例的费用(筹码),因为他们只是启动了这个过程。小费和筹码由Lista从Lista储备中支付。

  • 拍卖重启奖励--任何重启荷式拍卖的人,是清算过程的一部分,都会得到一笔固定费用(小费)和一定比例的费用(筹码)。当达到拍卖时间限制或价格下降达到一定阈值时,EOA可以重新启动拍卖。这两个限制是由Lista治理部门设定的。小费和筹码由Lista从Lista储备中支付。

清算模型

变量/步骤数值/公式

1单位抵押品的价格

$2

清算比例

66%

基于清算率的抵押品价格

$1.32

假设用户存入10个单位的抵押品

10 * 2 = $20

借入限额

用户存款 * 流动性比例 = 20 * 0.66 = $13.2

假设用户借入$13.2 of $lisUSD

13.2 $lisUSD

假设1单位抵押品的价格下降到

$1.8

带安全边际的抵押品单价

当前抵押品单价* 流动性比例 = 1.8 * 0.66 = $1.188

带安全边际的当前抵押品价值

抵押价格 * 抵押数量

= 1.188 * 10 = $11.88

正数使用户处于清算线之下

已借入额度 - 当前总抵押品借入限额 = 13.2 - 11.88 = $1.32

进行荷式拍卖的抵押品的数量

10

清算处罚(由Lista治理部门确定)

债务的13%

拍卖中需要支付的债务

借入额度 * 清算处罚 = 13.2 * 1.13 = $14.916

Buf(类似于清算罚金的百分比,由Lista治理部门确定)

2%

起拍价(顶部)

当前抵押品单价 * buf = 1.8 * 1.02 = $1.836

有人触发了拍卖,并获得小费+筹码作为奖励。

拍卖开始,价格逐渐下降。清算人可以参与购买定制数量的清算抵押品

Tau(直到价格为0的时间;由Lista治理部门确定)

例如:3600

Dur (由Lista治理部门queding)

拍卖开始后经过的时间(秒),例如:600

价格的线性下降(在以下事件中会被中断)

top * ((tau - dur) / tau) = 1.836 * ((3600 - 600) / 3600) = $1.53

因为两个条件之一而暂停拍卖。

- 尾巴(已过的具体时间量;由Lista治理固定)。

- 锁定(价格下降的百分比;40%的起始拍卖价格;由Lista管理部门固定)。

符合其中任何一项要求,都将重新开始拍卖。

等到有人重新启动拍卖

小费(统一收费;由Lista治理固定)

5 lisUSD

芯片(动态费用;由Lista治理固定)

0

重修者获得小费+芯片作为奖励

智能合约

实现Lista的智能合约有:

  • MakerDAO集--Maker协议,也被称为多抵押品Dai(MCD)系统,允许用户通过利用抵押资产来生成lisUSD。lisUSD是一种去中心化的、无偏见的、有抵押物支持的加密货币,与美元软挂钩。

    • ABACI — 在用户的资产清算过程中,荷兰拍卖的价格下降功能。

    • CLIP — 清算V2.0机制。

    • DOG — 在用户的资产清算过程中启动荷兰式拍卖。

    • JUG — 收集Lista的借贷利息,用于借给用户lisUSD。

    • JAR — 质押和解押lisUSD,铸造和销毁hHAY代币。

    • JOIN — BEP-20代币适配器:

      • HayJoin — MakerDAO和lisUSD之间的适配器,通过该适配器,当用户借入lisUSD代币时,将内部lisUSD从系统中提取为标准的ERC20代币,或者当用户向Lista偿还lisUSD贷款时,烧掉ERC20。

      • ceaBNBcJoin — MakerDAO和HelioProvider之间的适配器,允许用户资产存放在系统中进行抵押。

    • SPOT — 读取ankrBNB价格的神谕,这是一个在用户资产抵押过程中使用的中间代币。

    • VAT — 抵押债务头寸(CDP)的保险库。

    • VOW — 保险库资产负债表。保持跟踪lisUSD的债务或盈余。

  • CurveProxyForDeposit — 向StableSwap池添加流动性,获得LP代币,为Farming智能合约存入LP代币。

  • 挖矿(Farming) — 存放或提取挖矿的代币,在lisUSD中向存款人分发奖励。

  • 激励投票(IncentiveVoting)--在内部资金池(在挖矿合约中)或外部资金池(如Ellipsis、Wombat等)中分配奖励,这取决于投票情况,而投票情况取决于所投的Lista治理代币(未来功能)。

  • StableCoinStrategyCurve — 将PancakeSwap挖矿奖励(CAKE)换成lisUSD和BUSD,将其加入StableSwap流动性池中,获得LP代币,将这些LP代币加入池中的用户份额。

  • HelioRewards — 奖励分配,以Lista奖励代币的形式。

  • HelioToken — BEP-20兼容的奖励代币,给用户借入lisUSD。

  • HelioOracle — Lista奖励令牌的预言机。

  • HelioProvider — 通过Yield转换器将BNB包装成ceABNBc。

  • CerosRouter— 找到获得ankrBNB的最佳方式,这是一个在用户资产抵押过程中使用的中间代币。

  • CeToken — ceABNBc,它是MakerDAO内部的基础抵押品代币。

  • CeVault — 存储获得的ankrBNB,这是一个在用户资产抵押过程中使用的中间代币。

  • Interaction — MakerDAO合约的代理。向终端用户提供存款、提款、借款、还款和清算功能。

  • AuctionProxy — 荷式式拍卖的入口,是用户资产清算过程的一部分。允许用户开始和参与拍卖。

  • ankrBNB — 在用户资产抵押的过程中使用的流动性收益代币。

  • hBNB — 为用户铸造的代币,作为其抵押品的存款收据。

关于地址,请参考智能合约地址表。关于代码库,请参考GitHub上的智能合约repo

工作流程

以下是Lista的主要操作的高级细节描述。

抵押用户的资产以借用lisUSD

当用户发起存款时,将发生以下列事件:

  1. 用户通过HelioProvider::provide()向Lista转移BNB。.

  2. HelioProvider 为用户铸造hBNB作为其抵押品的存款收据。

  3. HelioProvider 获得ceABNBc,在里面运行以下逻辑:

    1. 通过 CerosRouter::deposit({value: msg.value})将BNB交换为ankrBNB。在这一步中,cerosRouter会权衡方法的收益率,并从以下2个选项中选择1个:

      1. 选项1:将BNB在DEX上换成ankrBNB。

      2. 选项2:通过BinancePool智能合约在Binance Liquid Staking中押注BNB并将BNB换成ankrBNB。

    2. cerosRouter将ankrBNB发送到CeVault ,用于存储交换的ankrBNB的数量。这是通过CeVault::depositFor(msg.sender, amount after exchange)完成的,其中msg.sender - HelioProvider地址,amount after exchange - 交换的ankrBNB的金额。

    3. CeVaultHelioProvider铸造ceABNBc.

  4. HelioProvider 通过Interaction::deposit(account, address(ceABNBc), amount)抵押ceABNBc,其中account - 用户的账户地址,address(ceABNBc) - ceABNBc智能合约的地址,amount - 用户最初抵押的BNB减去费用(BinancePool的(中继费用)。Interaction 在内部运行以下逻辑:

    1. 通过BEP-20代币智能合约的transfer()函数,将ceABNBc(BEP-20代币)转移到Interaction 智能合约上。

    2. 通过gem::join()将资产转移到MakerDAO金库。欲了解更多信息,请参考Join文档

    3. 通过VAT::behalf()使VAT 智能合约完全信任Interaction 智能合约。

    4. 通过VAT::frob()将资产锁在MakerDAO内,有效地将它们抵押起来。更多信息请参考VAT文档

    5. 发出一个存款事件。

借贷lisUSD

当用户发起借贷时,将发生以下事件。

  1. 通过Interaction::borrow()借入lisUSD。Interaction内部运行以下逻辑。

    1. 计算Lista内部当前的lisUSD值。计算时考虑到借款限额,即用户抵押的总资产的价格*抵押率(Lista设定的固定金额)。

    2. 用户通过VAT::frob()欠下相当于所借lisUSD的金额。更多信息,请参考VAT文档

    3. 通过HAYJoin::exit()转移借来的lisUSD。更多信息,请参考Join文档

    4. 发出一个借款事件。

挖矿lisUSD–BUSD (LP) (PancakeSwap — StableSwap)

含有两种情况:

  • 用户还没有LP代币。

  • 用户已有LP代币。

当用户没有LP代币但发起挖矿,下列事件会按次序发生:

  1. CurveProxyForDeposit通过lisUSD::approve(spender, amount)获取lisUSD代币,通过lisUSD::approve(spender, amount)获取BUSD代币,其中spender 表示CurveProxyForDeposit智能合约的地址,amount 表示批准访问的数额 。

  2. CurveProxyForDeposit 通过CurveProxyForDeposit::depositToFarming(stableSwap, amount0, amount1, minMintAmount)将已批准的代币加入到stableSwap 流动池,其中stableSwap 表示StableSwap池的地址,amount0 表示添加的lisUSD代币的数量,amount1 表示添加的BUSD代币数量,minMintAmount 表示在添加的流动资金中铸造的最低LP代币额度 。

  3. CurveProxyForDeposit 将#2所铸造的LP代币由Farming::deposit(uint256 _pid, uint256 _wantAmt, bool _claimRewards, address _userAddress)存入Farming,其中_pidFarming中表示池ID,_wantAmt 表示LP代币的数量,_claimRewards 表示自动索取的奖励(def. value — false), _userAddress表示使用该功能的用户地址 。

  4. Farming 将收取的LP代币通过StableCoinStrategyCurve::deposit(address _userAddress, uint256 _wantAmt)转移StableCoinStrategyCurve ,其中_userAddress 表示使用该功能的用户地址,_wantAmt 表示发送LP代币的数量 。

  5. StableCoinStrategyCurve 通过MasterChefV2::deposit(uint256 _pid, uint256 _wantAmt)将LP代币存入MasterChefV2 ,其中_pidMasterChefV2中表示池ID,_wantAmt 表示存入的LP代币数量。

当用户持有LP代币并发起挖矿,下列事件会按次序发生:

  1. Farming 通过PancakeStableSwapLP::approve(spender, amount)获取LP代币,其中lp 是PancakeSwap LP代币的智能合约,spender 表示Farming的地址,amount 表示获取LP代币的数量。

  2. 将LP代币由Farming::deposit(uint256 _pid, uint256 _wantAmt, bool _claimRewards, address _userAddress)存入Farming ,其中_pidFarming中表示池ID,_wantAmt 表示LP代币的数量,_claimRewards 表示自动索取的奖励(def. value — false), _userAddress 表示使用该功能的用户地址。

  3. Farming 将收到的LP代币通过StableCoinStrategyCurve via StableCoinStrategyCurve::deposit(address _userAddress, uint256 _wantAmt)转移到StableCoinStrategyCurve,其中_userAddress 表示使用该功能的用户地址,_wantAmt 表示发送LP代币的数量 。

  4. StableCoinStrategyCurve 将LP代币通过MasterChefV2::deposit(uint256 _pid, uint256 _wantAmt)存入MasterChefV2 , 其中_pidMasterChefV2表示池ID, _wantAmt 表示存入LP代币的数量。

复合挖矿奖励

当Lista创建复合奖励时,将发生以下一系列事件。.

  1. 通过StableCoinStrategyCurve::harvest()收获奖励。StableCoinStrategyCurve 内部运行以下逻辑:

    1. 通过MasterChefV2.withdraw(pid, _wantAmt)获取CAKE代币中的奖励,其中pidMasterChefV2中的资金池ID,_wantAmt— 0。

    2. 如果CAKE_amount>minEarnAmount,通过IPancakeRouter02(_uniRouterAddress)将所有CAKE交换到BUSD。swapExactTokensForTokens( _amountIn, 0, _path, _to, _deadline ),其中_amountIn —CAKE的数量,0 —没有得到BUSD的最小数量,_path —数列(CAKE地址,BUSD地址),_to —StabStableCoinStrategyCurve_deadline —区块时间戳 +700。否则,完成工作流程。

    3. 通过StableSwap.exchange(_i, _j, _dx, 0)交换一半的BUSD,换取lisUSD,其中_i — 1 (BUSD), _j— 0 (lisUSD), _dx — BUSD的数量,0 — 没有得到lisUSD的最小数量。

    4. 通过StableSwap::add_liquidity(amounts, 0)增加流动性,其中amounts— 数组(lisUSD的数量,BUSD的数量),0 — 没有最小数量的LP代币从增加的流动性中提取。

    5. 通过MasterChefV2.deposit(pid, wantAmt)将获得的LP代币存入农场,其中pidMasterChefV2中的池ID,wantAmt — 在#4获得的LP代币的数量。

领取挖矿奖励

当用户发起奖励申请时,下列事件将会按次序发生。

  1. 通过Farming::claim(address _user, uint256[] _pids)在lisUSD申请奖励,其中_user — 表示申请奖励的地址,_pids — 表示收取奖励的池序列ID。

提取lisUSD-BUSD(LP)(PancakeSwap-StableSwap)

当用户取消挖矿行为,下列事件将会按次序发生。

  1. 用户通过Farming::withdraw(uint256 _pid, uint256 _wantAmt, bool _claimRewards)取出LP代币,其中_pid — 在Farming中表示池ID,_wantAmt — 表示取出LP代币的数量(最高值被设置为uint256 提取用户所有的LP代币),_claimRewards — 表示自动领取奖励,Farming 基于以下逻辑运转:

    1. FarmingStableCoinStrategyCurve 经由StableCoinStrategyCurve::withdraw(address _userAddress, uint256 _wantAmt)取出LP代币,其中_userAddress — 表示使用该功能的用户地址,_wantAmt — 表示取出LP代币的数量。

    2. StableCoinStrategyCurve 通过MasterChefV2::withdraw(uint256 _pid, uint256 _wantAmt)MasterChefV2 取出LP代币,其中_pid — 在MasterChefV2中表示池ID,_wantAmt — 表示取出LP代币的数量。

你也可以使用在#1.1 中的withdrawAll(uint256 _pid, bool _claimRewards)提取用户的所有LP代币。

提取lisUSD-BUSD(PancakeSwap-StableSwap)

用户访问PancakeSwap上的StableSwap池,手动提取流动资金(lisUSD和BUSD)。

质押lisUSD

当一个用户发起质押挖矿,下列事件将会按次序发生:

  1. 通过JAR::exit()存入lisUSD,JAR 按照以下逻辑运行:

    1. 按照存入的lisUSD金额1:1的比例铸造hHAY代币。

    2. 发出加入事件。

偿还lisUSD

当一个用户发起取消质押挖矿,下列事件将会按次序发生。

  1. 通过JAR::exit()提取lisUSD,JAR 按照以下逻辑运行:

    1. 按照与存入的lisUSD数额1:1的比例燃烧hHAY代币。

    2. 发出退出事件。

取消质押lisUSD

当用户发起还款时,以下的事件序列将会发生。

  1. 通过Interaction::payback()向Lista偿还借来的lisUSD。Interaction 内部运行以下逻辑:

    1. 通过BEP-20代币智能合约的transfer()函数将lisUSD(BEP-20代币)转移到Interaction 智能合约中。

    2. 通过HAYJoin::join()将lisUSD转移到MakerDAO的金库。欲了解更多信息,请参考Join文档

    3. 计算Lista内部当前的lisUSD值。

    4. 通过VAT::frob()从用户的债务中减去已偿还的lisUSD金额。更多信息,请参考VAT文档

    5. 发出一个还款事件。

提取抵押品

当用户发起提款并提供他们的hBNB时,将发生以下事件。

  1. 平台通过HelioProvider::release()烧毁用户的hBNB。

  2. HelioProvider 通过Interaction::withdraw(account, address(ceABNBc), amount)取回ceABNBc,其中account - 用户的账户地址,address(ceABNBc) - ceABNBc智能合约的地址,amount - 用户最初抵押的BNB - 费用(BinancePool的(中继费)。Interaction 在内部运行以下逻辑:

    1. 通过VAT::frob()解除资产的锁定。欲了解更多信息,请参考VAT文档

    2. 通过VAT::flux()将资产从CDP引擎转移到MakerDAO保险库。更多信息,请参考VAT文档

    3. 通过gem::exit()将资产转移到用户的钱包里。更多信息,请参考Join文档

    4. 发出一个提款事件。

  3. 将ceABNBc兑换成BNB。

    1. HelioProvider 通过CerosRouter::withdraw(address recipient, uint256 amount)将ceABNBc兑换成ankrBNB,其中address recipient- 希望在未来释放BNB的用户地址, amount 将hBNB兑换成BNB的金额。

    2. cerosRouter 反过来调用 CeVault::withdrawFor(msg.sender, address(this), amount) 将 ankrBNB 换成 BNB,其中address(this) - 产量转换器的地址, amount - 将 hBNB 换成 ankrBNB 的金额, msg.sender - HelioProvider 智能合约的地址。

    3. CeVault 通过BinancePool::unstakeCerts(recipient, realAmount)烧毁ankrBNB并解冻BNB,其中recipient- 用户的地址,realAmount - BNB的数量*ankrBNB.ratio()

申请奖励

借款人可以以HELIO的形式申请奖励,以借入lisUSD。当用户发起一个索要奖励的行动时,将发生以下事件顺序:

  1. 通过HelioRewards::claim()向用户的钱包索取所借lisUSD的奖励。 HelioRewards 内部运行以下逻辑。

    1. 更新奖励池的大小和奖励率。

    2. 通过HelioToken::transfer()将待领的用户奖励转移到用户的钱包。

清算

当资产清算是可能的,并且当用户发起清算行动时,将发生以下事件的顺序。

关于具体参数及其当前值的解释,请参考本页面前面的清算模型

  1. 当带安全边际的抵押品的当前价值<借入的lisUSD金额时,一个用户(任何人)通过Interaction::startAuction(token, user, keeper)触发清算过程,其中token --被清算资产的地址,user --其抵押品被清算的用户的地址,keeper --因开始拍卖而获得奖励(小费+芯片)的用户的地址。Interaction内部运行以下逻辑:

    1. 启动一个荷兰式拍卖:

      1. 设置被清算的抵押品的起始拍卖价格等于(current_collaterral_unit_price * buf).

      2. 让任何人通过buyFromAuction(token, auctionId, collateralAmount, maxPrice, receiverAddress)来购买大于尘埃的任何金额(目前是1美元)。 token - 清算资产的地址, auctionId - 拍卖的ID, collateralAmount - 购买的金额, maxPrice - 支付的价格 , receiverAddress- 买家的地址。

      3. 如果maxPirce > current_ auction_collateral_unit_price,则将用户的抵押品的请求金额卖给买方。

      4. 否则,逐步降低拍卖价格,让任何人仍然购买。从一个较高的价格开始下降的原因是机器人和来自预言机的抵押品价格的变化,以避免任何突然的损失。拍卖持续一个固定的时间(tau),由Helio社区治理设定。价格在拍卖的每一秒都会重新计算。

      5. 当达到拍卖时间限制或价格下降达到一定的阈值(限制由Helio管理部门设定,目前时间限制为21600秒,价格限制为40%),让任何人来重新开始拍卖,并获得奖励(小费+筹码)。

    2. 将1.3中支付的价格,以lisUSD为单位,从买家的钱包转移到Helio。

    3. 将ceABNBc换成ankrBNB,并将ankrBNB发送到买方的钱包。实际上,买方购买的是ankrBNB,他们以后可以兑换BNB。

    4. 偿还债务并保留利润(借款金额+(借款利息+清算罚款))。

    5. 计算剩余部分(支付的价格-债务-利润)。将剩余部分发送到用户的钱包。

Last updated