メインコンテンツまでスキップ

アーキテクチャ

プロトコルは 3 つのコントラクトと 1 つのピアツーピア伝送です。それ以外はすべてクライアントです。

コントラクト(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);
  • ウォレットごとに 1 件。再登録しても最初の登録時刻は保持されます。
  • advertise() はログが安価で、長さ上限があります(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() はセッションレシートへのワーカー署名を検証します。
  • 配分は 99 / 1(ワーカー / 財務)。
  • 未使用のエスクローは refund() で利用者へ戻ります。

伝送​

libp2p over TCP/QUIC、Noise と yamux。レジストリの peer ID がクライアントの期待する身元で、 一致しなければハンドシェイクを中止します。

  • DCUtR がほとんどの NAT 越えを担当。
  • リレーは直接経路が作れない場合のみ、しかもハンドシェイクだけ。リレー枠 (128 KiB / 2 分)ではストリーミングは成立しません。
  • IPv6 は対応しますがオプトインです。

信用と到達性​

ワーカーには行動から導かれる信用スコアがあります。トークンではなく、購入もできません。 2 つのゲートが使います。

  • 到達性ゲート — ハンドシェイクに繰り返し失敗するワーカーは優先度が下がります。
  • 信用ゲート — 記録の悪いワーカーは既定で表示されません。

どちらもクライアント側のポリシーでコントラクト状態ではないため、無視する選択も常に可能です。

Commit-challenge​

実際には動かしていないモデルを主張するワーカーを防ぐため、クライアントは最初のトークンの前に ランダムなチャレンジへのコミットメントを要求できます。出せないワーカーは切断されます。

意図的に存在しないもの​

  • オーケストレーター、ジョブキューのサーバー、プロンプトのデータベース。
  • トークン、ステーキング、ガバナンスコントラクト。
  • メインネットのデプロイ。
  • デスクトップアプリのテレメトリ。