ChainlinkのExternal Adapterについての解説
本記事はChainlinkオフィシャルブログに公開された“Chainlink External Adapters Explained”の和訳です。
Chainlink公式より許可をいただいた上で記事を翻訳・公開しています。
ブロックチェーン技術に関してのオラクルの一般的な定義は、インターネットからデータを取得し、スマートコントラクトに供給するというものです。
Chainlinkは分散化された方法でそれを行う機能を提供していますが、External Adapterを利用してアウトプットを生成することで、さらに強力な機能を追加しています。アウトプットはChainlinkノード内の他のExternal Adapterに渡すことができ、Chainlinkは企業のネットワーク内に存在するプライベートリソースやブロックチェーンを利用することもできます。この記事では、この架空の会社を特定の名前を付けずに、「そのような会社」と呼ぶことにします。
この図の簡略化されたワークフローは次のとおりです。
A) コントラクトのためにChainlinkノードはジョブとして選択されます。
B) ノードは結果をスマートコントラクトに返却します。
この記事の残りの部分では、主に矢印で示されたプロセスに焦点を当てていきますが、説明が必要な場合はワークフローの中のエンティティも含めて説明していきます。
上述したワークフローの視点をノード自体の視点に変えてみると、プロセスが少し複雑になっていることがわかりますが、コンセプトは変わりません。
それぞれのプロセスが何をしているかを説明すると、
A) Chainlinkノードはアサインのために選択されます。
B) ノードはExternal Adapterに格納されている自身のクレデンシャル情報を利用します。
C) データがノードに返却されます。
D) 結果がブロックチェーン上のスマートコントラクトに提供されます。
このようにデータ取得のプロセスを考えることは、ノード自体のそれとは違った視点を与えてくれます。私のノードアーキテクチャのビデオを見ると、ノードの一部がChainlinkコアソフトウェアから切り離されていることがわかると思います。特にこの例では、External Adapterの話をしています。
上図のプロセスBは、そのデータソースに必要なクレデンシャル情報を管理するために、External Adapterを利用しなければなりませんでした。ノードは、データを取得するためにノードオペレータのクレデンシャル情報を必要とするリソースごとにExternal Adapterを必要とします。ノードごとのAdapterの数についての制限は、一度に多数の要求を処理できるハードウェア能力にのみ基づきます。
External Adapterの機能をさらに掘り下げて、Runという概念を紹介します。Runとは、Adapterの結果を別のExternal Adapterに送信して、さらなる処理を行うための方法で、Run resultと呼ばれます。External Adapterは設計上サービス指向であり、ChainLinkコアソフトウェアから分離されているため、必要に応じて何度でも実行を続けることができます。
Run resultのデータを別のExternal Adapterに送信するための基本的なワークフローは以下の通りです。
A) ノードは外部アダプタに保存されたクレデンシャル情報を使用して、データプロバイダに接続します。
B) ソースからデータを取得し、Run resultを作成します。
C) 別のExternal Adapterが結果のデータを取得して処理しますが、実際にはこれを数回繰り返すことができます(Adapterのチェインニング)。
D) その処理結果をノードソフトウェアに返却します。
E) ブロックチェーン上のスマートコントラクトに最終結果を返却します。
最後に、AdapterとRunについて学んだことをすべて持ち込んで、内部プロセスのための実際のユースケースを提供する図です。
このタイプの割り当てのワークフローは
A) ユーザーがスマートコントラクトを作成します。
B) ノードを選択する際には、手動選択時にノードが含まれていることを確認します。
C) 選択されたノードが割り当てをピックアップします。
D) ノードは保存されたクレデンシャル情報を使用して外部リソースに接続します。
E) 取得したデータはノードに返却されます。
F) 結果のデータを別のExternal Adapterに渡し、そのAdapterには独自のクレデンシャル情報が保存されています。
G) プロセスEで返されたデータを使用して、任意の数のプライベートブロックチェーンへのロギングを含む内部プロセスやオフチェーン決済トランザクションなどが発生する可能性があります。
H) スナップショットの結果はすべてノードに返されます。
I) 最終的な結果はパブリックブロックチェーン上のスマートコントラクトに返却されます。
この図では、これまでの例と異なる点がいくつかあります。スマートコントラクト作成者は、ノードをIDでホワイトリスト化することで、どのノードを割り当てに使用するかを指定することができます。
Gというラベルの付いたエンティティを具体的に見てみましょう。ここでデータを取得できるのは、架空の会社のノードで実行されている別のExternal Adapterが”Run result”データを内部APIに渡すことができたからです。External AdapterはChainlinkノードとは別物なので、その機能は無限大であることを覚えておいてください。スマートコントラクト作成者に受け入れ可能なデータを返し、それがAdapterのスキーマに適合している限り、Chainlinkネットワークを利用することができます。
このシナリオでは、ノードの API 呼び出し (プロセス F) は、External Adapterから供給されたクレデンシャル情報を使用して、クローズドなネットワーク内で行われる内部アクションのトリガーとなります。そのAPIコールで何をするかのロジック(ビジネスとプログラミングの両方)はすべて会社の管理下にあります。これはまた、スマートコントラクトのブロックチェーンの速度が内部プロセスの制限要因にならないことを意味します。その呼び出しが行われると、エンティティGから提供されたデータとともに、ブロックチェーン上に存在するスマートコントラクトに答えを返すだけです。
このシナリオではセキュリティに関する懸念事項がいくつかあるため、それについて議論してみましょう。まず、企業のプライベートブロックチェーンを変更するようなノードが現れて、このAPIを呼び出すことができるかどうかを疑問に思うかもしれません。答えはノーです。クレデンシャル情報はExternal Adapterに保存されるため、その情報は公開されていません。また、External Adapterがオープンソースである必要もありません。誰でも独自のExternal Adapterを開発し、それを自分のものにすることができ、このシナリオのようなセキュアなAPIの場合は、それが正当な理由となります。
そうなると、会社が運営しているノードがアサイン対象に選ばれているかどうかを確認することも気になってきます。これは、Chainlinkのスマートコントラクトを設定しながら手動でノードをマッチングし、ノードのIDを指定することで実現できます。
以上であなたがChainlink をオラクルサービスとして使用する際に、External Adapterの追加機能についての一部を理解していただけたと思います。ご質問があれば、以下にコメントを残すか、Chainlink Slack(#Node_Informationチャンネル)、またはChainlink Gitterにご連絡ください。
Chainlink日本語リソース
- Telegram: https://t.me/chainlinkJAPAN
- Twitter: https://twitter.com/chainlinkjapan