(57)【要約】【課題】ブロックチェーン・ネットワークにおいて非決定論的な外部データを用いるスマートコントラクトを決定論的に実行可能にする。【解決手段】第１のノード１０１は、メモリプールに蓄積された１又は複数のトランザクションから新たなブロックを生成する（Ｓ２０１）。第１のノード１０１は、スマートコントラクトを呼び出すトランザクションについて、そこで用いられる非決定論的な外部データを外部システムに照会し、取得データをブロック内に記憶する（Ｓ２０２）。生成されたブロックは、合意形成に参加する複数のノードにプロポーザルとして送信されて（Ｓ２０３）、各ノードにおける検証を受ける（Ｓ２０４）。ここで、検証はトランザクションについての検証に加えて、外部データについての検証も行う。検証プロセスにおいて所定の条件が満たされることにより、各ノードは、各ノードのブロックチェーンに当該ブロックを追加する（Ｓ２０５）。【選択図】図２
2019103112.tif 000002
【特許請求の範囲】
【請求項１】
ブロックチェーン・ネットワークにおいて非決定論的な外部データを用いるスマートコントラクトを実行可能にするための方法であって、
前記ブロックチェーン・ネットワークを構成するノードが、スマートコントラクトを呼び出すトランザクションを含むブロックを受け取るステップと、
前記ノードが、前記ブロックの検証を行うステップと、
前記ノードが、前記ブロックの採択について合意が形成された後に、前記ブロックを前記ノードのブロックチェーンに追加するステップと
を含み、
前記ブロックは、前記外部データの値を含み、
前記外部データは、参照先が各ノードによりアクセス先を解釈可能な形式で表され、
前記検証は、前記外部データの前記値の検証を含むことを特徴とする方法。
【請求項２】
前記スマートコントラクトは、実行時に前記外部データを用いる条件が満たされる場合に記述された処理を実行するコードであることを特徴とする請求項１に記載の方法。
【請求項３】
前記外部データの前記値は、前記ブロックチェーン・ネットワークの外部システムに照会して取得されることを特徴とする請求項１又は２に記載の方法。
【請求項４】
前記ブロックは、１又は複数のトランザクションと、前記１又は複数のトランザクションにおいて用いられる１又は複数の外部データの名称の値との対応づけとを有することを特徴とする請求項１から３のいずれかに記載の方法。
【請求項５】
前記検証は、各ノードにあらかじめ記憶された検証規則に基づいて行われることを特徴とする請求項１から４のいずれかに記載の方法。
【請求項６】
コンピュータに、ブロックチェーン・ネットワークにおいて非決定論的な外部データを用いるスマートコントラクトを実行可能にするための方法を実行させるためのプログラムであって、前記方法は、
前記ブロックチェーン・ネットワークを構成するノードが、スマートコントラクトを呼び出すトランザクションを含むブロックを受け取るステップと、
前記ノードが、前記ブロックの検証を行うステップと、
前記ノードが、前記ブロックの採択について合意が形成された後に、前記ブロックを前記ノードのブロックチェーンに追加するステップと
を含み、
前記ブロックは、前記外部データの値を含み、
前記外部データは、参照先が各ノードによりアクセス先を解釈可能な形式で表され、
前記検証は、前記外部データの前記値の検証を含むことを特徴とするプログラム。
【請求項７】
非決定論的な外部データを用いるスマートコントラクトを実行可能なブロックチェーン・ネットワークを構成するためのノードであって、
スマートコントラクトを呼び出すトランザクションを含むブロックを受け取って、前記ブロックの検証を行い、
前記ブロックの採択について合意が形成された後に、前記ブロックを前記ノードのブロックチェーンに追加し、
前記ブロックは、前記外部データの値を含み、
前記外部データは、参照先が各ノードによりアクセス先を解釈可能な形式で表され、
前記検証は、前記外部データの前記値の検証を含むことを特徴とするノード。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ブロックチェーン・ネットワークにおいてスマートコントラクトを実行可能にするための方法及び当該ネットワークを構成するためのノードに関し、より詳細には、ブロックチェーン・ネットワークにおいて非決定論的な外部データを用いるスマートコントラクトを決定論的に実行可能にするための方法及び当該ネットワークを構成するためのノードに関する。
【背景技術】
【０００２】
ブロックチェーン・ネットワーク上で契約をプログラム化又はコード化して契約対象の取引を自動的に実行可能とする「スマートコントラクト」が注目されている。たとえば、ブロックチェーン・ネットワークの各ノードは、メモリプールにトランザクションを蓄積し、プロポーザーとなるノードが、蓄積されている１又は複数のトランザクションからブロックを生成して、当該ネットワークにおいて合意形成の提案を行う。ブロックチェーンの設計によっては、トランザクション内に所望の契約内容を記述することができ、そのようなトランザクションを含むブロックの採択についての合意形成がなされた場合、当該ブロックが、各ノードが有するブロックチェーンに追加されて、当該スマートコントラクトが適宜呼び出されると記述された内容が自動的に実行可能となる。
【０００３】
たとえば、仮想事例として、各ノードが、ある企業の株主とその保有株数を株主名簿として有しているとする。そして、「株主Ｓから株主Ｂに株主Ｓの保有株式の半数を譲渡する」という取引が契約内容であるとする。各ノードに、ブロックの高さに応じて、売主となる株主Ｓと買主となる株主Ｂとを一意に選出するルールを与えておくと、この内容を呼び出すトランザクションが実行された際、当該ルールに従って株主Ｓと株主Ｂが自動的に選ばれて、譲渡が行われることになる。実行後、各ノードは、保有株数の変化に応じて株主名簿を更新する。
【０００４】
ここでは、特殊な事例を挙げたが、このように、契約内容に含まれる変数を一意に定めることが可能であると、ブロックチェーン・ネットワークは、各ノードが有するブロックチェーンが同一であるとともに、各ノードの状態、上述の例では株主名簿についても同一に維持することができる。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述の仮想事例で特殊な事例を挙げたことには理由がある。各ノードにおける状態が同一に維持されなければ、ネットワーク全体としての信頼性はないところ、各ノードの状態の同一性を維持するために、記述可能な契約内容に制約が課されているのである。
【０００６】
たとえば、「株価が1000円を超えたら、株主Ｓから株主Ｂに株主Ｓの保有株数の半数を譲渡する」という取引が契約内容であるとすると、この取引の実行時に各ノードは株価の値を参照可能でなければならない。株価の値は、ブロックチェーン・ネットワーク内で参照可能なものではなく、証券取引所等の外部機関のシステムに照会しなければならない。
そして、各ノードが照会を行う時刻は厳密に一致せず、したがって、照会結果として得られる株価の値も一致しない。よって、あるノードでは株価が1000円を超えていると判定される一方、別のノードでは超えていないと判定される状況が生じ、各ノードの状態は、不整合なものとなる。
【０００７】
つまり、ノードによって異なり得る非決定論的（ｎｏｎ−ｄｅｔｅｒｍｉｎｉｓｔｉｃ）な外部データを用いるスマートコントラクトは、現状の仕組みでは、実現できないという制約がある。スマートコントラクトが今後大きく普及するためには、この制約を解消し、さまざまな外部データを利用可能とすることが欠かせない。
【０００８】
本発明は、このような問題点に鑑みてなされたものであり、その目的は、ブロックチェーン・ネットワークにおいて非決定論的な外部データを用いるスマートコントラクトを決定論的に実行可能にするための方法及びそのためのプログラム並びに当該ネットワークを構成するためのノードを提供することにある。
【０００９】
ここで「決定論的」とは、いずれのノードにおいても同一の結果が得られる又はそのように評価可能であることを意味し、「非決定論的」とは、必ずしもそうではないことを意味する。
【００１０】
また、「スマートコントラクト」という用語は多義的であるが、本明細書では、定められた条件が満たされた場合に記述された処理を実行するコードという意味で用いる。
【課題を解決するための手段】
【００１１】
このような目的を達成するために、本発明の第１の態様は、ブロックチェーン・ネットワークにおいて非決定論的な外部データを用いるスマートコントラクトを実行可能にするための方法であって、前記ブロックチェーン・ネットワークを構成するノードが、スマートコントラクトを呼び出すトランザクションを含むブロックを受け取るステップと、前記ノードが、前記ブロックの検証を行うステップと、前記ノードが、前記ブロックの採択について合意が形成された後に、前記ブロックを前記ノードのブロックチェーンに追加するステップとを含み、前記ブロックは、前記外部データの値を含み、前記検証は、前記外部データの前記値の検証を含むことを特徴とする。
【００１２】
また、本発明の第２の態様は、第１の態様において、前記スマートコントラクトは、実行時に前記外部データを用いる条件が満たされる場合に記述された処理を実行するコードであることを特徴とする。
【００１３】
また、本発明の第３の態様は、第１又は第２の態様において、前記外部データの前記値は、前記ブロックチェーン・ネットワークの外部システムに照会して取得されることを特徴とする。
【００１４】
また、本発明の第４の態様は、第１から第３のいずれかの態様において、前記外部データは、参照先が各ノードによりアクセス先を解釈可能な形式で表されることを特徴とする。
【００１５】
また、本発明の第５の態様は、第１から第４のいずれかの態様において、前記ブロックは、１又は複数のトランザクションと、前記１又は複数のトランザクションにおいて用いられる１又は複数の外部データの名称の値との対応づけとを有することを特徴とする。
【００１６】
また、本発明の第６の態様は、第１から第５のいずれかの態様において、前記検証は、各ノードにあらかじめ記憶された検証規則に基づいて行われることを特徴とする。
【００１７】
また、本発明の第７の態様は、第１から第５のいずれかの態様において、前記検証は、前記スマートコントラクトにて用いられる外部データの引数として定められた検証規則に基づいて行われることを特徴とする。
【００１８】
また、本発明の第８の態様は、第６又は第７の態様において、前記検証規則は、前記外部データの前記値が前記ノードが取得する値と所定の範囲内にある場合に有効と判定することを特徴とする。
【００１９】
また、本発明の第９の態様は、コンピュータに、ブロックチェーン・ネットワークにおいて非決定論的な外部データを用いるスマートコントラクトを実行可能にするための方法を実行させるためのプログラムであって、前記方法は、前記ブロックチェーン・ネットワークを構成するノードが、スマートコントラクトを呼び出すトランザクションを含むブロックを受け取るステップと、前記ノードが、前記ブロックの検証を行うステップと、前記ノードが、前記ブロックの採択について合意が形成された後に、前記ブロックを前記ノードのブロックチェーンに追加するステップとを含み、前記ブロックは、前記外部データの値を含み、前記検証は、前記外部データの前記値の検証を含むことを特徴とする。
【００２０】
また、本発明の第１０の態様は、非決定論的な外部データを用いるスマートコントラクトを実行可能なブロックチェーン・ネットワークを構成するためのノードであって、スマートコントラクトを呼び出すトランザクションを含むブロックを受け取って、前記ブロックの検証を行い、前記ブロックの採択について合意が形成された後に、前記ブロックを前記ノードのブロックチェーンに追加し、前記ブロックは、前記外部データの値を含み、前記検証は、前記外部データの前記値の検証を含むことを特徴とする。
【発明の効果】
【００２１】
本発明の一態様によれば、非決定論的な外部データを用いるスマートコントラクトを呼び出すトランザクションを含むブロックの検証時に、外部データの値の検証を行っておくことによって、当該スマートコントラクトの自動実行時に必要となるパラメータが非決定論的となることを回避し、さまざまな外部データを利用可能にすることができる。
【図面の簡単な説明】
【００２２】
【図１】本発明の一実施形態にかかるブロックチェーン・ネットワークを示す図である。
【図２】本発明の一実施形態にかかるブロックチェーン・ネットワークにおけるプロポーザー・ノードの動作を示す流れ図である。
【図３】本発明の一実施形態にかかるブロックのデータ構造を概略的に示す図である。
【発明を実施するための形態】
【００２３】
以下、本発明の実施形態を詳細に説明する。
【００２４】
図１に、本発明の第１の実施形態にかかるブロックチェーン・ネットワークを示す。ネットワーク１００は、第１のノード１０１と、第２のノード１０２と、第３のノード１０３と、第４のノード１０４とを備える。これらのノードは、それぞれブロックチェーンを有し、新たなブロックの採択にかかる合意形成に参加する。図１では、４個の例を示しているが、これはあくまで例示である。また、合意形成に参加しないノードがネットワーク１００に含まれることもある。以下では、第１のノード１０１が合意形成のプロポーザーである場合について説明する。
【００２５】
第１のノード１０１は、通信インターフェースなどの通信部１０１Ａと、プロセッサ、ＣＰＵ等の処理部１０１Ｂと、メモリ、ハードディスク等の記憶装置又は記憶媒体を含む記憶部１０１Ｃとを備え、各処理を行うためのプログラムを実行することによって構成することができ、１又は複数の装置ないしサーバを含むことがあり、また当該プログラムは、１又は複数のプログラムを含むことがあり、また、コンピュータ読み取り可能な記憶媒体に記録して非一過性のプログラムプロダクトとすることができる。
【００２６】
第１のノード１０１は、記憶部１０１Ｃ又は第１のノード１０１からアクセス可能な記憶装置又は記憶媒体をメモリプールとして蓄積した１又は複数のトランザクションから新たなブロックを生成する（Ｓ２０１）。これらのトランザクションのうちの少なくとも１つは、スマートコントラクトを呼び出すものである。スマートコントラクトのトランザクションにおける呼び出しは、当該トランザクション内にスマートコントラクト自体を記述しておくことを含んでもよい。
【００２７】
第１のノード１０１は、スマートコントラクトを呼び出すトランザクションについて、当該スマートコントラクトが用いる非決定論的な外部データを外部システムに照会する。たとえば、当該スマートコントラクトが「株価が1000円を超えたら、株主Ｓから株主Ｂに株主Ｓの保有株数の半数を譲渡する」というコードである場合、株価データを証券取引所システム１１０に照会する。
【００２８】
たとえば、株価をこれが外部データであることを所定の形式で表し、ブロックの生成時に、又はその前後に、第１のノード１０１が当該所定の形式を解釈して、指定された取得先から株価データを取得するようにすることができる。一例として、
Ext (<URL>, <名称>)
のような関数の形式で外部データを表現することができる。「Ext」によって外部（ｅｘｔｅｒｎａｌ）であることを示し、指定されたＵＲＬがコンピュータ・ネットワーク上の参照先を示す。名称は、上述の形式のほか、たとえば株価（ｓｈａｒｅ  ｐｒｉｃｅ）の場合には
Ext_shr (<URL>)
のように表すこともできる。
【００２９】
参照先は、必ずしも同一である必要はなく、各ノードがアクセス先を解釈可能な形式で表すこともできる。たとえば、株価コードを参照先とし、各ノードにおいて、当該株価コードの株価を与える異なる情報源ないしアクセス先より取得してもよい。
【００３０】
取得されたデータは、生成されるブロックに、１又は複数のトランザクションに加えて含まれる（Ｓ２０２）。外部データが１つである場合には、当該外部データの名称を定めることは必ずしも必要ではないが、複数である可能性がある場合には、それぞれの外部データに名称を与えて、名称に値を関連づけた外部データリストとして、ブロックに含ませることができる。ここで、外部データの値はリスト形式に限られず、名称と値との対応づけが保持されていればよい。
【００３１】
図３に、本実施形態にかかるブロックのデータ構造の一例を示す。ブロック３００は、ヘッダ３１０と、ボディ３２０と、追加データ３３０と、エビデンス３４０とを有する。必ずしもこのように区分されることは必要ではないが、ボディ３２０には、１又は複数のトランザクション（ｔｘ）が含まれ、追加データ３３０には、これらのトランザクションにおいて用いられる１又は複数の外部データの名称又はキー（ｋ）と値（ｖ）との対応づけが含まれる。
【００３２】
第１のサーバ１０１は、生成したブロックを合意形成に参加する複数のノード（自ノードを含んでもよい。）にプロポーザルとして送信する（Ｓ２０３）。当該ブロックを受信した各ノードでは、あらかじめ定められた検証規則（ｖａｌｉｄａｔｉｏｎ  ｒｕｌｅ）に基づいて、当該ブロックの検証を行い（Ｓ２０４）、所定の条件が満たされることにより、当該ブロックの採択についての合意がネットワーク１００において形成される。
【００３３】
ここで、本実施形態において、検証規則はトランザクションについての検証に加えて、外部データについての検証も行う。たとえば、当該ブロックを受信した第２のノード１０２を例に考えると、第２のノード１０２は、証券取引所システム１１０に株価を照会して株価データを取得し、当該ブロックに含まれる株価の値と比較して、その差が所定の範囲内であれば有効（ｖａｌｉｄ）であると判定することができる。両者の差が±５％であれば真を返し、そうでなければ偽を返すという規則が一例である。外部データの検証規則は、各ノードにあらかじめ記憶しておくことができ、また、参照先、名称のように外部データ関数の引数として持たせてもよく、外部データの定義に含めてもよい。
【００３４】
ネットワーク１００において合意形成がなされた後は、各ノードは、各ノードのブロックチェーンに当該ブロックを追加し（Ｓ２０５）、記述された内容が実行される。
【００３５】
このように、非決定論的な外部データを用いるスマートコントラクトを呼び出すトランザクションを含むブロックの合意形成の際に、外部データの検証を行っておくことで、当該スマートコントラクトの自動実行時に必要となるパラメータが非決定論的となることを回避し、各ノードの状態変化を整合させることができる。
【００３６】
非決定論的な外部データとしては、外部データベース乃至外部システムのクエリ結果が挙げられる。
【００３７】
代替的に、外部データについては、ブロックチェーン・ネットワーク１００から取得可能なデータとしてもよく、時刻、乱数等が挙げられる。これらのデータは、たとえば、各ノードが自ノードから取得することがある。
【００３８】
上述の説明では、スマートコントラクト又はそれが呼び出されるトランザクション内で外部データ関数の定義を行うことを考えているが、外部データ関数を定義したトランザクションを作成し、それを含むブロックについて事前に合意しておけば、当該ブロックの後のブロックにおいて当該外部データ関数を参照してスマートコントラクト内で用いることができる。
【００３９】
なお、「××のみに基づいて」、「××のみに応じて」、「××のみの場合」というように「のみ」との記載がなければ、本明細書においては、付加的な情報も考慮し得ることが想定されていることに留意されたい。
【００４０】
また、念のため、なんらかの方法、プログラム、端末、装置、サーバ又はシステム（以下「方法等」）において、本明細書で記述された動作と異なる動作を行う側面があるとしても、本発明の各態様は、本明細書で記述された動作のいずれかと同一の動作を対象とするものであり、本明細書で記述された動作と異なる動作が存在することは、当該方法等を本発明の各態様の範囲外とするものではないことを付言する。
【符号の説明】
【００４１】
１００  ブロックチェーン・ネットワーク
１０１  第１のノード
１０１Ａ  通信部
１０１Ｂ  処理部
１０１Ｃ  記憶部
１０２  第２のノード
１０３  第３のノード
１０４  第４のノード
１１０  外部システム
３００  ブロック
３１０  ヘッダ
３２０  ボディ
３３０  追加データ
３４０  エビデンス
【図１】
2019103112.tif 000003
【図２】
2019103112.tif 000004
【図３】
2019103112.tif 000005
【手続補正書】
【提出日】平成30年7月19日(2018.7.19)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ブロックチェーン・ネットワークにおいて非決定論的な外部データを用いるスマートコントラクトを実行可能にするための方法であって、
前記ブロックチェーン・ネットワークを構成するノードが、スマートコントラクトを呼び出すトランザクションを含むブロックを受け取るステップと、
前記ノードが、前記ブロックの検証を行うステップと、
前記ノードが、前記ブロックの採択について合意が形成された後に、前記ブロックを前記ノードのブロックチェーンに追加するステップと
を含み、
前記ブロックは、前記外部データの値を含み、
前記外部データは、参照先が各ノードによりアクセス先を解釈可能な形式で表され、
前記検証は、前記ブロックに含まれる前記外部データの前記値を、前記ノードが前記アクセス先より取得する値と比較して行うことを含むことを特徴とする方法。
【請求項２】
前記ブロックに含まれる前記外部データの前記値は、前記ブロックチェーン・ネットワークの外部システムに照会して取得された値であることを特徴とする請求項１に記載の方法。
【請求項３】
前記ブロックは、
１又は複数のトランザクションと、
前記１又は複数のトランザクションにおいて用いられる１又は複数の外部データの名称とその値との対応づけと
を有するデータ構造であることを特徴とする請求項１又は２に記載の方法。
【請求項４】
前記検証は、前記スマートコントラクトにて用いられる外部データの引数として定められた検証規則に基づいて行われることを特徴とする請求項１から３のいずれかに記載の方法。
【請求項５】
コンピュータに、ブロックチェーン・ネットワークにおいて非決定論的な外部データを
用いるスマートコントラクトを実行可能にするための方法を実行させるためのプログラム
であって、前記方法は、
前記ブロックチェーン・ネットワークを構成するノードが、スマートコントラクトを呼
び出すトランザクションを含むブロックを受け取るステップと、
前記ノードが、前記ブロックの検証を行うステップと、
前記ノードが、前記ブロックの採択について合意が形成された後に、前記ブロックを前
記ノードのブロックチェーンに追加するステップと
を含み、
前記ブロックは、前記外部データの値を含み、
前記外部データは、参照先が各ノードによりアクセス先を解釈可能な形式で表され、
前記検証は、前記ブロックに含まれる前記外部データの前記値を、前記ノードが前記アクセス先より取得する値と比較して行うことを含むことを特徴とするプログラム。
【請求項６】
非決定論的な外部データを用いるスマートコントラクトを実行可能なブロックチェーン・ネットワークを構成するためのノードであって、
スマートコントラクトを呼び出すトランザクションを含むブロックを受け取って、前記ブロックの検証を行い、
前記ブロックの採択について合意が形成された後に、前記ブロックを前記ノードのブロックチェーンに追加し、
前記ブロックは、前記外部データの値を含み、
前記外部データは、参照先が各ノードによりアクセス先を解釈可能な形式で表され、
前記検証は、前記ブロックに含まれる前記外部データの前記値を、前記ノードが前記アクセス先より取得する値と比較して行うことを含むことを特徴とするノード。