22-BitComet P2P × OpenClaw AI - 交互流程地图

聊天 P0(ext=101)、P2P 任务与本地控制端配对

固定顺序模板:流程图 1 -> 流程图 2 -> 时序图(可选)-> 流程总结。扩展内容仅允许后置追加。
🔄 P2P 任务分发
flowchart LR Main[DispatcherNode] --> DHT[DHT_lookup_peer] DHT --> Wire[TCP_Wire_handshake] Wire --> Ext[BEP10_ext102_task] Ext --> Run[Worker_execute] Run --> Res[ext102_task_result] Res --> Main

流程说明

通过 DHT(BEP-44)解析对端 peer,建立 bittorrent-protocol 连接并完成 BEP-10 扩展协商后,使用 ext=102 投递与回收任务。

📋 移动端配对(本地控制面)
flowchart TD Start([打开App]) --> Scan[扫码或短码] Scan --> TLS[TLS会话建立] TLS --> Token[换取访问令牌] Token --> Chat[聊天页 P0] Chat --> Dash[节点状态页]

流程说明

手机仅连接本机 LocalAPI,不进入公网 DHT;配对后优先进入聊天(与 page_structure Tab 一致)。P1 远程为用户自备 VPN/穿透。

💬 P2P 聊天(P0,ext=101)
flowchart LR UI[Mobile_聊天页] --> API[LocalAPI_chat] API --> Q[队列与ocp2p_chat_message] Q --> W[Wire_BEP10] W --> E101[ext101_openclaw_chat] E101 --> ACK[chat_ack] ACK --> Q Q --> API API --> UI

流程说明

HTTP 仅面向上层 UI;真实收发由 P2P 节点经 BEP-10 扩展名 openclaw_chat 完成,与 code/p2p-probe/run-all.mjs 探针一致。

🔐 发布者授权与 ACL(resource_id)
flowchart TD Pub[Publisher_节点] --> Grant[LocalAPI_subscription_grant] Grant --> DB[(ocp2p_subscription_active)] Remote[对端_ext101_chat] --> Node[本机入站解析] Node --> ACL{订阅或发布者通过} ACL -->|是| Store[(ocp2p_chat_message)] ACL -->|否| Drop[丢弃不入库] Store --> GetMsg[GET_chat_messages] GetMsg --> UI2[Mobile_仅授权可见]

流程说明

详见 business_logic.md §8;本地桩实现 /local/v1/subscription/*;无权限时 GET /chat/messages?resource_id= 返回 code=4031

⏱️ 本地 API 与 traceId
sequenceDiagram participant M as Mobile participant L as LocalAPI participant P as P2PNode M->>L: POST pair/confirm traceId L->>P: register_session P-->>L: ok L-->>M: token traceId M->>L: GET chat/sessions L-->>M: list traceId M->>L: POST chat/send L->>P: enqueue ext101 P-->>L: msg_id queued L-->>M: msg_id traceId M->>L: GET node/status L-->>M: status traceId

时序说明

本地控制面与 P2P 节点进程同机协作;聊天与状态查询均带 traceId,便于与 ocp2p_chat_message、任务台账关联。

🔗 DHT 节点注册与 peer 发现
flowchart TD Boot([节点启动]) --> Gen[生成或加载DID密钥] Gen --> DHTPut[BEP44_put_节点档案] DHTPut --> Timer[定时30min刷新] Timer --> DHTPut Need([需要连接peer]) --> DHTGet[BEP44_get_目标key] DHTGet --> Verify{签名与seq校验} Verify -->|通过| Connect[TCP_Wire_handshake] Verify -->|失败| Drop[丢弃_metrics] Connect --> ExtHand[BEP10_扩展协商] ExtHand --> NodeInfo[ext100_node_info_DID验证]

流程说明

节点启动后通过 BEP-44 注册自身档案(DID + capabilities + 签名),并定期刷新。发现 peer 时通过 DHT get 获取目标档案,验签通过后建立 TCP Wire 连接。详见 business_logic.md §9。

💓 心跳存活与状态管理
sequenceDiagram participant A as NodeA participant B as NodeB loop 每30秒 A->>B: ext105 heartbeat B-->>A: heartbeat_ack end Note over A,B: 3次未回复标记不健康 A-xB: heartbeat无响应x3 A->>A: 标记B离线触发断连

流程说明

ext=105 心跳每 30 秒发送一次;3 次无响应标记对端不健康并触发断连处理。连续心跳用于贡献度 U_u 计量。详见 business_logic.md §12。

🪪 DID 身份验证(Wire 握手)
sequenceDiagram participant A as PeerA participant B as PeerB A->>B: TCP connect A->>B: BT handshake BEP10 m字典 B-->>A: BEP10 m字典 A->>B: ext100 node_info did pubkey sig B->>B: 验证did与pubkey一致 B->>B: 验证signature与ts窗口 alt 验证通过 B-->>A: ext100 node_info did pubkey sig A->>A: 验证B的身份 Note over A,B: 双向验证完成进入业务阶段 else 验证失败 B->>A: ext100 error_report B->>B: 断开连接metrics end

流程说明

Wire 握手完成后通过 ext=100 node_info 交换 DID 与签名,双向验证。验证失败直接断连。详见 business_logic.md §11.3。

📝 流程总结

优先路径:配对 → 聊天(LocalAPI + ext=101) → 节点状态。协作路径:DHT 发现 → Wire ext=102 任务 → 结果回传。基础设施路径:DID 验证 → ext=100/105/106 → 心跳存活 → 能力路由。移动端仅连本机 LocalAPI,不暴露于公网 DHT。

← 返回文档总览