Avatar
HCocoa
7d9bcf523acc5b4b3ca3406cb62517b1b8a160cf07a164462bc587e8424f7b78
keep hodling and stay safu

Should I use jp.nostr.wine instead of nostr.wine for faster connection ?

如果universe能加个过滤参数仅返回中文的消息就好了😎

没啥关系,用了相似的构词法而已😜

哈哈,中文的“中继学”是 #[3] 兄发明的,我把翻译成英文了。

为什么需要购买收费relay?

一是可用性,知名收费relay关站跑路的可能性相对较小,数据不容易丢失。

二是可达性,部分收费relay提供广播功能,可以将消息同时转发到大量的免费公共relay上,让更多的人可以阅读到你的想法,并减少手机流量和电量消耗,顺带提高了可用性。

三是可读性,部分收费relay提供聚合功能,汇总读取多个免费公共relay的消息,然后进行去重去广告,最后按照你的N度人际关系网提供宇宙消息流、DM、@等事件,避免垃圾信息干扰。

后面有空我来推荐几个收费relay(1~4刀不等)以及他们的免费平替版。

#Relaynology

HOW TO TEST IF YOU (OR SOMEONE ELSE) CAN POST TO A RELAY

*You can use these steps to verify if you can post notes to a paid relay*

1. On Damus, Right-click/Long-tap on one of your notes (or someone else’s) and select "Copy Note JSON". This will copy the note to your clipboard.

2. Go to https://websocketking.com/

3. Type the address of the relay on the WebSocket URL field and click Connect button (e.g. wss://eden.nostr.land)

4. Wait for the connection to be established.

5. On the Payload field, type the following exactly (case sensitive):

["EVENT",

6. Paste from your clipboard.

7. Add a closing square bracket:

]

8. Click the Send button.

If you are able to post successfully you should see a response from the relay similar to:

["OK", "some event ID", true, ""]

or

["OK", "some event ID", true, "duplicate:"]

If unsuccessful, you should see a response like this:

["OK", "some event ID", false, "rejected: you are not worthy"]

【如何判断消息是否成功发送至某个relay?】

由于网络或者其他各种原因,你可以会担心你的消息有没有最终发到relay(特别是付费relay)上。

这里有一个验证方法:

1. 在Damus上,点击消息右上角的三点,并选择 "复制此条推文JSON"。这将把推文的JSON复制到你的剪贴板上。其他客户端操作类似。

2. 打开https://websocketking.com/

3. 在WebSocket URL字段中输入relay的地址(例如wss://relay.damus.io/),然后点击Connect按钮。

4.等待连接的建立(显示Connected to wss://relay.damus.io/)。

5. 在UNTITLED 1 下面的文本框中,准确输入以下内容(区分大小写):

["EVENT",

6. 从你的剪贴板上粘贴之前复制的JSON。

7. 在最后结尾添加一个方括号:

]

8. 单击 "Send"按钮。

如果消息发布成功,你可以看到来自relay的响应,类似于。

["OK", "事件ID", true, ""]

["OK", "事件ID", true, "diplicate:"]。

如果不成功,你可以看到一个类似这样的响应。

["OK", "事件ID", false, " rejected: you are not worthy"]

以上方法来自流行的relay实现nostream的作者 #[0] ,他同时也运营着可能是历史最悠久的付费relay:eden.nostr.land。

PS.经过验证,我发现一个惊人的事实:我的网络根本就连不上eden.nostr.land……

#Relaynology

#[2]

Please check it.

I haven't even sent a single event successfully since I bought eden.

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

nostr.band

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

astral.ninja

只检测你添加的relay

flycat-web.vercel.app

只检测右上角添加的relay

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

#[0]

可能是另外一个客户端连接的relay里没有这条消息,把两个客户端配成同样的relay试试呢

今天上午遇到了和 #[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]

谢谢,这eden我在电脑上用websocket手动也连不上,白花了5000聪😂

道理上是这样,但是我试了一下,起码最热门的nostream和strfry这两个relay实现都是会验证event id的:

如果sha256对不上的话,会分别返回"invalid: event id does not match" 和 "invalid: bad event id"。

这一点确实和文档不一致。

好像新版本的damus发消息时计算出来的event id有问题?有些relay不接收?

大家能看到我上一条消息吗?

盲猜是草稿箱功能带来的bug……

新版本(1.2.0)damus改变了电击(zap)⚡️打赏按钮的操作逻辑:

现在需要【长按⚡️按钮】才能自定义打赏金额,短按则会打赏默认的1000sats。

另外新版本似乎有了草稿箱功能,编辑到一半的消息退出也不会丢了,可喜可贺。

#[0]

把宇宙频道设置为仅一个wss://eden.nostr.land/ ,竟然一条消息也没有。

想问下大家也是这样吗?

是eden被墙了吗?同一家的wss://puravida.nostr.land 倒是正常的。

relay聚合器现在都开始提供根据人际关系网络的过滤功能,不过人际关系有4种,建议都考虑到,这样在@、回复、DM、引用等操作时,就不会丢消息了😎:

following’s following

following’s follower

follower’s follower

follower’s following

当然,对于宇宙消息流为了antispam,可以只保留第一种就好。

#[0]

#[0] 兄的这个relay(wss://relay.nostrich.land)很像我之前提到的relay聚合器:连接它就能自动帮你把消息推送至200个relay中,只是目前好像还不能从这200个relay中拉取消息。

#[1]

【君子不立于危墙之下】

这个事情其实挺严重的,因为币安没有USDC,大部分交易对都是BUSD,停止增发意味着没有增量资金了,可能会恢复其他交易对(刚才cz也说了) 。

另外BUSD和USDT已经脱钩,这是有问题的。因为币安提现时BUSD可以1:1刚兑USDC,这意味这套利者可以用USDT换成BUSD提现为USDC再到DEX换成USDT充回币安。

这样BUSD的需求上升,回逐渐恢复锚定。但事实是继续在脱钩。

因此大家要小心FUD踩踏。

一点个人愚见,供参考。

【忒修斯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