使用说明
wotrlay
基于信任网络(WoT)的Nostr中继,具有声誉驱动的速率限制。
概述
wotrlay使用外部信任评分来加强社区垃圾邮件保护(r ∈ [0,1]).速率限制由发布密钥的声誉决定,更高的信任分数授予更多的发布能力和额外的特权。
主要特点
- 信任分层利率限制:出版能力与声誉成正比
- 种类门控:只允许低于信任阈值的1类事件
- 真正的代币桶:平稳、连续的补充(不是每天重置)
- 回填支撑:高信任度的pubkeys可以在不限制的情况下迁移旧历史记录
- 无需NIP-42:速率限制基于
event.PubKey - 全球利率限制:使用中继范围限制器保护排名提供者免受滥用
费率限制级别
当 HIGH_THRESHOLD 设置为(例如0.9):
| 级别 | 信任评分 | 允许的种类 | 日费率 |
|---|---|---|---|
| A | r=0 | 仅限类型1 | 1 |
| B | 0<r<0.5 | 仅第1类 | 1-100 |
| C | 0.5≤r<0.9 | 各种 | 100-5000 |
| D | r≥0.9 | 各种 | 10000 |
当 HIGH_THRESHOLD 未设置(默认):
| 级别 | 信任评分 | 允许的种类 | 日费率 |
|---|---|---|---|
| A | r=0 | 仅限类型1 | 1 |
| B | 0<r<0.5 | 仅第1类 | 1-100 |
| C | r≥0.5 | 各种 | 10000 |
在这种模式下,没有明显的高层——所有公钥都有 r ≥ midThreshold 获得最高速率,无回填权限。
配置
配置是从中的环境变量加载的 main.go:
MID_THRESHOLD(默认值:0.5)-信任度得分,超过该得分则允许使用所有类型的信任度HIGH_THRESHOLD(可选)-信任分数,高于该分数则可免费回填;如果未设置,则没有明确的高层,所有公钥都具有r ≥ midThreshold获得最大速率URL_POLICY_ENABLED(可选)-为以下用户启用URL限制MID_THRESHOLDGLOBAL_RANK_REFRESH_LIMIT(默认值:500)-每秒最大列刷新请求数,中继范围RELATR_RELAY(默认值:wss://relay.contextvm.org)-用于排名查找的ContextVM中继URLRELATR_PUBKEY(默认值:750682303c9f0dadd 75941b49edc9d46e3 306b9ee3335338a2a3e404c5fa3)-中继服务公钥RELATR_SECRET_KEY(可选)-用于签署排名请求的密钥;如果未提供,则自动生成DEBUG(可选)-启用详细调试日志记录和定期可观察性度量
用法
环境设置
创建一个 .env 文件或设置环境变量:
# Optional (defaults shown)
export MID_THRESHOLD=0.5
# HIGH_THRESHOLD is optional - omit to use 3-tier system (no high tier)
# export HIGH_THRESHOLD=0.9 # uncomment to enable 4-tier system with backfill
# URL_POLICY_ENABLED is optional - enable to restrict URLs below MID_THRESHOLD
# export URL_POLICY_ENABLED="true" # truthy: true/1/yes/on (case-insensitive)
export GLOBAL_RANK_REFRESH_LIMIT=500
export RELATR_RELAY="wss://relay.contextvm.org"
export RELATR_PUBKEY="750682303c9f0ddad75941b49edc9d46e3ed306b9ee3335338a21a3e404c5fa3"
export RELATR_SECRET_KEY="your-secret-key-here" # auto-generated if not set
export DEBUG="1" # optional: enable verbose logging and metrics
建筑
go build
跑步
./wotrlay
接力赛继续进行 localhost:3334 默认情况下。
运作原理
- 已收到事件:提取
event.PubKey - 排名查询:查询缓存以获取信任分数(缓存未命中→
r=0) - 种类检查:如果出现以下情况,则拒绝非Kind-1
r < MID_THRESHOLD - 时间戳检查:拒绝未来24小时以上的事件
- 回填检查:如果出现以下情况,则跳过速率限制
HIGH_THRESHOLD设置和r ≥ HIGH_THRESHOLD事件已经过时 - 速率限制:应用基于信任的充值率的令牌桶
- 保存:如果所有检查都通过,则存储事件
建筑
操作说明
错误处理
中继返回可用于客户端处理的事件拒绝的键入错误:
ErrKindNotAllowed-来自以下pubkeys的非Kind-1事件MID_THRESHOLDErrInvalidTimestamp-未来时间戳>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 - 观察日志以获取周期性指标输出
这些指标可用于:
- 监控继电器的健康状况和性能
- 检测滥用模式
- 调整速率限制阈值
- 了解缓存命中率
许可证
麻省理工学院
