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 次下载
300KB
7.5K SLoC
Rnostr
用 Rust 编写的高性能可扩展 nostr 中继。
特性
- 支持大多数 NIPs
- 易于使用,无第三方服务依赖
- 高性能,事件存储在 LMDB,灵感来自 strfry
- 大多数配置可以热重载
- 可扩展性,可作为库用于 创建自定义中继
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