寄稿:チャン・チーチェン 2020 年 11 月、ある人物が借りた資金の 1 回の取引で、15 秒以内に DeFi プロトコルから約 100 万ドルを持ち去りました。 彼はまずフラッシュローンで大量の ETH を借り入れ、その後、流動性が極めて低い資金プールで sETH を数秒のうちに集中買いすることで、価格を急激に押し上げました。 次に、彼はこれらの sETH を担保として bZx プロトコルに預け入れます。プロトコルが「見て」いるのは、先ほど人為的に引き上げられたその瞬間の価格であり、これらの sETH の価値が非常に高いと判断したうえで、ルールに従って実際の価値をはるかに上回る WBTC の融資を解放しました。 攻撃者は WBTC を手にするとすぐにフラッシュローンを返済し、大きな利ざやを抱えて悠々と去りました。 この一連の過程には、ハッキングも、コードの脆弱性も、権限の濫用もありませんでした。スマートコントラクトはルールに厳密に従って、すべてのステップを実行したのです。問題があるとすれば、ただそれだけでした: それ「見て」いる世界は、間違っている。 これこそが DeFi の最下層にある制約の 1 つです——オンチェーンのスマートコントラクトは、本質的に現実世界を見られないシステムなのです。 01 オンチェーンのスマートコントラクトは「盲人」だ スマートコントラクトは、閉じられた世界で生活しています。 それはオンチェーン上で起きるすべてのことを見ています——誰がどこにいくら送金したか、どのアドレスがどれだけのトークンを保有しているか、どの取引がいつブロックに取り込まれたか——これらの情報はすべて読み取ることができ、かつ絶対に正確です。 しかし、チェーン外の世界は、それがまったく見えません:ETH の今日の価格はいくらか?ビットコインは過去最高を更新したか?あるステーブルコインはペッグから外れていないか?ニューヨークの株式市場は今日は上がったのか、それとも下がったのか?契約は何も知りません。 DeFi のレンディングにおいて、これは致命的な矛盾です。 清算は担保資産の現在価格に依存します;しかし契約自身は価格が見えないので、誰かがそれに教えなければなりません。 このためにオラクルが存在します:オラクルはオンチェーン・スマートコントラクトの目であり、チェーン外の現実の情報をチェーン上に載る形で書き込み、契約が読み取り・利用できるようにします。ただし、その問題も同時に生じます: 誰が、その情報が本物だと保証できるのか? 02 オラクル:オンチェーン世界の使者 オラクルは本質的に、情報伝達のための基盤であり、現実世界のデータ(価格、金利、出来事の結果など)を、コントラクトが読み取り可能な形式でブロックチェーンに書き込むものです。 この概念は簡単に聞こえますが、工学的な課題は、ブロックチェーンの中核となる設計原則が「外部からの入力を信頼しない」ことにあります。すべてはオンチェーンで検証可能なデータが基準です。一方で、オラクルが持ち込むのはまさにチェーン外のデータであり、それはこの信頼の枠組みの境界の外側に天然に位置しています。 この問題を解決するために、市場では主に 2 つの方式が形成されました。 第 1 はオンチェーンの価格で、分散型取引所(DEX)内の取引価格を直接読み取ります。最も典型的なのは Uniswap の時間加重平均価格(TWAP)です。これは、ある特定の瞬間のスポット価格を取るのではなく、過去の一定期間における平均価格を取って、時間で短期的な価格変動を薄めます。 第 2 は分散型オラクルネットワークで、Chainlink が代表です。複数の独立したデータノードが、それぞれ異なる経路から価格を取得し、集計したうえで中央値をチェーン上に書き込みます。どのノードも単独で最終結果を決められません。 両方式にはそれぞれトレードオフがありますが、どちらも同じ問いに答えようとしています:どのようにしてオンチェーンのスマートコントラクトが、チェーン外から来た数値を信じるのか? 03 なぜリアルタイムの価格を直接使わないのか? 多くの人が初めてオラクルに触れると、直感的にこう思います:価格は市場から来るのなら、なぜ取引所のリアルタイム価格を直接読むのではないのか? 問題は:リアルタイム価格は、真の価格と同じではないことです。 流動性が十分で取引が活発な市場では、両者は概ね近いことが多いです。しかし流動性が弱く深度が足りないプールでは、大きな資金があれば、価格が極めて短い時間で人為的に押し上げられ、実際の市場水準よりはるかに高くなることがあります。 そしてスマートコントラクトは、その価格が自然に形成されたものなのか、それとも意図的に操作されたものなのかを判断できません。コントラクトはその数値を読み取り、そこからルールに従って実行するだけです——借り手がより多くの資金を借りられるようにします。価格が下落すると、担保の真の価値はそもそも融資を賄うのに足りず、プロトコルは不良債権に直面します。 これはまさに、記事の冒頭で述べた bZx プロトコルが攻撃に遭った出来事が成立した理由であり、かつリアルタイム価格を使う代償でもあります:オラクルが「短期間なら操作できる数値」を、現実そのものとして扱ってしまうからです。 04 Chainlink の解決策:価格を分散化する もしあるシステムが単一のデータソースにだけ依存するなら、そのデータソースが一度誤る、あるいは操作されれば、プロトコル全体が引きずられてしまいます。このリスクを下げる最も直接的な方法は、より強い「誰か」を信じることではなく、互いに独立した複数のノードに別々にレポートさせ、その中から比較的堅牢な結果を抽出することです。 Chainlink の解決策はまさにこの考え方を採用しています:複数の独立したデータノードがそれぞれ異なるデータソースから価格を取得し、各自が提出し、システムが中央値を最終結果として採用します。こうすれば、単一ノードが誤っても、あるいは攻撃者の影響を受けても、最終価格を左右するには足りません。一方で、攻撃者が同時に半数超のノードをコントロールしようとするには、経済的にほぼ不可能な作業となります。 この仕組みは、単一点の操作問題を効果的に緩和します。 しかし、それは新たな代償も伴います:更新に遅延が生じることです。 オンチェーン価格はリアルタイムで同期されるわけではありません。ノードがデータを収集し、合意を形成し、ブロックチェーンに書き込むまでには時間がかかります。この遅延は市場が通常の変動をしている間は大きな問題ではありません。しかし相場が激しく変動すると、オラクルの価格が真の価格の変化に追いつかない可能性があります。 これが、私たちがなぜ DeFi レンディングでは超過担保が必要なのかで述べた内容——DeFi レンディングのプロトコルには超過担保のバッファを設定する必要がある理由です。価格変動そのものへの備えであるだけでなく、オラクルがまだ更新する間にないあの時間帯でも、システムが清算を引き起こすのに十分な安全マージンを保てるようにするためでもあります。 05 オラクル攻撃:最も高価な信頼の危機 オラクルの問題は、Chainlink の登場によって完全に消えたわけではありません。 DeFi の歴史において、オラクル関連の脆弱性は、損失が最も大きかった攻撃カテゴリの 1 つです。2021 年から 2023 年の間に、確認可能なオラクル操作攻撃だけでも、累計損失額が数億ドルを超えています。 これらの損失には共通の特徴があります:攻撃者はコード内の脆弱性を見つける必要がありません。彼らがやるべきことは、オラクル価格と実際の市場価格の間の「隙間」を見つけ、その隙間を資金で押し広げて、コントラクトが歪んだ価格に従って自分に有利な操作を 1 回実行することです。これはコード脆弱性よりも防御が難しいリスクです——なぜなら、コードの中に「この価格が本物かどうか」を判断するルールを書けないからです。 オラクルの問題は、本質的にはあるコンポーネントの脆弱性ではなく、あるトレードオフの問題です: 操作に対抗するために、より多くのデータソースを使うなら、その分より高い遅延を受け入れる必要がある; リアルタイムにより近い価格を追い求めるなら、その分、短期間の操作リスクを負う必要がある。 このトレードオフには、完璧な解決策はありません。 そしてまさにそれゆえに、オラクルの存在は DeFi のより深い現実を明らかにします:オンチェーンのスマートコントラクトは、絶対的に透明で、絶対的に実行できますが、その前提として、依拠している入力情報が真実であることが常に必要です。いったん入力が歪められれば、どれほど完璧なコードであっても、より効率的に誤った判断と実行を行うだけになってしまいます。
オラクル:DeFiの目であり、またその弱点でもある
寄稿:チャン・チーチェン
2020 年 11 月、ある人物が借りた資金の 1 回の取引で、15 秒以内に DeFi プロトコルから約 100 万ドルを持ち去りました。
彼はまずフラッシュローンで大量の ETH を借り入れ、その後、流動性が極めて低い資金プールで sETH を数秒のうちに集中買いすることで、価格を急激に押し上げました。
次に、彼はこれらの sETH を担保として bZx プロトコルに預け入れます。プロトコルが「見て」いるのは、先ほど人為的に引き上げられたその瞬間の価格であり、これらの sETH の価値が非常に高いと判断したうえで、ルールに従って実際の価値をはるかに上回る WBTC の融資を解放しました。
攻撃者は WBTC を手にするとすぐにフラッシュローンを返済し、大きな利ざやを抱えて悠々と去りました。
この一連の過程には、ハッキングも、コードの脆弱性も、権限の濫用もありませんでした。スマートコントラクトはルールに厳密に従って、すべてのステップを実行したのです。問題があるとすれば、ただそれだけでした:
それ「見て」いる世界は、間違っている。
これこそが DeFi の最下層にある制約の 1 つです——オンチェーンのスマートコントラクトは、本質的に現実世界を見られないシステムなのです。
01 オンチェーンのスマートコントラクトは「盲人」だ
スマートコントラクトは、閉じられた世界で生活しています。
それはオンチェーン上で起きるすべてのことを見ています——誰がどこにいくら送金したか、どのアドレスがどれだけのトークンを保有しているか、どの取引がいつブロックに取り込まれたか——これらの情報はすべて読み取ることができ、かつ絶対に正確です。
しかし、チェーン外の世界は、それがまったく見えません:ETH の今日の価格はいくらか?ビットコインは過去最高を更新したか?あるステーブルコインはペッグから外れていないか?ニューヨークの株式市場は今日は上がったのか、それとも下がったのか?契約は何も知りません。
DeFi のレンディングにおいて、これは致命的な矛盾です。
清算は担保資産の現在価格に依存します;しかし契約自身は価格が見えないので、誰かがそれに教えなければなりません。
このためにオラクルが存在します:オラクルはオンチェーン・スマートコントラクトの目であり、チェーン外の現実の情報をチェーン上に載る形で書き込み、契約が読み取り・利用できるようにします。ただし、その問題も同時に生じます:
誰が、その情報が本物だと保証できるのか?
02 オラクル:オンチェーン世界の使者
オラクルは本質的に、情報伝達のための基盤であり、現実世界のデータ(価格、金利、出来事の結果など)を、コントラクトが読み取り可能な形式でブロックチェーンに書き込むものです。
この概念は簡単に聞こえますが、工学的な課題は、ブロックチェーンの中核となる設計原則が「外部からの入力を信頼しない」ことにあります。すべてはオンチェーンで検証可能なデータが基準です。一方で、オラクルが持ち込むのはまさにチェーン外のデータであり、それはこの信頼の枠組みの境界の外側に天然に位置しています。
この問題を解決するために、市場では主に 2 つの方式が形成されました。
第 1 はオンチェーンの価格で、分散型取引所(DEX)内の取引価格を直接読み取ります。最も典型的なのは Uniswap の時間加重平均価格(TWAP)です。これは、ある特定の瞬間のスポット価格を取るのではなく、過去の一定期間における平均価格を取って、時間で短期的な価格変動を薄めます。
第 2 は分散型オラクルネットワークで、Chainlink が代表です。複数の独立したデータノードが、それぞれ異なる経路から価格を取得し、集計したうえで中央値をチェーン上に書き込みます。どのノードも単独で最終結果を決められません。
両方式にはそれぞれトレードオフがありますが、どちらも同じ問いに答えようとしています:どのようにしてオンチェーンのスマートコントラクトが、チェーン外から来た数値を信じるのか?
03 なぜリアルタイムの価格を直接使わないのか?
多くの人が初めてオラクルに触れると、直感的にこう思います:価格は市場から来るのなら、なぜ取引所のリアルタイム価格を直接読むのではないのか?
問題は:リアルタイム価格は、真の価格と同じではないことです。
流動性が十分で取引が活発な市場では、両者は概ね近いことが多いです。しかし流動性が弱く深度が足りないプールでは、大きな資金があれば、価格が極めて短い時間で人為的に押し上げられ、実際の市場水準よりはるかに高くなることがあります。
そしてスマートコントラクトは、その価格が自然に形成されたものなのか、それとも意図的に操作されたものなのかを判断できません。コントラクトはその数値を読み取り、そこからルールに従って実行するだけです——借り手がより多くの資金を借りられるようにします。価格が下落すると、担保の真の価値はそもそも融資を賄うのに足りず、プロトコルは不良債権に直面します。
これはまさに、記事の冒頭で述べた bZx プロトコルが攻撃に遭った出来事が成立した理由であり、かつリアルタイム価格を使う代償でもあります:オラクルが「短期間なら操作できる数値」を、現実そのものとして扱ってしまうからです。
04 Chainlink の解決策:価格を分散化する
もしあるシステムが単一のデータソースにだけ依存するなら、そのデータソースが一度誤る、あるいは操作されれば、プロトコル全体が引きずられてしまいます。このリスクを下げる最も直接的な方法は、より強い「誰か」を信じることではなく、互いに独立した複数のノードに別々にレポートさせ、その中から比較的堅牢な結果を抽出することです。
Chainlink の解決策はまさにこの考え方を採用しています:複数の独立したデータノードがそれぞれ異なるデータソースから価格を取得し、各自が提出し、システムが中央値を最終結果として採用します。こうすれば、単一ノードが誤っても、あるいは攻撃者の影響を受けても、最終価格を左右するには足りません。一方で、攻撃者が同時に半数超のノードをコントロールしようとするには、経済的にほぼ不可能な作業となります。
この仕組みは、単一点の操作問題を効果的に緩和します。
しかし、それは新たな代償も伴います:更新に遅延が生じることです。
オンチェーン価格はリアルタイムで同期されるわけではありません。ノードがデータを収集し、合意を形成し、ブロックチェーンに書き込むまでには時間がかかります。この遅延は市場が通常の変動をしている間は大きな問題ではありません。しかし相場が激しく変動すると、オラクルの価格が真の価格の変化に追いつかない可能性があります。
これが、私たちがなぜ DeFi レンディングでは超過担保が必要なのかで述べた内容——DeFi レンディングのプロトコルには超過担保のバッファを設定する必要がある理由です。価格変動そのものへの備えであるだけでなく、オラクルがまだ更新する間にないあの時間帯でも、システムが清算を引き起こすのに十分な安全マージンを保てるようにするためでもあります。
05 オラクル攻撃:最も高価な信頼の危機
オラクルの問題は、Chainlink の登場によって完全に消えたわけではありません。
DeFi の歴史において、オラクル関連の脆弱性は、損失が最も大きかった攻撃カテゴリの 1 つです。2021 年から 2023 年の間に、確認可能なオラクル操作攻撃だけでも、累計損失額が数億ドルを超えています。
これらの損失には共通の特徴があります:攻撃者はコード内の脆弱性を見つける必要がありません。彼らがやるべきことは、オラクル価格と実際の市場価格の間の「隙間」を見つけ、その隙間を資金で押し広げて、コントラクトが歪んだ価格に従って自分に有利な操作を 1 回実行することです。これはコード脆弱性よりも防御が難しいリスクです——なぜなら、コードの中に「この価格が本物かどうか」を判断するルールを書けないからです。
オラクルの問題は、本質的にはあるコンポーネントの脆弱性ではなく、あるトレードオフの問題です:
操作に対抗するために、より多くのデータソースを使うなら、その分より高い遅延を受け入れる必要がある;
リアルタイムにより近い価格を追い求めるなら、その分、短期間の操作リスクを負う必要がある。
このトレードオフには、完璧な解決策はありません。
そしてまさにそれゆえに、オラクルの存在は DeFi のより深い現実を明らかにします:オンチェーンのスマートコントラクトは、絶対的に透明で、絶対的に実行できますが、その前提として、依拠している入力情報が真実であることが常に必要です。いったん入力が歪められれば、どれほど完璧なコードであっても、より効率的に誤った判断と実行を行うだけになってしまいます。