運作方式
一次工作階段有四個步驟:發現、連線、推論與結算。沒有任何一個步驟由 GenKaKu Labs 營運。
1. 發現
Worker 在 WorkerRegistry 註冊:
- peer ID digest —
keccak256("genkaku.peer.v0:" + peerId),把它的 libp2p 身分綁定到它的錢包, - policy hash — worker 在註冊時釘住的一個
bytes32承諾, - 選填的 locator — 一個 multiaddr 提示,讓使用者可以撥接它。
註冊表公開 count() 與 isActive(address)。外掛透過公開 RPC 讀取它們;沒有需要信任的目錄
API。
Locator 是選填的。只有營運者明確開啟 publishAddress 時,worker 才會公開它的公網位址;
而一旦寫入鏈上,公開的 locator 就是永久的。
Policy hash 是一個承諾,不是模型的描述。Worker 實際提供什麼,會另外發佈在它的 offer
板(/genkaku/offers/0)上,列出模型名稱、價格與 Ollama 能力。
2. 連線
User 外掛向 worker 的 peer ID 建立 libp2p 連線。hello 交換(/genkaku/hello/0)會釘住:
- peer ID(必須與註冊表中的記錄一致),
- worker 的錢包位址,由簽章證明,而不是口頭宣稱,
- 每小時報價與計費模式。
如果兩個節點能直接互相觸及——同一個 LAN、一個公網 IPv4、一個全域 IPv6——token 就會直接在
兩者之間傳輸。如果不行,工作階段會經由公開的 seed relay 進行,它位於
staging.genkaku.app/seed。
Relay 轉發的是加密的 libp2p 流量。它讀不到提示詞或輸出,但它的營運者可以看到連線中繼 資料:節點位址、時間與流量。把經過 relay 的工作階段視為內容私密,但「誰在和誰通話」並非 私密。
這個版本沒有 NAT 穿透(沒有 DCUtR)。要嘛兩個節點可以直接撥接,要嘛由 relay 承載工作階段。
3. 推論
Worker 用 Ollama 在本機執行模型,並透過同一條連線串流 token。市集永遠看不到提示詞;worker 營運者看得到。
報價為零的 offer 完全跳過鏈,免費提供服務。
4. 結算
付費工作階段採用每小時報價、按已開始分鐘累計:
- worker 公告每小時價格,
- 每個已開始的分鐘算一分鐘,
- 兩分鐘的工作付兩分鐘,不是一小時。
對於付費模型,使用者在第一個 token 之前於 JobEscrow 開啟託管,這是一筆鏈上交易。工作階段
結束時:
- worker 對工作階段 ID、花費與收據雜湊簽章;
settle()驗證該簽章並釋出花費;- 99% 給 worker,1% 給金庫;
- 任何未花費的餘額回到使用者。
結算是第二筆鏈上交易,所以一次付費工作階段總共讓使用者付出兩筆交易:開啟託管,然後結算。 Gas 由送出各筆交易的人支付。
Worker 把已結算的收入累積在合約裡,可以隨時 claim();提領會付到 worker 的錢包。
取代 orchestrator 的部分
| 舊模式 | GenKaKu |
|---|---|
| 伺服器派工 | 使用者從合約挑選 worker |
| 伺服器儲存提示詞 | 直接點對點連線 |
| 伺服器計量用量 | 已開始分鐘累計、簽章收據 |
| 伺服器付款 | 鏈上釋放託管 |
中間的東西變少,信任假設也變小。但它們不是零:你仍然要信任 worker 看到提示詞,如果你的 工作階段經過 relay,也要信任 relay 看到的中繼資料,還要信任你自己執行的程式碼。