Project Serum:构建在Solana上的去中心化交易所

·

Project Serum 是一个基于 Solana 区块链的去中心化交易所(DEX),其核心特色在于提供了链上限价订单簿和匹配引擎。它不仅实现了无需许可、非托管的去中心化金融(DeFi)服务,还借助 Solana 的高性能特性,实现了高速交易与极低的手续费。Solana 的区块时间仅为 400 毫秒,每秒可处理约 5 万笔交易,这使得 Serum 能够支持每个市场每秒处理数百个订单。

Serum 的成功从其生态中涌现的大量项目中可见一斑。本文将引导您了解 Serum DEX 的基本架构与核心概念,并提供从环境搭建到市场创建的完整教程。


环境准备与部署

在开始之前,请确保您已配置好 Rust 和 Solana 开发环境。如果您尚未完成,可以参考相关指南启动本地测试验证器并获取测试网 SOL:

solana-test-validator --no-bpf-jit
solana airdrop 100

构建与部署 Serum DEX

首先克隆 serum-dex 代码库,构建并部署 Rust 程序到本地测试网络:

git clone https://github.com/project-serum/serum-dex.git
cd serum-dex/dex
cargo build-bpf
solana deploy target/bpfel-unknown-unknown/release/serum_dex.so

部署成功后,您将获得一个程序 ID,这是后续操作的关键标识。请注意,该程序大小约 348KB,如果在主网部署,需支付约 2.42 SOL 作为租金。

创建示例市场

使用 serum-dex 自带的 crank 工具快速创建一个完整的交易市场,包括代币铸造、资金池和相关账户:

cd crank
cargo run -- localnet whole-shebang ~/.config/solana/id.json <您的程序ID>

整个过程约需 15 秒,输出中将包含代币铸造地址、资金池地址和市场公钥等关键信息。


核心账户结构详解

Serum DEX 的市场由多个核心账户组成,每个账户承担特定功能:

这些账户的大小直接影响市场创建成本与性能。若事件队列已满,DEX 将无法处理新成交;若买卖盘账户已满,非竞争性订单将被移除。


可视化订单簿界面

为了直观查看我们部署的市场,可以使用 serum-dex-ui 项目:

git clone https://github.com/project-serum/serum-dex-ui.git
cd serum-dex-ui
yarn && yarn start

在界面中,通过添加自定义市场功能输入市场地址,即可查看实时订单簿和交易界面。👉 查看实时交易工具

铸造与转移测试代币

为了进行实际交易测试,需要为市场代币创建关联账户并铸造测试代币:

spl-token create-account <代币铸造地址>
spl-token mint <代币铸造地址> 1000000

随后将代币转移至浏览器钱包地址,即可在 Serum DEX 界面中进行交易操作。


市场参数与订单计算

Serum DEX 在内部使用整数进行所有计算,因此必须精确设置代币单位大小(lot size)。关键参数包括:

实际计算示例

以 EUR/USD 市场为例,假设我们希望价格和数量都有 3 位小数:

这样设置后,1.1400 价格和 2.3300 数量的订单总价值计算为:
1.14 10^3 2.33 * 10^3 = 2656200(相当于 2.6562 USD)


错误处理与调试技巧

Serum DEX 使用十六进制错误代码,常见错误包括:

错误代码中的高位字节表示源文件ID,低位字节表示行号,可帮助快速定位问题。

所有 Serum 账户在初始化时都以 "serum" 字节串开头,订阅账户变更时可使用 memcmp 过滤器提高效率。


常见问题

Serum 与其他 DEX 有何不同?

Serum 的主要优势在于使用链上限价订单簿,提供与传统中心化交易所类似的交易体验,同时保持去中心化的安全性和非托管特性。其高性能得益于 Solana 区块链的快速处理能力。

如何选择合适的账户大小?

账户大小需要在攻击面防御和租金成本之间取得平衡。事件队列应足够大以避免快速填满,买卖盘账户应能容纳预期的订单深度。建议根据实际交易量进行测试和调整。

什么是开放订单账户?

开放订单账户是用户与 Serum 市场交互的必要账户,用于存储存入的资金、跟踪未结订单和处理成交结算。需要注意的是,成交更新有延迟,需要等待事件队列处理完成后才能反映最新状态。

如何处理交易错误?

交易错误通常与资金不足、参数设置错误或账户状态有关。首先检查错误代码,确认代币余额和订单参数是否正确。如遇复杂问题,可查阅项目源码中的错误定义文件。

Serum 支持哪些钱包?

Serum 支持多种 Solana 生态钱包,包括 Sollet 扩展、Phantom 和 Solflare 等。确保钱包已连接至正确的网络(主网、测试网或开发网),并且有足够的代币余额。

如何优化交易体验?

为了获得最佳交易体验,建议使用高速网络连接,确保足够的代币余额支付手续费,并了解市场参数设置。对于高频交易,可能需要直接通过程序与 Serum API 交互以获得更低延迟。


通过本文的指导,您应该已经掌握了 Serum DEX 的基本原理和操作流程。无论是作为开发者构建交易应用,还是作为交易者探索去中心化交易,Serum 都提供了强大而灵活的基础设施。👉 探索更多交易策略