# オラクルマシン技術解析:Chainlinkを例にしてブロックチェーンエコシステムにおいて、オラクルマシンは重要なインフラストラクチャの役割を果たしており、オンチェーンのスマートコントラクトに外部情報を提供しています。スマートコントラクトとブロックチェーンの外部世界をつなぐ橋渡しとして、オラクルマシンの主な機能はスマートコントラクトにデータを提供することです。例えば、私たちがイーサリアムネットワーク上に特定の日の原油取引量データを取得する必要があるスマートコントラクトを作成したとします。スマートコントラクト自体はこのようなオフチェーンの現実世界のデータを直接取得することができないため、この場合はオラクルマシンを通じて実現する必要があります。この場合、スマートコントラクトは必要な日の原油取引量をイベントログに書き込みます。その後、オフチェーンでこのイベントログを監視し、購読するプロセスが開始されます。取引のリクエストがリスニングされたとき、そのプロセスはオンチェーントランザクションを提出し、コントラクトの関連メソッドを呼び出し、指定された日の原油取引量情報をスマートコントラクトにアップロードします。! チェーンリンク(オラクル解説シリーズのパート1)](https://img-cdn.gateio.im/social/moments-ced3348559da0aabbf1c67c4d84ddc88)## Chainlinkの概要ブロックチェーンのオラクルマシン分野では、Chainlinkが最大の市場シェアを占めています。Chainlinkは分散型のオラクルプロジェクトであり、その主な役割は安全で信頼性のある方法でブロックチェーンに現実世界のデータを提供することです。Chainlinkは基本的なオラクル原理に基づいて、LINKトークンを中心に経済的インセンティブを通じて良性循環のエコシステムを構築しています。ChainlinkのオラクルはLINKトークンの送金によってトリガーされ、LINKはイーサリアムネットワーク上のERC677契約です。LINK ERC677トークンに基づいて完了したオラクル機能はリクエスト/レスポンスモデルに属します。! オラクル解説シリーズのチェーンリンク(パート1)](https://img-cdn.gateio.im/social/moments-30dffd84ae22b9fa8f93929cd523ef990192837465674839201## ERC677トークンのtransferAndCallメカニズムChainlinkがオラクルマシンのフレームワークを設計する際に最も重要視したのは、ユーザーがサービスを提供するオラクルマシンにどのように料金を支払うかということです。標準的なERC20トークンでは、サービス提供後の支払いニーズを満たすことができないため、Chainlinkはオラクルマシンサービスのシナリオに適したERC677標準を提案しました。ERC677は、標準ERC20の基盤の上にtransferAndCallメソッドを追加しました。このメソッドは、支払いとサービスリクエストを一つにまとめ、オラクルマシンビジネスシーンのニーズを満たします。ユーザーがtransferAndCallで送金を行う際、ERC20の送金に加えて、受取先のアドレスがコントラクトアドレスであるかどうかを判断し、もしそうであれば、そのアドレスのonTokenTransferメソッドを呼び出します。注意すべきは、ユーザーがオラクルマシンサービスを要求する前に、そのオラクルマシンが信頼できるかどうかを確認する必要があるということです。なぜなら、オラクルマシンはサービスを提供する前に前払いの料金を請求する必要があるからです。! オラクル解説シリーズのチェーンリンクパート1])https://img-cdn.gateio.im/social/moments-36eedcde4ebee55bf1c0e6c5f02934df(## チェーン上オラクルマシンリクエスト処理オラクルマシンの消費者がtransferAndCallメソッドを使用して料金を支払い、サービスをリクエストする際、オラクルマシン契約内のonTokenTransferメソッドはまず一連の安全チェックを行います。これらのチェックには、転送がLINKトークンであることの確認、データの長さが制限を超えていないかの判断、関数セレクタが正しいかのチェックなどが含まれます。すべてのセキュリティチェックが通過した後、契約はdeleGatecallを通じてオラクルマシン契約のoracleRequestメソッドを呼び出します。このメソッドは、ユニークなrequestIdを生成し、有効期限を設定し、関連情報をcommitmentsマッピングに保存します。最後に、リクエストデータを含むOracleRequestイベントが発行され、CBOR(Concise Binary Object Representation)エンコーディング形式が使用されます。! チェーンリンク(オラクル解説シリーズのパート1)])https://img-cdn.gateio.im/social/moments-d05f88f78a86510920ca9cb9cb97fcd6(## オフチェーンノードの応答オフチェーンノードがOracleRequestイベントを検出すると、リクエストの具体的な情報を解析し、ネットワークAPIを介して必要なデータを取得します。その後、ノードはオラクルマシン契約のfulfillOracleRequestメソッドを呼び出し、データをオンチェーンに提出します。fulfillOracleRequestメソッドは、最初にコール者の権限を検証し、リクエストの有効性を確認するなど、一連のチェックを行います。チェックが通過すると、引き出し可能な金額が記録され、commitmentsマッピングからそのリクエストが削除され、リクエスターコントラクトのコールバック関数が呼び出されます。! オラクル解説シリーズのチェーンリンクパート1])https://img-cdn.gateio.im/social/moments-dae23b36c6a83626aa95ba58fa8dbee5(## 価格オラクルマシンの例Chainlinkが提供するTestnetConsumerコントラクトのrequestEthereumPriceメソッドを例に挙げると、このメソッドは指定されたAPIからETH/USD取引価格を取得する機能を実装しています。それはsendChainlinkRequestToメソッドを呼び出すことでリクエストを発信し、オラクルマシンコントラクトのonTokenTransferメソッドをトリガーします。オフチェーンノードは、リクエスト情報を取得した後、APIを呼び出して価格データを取得し、次にfulfillOracleRequestメソッドを通じてデータをオンチェーンに提出します。最終的に、データはコールバック関数を介して消費者コントラクトに返されます。開発者にとって、既存の通貨ペアの価格を使用する必要がある場合は、Chainlinkが提供するPrice Feed(すなわちAggregatorProxy)を直接使用できます。各取引ペアには個別のPrice Feedがあり、価格精度の取得、取引ペアの説明、最新の価格データなど、複数のクエリ方法を提供しています。ほとんどのアプリケーションシナリオでは、契約は最新の価格を読み取るだけで済むため、latestRoundDataメソッドを呼び出す必要があります。通常、USDを基準とした取引ペアの価格精度は8桁に統一されており、異なるトークンの精度処理の問題を簡素化しています。! オラクル解説シリーズのチェーンリンク(パート1)])https://img-cdn.gateio.im/social/moments-1994fff156354700fda0609f9e317726(
Chainlinkオラクルマシン技術解析:ブロックチェーンと現実世界をつなぐ橋梁
オラクルマシン技術解析:Chainlinkを例にして
ブロックチェーンエコシステムにおいて、オラクルマシンは重要なインフラストラクチャの役割を果たしており、オンチェーンのスマートコントラクトに外部情報を提供しています。スマートコントラクトとブロックチェーンの外部世界をつなぐ橋渡しとして、オラクルマシンの主な機能はスマートコントラクトにデータを提供することです。
例えば、私たちがイーサリアムネットワーク上に特定の日の原油取引量データを取得する必要があるスマートコントラクトを作成したとします。スマートコントラクト自体はこのようなオフチェーンの現実世界のデータを直接取得することができないため、この場合はオラクルマシンを通じて実現する必要があります。この場合、スマートコントラクトは必要な日の原油取引量をイベントログに書き込みます。その後、オフチェーンでこのイベントログを監視し、購読するプロセスが開始されます。取引のリクエストがリスニングされたとき、そのプロセスはオンチェーントランザクションを提出し、コントラクトの関連メソッドを呼び出し、指定された日の原油取引量情報をスマートコントラクトにアップロードします。
! チェーンリンク(オラクル解説シリーズのパート1)](https://img-cdn.gateio.im/webp-social/moments-ced3348559da0aabbf1c67c4d84ddc88.webp)
Chainlinkの概要
ブロックチェーンのオラクルマシン分野では、Chainlinkが最大の市場シェアを占めています。Chainlinkは分散型のオラクルプロジェクトであり、その主な役割は安全で信頼性のある方法でブロックチェーンに現実世界のデータを提供することです。Chainlinkは基本的なオラクル原理に基づいて、LINKトークンを中心に経済的インセンティブを通じて良性循環のエコシステムを構築しています。ChainlinkのオラクルはLINKトークンの送金によってトリガーされ、LINKはイーサリアムネットワーク上のERC677契約です。LINK ERC677トークンに基づいて完了したオラクル機能はリクエスト/レスポンスモデルに属します。
! オラクル解説シリーズのチェーンリンク(パート1)](https://img-cdn.gateio.im/webp-social/moments-30dffd84ae22b9fa8f93929cd523ef99.webp0192837465674839201
ERC677トークンのtransferAndCallメカニズム
Chainlinkがオラクルマシンのフレームワークを設計する際に最も重要視したのは、ユーザーがサービスを提供するオラクルマシンにどのように料金を支払うかということです。標準的なERC20トークンでは、サービス提供後の支払いニーズを満たすことができないため、Chainlinkはオラクルマシンサービスのシナリオに適したERC677標準を提案しました。
ERC677は、標準ERC20の基盤の上にtransferAndCallメソッドを追加しました。このメソッドは、支払いとサービスリクエストを一つにまとめ、オラクルマシンビジネスシーンのニーズを満たします。ユーザーがtransferAndCallで送金を行う際、ERC20の送金に加えて、受取先のアドレスがコントラクトアドレスであるかどうかを判断し、もしそうであれば、そのアドレスのonTokenTransferメソッドを呼び出します。
注意すべきは、ユーザーがオラクルマシンサービスを要求する前に、そのオラクルマシンが信頼できるかどうかを確認する必要があるということです。なぜなら、オラクルマシンはサービスを提供する前に前払いの料金を請求する必要があるからです。
! オラクル解説シリーズのチェーンリンクパート1])https://img-cdn.gateio.im/webp-social/moments-36eedcde4ebee55bf1c0e6c5f02934df.webp(
チェーン上オラクルマシンリクエスト処理
オラクルマシンの消費者がtransferAndCallメソッドを使用して料金を支払い、サービスをリクエストする際、オラクルマシン契約内のonTokenTransferメソッドはまず一連の安全チェックを行います。これらのチェックには、転送がLINKトークンであることの確認、データの長さが制限を超えていないかの判断、関数セレクタが正しいかのチェックなどが含まれます。
すべてのセキュリティチェックが通過した後、契約はdeleGatecallを通じてオラクルマシン契約のoracleRequestメソッドを呼び出します。このメソッドは、ユニークなrequestIdを生成し、有効期限を設定し、関連情報をcommitmentsマッピングに保存します。最後に、リクエストデータを含むOracleRequestイベントが発行され、CBOR(Concise Binary Object Representation)エンコーディング形式が使用されます。
! チェーンリンク(オラクル解説シリーズのパート1)])https://img-cdn.gateio.im/webp-social/moments-d05f88f78a86510920ca9cb9cb97fcd6.webp(
オフチェーンノードの応答
オフチェーンノードがOracleRequestイベントを検出すると、リクエストの具体的な情報を解析し、ネットワークAPIを介して必要なデータを取得します。その後、ノードはオラクルマシン契約のfulfillOracleRequestメソッドを呼び出し、データをオンチェーンに提出します。
fulfillOracleRequestメソッドは、最初にコール者の権限を検証し、リクエストの有効性を確認するなど、一連のチェックを行います。チェックが通過すると、引き出し可能な金額が記録され、commitmentsマッピングからそのリクエストが削除され、リクエスターコントラクトのコールバック関数が呼び出されます。
! オラクル解説シリーズのチェーンリンクパート1])https://img-cdn.gateio.im/webp-social/moments-dae23b36c6a83626aa95ba58fa8dbee5.webp(
価格オラクルマシンの例
Chainlinkが提供するTestnetConsumerコントラクトのrequestEthereumPriceメソッドを例に挙げると、このメソッドは指定されたAPIからETH/USD取引価格を取得する機能を実装しています。それはsendChainlinkRequestToメソッドを呼び出すことでリクエストを発信し、オラクルマシンコントラクトのonTokenTransferメソッドをトリガーします。
オフチェーンノードは、リクエスト情報を取得した後、APIを呼び出して価格データを取得し、次にfulfillOracleRequestメソッドを通じてデータをオンチェーンに提出します。最終的に、データはコールバック関数を介して消費者コントラクトに返されます。
開発者にとって、既存の通貨ペアの価格を使用する必要がある場合は、Chainlinkが提供するPrice Feed(すなわちAggregatorProxy)を直接使用できます。各取引ペアには個別のPrice Feedがあり、価格精度の取得、取引ペアの説明、最新の価格データなど、複数のクエリ方法を提供しています。
ほとんどのアプリケーションシナリオでは、契約は最新の価格を読み取るだけで済むため、latestRoundDataメソッドを呼び出す必要があります。通常、USDを基準とした取引ペアの価格精度は8桁に統一されており、異なるトークンの精度処理の問題を簡素化しています。
! オラクル解説シリーズのチェーンリンク(パート1)])https://img-cdn.gateio.im/webp-social/moments-1994fff156354700fda0609f9e317726.webp(