真是奇怪呢,添加了更多中继,都发送成功,客户端还是没看到内容。

user@Personal ~]$ python jlpt.py

2025-03-06 20:17:42,753 [INFO] 发送的内容:

2025-03-06 20:17:42,754 [INFO] {

"id": "41dd0e25361e1d15839056f2c512f6cac95e5a9adf3e9ae98d576a4c26c2a78c",

"pubkey": "4f576b5d30c8e3be4e1ea47fb9c1506322da2012a43868c845ffc7ef20534ff3",

"created_at": 1741259862,

"kind": 1,

"tags": [],

"content": "こんにちは",

"sig": "3715cccc2345af67a2f0605c8016641951d5afed24ab57276578249ec0a5b00c"

}

2025-03-06 20:17:44,579 [INFO] 成功连接到 wss://relay.damus.io

2025-03-06 20:17:44,582 [INFO] 成功发送事件到 wss://relay.damus.io

2025-03-06 20:17:46,222 [INFO] 成功连接到 wss://nos.lol

2025-03-06 20:17:46,225 [INFO] 成功发送事件到 wss://nos.lol

2025-03-06 20:17:47,753 [INFO] 成功连接到 wss://nostr.mom

2025-03-06 20:17:47,757 [INFO] 成功发送事件到 wss://nostr.mom

2025-03-06 20:17:49,918 [INFO] 成功连接到 wss://relay.coinos.io/

2025-03-06 20:17:49,919 [INFO] 成功发送事件到 wss://relay.coinos.io/

2025-03-06 20:17:51,950 [INFO] 成功连接到 wss://offchain.pub/

2025-03-06 20:17:51,957 [INFO] 成功发送事件到 wss://offchain.pub/

Reply to this note

Please Login to reply.

Discussion

我之前测试更迷惑,连接不到服务器😅

我试了AI生成的的好多个版本,大部分都不能直接运行,跟我给的指令不清晰有关。得把nostr的输出要求告诉它

你写的分享一下呢,我明天试试😁

import json

import hashlib

import hmac

import time

import random

import websocket

import chardet

import logging

# 设置日志级别和格式

logging.basicConfig(level=logging.INFO, format='%(asctime)s [%(levelname)s] %(message)s')

# Nostr公钥

nostr_pubkey = ""

# Nostr私钥

nostr_privkey = ""

# JLPT N1文法列表

n1_grammar = [

"こんにちは",

"美味しい",

"おはよう御座います",

"サヨナラ",

# 添加更多JLPT N1文法...

]

# 事件标签

tags = []

# 事件类型

kind = 1

# Nostr Relay网址列表

relays = [

"wss://relay.damus.io",

"wss://nos.lol",

"wss://nostr.mom",

"wss://relay.coinos.io/",

"wss://offchain.pub/"

]

def send_nostr_message():

try:

# 选择随机的JLPT N1文法

content = random.choice(n1_grammar)

# 生成事件创建时间

created_at = int(time.time())

# 生成事件数据

event_data = [

0,

nostr_pubkey,

created_at,

kind,

tags,

content

]

# 序列化事件数据

event_json = json.dumps(event_data, separators=(',', ':'))

# 计算事件ID

event_id = hashlib.sha256(event_json.encode('utf-8')).hexdigest()

# 计算事件签名

event_sig = hmac.new(nostr_privkey.encode(), event_json.encode('utf-8'), hashlib.sha256).hexdigest()

# 生成Nostr事件

event = {

"id": event_id,

"pubkey": nostr_pubkey,

"created_at": created_at,

"kind": kind,

"tags": tags,

"content": content,

"sig": event_sig

}

# 以JSON格式显示发送的内容

logging.info("发送的内容:")

logging.info(json.dumps(event, indent=4, ensure_ascii=False))

# 发送事件到多个Relays

for relay in relays:

try:

ws = websocket.create_connection(relay)

logging.info(f"成功连接到 {relay}")

ws.send(json.dumps(event))

logging.info(f"成功发送事件到 {relay}")

ws.close()

except websocket.WebSocketException as e:

logging.error(f"连接到 {relay} 失败:{e}")

except Exception as e:

logging.error(f"发送事件失败:{e}")

# 每小时运行一次send_nostr_message函数

while True:

try:

send_nostr_message()

time.sleep(3600)

except KeyboardInterrupt:

logging.info("程序终止")

break

except Exception as e:

logging.error(f"程序运行失败:{e}")

目的很简单:就每小时发一条日文

```

计算事件签名

eventsig = hmac.new(nostrprivkey.encode(), event_json.encode('utf-8'), hashlib.sha256).hexdigest()

```

是不是这里写错了

不懂啊😂,id或sig的签名方式可能有问题,可是A I怎么改都是能发送成功,客户端不显示

看代码里,它只是发了就显示发送成功😂 并没有显示实际中继器实际的返回结果

呵呵,算了😂

因为 ID 还是错的哈哈哈

额?

得什么id啊,😂

看不懂 python 哈哈哈,中继器返回的信息是 ID 错了。而且这个签名应该也是错的,没看到用 schnorr

继续问AI,加密得是这个什么schnorr吗

用的 schnorr 算法进行签名

AI 给的答案不一样

Llama 3.3 70B

Nostr协议要求事件ID是事件内容的SHA-256哈希值,而不是Schnorr签名。

在Nostr协议中,事件ID的计算方式是:

python

event_id = hashlib.sha256(event_json.encode('utf-8')).hexdigest()

其中,event_json是事件内容的JSON字符串。

如果你想使用Schnorr签名作为事件ID,你需要修改Nostr协议的实现,这可能会导致兼容性问题。

如果你想使用Schnorr签名作为事件的签名,你可以在事件内容中添加一个新的字段,例如sig,来存储Schnorr签名。例如:

python

event = {

"id": event_id,

"pubkey": nostr_pubkey,

"created_at": created_at,

"kind": kind,

"tags": tags,

"content": content,

"sig": schnorr_signature

}

其中,schnorr_signature是使用Schnorr私钥对事件内容进行签名的结果。

总之,Nostr协议要求事件ID是事件内容的SHA-256哈希值,而不是Schnorr签名。如果你想使用Schnorr签名,你需要修改Nostr协议的实现或在事件内容中添加一个新的字段来存储Schnorr签名。

id 是 sha256

sig 是 schnorr 签名

真奇怪 都是人类我却看不懂你写什么 😂

我也不懂都是AI写的😂