Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ch16-03 服务拓扑和端口

返回本章

Sandbox 的服务很多,但拓扑并不混乱。先把它拆成三层:链上执行层、链下读模型层、开发体验层。链上执行层负责 localnet 和 Move package;链下读模型层负责 checkpoint、PostgreSQL、REST API;开发体验层负责 faucet、oracle、market maker 和 dashboard。

flowchart LR
  Dashboard["Dashboard :5173"] --> RPC["Sui RPC :9000"]
  Dashboard --> Faucet["DeepBook Faucet :9009"]
  Dashboard --> Oracle["Oracle Service :9010"]
  Dashboard --> MM["Market Maker :3001"]
  Dashboard --> Server["DeepBook Server :9008"]
  Localnet["Sui Localnet :9000/:9123"] --> Indexer["Indexer :9184"]
  Indexer --> Postgres["PostgreSQL :5432"]
  Server --> Postgres
  Oracle --> Localnet
  MM --> Localnet
  Faucet --> Localnet

端口速查

服务默认端口主要用途
Dashboard5173浏览器入口,查看健康状态、交易、faucet、部署地址。
Sui RPC9000本地链 RPC,SDK 和 Sui CLI 的主要入口。
Sui Faucet9123Sui localnet 自带 faucet。
DeepBook Faucet9009发 SUI、DEEP、USDC,并暴露 deployment manifest。
DeepBook Server9008基于 indexer/PostgreSQL 的 DeepBook REST API。
Oracle Service9010查询 oracle 状态,服务会定期更新 price object。
Market Maker3001查询做市服务健康状态。
Market Maker Metrics9091Prometheus metrics。
Indexer9184读取 checkpoint 并写入 PostgreSQL。
PostgreSQL5432保存 indexer 写入的读模型。

请求如何流动

Dashboard 并不直接“拥有”交易能力。它是一个代理和操作台:

  • /api/sui 代理到本地 Sui RPC。
  • /api/oracle 代理到 oracle service。
  • /api/mm 代理到 market maker。
  • /api/faucet 代理到 faucet service。
  • /api/deepbook 代理到 DeepBook Server。

理解这一点后,排障会简单很多。Dashboard 的 Trading 页面失败,不代表 DeepBook 合约失败;可能是 faucet 没发币、wallet 没切 localnet、RPC 不通、Indexer 滞后、Server 查询不到,或者 PTB 构造本身 abort。

Move 与数据层的边界

Move 合约只负责交易规则和资源安全。交易是否展示在页面上,取决于事件被 indexer 读到、写入 PostgreSQL,再被 server 查询出来。对用户而言这是一个页面状态;对工程师而言,这是至少三层系统之间的一致性问题。

所以本地调试要同时保留三类证据:

  • 链上证据:transaction digest、object ID、event。
  • 读模型证据:checkpoint、PostgreSQL 行、server response。
  • UI 证据:dashboard 页面、浏览器请求、用户操作路径。

本节验收

  • 能画出 localnet、indexer、server、dashboard 的依赖关系。
  • 能根据端口判断哪个服务可能出错。
  • 能解释为什么 UI 展示不是链上状态的唯一证据。