深度剖析Qilin Protocol,如何将衍生品引入加密货币长尾资产
原文标题:《Dissecting the Qilin protocol》
原文来源:0xkowloon
原文翻译:0x33,律动BlockBeats
Qilin Protocol 是一种去中心化波动率协议。它的出现始于加密在线聊天平台Codex 上的一群网友。他们在 2020 年首次了解到 DeFi,并找到了将衍生品交易引入加密货币长尾资产的方法,由此诞生了 Qilin Protocol。
Qilin 本质上是一个衍生品交易协议,允许交易员使用杠杆。
其主要特性包括:
▪️ 提供高达 100 倍多头或空头杠杆。
▪️ 流动性提供者可以通过初始基金发行购买流动性份额代币 (LS 代币)。在需要更多流动性之前,流动性池是有上限的。押金是单面使用报价货币 (现金结算)。
▪️ 针对不同风险偏好的流动性提供者,LP 池分为 A 和 B 部分。
▪️ LS 代币是代表 LP 份额的 ERC-20 代币。
▪️ 交易员的多头/空头头寸也被通证化,因此他们的头寸也可交易。
▪️ Rebase 融资利率适用于当持仓规模超过 LP 的阈值时。融资利率被转移给 LP 以对冲流动性风险,直到该比率再次低于阈值。
▪️ 滑点是动态的,取决于持仓的大小。将滑移敏感指数应用于常数积式 x * y = k 计算,将费用转移给 LP 对冲流动性风险。
Tranches 层级
LS 代币可以属于 A 级 (ALP) 或 B 级 (BLP)。
A 级为风险偏好较低的 LP
它具有以下特点:
· 分享 15% LP 利润;
· 无上限限制;
· 未使用的流动性可被存入其他协议以产生收益;
· 当交易对有高未平仓头寸时,可以转换为 BLP。目的是回补未对冲的头寸。当未平仓头寸的规模下降时,这些 BLP 将返回到 A 级
B 级为风险偏好较高的 LP
它具有以下特点:
· 可分得 85% LP 利润;
· 100 万美元上限。考虑到 10% 的多头/空头仓位差,该上限可支撑 1900-2100 万美元的交易量;
· 持仓不同立场交易员头寸。
LS 代币的价格与 LP 的价值成正比。随着 LP 规模从协议活动中增长,代币持有者将有机会获利。
如果 LP 处于亏损状态,则可以折扣低价购买 LS 代币以激励更多的存款。
LS 代币价格= LP 值÷ LS 代币供应量
Rebase 资金率
通过每 8 小时检查多头和空头头寸的不平衡比例来计算偏差率。如果利率高于失衡阈值,则触发 rebase 资金利率,并将费用转移到 LP。
https://image.theblockbeats.com/upload/2021-07-04/913cff688d63eb03d340bb9260554e29f9550a56.png
滑点动态算法
滑动敏感指数衡量的是未平仓头寸对流动性的风险。指数越小,下滑幅度越大。这是因为指数将乘以常数 k, k 越小,流动性就越低。随着未对冲头寸规模的增长,需要出现更大的下滑,以缩小失衡。大量未对冲的头寸会导致资金损失。
https://image.theblockbeats.com/upload/2021-07-04/4e720db3ba7dacdf047875aa6173eded4f3a8205.png
代码库
Qilin 主要的入口点是 Fluidity.sol 和 Exchange.sol。LP 们可以通过 Fluidity.sol 提供流动性,并且在 FundToken.sol. 中铸造和销毁 LS 代币。交易者可以通过 Exchange.sol. 来建立或者关闭头寸。清算人可以通过 Liquidation.sol 完成平仓。
整个协议的数据存储在 Depot.sol 中,所有者可以在 SystemSetting.sol 中修改协议的配置。我们将查看 ETH-USDC 池的生命周期。
初始化一个资金
Fluidity #initialFunding 为了初始化一个流动性池,必须调用资金。它检查系统是否活跃,初始资金是否完整,LS 代币的总供应量在最大初始流动性资金范围内,然后向存储库添加流动性,将 LP 的 USDC 转移到池中并铸造 LS 代币。
在初始融资期间,USDC 和 LS 代币之间的汇率是 1:1。存储库地址通过 AddressResolver#importAddresses 导入流动性合约。
https://image.theblockbeats.com/upload/2021-07-04/a61ff6d352cebe2f87819fe7cd8b5af3f6aec2e5.png
一旦达到初始资金上限,就可以通过调用流动性 #closeInitialFunding 来关闭该基金。它将 Depot 中的_initialFundingCompleted 标志设置为 true。
https://image.theblockbeats.com/upload/2021-07-04/b39d7db40383c982d8e46ceff95389168391e62b.png
增加流动性
初始融资阶段结束后,LP 可以通过调用流动性 #fundLiquidity 来为流动性池提供资金。它的行为类似于 initialFunding,除了它要求融资期是完整的,而且汇率不再是 1:1。
https://image.theblockbeats.com/upload/2021-07-04/34b85a599cf16b6f7b1717a23db1e1a995c28d44.png
LS 代币的价格等于流动性池的 USDC 价值除以 LS 代币总供应量。
https://image.theblockbeats.com/upload/2021-07-04/a8d670f028dc0b17df36d5af7dc9b30eb15e645b.png
池中的新 USDC 值不能超过存储库中总仓位规模的保证金比率。
https://image.theblockbeats.com/upload/2021-07-04/a019b1a38be87ddd935e8c66d00df9ada7e6d5f9.png
建立杠杆多头头寸
交易者可以通过调用 Exchange#openPosition 来建立杠杆头寸。
杠杆水平必须在被允许水平范围内,而头寸规模必须大于最低保证金金额。
https://image.theblockbeats.com/upload/2021-07-04/3c8fd6a122db21dfbe7678d582c11a61b1a2901b.png
长线方向是 1 短线方向是 2。
https://image.theblockbeats.com/upload/2021-07-04/9cf61078fac3bb0f96931f9b3212397c473ba735.png
交易所从 ExchangeRate 合约中获得现货价格,然后将其用作持仓的开盘价。这个价格是可从预言机获取。
https://image.theblockbeats.com/upload/2021-07-04/0ffed0f01283a07b130dcbcbfdb0e874365c5e77.png
交易所在存储库开一个新仓位,保证金从交易员处转移到存储库,并计算交易员的份额和规模。
如果:
1 ETH = 2,500 USDC
保证金 = 5,000 USD
杠杆 = 100x
池中多头总杠杆=100,000,000 USDC
多头总份额=100
那么你的:
杠杆位置=500,000 USDC
净值=100,000,000 ÷ 100 = 1,000,000 (净值是每份额的杠杆头寸)
份额= 5,000 ÷ 1,000,000 = 0.005
大小= 5,000 ÷ 2,500 = 2
https://image.theblockbeats.com/upload/2021-07-04/fa178bbbaad4b2db5fa13c3b2e747bf2c12655b0.png
它将交易员的头寸添加到存储库的摘要中,并将一条新的头寸记录添加到存储库中。
https://image.theblockbeats.com/upload/2021-07-04/ba65d477e0fb54bfb84c9d858b8740b562cbb6fb.png
检查头寸清算状态
交易者的头寸状态可以通过呼叫清算 Liquidation#alertLiquidation 来检查。
它检索头寸的 PnL,然后在 (加利润/扣除损失) 和扣除服务费和保证金损失后,检查头寸的最低保证金比率是否保持不变。
如果系统有一个平仓费,那么就有一个服务费,这是交易员的杠杆头寸乘以平仓费百分比。
https://image.theblockbeats.com/upload/2021-07-04/796e2d983b06109b2a2e640735ffa9154624d97a.png
计算净利润
交易员的净利润可以通过调用 Depot#calNetProfit 来获取。如果现货价格高于多头头寸的未平仓价格,或者现货价格低于空头头寸的未平仓价格,交易者就获利了。净利润是杠杆头寸乘以价差除以公开价格。
https://image.theblockbeats.com/upload/2021-07-04/5069ac96ccbaff5a1c2fb36e6b49701119fd344c.png
如果当前 ETH 价格为 3000 USDC,则净利润为
https://image.theblockbeats.com/upload/2021-07-04/9203e35e910fc127cf9a07c7dc302af2924cf7da.png
计算利润损失
交易员的利润损失可以通过调用 Depot#calMarginLoss 来弥补。保证金损失不能超过交易员的杠杆头寸 (这意味着它可以是 0,但不可为负)。它等于交易员的杠杆头寸减去他的份额净值。
https://image.theblockbeats.com/upload/2021-07-04/9139a66449fb2c429f042a2625ed440ff65a146a.png
根据上述数据,利润损失将为
https://image.theblockbeats.com/upload/2021-07-04/a93461519d80fce1c2def726b5c03b4766ad3c58.png
比较保证金价值与保证金比率
如果保证金+利润/亏损大于服务费+保证金损失,则检查金额是否小于保证金的最小比例。否则,不进行检查,因为该头寸实际上已经被清算 (参见 Liquidation#alertBankruptedLiquidation)。
https://image.theblockbeats.com/upload/2021-07-04/44c2d70c40389ecc1df002ea36d347869c1cbc1f.png
增加现有多头头寸的利润率
如果一个交易员的保证金低于协议的保证金比率要求,他就需要补充保证金。否则,他将面临被清算的风险。这可以通过调用 Exchange#addDeposit 来实现。
额外的保证金必须超过系统的最低附加存储要求。
https://image.theblockbeats.com/upload/2021-07-04/eee8c31ade3663bbd24e09b83adf1543d158761b.png
一旦需求明确,它将额外的保证金转移到仓库,并更新仓库的摘要。
https://image.theblockbeats.com/upload/2021-07-04/7a98ce31b0745fa1c96eaf624c4b081b9f2c806d.png
平仓
拥有超过最小 LS 代币要求的 LP 有权通过调用 Liquidation#liquidate 来清算的头寸。
首先要检查的是 msg.sender 有足够的 LS 代币来享受此权利。
https://image.theblockbeats.com/upload/2021-07-04/d34ba590dcf26dbf71c33377447065e0e9c69f2c.png
随后合约将计算清算的服务费,利润损失和 PnL。公式与 Liquidation#alertLiquidation 相同。
https://image.theblockbeats.com/upload/2021-07-04/8146c5095052c31d5a41320092bb19459d73d8b1.png
利润 (+利润或-亏损) 必须包括服务费和利润损失。否则该头寸不能被清算 (必须通过调用 Liquidation#alertBankruptedLiquidation 清算)。
https://image.theblockbeats.com/upload/2021-07-04/bf66b37946aaa73e5584c219af88ab6e0e0cc785.png
最后的保证金在考虑了所有变量后必须低于最低保证金比率的要求,否则无法完成清算。
https://image.theblockbeats.com/upload/2021-07-04/1c6ccc7924b0c8b8eeca1cc518e3a7db724b8a07.png
清算奖励为扣除服务费和利润损失后的利润 (+利润或-亏损)
https://image.theblockbeats.com/upload/2021-07-04/81528657e77064af9ff8f3e109c94db7b7d2fc11.png
合约随后更新存储库摘要内容。
首先,它更新了流动性池。
· 这笔费用被添加到流动性池中。
· 如果头寸是盈利的,从流动性池中扣除利润。
· 如果头寸不赚钱,就把损失加到流动性池中。
· 从流动性池中扣除任何 (保证金损失-头寸保证金,最小为 0)。
https://image.theblockbeats.com/upload/2021-07-04/140a55200b39fe87bfd1459361f5bdf2b724af97.png
总保证金增加了 (保证金损失-头寸保证金)。
https://image.theblockbeats.com/upload/2021-07-04/aa5afb7e8272f014b57227567cf6a4078c44bde9.png
总杠杆头寸减少了该头寸的份额价值,这些份额被移除。
https://image.theblockbeats.com/upload/2021-07-04/2300c8a02d839a76992ffdeb31d975a4a9932646.png
总规模由持仓规模因为头寸开仓位置乘以剩余 rebase 利率 (考虑到持仓与平仓之间的资金利率变化) 而有所减少。
https://image.theblockbeats.com/upload/2021-07-04/2792bc315e439999e6a6c9cee14517c1e4825e02.png
最后,将清算报酬转移给清算人,并删除该头寸。
https://image.theblockbeats.com/upload/2021-07-04/8686ceadc981525e44c4601bc3d96f46449ab895.png
清算破产头寸
Liquidation#bankruptedLiquidate 没有太多特别的清算步骤,其清算操作类似于正常清算。关键的区别是
1. 保证金 (+利润或-亏损) 必须不足以弥补服务费和保证金损失。
2. 在该情况下,清算报酬被清算费用取代,因为该头寸无法产生报酬,报酬等于该头寸的保证金乘以清算费用的百分比。
https://image.theblockbeats.com/upload/2021-07-04/8b95d7c0babd852396bdb6e506f3d2a8cf75ff30.png
新池的流动性就是以当前池的流动性+/-保证金与保证金损失之差,再减去清算费。
https://image.theblockbeats.com/upload/2021-07-04/46bad3e585d1b4f53b9e1d4f38fca50e6f62a3e5.png
平仓多头头寸
交易者可以通过调用 Exchange#closePosition 来平仓。
它得到持仓的份额价值 (相同公式)、服务费 (相同公式) 和利润率损失 (杠杆头寸-份额价值)。
https://image.theblockbeats.com/upload/2021-07-04/0768da9de2386c3dadf0294dceb75cc08defac58.png
无论这个头寸是否盈利,它都不会清算。
https://image.theblockbeats.com/upload/2021-07-04/9cc12342452040625f8b8388379ee9a377d04812.png
转回给交易员的资产价值等同于保证金 (+利润或-损失) 减去费用和保证金损失。如果该值大于流动性池 (+保证金) 所能覆盖的范围,则将其设置为后一个值。
USDC 正在被转回给交易员。
它与清算基本相同,除了新的流动性池价值是流动性池价值加上费用 (+交易员损失或-交易员利润)。
Rebasing 多头池
rebase 每 8 小时发生一次,可以通过调用 Exchange#rebase 来完成。在这里只讨论关键逻辑。setting.rebaseInterval 时间周期必须已经运行。
通过重新计算 rebaseLeft(rebase 资金利率)交易所更新新的 rebase 时间和存储库的状态。
在存储库内,总利润,总杠杆头寸以及总份额被再 rebase 的资金利率扣除,以便将资金转移到流动性池。
总结
Qilin 在其衍生品交易协议中实现了对等池模型。它通过定期调整基准和应用滑点动态敏感性指数,积极试图保护其流动性提供者免受未对冲头寸的影响。 它还允许流动性提供者通过加入不同的 LP 部分来选择他们愿意承担的风险。它是现有衍生品协议的竞争产品。
原文链接
Strategy Announces Initial Public Offering of Perpetual Preferred Stock
Strategy announces IPO for 5M shares of Variable Rate Series A Perpetual Stretch Preferred Stock (ST...
Analyst Drops ‘Realistic’ Price Predictions For Bitcoin, Ethereum, LINK, BNB, And Aptos
As the crypto market gears up for what many expect to be a major bull run in 2025, top analysts are ...
SafePal Taps 1inch Swap API for Faster, Cheaper Crypto Trades
The integration permits SafePal consumers to leverage the robust routing technology of 1inch for sec...