
wotrlay
基于信任网络(WoT)的Nostr中继,具有声誉驱动的速率限制。
概述
wotrlay使用外部信任评分来加强社区垃圾邮件保护(r ∈ [0,1]).速率限制由发布密钥的声誉决定,更高的信任分数授予更多的发布能力和额外的特权。
主要特点
- 信任分层利率限制:出版能力与声誉成正比
- 种类门控:只允许低于信任阈值的1类事件
- 真正的代币桶:平稳、连续的补充(不是每天重置)
- 回填支撑:高信任度的pubkeys可以在不限制的情况下迁移旧历史记录
- 无需NIP-42:速率限制基于
event.PubKey - 全球利率限制:使用中继范围限制器保护排名提供者免受滥用
费率限制级别
当 HIGH_THRESHOLD 设置为(例如0.9):
| 级别 | 信任评分 | 允许的种类 | 日费率 |
|---|---|---|---|
| A | r=0 | 仅限类型1 | 1 |
| B | 0\24小时的事件 |
ErrRateLimited-Pubkey已超出其速率限制ErrURLNotAllowed-第1类事件,URL来自以下pubkeysMID_THRESHOLD(仅当URL_POLICY_ENABLED=true)
排名缓存行为
- 缓存命中:非阻塞查找立即返回
- 缓存未命中:尽力异步刷新;事件以秩=0继续进行
- 陈旧数据:早于的条目
StaleThreshold(24小时)触发异步刷新 - 去重:并发
GetRank对同一公钥的调用进行重复数据消除,以避免重复的网络请求 - 定期冲洗:每次刷新都会刷新排队的请求
StaleThreshold(24小时)或批次满时(1000个公钥)
速率限制
- 令牌桶:基于信任评分的持续补充(不是每日重置)
- 容量:至少1个令牌,以确保pubkeys最终始终可以发布
- 生存时间:1小时后清理不活动的桶
- 监控:
Limiter.GetTokens()可用于调试,但不应用于生产代码 - 可观测性:内置原子计数器跟踪错误类型和缓存行为;启用DEBUG时定期记录
安全
- 密钥:
RELATR_SECRET_KEY从未被记录。如果没有提供,则会自动生成一个临时密钥(记录为“生成的临时密钥”,不带值) - 配置:所有敏感值都应通过环境变量提供
可观测性
当 DEBUG 启用后,中继器每30秒记录一次操作指标:
observability: rate_limited=5 kind_not_allowed=2 invalid_timestamp=1 cache_hits=150 cache_misses=25跟踪的指标:
rate_limited-因速率限制而被拒绝的事件数kind_not_allowed-因类型门控而被拒绝的事件数invalid_timestamp-由于未来时间戳而被拒绝的事件数url_not_allowed-由于URL策略而被拒绝的事件数cache_hits-排名缓存命中次数cache_misses-列组缓存未命中次数
用途:
- 启用调试模式:
export DEBUG=1 - 运行继电器:
./wotrlay - 观察日志以获取周期性指标输出
这些指标可用于:
- 监控继电器的健康状况和性能
- 检测滥用模式
- 调整速率限制阈值
- 了解缓存命中率
许可证
麻省理工学院
