原文标题:《Dissecting the Qilin protocol》
原文来源:0xkowloon
原文翻译:0x33,律动BlockBeats
Qilin Protocol 是一种去中心化波动性协议。它的出现始于加密在线聊天平台Codex 上的一群网友。他们在 2020 年首次了解到 DeFi,并找到了将衍生品交易引入加密货币长尾资产的方法,由此诞生了 Qilin Protocol。
Qilin 本质上是一个衍生品交易协议,允许交易员使用杠杆。
其主要特性包括:
▪️ 提供高达 100 倍多头或空头杠杆。
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 代币供应量
通过每 8 小时检查多头和空头头寸的不平衡比例来计算偏差率。如果利率高于失衡阈值,则触发 rebase 资金利率,并将费用转移给 LP。
滑动动态指数衡量的是未平仓头寸对流动性的风险。指数越小,下滑幅度越大。这是因为指数将乘以常数 k, k 越小,流动性就越低。随着未对冲头寸规模的增长,需要出现更大的下滑,以缩小失衡。大量未对冲的头寸会导致资金损失。
Qilin 主要的入口点是 Fluidity.sol 和 Exchange.sol。LP 们可以通过 Fluidity.sol 提供流动性,并且在 FundToken.sol. 中铸造和销毁 LS 代币。交易者可以通过 Exchange.sol 来建立或者关闭头寸。清算人可以通过 Liquidation.sol 完成平仓。
整个协议的数据存储在 Depot.sol 中,所有者可以在 SystemSetting.sol 中修改协议的配置。
#initialFunding 为了初始化一个流动性池,必须调用资金。它检查系统是否活跃,初始资金是否完整,LS 代币的总供应量在最大初始流动性资金范围内,然后向存储库添加流动性,将 LP 的 USDC 转移到池中并铸造 LS 代币。
在初始融资期间,USDC 和 LS 代币之间的汇率是 1:1。存储库地址通过 AddressResolver#importAddresses 导入流动性合约。
一旦达到初始资金上限,就可以通过调用流动性 #closeInitialFunding 来关闭该基金。它将 Depot 中的_initialFundingCompleted 标志设置为 true。
初始融资阶段结束后,LP 可以通过调用流动性 #fundLiquidity 来为流动性池提供资金。它的行为类似于 initialFunding,除了它要求融资期是完整的,而且汇率不再是 1:1。
LS 代币的价格等于流动性池的 USDC 价值除以 LS 代币总供应量。
池中的新 USDC 值不能超过存储库中总仓位规模的保证金比率。
交易者可以通过调用 Exchange#openPosition 来建立杠杆头寸。
杠杆水平必须在被允许水平范围内,而头寸规模必须大于最低保证金金额。
长线方向是 1 短线方向是 2。
交易所从 ExchangeRate 合约中获得现货价格,然后将其用作持仓的开盘价。这个价格是可从预言机获取。
交易所在存储库开一个新仓位,保证金从交易员处转移到存储库,并计算交易员的份额和规模。
如果:
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
它将交易员的头寸添加到存储库的摘要中,并将一条新的头寸记录添加到存储库中。
交易者的头寸状态可以通过呼叫清算 Liquidation#alertLiquidation 来检查。
它检索头寸的 PnL,然后在 (加利润/扣除损失) 和扣除服务费和保证金损失后,检查头寸的最低保证金比率是否保持不变。
如果系统有一个平仓费,那么就有一个服务费,这是交易员的杠杆头寸乘以平仓费百分比。
交易员的净利润可以通过调用 Depot#calNetProfit 来获取。如果现货价格高于多头头寸的未平仓价格,或者现货价格低于空头头寸的未平仓价格,交易者就获利了。净利润是杠杆头寸乘以价差除以公开价格。
如果当前 ETH 价格为 3000 USDC,则净利润为
交易员的利润损失可以通过调用 Depot#calMarginLoss 来弥补。保证金损失不能超过交易员的杠杆头寸 (这意味着它可以是 0,但不可为负)。它等于交易员的杠杆头寸减去他的份额净值。
根据上述数据,利润损失将为
如果保证金+利润/亏损大于服务费+保证金损失,则检查金额是否小于保证金的最小比例。否则,不进行检查,因为该头寸实际上已经被清算 (参见 Liquidation#alertBankruptedLiquidation)。
如果一个交易员的保证金低于协议的保证金比率要求,他就需要补充保证金。否则,他将面临被清算的风险。这可以通过调用 Exchange#addDeposit 来实现。
额外的保证金必须超过系统的最低附加存储要求。
一旦需求明确,它将额外的保证金转移到仓库,并更新仓库的摘要。
拥有超过最小 LS 代币要求的 LP 有权通过调用 Liquidation#liquidate 来清算的头寸。
首先要检查的是 msg.sender 有足够的 LS 代币来享受此权利。
随后合约将计算清算的服务费,利润损失和 PnL。公式与 Liquidation#alertLiquidation 相同。
利润 (+利润或-亏损) 必须包括服务费和利润损失。否则该头寸不能被清算 (必须通过调用 Liquidation#alertBankruptedLiquidation 清算)。
最后的保证金在考虑了所有变量后必须低于最低保证金比率的要求,否则无法完成清算。
清算奖励为扣除服务费和利润损失后的利润 (+利润或-亏损)
合约随后更新存储库摘要内容。
首先,它更新了流动性池。
· 这笔费用被添加到流动性池中。
· 如果头寸是盈利的,从流动性池中扣除利润。
· 如果头寸不赚钱,就把损失加到流动性池中。
· 从流动性池中扣除任何 (保证金损失-头寸保证金,最小为 0)。
总保证金增加了 (保证金损失-头寸保证金)。
总杠杆头寸减少了该头寸的份额价值,这些份额被移除。
总规模由持仓规模因为头寸开仓位置乘以剩余 rebase 利率 (考虑到持仓与平仓之间的资金利率变化) 而有所减少。
最后,将清算报酬转移给清算人,并删除该头寸。
Liquidation#bankruptedLiquidate 没有太多特别的清算步骤,其清算操作类似于正常清算。关键的区别是
1. 保证金 (+利润或-亏损) 必须不足以弥补服务费和保证金损失。
2. 在该情况下,清算报酬被清算费用取代,因为该头寸无法产生报酬,报酬等于该头寸的保证金乘以清算费用的百分比。
新池的流动性就是以当前池的流动性+/-保证金与保证金损失之差,再减去清算费。
交易者可以通过调用 Exchange#closePosition 来平仓。
它得到持仓的份额价值 (相同公式)、服务费 (相同公式) 和利润率损失 (杠杆头寸-份额价值)。
无论这个头寸是否盈利,它都不会清算。
转回给交易员的资产价值等同于保证金 (+利润或-损失) 减去费用和保证金损失。如果该值大于流动性池 (+保证金) 所能覆盖的范围,则将其设置为后一个值。
USDC 正在被转回给交易员。
它与清算基本相同,除了新的流动性池价值是流动性池价值加上费用 (+交易员损失或-交易员利润)。
rebase 每 8 小时发生一次,可以通过调用 Exchange#rebase 来完成。在这里只讨论关键逻辑。setting.rebaseInterval 时间周期必须已经运行。
通过重新计算 rebaseLeft(rebase 资金利率)交易所更新新的 rebase 时间和存储库的状态。
在存储库内,总利润,总杠杆头寸以及总份额被再 rebase 的资金利率扣除,以便将资金转移到流动性池。
Qilin 在其衍生品交易协议中实现了对等池模型。它通过定期调整基准和应用滑点动态敏感性指数,积极试图保护其流动性提供者免受未对冲头寸的影响。 它还允许流动性提供者通过加入不同的 LP 部分来选择他们愿意承担的风险。它是现有衍生品协议的竞争产品。
原文链接
欢迎加入律动 BlockBeats 官方社群:
Telegram 订阅群:https://t.me/theblockbeats
Telegram 交流群:https://t.me/BlockBeats_App
Twitter 官方账号:https://twitter.com/BlockBeatsAsia