8 个版本

0.4.4 2024年6月9日
0.4.3 2023年10月9日
0.4.2 2023年9月7日
0.4.1 2023年8月28日
0.1.0 2023年7月5日

644网络编程

每月 42 次下载

MIT/Apache

300KB
7.5K SLoC

Rnostr

用 Rust 编写的高性能可扩展 nostr 中继。

特性

NIPs

  • NIP-01:基本协议流程描述
  • NIP-02:联系人列表和昵称
  • NIP-04:加密直接消息
  • NIP-09:事件删除
  • NIP-11:中继信息文档
  • NIP-12:通用标签查询
  • NIP-13:工作量证明
  • NIP-15:存储事件结束通知
  • NIP-16:事件处理
  • NIP-20:命令结果
  • NIP-22:事件 created_at 限制
  • NIP-26:委托事件签名
  • NIP-28:公共聊天
  • NIP-33:参数化可替换事件
  • NIP-40:过期时间戳
  • NIP-42:客户端到中继的认证
  • NIP-45:计数结果。 实验性
  • NIP-50:关键词过滤器。 实验性

扩展

nostr-relay 实现了一种简单的扩展机制,用于拦截用户消息进行自定义处理。rnostr 基于 nostr-relay 并实现了几个简单扩展。所有扩展都支持在 配置文件 中进行配置。

自定义中继和扩展.

度量

提供 Prometheus 抓取的度量 URL

认证

NIP-42 认证,IP,认证公钥和事件公钥白名单/黑名单

速率限制器

限制事件写入频率。

计数

NIP-45 计数结果。当查询结果太大(数百万)时,将触发慢查询。setting.data.db_query_timeout

NIP-50 关键词过滤。nostr-db 实现了一个简单的精确匹配模式,不区分大小写,按时间排序的全文搜索。对多词查询没有性能优化,所以它是实验性的。

这减少了写入并发性,并使空间使用显著增加。因此,它适合在私有或付费中继中使用。

现在我们只索引 kind: 1 笔记事件的正文。

用法

准备源和配置


git clone https://github.com/rnostr/rnostr.git
cd rnostr
mkdir config
cp ./rnostr.example.toml ./config/rnostr.toml

编辑 ./config/rnostr.toml,记得将网络.host 修改为 0.0.0.0 以供公开访问。

构建和运行


# Build
cargo build --release

# Show help
./target/release/rnostr relay --help

# Run with config hot reload
./target/release/rnostr relay -c ./config/rnostr.toml --watch

Docker


# Create data dir
mkdir ./data

docker run -it --rm -p 8080:8080 \
  --user=$(id -u) \
  -v $(pwd)/data:/rnostr/data \
  -v $(pwd)/config:/rnostr/config \
  --name rnostr rnostr/rnostr:latest

自行构建


docker build . -t rnostr/rnostr

# Build in China need to configure the mirror.
docker build . -t rnostr/rnostr --build-arg BASE=mirror_cn

请参阅 docker compose 示例

命令

rnostr 提供其他命令,如导入和导出。


./target/release/rnostr --help

# Usage: rnostr <COMMAND>

# Commands:
#   import  Import data from jsonl file
#   export  Export data to jsonl file
#   bench   Benchmark filter
#   relay   Start nostr relay server
#   delete  Delete data by filter
#   help    Print this message or the help of the given subcommand(s)

# Options:
#   -h, --help     Print help
#   -V, --version  Print version

依赖关系

~35–47MB
~737K SLoC