TL

ブロックチェーンオラクルと価格フィード

なぜスマートコントラクトは為替や価格を自分で読めないのか。オラクル問題を分散オラクルネットワークと価格集約でどう解くか、操作耐性の作り方と攻撃の型まで原理から腑に落ちる。

応用ブロックチェーンオラクル価格フィードDeFiスマートコントラクトセキュリティ最終更新: 2026-06-21
TL;DR要点だけ先に
  • 1.ブロックチェーンは決定性を守るため外部世界を直接観測できない。外部データを署名付きでオンチェーンへ運ぶのがオラクルで、ここが信頼の最弱点になる(オラクル問題)。
  • 2.単一提供者は単一障害点かつ操作対象。分散オラクルネットワークは複数ノードの報告を中央値などで集約し、少数の虚偽や故障を数の力で吸収して操作耐性を得る。
  • 3.価格フィードの攻撃は主にデータ源そのもの(薄い板をフラッシュローンで動かす)と伝送経路(改竄・遅延)を狙う。中央値集約・複数取引所・TWAP・逸脱閾値・鮮度チェックが定石の防御。

オラクル問題とは何か

スマートコントラクトは、全ノードがビット単位に同一の状態遷移を得る決定性の上に成り立ちます。この要請ゆえに、コントラクトは実時間・乱数・ネットワークI/O といった非決定的な入力を一切観測できません(詳細は /blockchain/smart-contracts-evm/ を参照)。ところが現実のアプリケーション——貸付、デリバティブ、保険、予測市場——は「1 ETH は今いくらか」「この便は遅延したか」といったチェーン外の事実を必要とします。

ここに根本的な緊張が生まれます。台帳の外にある事実を、決定性を壊さずにオンチェーンへ持ち込む方法が要る。この橋渡しを担うのがオラクルです。オラクルは外界のデータを取得し、それをトランザクションとしてオンチェーンに書き込むことで、以後は全ノードが同一の確定値として参照できるようにします。

オラクルは信頼を「移す」だけで「消せない」

ブロックチェーンは第三者を信頼せずに合意する仕組みですが、オラクルが運ぶデータの真偽そのものはチェーンの合意では検証できません。「1 ETH = 3000 ドル」という値が正しいかは、台帳の外の世界を見ないと分かりようがない。つまりオラクルは信頼を不要にするのではなく、信頼の対象を「データ提供者」へ移す装置です。この移された信頼をいかに希釈し操作困難にするかが、オラクル設計の全課題になります。

これがオラクル問題です。どれだけコントラクト本体が堅牢でも、それが依存する外部データが虚偽なら、正しく実行された結果として誤った清算や不正な引き出しが起きます。実際、DeFi の大型被害の多くはコントラクトのバグではなくオラクルの操作に起因します。

なぜ単一オラクルでは不十分か

最も素朴な実装は、信頼する 1 者(プロジェクト運営や単一データ業者)がAPIから価格を取り、コントラクトの setPrice を呼ぶ方式です。これは単一障害点であり、同時に単一の攻撃対象でもあります。

脅威単一オラクルでの帰結本質的な原因
提供者の悪意・買収任意の虚偽価格を注入でき、依存コントラクトを一斉に破れる報告値を検算する主体が誰もいない
提供者の障害・停止価格が更新されず陳腐化。清算が止まる/古値で動く冗長性がゼロ
鍵の漏洩署名鍵を奪えば正規の値として虚偽を送れる権限が1つの鍵に集中
データ源の一時異常1取引所の異常値がそのまま台帳の真実になる外部ソースが多重化されていない

要点は、オンチェーンの検証機構(署名検証やファイナリティ)は「誰が送ったか」は保証できても「送られた値が正しいか」は保証できないことです。署名が正しくても中身が嘘なら意味がない。したがって、オラクルの安全性は暗号ではなくデータ供給の構造——誰から、いくつのソースから、どう束ねるか——で作るしかありません。

分散オラクルネットワーク

分散オラクルネットワーク(DON: Decentralized Oracle Network) は、この構造を多重化して操作耐性を得ます。単一提供者の代わりに、独立した多数のオラクルノードがそれぞれ独立にデータを取得し、その報告を集約して1つの値に束ねます。少数のノードが故障・虚偽を働いても、多数の正直な報告が結果を支配するように設計します。

[外部ソース群]  取引所A  取引所B  取引所C ...
                  │       │       │
        各ノードが独立に取得・観測
                  ▼       ▼       ▼
[オラクルノード]  N1      N2  ...  Nk     (各自が署名した報告を作る)
                  └───┬───┴───────┘
                      ▼  集約(オフチェーン or オンチェーン)
                 中央値などで1値に束ね、まとめて署名
                      │
                      ▼  1トランザクションでオンチェーン更新
[ブロックチェーン]  価格フィード契約が確定値として保持

集約をオフチェーンで実行し、結果と各ノードの署名だけをオンチェーンへ書き込む方式(オフチェーン報告, OCR)が主流です。理由はコストで、k 個の署名を個別に検証・記録するとガスが k 倍かかる。オフチェーンで合意・集約し、1 トランザクションにまとめて提出すれば、ガスを提供者数に依存させずに済みます。集約結果の正当性は各ノードの署名(署名・鍵の原理は /blockchain/signatures-wallets-keys/)で担保し、オンチェーン側は「規定数以上の既知ノードが署名したか」だけを検証します。

集約は「平均」ではなく「中央値」が定石

ノード報告を束ねる関数の選択が操作耐性を決めます。算術平均は外れ値に弱く、1 ノードが極端な値(例: 0 や巨大値)を報告するだけで結果を大きく引きずれます。対して中央値(median) は、報告者の過半数が正直である限り、少数の虚偽値が中央値そのものを動かせません。k ノード中 floor((k-1)/2) 個までの任意の虚偽に対して中央値は正直側に留まる——この頑健性ゆえ、価格フィードは中央値集約を基本とします。

価格フィードと集約の実務

DeFi で最も使われるオラクルが価格フィードです。設計上の勘所は、単なる「最新価格」ではなく操作しにくい価格を提供することにあります。ここには2系統のアプローチがあります。

方式価格の作り方強み弱み
プッシュ型フィード(DON集約)複数取引所の値を複数ノードが取得し中央値集約してオンチェーンに定期更新多数決で外れ値・単一ソース操作に強い。参照が安価(読むだけ)更新に遅延と更新コスト。逸脱時のみ更新する設計が要る
オンチェーンTWAPDEXのプール価格を一定時間窓で時間加重平均する外部提供者に依存せず自己完結。瞬間的な価格スパイクを平滑化急変時に追随が遅い。流動性の薄いプールでは操作コストが低い

TWAP(Time-Weighted Average Price, 時間加重平均価格) は、瞬間値ではなく時間窓(例: 30 分)にわたる平均を用いる手法です。ある時刻に価格を一瞬だけ歪めても、窓全体の平均への寄与は小さいため、攻撃者は歪んだ価格を長時間維持し続ける必要が生じます。維持コスト=攻撃コストを引き上げるのが狙いで、瞬間操作に対する構造的な防御になります。ただし平滑化の代償として、正当な急変動への追随が遅れます。

さらにプッシュ型フィードは更新の起動条件を工夫します。毎ブロック更新はガスが嵩むため、実務では「逸脱閾値(deviation threshold)(前回値から一定率ずれたら更新)」と「心拍(heartbeat)(最大でもこの間隔で必ず更新)」を併用します。平時は逸脱があったときだけ書き込み、変動が乏しくても心拍で鮮度を保つ設計です。

鮮度チェックを怠ると「古い正しい値」で殺される

オラクルの値にはタイムスタンプが付きます。利用側コントラクトは、返ってきた価格が「いつのものか」を必ず検査すべきです。ネットワーク混雑やオラクル障害で更新が滞ると、フィードは最後の(古い)値を返し続けます。これを無検査で使うと、市場が急落したのに古い高値で担保評価してしまい、本来清算すべきポジションを見逃す、といった事故が起きます。updatedAt が心拍間隔より古ければ取引を拒否する(revert) のが安全側の実装です。

オラクルを狙った攻撃と防御

オラクル攻撃は、データが辿る経路のどこを突くかで分類できます。データ源そのものを歪めるか、伝送経路で改竄・遅延させるかです。

フラッシュローン価格操作が代表格です。攻撃者は無担保で巨額を一時借用し、流動性の薄いDEXプールで大量売買して瞬間的に価格を歪めます。もし被害コントラクトがその単一プールの瞬間価格を担保評価に使っていれば、歪んだ価格を根拠に過大な借入や不当な清算を実行し、同一トランザクション内で借入を返済して利益だけを抜きます。ここで効くのが前述の防御です。単一プールではなく複数取引所の中央値を参照していれば、1 プールを歪めても集約値は動かない。TWAP を使っていれば、瞬間スパイクは時間平均に埋もれる。攻撃コストを跳ね上げることで、割に合わなくする発想です。

攻撃狙う層手口有効な防御
フラッシュローン操作データ源薄い板を瞬間的に動かし単一プール価格を歪める複数ソース中央値・TWAP・十分な流動性のソース選定
虚偽報告(ノード買収)オラクルノード一部ノードを買収し偽値を報告させる中央値集約・ノード多数化・報告者の分散と評判
鮮度攻撃(更新停止誘発)伝送・可用性混雑や妨害で更新を止め古値を利用させるタイムスタンプ検査・心拍・逸脱閾値・複数フィード
リプレイ/改竄伝送経路過去の正当な報告を再送、値を差し替える署名+ラウンドID/nonce・オンチェーン署名検証

伝送経路側の攻撃には暗号が効きます。各報告に署名とラウンド識別子を付ければ、経路上での改竄は署名検証で弾かれ、過去報告のリプレイはラウンドIDの単調増加で拒否できます。ここは「誰が送ったか」を保証する領域で、オンチェーンの署名検証がそのまま防御になります。一方、データ源の操作には暗号は無力です。正規のノードが正規に署名した「正しく取得された虚偽価格」は、暗号的にはすべて正当だからです。だからこそデータ源の防御は集約と多重化に依存します。

署名が正しくてもデータが正しいとは限らない

オラクル設計で最も誤解されるのがこの点です。「全ノードの署名が検証を通った」ことは「値が現実と一致する」ことを何も保証しません。署名は伝送の完全性(改竄されていない)を守るだけで、入力の真正性(現実と合っている)は守れない。ゆえに安全性は二段構えで作ります——伝送は暗号(署名・nonce)で、データ源は構造(多数決・複数ソース・TWAP・鮮度)で守る。片方だけでは不十分です。

検証可能なランダム性という近縁問題

価格だけでなく乱数もオラクルの守備範囲です。ブロックチェーンは決定性ゆえ真の乱数を内部生成できず、block 由来の値を乱数に使うとブロック提案者による操作(都合の悪い結果のブロックを破棄する等)に晒されます。

これを解くのが検証可能ランダム関数(VRF: Verifiable Random Function) です。オラクルが秘密鍵で乱数とその正当性の証明を生成し、オンチェーンで公開鍵により検証します。誰も——オラクル自身すら——結果を事前に予測・選択できず、かつ生成された値が規定の手続きに従うことを証明付きで確認できる。「チェーン外で作り、証明付きでオンチェーン検証する」という構図は価格フィードと同型で、証明技術の観点は /blockchain/zk-proofs-snark-stark/ と地続きです。

試験・面接での要点

オラクル問題=決定性ゆえチェーンは外界を観測できず、外部データの真偽は合意で検証できない。オラクルは信頼を消さず「提供者」へ移す。
・単一オラクルは単一障害点かつ操作対象。分散オラクルネットワークが独立ノードの報告を中央値集約し操作耐性を得る。集約はガス削減のためオフチェーン(OCR)が主流。
・価格フィードの防御は複数ソース中央値・TWAP・逸脱閾値/心拍・鮮度チェックフラッシュローン操作は薄い板の単一プール瞬間価格を突く典型。
署名は伝送の完全性、集約はデータの正しさを守る二段構え。署名検証を通っても値が正しいとは限らない。乱数はVRFで証明付きに。

まとめ

  • スマートコントラクトは決定性のため外界を観測できず、外部データはオラクルが署名付きでオンチェーンへ運ぶ。その真偽はチェーンの合意で検証できず、信頼は消えず提供者へ移る(オラクル問題)。
  • 単一オラクルは単一障害点かつ攻撃対象分散オラクルネットワークは独立ノードの報告を中央値で集約し、少数の虚偽・故障を多数決で吸収する。集約はガス削減のためオフチェーンで行い、結果と署名のみを1トランザクションで提出する。
  • 価格フィードは「最新値」より「操作しにくい値」を目指す。複数取引所の中央値、瞬間操作を平滑化する TWAP逸脱閾値/心拍による更新制御、そして鮮度チェックが定石。
  • 攻撃はデータ源(フラッシュローンで薄い板を歪める)と伝送経路(改竄・リプレイ・更新停止)に分かれる。伝送は署名・ラウンドIDで、データ源は集約と多重化で守る——署名が正しくても値が正しいとは限らない
  • 乱数も同型の問題で、block 由来値は提案者に操作される。VRF が証明付きの乱数を提供し、価格フィードと同じ「チェーン外生成+オンチェーン検証」の構図を取る。

ブロックチェーン Article

ブロックチェーンオラクルと価格フィードを実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

ブロックチェーン

比較で見る軸

難易度: advanced / カテゴリ: ブロックチェーン / タグ数: 6

導入後に効く点

単一提供者は単一障害点かつ操作対象。分散オラクルネットワークは複数ノードの報告を中央値などで集約し、少数の虚偽や故障を数の力で吸収して操作耐性を得る。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
advanced
カテゴリ
ブロックチェーン
タグ数
6

判断チェックリスト

  • 自社の用途が「ブロックチェーン / オラクル」に近いか確認する。
  • 強みである「ブロックチェーンは決定性を守るため外部世界を直接観測できない。外部データを署名付きでオンチェーンへ運ぶのがオラクルで、ここが信頼の最弱点になる(オラクル問題)。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

ブロックチェーンオラクル価格フィードDeFiスマートコントラクトブロックチェーンオラクル価格フィード