【忒修斯Relay之二:广播推荐Relay】

思考一个现实问题:

如果在未来的某个时点,我们目前连接relay逐个关站跑路了,或者由于某些原因无法连接,那么我们在切换到自建relay或者其他可用relay后,如何通知到现有的follower,使他们能够去新的relay继续找到我们呢?

nostr协议考虑到了这一点:

(1)NIP-01中定义的类型2事件(recommended_relay)

(2)NIP-65中定义的类型10002事件(relay list metadata)

其中:类型2每次可以推荐一个relay,适合自建relay的情形;类型10002则可以推荐包含多个relay的列表,并且分别标明作者如何使用这些relay(读、写、读写),便于客户端更加灵活地使用。

既然协议已经考虑到了这一点,但是不是就可以高枕无忧了呢?

抱着大胆假设小心求证的态度,我去github上查看了两个流行客户端的源代码,实际情况让我大跌眼镜。

1.Damus

在damus/Nostr/NostrKind.swift文件中,Damus定义了事件类型的枚举值,里面根本就不包含类型2和类型10002。也就是说,Damus目前压根就没打算实现relay推荐功能。

2.Snort.social

同样的,在src/Nostr/EventKind.ts中,Snort也定义了事件类型的枚举值,里面倒是提到了RecommendServer = 2。但是经过仓库的全文搜索,并没有代码引用这个,这表明Snort有考虑到NIP-01中的类型2推荐relay,但是暂时没有实现,更不要说NIP-65的类型10002了。

由此我们可以得出结论:现有的流行nostr客户端对于广播推荐relay地址并没有很好的支持。

因此在未来relay批量关站跑路或者被封禁的情况下,由于没有流行客户端实现类型2和类型10002事件,你需要另外的可靠信道把你新relay地址通知你的follower,可能会引起可用性问题。

#Relaynology

Reply to this note

Please Login to reply.

Discussion

老实说,现在还没精力兼顾这个问题,nostr 这种接口形式,数据是分散并且异步回来的。而且现在中继开始添加一些查询的限制,客户端有处理数据也比较困难。另外中继方面也看到不少压力。