(57)【要約】  本発明は、分散型台帳を実装するネットワーク（３０００）においてトランザクション（１１１１−１１４１）を実行する方法（４０００）であって、前記ネットワーク（３０００）は、複数のトランザクションノード（１１１０−１１４０）、複数の台帳計算ノード（２２１０−２２２０）及び１つのマルチノードトランザクション識別器（３３００，６３００）を含み、前記方法は、前記トランザクションノード（１１１０−１１４０）によって、トランザクションサプライ（１１１１−１１４１）を発行する（Ｓ４１００）ステップと、前記マルチノードトランザクション識別器（３３００，６３００）によって、少なくとも２つのトランザクションサプライ（１１１１−１１４１）を識別する（Ｓ４３００）と共にマルチノードトランザクション（３３０１）へと結合する（Ｓ４４００）ステップとを含む、方法に関する。【選択図】図４【特許請求の範囲】
【請求項１】
分散型台帳を実装するネットワーク（３０００）においてトランザクション（１１１１−１１４１）を実行する方法（４０００）であって、
前記ネットワーク（３０００）は、複数のトランザクションノード（１１１０−１１４０）、複数の台帳計算ノード（２２１０−２２２０）及び１つのマルチノードトランザクション識別器（３３００，６３００）を含み、
前記方法は、
複数の前記トランザクションノード（１１１０−１１４０）によって、複数のトランザクションサプライ（１１１１−１１４１）を発行する（Ｓ４１００）ステップと、
前記マルチノードトランザクション識別器（３３００，６３００）によって、少なくとも２つのトランザクションサプライ（１１１１−１１４１）を識別する（Ｓ４３００）と共にマルチノードトランザクション（３３０１）へと結合する（Ｓ４４００）ステップと
を含む、方法。
【請求項２】
前記識別するステップ（Ｓ４３００）の前に、
少なくとも１つのトランザクションノード（１１１０−１１４０）によって、前記マルチノードトランザクションをリクエストする（Ｓ４２００）ステップをさらに含む、請求項１に記載の方法。
【請求項３】
前記マルチノードトランザクション（３３０１）を、前記マルチノードトランザクションをリクエストする（Ｓ４２００）前記トランザクションノード（１１１０−１１４０）へと送信する（Ｓ４５００）ステップをさらに含む、請求項２に記載の方法。
【請求項４】
前記識別するステップ（Ｓ４３００）が、
最初のトランザクションサプライ（Ｘ）を選択する（Ｓ５３１０）ステップと、
１つ以上のトランザクションサプライ（Ｙ，Ｙ’）を再帰的に選択及びマッチングする（Ｓ５３２０−Ｓ５３４０、Ｓ５３６０−Ｓ５３８０）ステップと
を含み、
前記結合するステップ（Ｓ４４００）が、
前記最初のトランザクションサプライ（Ｘ）と前記１つ以上の再帰的にマッチするトランザクションサプライ（Ｙ，Ｙ’）とを結合する（Ｓ５３５０，Ｓ５３９０）ステップ
を含む、請求項１に記載の方法。
【請求項５】
前記結合するステップ（Ｓ５３５０，Ｓ５３９０）が、
前記少なくとも２つのトランザクションサプライを決済するステップ
を含む、請求項１〜４のいずれか１項に記載の方法。
【請求項６】
前記マルチノードトランザクション（３３０１）を受信したトランザクションノード（１１１０−１１４０）によって、コミット済みマルチノードトランザクション（１１３２）を前記分散型台帳においてコミットする（Ｓ４６００）ステップ
をさらに含む、請求項１〜５のいずれか１項に記載の方法。
【請求項７】
前記コミット済みマルチノードトランザクション（１１３２）は、前記分散型台帳において単一のトランザクションとして記録される、請求項６に記載の方法。
【請求項８】
前記マルチノードトランザクション（３３０１）は、前記トランザクションノード（１１１０−１１４０）間でアセットを転送する際、バッファを使用することによって前記分散型台帳において記録される、請求項６又は７に記載の方法。
【請求項９】
分散型台帳を実装するネットワーク（３０００）からのトランザクション（１１１１−１１４１）を結合するためのマルチノードトランザクション識別器（３３００，６３００）であって、
前記ネットワーク（３０００）は、トランザクションサプライ（１１１１−１１４１）を発行可能な（Ｓ４１００）複数のトランザクションノード（１１１０−１１４０）及び複数の台帳計算ノード（２２１０−２２２０）を含み、
前記マルチノードトランザクション識別器（３３００，６３００）は、
少なくとも２つのトランザクションサプライ（１１１１−１１４１）を識別すると共にマルチノードトランザクション（３３０１）へと結合する（Ｓ４３００）ための識別及び結合ユニット（６３１０）と、
前記マルチノードトランザクション（３３０１）をトランザクションノードへと送信する（Ｓ４５００）ための通信ユニット（６３２０）と
を含む、マルチノードトランザクション識別器（３３００，６３００）。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散型台帳を実装するネットワークにおいてトランザクションを実行する方法に関する。特に、本発明のいくつかの実施形態は、複数のトランザクションサプライが有利な方法で結合されることを可能にし、それによって複数のトランザクションノードが結合されたトランザクションを簡単かつ効果的な方法で実行することを可能にする。
【背景技術】
【０００２】
分散型台帳は、ネットワーク内の複数のノードに拡散した、複製及び共有されたデジタルデータの合意に依存する台帳である。分散型台帳は、ノード間のトランザクションを、ノード自体の間における合意によって実行することができる。特に、ノードの一部又は全部は、台帳又はその関連部分における真の状態について、専門の権限のある第三者の助力がなくとも合意に達することができる。この合意は、分散型台帳として保存され、各ノードがいつでもアクセスできるようになる。
【０００３】
分散型台帳の既知の形式の１つは、ブロックチェーンシステムである。ブロックチェーンを実装するネットワークは、複数のトランザクションノードと、台帳計算ノード、すなわち複数のブロックチェーン計算ノード（マイナーとも称される）とを含む。それぞれのブロックは、各ブロックチェーン計算ノードによって計算され、ノード間で実行された各トランザクションを含む分散型台帳を格納する。ブロックの計算は、計算集約的なアクティビティになるように設計されている。必要な計算労力と引き換えに、台帳計算ノードには電子通貨の形で報酬が授与される。ブロックチェーンベースの分散型台帳の既知の例としては、たとえば、ビットコインやイーサリアムがある。しかしながら、全ての形式の分散型台帳が、ブロックチェーンを実装するわけではない。他の実装は、例えば、有向非巡回グラフベースとすることができ、これは、例えばＩＯＴＡ又はハッシュグラフに実装されている。
【０００４】
一般に、分散型台帳を実装するネットワークは、トランザクションノードと台帳計算ノードとを含む。台帳計算ノードは、トランザクションノードによってトランザクションリクエスト又はトランザクションサプライを受信し、ある種の数学集約的な計算を実行することによって、それらを台帳に記録する。トランザクションノードは、台帳にいつでもアクセスでき、台帳の作成に必要な計算と比べてかなり単純な計算によって、台帳の有効性を独立してチェックできる。
【０００５】
分散型台帳を実装するネットワークは、大量の計算リソースと大量のエネルギーを消費し得る。したがって、これらのリソースをより効果的に使用可能にする任意の改善が望まれる。
【０００６】
図１Ａは、２つのトランザクションノード１１１０及び１１２０が、分散型台帳を実装するネットワークにおいてトランザクションを実行することを意図している一般的な状況を概略的に示す。説明を明確にするため、２つのトランザクションノード１１１０，１１２０のみが示されているが、他のトランザクションノード及び台帳計算ノードがネットワークの一部であることは明らかであろう。
【０００７】
図１Ａに示すように、トランザクションノード１１１０は、アセットＡを売却し、引き換えにアセットＢを取得することを意図している。換言すれば、トランザクションノード１１１０は、アセットＢを購入し、引き換えにアセットＡを提供することを意図している。どのアセットが提供及びリクエストされるかについての指示は、トランザクションサプライ１１１１に含まれる。すなわち、トランザクションノード１１１０は、売り手又は買い手と見なすことができ、以下では、状況に応じて、２つの用語を両方とも使用する。もっとも、あらゆる商取引において、一般に、任意のノードが同時に買い手かつ売り手であることは明らかである。同様に、トランザクションノード１１２０は、トランザクションサプライ１１１１によって示されるように、アセットＢを売却し、引き換えにアセットＣを購入することを意図している。
【０００８】
トランザクションノード１１１０，１１２０は、一般に、分散型台帳を実装するネットワークにおいて対話する機能を備えた、換言すれば、他の電子機器にネットワークを介して接続し、メッセージを送受信する機能を備えた、任意の種類の電子機器として意図される。トランザクションノード１１１０，１１２０の例としては、ＰＣ又はスマートフォンが使用され得る。様々なノードが互いに通信することを可能にするネットワークの例としては、インターネットが使用され得る。トランザクションサプライ１１１１，１１２１は、一般に、ファイル又はデータストリーム等の電子的に保存可能な情報として解釈され得る。これらは、最終的には情報の適切なデコードにより、少なくとも売却されるアセットと取得されるアセットとを示す。
【０００９】
図１Ａの例では、破線で概略的に示されているように、トランザクションノード１１１０によってリクエストされた際にトランザクションノード１１２０がアセットＢを提供するが、トランザクションノード１１２０によるアセットＣのリクエストがトランザクションノード１１１０によるアセットＡのオファーとマッチしないため、トランザクションノード１１１０及び１１２０はトランザクションを締結できない。
【００１０】
図１Ｂは、図１Ａに示した問題に対する可能な解決策を示す。特に、図１Ｂに見られるように、ここではトランザクションノード１１３０が、トランザクションサプライ１１３１を備えたネットワーク内にさらに存在し、このトランザクションサプライ１１３１に応じて、ノード１１３０がアセットＡの取得と引き換えにアセットＣを提供する。図１Ｂから容易に理解できるように、この構成では、トランザクションノード１１１０と１１２０との間のトランザクションは、トランザクションノード１１３０の存在のおかげで実行可能になる。
【００１１】
図１Ｂに示すようなトランザクションは、各ノード１１１０−１１３０が意図されたアセットを他のノードと交換することを可能にすることによって実装され得る。これは、マルチノードトランザクションと称される。すなわち、トランザクションノード１１１０−１１３０が、それらの３つのトランザクションサプライをうまくまとめることができると判断した場合、ノード１１１０は、例えば、アセットＡをノード１１３０に転送することによってプロセスを開始することができ、それによって、引き換えにアセットＣを取得する。その後、ノード１１１０はアセットＣをノード１１２０に転送することができ、それによって、引き換えにアセットＢを取得する。
【００１２】
しかしながら、そのようなマルチノードトランザクションを実行するための方法には、いくつかの欠点がある。
【００１３】
まず、いかなるトランザクションも、関係するトランザクションノード間の信頼を必要とし、トランザクションが電子的に実行される場合には特に必要となる。２つのトランザクションノード１１１０，１１２０のみが関係するトランザクションであっても、電子的なトランザクションの実行では、アセットのリアルタイム交換が可能にならないことが非常に多い。したがって、トランザクションノード１１２０にアセットＢを提供すると共にアセットＡをリクエストするトランザクションサプライがあるとした場合、トランザクションノード１１１０は、アセットＡをトランザクションノード１１２０に転送することによってトランザクションを開始できるが、その際、トランザクションノード１１２０が引き換えにアセットＢを転送することを信頼する必要がある。
【００１４】
さらに、そのような電子トランザクションが実行されると、それはトランザクションノード間の契約を構成するだけであることが非常に多い。このことは、アセットが電子的に譲渡できない場合、特に該当する。例えば、アセットＡが木材かつアセットＢが銀であり、いずれも複数の場所において物理的な形態で物理的に保管されている場合、これらのアセットに関係するいかなるトランザクションにおいても、それらのアセットの物理的な移動が必要になる可能性が高く、リアルタイムで実行することができない。このことは、トランザクションノード１１１０及びトランザクションノード１１２０が、成功した電子トランザクションに続いて、各トランザクションノードが契約の役割を果たすと共にアセットを新しい所有者へと物理的に移送することを、信頼する必要があることを意味する。
【００１５】
図１Ｂに示すようなトランザクションでは、マルチノードトランザクションに参加するトランザクションノードの数を増やすと、全てのトランザクションノードが相互に信頼することがますます複雑になる。一例として、トランザクションノード１１１０とトランザクションノード１１２０とが互いに完全に信頼する場合であっても、それらのトランザクションの前向きな結果は、トランザクションノード１１３０の信頼性に依存することになる。図１Ｃに示すように、該マルチノードトランザクションに対してさらなるトランザクションノードが追加されると、このことは明らかにより複雑になる。
【００１６】
図１Ｃに示す例では、トランザクションノード１１１０と１１２０との意図されるトランザクションが有効になると同時にトランザクションノード１１３０と１１４０とのトランザクションを有効にすることによって、トランザクションノード１１１０と１１２０との意図される該トランザクションを完了することが原理的に可能であるものの、このようなマルチノードトランザクションには、他の全てのトランザクションノードの各トランザクションノードの信頼が必要となる。これは、現実の世界では実現が難しく、電子プラットフォームではさらに複雑である。
【００１７】
この問題は事実上、電子ネットワークにおけるマルチノードトランザクションがトランザクションノードによって受諾されることを非常に困難にしている。この困難は、関係するトランザクションノードの数に応じてさらに増加する。
【００１８】
さらに、図１Ｂ及び１Ｃに示すトランザクションは、トランザクションを一度に１つずつ、逐次的に実行される必要がある。
【００１９】
図１Ｂに示す例に関し、例えば、トランザクションノード１１２０は、アセットＢをトランザクションノード１１１０に転送し、引き換えにアセットＡを受信することによってマルチノードトランザクションを開始すると仮定され得る。トランザクションノード１１２０はアセットＡに関心を持たないが、トランザクションサプライ１１３１のおかげで、トランザクションノード１１３０がアセットＡに関心を持っていること、それをアセットＣと交換しようとしていることを知っている。このアセットＣは、トランザクションノード１１２０が取得することを意図しているものである。
【００２０】
したがって、トランザクションを完了するために、トランザクションノード１１２０は、たとえ一時的のみであっても、アセットＡの所有者になる必要がある。このことは、トランザクションノード１１２０が動作するところの規則によっては、常に許可されるとは限らない。このことは、アセットＡを管理する者によっては許可されないことがあり、それによりトランザクションノード１１２０がアセットＡを所有できないことがある。そのような制限は、たとえノード１１２０が実際にアセットＡを所有することについて関心も希望も持っていなくても、このマルチノードトランザクションの正常な実行の妨げになる可能性がある。
【００２１】
分散型台帳システムでは、台帳に記録される各トランザクションは、台帳計算ノードに対し、計算リソースを消費することを要求する。計算リソースは限られているため、一般的には、トランザクションの数を可能な限り多く含むことが望ましい。
【００２２】
図１Ｃの例では、ノード１１１０がマルチノードトランザクションを開始すると仮定すると、逐次的方法を用いた際、マルチノードトランザクションを完了するために必要な計６つのトランザクションについて、以下のトランザクションが台帳に記録される必要がある。
１．トランザクションノード１１１０は、アセットＡを、トランザクションノード１１４０に転送する。
２．トランザクションノード１１４０は、アセットＤを、トランザクションノード１１１０に転送する。
３．トランザクションノード１１１０は、アセットＤを、トランザクションノード１１３０に転送する。
４．トランザクションノード１１３０は、アセットＣを、トランザクションノード１１１０に転送する。
５．トランザクションノード１１１０は、アセットＣを、トランザクションノード１１２０に転送する。
６．トランザクションノード１１２０は、アセットＢを、トランザクションノード１１１０に転送する。
したがって、トランザクションの数を減らし、それによってシステムの実行に必要な計算リソースを減らす方法を提供することが望ましい。
【００２３】
さらに、台帳計算ノードによる計算リソースの使用は、通常、トランザクションをリクエストするトランザクションノードによって支払われる。たとえば、イーサリアムでは、トランザクションを要求するトランザクションノードは、台帳計算ノードに対して、ガスと称される電子通貨を支払う必要がある。上記の例では、トランザクションノード１１１０は、６つのうち３つのトランザクションを台帳内に記録することをリクエストするが、トランザクションノード１１２０−１１４０は、それぞれ１つのトランザクションを記録することをリクエストするのみである。したがって、トランザクションノード１１１０では、トランザクションノード１１２０−１１４０と比較して、支払われることになるコストがより高くなり、このことは、トランザクションノード１１１０がマルチノードトランザクションを開始することを妨げる可能性がある。したがって、トランザクションコストを全てのノード間で均等に分割する方法が望ましいと考えられる。
【００２４】
さらに、図１Ｃの例のようなマルチノードトランザクションでは、トランザクションのチェーンが破綻するリスクがある。すなわち、上記の例示的なチェーンを参照すると、ノード１１１０が最初の２つのトランザクションを実行してアセットＣを保持した後に（このアセットＣは本来、ノード１１１０がノード１１２０と交換することを意図していたものである）、ノード１１２０はより優れたトランザクションサプライを発見することや、アセットＣがアセットＢと交換されるさらに迅速なトランザクションを単に受諾することがある。すなわち、ノード１１１０がトランザクション１及び３を実行する時までに、トランザクションサプライ１１２１がもはや有効でなくなり、そのためノード１１１０には所有する意図の全くなかったアセットＣを所有したままになっていることが見られ得る。
【００２５】
このリスクは、トランザクションの数が増えた際に高くなり、図１Ｃに示されているようなマルチノードトランザクションをトランザクションノードによって受諾することが事実上非常に困難になる。このことは、トランザクションノードの数が増えるにつれ、さらに困難になる。
【００２６】
この問題の解決策の１つは、トランザクションをより高速化することであり得る。それによって、トランザクションノード１１１０は、トランザクション１−４が完了する時まで、トランザクションサプライ１１２１がまだ有効であることについて、より高い確信を持つことができる。しかしながら、単位時間当たりに操作されるトランザクションの数は、トランザクションノード１１１０によって必ずしも制御可能ではないパラメータである。さらに、時間当たりのトランザクション数が増加すると、一般的に、台帳計算ノードがその計算能力を向上させることを要求され、それによって分散型台帳のコスト及びエネルギー消費が増加することになる。
【００２７】
図１Ｃに示すもののようなマルチノードトランザクションへの現在のアプローチにおけるもう１つの問題は、図２より理解され得る。
【００２８】
図２は、現在の技術水準に係る、分散型台帳を実装するネットワーク２０００において交換される通信を概略的に示す。一例として、ネットワーク２０００は、４つのトランザクションノード１１１０−１１４０及び２つの台帳計算ノード２２１０−２２２０を含む。理解されるように、トランザクションサプライ１１１１−１１４１が交換されることにより、全てのトランザクションノード１１１０−１１４０及び全ての台帳計算ノード２２１０−２２２０が全ての可能なトランザクションサプライ１１１１−１１４１を認識している状況が作り出される。
【００２９】
このとき、各トランザクションノードは、可能な全てのトランザクションサプライ１１１１−１１４１を評価し、図１Ｃに概略的に示すようなマルチノードトランザクション候補を認知する。４つのトランザクションノード１１１０−１１４０及び４つのトランザクションサプライ１１１１−１１４１しかない状況であれば、このことはまだ可能であるかもしれない。しかしながら、トランザクションノード及びトランザクションサプライの数が増加すると、それらは数百万又は数十億に達する可能性があり、マルチノードトランザクション候補を認識するために単一トランザクションノードのそれぞれにおいて必要とされる計算リソースが大幅に増加する。このことは、各トランザクションノードがそのようなマルチノードトランザクションを個別に識別することがさらに要求され、それによって必要とされる計算リソースが大幅に増加するため、非常に非効率的である。
【００３０】
そのため、上記の問題は、分散型台帳を実装するネットワークにおけるマルチノードトランザクションの実行を妨げる。
【００３１】
したがって、本発明の目的は、上記の欠点の少なくとも１つを克服又は低減する、分散型台帳を実装するネットワークにおいてトランザクションを実行する方法を提供することである。
【発明の概要】
【００３２】
本発明は、概して、マルチノードトランザクション識別器が、ネットワークに追加されて可能なマルチノードトランザクションを識別するように操作される、というコンセプトに依拠している。これによれば、該マルチノードトランザクション識別器のみがトランザクションサプライを評価してそれらの間の可能なマルチノードトランザクションを計算しているため、有利なことに、各ノードで計算リソースを使用する必要がなくなる。また、このことは、有利なことに、該マルチノードトランザクション識別器が以前の決定の結果を複数のマルチノードトランザクションのために再利用することをも可能にする。
【００３３】
さらに、いくつかの実施形態では、マルチノードトランザクション識別器は、２つ以上のトランザクションサプライ、好ましくは３つ以上のトランザクションサプライを単一のマルチノードトランザクションへと結合する、マルチノードトランザクションを計算することができる。これにより、マルチノードトランザクションに関与するノード及びトランザクションの数とは関係なく、分散型台帳に記録されることが必要なトランザクションの数を１つに減らすことができる。そうすることにより、計算リソース、特に台帳計算ノードの計算リソースが、より効率的に使用される。
【００３４】
さらに、いくつかの実施形態では、単一のマルチノードトランザクションのみが分散型台帳に記録されるため、上述のような複数の続いて起こるトランザクションに関連する欠点も克服される。
【００３５】
本発明の実施形態は、特に、分散型台帳を実装するネットワークにおいてトランザクションを実行する方法に関し、ネットワークは、複数のトランザクションノード、複数の台帳計算ノード及び１つのマルチノードトランザクション識別器を含み、該方法は、複数のトランザクションノードによって、複数のトランザクションサプライを発行するステップと、マルチノードトランザクション識別器によって、少なくとも２つのトランザクションサプライを識別すると共にマルチノードトランザクションへと結合するステップとを含む。
【００３６】
いくつかの実施形態では、識別するステップの前に、少なくとも１つのトランザクションノードによって、マルチノードトランザクションをリクエストするステップをさらに含み得る。
【００３７】
いくつかの実施形態では、マルチノードトランザクションを、マルチノードトランザクションをリクエストするトランザクションノードへと送信するステップをさらに含み得る。
【００３８】
いくつかの実施形態では、識別するステップが、最初のトランザクションサプライを選択するステップと、１つ以上のトランザクションサプライを再帰的に選択及びマッチングするステップとを含み、結合するステップが、最初のトランザクションサプライと１つ以上の再帰的にマッチするトランザクションサプライとを結合するステップを含み得る。
【００３９】
いくつかの実施形態では、結合するステップが、少なくとも２つのトランザクションサプライを決済するステップを含み得る。
【００４０】
いくつかの実施形態では、マルチノードトランザクションを受信したトランザクションノードによって、コミット済みマルチノードトランザクションを分散型台帳においてコミットするステップをさらに含み得る。
【００４１】
いくつかの実施形態では、コミット済みマルチノードトランザクションは、分散型台帳において単一のトランザクションとして記録され得る。
【００４２】
いくつかの実施形態では、マルチノードトランザクションは、トランザクションノード間でアセットを転送する際、バッファを使用することによって分散型台帳において記録され得る。
【００４３】
本発明のさらなる実施形態は、分散型台帳を実装するネットワークからのトランザクションを結合するためのマルチノードトランザクション識別器に関することがあり、ネットワークは、トランザクションサプライを発行可能な複数のトランザクションノード及び複数の台帳計算ノードを含み、該マルチノードトランザクション識別器は、少なくとも２つのトランザクションサプライを識別すると共にマルチノードトランザクションへと結合するための識別及び結合ユニットと、マルチノードトランザクションをトランザクションノードへと送信するための通信ユニットとを含む。
【図面の簡単な説明】
【００４４】
【図１Ａ】図１Ａは、現在の技術水準に係る、ネットワークにおいてトランザクションを実行するための方法を概略的に示す。
【図１Ｂ】図１Ｂは、現在の技術水準に係る、ネットワークにおいてトランザクションを実行するための方法を概略的に示す。
【図１Ｃ】図１Ｃは、現在の技術水準に係る、ネットワークにおいてトランザクションを実行するための方法を概略的に示す。
【図２】図２は、現在の技術水準に係る、分散型台帳を実装するネットワークにおいて交換されるトランザクションサプライメッセージを概略的に示す。
【図３】図３は、本発明の実施形態に係る、トランザクションを実行するためのネットワーク３０００を概略的に示す。
【図４】図４は、本発明の実施形態に係る、トランザクションを実行するための方法４０００を概略的に示す。
【図３Ａ】図３Ａは、ネットワーク３０００において種々異なる時点で交換されるいくつかの通信を概略的に示す。
【図４Ａ】図４Ａは、方法４０００のどのステップが、図３Ａの種々の時点で実行されているかを概略的に示す。
【図３Ｂ】図３Ｂは、ネットワーク３０００において種々異なる時点で交換されるいくつかの通信を概略的に示す。
【図４Ｂ】図４Ｂは、方法４０００のどのステップが、図３Ｂの種々の時点で実行されているかを概略的に示す。
【図３Ｃ】図３Ｃは、ネットワーク３０００において種々異なる時点で交換されるいくつかの通信を概略的に示す。
【図４Ｃ】図４Ｃは、方法４０００のどのステップが、図３Ｃの種々の時点で実行されているかを概略的に示す。
【図３Ｄ】図３Ｄは、ネットワーク３０００において種々異なる時点で交換されるいくつかの通信を概略的に示す。
【図４Ｄ】図４Ｄは、方法４０００のどのステップが、図３Ｄの種々の時点で実行されているかを概略的に示す。
【図３Ｅ】図３Ｅは、ネットワーク３０００において種々異なる時点で交換されるいくつかの通信を概略的に示す。
【図４Ｅ】図４Ｅは、方法４０００のどのステップが、図３Ｅの種々の時点で実行されているかを概略的に示す。
【図５】図５は、本発明の実施形態に係る、トランザクションサプライ識別及び結合ステップ５３００を概略的に示す。
【図６】図６は、本発明の実施形態に係る、マルチノードトランザクション識別器６３００を概略的に示す。
【発明を実施するための形態】
【００４５】
以下では、本発明のいくつかの実施形態について説明する。これらの実施形態は、本出願の保護範囲を理解するために提供されており、該保護範囲は特定の実施形態によって限定されるものでなく、特許請求の範囲によって定義されることは、当業者には明らかであろう。
【００４６】
さらに、本発明が任意の種類の分散型台帳技術に適用可能であることは明らかであろう。一部の文節では、理解を明確にするために、ブロックチェーンベースの分散型台帳技術を含む実装を参照し、他の一部の文節では、そのようなブロックチェーンベースの分散型台帳技術の例として、イーサリアムと称される特定の利用可能なプラットフォームが提供される。しかしながら、それらの文節は、特定の実施例を通じて本発明をよりよく理解するために、及び／又は、それらの特定の実施形態の文脈で実行される際における本発明の特定の利点を説明するために提供されることは明らかであろう。しかしながら、本発明は、そのような特定の実施形態には限定されない。
【００４７】
図３は、本発明の実施形態に係る、トランザクションを実行するためのネットワーク３０００を概略的に示す。説明を明確にするために、ノード間の相互接続が示されることなくノードのみが示されていることは明らかであろう。ネットワーク３０００は、マルチノードトランザクション識別器３３００が存在するため、ネットワーク２０００とは異なる。概して、マルチノードトランザクション識別器３３００は、ネットワーク３０００における少なくとも１つの他のノードと通信し、それによってトランザクションサプライ１１１１−１１４１に基づいて可能なマルチノードトランザクションを識別することが可能な、ネットワーク３０００のノードと見なすことができる。いくつかのさらなる実施形態では、マルチノードトランザクション識別器３３００はさらに、複数のトランザクションサプライを結合してマルチノードトランザクション３３０１とし、該マルチノードトランザクション３３０１を１つ以上のノードに送信することができる。
【００４８】
特に、いくつかの実施形態では、マルチノードトランザクション識別器３３００は、以下の例にて説明するように、トランザクションサプライ１１１１−１１４１を直接トランザクションノード１１１０−１１４０から受け取ることができる。代替として又はこれに加えて、いくつかの実施形態では、マルチノードトランザクション識別器３３００は、例えば、１つ以上の台帳計算ノード２２１０−２２２０からトランザクションサプライ１１１１−１１４１を引き出すことによって、トランザクションサプライ１１１１−１１４１を分散台帳から引き出すことができる。前者のアプローチの利点の１つは、マルチノードトランザクション識別器３３００に、トランザクションサプライ１１１１−１１４１が迅速に通知されることである。後者のアプローチの利点の１つは、マルチノードトランザクション識別器３３００によって評価されるトランザクションサプライ１１１１−１１４１が、既に台帳に記録されていることである。
【００４９】
マルチノードトランザクション識別器３３００は、ファイル等の電子データを受信し、受信した該データを加工し、加工したデータを送信することが可能な任意の電子機器によって実装され得る。例示的な実装として、マルチノードトランザクション識別器３３００は、汎用コンピュータ又はＰＣによって実装され得る。
【００５０】
図６は、本発明の実施形態に係る、マルチノードトランザクション識別器６３００を概略的に示す。このマルチノードトランザクション識別器６３００は、マルチノードトランザクション識別器３３００の可能な特定の実装を表している。特に、マルチノードトランザクション識別器６３００は、ネットワーク３０００からのトランザクションサプライ１１１１−１１４１を結合するように構成され、ここで、ネットワーク３０００は、トランザクションサプライ１１１１−１１４１を発行可能な複数のトランザクションノード１１１０−１１４０と、複数の台帳計算ノード２２１０−２２２０とを含む。より具体的には、マルチノードトランザクション識別器６３００は、結合してマルチノードトランザクションを形成可能な複数のトランザクションサプライを識別するための識別ユニット３６１０と、少なくとも２つのトランザクションサプライ１１１１−１１４１、好ましくは３つ以上のトランザクションサプライ１１１１−１１４１を結合して、マルチノードトランザクション３３０１とするための結合ユニット６３３０と、マルチノードトランザクション３３０１を送信し、通常、複数のトランザクションノード１１１０−１１４０及び／又は複数の台帳計算ノード２２１０−２２２０と通信するための通信ユニット６３２０とを備える。
【００５１】
より具体的には、通信ユニット６３２０は、ネットワーク３０００によって指定されたプロトコルを用いて通信可能な任意の電子機器であり得る。例えば、ネットワーク３０００がインターネットである場合、通信ユニット６３２０は、モデム又は同様のものであり得る。識別ユニット６３１０及び結合ユニット６３３０は、それぞれ独立して、それぞれの動作に必要なメモリを備えたＣＰＵであり得、それらは好ましくは、以下にて説明する方法４０００を実行可能、又は、以下の附属書１に添付するコードの少なくとも一部によって正式に規定される方法を実行可能である。
【００５２】
マルチノードトランザクション識別器３３００の存在のおかげで、これらのトランザクションは、ノードにとっての容易さを改善して、かつ、トランザクションノード１１１０−１１４０及び台帳計算ノード２２１０−２２２０の計算リソースを削減して実行することができる。概して、マルチノードトランザクション識別器３３００は、マルチノードトランザクション３３０１の中央集中方式の識別を可能にして、各ノードの識別操作の実行を緩和する。さらに、複数のトランザクションの代わりに、結合されたマルチノードトランザクションを記録するだけでよいため、該ネットワークでは必要な操作の量が削減される。このようにして、ネットワーク３０００は、同等の数の計算リソースを備えたネットワーク２０００よりも多くの機能を実装することができる。
【００５３】
図４は、本発明の実施形態に係る、トランザクションを実行するための方法４０００を概略的に示す。特に、方法４０００は、ネットワーク３０００における複数のトランザクションサプライ１１１１−１１４１に基づいてマルチノードトランザクション３３０１を識別できる点で有利である。より具体的には、方法４０００は、トランザクションサプライ１１１１−１１４１をトランザクションノード１１１０−１１４０によって発行するステップＳ４１００を含む。該ステップでは、トランザクションノード１１１０−１１４０のうち任意のものが、任意の数のトランザクションサプライ１１１１−１１４１を発行することができる。トランザクションサプライ１１１１−１１４１の発行は、新たに利用可能なトランザクションサプライをネットワーク３０００に通知することをトランザクションノード１１１０−１１４０に行わせることが可能な任意の方法にて実行され得る。そのような方法は、例えば、図３Ａ−３Ｃに示されるように、新たに利用可能なトランザクションサプライをネットワーク３０００へとブロードキャストすることが挙げられる。代替として又はこれに加えて、他の実施形態では、トランザクションノード１１１０−１１４０は、新たに利用可能なトランザクションサプライに関する情報を台帳計算ノード２２１０−２２２０にのみ送信してもよい。通常、発行ステップＳ４１００の実装では、トランザクションサプライ１１１１−１４１１が発行され、それによって分散型台帳に記録されるべきであることについて、台帳計算ノード２２１０−２２２０に通知することをトランザクションノード１１１０−１１４０に行わせることが可能な任意のものが実装され得る。本発明の一実施形態では、発行ステップＳ４１００の少なくとも一部は、付録１のコードに記載される関数“CreateSupply”によって実装することができる。特に、関数“CreateSupply”は、ステップＳ４１００のサプライ作成部分を実装するために使用することができ、このとき、さらなる関数が、作成されたサプライをネットワークに送信して該サプライを分散型台帳に記録するために使用され得る。
【００５４】
トランザクションサプライ１１１１−１１４１は、トランザクションサプライを分散型台帳内に格納できるようにする任意の方法にて表すことができる。ブロックチェーンベースのスマートコントラクトシステム（例えば、イーサリアム等）に関連する特定の実施形態では、トランザクションサプライ１１１１−１１４１は、トランザクションノード１１１０−１１４０からのリクエストを含むファイル又はデータストリームとして実装され得る。ここで、該リクエストは、新たなトランザクションサプライを作成するためのスマートコントラクトの関数の１つを実行するためのものであり、トランザクションサプライ１１１１−１１４１内に含まれるアセットを定義する入力を伴う。スマートコントラクト関数の実際の実行は、台帳計算ノード２２１０−２２２０（イーサリアムでは、マイナーとも称される）によって行われ、結果としてスマートコントラクト自体の変数が変更されるため、該トランザクションサプライがスマートコントラクト内へと効率的に記録される（すなわち、該トランザクションサプライが分散型台帳内へと効率的に記録される）。
【００５５】
図３Ａ−３Ｃにおける例として、トランザクションサプライ１１１１−１１４１をネットワーク３０００に発行する、トランザクションノード１１１０−１１４０についての３つの発行ステップＳ４１００を示す。図示の例において見られるように、ネットワーク３０００における全てのノードに、トランザクションサプライ１１１１−１１４１が到達しているが、必ずしも常にそうであるとは限らない。特に、トランザクションサプライ１１１１−１１４１が少なくとも１つの台帳計算ノード２２１０−２２２０に到達して、それによってトランザクションサプライ１１１１−１１４１が分散型台帳に記録されることが可能になれば、それで十分である。トランザクションサプライ１１１１−１１４１が分散型台帳に記録されると、トランザクションサプライ１１１１−１１４１はネットワーク３０００の全てのユーザにとって利用可能になる。マルチノードトランザクション識別器３３００を含むネットワークの任意のノードは、いつでも分散型台帳にアクセス可能であり、この方法にてトランザクションサプライ１１１１−１１４１を回収することができる。
【００５６】
従来技術のネットワーク２０００では、発行ステップＳ４１００の後に、図２に示す状況が発生することになる。すなわち、各トランザクションノード１１１０−１１４０は、複数の可能なマルチノードトランザクションを独立して計算し、図１Ｃに示されているようなマルチノードトランザクションを締結する可能性を評価する必要が生じる。これに対し、本発明では、マルチノードトランザクション識別器３３００の存在のおかげで、ネットワーク３０００の計算リソースの使用が大幅に改善される。
【００５７】
特に、方法４０００は、マルチノードトランザクション識別器３３００，６３００によって、少なくとも１つのトランザクションサプライ１１１１−１１４１、好ましくは２つ以上、より好ましくは３つ以上のトランザクションサプライ１１１１−１１４１を識別するステップＳ４３００と、それらを結合してマルチノードトランザクション３３０１とするステップＳ４４００とをさらに含む。説明を簡潔にするため、及び、識別及び結合ステップが動作するためには、少なくとも１つの発行されたトランザクションサプライ１１１１−１１４１が必要であるため、図４は識別及び結合ステップを発行ステップＳ４１００に続くものとして示しているが、本発明はこれに限定されないことは明らかであろう。実際に、いくつかの実施形態では、以下にて説明するように、新たに発行されたトランザクションサプライ１１１１−１１４１を、新たな可能なマルチノードトランザクション３３０１を識別するために定期的に評価することによって、識別及び結合ステップを発行ステップＳ４１００と並行して実行することができる。
【００５８】
マルチノードトランザクション識別器６３００を参照すると、ステップＳ４３００は、識別ユニット６３１０によって実行され得る一方で、ステップＳ４４００は、結合ユニット６３３０によって実行され得る。
【００５９】
さらに、いくつかの実施形態では、識別及び結合ステップは、マルチノードトランザクションをリクエストする選択的なステップＳ４２００を用いて特定のマルチノードトランザクションを探索しているトランザクションノード１１１０−１１４０の１つによってリクエストされ得る。例えば、図１Ｃの例を参照すると、トランザクションサプライ１１１１−１１４１が発行されると、アセットＤ及びＡに関与するトランザクションサプライを探索しているトランザクションノード１１４０は、マルチノードトランザクション識別器３３００に問い合わせて、要件を満たすマルチノードトランザクションの識別をリクエストしてもよい。この場合、マルチノードトランザクション識別器３３００は、トランザクションノード１１４０に要求されるアセットを識別ステップの入力として受信し、これらの要件に適合するマルチノードトランザクション３３０１を識別及び結合するようにステップＳ４３００及びＳ４４００を実行する。
【００６０】
リクエストステップＳ４２００は選択的なステップであって、方法４０００は、可能なマルチノードトランザクション３３０１をマルチノードトランザクション識別器３３００に自律的に識別させて、それぞれのマルチノードトランザクションに属するトランザクションノードに通知し、それによってより先見的な役割を実装することによっても実装され得る。この実装では、１つのマルチノードトランザクション３３０１に属する複数のトランザクションノードが、それらの１つからの明示的なリクエストを待つのではなく、可能なマルチノードトランザクションが存在することについて同時に通知を受けることができるという利点がある。
【００６１】
識別ステップＳ４３００では、マルチノードトランザクション識別器３３００，６３００は、概して、トランザクションサプライ１１１１−１１４１の少なくともいくつか、好ましくはそれら全てを評価し、マルチノードトランザクション（例えば、図１Ｃに概略的に示されるマルチノードトランザクション）の実行可能性が利用可能であるかどうかを評価する。すなわち、マルチノードトランザクション識別器３３００，６３００は、現在有効なトランザクションサプライ１１１１−１１４１をスキャンし、それらの間のマルチノードトランザクションを識別する。該マルチノードトランザクションが、ステップＳ４２００において特定のトランザクションノードによってリクエストされていた場合、識別及び結合ステップＳ４３００は、該トランザクションノードによって表された要件を入力として使用する。そうでない場合、識別ステップＳ４３００は、可能なマルチノードトランザクションを定期的に識別し、それぞれのトランザクションノードに先見的に通知し得る。
【００６２】
識別ステップＳ４３００について、いくつかの代替的な実装が可能であることは当業者には明らかであろう。通常、識別ステップＳ４３００は、図１Ｂ及び１Ｃに例示されるように、マルチノードトランザクションを生成可能なトランザクションサプライを識別する。グラフィカルなアナロジーを使用して、結合ステップＳ４３００は、入力として、複数のトランザクションサプライ１１１１−１１４１（これらは、空間内のベクトルと考えることができる）を受信する。これらの各トランザクションサプライは、リクエストされたアセットに対応する入力ポートと、提供されたアセットに対応する出力ポートとを有する。当業者は複数のアルゴリズムを識別することができ、それらのアルゴリズムは、それらのトランザクションサプライが結合されるようにすることができる。すなわち、それらのアルゴリズムは、あるポイントにおける入力ポートが、別のポイントにおける出力ポートとマッチするように、様々なポイントが相互に接続されるようにすることができる。これは、グラフ問題、又は、ジオメトリ問題として解釈され得るものであり、この問題のためにいくつかの既知の代替となる解決策が実装され得るが、このような可能な実装の全てについて詳細に説明することは、本発明の目的ではない。
【００６３】
以下では、識別ステップＳ４３００を実施するために、可能なマルチノードトランザクションを識別するためにトランザクションサプライ１１１１−１１４１をどのように分析することができるかについての例を説明する。その後、結合ステップＳ４４００を実装するために、これらのトランザクションサプライ１１１１−１１４１をどのように結合してマルチノードトランザクション３３０１とすることができるかについての例が説明される。
【００６４】
１つの可能な実施形態についての詳細な説明を提供する目的で、特定の可能な実施、識別及び結合するステップが、図５を参照して説明される。これが可能な実施形態の１つにすぎず、本発明はこの具体的に例示された実施態様に限定されないことは明らかであろう。概して、複数のマルチノードトランザクションを識別してそれらを結合する任意の方法が、該識別及び結合ステップによって実装され得る。
【００６５】
図５に示す実施形態では、識別及び結合ステップＳ５３００は、複数の利用可能なサプライの中から最初のトランザクションサプライＸを選択するステップＳ５３１０と、１つ以上のトランザクションＹ，Ｙ’を再帰的に選択してマッチングするステップＳ５３２０−Ｓ５３４０，Ｓ５３６０−Ｓ５３８０とを含む。いくつかの実施形態では、初期トランザクションサプライＸは、ネットワーク３０００に対して発行されて分散型台帳内に記録されたトランザクションサプライであってもよく、特に、マルチノードトランザクション識別器が可能なマルチノードトランザクションを先見的に探索する実施形態では、そのようなトランザクションサプライであり得る。代替として又はこれに加えて、いくつかの実施形態では、初期トランザクションサプライＸは、ステップＳ４２００でトランザクションノードによってリクエストされたがまだ分散型台帳には記録されていない、単に提案されたトランザクションサプライでしかなくてもよい。
【００６６】
概括的に言うと、ステップＳ５３１０は、図１Ｃに示されている例のように、トランザクションサプライ１１１１−１１４１のうち任意の１つ、又は、ステップＳ４２００でリクエストされたトランザクションから開始し、マルチノードトランザクションを閉じることが可能なマッチするトランザクションサプライを発見するために、残りのトランザクションサプライ１１１１−１１４１を再帰的に評価し、同時に、再帰段階に移る際におけるトランザクションサプライの二重評価を回避すると解釈され得る。より正式には、図５に示す例示的な実施形態は、描写を容易にするため、最初の２つの再帰段階のみを明示的に示しており、どのようにアルゴリズムが任意の所望の再帰深さにまで実装できるかについては、当業者には明らかであろう。
【００６７】
より具体的には、ステップＳ５３２０では、現在有効なトランザクションサプライ１１１１−１１４１から、トランザクションサプライＸとは異なるトランザクションサプライＢが選択される。ステップＳ５３３０では、トランザクションサプライＸとトランザクションサプライＹとの間で一方側マッチング（one-side matching）が実行される。一方側マッチングとは、実装に応じて、トランザクションサプライＸの売却アセットとトランザクションサプライＹの購入アセットとがマッチについてチェックされること、又は、その逆であることのいずれかを意味する。ＸとＹとの間にマッチが見つからない場合、該動作はステップＳ５３３１へと進行し、該ステップでは、トランザクションサプライＸとの片側マッチングのために、次のトランザクションサプライＹが（残っている場合には）選択される。ＸとＹの間に一方側マッチが見つかった場合、ステップＳ５３４０が実行され、ここでは、他方側マッチング（other-side matching）が実行される。ここで、他方側マッチングは、一方側マッチングの補完的なチェックを示し、したがって、一方側マッチングステップＳ５３３０の選択された実装に依存する。例えば、一方側マッチングＳ５３３０において、トランザクションサプライＸの売却アセットとトランザクションサプライＹの購入アセットとがマッチするかどうかがチェックされると仮定すると、他方側マッチングステップＳ５３４０では、トランザクションサプライＸの購入アセットと売却トランザクションサプライＹのアセットとがマッチするかどうかがチェックされる。マッチが見つかった場合、トランザクションサプライＸ及びＹはそれぞれ売却アセット及び購入アセットの両方にマッチするため、ステップＳ５３５０において結合され得る。その結果、２つのトランザクションサプライＸとＹに基づくマルチノードトランザクション３３０１が生じる。
【００６８】
一方で、他方側のマッチングステップＳ５３４０が成功しない場合、本方法は、ステップＳ５３６０においてＸ及びＹとは異なるトランザクションサプライＹ’を選択してステップＳ５３３０及びＳ５３４０をステップＳ５３７０及びＳ５３８０の形式で再帰的に繰り返すステップによって、再帰パスの１段階深くまで再帰的に進行する。特に、ステップＳ５３６０では、この時のチェックがトランザクションサプライＹとトランザクションサプライＹ’の間で実行されることを除いて、一方側マッチングチェックが再び実行される。マッチが見つからない場合、トランザクションサプライＹ’は、ステップＳ５３３１と同様のステップＳ５３７１において、トランザクションサプライＸ及びＹとは異なる次の利用可能なサプライに（残っている場合には）置き換えられる。一方側マッチが見つかった場合、該動作は、トランザクションサプライＸと（トランザクションサプライＹの代わりに）トランザクションサプライＹ’の間で実行されることを除いてステップＳ５３４０と同様に動作する他方側マッチングステップＳ５３８０へと進行する。マッチが見つかった場合、マルチノードトランザクション３３０１は、トランザクションサプライＸ、Ｙ、Ｙ’に基づいて結合される。見つからない場合、本方法は、当業者には明らかであろう方法にて、さらに深い再帰段階へと進行することができる。
【００６９】
この例示的な実装のおかげで、存在する可能性のあるマルチノードトランザクションが識別されることを確実にすることができる。
【００７０】
次に、これらの様々なサプライは、組み合わせステップＳ４４００において、いくつかの方法にて結合されて１つ以上のマルチノードトランザクション３３０１とされ得る。一実施形態では、マルチノードトランザクション３３０１は、マルチノードトランザクション３３０１が基づいている単一のトランザクションサプライ１１１１−１１４１の集合であり得る。例えば、図１Ｃの例を参照すると、マルチノードトランザクション３３０１は、以下の１つ以上のトランザクションサプライの集合であり得る：
１．トランザクションノード１１１０は、アセットＡを、トランザクションノード１１４０に転送する。
２．トランザクションノード１１４０は、アセットＤを、トランザクションノード１１１０に転送する。
３．トランザクションノード１１１０は、アセットＤを、トランザクションノード１１３０に転送する。
４．トランザクションノード１１３０は、アセットＣを、トランザクションノード１１１０に転送する。
５．トランザクションノード１１１０は、アセットＣを、トランザクションノード１１２０に転送する。
６．トランザクションノード１１２０は、アセットＢを、トランザクションノード１１１０に転送する。
【００７１】
代替として又はこれに加えて、マルチノードトランザクション３３０１は、マルチノードトランザクション３３０１が基づいている単一のトランザクションサプライが識別されることを可能にするポインタを含むことができる。そのようなポインタとしては、例えば、単一のトランザクションサプライに対するユニークな参照（例えば、サプライポインタ、番号又はハッシュ）が挙げられる。
【００７２】
さらに代替として又はこれに加えて、結合ステップＳ４４００は、最初のトランザクションサプライＸ及び１つ以上の再帰的にマッチするトランザクションサプライＹ、Ｙ’を決済するステップであって、それによって決済済みマルチノードトランザクション３３０１を取得するステップを含み得る。決済済みマルチノードトランザクション３３０１とは、マルチノードトランザクション３３０１に基づいている複数のトランザクションサプライがまず決済されてから結合される、単一のトランザクションを意味する。これは、図１Ｃを参照して上述した例を参照して、より明確に説明することができる。上述したように、図１Ｃのマルチノードトランザクションは、例えば、６つの独立したトランザクションによって実装され得る。
１．トランザクションノード１１１０は、アセットＡを、トランザクションノード１１４０に転送する。
２．トランザクションノード１１４０は、アセットＤを、トランザクションノード１１１０に転送する。
３．トランザクションノード１１１０は、アセットＤを、トランザクションノード１１３０に転送する。
４．トランザクションノード１１３０は、アセットＣを、トランザクションノード１１１０に転送する。
５．トランザクションノード１１１０は、アセットＣを、トランザクションノード１１２０に転送する。
６．トランザクションノード１１２０は、アセットＢを、トランザクションノード１１１０に転送する。
【００７３】
これらのトランザクションは、決済ステップによって結合されて、単一の決済済みマルチノードトランザクション３３０１になり得る。上記の例を参照すると、
１．アセットＡは、トランザクションノード１１１０からトランザクションノード１１４０に転送される。
２．アセットＤは、トランザクションノード１１４０からトランザクションノード１１１０に転送され、次に、トランザクションノード１１３０に転送される。
３．アセットＣは、トランザクションノード１１３０からトランザクションノード１１１０に転送され、次に、トランザクションノード１１２０に転送される。
４．アセットＢは、トランザクションノード１１２０からトランザクションノード１１１０に転送される。
したがって、以下の決済済みトランザクションが生じる。
１．トランザクションノード１１１０は、アセットＡを、トランザクションノード１１４０に転送する。
２．トランザクションノード１１４０は、アセットＤを、トランザクションノード１１３０に転送する。
３．トランザクションノード１１３０は、アセットＣを、トランザクションノード１１２０に転送する。
４．トランザクションノード１１２０は、アセットＢを、トランザクションノード１１１０に転送する。
これらは全て、単一の決済済みマルチノードトランザクション３３０１として分散型台帳内に記録され得る。理解されるように、この決済ステップのおかげで、マルチノードトランザクション３３０１内で実行される６つの操作と比較して、決済済みマルチノードトランザクション３３０１で実行される操作の数を、４つにまで有利に減らすことが可能である。これにより、トランザクションを分散型台帳内に記録するために必要な計算能力がより効果的に削減され、それによってシステムの計算リソースをより効率的に使用できるようになる。さらに、このアプローチは、各トランザクションノードが、トランザクションノードが開始時より操作することが意図されていたアセットに関連するトランザクションのみを実行するため、ホワイトリスト登録に関連する問題を有利に削減する。例えば、トランザクションノード１１１０は、アセットＣ及びＤを避けつつ、アセットＢを受信してアセットＡを転送する。一方、アセットＣ及びＤは、現在の技術水準に係る逐次的な実装では、トランザクションノード１１１０に一時的に転送されていたものである。
【００７４】
代替として又はこれに加えて、アセットを転送する際にバッファを使用することにより、マルチノードトランザクションがネットワーク３０００によって記録され得る。すなわち、該アセットをあるトランザクションノードから別のトランザクションノードに転送する代わりに、該アセットをトランザクションノードからバッファに転送して、その後にバッファから別のトランザクションノードに転送することができる。これにより、１つのトランザクションノードがトランザクションを実行する相手となるトランザクションノードを識別する必要がある可能性に起因して生じ得る、レギュレーション上の問題を避けることもできる。すなわち、トランザクションがトランザクションノードとバッファとの間でのみ実行されるため、トランザクションノードは、特定のトランザクションノードとのトランザクションを有さない。
【００７５】
上記の例を参照すると、
１．アセットＡは、トランザクションノード１１１０からトランザクションノード１１４０に転送される。
２．アセットＤは、トランザクションノード１１４０からバッファに転送され、次に、トランザクションノード１１３０に転送される。
３．アセットＣは、トランザクションノード１１３０からバッファに転送され、次に、トランザクションノード１１２０に転送される。
４．アセットＢは、トランザクションノード１１２０からトランザクションノード１１１０に転送される。
したがって、上記と同じ決済済みトランザクションを生じるが、ここでは、該トランザクションは、完全に２つのノード間で決済されている。
１．トランザクションノード１１１０は、アセットＡを、トランザクションノード１１４０に転送する。
２．トランザクションノード１１４０は、アセットＤを、トランザクションノード１１３０に転送する。
３．トランザクションノード１１３０は、アセットＣを、トランザクションノード１１２０に転送する。
４．トランザクションノード１１２０は、アセットＢを、トランザクションノード１１１０に転送する。
【００７６】
上記の全ての場合において、分散型台帳が単一のマルチノードトランザクション３３０１のみを記録できるようにすることによって、ネットワーク３０００のリソースが、複数のトランザクションを記録する必要がある従来技術よりも効率的に使用される。
【００７７】
方法４０００は、マルチノードトランザクション識別器３３００，６３００によってマルチノードトランザクション３３０１を送信するステップＳ４５００をさらに含む。いくつかの実施形態では、送信ステップＳ４５００は、マルチノードトランザクション３３０１を、ステップＳ４２００においてマルチノードトランザクションをリクエストしたトランザクションノード１１１０−１１４０へと送信するステップを含む。代替の実施形態では、マルチノードトランザクション３３０１は、該マルチノードトランザクションに関与する全てのノードへと送信され、それによって各ノードが該マルチノードトランザクションを分散型台帳内にさらに記録できるようにされ得る。
【００７８】
上記の説明から明らかなように、マルチノードトランザクション識別器３３００は、台帳計算ノード２２１０−２２２０に対して、マルチノードトランザクション３３０１を分散型台帳内に記録するよう指示してはいない。逆に、マルチノードトランザクション識別器３３００は、マルチノードトランザクション３３０１を作成した後、マルチノードトランザクション３３０１のみを１つ以上のトランザクションノードへと送信する。このことは、マルチノードトランザクションを分散型台帳内に記録する決定がトランザクションノードに委ねられ、したがって、マルチノードトランザクション識別器３３００が存在することによって任意の意図されない操作が避けられるため、有利である。
【００７９】
送信ステップＳ４５００の後、マルチノードトランザクション３３０１を受信する１つ以上のトランザクションノード１１１０−１１４０は、コミットするステップＳ４６００において、台帳計算ノード２２１０−２２２０に対し、コミット済みのマルチノードトランザクション１１３２を発行することによってマルチノードトランザクション３３０１を分散型台帳内に記録するように命令し得る。それによって、マルチノードトランザクション３３０１が効果的に実行される。いくつかの実施形態では、コミットするステップＳ４６００の少なくとも一部が、付録１に記載された関数“RunWarp”によって実装され得る。
【００８０】
このようにして、コミットするステップＳ４５００を実行するトランザクションノード１１１０−１１４０は、少なくとも台帳計算ノード２２１０，２２２０に対してマルチノードトランザクション３３０１を通知し、マルチノードトランザクション３３０１は、台帳計算ノード２２１０−２２２０にて単一のトランザクションとして記録される。
【００８１】
これには、いくつかの利点がある。まず、複数の逐次的トランザクションの代わりに、ただ１つのマルチノードトランザクション３３０１が分散型台帳内に登録されるため、トランザクションを実行するための計算能力と、分散型台帳を格納するためのメモリとの両方に関する計算リソースが削減される。これはまた、有利なことに、ネットワーク３０００の計算リソースを増加させることなく、単位時間あたりにより多くのトランザクション実行されることを可能にする。
【００８２】
さらに、マルチノードトランザクション３３０１がコミットされ、それによって分散型台帳内に単一のトランザクションとして（すなわち、単一のステップで）記録されるため、マルチノードトランザクション３３０１の記録は、成功又は失敗が全体としてのみ起こり得る。すなわち、マルチノードトランザクション３３０１に含まれるトランザクションの一部を完了したが、マルチノードトランザクション３３０１全体が完了されないという可能性が排除される。このことは、マルチノードトランザクション３３０１に含まれるトランザクションチェーンが破損する可能性が避けられるため、特に有利である。
【００８３】
加えて、本発明では、マルチノードトランザクション３３０１に結合されるサプライは、それぞれ２つのアセットを含むことができる。これにより、有利なことに、上述の決済操作が可能になり、該決済操作によって、分散型台帳内で実行及び記録される必要があるトランザクションの数が減少する。
【００８４】
したがって、このアプローチのおかげで、少なくとも３つの異なるタイプのノード、すなわち、トランザクションノード１１１０−１１４０、台帳計算ノード２２１０−２２２０及びマルチノードトランザクション識別器３３００が存在する分散型台帳ネットワークを実装することが可能になる。これらのノードは、それぞれ異なる特性を有する。すなわち、台帳計算ノード２２１０−２２２０は、分散型台帳の計算及び場合により記録を担当する。トランザクションノード１１１０−１１４０は、分散型台帳内に記録されるトランザクションを実行する。マルチノードトランザクション識別器３３００は、それ自体はいかなるトランザクションも実行できず、そのため、いかなる分散型台帳の変更も指示することはできない。さらに、マルチノードトランザクション識別器３３００はまた、分散型台帳の計算も担当できない。一方、マルチノードトランザクション識別器３３００は、トランザクションノード１１１０−１１４０によって発行されたいくつかのトランザクションサプライ１１１１−１１４１が効果的に結合されることを可能にし、ネットワークの効率的かつ効果的な操作を可能にして、（そうでなければ可能でとならない）マルチノードトランザクションを可能にする触媒として機能すると同時に、トランザクションノード１１１０−１１４０及び／又は台帳計算ノード２２１０−２２２０による計算リソースの使用を低減する。
【００８５】
本発明の一実施形態では、トランザクションサプライ１１１１−１１４１の一部を形成するアセットは、ハッシュ識別子を含むように定義することができる。本発明の特定の実施形態では、アセットは、３２バイトのデータ構造の形式のハッシュを含む、付録１のコードの“ASSET”構造体として定義され得る。このハッシュは、該アセットの詳細な特性を包含した、外部の格納場所（例えば、データベース内、分散型台帳の外部）におけるデータのフィンガープリント（すなわち、例えば、外部の保存場所におけるデータ認識を可能にする文字列）と解釈され得る。このことは、特にハッシュの作成に数学演算を選択することにより（基礎となるデータが変更されると、異なるハッシュが生じる）、ハッシュが外部データベースのデータが変更されていないことの証明として使用可能であるため、有利である。複数の詳細は、アセットの定義に影響を与えることなく、外部データベースによって定義される任意のサイズをさらに有し得る。すなわち、例えばアセット「木材」については、木材の地理的起源、保管場所及びいくつかの産業的特徴等の複数の詳細が提供され得る。アセット「銀」については、保管場所、純度、インゴットの物理的なサイズ等の複数の詳細が提供される。
【００８６】
このアプローチの利点は、ネットワーク３０００によって維持される必要があるものが、ハッシュが参照する複数の詳細ではなく、アセットに包含されるハッシュのみであることにある。特に、アセットに包含されるハッシュのみが、分散型台帳内に記録される必要がある。アセット内のハッシュの記録は、任意の長さのアセット詳細の記録よりも計算上はるかに効果的であるため、このアプローチのおかげで、ネットワーク３０００のリソースの組み合わせがより効果的に使用される。さらに、いくつかのアセットは、それらを特徴付けるためにそれぞれ異なる量の詳細を有している可能性が高いため、外部データベースに格納された情報を参照するハッシュを使用することにより、分散型台帳内におけるアセットの正式な定義を変更することなく、各アセットに関連付けられている詳細のタイプとサイズをより柔軟にすることができるようになる。
【００８７】
さらに、いくつかの実施形態では、外部データベースで利用可能なアセット詳細の記述が、ネットワーク３０００の任意のユーザによっていつでもアクセス及びコピーされ得る。これにより、有利なことに、それらの詳細の伝播がコピーによって可能となり、その結果、データの分散ストレージが効果的に生成される。したがって、データセットの信頼性が向上する。その理由は、攻撃者が１つ以上のアセットに関連付けられている記述を変更するには、データセットの利用可能な全てのコピーを変更することが必要になるためである。そうした場合であってもなお、結果として生じるハッシュは、台帳内のハッシュとマッチしないことになる。
【００８８】
ハッシュは分散型台帳内に記録されており、かつ、該台帳にコミットされた後にハッシュを変更するための技術的経路が提供されていないため、アセット自体の定義は不変である。しかしながら、いくつかの場合には、アセットの詳細が変更されていた可能性があるため、該ハッシュに関連付けられている詳細を変更する必要があり得る。その例として、銀の保管場所の変更が挙げられる。本発明は、この変更を可能にするが、元のハッシュの修正を可能にすることによってではなく、代わりに、付録１に記載された“AMENDMENT”等の、該台帳内の訂正機能及び訂正記録を用いることによって、変更を可能にする。特に、本発明は、ハッシュが外部データベース上における訂正された記述を参照することを可能にし、それにより、アセット自体について説明した方法と同じ分散された信頼できる方法にて、この訂正が記録及び追跡されることを可能にする。
【００８９】
本発明の一実施形態では、トランザクションサプライ１１１１−１１４１の一部を形成するアセットは、発行者識別子を含むように定義され得る。本発明の特定の実施形態では、アセットは、ネットワーク３０００内におけるノードのアドレスの形式の発行者識別子を含む、付録１のコードの“ASSET”構造体として定義され得る。
【００９０】
概して言えば、発行者識別子の存在によって、アセットを特定の発行者まで保証（又は追跡）することが可能になる。さらに、特定の発行者、すなわち発行者アドレスに関連付けられているキーの保持者のみが、使用可能なアセットのトークンの数を作成又は破棄したり、最終的にアセットの記述を修正したりすることが可能になる。このことは、例えば、マルチノードトランザクションをリクエストするステップＳ４２００において、及び／又は、サプライを識別及び結合するステップＳ４３００において、特定の発行者によって作成されたアセットが選択されるように指定され得るため、本発明の方法において特に有利である。例えば、アセット「金」は、種々異なる金オペレータ等の種々異なる発行者に関連付けられている種々異なる形式で存在し得る。次に、発行者識別子は、マルチノードトランザクション３３０１を識別及び結合する際に評価されるトランザクションサプライを選択する際のフィルタとして使用され得る。その結果、評価されるサプライが少なくなり、それによってマルチノードトランザクション識別器３３００のより効率的な操作が可能になる。
【００９１】
さらに、発行者識別子は、マルチノードトランザクション識別器３３００が、マルチノードトランザクション３３０１を作成する際における特定のトランザクションサプライの選択について、いかなる責務をも回避できることを保証する。換言すれば、類似のアセットであるが２つの異なる発行者からのものであるアセットが、ネットワーク３０００において発行されたトランザクションサプライにおいて利用可能になると仮定すると、マルチノードトランザクション識別器３３００は、どのアセットが結合されてマルチノードトランザクション３３０１となるかについて選択する責務を有することになる。これは、最初の発行者からの１つのアセットが２番目の発行者からの同一のアセットよりも好ましい可能性があるため、選択の責務を推測することに関与し得る。例えば、最初の発行者はより優れた流動性、より確立された操作等を提供し得る。発行者を特定のアセットに関連付けることによって、マルチノードトランザクションに包含されるトランザクションサプライにおいて示される特定のアセットは、必ず特定の発行者からのものである必要があることになり、それによって選択の責務が、マルチノードトランザクション識別器３３００ではなく、トランザクションサプライを発行するノードにシフトされるため、この問題が解決される。
【００９２】
付録１
contract coreledger
{
mapping (bytes32 => uint) public Account;
mapping (uint80 => ASSET) public Asset;
mapping (bytes32 => AMENDMENT) public Amendment;
uint16 public LedgerId;
string public ContractVersion;
string public DocumentDataURI;
uint80 public SupplyLength;
mapping (bytes32 => SUPPLY) public Supply;
uint public DecimalPointer;
/* ###################### Data Structures ###################### */
struct ASSET
{
address Issuer;
bytes32 Hash;
uint256 CreatedOn;
uint256 TotalTokens;
bool BitWise;
}
struct SUPPLY
{
address Owner;
bytes32 ExtReference;
uint80 OfferedAssetID;
uint80 DesiredAssetID;
address DesiredAddress;
uint OpenAmount;
uint ExchangeRate;
bool TakeAll;
uint8 Type;
}
struct AMENDMENT
{
uint80 AssetId;
bytes32 Hash;
uint256 CreatedOn;
}
/* ###################### Initialization ###################### */
function coreledger()
{
LedgerId=1;
ContractVersion="0.7.9";
DecimalPointer=10000000000;
SupplyLength=0;
}
/* ###################### AMENDMENTS ###################### */
function CreateAmendment(uint80 _assetId, uint160 _amendmentId, bytes32 _hash)
{
bytes32 amendmentId = toAmendmentId(_amendmentId,_assetId);
if(msg.sender==Asset[_assetId].Issuer&&Amendment[amendmentId].Hash==0x0)
{
Amendment[amendmentId]=AMENDMENT({
AssetId:_assetId,
Hash:_hash,
CreatedOn:block.number
});
}
}
function GetAmendment(bytes32 _amendmentId) constant returns (uint80 assetId, bytes32 hash, uint createdon)
{
assetId=Amendment[_amendmentId].AssetId;
hash=Amendment[_amendmentId].Hash;
createdon=Amendment[_amendmentId].CreatedOn;
}
/* ###################### ASSET HANDLING ###################### */
function CreateAndActivateAsset(uint80 _assetId, bytes32 _hash, bool _bitWise) returns (bool result)
{
if(Asset[_assetId].Issuer==0x0)
{
Asset[_assetId]=ASSET({
Issuer:msg.sender,
Hash:_hash,
CreatedOn:block.number,
TotalTokens:0,
BitWise:_bitWise
});
result=true;
}
}
function IssueTokens(uint80 _assetId, uint _units) returns (bool result)
{
if(Asset[_assetId].Issuer==msg.sender)
{
bytes32 accountid=toAccountId(msg.sender,_assetId);
Asset[_assetId].TotalTokens+=_units;
Account[accountid]+=_units; 
result=true;
}
}
function DestroyTokens(uint80 _assetId, uint _units) returns (bool result)
{
if(Asset[_assetId].Issuer==msg.sender)
{
bytes32 accountid=toAccountId(msg.sender,_assetId);
if(Account[accountid]>=_units)
{
Asset[_assetId].TotalTokens-=_units;
Account[accountid]-=_units;
result=true;
}
}
}
function HasEnoughTokens(uint80 _assetId,bytes32 _accountid,uint _units) constant returns (bool result)
{
if(Asset[_assetId].Issuer>0x0)
{
if(Account[_accountid]>=_units)
{
result=true;
}
}
}
function TransferTokens(uint80 _assetId,address _receiver,uint _units) returns (bool result)
{
if(_assetId==1 || Asset[_assetId].Issuer>0x0)
{
bytes32 accountIdSender=toAccountId(msg.sender,_assetId);
bytes32 accountIdReceiver=toAccountId(_receiver,_assetId);
if(HasEnoughTokens(_assetId,accountIdSender,_units))
{
Account[accountIdSender]-=_units;
Account[accountIdReceiver]+=_units;
result=true;
}
}
}
/* ###################### SUPPLY ###################### */
function CreateSupply(uint80 _offeredAssetID, uint80 _desiredAssetID, address _desiredAddress, uint _exchangerate, uint _maximumAmount, bytes32 _extReference, bool _takeAll) returns (bytes32)
{
bytes32 _offeredAssetAccountID=toAccountId(msg.sender,_offeredAssetID);
if(_desiredAddress==0x0)
{
_desiredAddress=msg.sender;
}
if(HasEnoughTokens(_offeredAssetID,_offeredAssetAccountID,_maximumAmount))
{
bytes32 _supplyId = toSupplyId(_desiredAssetID, _offeredAssetID, SupplyLength++);
Supply[_supplyId]=SUPPLY({
Owner:msg.sender,
OfferedAssetID:_offeredAssetID,
DesiredAssetID:_desiredAssetID,
DesiredAddress:_desiredAddress,
OpenAmount:_maximumAmount,
ExchangeRate:_exchangerate,
ExtReference:_extReference,
TakeAll:_takeAll,
Type:0
});
return _supplyId;
}
}
function ConsumeSupply(bytes32 _supplyId,uint _inputAmount) internal returns (uint outputAmount, uint80 outputAssetId)
{
outputAmount=0;
outputAssetId=0;
if(Supply[_supplyId].Owner>0x0 && Supply[_supplyId].OpenAmount>0 && Supply[_supplyId].Type==0)
{
bytes32 offeredAssetAccountID=toAccountId(Supply[_supplyId].Owner,Supply[_supplyId].OfferedAssetID);
bytes32 desiredAssetAccountID=toAccountId(Supply[_supplyId].DesiredAddress,Supply[_supplyId].DesiredAssetID);
outputAmount=(_inputAmount*Supply[_supplyId].ExchangeRate/DecimalPointer);
if(outputAmount>0 && 
Account[offeredAssetAccountID]>=outputAmount &&
Supply[_supplyId].OpenAmount>=outputAmount &&
(Supply[_supplyId].TakeAll==false || Supply[_supplyId].TakeAll==true && Supply[_supplyId].OpenAmount==outputAmount))
{
Account[offeredAssetAccountID]-=outputAmount;
Account[desiredAssetAccountID]+=_inputAmount;
Supply[_supplyId].OpenAmount-=outputAmount;
outputAssetId=Supply[_supplyId].OfferedAssetID;
}
else
{
outputAmount=0;
outputAssetId=0;
}
}
}
/* ###################### WARP ###################### */
function StartWARP(bytes32[] _supplyIds, uint _inputAmount) internal returns (uint outputAmount, uint80 outputAssetId)
{
bytes32 CallerPayFromAccountID=toAccountId(msg.sender,Supply[_supplyIds[0]].DesiredAssetID);
if(!HasEnoughTokens(Supply[_supplyIds[0]].DesiredAssetID,CallerPayFromAccountID,_inputAmount))
{
throw;
}
Account[CallerPayFromAccountID]-=_inputAmount;
outputAmount=0;
outputAssetId=Supply[_supplyIds[0]].DesiredAssetID;
for(uint i=0;i<_supplyIds.length;i++)
{
if(Supply[_supplyIds[i]].DesiredAssetID!=outputAssetId)
{
throw;
}
(outputAmount,outputAssetId)=ConsumeSupply(_supplyIds[i],_inputAmount);
if(outputAmount<1)
{
throw;
}
_inputAmount=outputAmount;
}
}
function RunWARP(bytes32[] _supplyIds, uint _inputAmount) returns (bool success)
{
success=false;
uint outputAmount=0;
uint80 outputAssetId=0;
(outputAmount,outputAssetId) = StartWARP(_supplyIds,_inputAmount);
if(outputAmount>0)
{
bytes32 CallerReceiveToAccountID=toAccountId(msg.sender,outputAssetId);
Account[CallerReceiveToAccountID]+=outputAmount;
success=true;
}
else
{
throw;
}
}
/* ###################### ID functions ###################### */
function toAccountId(address _owner, uint80 _assetId) constant returns (bytes32 result) 
{
result=0x0;
uint[] memory temp=new uint[](4);
temp[0]=uint(_owner);
temp[1]=0;
temp[2]=uint(_assetId);
temp[3]=LedgerId;
assembly
{
result:=add(add(mload(add(temp,44)),mload(add(temp,98))),mload(add(temp,128)))
}
}
function toInvoiceId(address _receiverAddress, uint80 _externalId) constant returns (bytes32 result) 
{
return toAccountId(_receiverAddress,_externalId);
}
function toAmendmentId(uint160 _count, uint80 _assetId) constant returns (bytes32 result) 
{
result=0x0;
uint[] memory temp=new uint[](4);
temp[0]=uint(_count);
temp[1]=0;
temp[2]=uint(_assetId);
temp[3]=LedgerId;
assembly
{
result:=add(add(mload(add(temp,44)),mload(add(temp,98))),mload(add(temp,128)))
}
}
function extractBytes32Schematics(bytes32 _input) constant returns(address addressPart,uint80 bigIntPart, uint16 ledgerPart)
{
uint256 tempStorage;
addressPart=0x0;
bigIntPart=0;
ledgerPart=0;
uint[] memory temp=new uint[](3);
temp[0]=0;
temp[1]=uint(_input);
temp[2]=0;
assembly
{
addressPart:=mload(add(temp,52))
}
assembly
{
tempStorage:=mload(add(temp,84))
}
temp[1]=tempStorage;
assembly
{
bigIntPart:=mload(add(temp,42))
tempStorage:=mload(add(temp,74))
}
temp[1]=tempStorage;
assembly
{
ledgerPart:=mload(add(temp,34))
}
}
function toSupplyId(uint80 _assetIdDesired, uint80 _assetIdOffered, uint80 _count) constant returns (bytes32 result) 
{
result=0x0;
uint[] memory temp=new uint[](11);
temp[0]=uint(_assetIdDesired);
temp[1]=0;
temp[2]=1;
temp[3]=0;
temp[4]=uint(_assetIdOffered);
temp[5]=0;
temp[6]=1;
temp[7]=0;
temp[8]=uint(_count);
assembly
{
result:=add(add(add(add(mload(add(temp,54)),mload(add(temp,116))),mload(add(temp,170))),mload(add(temp,232))),mload(add(temp,288)))
}
}
}
【符号の説明】
【００９３】
１１１０−１１４０：トランザクションノード
１１１１−１１４１：トランザクションサプライ
１１３２：コミット済みのマルチノードトランザクション
２０００：ネットワーク
２２１０−２２２０：台帳計算ノード
３０００：ネットワーク
３３００：マルチノードトランザクション識別器
３３０１：マルチノードトランザクション
４０００：電子商取引を実行する方法
Ｓ４１００：トランザクションサプライを発行するステップ
Ｓ４２００：マルチノードトランザクションをリクエストするステップ
Ｓ４３００：サプライを識別するステップ
Ｓ４４００：サプライを結合するステップ
Ｓ４５００：マルチノードトランザクションを送信するステップ
Ｓ４６００：マルチノードトランザクションをコミットさせるステップ
Ｓ５３００：サプライを識別及び結合するステップ
Ｓ５３１０：トランザクションサプライＡの選択
Ｓ５３２０：Ｎ番目のトランザクションサプライＢの選択
Ｓ５３３０：一方側マッチング
Ｓ５３３１：Ｎインデックスの更新
Ｓ５３４０：他方側マッチング
Ｓ５３５０：マッチするトランザクションの結合
Ｓ５３６０：Ｍ番目のトランザクションサプライＣの選択
Ｓ５３７０：片側マッチング
Ｓ５３７１：Ｍインデックスの更新
Ｓ５３８０：他方側マッチング
Ｓ５３９０：マッチするトランザクションの結合
６３００：マルチノードトランザクション識別器
６３１０：識別ユニット
６３３０：結合ユニット
６３２０：通信ユニット
【図１Ａ】
2021506048.tif 000002
【図１Ｂ】
2021506048.tif 000003
【図１Ｃ】
2021506048.tif 000004
【図２】
2021506048.tif 000005
【図３】
2021506048.tif 000006
【図３Ａ】
2021506048.tif 000007
【図３Ｂ】
2021506048.tif 000008
【図３Ｃ】
2021506048.tif 000009
【図３Ｄ】
2021506048.tif 000010
【図３Ｅ】
2021506048.tif 000011
【図４】
2021506048.tif 000012
【図４Ａ】
2021506048.tif 000013
【図４Ｂ】
2021506048.tif 000014
【図４Ｃ】
2021506048.tif 000015
【図４Ｄ】
2021506048.tif 000016
【図４Ｅ】
2021506048.tif 000017
【図５】
2021506048.tif 000018
【図６】
2021506048.tif 000019
【国際調査報告】
2021506048.tif 000020
2021506048.tif 000021