epochbtc/satd
GitHub: epochbtc/satd
用 Rust 实现的 Bitcoin Core 兼容全节点,将核心节点、Electrum、Esplora、BIP 157/158 等服务整合为单进程单数据库架构,提供双共识引擎影子验证和丰富的运维可观测性接口。
Stars: 0 | Forks: 0
# satd
**一个与 Bitcoin Core 兼容的 Rust 全节点实现。**
`satd` 提供了核心节点,以及运营者通常会与之搭配使用的钱包服务端协议(Esplora REST, Electrum, BIP 157/158)。
*一个进程。一个 RocksDB。一个 systemd 单元。*
## 为什么选择 satd?
* **节点主权:** 旨在为经济节点运营者提供一个健壮的、内存安全的替代方案,以打破单一文化,增强网络的韧性。请阅读 [宣言](MANIFESTO.md)。
* **零共识分歧(双引擎):** 包含一个完整的 Rust 共识规则实现,通过了 Bitcoin Core 的测试套件(甚至更多)。运营者可以选择运行纯 Rust 引擎、C++ `libbitcoinconsensus` 引擎,或同时运行两者进行双向影子验证,从而在数学上保证零分歧。
* **为运营者而生:** 消除了 `bitcoind` + `electrs` + `esplora` 多进程的令人头疼的问题。所有组件共享单一的链状态和单一的 RocksDB 实例。
## 功能特性
### 共识与网络
* **双共识引擎:** 一个完整的、独立编写的 Rust 共识引擎,通过了 Bitcoin Core 测试套件,并以 C++ `libbitcoinconsensus` 作为保守的后备方案。
* **群集式 IBD:** 类似 BitTorrent 的并行区块下载和投机性验证流水线,针对初始区块下载 进行了深度优化。
* **完整 P2P:** BIP 152 紧凑区块、封禁评分、addrv2、BIP 324 v2 传输(开发中)、Tor v3(硬编码的 `.onion` 种子节点)。
* **策略主权(内存池):** 对节点中继的内容进行严格的一级控制。轻松过滤垃圾交易,拦截 `OP_RETURN` 数据,或通过暴露的命令行标志(`-datacarrier`, `-datacarriersize`, `-dustrelayfee`, `-limitancestorcount`, `-permitbaremultisig`)调整限制,而无需打补丁或使用分叉版本。
* **现代内存池:** 完整的 RBF / 选择性加入 BIP 125 以及 CPFP 祖先追踪。
### 原生集成(无需附加边车服务)
* **原生 TLS 支持:** 为 JSON-RPC、Electrum 和 Esplora 服务器提供直接的 TLS 支持,无需使用 Nginx/反向代理等边车服务。
* **AI 原生 MCP 服务器:** 一个可选的模型上下文协议 (`mcp`) 二进制文件,将节点数据和操作接口直接暴露给 AI 代理。
* **Electrum 协议:** 原生 TCP 服务器(v1.4.5),适用于 BlueWallet、Sparrow 和 Nunchuk 等钱包。
* **Esplora REST:** 在已实现的端点集上,与 blockstream.info / mempool.space 保持线路格式一致。
* **紧凑区块过滤器:** 原生 BIP 157/158 索引和 P2P 服务,适用于嵌入式 Neutrino 移动钱包(Zeus, Blixt, Mutiny)。
* **共享索引:** 与 `connect_block` 保持原子性的地址历史索引。一个数据库驱动一切。
### 运维操作体验
* **原生 TUI (`sat-tui`):** 一个基于 Ratatui 的美观终端界面,用于实时 IBD 位图可视化、节点对等端统计和节点可观测性。
* **指标与可观测性:** 原生 Prometheus `/metrics`、`/healthz` 以及 JSON 结构化日志。
* **核心兼容性:** 接受标准的 `bitcoin.conf` 和 CLI 标志(`-prune`, `-txindex`, `-assumeutxo`)。使用标准的 `.cookie` 认证。
* **内存池流:** `subscribemempool` JSON-RPC WS 订阅,提供明确的驱逐/替换原因。
* **事件总线:** 用于链和内存池事件的 gRPC + ZMQ 发布器 (`satd-events`)。
* **重组日志:** 持久化的重组日志,带有可选的 webhook。
*(请参阅 [CORE_DIFFERENCES.md](CORE_DIFFERENCES.md) 获取有意偏离项和明确排除在外的功能(如传统钱包)的完整清单。)*
## 入门指南
### 构建
需要 Rust(稳定版,2024 版本)、C/C++ 编译器以及 clang/LLVM 库(用于 `rocksdb-sys` 的 bindgen)。
```
./configure # detect dependencies, generate .cargo/config.toml
cargo build
```
**仅限共识的构建**(不包含 BIP 158 编解码器、Esplora 处理程序、Electrum 协议代码):
```
cargo build -p satd --no-default-features
```
**通过 Nix 进行可重现构建**(跨主机具有确定性;工具链固定在 `rust-toolchain.toml` 中):
```
nix build .#satd # produces ./result/bin/{satd, sat-cli}
```
*完整说明请参见 `docs/PACKAGING.md` 中的“Reproducible build via Nix”章节。*
### 运行
```
# Regtest — 快速本地节点
cargo run --bin satd -- --regtest
# Mainnet — 默认开启 Esplora 和地址索引
cargo run --bin satd -- --datadir=/path/to/datadir
# 添加 Electrum 服务器(环回;通过 Tor 暴露)
cargo run --bin satd -- --electrum=1
# 为 embedded-Neutrino 钱包添加 BIP 157/158 P2P 服务
cargo run --bin satd -- --blockfilterindex=basic --peerblockfilters=1
```
### 查询与停止
```
cargo run --bin sat-cli -- --regtest getblockchaininfo
cargo run --bin sat-cli -- --regtest getindexinfo
cargo run --bin sat-cli -- --regtest getserverstatus
cargo run --bin sat-cli -- --regtest stop
```
## 配置
默认接受与 Bitcoin Core 兼容的标志(`-regtest`, `-datadir`, `-rpcport`, `-prune`, `-txindex`, `-assumeutxo` 等)以及 `bitcoin.conf` 文件格式作为配置接口。
内置的 `--profile=` 可以从 `archival`、`pruned-home`、`mining`、`regtest-dev` 和 `signet-watchtower` 中进行选择。CLI 标志会覆盖 profile 值;`getconfig` / `sat-cli node config` 会显示合并后的最终有效配置。
身份验证默认使用 cookie 文件,或者使用 `--rpcuser` / `--rpcpassword`。Esplora 监听器默认为**未经身份验证的本地回环**;若要暴露给非本地回环地址,请设置 `--esploraauth=cookie` 或 `--esploraauth=userpass`。
*完整的标志矩阵和调优说明请参见 `OPERATOR_ERGONOMICS.md`。*
## 仓库布局
```
satd/ Daemon binary — config, lifecycle, wiring
sat-cli/ CLI client — Bitcoin-Core-compatible RPC client
sat-tui/ Ratatui-based ops TUI
node/ Core library (chain, storage, mempool, P2P, RPC, validation)
node-index/ Address-history index over the shared RocksDB
node-filter-index/ BIP 158 compact-block-filter index
esplora-handlers/ Native Esplora-compatible REST
electrum-proto/ Native Electrum protocol server (vendored from electrs)
events/ Event-bus sinks (gRPC + ZMQ)
mcp/ MCP tools over the ops-surface RPCs
consensus/ Rust script-verifier shadow
block-analyzer/ Standalone tool for offline block analysis
docs/ API + integration docs
```
## 文档
| 文件 | 用途 |
|---|---|
| [`MANIFESTO.md`](MANIFESTO.md) | 节点主权、单一文化风险以及保守的 BIP 策略。 |
| `CORE_DIFFERENCES.md` | 有意偏离 Bitcoin Core 的行为目录:原生接口、排除项和行为默认值。 |
| `OPERATOR_ERGONOMICS.md` | 面向运维的标志矩阵、调优以及所有内置接口。 |
| `STABILITY_POLICY.md` | 分级稳定性契约;废弃策略;金丝雀 CI。 |
| `ECOSYSTEM.md` | 移动端 / 打包策略;为什么选择原生 + 共享链状态。 |
| `docs/PACKAGING.md` | 面向下游打包者的权威参考。 |
| `docs/TUI.md` | `sat-tui` 参考:视图、面板、各个字段、快捷键。 |
| `docs/api/esplora.md` | Esplora REST 端点参考 + 线路格式注意事项。 |
| `docs/E2E_TESTING.md` | 端到端测试套件:如何运行、超时旋钮、抖动门控工作流。 |
## 许可证
MIT — 完整文本请见 [`LICENSE`](LICENSE)。
*来自 `romanz/electrs` (MIT) 的供应代码已在 `electrum-proto/vendor/electrs.MIT` 中注明,并保留了原始的 LICENSE 文本。*
查看 satd 终端 UI
 *`sat-tui` 界面提供实时可观测性,包括 IBD 位图、节点对等端统计和 JSON-RPC 浏览器。*标签:BIP 152, BIP 157/158, DNS解析, Electrum, Esplora, Google搜索, Mempool, P2P网络, Python工具, RocksDB, Rust, Swarm-Style IBD, Web3, 便携式工具, 全节点, 共识引擎, 内存安全, 加密货币, 区块链, 去中心化, 可视化界面, 后端开发, 底层编程, 开源项目, 数字货币, 比特币, 系统编程, 网络同步, 网络安全, 网络流量审计, 自定义请求头, 防御绕过, 隐私保护