Hummingbot Gateway 架构 - 第二部分¶
by Martin Kou
更新 (2023 年 2 月): Hummingbot Gateway v2 现在作为一个独立的 Github 仓库提供: https://github.com/hummingbot/gateway。本文中列出的大部分功能现已实现,我们欢迎社区的贡献。
引言¶
在本系列的第一部分中,我们讨论了为改进 Hummingbot Gateway v2 的稳健性和可靠性而进行的架构更改,使其达到生产交易系统所期望的服务质量水平。
在本博客系列的第二部分,我们将讨论与 Gateway v2 如何与您交互相关的架构变更。具体来说,我们将讨论为首次用户体验以及社区开发者体验所做的改进。
用户体验¶
Hummingbot Gateway 是一个后端系统,理想的用户体验是容易设置,然后在后台可靠运行,让用户专注于交易。当用户需要重新配置或升级网关时,文档和说明应该清晰,配置步骤应该易于执行。
Gateway v2 将带来一系列改进,以使其用户体验更符合像 Apache 或 MySQL 这样的主要生产服务器软件。我们将把精力集中在以下主要领域:
- 设置网关(使用 Hummingbot)
- 设置网关(独立)
- 配置网关
- 用户文档
设置网关(使用 Hummingbot)¶
当前的 Hummingbot / 网关设置体验有几个可用性问题:
- 文档质量差:没有关于用户在 Uniswap 上开始交易需要做什么的连贯说明。
- 复杂性:用户需要先在 Hummingbot 上设置 SSL 证书,然后运行另一个脚本(对于 Docker 设置)或手动填写网关配置(对于源码设置)才能使网关工作。
- 很少甚至没有 UX 反馈:当网关启动后,Hummingbot 上没有 UX 反馈来表明它已连接到网关。
- 所有
gateway
命令都没有-h
帮助信息。
以下是我们将为 Gateway v2 添加的改进,以使 Hummingbot 设置工作流程对用户来说更简单和更易于维护:
- 使用 Docker Compose 和其他设置脚本自动化 Gateway v2 Docker 设置过程。
- 提供详细的、逐步的文档,介绍与 Hummingbot 设置网关相关的准备步骤、设置步骤和配置,发布到 Hummingbot 文档网站。
- 在 Hummingbot 客户端 UI 的顶部状态栏中添加网关状态,以指示 Hummingbot 是否连接到 Gateway v2 实例。
- 为 Hummingbot 中的所有
gateway
命令提供帮助信息。
设置网关(独立)¶
目前没有文档记录如何独立设置网关,并将其连接到非 Hummingbot 客户端。由于独立网关需要非 Hummingbot 客户端,我们可以预计需要这个的大部分人将是交易系统开发者和系统管理员。
以下是我们将为 Gateway v2 添加的改进,针对独立网关设置工作流程。
- 开发者阅读关于网关整体架构、如何设置以及如何将其连接到非 Hummingbot 客户端的概述文档。
- 开发者使用
gateway-create.sh
设置网关,并生成 SSL 证书(包括 CA 证书和密钥)。 - 开发者使用
gateway-copy-certs.sh
生成客户端证书 - 开发者使用客户端证书将自定义客户端连接到网关,并从客户端运行"Hello World"示例脚本(例如获取以太坊 Goerli 网络上 Uniswap 的 WETH-DAI 价格)。
- 开发者通过遵循我们的网关 API 文档继续开发展示客户端。
配置网关¶
原始 Hummingbot 网关的配置系统存在一些主要的可用性问题:
- 它向首次用户暴露了大量可配置变量,这在初始设置过程中增加了不必要的摩擦。
- 首次用户需要到至少两个地方来配置网关(例如对于 Docker 设置,首先需要在 Hummingbot 中创建证书,然后运行
create-gateway.sh
)。 - 它在同一个全局配置文件中暴露了所有连接器模块的默认配置,这意味着它不是模块化的。
维护 Hummingbot 网关的用户友好配置集的要求实际上与 Apache 或 NGINX 等 Web 服务器或 NodeJS Web 应用程序的要求并没有太大不同。我们应该参考这些服务器中的配置集是如何维护的,而不是试图重新发明轮子。
以下是一些关于配置的重要场景的理想用户流程:
- Hummingbot / 网关设置:从 Hummingbot 中,用户可以简单地设置他们的钱包,输入他们的 Infura 密钥,并启动网关
- 独立网关设置:用户运行一个脚本来创建 SSL 证书并将它们自动集成到网关配置中,输入他们的 Infura 密钥,并启动网关
- 从 UNIX 命令行检查配置:用户可以编辑一些定义良好且易于阅读的配置文件(例如
local.yml
用于本地设置,如 Infura 密钥或节点 URL,ssl.yml
用于 SSL 证书和密钥短语文件路径等内容) - 从 Hummingbot 检查配置:用户可以使用
gateway list-configs
和gateway update
- 添加或开发新连接器模块:开发者应该能够在自己的模块文件中添加自己的模块特定配置,而无需修改全局配置。然而,模块特定配置仍然应该可以在本地设置文件中被覆盖,并且可以从 Hummingbot 网关命令中发现/写入。
我们将通过将配置文件拆分为多个文件来重构 Gateway v2 的配置系统,并使其更符合 Apache 和 NGINX 等常见服务器软件的标准。
- 保留没有自己模块目录的不同连接器的默认设置,以允许模块化。
- 移除全局配置文件,改用特定用途的配置文件。
ssl.yml
- SSL 证书配置。ethereum.yml
- 以太坊链范围配置。例如使用哪个网络?Infura 节点 ID?local.yml
- 用户覆盖。- 提供一个包含示例配置文件的目录。(例如
./config/samples/
),其中包含对每个配置项含义的内联文档。
用户文档¶
原始 Hummingbot 网关包含 Docker 和源代码安装的安装说明,并讨论了一些 Hummingbot 的gateway
命令而没有提及。然而,没有连贯的说明解释用户应该在何时应用哪个步骤,以及为什么需要某些步骤(例如 SSL 证书生成)。
它也没有描述用户运行网关所需的最小配置集(例如以太坊节点 URL、网络等)。这意味着首次从源代码编译的用户需要通过试错来使网关正常工作。总体而言,目前首次使用用户的文档状态不令人满意。
Gateway v2 的安装文档将大幅扩展,我们还将确保它以合理的顺序编写,并以连贯的方式为首次使用用户提供说明。特别是,新的安装文档将清楚说明准备步骤(例如带有 Docker 的操作系统环境、以太坊节点 URL / Infura 账户等)以及运行 Gateway v2 所需的最小配置集。
开发者体验¶
Hummingbot 是一个开源项目。我们预计从长远来看,社区成员将为 DEX 连接器、功能请求和错误修复做出大部分贡献。
这意味着我们还需要从社区开发者的角度考虑用户体验。例如,考虑某人想要为 Hummingbot Gateway 开发新的 DEX 连接器——我们需要规划文档、社区支持、提出和添加新连接器的流程、我们这方面的验收标准等事项。
开发者文档¶
文档通常是开发者寻找向项目添加新功能的第一站。我们预计大多数开发者将有兴趣向我们的项目添加新的 DEX 连接器,因此我们将格外关注新连接器的编写和测试。以下是 Gateway v2 将包含的开发者文档类型概要:
快速入门:这应该类似于上面用户体验工作流程中的初始设置文档,但重点是设置从源代码而非从 Docker 运行网关。它应包括以下项目:
设置和配置:
- 操作系统和工具链要求。例如 Linux / macOS、git、nvm、yarn 等。
- 从 Hummingbot 仓库克隆、
yarn
设置步骤等。 - 生成用于测试的客户端 SSL 证书。
- 编辑配置文件以设置 Infura API 密钥等
- 验证设置是否正常工作
- Uniswap 和 Ethereum 的最小配置
- 提供几个向网关发出一些 Uniswap API 请求(例如获取资产价格)的
curl
命令,以及预期输出。
添加 Gateway 连接器:这将是一个专门面向希望开发新网关连接器的开发者的部分。代码演练应捕获在 Hummingbot 上运行 Uniswap AMM 策略时网关中使用的主要逻辑路径。
需要注意和测试的事项:编写一个"大部分时间"工作、"偶尔"工作或仅在测试网中工作的 DEX 和区块链连接器相对容易。然而,新连接器的要求是它应该高度可靠且能够抵抗故障。
- 列出 DEX 连接器的常见故障模式。例如网络中断、交易卡住、适当的 nonce 管理等。
- 列出所需单元测试用例和针对常见错误模式的固定装置,以便连接器能够通过我们的认证。
API 文档¶
这包括 Gateway v2 中每个可用 API 端点的文档,包含参数输入、预期输出格式和错误。
反馈循环¶
在阅读完文档后,社区开发者将需要从他们让第一个"Hello World"风格的 API 工作的那一刻开始,到新连接器被 Hummingbot 团队批准和接受的时刻为止的指导。
除了社区反馈和讨论外,这种对开发者的反馈还可以有多种形式。测试用例、文档和认证标准也能帮助社区开发者掌握进度,确保自己走在正确的轨道上。
Gateway v2 将提供以下文档和支持基础设施,为希望为 Gateway v2 创建新连接器和新功能的社区开发者提供指导。
运行单元测试用例和与网关交互的说明
开发者在代码上获得的第一类反馈通常来自测试用例。这可以是单元测试用例,或手动测试用例(例如使用特殊指令调用curl
)。针对测试用例的使用和创建的文档将很有用。
特别是,我们将为 Gateway v2 提供以下与测试相关的文档:
- 如何运行 Gateway v2 代码中包含的单元测试用例;
- 如何编写新的单元测试用例,并将其包含在测试套件中;
- 如何使用
curl
和生成的客户端证书运行手动测试。
用于模拟常见边缘情况的测试工具,如交易丢失和交易失败
我们预计大多数新的 DEX 连接器将与基于 EVM 的区块链交互 - 在这些情况下许多相同的故障模式同样适用。这意味着我们为测试以 Uniswap 为代表的以太坊 DEX 构建的测试工具可能可以被我们的社区开发者重用。
同样,关于如何重用和修改这些测试工具的文档将对社区开发者有用:
- DEX 连接器的常见故障模式列表。例如网络中断、交易卡顿、nonce 管理不当等。
- 关于用于测试 EVM 故障模式的内置测试工具的文档,以及如何将它们重用于测试新的基于 EVM 的 DEX 连接器。
提交和认证新连接器的流程
Hummingbot 团队将建立并发布一个流程,以及认证新 DEX 连接器的标准。任何新的 DEX 连接器必须包含一套必需的测试用例,以确保其在常见错误情况下可靠并具有弹性。它还应通过我们的代码审查和质量保证,以确保测试用例确实做到了它们声称要做的事,并且连接器在我们的测试环境中确实能正常工作。
社区渠道
Hummingbot 团队已建立了一个 Discord 频道*#dev-gateway-v2*,专门面向 Hummingbot 网关社区开发者。根据我们对 Hummingbot 的经验,社区频道在初期可能需要 Gateway v2 开发团队的支持。最终,一旦有更多社区开发者经历了整个流程,他们将能够越来越多地自助支持。
Gateway v2 首次公开发布后,我们将建立一个轮换的"办公时间"安排,Gateway v2 开发团队的成员将在 Gateway v2 社区频道中回答社区的问题。
可用性和时间表¶
更新(2023 年 2 月):Hummingbot Gateway v2 现在作为一个独立的 Github 仓库提供:https://github.com/hummingbot/gateway。本文中列出的大多数功能现在都已实现,我们欢迎社区的贡献。
在撰写这篇博客文章时,Gateway v2 是原型、预 Alpha 版软件,因此我们的优先事项是构建一个生产就绪的架构,为 EVM 兼容链上的 Uniswap 风格 AMM 提供可扩展的支持。
我们正在尽快将该博客系列中详述的架构提案转化为代码。我们预计 Gateway v2 的初始公开版本将在 2022 年第一季度准备就绪,并且一旦初始公开版本完成后,我们将开始接受来自社区的拉取请求。
与此同时,我们欢迎来自开发者社区的反馈。如果您对 Hummingbot Gateway v2 有任何建议,请随时在我们的 Discord 服务器中的 #developer-chat 频道中给我们留言。
对于寻求与 Gateway 集成的项目和交易所,请联系我们以获取私人 #gateway 频道的访问权限,从而获得我们开发人员的技术支持。