跳转到主要内容
会话是围绕单个挂单形成的报价与响应事件链。会话中的每个事件都共享相同的 "h" 标签——这是一个确定性的会话 ID,用于将对话与其根挂单及涉及的双方绑定起来。

为什么需要会话 ID?

挂单是可替换事件(kind 31001),这意味着底层挂单事件的 ID 在挂单更新时可能会发生变化。需要一个稳定的会话 ID,以便即使根挂单已被重新发布,完整的报价历史仍然可以被可靠地查询。 会话 ID 还是与参与方相关的:两个不同的贸易伙伴就同一挂单进行报价时,各自将拥有不同的会话 ID。这样可以确保对话在各参与者组合之间保持私密和隔离。

会话 ID 计算

给定 event_idpubkey1pubkey2(均为 64 位十六进制小写),其中 event_id 是根挂单事件 ID,pubkey1/pubkey2 是对话的两名参与者:
  1. 验证 event_id 非空(如需强制格式,则为 64 位十六进制)。
  2. 规范化顺序: pk_lo = min(pubkey1, pubkey2)pk_hi = max(pubkey1, pubkey2)(按字典序)。
  3. 拼接(不使用分隔符): raw = event_id + pk_lo + pk_hi
  4. 哈希: sha256(raw)编码为小写十六进制thread_id
在哈希之前,公钥按字典序排序,因此无论哪一方进行计算,结果都是一致的。挂单作者和报价方对于他们的会话总会得到相同的会话 ID。