仕組み
セッションは 4 段階です。発見、ハンドシェイク、推論、決済。経路のどこも GenKaKu Labs が運用していません。
1. 発見
ワーカーは WorkerRegistry に登録します。
- peer ID — 応答する libp2p の身元、
- policy hash — 提供するモデルとルール、
- 任意の locator — multiaddr などのアドレスヒント。
レジストリは count() と isActive(address) を公開します。アプリは公開 RPC で読み、
信頼すべきディレクトリ API はありません。
locator は任意です。デスクトップアプリは publishAddress を明示的に有効にしない限り
グローバル IP を公開しません。一度オンチェーンに載った locator は永続です。
2. ハンドシェイク
アプリはワーカーの peer ID へ libp2p 接続を開きます。NAT 越えは DCUtR を使い、 双方が対称 NAT の場合はハンドシェイクのみリレーを使います。リレーはモデル通信を運びません。 128 KiB / 2 分の枠では LLM のストリームを支えられません。
hello の交換で固定されるもの:
- peer ID(レジストリと一致必須)、
- ワーカーのウォレットアドレス、
- policy hash、
- 時間単価と課金方式。
3. 推論
ワーカーは Ollama でローカルにモデルを動かし、直接接続でトークンを返します。 プロンプトはマーケットプレイスに保存されません。ワーカーの運営者は自身が処理する通信を見られます。
4. 決済
課金は時間単価+開始済み分の積み上げです。
- ワーカーが 1 時間あたりの価格を提示、
- 開始した分ごとに 1 分として数える、
- 2 分の仕事は 2 分分の支払いで、1 時間分ではありません。
利用者は JobEscrow にテスト USDC を預けてセッションを開きます。終了時:
- ワーカーがセッション ID、消費額、レシートハッシュに署名、
settle()が署名を検証して消費額を解放、- 99% がワーカー、1% が財務、
- 残りは
refund()で利用者へ戻る。
ワーカーはいつでも claim() で未払い残高を引き出せます。
オーケストレーターの置き換え
| 旧モデル | GenKaKu |
|---|---|
| サーバーが仕事を割り当てる | 利用者がコントラクトからワーカーを選ぶ |
| サーバーがプロンプトを保存 | 直接のピア接続 |
| サーバーが使用量を計測 | 開始済み分の積み上げ+署名レシート |
| サーバーが支払う | オンチェーンでエスクローを解放 |
中間が減るぶん信頼の前提も小さくなりますが、ゼロではありません。プロンプトをワーカーに 見せることは依然として信頼で、実行するコードも自分で信頼する必要があります。