本文介绍了Solana上最大的永续期货DEX——Drift Protocol。Drift通过其架构设计,如Solana高性能区块链的使用、交叉保证金风险引擎、去中心化Keeper网络等,实现了低滑点、高杠杆的交易体验。此外,文章深入探讨了Drift的永续引擎、风险引擎以及Just-In-Time (JIT) 流动性机制,展示了其在DeFi领域的创新。
Drift Protocol
Drift Protocol 是 Solana 上最大的开源永续期货 DEX,能够以低滑点、高杠杆进行 cross-margining 交易。它对 DeFi 至关重要,自 2021 年以来已处理超过 200 亿美元的交易量,数据来源 CoinGecko。
Drift Protocol 的架构建立在 Solana 区块链的高性能能力之上,这对于支持具有高杠杆和复杂订单类型等功能的衍生品交易所至关重要。Solana 固有的速度和低交易成本直接为 Drift 平台上的用户提供了更流畅、更具成本效益的交易体验。
Drift Perps 协议的核心机制
Drift 设计的核心要素是它的 cross-margined 风险引擎。该系统允许用户利用他们在不同资产和头寸中的全部抵押品余额来满足保证金要求,从而提高资本效率。然而,这种方法需要一个复杂的框架来计算保证金和管理用户投资组合中潜在的清算。此外,Drift 的订单簿、流动性提供和清算流程由一个去中心化的 Keeper Network 推动。该网络由受激励的代理和做市商组成,在提供 Just-In-Time (JIT) 流动性、执行订单撮合以及确保及时清算抵押不足的头寸方面发挥着至关重要的作用。
该架构围绕着关键帐户展开:
指令流包括:
Drift 的架构
核心是 User Account/Subaccount(用户帐户/子帐户),它是每个用户的主要接口,持有他们存入的抵押品、未平仓交易头寸以及累计的盈亏 (P&L)。用户有能力在单个主帐户下管理多个子帐户,从而可以隔离交易策略或风险管理。该协议还利用 Vault Accounts(金库帐户),指的是 Drift 生态系统中的程序和金库地址,这对于识别 Solana 区块链上的协议并与之交互至关重要。Drift Protocol 的主网实例使用程序地址 dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH
和金库地址 JCNCMFXo5M5qwUPg2Utu1u6YWp3MbygxqBsBeXXJfrw
运行。
对于其借贷市场,Drift 采用专用的 Lend/Borrow Accounts(借/贷帐户) 来跟踪用户用于贷款的存款以及用户借入的未偿还金额。为了增强协议的弹性,Insurance Fund Account (保险基金帐户) 持有用户质押的资产,这些资产从交易费用中产生收益,旨在弥补协议内可能发生的潜在损失。流动性提供通过 Backstop AMM Liquidity (BAL) Accounts(后端 AMM 流动性 (BAL) 帐户) 实现,流动性提供者使用这些帐户通过杠杆头寸为 Backstop AMM 做出贡献以赚取收益。协议的运营方面通过诸如 Fee Pool Account(费用池帐户) 之类的帐户进行管理,该帐户会累积平台产生的交易费用,而 P&L Pool Account(损益池帐户) 与用户交易活动产生的损益相关联。Drift 还支持 Delegated Accounts(委托帐户),该功能允许用户授予另一个 Solana 帐户有限的权限来代表他们行事,特别是对于诸如存入资金以及下达或取消订单之类的操作。
交易引擎依赖于 Perpetual Market Accounts(永续合约市场帐户) 和 Spot Market Accounts(现货市场帐户),它们存储着每个相应市场的状态,包括 AMM 储备、资金费率(对于永续合约市场)、未平仓合约以及代币余额以及借/贷利率(对于现货市场)之类的详细信息。通过 Oracle Accounts(预言机帐户) 确保准确的实时定价,这些帐户保存每个交易市场的价格数据,这些数据主要来自 Pyth Network。这个复杂的链上帐户网络使 Drift Protocol 能够以模块化和透明的方式管理其多样化的功能,从而清晰地隔离用户资金、交易运营和协议级功能。委托帐户的引入进一步增强了平台的灵活性,从而能够实现更复杂的交易策略和潜在的集成。
Drift 流的顺序图
Drift Protocol 通过使用户能够通过发送到 Solana 区块链上其指定程序地址的交易来发起交互,从而协调其指令流。这些交易会调用与用户操作相关的特定程序指令,例如存入或提取资产、下达交易订单或取消现有订单。特别是,市价单以 Just-In-Time (JIT) 拍卖开始,以优化执行。
同时,Keeper 网络监控链上限价单,构建链下订单簿,并在将 taker 订单与 resting 限价单匹配或在被触发时将其路由到 Automated Market Maker (AMM) 方面发挥着关键作用。
AMM 充当可靠的后备,保证 JIT 拍卖期间或限价单未匹配的市价单的流动性。
并行运行的风险引擎会持续评估用户的保证金要求(基于抵押品和未平仓头寸),并在需要时启动清算以保护协议的偿付能力。这种复杂的多层设计将链上订单放置与链下订单簿管理无缝融合,从而提供增强的性能和简化的用户体验。下图说明了此用户流程。
Drift Protocol 的永续引擎使用户能够参与各种加密资产的杠杆交易,而没有到期日的限制,从而提供持续的交易体验。
当交易者通过 place_perp_order 指令下订单时,引擎会执行保证金要求检查,验证市场状况,并立即将订单与 JIT 匹配,或者将其存储在订单簿中以供以后执行。
Drift 采用的混合方法,将传统的订单簿模型与 JIT 流动性的潜力相结合,表明了一种复杂的订单匹配系统。该系统可能会优先利用现有的订单簿深度,但也可以战略性地利用 JIT 流动性来实现更好的定价和更高的交易者成交率,特别是对于可能遇到重大滑点的大额订单。
Drift 永续引擎中的头寸管理侧重于资本效率和风险缓解。该协议利用 cross-margined 风险引擎,使用户能够将任何存入的代币用作其永续互换头寸以及平台提供的其他 DeFi 功能的抵押品。为了提供灵活性和增强的风险管理,每个用户都有一个主帐户,并且可以选择创建多个子帐户,从而可以隔离不同的交易策略或头寸。每个交易头寸的详细信息,包括基础资产的数量、相应的报价资产价值、平均入场价格以及当前的未实现盈亏 (P&L),都会在用户的指定帐户中得到仔细跟踪。风险引擎在根据存入资产的抵押权重、用户未平仓头寸的大小以及当前市场波动等因素持续计算每个用户的保证金要求方面发挥着关键作用。为了维持永续互换价格与基础资产价格的一致性,该协议会定期在多头和空头头寸的持有者之间进行资金支付。此外,Drift 为用户提供了主动管理其风险的工具,包括设置止损订单以限制潜在损失以及设置止盈订单以在所需的利润水平自动平仓的能力。这种全面的头寸管理系统强调通过 cross-margining 提高资本效率,并通过各种功能和自动化机制实现强大的风险控制。
处理交易执行和管理用户头寸的核心逻辑可能位于 protocol-v2
存储库的 programs/clearing_house/src/lib.rs
文件中。Automated Market Maker 的实现会在 programs/amm/src/lib.rs
文件中详细介绍,它在提供流动性和确定执行价格方面起着至关重要的作用。去中心化限价订单簿的功能及其与 Keeper Bot 网络的交互将在 programs/orderbook/src/lib.rs
文件中找到。对于希望与 Just-In-Time 流动性机制集成的开发人员,protocol-v2
存储库中的 sdk/src/jitProxyClient.ts
文件提供了必要的 Typescript SDK。
Drift Protocol 的风险引擎通过使用 cross-margined 系统执行保证金要求来确保稳定性,该系统使用户的所有抵押品都支持其头寸,从而提高效率。它分配抵押权重(对于波动性较大的资产,权重较低),并调整集中风险或负债。初始和维持保证金比率指导头寸开仓和清算门槛,并采取诸如价格范围之类的保护措施来防止波动期间的风险交易。如果用户的保证金比率降至维持保证金以下,则 Liquidator Bot 会关闭头寸,Liquidator Bot 会因奖励而受到激励。保险基金弥补赤字,并将社会化损失作为后备方案。清算保护可以缓解快速的价格下跌。
清算流程
为了准确评估风险,该协议为每种支持的资产分配一个 抵押权重,该权重决定了资产价值中可用于用户保证金的百分比。波动性较大的资产可能具有较低的抵押权重,这反映了它们较高的风险概况。此外,为了减轻集中风险,该协议可能会降低单个用户持有大量资产的抵押权重。相反,负债(例如借入的资金或未平仓的永续互换头寸)可能会对其保证金要求施加溢价,从而增加支持它们所需的抵押品数量。Drift 区分了 初始保证金比率(开设新交易头寸所需的最低抵押品)和 维持保证金比率(保持头寸开放所需的最低抵押品)。维持保证金通常低于初始保证金,用作潜在清算的门槛。风险引擎还纳入了针对市场波动和操纵的保护措施,例如:如果预言机价格和标记价格出现显着差异,则价格范围会限制订单下达;以及防止在高价格波动期间增加风险交易的机制。这些参数和计算共同构成了一个强大的框架,用于管理 Drift Protocol 生态系统内的风险。
当用户的保证金比率(计算方式为抵押品与未平仓头寸和借款总价值的比率)低于维持保证金要求时,该协议会启动 清算 流程。这是一种关键机制,可防止抵押不足的头寸导致可能影响其他用户或协议保险基金的损失。Drift 采用了一个去中心化的 Liquidator Bots(清算机器人) 网络,该网络不断监控用户帐户,以查找那些低于所需抵押品水平的帐户。这些机器人可以通过获得奖励(通常是被清算金额的百分比)来激励执行清算。清算的主要目标是将用户的保证金比率恢复到高于维持保证金水平,通常是通过平仓部分或全部未平仓头寸来实现的。如果用户的损失超过其抵押品,并且他们破产,Drift 会利用其 Insurance Fund(保险基金) 来弥补赤字。如果在极端情况下,保险基金不足以弥补所有损失,则该协议可能会实施社会化损失系统,其中剩余损失将分配给其他市场参与者。为了减轻与快速价格下跌相关的风险,Drift 实施了清算保护措施,例如闪崩保护和预言机价格偏差限制,旨在减缓突然市场波动期间的清算过程。这种多方面的风险管理方法,涉及动态保证金计算、激励清算以及保险基金提供的安全网,是 Drift Protocol 运营完整性的核心。
计算保证金要求和确定清算资格的核心逻辑可能在 protocol-v2
存储库中的 programs/risk_engine/src/lib.rs
文件中实现。触发和执行清算的过程可能由 programs/clearing_house/src/lib.rs
文件中的代码处理。有兴趣构建自己的清算机器人的开发人员可以利用 protocol-v2
存储库的 sdk/src/liquidatorClient.ts
文件中提供的 Typescript SDK。
JIT 机制
Just-In-Time (JIT) 流动性机制是 Drift Protocol 中的一项核心创新,旨在增强流动性,特别是现货和永续合约交易中的市价单,从而有效地解决了链上流动性池固有的局限性。当用户提交市价单时,该协议会立即启动一个短期荷兰式拍卖,通常持续大约五秒钟。在这个短暂的时间窗口内,作为流动性提供者的做市商有机会对订单进行竞标,旨在以等于或优于拍卖价格的价格完成订单。这种竞争性竞标过程对于实现交易者的最佳执行价格至关重要。
JIT 拍卖中的定价遵循预定义的结构。对于买入订单,拍卖价格从 Automated Market Maker (AMM) 的买入价开始,并线性地向 AMM 的内在价格移动。相反,对于卖出订单,价格从 AMM 的卖出价开始,并向 AMM 的内在价格移动。这种荷兰式拍卖形式激励做市商在拍卖期开始时提交最具竞争力的报价,以增加他们完成订单的机会。做市商根据其提交的速度进行竞争,以抓住提供流动性的机会。
如果在 JIT 拍卖时间内参与做市商未完全完成市价单,则该订单的剩余部分将路由到后端 AMM,以按估计的进入价格执行。这确保了所有市价单最终都将完成,无论是由活跃的做市商还是由协议的内部 AMM 完成。JIT 流动性机制代表了链上交易所设计的一项重大进步,旨在在去中心化框架内提供询价 (RFQ) 系统的优势,并辅以 AMM 的有保证的流动性。
为了促进做市商参与 JIT 流动性机制,Drift Protocol 利用 jit-proxy
程序,该程序是在 Solana 区块链上部署的开源、无许可和无状态的程序。jit-proxy
的主要作用是简化做市商在 Drift v2 上提供 JIT 流动性的过程。该程序允许做市商在 JIT 拍卖期间根据其预配置的市场偏好和最大头寸规模自动创建和提交 Drift 永续合约和现货订单。它会在最后一刻执行关键的链上检查,以确保提议的成交价格与做市商所需的买入价或卖出价一致,并且生成的头寸不会超过其既定限额。jit-proxy
程序通过监听传入的市价单,然后在拍卖窗口期间提交做市商的报价,从而与主要的 Drift Protocol (protocol-v2
) 交互。这种通信由 Solana 的跨程序通信功能促进。为了使开发人员能够构建和与 jit-proxy
集成,Drift 在 Typescript(在 protocol-v2
存储库中)和 Python(在 jit-proxy
存储库中)中都提供了 SDK。这些 SDK 提供了必要的工具和抽象,供做市商轻松地与 jit-proxy
程序交互并参与 JIT 流动性机制。jit-proxy
的无状态和无许可性质鼓励做市商广泛参与,最终有助于提高流动性,并为 Drift Protocol 的所有用户提供更好的执行价格。
jit-proxy
存储库中的 src/lib.rs
文件可能包含 JIT 代理程序的核心逻辑,详细说明了它如何处理与 taker 订单相关的传入指令,以及它如何根据预定义的参数促进 maker 报价的提交。jit-proxy
存储库中的 ts/sdk/Readme.md
文件充当开发人员的指南,提供了有关如何有效利用 Typescript SDK 与 JIT 代理程序交互的文档和说明性示例。
Drift Protocol 结合了几个创新的实现细节,这些细节有助于其在去中心化金融领域中的独特地位。最值得注意的一个是其 混合流动性模型,该模型战略性地融合了 Just-In-Time (JIT) 拍卖、去中心化限价订单簿 (DLOB) 和 Automated Market Maker (AMM) 的优势。这种组合使 Drift 能够在各种市场条件和订单类型下提供深度流动性、紧密的交易价差和高效的订单执行,从而可能超越依赖单一流动性机制的 DEX 的能力。
另一个关键创新是由具有经济激励的 Keeper Bot 管理的去中心化限价订单簿 (DLOB)。通过利用由受激励的 Keeper 网络维护的链下订单簿结构,Drift 实现了传统订单簿的功能,而不会产生与完全链上中央限价订单簿 (CLOB) 相关的巨大计算开销。向 Keeper 提供的经济激励确保他们积极参与监控、排序和完成订单,从而有助于在像 Solana 这样的高吞吐量区块链上实现流动且响应迅速的订单簿体验。
Drift 的 cross-margined 风险引擎 是另一项重大创新,它通过允许用户使用各种存入的资产作为其所有交易头寸的抵押品来提高资本效率。这种方法与孤立保证金系统形成对比,在孤立保证金系统中,每个交易对都需要其自己的专用抵押品,这通常会导致资本利用不足。Drift 中的 cross-margined 系统使交易者能够更有效地管理其整个投资组合的风险和资本。
此外,Drift 从核心永续合约交易扩展到包括 预测市场 (BET) 和自动化 Market Maker Vault 展示了其对创新的承诺以及迎合更广泛用户的承诺。预测市场的集成为平台增加了一个独特的维度,而 Market Maker Vault 则使获得复杂的流动性提供策略的机会民主化。
一个特别值得注意的实现细节可能是 Drift 的 AMM 用于动态调整其Hook和交易价差的特定算法。正如文档中指出的那样,这些调整基于实时预言机价格、市场波动和 AMM 的库存偏差。AMM 的这种动态性质旨在优化其性能,保持相对于外部市场的价格准确性,并增强其对市场波动的复原能力。检查 programs/amm/src/lib.rs
目录中的源代码(如果可以访问)将提供对管理这些自适应 AMM 参数的精确数学公式和底层逻辑的宝贵见解。
- 原文链接: extremelysunnyyk.medium....
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!