跳到主要内容

架構

協議是三個合約加一種點對點傳輸。其他都是客戶端。

合約(Base Sepolia,chain 84532)​

合約位址
WorkerRegistry v0.20xFbE9FF497dC24bD69d13E4201418938Df7435Ff6
JobEscrow v0.20x8175df796A659681009BeDa4609a3cFe9d281D82
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、沒有工作佇列伺服器、沒有提示詞資料庫。
  • 沒有代幣、沒有質押、沒有治理合約。
  • 沒有主網部署。
  • 桌面應用程式沒有遙測。