#index #server #electrum #database #tapyrus

bin+lib esplora-tapyrus

Electrum Server 在 Rust 中的高效重实现

1 个不稳定版本

0.4.1 2021 年 4 月 17 日

#8 in #electrum

MITLGPL-3.0+

640KB
9K SLoC

Status

Esplora - Electrs 后端 API

这是从 Blockstream/electrs 分支出来的。因此,功能和规范几乎与原始版本相同。您可以在tapyrus 文档中找到关于扩展规范的文档。

API 文档在这里提供

数据库模式和索引过程的文档在这里提供

安装和索引

安装 Rust、Tapyrus Core(不需要 txindex)以及 clangcmake 软件包,然后

$ git clone https://github.com/chaintope/esplora-tapyrus && cd esplora-tapyrus
$ cargo run --release --bin electrs -- -vvvv --daemon-dir ~/.tapyrus/prod-1 --network-id 1

有关更详细的说明,请参阅electrs 的原始文档。请注意,我们的索引与 electrs 的不兼容,必须单独创建。

索引在压缩后需要 610GB 的存储空间(截至 2020 年 6 月),但在索引压缩过程中,您需要大约两倍的可用空间。在配备 SSD 的强大机器上创建索引可能需要几个小时。

要使用 Docker 部署,请遵循这里的说明

轻模式

对于个人或低流量使用,您可以将 --lightmode 设置为减少约 50% 的磁盘存储需求,但会牺牲较慢和更昂贵的查找。

在此选项设置的情况下,原始交易以及与区块相关的元数据不会保留在 rocksdb(T、X 和 M 索引)中,而是根据需求从 tapyrusd 中查询。

与 Electrs 的显著变化

  • 除了 Electrum JSON-RPC 协议外,还有 HTTP REST API,并提供了扩展的交易信息(以前的输出、支出交易、脚本汇编等)。

  • 扩展索引和数据库存储,以在负载高时提高性能

    • 在数据库中保留了映射 txid 到原始交易的完整交易存储,前缀为 t
    • 所有可花费交易输出的索引保存在前缀 O 下。
    • 所有地址(编码为字符串)的索引保存在前缀 a 下,以实现按前缀地址搜索。
    • 区块哈希到txid的映射保存在数据库中,前缀为 X
    • 区块统计数据元数据(交易数量、大小和权重)保存在数据库中,前缀为 M

    有了这些新的索引,tapyrusd不再被查询来处理用户请求,只定期轮询新块和同步内存池。

CLI选项

除了electrs的原有配置选项外,还有一些新的选项可供使用

  • --http-addr <addr:port> - 监听HTTP服务器地址/端口的地址/端口(默认:127.0.0.1:3000)。
  • --lightmode - 启用轻模式(见上文)
  • --cors <origins> - 允许发起跨站请求的来源(可选,默认为无)。
  • --address-search - 启用按前缀地址搜索索引。
  • --index-unspendables - 启用对可证明不可花费输出的索引。
  • --utxos-limit <num> - 每个地址返回的最大utxos数量。
  • --electrum-txs-limit <num> - 在electrum服务器中每个地址返回的最大交易数量(不适用于http api)。
  • --electrum-banner <text> - electrum服务器的欢迎横幅文本。

带有liquid功能的附加选项

  • --parent-network <network> - 此链绑定到的父网络。

带有electrum-discovery功能的附加选项

  • --electrum-hosts <json> - Electrum服务器可访问的公共主机json映射,格式为 server.features
  • --electrum-announce - 在electrum p2p服务器发现网络上宣布electrum服务器。

有关完整选项列表,请参阅 $ cargo run --release --bin electrs -- --help

许可证

MIT

依赖关系

~70MB
~1M SLoC