Skip to content
⚠️ この翻訳は機械翻訳です。ネイティブによるレビューは保留中のため、訳文に誤りが含まれる場合があります。

ADR 004 — Hypercoreに代わるRaiznetネイティブ複製

ステータス: 受理済み
日付: 2026-06

文脈

Raiznetの当初の設計は、Holepunchスタックを複製基盤として採用していました: Hypercore(追記専用の署名付きログ)、Hyperswarm(DHT発見とホールパンチング)、Autobase(マルチライター)、Hyperdrive(コンテンツ配布)。3つの事実が状況を変えました。

  1. 一度も統合されなかった。 フェーズ1のノードはHTTP + SQLiteです; プロジェクトにHypercoreコードは存在しません。
  2. ノードはRustへ移行中 で、小さなARMハードウェア(静的バイナリ、約250 MBのRAM予算)を狙っています。Hypercore 10/11の、保守されたprotocol-completeなRust実装はなく、HyperswarmのDHTの使えるRust実装も全くありません。JSで定義された動く標準を第二言語から追跡することは、製品上の利益なしにプロジェクトを消耗させます。
  3. どのRaiznetノードもJSのHypercoreエコシステムと相互運用する必要がない。 ネットワークはRaiznetノードで構成されます; Holepunchピアとの互換性にユースケースはありません。

Raiznetが実際に必要とするのは、特定のスタックではなく3つの性質です: (a) 署名され、追記専用で、検証可能なデータ; (b) ピア発見; (c) 必須の中央ゲートウェイなしでの NAT/CGNAT越しの接続性。

決定

パート1 — データ: Raiznetネイティブの署名付きイベントログ。 ソースオブトゥルースは、著者ごとの追記専用イベントログになり、ハッシュチェーンされ、すべてのイベントが署名されます(Ed25519)。SQLiteは派生インデックスのままです(ADR-002); 正規バイナリエンコーディングは、入るときProtobufのままです(ADR-001)。Hypercoreは使用も、移植も、エミュレートもしません。

パート2 — 接続性: 階層化、既存のRust基盤上に構築。

  • Sync v1 — 設定済みピア。 既知のピア間のHTTP(S)プル(heads サマリ + (author, seq) 範囲のフェッチ)。LAN、VPN/Tailscale、公開IPノードを新規依存ゼロでカバーします。最初に入ります。
  • Sync v2 — pubkeyダイヤル方式のトランスポート。 ゼロから書くのではなく、既存のP2P基盤の上に構築します。主要候補: iroh — Ed25519のノードID(Raiznetのアイデンティティモデルに一致)、QUIC接続、自己ホスト可能なリレー を備えた組み込みのホールパンチング、topicベースのgossip。フォールバック候補: rust-libp2p(Kademlia、mDNS、GossipSub、AutoNAT/DCUtR/Relay v2)。採用は 現地スパイク で条件付けられます: 2つのノードが実際の地方の4G/CGNATリンク越しに接続性を確立し、直接接続 vs リレーの率を測定します。

根拠

  • データ形式を所有し、ネットワーキングを継承する。 イベントログはRaiznetの主権と研究グレードの保証が宿る場所です — 我々のものであるべきで、フィクスチャのコーパスで仕様化・テストできるほど小さいものです。NAT越え、接続移行、リレー調整はその逆です: 最大の複雑さ、差別化ゼロ、そしてすでに保守されたRustプロジェクトで解決済みです。
  • リレーはゲートウェイではない。 ホールパンチングは決して100%ではありません — 対称CGNAT(地方の4Gで一般的)の下では、すべてのシステム(Hyperswarm含む)がリレーにフォールバックします。この設計では、到達可能な任意のコミュニティノードがリレーになれます; トラフィックはAratekiが運営するインフラに依存しません。「必須のゲートウェイなし」の原則は保たれます — HyperswarmでDHTノードが果たすのと同じ役割です。
  • ローカルファーストは影響を受けない。 local_only ノードは発見やリレーに決して触れません; LAN上のESP32とノートPCは有効なRaiznetのままです。

トレードオフ

  • Hyperswarmの出来合いのグローバルDHTを失います; 発見はよりシンプルに始まります(設定済みピア、mDNS、その後v2トランスポートの発見)。
  • JSのHypercoreピアとの相互運用なし(既知のユースケースなし)。
  • irohは1.0前でAPIがまだ動きます; リスクは raiznet-sync クレートの境界の背後に封じ込められ、rust-libp2pがフォールバックです。v2への最終的なコミットは、CGNATの現地スパイクの後にのみ行われます。

帰結

  • CLAUDE.mdREADME.md、これらのドキュメントはもうHolepunchスタックを基盤として記述しません; 生き残る概念用語(topic、フィルター、カタログ、全複製、追記専用セマンティクス)はトランスポート非依存で変わりません。
  • Rust移行計画はこれをフェーズで実装します: イベントログ(フェーズ7)、sync v1 + v2(フェーズ8)、Protobuf正規エンコーディング(フェーズ9) — それぞれ実行前に独自の詳細計画を持ちます。
  • Material コンテンツ配布(旧Hyperdrive)は、同じイベントログ + 転送のプリミティブの上に後で仕様化されます。