Dydx V4

关于dydx chain的研究

Posted by Lengzhao Blog on April 1, 2024

dydx chain

v4 将是一个独立的 L1 区块链,具有完全去中心化的链下订单簿和匹配引擎。dYdX 链将基于 Cosmos SDK 和 CometBFT PoS 共识协议。

dYdX v4 设计成完全去中心化的端到端。主要组件大致包括协议、索引器和前端。每个组件都将作为开源软件来提供。

docs

github

架构图

协议(或 “应用程序”)

协议是 L1 区块链,在 CometBFT 之上构建并使用 CosmosSDK。节点软件用 Go 编写,并编译为单个二进制文件。与所有 CosmosSDK 区块链一样,v4 使用权益证明共识机制。

该协议将由节点网络支持。有两种节点:

  1. 验证者:验证者负责将订单存储在内存中的订单簿中(即链下且不承诺达成共识),将交易传达给其他验证者,并通过共识过程为 dYdX 链生成新区块。共识过程将以加权循环方式(以质押到节点的代币数量加权),让验证者轮流担任新区块的提议者。提议者负责提议下一个区块的内容。当订单匹配时,提议者将订单添加到所提议的区块中,并启动共识回合。如果 ⅔ 或更多的验证者(按质押权重)批准一个区块,则该区块视为已提交并添加到区块链中。用户将直接向验证者提交交易。
  2. 全节点:全节点表示运行不参与共识的 v4 应用程序的进程。它是一个质押权重为 0 的节点,不提交提议,也不对提议投票。然而,全节点连接到验证者网络,参与交易的传达,并处理每个新提交的区块。全节点具有 dYdX 链及其历史的完整视图,旨在支持索引器。某些方可能决定(出于性能或成本原因)运行他们自己的全节点和/或索引器。

索引器

索引器是一个只读服务集合,其目的是以更高效和 web2 友好的方式,为用户索引和发送区块链数据。其方式是使用来自 v4 全节点的实时数据,将其存储在数据库中,通过 websocket 和 REST 请求,向最终用户提供该数据。

虽然 v4 协议本身能够将端点公开给关于某些基本链上数据的服务查询,但这些查询往往很慢,因为验证者和全节点没有经过优化,无法有效处理查询。此外,对验证者的过多查询会削弱其参与共识的能力。出于这个原因,许多 Cosmos 验证者倾向于在生产中禁用这些 API。因此,应当将索引器和全节点与验证者分开来构建和维护。

索引器将使用 Postgres 数据库存储链上数据,使用 Redis 存储链下数据,使用 Kafka 来消费链上/链下数据并流式传输到各种索引器服务。

前端

为了构建端到端的去中心化体验,dYdX 正在构建三个开源前端:Web 应用程序、iOS 应用程序和 Android 应用程序。

  1. Web 应用程序: 该网站将使用 Javascript 和 React 来构建。该网站将通过 API 与索引器交互,以获取链下订单簿信息,并将交易直接发送到链上。dYdX 将开源前端代码库和相关部署脚本。这样,人人都可以通过 IPFS/Cloudflare 网关,在自己的域名/托管解决方案中轻松部署和访问 dYdX 前端。
  2. 移动版:iOS 和 Android 应用程序分别使用原生 Swift 和 Kotlin 来构建。移动应用程序将以与 Web 应用程序相同的方式,与索引器交互,并将交易直接发送到链。移动应用程序也将是开源的,人人都可以将移动应用程序部署到 App Store 或 Play 商店。特别是对于应用程序商店,部署者需要有一个开发者账户和一个 Bitrise 账户才能完成应用程序提交过程。

订单生命周期

既然我们了解了 dYdX v4 的每个组件,现在让我们看看在下订单时,这些组件如何共同发挥作用。 在 v4 上下订单时,将遵循以下流程:

  1. 用户在去中心化前端(例如网站)或通过 API 做交易
  2. 订单发送到验证者。该验证者将该交易传达给其他验证者和全节点,以便使用新订单更新他们的订单簿。
  3. 共识过程选择一个验证者担任提议者。选定的验证者匹配订单并将其添加到下一个提议的区块中。
  4. 提议的区块继续通过共识过程。
    1. 如果 2/3 的验证者节点投票确认该区块,则该区块将提交并保存到所有验证者节点和全节点的链上数据库中。
    2. 如果提议的区块没有成功达到 2/3 阈值,则将拒绝该区块。
  5. 提交区块后,更新的链上(和链下)数据从全节点流式传输到索引器。然后,索引器通过 API 和 Websockets 将此数据提供给前端和/或查询此数据的其他外部服务。

上面的流程是订单/数据如何在 v4 中移动的总体概述。

止盈止损

  1. 实现下单的message(ConditionalOrder)
  2. 将订单存储到store里
  3. 在EndBlock里,处理可能触发的止盈止损单

相关代码: x/clob/abci.go:EnbBlock->x/clob/keeper/untriggered_conditional_orders.go:PollTriggeredConditionalOrders

桥接

跨区块链资产桥接已被证明具有挑战性。大多数现有桥梁都存在用户体验和/或安全性问题。 dYdX 专注于合成交易的好处之一是,只需存在一种抵押资产(例如稳定币)即可实现任何资产的合成交易。

首要任务(按顺序)是支持以下方面的最佳体验:

  1. Transfers from/to CEXs
  2. Transfers from/to Ethereum
  3. Transfers from/to other chains / rollups

Cosmos 还支持 IBC,这是一种用于在两个 IBC (cosmos) 支持的链之间进行去中心化且安全的资产桥接的协议。这意味着 dYdX v4 只需要在任何安全的 Cosmos 链上存在一种稳定币,然后就可以使用 IBC 轻松桥接到 dYdX 链。

Circle的CCTP 已接入Noble 链。

Noble是 Cosmos 专用区块链,专为原生资产发行而构建。 Noble 是 Cosmos 和 IBC 生态系统中原生 USDC 的发行链。作为基础设施提供商,Noble 插入了几十个连接 IBC 的区块链,并实现了原生 USDC 在整个 IBC 生态系统中的无缝传输。

什么是CCTP?

CCTP 使 USDC 能够通过本机销毁和铸币流程在受支持的区块链之间安全地发送。不存在对托管桥接的依赖。以下是简单 CCTP 传输流程的示例:

  1. 用户通过第三方应用程序将 USDC 从一条链转移到另一条链,从而在源链(例如以太坊)上销毁 USDC
  2. Circle 的自动化服务观察并证明燃烧事件
  3. 用户或第三方将证明转发到目标链(例如,Noble)
  4. 用户在目标链上接收 USDC(例如 Noble)

ccpt

Squid

Squid 是一键跨链交易构建器,支持 20 秒内跨链交换。 Squid 利用 Axelar 的去中心化互操作性基础设施,并经过 Uniswap 桥提供商评估的批准。 Squid 通过 API、SDK 和前端开发工具为 60 多个区块链的团队提供互操作性服务。

dYdX v4 的开源代码与 Squid 的 API 集成,支持从任何 Squid 支持的 EVM 链或汇总中单击加入和退出 dYdX 应用程序链。用户将能够在由 Squid 提供支持的 dYdX Chain 前端中一键存入 dYdX Chain 账户。

目标:向 dYdX Chain 地址存款或取款。

  1. 示例1:用户想要在 dYdX 链上获得 USDC,他们在以太坊 L1 上有 USDC。
    1. 路线: USDC通过Axelar通用消息传递(GMP)发送到Osmosis,然后在Osmosis上交换到Noble USDC,通过Noble链从Osmosis桥接Noble USDC到dYdX Chain。一键完成所有操作。
  2. 示例2:用户想要在 dYdX 链上获得 USDC,他们在 Arbitrum 上有 ETH。
    1. 路线: ETH 在 Kyberswap 上兑换成axlUSDC,axlUSDC 通过 Axelar GMP 发送到 Osmosis,axlUSDC 在 Osmosis 上兑换成 Noble USDC,然后通过 Noble 链从 Osmosis 桥接到 dYdX Chain。一键完成所有操作。
  3. 将eth上的USDC转到osmosis链:tx
    1. event:
      1. destinationChain :osmosis
      2. destinationContractAddress :osmo1tqctx98qz2aa25j5knzuztxaerl3z0ld8q6c72
      3. payload :000000007B7D
      4. symbol :USDC
      5. amount :149990000000

reward

reward