架構
協議是三個合約加一種點對點傳輸。其他都是客戶端。
合約(Base Sepolia,chain 84532)
| 合約 | 位址 |
|---|---|
| WorkerRegistry v0.2 | 0xFbE9FF497dC24bD69d13E4201418938Df7435Ff6 |
| JobEscrow v0.2 | 0x8175df796A659681009BeDa4609a3cFe9d281D82 |
| MockUSDC(僅測試) | 0xEb33DFC0424810039337a38510ef522e9E7F9727 |
WorkerRegistry
function register(bytes32 peerId, bytes32 policyHash) external;
function registerWithLocator(bytes32 peerId, bytes32 policyHash, string locator) external;
function advertise(string calldata locator) external;
function selfDeactivate() external;
function isActive(address wallet) external view returns (bool);
function count() external view returns (uint256);
- 每個錢包一筆。重新註冊會保留原本的註冊時間。
advertise()的 log 成本低且有長度上限(MAX_LOCATOR_BYTES = 256)。- 停用可自行操作;營運者也能附理由停用。
JobEscrow
function openSession(address worker, uint128 amount) external returns (uint256 id);
function settle(uint256 id, bytes32 receiptHash, uint128 spend, bytes calldata workerSig) external;
function refund(uint256 id) external;
function claim() external;
settle()驗證 worker 對工作階段收據的簽章。- 分潤為 99 / 1(worker / 金庫)。
- 未花費的託管透過
refund()回到使用者。
傳輸
libp2p over TCP/QUIC,使用 Noise 與 yamux。註冊表中的 peer ID 就是客戶端預期的身分; 不一致會中止握手。
- DCUtR 處理多數 NAT 穿透。
- Relay 只在無法建立直接路徑時使用,且只用於握手。relay 額度(128 KiB / 2 分鐘) 排除了透過它串流的可能。
- IPv6 支援但需明確開啟。
信用與可達性
Worker 有由行為衍生的信用分數。它不是代幣,也不能購買。有兩道閘門使用它:
- 可達性閘門 — 反覆握手失敗的 worker 會被降權。
- 信用閘門 — 紀錄不良的 worker 預設不會顯示。
兩者都是客戶端策略而非合約狀態,因此客戶端永遠可以選擇忽略。
Commit-challenge
為了避免 worker 宣稱執行它其實沒跑的模型,客戶端可以在第一個 token 前, 要求對隨機挑戰的承諾。無法產生的 worker 會被丟棄。
刻意不存在的東西
- 沒有 orchestrator、沒有工作佇列伺服器、沒有提示詞資料庫。
- 沒有代幣、沒有質押、沒有治理合約。
- 沒有主網部署。
- 桌面應用程式沒有遙測。