---
title: "オラクルとは?"
description: "オラクルはオフチェーンの情報をオンチェーンアプリケーションに伝達する"
---

## はじめに

スマートコントラクトは、特定のイベントや条件が満たされたときに自己実行するプログラムです。これらのイベントはブロックチェーン上で発生することもあれば、ブロックチェーン外で発生することもあります。例えば、オンチェーンのイベントでは、送信者がローンの担保として資金をスマートコントラクトに送り、それがトリガーとなってローン金額が送金される、といったケースが考えられます。オフチェーンのイベントでは、スマートコントラクトはこうしたイベントに関する正確なデータを取得する手段を必要とし、それによっていつ実行すべきかを判断します。オラクルは、スマートコントラクトに対するデータソースとして機能することで、オフチェーンの世界とオンチェーンのスマートコントラクトをつなぎます。

<ImageBlock
  src="https://media.alchemy.com/1704181326-what-is-an-oracle.jpeg"
  alt="オフチェーンデータをオンチェーンのスマートコントラクトに接続するoracleの図"
  width={564}
  height={313}
  caption="Source: https://www.leewayhertz.com/chainlink-solving-blockchain-oracle-problem/https://www.leewayhertz.com/chainlink-solving-blockchain-oracle-problem/"
  priority
/>

## 開発者によるオラクルの使い方

スマートコントラクトを使う利点は、仲介者となる第三者を必要としない点にあります。コードがスマートコントラクトの条件を決定し、コードが法となります。これらの条件は、トランザクションが実行される前に満たされるべき条件として、外部のイベントに依存することができます。例えば、米ドルの価値に基づいてトークンの交換を実行するスマートコントラクトを使うことができます。この場合、スマートコントラクトは、交換をいつ実行するかを知るために、外部のソースから米ドルの価値をオラクルに問い合わせることになります。

<ImageBlock
  src="https://media.alchemy.com/1704181364-blockchain-oracles.png"
  alt="外部データを取得するためにブロックチェーンoracleにクエリするスマートコントラクトの図"
  width={624}
  height={229}
  caption="Source: https://coin98insights.com/what-is-blockchain-oracle"
/>

分散型金融（DeFi）は、オラクルの最大のユースケースの一つです。価格オラクルはトークンや流動性の価値に関する情報を提供し、それがユーザーの財務ポジションの管理に利用されます。NFT（非代替性トークン）は、[選挙結果](https://nftartwork.co.uk/nft-artwork/crossroads/)のようなニュース上の外部イベントに関する情報をオラクルから取得し、その結果に基づいてNFTの見た目が動的に変化するようにすることができます。

また、オラクルを使って、タスクの完了や目標の達成に応じてトークンを報酬として与えることで、持続可能性や市民性に向けた良い行動を促すこともできます。例えば、ある都市の住民に対して、カーボンオフセットの対価としてトークンを提供することが考えられます。

## オラクルの種類

オラクルは、サーバーやデータベースのようなソフトウェアの場合もあれば、IoTデバイスやセンサーのようなハードウェアの場合もあります。オラクルは、複数のアプリケーションや、それに接続するブロックチェーンにデータを提供する外部サービスとして存在することもあります。

プロジェクトは、それぞれの特化したニーズに応じて内部向けのオラクルを構築することもできます。その一例が、分散型ベッティングプラットフォームである[Augur](https://augur.net/)です。Augurには、賭けの対象となるイベントの結果を提供するオラクルがあります。

[Augur](https://www.alchemy.com/dapps/augur)がAlchemyを利用して、分散型オラクルとピアツーピアプロトコルをスケールし、より良いユーザー体験を実現している方法については、[こちら](https://www.alchemy.com/case-studies/augur?a=4f1af711be)をご覧ください。

オラクルは双方向であり、現実世界からデータを取得するだけでなく、オンチェーンのイベントに関するデータを外部の世界に提供することもできます。トランザクションの完了に応じて解錠される[スマートロック](https://www.hackster.io/simone-romano/a-blockchain-powered-smart-lock-21fad9)は、オンチェーンのイベントデータがオフチェーンで必要とされる代表的な例です。

外部世界との通信に加えて、オラクルは異なるブロックチェーン間のクロスチェーン通信を可能にします。開発者はこれを利用して、あるチェーンから別のチェーンへのトランザクションやイベントに基づいて、資産をブリッジしたりアクションをトリガーしたりできます。また、オラクルは乱数生成のような計算処理をオフチェーンで行うことで、貴重な計算コストを節約することもできます。

## オラクル問題

オラクルの価値について議論される際には、たいてい「オラクル問題」が話題に上がります。ブロックチェーン上で構築することの特異性は、ノード間でブロックチェーンの状態についてコンセンサスに達する必要がある点にあります。つまり、各ノードは同じトランザクションとイベントを取り扱い、他のすべてのノードと同じ結果を得られなければなりません。

攻撃者がオラクルの取得するオフチェーンデータを改ざんする可能性があり、また、そのデータは時間とともに変化することもあります。

例えば、米ドルの価値は1日のうちにも頻繁に変動します。スマートコントラクトがこの値に基づいて実行される場合、別のノードが計算を行うまでに価格が変わってしまう可能性があります。これにより、期待される結果が実際の結果と一致しなくなり、ノード間のコンセンサスが崩れてしまいます。

オラクルが提供するデータが正確かどうかという潜在的な問題だけでなく、中央集権的なソースはハッキングされたり、ダウンタイムが発生したりする可能性もあります。こうした状況では、スマートコントラクトは破損したデータで動作するか、あるいはデータがまったくない状態で動作することになります。スマートコントラクトは変更不可能で自己実行されるため、これは関係者にとって取り返しのつかない損害につながる可能性があります。オラクルがスマートコントラクトに対して安全かつ信頼できるデータ提供者であるためには、これらの課題に対処する必要があります。

## オラクル問題の解決策

オラクル問題を解決する一般的な方法は、ブロックチェーン自体を利用することです。このアプローチは、Decentralized Oracle Network（DON、分散型オラクルネットワーク）と呼ばれます。

DONでは、ノードがトランザクションの台帳についてコンセンサスに達する代わりに、各ノードがオラクルとして機能します。各ノードは、それぞれ独立したオフチェーンのソースからデータを取得する役割を担います。各ノードから得られたデータは集約され、それをもとに真の値が決定されます。

これにより、データソースの稼働率の問題も解決されます。複数のデータソースが存在するため、一部が機能しなくてもスマートコントラクトは機能し続けることができるからです。DONが実際に動作している様子は[こちら](https://data.chain.link/ethereum/mainnet/crypto-usd/eth-usd)で確認できます。

<ImageBlock
  src="https://media.alchemy.com/1704181493-the-oracle-solution.png"
  alt="複数のオフチェーンソースからデータを集約する分散型oracleネットワークの図"
  width={1600}
  height={684}
  caption="出典：chain.link"
/>

‍

## オラクルサービス

開発者がオラクルを利用する最も一般的な方法は、サードパーティのサービスを通じたものです。この分野で最初にして最も人気のあるサービスが[Chainlink](https://chain.link/)です。Chainlinkを通じて、開発者やAPIプロバイダーは、自分のAPIをChainlinkネットワークに接続することで、参加ノードオペレーターになることができます。

Chainlinkは、これらのオラクルを運営するプロバイダーに対してオンチェーンの識別子を付与し、これを使ってオラクルの評判を管理し、報酬を与えることができます。[ERC677トークン](https://coinmarketcap.com/currencies/chainlink/)を使うことで、プロバイダーが適切にフォーマットされた正確なデータを提供し、また必要なオフチェーン計算を行うインセンティブが生まれます。

もう一つ人気が高まっているネットワークが[Band Protocol](https://bandprotocol.com/)です。このネットワークも、Chainlinkと同様に、信頼性が高く安全な外部データのソースを提供することを目指しています。同様に、良質なデータを提供するデータプロバイダーに報酬を与えるためのBANDトークンも存在します。大きな違いは、[Band Protocol](https://www.alchemy.com/dapps/band-protocol)がコスト削減のため、Ethereumではなく、Cosmos上で動作している点です。

<ImageBlock
  src="https://media.alchemy.com/1704181427-oracle-services.png"
  alt="外部データをスマートコントラクトに配信するoracleサービスネットワークの図"
  width={1600}
  height={501}
  caption="Source: https://public.bnbstatic.com/static/research/static/images/projects/band-protocol/oraclescript.png"
/>

## オラクルの使い方

オラクルからデータを取得する方法は2通りあります。1つは、Chainlinkが提供するような[フレームワーク](https://docs.chain.link/docs/reference-contracts/)を使ったAPIリクエストによる方法、もう1つは、プロバイダーによってすでに送信され、オンチェーンに存在しているデータを参照する方法です。この情報とアドレスを保持している[スマートコントラクト](https://docs.chain.link/docs/reference-contracts/)を参照することで、このデータを取得できます。この方法の一般的な利用例は、DeFiの分野で見られます。スマートコントラクトは定期的に更新される為替レートを保持しており、このデータは他のスマートコントラクトによってトークンスワップの実行に利用されます。

## 結論

スマートコントラクトが実世界で何らかの役に立つためには、世界で起きていることにアクセスできる必要があります。オラクルは、スマートコントラクトがオフチェーンのイベントに反応するために必要な、データへの窓口です。ブロックチェーンのような分散型の環境で、中央集権的なデータソースを使うことは理想的ではありません。DONは、中央集権化に伴うこうした問題の多くを解決し、セキュリティと安定性をもたらします。こうしたオラクルサービスが拡大し、より多くのプロバイダーを取り込んでいくにつれて、オラクルはブロックチェーンおよびスマートコントラクト技術の成長において大きな役割を果たすことになるでしょう。
