データ可用性サンプリング(danksharding)
全データを持たない軽いノードでも、数十個のかけらを無作為に取り寄せるだけでデータ公開を高信頼に確かめられる。消失訂正符号とdankshardingがロールアップの手数料を桁で下げる原理まで腑に落ちる。
- 1.データ可用性サンプリング(DAS)は、ブロックの一部をランダムに数十回取り寄せて全てが取得できるかを確かめ、少数のサンプルだけで「全データが公開されている」ことを高確率で保証する検証手法。
- 2.前提は消失訂正符号。データを2倍に冗長化し「半分そろえば全体を復元できる」形にすることで、データを隠すには半分超を欠損させる必要が生じ、無作為サンプリングでほぼ確実に検知できる。
- 3.danksharding は blob 用データ領域を巨大な符号化行列として扱い、各ノードが行と列の一部だけを保持・サンプリングして総容量を稼ぐ設計。ロールアップのDAコストを大幅に下げる。
データ可用性という問題の正体
ロールアップの安全性は、突き詰めると取引データがネットワークに公開されているかという一点に懸かります(/blockchain/layer2-rollups/ を参照)。データさえ手に入れば、誰でも状態を再構築し、独立に検証や強制出金ができます。逆にデータが隠されれば、状態遷移が正しくてもユーザーは自分の残高を証明できず資産が人質になります。これがデータ可用性(Data Availability, DA) 問題です。
ここで厄介なのは、DAが証明できない種類の性質である点です。「このデータは公開されている」ことを短い証拠で相手に納得させる方法は、原理的に存在しません。ブロック生成者が全体の1%だけを意図的に伏せている状況を考えると、その1%は、実際に誰かがダウンロードを試みるまで欠損に気づけません。ゼロ知識証明が保証するのは「遷移が正しい」という妥当性であって、「データが手に入る」という可用性ではない——両者は独立した安全性の柱です。
最も確実なDA検証は、全ノードがブロック全体をダウンロードして手元に持つことです。実際 L1 のフルノードはこれをやっています。しかしこの方式では、ブロックを大きくするほど参加できるノードが減り、分散性が犠牲になります。DAを安く大容量に拡張したいのに全ダウンロードを課すのは本末転倒です。全体を持たずにDAを検証する手段が要る——これがサンプリングの動機です。
ランダムサンプリングの発想
データ可用性サンプリング(Data Availability Sampling, DAS) は、ブロックを小さな断片(サンプル)に分け、検証者が無作為に選んだ数十個だけをネットワークに要求する手法です。全ての要求に応答が返れば「ブロック全体が公開されている」と高い確率で結論します。全体の一部しか見ないのに全体の可用性を保証できる——ここに巧妙さがあります。
素朴に考えると、これは成立しないはずです。ブロック生成者がデータの半分を伏せている場合、ランダムに1個引いて欠損に当たる確率は50%。数を増やせば見逃し確率は下がりますが、1バイトだけを伏せられたら、それを引き当てる確率はほぼゼロで、サンプリングは無力に見えます。
この「わずかな欠損を隠せる」問題を潰す鍵が、次節の消失訂正符号です。データをあらかじめ冗長化し、「半分そろえば全体を復元できる」性質を持たせると、攻撃者がデータを本当に使えなくするには半分より多くを欠損させねばならなくなります。欠損が全体の半分を超えるなら、ランダムに数十個引けばそのどれかが欠損に当たる確率は指数的に1へ近づきます。
消失訂正符号 — 少数サンプルを成立させる土台
消失訂正符号(erasure code) は、k 個の元データから n 個(n > k)の符号化片を作り、そのうち任意の k 個がそろえば元データを完全復元できるようにする技術です。比率 k/n を符号化レートと呼び、DAでは2倍拡張、すなわち n = 2k(レート1/2)が典型です。この場合、**符号化片の半分(k 個)**があれば全体を取り戻せます。
代表的な構成が Reed–Solomon符号 です。元データ k 個を、次数が k 未満の多項式の係数(または評価値)と見なし、その多項式を n 個の相異なる点で評価した値を符号化片とします。多項式は相異なる k 点での値から一意に復元(ラグランジュ補間)できるため、n 個のうちどの k 個が残っても元が戻ります。
元データ: d0 d1 ... d(k-1) (k 個)
↓ 次数が k 未満の多項式 P(x) の係数とみなす
符号化: P(x0), P(x1), ..., P(x(n-1)) (n = 2k 個の評価値)
↓ ネットワークへ分散
復元: 任意の k 個の評価値がそろえば P を補間で復元 → 元データ
ここが決定的です。n = 2k で符号化した後、攻撃者がデータを復元不能にするには、残りが k 個未満になるよう、すなわち全体の半分より多くを欠損させねばなりません。逆に言えば、欠損が半分以下なら誰でも復元できて可用性は保たれる。したがって攻撃者に残された唯一の隠蔽手段は「50%超の大量欠損」であり、これはランダムサンプリングにとって最も見つけやすい状態です。符号化が、検知困難な「1バイト欠損」を、検知容易な「過半数欠損」へと強制変換するのです。
2倍拡張したデータで、復元に必要な k 個が欠けている(=過半数が欠損している)とき、ランダムに1個引いて「たまたま利用可能な片」に当たる確率はおよそ1/2以下です。独立に s 個サンプリングすれば、全てが利用可能に見えてしまう(=欠損を見逃す)確率は約 (1/2)^s。s = 30 なら約10億分の1、s = 20 でも100万分の1程度で、ごく少数のサンプルで実用上十分な確信が得られます。多数の軽ノードが各自サンプリングすれば、全体では隠蔽はほぼ不可能になります。
符号化の正しさをどう保証するか
サンプリングの安全性は「データが正しく符号化されている」ことに依存します。もし生成者が不正な符号化(多項式の関係を満たさないデタラメな片)を混ぜたら、k 個そろえても矛盾して復元できず、可用性の前提が崩れます。したがって検証者は、受け取ったサンプルが正しい低次多項式上の点であることも確かめねばなりません。
ここで KZG多項式コミットメント が使われます。生成者はブロックの多項式に対し短いコミットメント(1個の楕円曲線点)を発行し、各サンプルには「この評価値は確かにコミット済み多項式上の点だ」という開示証明を添えます。検証者はサンプルごとにこの証明を検証でき、不正な符号化片を個別に弾けます。KZGは評価点の開示を定数サイズで行える点が要で、この機構は/blockchain/zk-proofs-snark-stark/ で扱う多項式コミットメントと同じ土台に立ちます。KZGコミットメントは、Merkleルートが集合の要素を1個のハッシュへ束ねて包含証明を可能にするのと同様(/blockchain/merkle-tree-verification/ 参照)、データ片の帰属を暗号的に固定する役割を担います。
初期のDAS構想では、不正な符号化を告発するfraud proof(不正符号化証明) を別途流す設計が検討されました。しかしこれは追加の通信と待機を要し、ネットワークに正直な監視者がいる前提も必要でした。KZGコミットメントを使うと、各サンプルが正しい多項式上にあることをその場で検証できるため、不正符号化そのものが構成できなくなり、この告発機構が不要になります。danksharding が KZG を採用する主因の一つです。
blob と danksharding
Ethereum は EIP-4844(proto-danksharding)で、ロールアップ向けの一時的なデータ領域 blob を導入しました。blob は数週間で破棄される安価なデータ枠で、その間は誰でもダウンロードして状態を再構築できるためDAの目的を満たします。恒久保存が不要なぶん通常の calldata より桁違いに安く、L2手数料の主因を直接押し下げました。ただし proto-danksharding の段階では、各ノードは依然として全 blob をダウンロードしており、サンプリングはまだ導入されていません。
danksharding(フルの構想)は、この blob 群を1枚の巨大な2次元符号化行列として扱い、DASを本格導入する設計です。全ての blob を縦に並べて行列を作り、行方向と列方向の両方をReed–Solomon符号で2倍拡張します。各ノードはこの行列の一部の行と列だけを保持・伝播し、検証時には無作為なセルをサンプリングします。2次元化により、たとえ一部の行が復元不能でも列方向から補完でき、復元の堅牢性が上がります。
| 観点 | proto-danksharding(EIP-4844) | danksharding(フル構想) |
|---|---|---|
| データ形態 | blob(1次元、ノードは全blob取得) | blob群を2次元符号化行列として扱う |
| DA検証 | 全blobダウンロードで確認 | 行・列のセルをランダムサンプリング |
| 各ノードの負荷 | 全blob分(数個/ブロック) | 行列の一部(行・列の断片)のみ |
| 消失訂正符号 | 個々のblob内で使用 | 行方向・列方向の2次元Reed–Solomon |
| blob数の上限 | 少数(段階導入の初期値) | 大幅増(サンプリングで容量を稼ぐ) |
| 主眼 | 安価なDA枠の導入 | サンプリングでDA容量を桁で拡張 |
要点は、総データ容量を上げつつ、個々のノードの負荷は下げるという一見矛盾する両立です。全員が全部を持つ代わりに、多数のノードがそれぞれ違う断片を分担して持ち、サンプリングで全体の可用性を集合的に保証する。これにより、ネットワーク全体としては巨大な blob 空間を扱えるのに、参加する軽ノード1台あたりの帯域は小さく抑えられます。断片の配布と収集は、ブロックそのものの伝播と同じく p2p ゴシップ層(/blockchain/p2p-gossip-network/ 参照)の上で、行・列ごとのサブネットへ分けて行われます。
ロールアップのコスト削減へどうつながるか
ロールアップは実行をオフチェーンへ逃がした結果、残るボトルネックがDAコストへ移ります。L1に載せるべきは圧縮した取引データであり、そのバイト単価と帯域がL2手数料を直接決めます。DASとdankshardingは、この帯域を「全員が全部を持つ」制約から解放し、ネットワークの実効DA容量を大幅に広げます。
DASはあくまで「データが取得可能か」を確かめる仕組みです。取引内容が正しいか、状態遷移が妥当かは別問題で、それはロールアップ側の不正証明(Optimistic)または妥当性証明(ZK)が担います。DASは可用性の柱を安く堅牢にするだけであり、実行の正しさを肩代わりはしません。逆に、妥当性証明があってもDAが失われれば強制出金の材料を各自が構成できず資産は人質になり得ます。「妥当性 ≠ 可用性」を分けて捉えることが本質です。
供給側の容量が増えれば、同じ blob 空間を巡る競合が緩み、ロールアップがバッチを載せる単価が下がります。さらにロールアップ側は署名集約や差分エンコードで載せるバイト数そのものを圧縮しており、供給拡大(danksharding)と需要圧縮(rollup側の最適化)が噛み合って、実効的なトランザクション単価を押し下げます。
・DA問題の核心は「データ公開は短い証拠で証明できない」点。妥当性証明では代替できない独立の安全性の柱。
・DASは無作為に数十サンプルを取得して可用性を高確率で保証する。前提は消失訂正符号(2倍拡張) で「過半数欠損しないと隠せない」状態を作ること。
・見逃し確率は約 (1/2)^s(s はサンプル数)。符号化の正しさは KZG多項式コミットメントで各サンプルを検証し担保する。
・danksharding は blob 群を2次元Reed–Solomon行列として扱い、各ノードが断片のみ保持・サンプリング。総容量を上げつつ個別負荷を下げ、ロールアップのDAコストを大幅削減する。
まとめ
- データ可用性(DA) はロールアップ安全性の生命線だが、「公開されている」ことは短い証拠で証明できない。妥当性(遷移の正しさ)とは独立した柱として扱う必要がある。
- DAS は無作為に数十個のサンプルを取り寄せ、全応答をもって全体の可用性を高確率で結論する。全体を持たずにDAを検証できるため、大容量化と分散性を両立させる。
- 成立の土台は消失訂正符号。
n = 2kのReed–Solomon拡張で「半分そろえば復元可能」にすると、隠蔽には過半数欠損が必要になり、少数サンプルで見逃し確率が約(1/2)^sに落ちる。 - 符号化の正しさは KZG多項式コミットメントで各サンプルを個別検証し、不正符号化の告発機構を不要にする。
- danksharding は blob 群を2次元符号化行列として扱い、各ノードが行・列の断片のみを保持・サンプリング。総DA容量を桁で拡張しつつ個別負荷を抑え、ロールアップのコスト削減を実現する。
ブロックチェーン Article
データ可用性サンプリング(danksharding)を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
ブロックチェーン
比較で見る軸
難易度: advanced / カテゴリ: ブロックチェーン / タグ数: 6
導入後に効く点
前提は消失訂正符号。データを2倍に冗長化し「半分そろえば全体を復元できる」形にすることで、データを隠すには半分超を欠損させる必要が生じ、無作為サンプリングでほぼ確実に検知できる。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- ブロックチェーン
- タグ数
- 6
判断チェックリスト
- 自社の用途が「ブロックチェーン / データ可用性」に近いか確認する。
- 強みである「データ可用性サンプリング(DAS)は、ブロックの一部をランダムに数十回取り寄せて全てが取得できるかを確かめ、少数のサンプルだけで「全データが公開されている」ことを高確率で保証する検証手法。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。