NIP20
命令结果
draft optional author:jb55
将事件提交到中继时,客户端目前无法知道事件是否已成功提交到数据库。该 NIP 引入了命令结果的概念,除了提供有关事件是否被接受或拒绝的更多信息外,命令结果与通知类似。
命令结果是具有以下结构的 JSON 对象,当事件成功保存到数据库或被拒绝时,将返回该对象:
当事件重复且已保存时,中继必须返回 true。在这种情况下, message 应以 duplicate: 开头。
当事件被拒绝且未保存时,中继必须返回 false。
message 应提供有关命令成功或失败原因的其他信息。
如果公钥或网络地址已被阻止、禁止或不在白名单上,则 message 应以 blocked: 开头。
如果事件无效或不符合某些特定条件(创建 _ 的时间太远、ID 错误、签名错误等),则 message 应以 invalid: 开始。
如果事件没有遇到一些工作证明困难,则 message 应从 pow: 开始。客户端可以在此时查询中继元数据以检索所需的发布难度。
如果事件由于速率限制技术而被拒绝,则 message 应以 rate-limited: 开头。
如果由于服务器问题而无法保存事件,则 message 应以 error: 开始。
除非出现故障,否则不会使用 OK 响应来确认短暂事件。
如果事件或 EVENT 命令格式错误且无法解析,则应使用通知消息而不是命令结果。此 NIP 仅适用于非格式错误的事件命令。
例子
事件已成功写入数据库:
由于以下原因,事件已成功写入数据库:
由于 IP 筛选器,事件被阻止
由于公钥禁止,事件被阻止
事件被阻止,pubkey 未注册
事件被拒绝,速率受限
事件被拒绝, created_at 距离太远
事件被拒绝,工作证明不足困难
事件保存失败,
客户端处理
messages 是为人类设计的,带有 reason: 前缀,以便客户端可以稍微更智能地处理它们。例如,由于某种 rate-limited: 原因,客户端可能不会显示任何内容,只是在较长的超时时间内再次尝试。
对于 pow: 前缀,它可以查询中继元数据以获得更新的难度要求,并在后台重试。
对于 invalid: 和 blocked: 前缀,客户端可能希望将它们显示为样式错误弹出窗口。
前缀包括一个冒号,以便可以通过获取后面 : 的所有内容并对其进行修剪来将消息与前缀完全分离。
未来扩展
这个提议应该在将来扩展到支持更多的命令,例如 req 和 auth.它们被排除在这个初始版本之外,以使事情变得更简单。
Last updated