Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

オラクル

オラクル 1枚まとめ

オラクル問題

ブロックチェーンは閉じた系で、スマートコントラクトは外部の情報(価格、天気、選挙結果、他チェーンの状態など)を直接取得できない。外部の情報をチェーンに書き込む仕組みを オラクル(oracle) と呼ぶ。

問題は、チェーンが検証できるのは「オラクルがこの値を書き込んだ」という事実だけで、その値が現実と一致しているかは検証できない こと。

  • 情報源が1つなら、そこが単一障害点・改ざんの的になる

  • 情報の真偽を判定する手段がない

  • 更新の遅れ(リアルタイム性の欠如)

せっかくトラストレスなコントラクトを作っても、オラクルを信頼しなければならないなら、システム全体の信頼はオラクルの信頼性で決まってしまう。これを オラクル問題 と呼ぶ。

DeFiでは特に 価格オラクル が重要で、レンディングの清算判定やステーブルコインの担保評価、デリバティブの決済は、すべてオラクルの価格に依存している。

オラクルの方式

方式仕組み例
中央集権型単一の運営者が値を書き込む初期のプロトコル独自のフィード
分散型オラクルネットワーク多数の独立したノードが複数の情報源から値を集め、中央値などで集約してオンチェーンに書き込む。ノードはステークやレピュテーションで不正を抑止されるChainlink
プル型オフチェーンで署名された価格を、利用者が必要なときにトランザクションに添えて提出するPyth, Chainlink Data Streams
オンチェーンの価格(TWAP)DEXのプールの価格を時間加重平均したものを使うUniswap V3のTWAPオラクル
オプティミスティック型誰かが値を主張し、一定期間内に異議がなければ確定。異議があればトークン保有者の投票で決めるUMA(Polymarketの結果判定に使用)

Chainlinkの価格フィードでは、

  1. 複数のノードオペレーターが、それぞれ複数のデータ提供元(取引所やデータ会社)から価格を取得する

  2. ノード間で値を集約し、まとめて1つのトランザクションでオンチェーンの集約コントラクトに書き込む

  3. 価格が一定以上(例:0.5%)動いたとき、または一定時間(例:1時間)経過したときに更新する

利用者のコントラクトは latestRoundData() を呼んで最新の価格を読む。更新時刻も返されるので、古い価格を使わないようにチェックするのが望ましい。

オラクル操作攻撃

DEXのスポット価格をそのままオラクルとして使うと、フラッシュローンで一時的に価格を動かして 攻撃できる。

  1. フラッシュローンで大量の資金を借りる

  2. 流動性の低いDEXのプールで大量に買い、トークンの価格を吊り上げる

  3. そのDEXの価格をオラクルにしているレンディングプロトコルで、値上がりしたトークンを担保に、実際の価値以上の資金を借りる

  4. DEXで売り戻して価格を元に戻し、フラッシュローンを返済する

  5. 借りた資金はそのまま持ち逃げ(担保は無価値なので返済しない)

これらすべてが1つのトランザクションで完結する。2020年のbZx、2022年のMango Marketsなど、オラクル操作による被害は多い。

対策:

  • 1ブロック内のスポット価格ではなく、複数ブロックにわたる TWAP(時間加重平均価格) を使う。価格を長時間動かし続けるのはコストが高い

  • 複数の独立した情報源を集約した分散型オラクルを使う

  • 流動性の低いトークンを担保として受け入れない、または借入上限を低くする

スポット価格: 通常 99.4 → 操作後 298.2
TWAP(10ブロック): 通常 99.9 → 操作後 119.7

TWAPは1ブロックだけの操作には強いが、操作の影響を薄めるだけで消すわけではない。また、急激な市場変動への追随が遅れるため、清算が遅れるというトレードオフがある。

価格以外のオラクル

種類用途
VRF(検証可能な乱数)NFTのランダムな特性の決定、ゲーム、抽選
自動実行(Keeper)清算、定期的なリバランスなど、コントラクトの関数を条件に応じて呼び出す
Proof of Reserveステーブルコインやラップドトークンの裏付け資産の残高を確認する
クロスチェーン通信他のチェーンの状態やメッセージを中継する(→インターオペラビリティ)
イベントの結果予測市場や保険の支払い条件の判定(→予測市場)