今天上午遇到了和 #[0] 兄一样的问题,发出的消息在nostr.band看不到。

为了调查这个问题,我使用websocket手动连接relay并重放event来测试,发现了几个有趣的点,和大家分享:

1.通过damus消息右上角的三个点,可以选择复制json,但这个json会丢掉emoji 表情,这就导致我在手动重放时,relay一直返回event id错误(event id 是把消息体sha256得到的,因为消息体少了emoji 表情,所以sha256就对不上了),但是换成其他消息又是正常的,于是就怀疑是早上damus更新导致的问题。后来证实是因为json串里丢了那个⚡️emoji 表情,这应该是个bug。

2.从上面一条就可以看出,虽然nostr文档提到relay不校验event id ,但起码对于重放的event(比如在damus中点击广播,或者手动通过websocket发json),nostream和strfry这两个relay是会校验event id的。

3.早上最初的消息不显示问题,大概率是 nostr.band网页自身的问题,或者我自己手机到relay的连接性问题,这就让我有个猜测:damus在发消息时类似udp,只管发送,不管relay有没有收到,就算超时也不会重发。这个其实在网络不好时有一定的隐患,可能消息只发到了少数几个relay,对于消息传播性和可用性都有不良影响。这也就凸显了relay聚合器的作用。

#[1]

Reply to this note

Please Login to reply.

Discussion

Nostr.band的内容,应该不是实时显示的,relay数据也只是一小部分,并不完全

确实,也不能完全依赖它

以下是我常用的三个web客户端,可以查看你发的每条消息具体保存在哪些relay上,送给有需要的朋友:

nostr.band

最全,进去搜索一下自己或别人的公钥

astral.ninja

只检测你添加的relay

flycat-web.vercel.app

只检测右上角添加的relay

希望以后手机客户端也可以看到每条消息的relay保存情况。

#[0]

感谢,受益匪浅