傳輸與版本
- 應用到節點:WebSocket + JSON,欄位統一使用小駝峰命名。
- 節點之間:libp2p,協定 ID 形如 /gather/message/1.0.0;節點間協定在節點內部實作,不屬於 GProtocol。
- 版本規則:有破壞性變更就升大版本,小版本只加欄位。登入時帶協定版本,大版本不一致的請求會被拒絕並提示升級。
- 即時類動作(如正在輸入、通話信令)投遞不到就丟棄,不會存成離線訊息。
GProtocol 定義了應用與節點之間的全部通訊:請求與回應的格式、62 個動作、錯誤怎麼表達,以及哪些欄位只能是密文。
目前版本 8.0.0
這是 App 傳給入口節點的一則私聊訊息。路由需要的欄位是明文,訊息內容只是一段密文。
{ "requestType": "route", "action": "/message/send", "requestId": "9c1e…a42f", "submitter": "N4k2…Qx7", "receiver": "Np8V…3dL", "timestamp": 1794420000000, "data": "q8Zr4t…/Hk1yWQ==", "signature": "3045…e1b0" }
示意:欄位名稱與 GProtocol 8.0.0 一致,取值為虛構範例。
已刪除的模組不再列出。
| 模組 | 動作數 | 用途 |
|---|---|---|
| /user | 10 | 握手、登入登出、心跳、在線狀態、點對點資料交換 |
| /message | 9 | 傳送、確認、拉取離線、已讀、正在輸入、收回、編輯、表情回應 |
| /file | 8 | 分片上傳與下載,憑據取件 |
| /call | 7 | 一對一通話信令、ICE 與中繼設定 |
| /friend | 6 | 好友申請、同意、拒絕、刪除、列表 |
| /key | 6 | X3DH 預金鑰的上傳、取得、補充與低量提醒 |
| /group | 4 | 匿名扇出、加密狀態區塊讀寫、收回(節點不代管群組) |
| /push | 3 | 推播令牌註冊、註銷與測試 |
| /backup | 2 | 加密的關係備份與收藏備份 |
| /device | 2 | 本節點上的活躍工作階段、踢下線 |
| /node | 2 | 節點身分證明、節點目錄 |
| /card · /security · /tip | 3 | 名片、安全碼核對、打賞轉送 |
錢包金鑰對「使用者 · 裝置 · 時間戳」簽章,節點只接受很短時間窗內的簽章,並同時檢查協定大版本。
應用傳隨機數,節點簽章回傳;應用核對公鑰與節點 ID 一致,並核對營運方歸屬證與發布清單。
信箱標識每天更換;內容用 X25519 封裝,寄件人在封裝裡面;取件和確認都要簽章。
節點只看到匿名的投遞目標和加密的狀態區塊,看不到群名和成員。
取件憑據由檔案金鑰衍生,節點不保存分享名單。
備份位置由用戶端衍生,寫入要簽章;全網共用的金鑰已經取消。