IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ コアレジャー アーゲーの特許一覧

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-05-08
(45)【発行日】2023-05-16
(54)【発明の名称】トランザクションの実行方法
(51)【国際特許分類】
   G06Q 40/04 20120101AFI20230509BHJP
   G06Q 20/38 20120101ALI20230509BHJP
【FI】
G06Q40/04
G06Q20/38 310
【請求項の数】 8
(21)【出願番号】P 2020550902
(86)(22)【出願日】2018-12-07
(65)【公表番号】
(43)【公表日】2021-02-18
(86)【国際出願番号】 EP2018084008
(87)【国際公開番号】W WO2019110813
(87)【国際公開日】2019-06-13
【審査請求日】2021-10-21
(31)【優先権主張番号】17206233.3
(32)【優先日】2017-12-08
(33)【優先権主張国・地域又は機関】EP
(73)【特許権者】
【識別番号】520200274
【氏名又は名称】コアレジャー アーゲー
【氏名又は名称原語表記】CORELEDGER AG
【住所又は居所原語表記】Aeulestrasse 74,9490 Vaduz(LI)
(74)【代理人】
【識別番号】110002734
【氏名又は名称】弁理士法人藤本パートナーズ
(72)【発明者】
【氏名】シュヴァイファー,ヨハネス
(72)【発明者】
【氏名】フョードロヴィクス,イェヴガニス
(72)【発明者】
【氏名】ラツァー,シュテファン
(72)【発明者】
【氏名】ツビンデン,リヒャルト
【審査官】橋沼 和樹
(56)【参考文献】
【文献】国際公開第2016/161073(WO,A1)
【文献】特表2017-504127(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06Q 10/00-99/00
(57)【特許請求の範囲】
【請求項1】
分散型台帳を実装するネットワーク(3000)においてトランザクション(1111-1141)を実行する方法(4000)であって、
前記ネットワーク(3000)は、複数のトランザクションノード(1110-1140)、複数の台帳計算ノード(2210-2220)及び1つのマルチノードトランザクション識別器(3300,6300)を含み、
前記方法は、
複数の前記トランザクションノード(1110-1140)によって、複数のトランザクションサプライ(1111-1141)を発行する(S4100)ステップと、
前記マルチノードトランザクション識別器(3300,6300)によって、少なくとも2つのトランザクションサプライ(1111-1141)を識別する(S4300)と共にマルチノードトランザクション(3301)へと結合する(S4400)ステップと
を含み、
前記識別するステップ(S4300)が、
最初のトランザクションサプライ(X)を選択する(S5310)ステップと、
1つ以上のトランザクションサプライ(Y,Y’)を再帰的に選択及び照合する(S5320-S5340、S5360-S5380)ステップと
を含み、
前記結合するステップ(S4400)が、
前記最初のトランザクションサプライ(X)と前記1つ以上の再帰的にマッチするトランザクションサプライ(Y,Y’)とを結合する(S5350,S5390)ステップ
を含む、方法。
【請求項2】
前記識別するステップ(S4300)の前に、
少なくとも1つのトランザクションノード(1110-1140)によって、前記マルチノードトランザクションをリクエストする(S4200)ステップをさらに含む、請求項1に記載の方法。
【請求項3】
前記マルチノードトランザクション(3301)を、前記マルチノードトランザクションをリクエストする(S4200)前記トランザクションノード(1110-1140)へと送信する(S4500)ステップをさらに含む、請求項2に記載の方法。
【請求項4】
前記結合するステップ(S5350,S5390)が、
前記少なくとも2つのトランザクションサプライを決済するステップ
を含む、請求項1~のいずれか1項に記載の方法。
【請求項5】
前記マルチノードトランザクション(3301)を受信したトランザクションノード(1110-1140)によって、コミット済みマルチノードトランザクション(1132)を前記分散型台帳においてコミットする(S4600)ステップ
をさらに含む、請求項1~のいずれか1項に記載の方法。
【請求項6】
前記コミット済みマルチノードトランザクション(1132)は、前記分散型台帳において単一のトランザクションとして記録される、請求項に記載の方法。
【請求項7】
前記マルチノードトランザクション(3301)は、前記トランザクションノード(1110-1140)間でアセットを転送する際、バッファを使用することによって前記分散型台帳において記録される、請求項又はに記載の方法。
【請求項8】
分散型台帳を実装するネットワーク(3000)からのトランザクション(1111-1141)を結合するためのマルチノードトランザクション識別器(3300,6300)であって、
前記ネットワーク(3000)は、トランザクションサプライ(1111-1141)を発行可能な(S4100)複数のトランザクションノード(1110-1140)及び複数の台帳計算ノード(2210-2220)を含み、
前記マルチノードトランザクション識別器(3300,6300)は、
少なくとも2つのトランザクションサプライ(1111-1141)を識別すると共にマルチノードトランザクション(3301)へと結合する(S4300)ための識別及び結合ユニット(6310)と、
前記マルチノードトランザクション(3301)をトランザクションノードへと送信する(S4500)ための通信ユニット(6320)と
を含み、
前記識別及び結合ユニット(6310)は、
最初のトランザクションサプライ(X)を選択し、
1つ以上のトランザクションサプライ(Y,Y’)を再帰的に選択及び照合し、
前記最初のトランザクションサプライ(X)と前記1つ以上の再帰的にマッチするトランザクションサプライ(Y,Y’)とを結合する
ように構成されている、マルチノードトランザクション識別器(3300,6300)。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、分散型台帳を実装するネットワークにおいてトランザクションを実行する方法に関する。特に、本発明のいくつかの実施形態は、複数のトランザクションサプライが有利な方法で結合されることを可能にし、それによって複数のトランザクションノードが結合されたトランザクションを簡単かつ効果的な方法で実行することを可能にする。
【背景技術】
【0002】
分散型台帳は、ネットワーク内の複数のノードに拡散した、複製及び共有されたデジタルデータの合意に依存する台帳である。分散型台帳は、ノード間のトランザクションを、ノード自体の間における合意によって実行することができる。特に、ノードの一部又は全部は、台帳又はその関連部分における真の状態について、専門の権限のある第三者の助力がなくとも合意に達することができる。この合意は、分散型台帳として保存され、各ノードがいつでもアクセスできるようになる。
【0003】
分散型台帳の既知の形式の1つは、ブロックチェーンシステムである。ブロックチェーンを実装するネットワークは、複数のトランザクションノードと、台帳計算ノード、すなわち複数のブロックチェーン計算ノード(マイナーとも称される)とを含む。それぞれのブロックは、各ブロックチェーン計算ノードによって計算され、ノード間で実行された各トランザクションを含む分散型台帳を格納する。ブロックの計算は、計算集約的なアクティビティになるように設計されている。必要な計算労力と引き換えに、台帳計算ノードには電子通貨の形で報酬が授与される。ブロックチェーンベースの分散型台帳の既知の例としては、たとえば、ビットコインやイーサリアムがある。しかしながら、全ての形式の分散型台帳が、ブロックチェーンを実装するわけではない。他の実装は、例えば、有向非巡回グラフベースとすることができ、これは、例えばIOTA又はハッシュグラフに実装されている。
【0004】
一般に、分散型台帳を実装するネットワークは、トランザクションノードと台帳計算ノードとを含む。台帳計算ノードは、トランザクションノードによってトランザクションリクエスト又はトランザクションサプライを受信し、ある種の数学集約的な計算を実行することによって、それらを台帳に記録する。トランザクションノードは、台帳にいつでもアクセスでき、台帳の作成に必要な計算と比べてかなり単純な計算によって、台帳の有効性を独立してチェックできる。
【0005】
分散型台帳を実装するネットワークは、大量の計算リソースと大量のエネルギーを消費し得る。したがって、これらのリソースをより効果的に使用可能にする任意の改善が望まれる。
【0006】
図1Aは、2つのトランザクションノード1110及び1120が、分散型台帳を実装するネットワークにおいてトランザクションを実行することを意図している一般的な状況を概略的に示す。説明を明確にするため、2つのトランザクションノード1110,1120のみが示されているが、他のトランザクションノード及び台帳計算ノードがネットワークの一部であることは明らかであろう。
【0007】
図1Aに示すように、トランザクションノード1110は、アセットAを売却し、引き換えにアセットBを取得することを意図している。換言すれば、トランザクションノード1110は、アセットBを購入し、引き換えにアセットAを提供することを意図している。どのアセットが提供及びリクエストされるかについての指示は、トランザクションサプライ1111に含まれる。すなわち、トランザクションノード1110は、売り手又は買い手と見なすことができ、以下では、状況に応じて、2つの用語を両方とも使用する。もっとも、あらゆる商取引において、一般に、任意のノードが同時に買い手かつ売り手であることは明らかである。同様に、トランザクションノード1120は、トランザクションサプライ1111によって示されるように、アセットBを売却し、引き換えにアセットCを購入することを意図している。
【0008】
トランザクションノード1110,1120は、一般に、分散型台帳を実装するネットワークにおいて対話する機能を備えた、換言すれば、他の電子機器にネットワークを介して接続し、メッセージを送受信する機能を備えた、任意の種類の電子機器として意図される。トランザクションノード1110,1120の例としては、PC又はスマートフォンが使用され得る。様々なノードが互いに通信することを可能にするネットワークの例としては、インターネットが使用され得る。トランザクションサプライ1111,1121は、一般に、ファイル又はデータストリーム等の電子的に保存可能な情報として解釈され得る。これらは、最終的には情報の適切なデコードにより、少なくとも売却されるアセットと取得されるアセットとを示す。
【0009】
図1Aの例では、破線で概略的に示されているように、トランザクションノード1110によってリクエストされた際にトランザクションノード1120がアセットBを提供するが、トランザクションノード1120によるアセットCのリクエストがトランザクションノード1110によるアセットAのオファーとマッチしないため、トランザクションノード1110及び1120はトランザクションを締結できない。
【0010】
図1Bは、図1Aに示した問題に対する可能な解決策を示す。特に、図1Bに見られるように、ここではトランザクションノード1130が、トランザクションサプライ1131を備えたネットワーク内にさらに存在し、このトランザクションサプライ1131に応じて、ノード1130がアセットAの取得と引き換えにアセットCを提供する。図1Bから容易に理解できるように、この構成では、トランザクションノード1110と1120との間のトランザクションは、トランザクションノード1130の存在のおかげで実行可能になる。
【0011】
図1Bに示すようなトランザクションは、各ノード1110-1130が意図されたアセットを他のノードと交換することを可能にすることによって実装され得る。これは、マルチノードトランザクションと称される。すなわち、トランザクションノード1110-1130が、それらの3つのトランザクションサプライをうまくまとめることができると判断した場合、ノード1110は、例えば、アセットAをノード1130に転送することによってプロセスを開始することができ、それによって、引き換えにアセットCを取得する。その後、ノード1110はアセットCをノード1120に転送することができ、それによって、引き換えにアセットBを取得する。
【0012】
しかしながら、そのようなマルチノードトランザクションを実行するための方法には、いくつかの欠点がある。
【0013】
まず、いかなるトランザクションも、関係するトランザクションノード間の信頼を必要とし、トランザクションが電子的に実行される場合には特に必要となる。2つのトランザクションノード1110,1120のみが関係するトランザクションであっても、電子的なトランザクションの実行では、アセットのリアルタイム交換が可能にならないことが非常に多い。したがって、トランザクションノード1120にアセットBを提供すると共にアセットAをリクエストするトランザクションサプライがあるとした場合、トランザクションノード1110は、アセットAをトランザクションノード1120に転送することによってトランザクションを開始できるが、その際、トランザクションノード1120が引き換えにアセットBを転送することを信頼する必要がある。
【0014】
さらに、そのような電子トランザクションが実行されると、それはトランザクションノード間の契約を構成するだけであることが非常に多い。このことは、アセットが電子的に譲渡できない場合、特に該当する。例えば、アセットAが木材かつアセットBが銀であり、いずれも複数の場所において物理的な形態で物理的に保管されている場合、これらのアセットに関係するいかなるトランザクションにおいても、それらのアセットの物理的な移動が必要になる可能性が高く、リアルタイムで実行することができない。このことは、トランザクションノード1110及びトランザクションノード1120が、成功した電子トランザクションに続いて、各トランザクションノードが契約の役割を果たすと共にアセットを新しい所有者へと物理的に移送することを、信頼する必要があることを意味する。
【0015】
図1Bに示すようなトランザクションでは、マルチノードトランザクションに参加するトランザクションノードの数を増やすと、全てのトランザクションノードが相互に信頼することがますます複雑になる。一例として、トランザクションノード1110とトランザクションノード1120とが互いに完全に信頼する場合であっても、それらのトランザクションの前向きな結果は、トランザクションノード1130の信頼性に依存することになる。図1Cに示すように、該マルチノードトランザクションに対してさらなるトランザクションノードが追加されると、このことは明らかにより複雑になる。
【0016】
図1Cに示す例では、トランザクションノード1110と1120との意図されるトランザクションが有効になると同時にトランザクションノード1130と1140とのトランザクションを有効にすることによって、トランザクションノード1110と1120との意図される該トランザクションを完了することが原理的に可能であるものの、このようなマルチノードトランザクションには、他の全てのトランザクションノードの各トランザクションノードの信頼が必要となる。これは、現実の世界では実現が難しく、電子プラットフォームではさらに複雑である。
【0017】
この問題は事実上、電子ネットワークにおけるマルチノードトランザクションがトランザクションノードによって受諾されることを非常に困難にしている。この困難は、関係するトランザクションノードの数に応じてさらに増加する。
【0018】
さらに、図1B及び1Cに示すトランザクションは、トランザクションを一度に1つずつ、逐次的に実行される必要がある。
【0019】
図1Bに示す例に関し、例えば、トランザクションノード1120は、アセットBをトランザクションノード1110に転送し、引き換えにアセットAを受信することによってマルチノードトランザクションを開始すると仮定され得る。トランザクションノード1120はアセットAに関心を持たないが、トランザクションサプライ1131のおかげで、トランザクションノード1130がアセットAに関心を持っていること、それをアセットCと交換しようとしていることを知っている。このアセットCは、トランザクションノード1120が取得することを意図しているものである。
【0020】
したがって、トランザクションを完了するために、トランザクションノード1120は、たとえ一時的のみであっても、アセットAの所有者になる必要がある。このことは、トランザクションノード1120が動作するところの規則によっては、常に許可されるとは限らない。このことは、アセットAを管理する者によっては許可されないことがあり、それによりトランザクションノード1120がアセットAを所有できないことがある。そのような制限は、たとえノード1120が実際にアセットAを所有することについて関心も希望も持っていなくても、このマルチノードトランザクションの正常な実行の妨げになる可能性がある。
【0021】
分散型台帳システムでは、台帳に記録される各トランザクションは、台帳計算ノードに対し、計算リソースを消費することを要求する。計算リソースは限られているため、一般的には、トランザクションの数を可能な限り多く含むことが望ましい。
【0022】
図1Cの例では、ノード1110がマルチノードトランザクションを開始すると仮定すると、逐次的方法を用いた際、マルチノードトランザクションを完了するために必要な計6つのトランザクションについて、以下のトランザクションが台帳に記録される必要がある。
1.トランザクションノード1110は、アセットAを、トランザクションノード1140に転送する。
2.トランザクションノード1140は、アセットDを、トランザクションノード1110に転送する。
3.トランザクションノード1110は、アセットDを、トランザクションノード1130に転送する。
4.トランザクションノード1130は、アセットCを、トランザクションノード1110に転送する。
5.トランザクションノード1110は、アセットCを、トランザクションノード1120に転送する。
6.トランザクションノード1120は、アセットBを、トランザクションノード1110に転送する。
したがって、トランザクションの数を減らし、それによってシステムの実行に必要な計算リソースを減らす方法を提供することが望ましい。
【0023】
さらに、台帳計算ノードによる計算リソースの使用は、通常、トランザクションをリクエストするトランザクションノードによって支払われる。たとえば、イーサリアムでは、トランザクションを要求するトランザクションノードは、台帳計算ノードに対して、ガスと称される電子通貨を支払う必要がある。上記の例では、トランザクションノード1110は、6つのうち3つのトランザクションを台帳内に記録することをリクエストするが、トランザクションノード1120-1140は、それぞれ1つのトランザクションを記録することをリクエストするのみである。したがって、トランザクションノード1110では、トランザクションノード1120-1140と比較して、支払われることになるコストがより高くなり、このことは、トランザクションノード1110がマルチノードトランザクションを開始することを妨げる可能性がある。したがって、トランザクションコストを全てのノード間で均等に分割する方法が望ましいと考えられる。
【0024】
さらに、図1Cの例のようなマルチノードトランザクションでは、トランザクションのチェーンが破綻するリスクがある。すなわち、上記の例示的なチェーンを参照すると、ノード1110が最初の2つのトランザクションを実行してアセットCを保持した後に(このアセットCは本来、ノード1110がノード1120と交換することを意図していたものである)、ノード1120はより優れたトランザクションサプライを発見することや、アセットCがアセットBと交換されるさらに迅速なトランザクションを単に受諾することがある。すなわち、ノード1110がトランザクション1及び3を実行する時までに、トランザクションサプライ1121がもはや有効でなくなり、そのためノード1110には所有する意図の全くなかったアセットCを所有したままになっていることが見られ得る。
【0025】
このリスクは、トランザクションの数が増えた際に高くなり、図1Cに示されているようなマルチノードトランザクションをトランザクションノードによって受諾することが事実上非常に困難になる。このことは、トランザクションノードの数が増えるにつれ、さらに困難になる。
【0026】
この問題の解決策の1つは、トランザクションをより高速化することであり得る。それによって、トランザクションノード1110は、トランザクション1-4が完了する時まで、トランザクションサプライ1121がまだ有効であることについて、より高い確信を持つことができる。しかしながら、単位時間当たりに操作されるトランザクションの数は、トランザクションノード1110によって必ずしも制御可能ではないパラメータである。さらに、時間当たりのトランザクション数が増加すると、一般的に、台帳計算ノードがその計算能力を向上させることを要求され、それによって分散型台帳のコスト及びエネルギー消費が増加することになる。
【0027】
図1Cに示すもののようなマルチノードトランザクションへの現在のアプローチにおけるもう1つの問題は、図2より理解され得る。
【0028】
図2は、現在の技術水準に係る、分散型台帳を実装するネットワーク2000において交換される通信を概略的に示す。一例として、ネットワーク2000は、4つのトランザクションノード1110-1140及び2つの台帳計算ノード2210-2220を含む。理解されるように、トランザクションサプライ1111-1141が交換されることにより、全てのトランザクションノード1110-1140及び全ての台帳計算ノード2210-2220が全ての可能なトランザクションサプライ1111-1141を認識している状況が作り出される。
【0029】
このとき、各トランザクションノードは、可能な全てのトランザクションサプライ1111-1141を評価し、図1Cに概略的に示すようなマルチノードトランザクション候補を認知する。4つのトランザクションノード1110-1140及び4つのトランザクションサプライ1111-1141しかない状況であれば、このことはまだ可能であるかもしれない。しかしながら、トランザクションノード及びトランザクションサプライの数が増加すると、それらは数百万又は数十億に達する可能性があり、マルチノードトランザクション候補を認識するために単一トランザクションノードのそれぞれにおいて必要とされる計算リソースが大幅に増加する。このことは、各トランザクションノードがそのようなマルチノードトランザクションを個別に識別することがさらに要求され、それによって必要とされる計算リソースが大幅に増加するため、非常に非効率的である。
【0030】
そのため、上記の問題は、分散型台帳を実装するネットワークにおけるマルチノードトランザクションの実行を妨げる。
【0031】
したがって、本発明の目的は、上記の欠点の少なくとも1つを克服又は低減する、分散型台帳を実装するネットワークにおいてトランザクションを実行する方法を提供することである。
【発明の概要】
【0032】
本発明は、概して、マルチノードトランザクション識別器が、ネットワークに追加されて可能なマルチノードトランザクションを識別するように操作される、というコンセプトに依拠している。これによれば、該マルチノードトランザクション識別器のみがトランザクションサプライを評価してそれらの間の可能なマルチノードトランザクションを計算しているため、有利なことに、各ノードで計算リソースを使用する必要がなくなる。また、このことは、有利なことに、該マルチノードトランザクション識別器が以前の決定の結果を複数のマルチノードトランザクションのために再利用することをも可能にする。
【0033】
さらに、いくつかの実施形態では、マルチノードトランザクション識別器は、2つ以上のトランザクションサプライ、好ましくは3つ以上のトランザクションサプライを単一のマルチノードトランザクションへと結合する、マルチノードトランザクションを計算することができる。これにより、マルチノードトランザクションに関与するノード及びトランザクションの数とは関係なく、分散型台帳に記録されることが必要なトランザクションの数を1つに減らすことができる。そうすることにより、計算リソース、特に台帳計算ノードの計算リソースが、より効率的に使用される。
【0034】
さらに、いくつかの実施形態では、単一のマルチノードトランザクションのみが分散型台帳に記録されるため、上述のような複数の続いて起こるトランザクションに関連する欠点も克服される。
【0035】
本発明の実施形態は、特に、分散型台帳を実装するネットワークにおいてトランザクションを実行する方法に関し、ネットワークは、複数のトランザクションノード、複数の台帳計算ノード及び1つのマルチノードトランザクション識別器を含み、該方法は、複数のトランザクションノードによって、複数のトランザクションサプライを発行するステップと、マルチノードトランザクション識別器によって、少なくとも2つのトランザクションサプライを識別すると共にマルチノードトランザクションへと結合するステップとを含む。
【0036】
いくつかの実施形態では、識別するステップの前に、少なくとも1つのトランザクションノードによって、マルチノードトランザクションをリクエストするステップをさらに含み得る。
【0037】
いくつかの実施形態では、マルチノードトランザクションを、マルチノードトランザクションをリクエストするトランザクションノードへと送信するステップをさらに含み得る。
【0038】
いくつかの実施形態では、識別するステップが、最初のトランザクションサプライを選択するステップと、1つ以上のトランザクションサプライを再帰的に選択及びマッチングするステップとを含み、結合するステップが、最初のトランザクションサプライと1つ以上の再帰的にマッチするトランザクションサプライとを結合するステップを含み得る。
【0039】
いくつかの実施形態では、結合するステップが、少なくとも2つのトランザクションサプライを決済するステップを含み得る。
【0040】
いくつかの実施形態では、マルチノードトランザクションを受信したトランザクションノードによって、コミット済みマルチノードトランザクションを分散型台帳においてコミットするステップをさらに含み得る。
【0041】
いくつかの実施形態では、コミット済みマルチノードトランザクションは、分散型台帳において単一のトランザクションとして記録され得る。
【0042】
いくつかの実施形態では、マルチノードトランザクションは、トランザクションノード間でアセットを転送する際、バッファを使用することによって分散型台帳において記録され得る。
【0043】
本発明のさらなる実施形態は、分散型台帳を実装するネットワークからのトランザクションを結合するためのマルチノードトランザクション識別器に関することがあり、ネットワークは、トランザクションサプライを発行可能な複数のトランザクションノード及び複数の台帳計算ノードを含み、該マルチノードトランザクション識別器は、少なくとも2つのトランザクションサプライを識別すると共にマルチノードトランザクションへと結合するための識別及び結合ユニットと、マルチノードトランザクションをトランザクションノードへと送信するための通信ユニットとを含む。
【図面の簡単な説明】
【0044】
図1A図1Aは、現在の技術水準に係る、ネットワークにおいてトランザクションを実行するための方法を概略的に示す。
図1B図1Bは、現在の技術水準に係る、ネットワークにおいてトランザクションを実行するための方法を概略的に示す。
図1C図1Cは、現在の技術水準に係る、ネットワークにおいてトランザクションを実行するための方法を概略的に示す。
図2図2は、現在の技術水準に係る、分散型台帳を実装するネットワークにおいて交換されるトランザクションサプライメッセージを概略的に示す。
図3図3は、本発明の実施形態に係る、トランザクションを実行するためのネットワーク3000を概略的に示す。
図4図4は、本発明の実施形態に係る、トランザクションを実行するための方法4000を概略的に示す。
図3A図3Aは、ネットワーク3000において種々異なる時点で交換されるいくつかの通信を概略的に示す。
図4A図4Aは、方法4000のどのステップが、図3Aの種々の時点で実行されているかを概略的に示す。
図3B図3Bは、ネットワーク3000において種々異なる時点で交換されるいくつかの通信を概略的に示す。
図4B図4Bは、方法4000のどのステップが、図3Bの種々の時点で実行されているかを概略的に示す。
図3C図3Cは、ネットワーク3000において種々異なる時点で交換されるいくつかの通信を概略的に示す。
図4C図4Cは、方法4000のどのステップが、図3Cの種々の時点で実行されているかを概略的に示す。
図3D図3Dは、ネットワーク3000において種々異なる時点で交換されるいくつかの通信を概略的に示す。
図4D図4Dは、方法4000のどのステップが、図3Dの種々の時点で実行されているかを概略的に示す。
図3E図3Eは、ネットワーク3000において種々異なる時点で交換されるいくつかの通信を概略的に示す。
図4E図4Eは、方法4000のどのステップが、図3Eの種々の時点で実行されているかを概略的に示す。
図5図5は、本発明の実施形態に係る、トランザクションサプライ識別及び結合ステップ5300を概略的に示す。
図6図6は、本発明の実施形態に係る、マルチノードトランザクション識別器6300を概略的に示す。
【発明を実施するための形態】
【0045】
以下では、本発明のいくつかの実施形態について説明する。これらの実施形態は、本出願の保護範囲を理解するために提供されており、該保護範囲は特定の実施形態によって限定されるものでなく、特許請求の範囲によって定義されることは、当業者には明らかであろう。
【0046】
さらに、本発明が任意の種類の分散型台帳技術に適用可能であることは明らかであろう。一部の文節では、理解を明確にするために、ブロックチェーンベースの分散型台帳技術を含む実装を参照し、他の一部の文節では、そのようなブロックチェーンベースの分散型台帳技術の例として、イーサリアムと称される特定の利用可能なプラットフォームが提供される。しかしながら、それらの文節は、特定の実施例を通じて本発明をよりよく理解するために、及び/又は、それらの特定の実施形態の文脈で実行される際における本発明の特定の利点を説明するために提供されることは明らかであろう。しかしながら、本発明は、そのような特定の実施形態には限定されない。
【0047】
図3は、本発明の実施形態に係る、トランザクションを実行するためのネットワーク3000を概略的に示す。説明を明確にするために、ノード間の相互接続が示されることなくノードのみが示されていることは明らかであろう。ネットワーク3000は、マルチノードトランザクション識別器3300が存在するため、ネットワーク2000とは異なる。概して、マルチノードトランザクション識別器3300は、ネットワーク3000における少なくとも1つの他のノードと通信し、それによってトランザクションサプライ1111-1141に基づいて可能なマルチノードトランザクションを識別することが可能な、ネットワーク3000のノードと見なすことができる。いくつかのさらなる実施形態では、マルチノードトランザクション識別器3300はさらに、複数のトランザクションサプライを結合してマルチノードトランザクション3301とし、該マルチノードトランザクション3301を1つ以上のノードに送信することができる。
【0048】
特に、いくつかの実施形態では、マルチノードトランザクション識別器3300は、以下の例にて説明するように、トランザクションサプライ1111-1141を直接トランザクションノード1110-1140から受け取ることができる。代替として又はこれに加えて、いくつかの実施形態では、マルチノードトランザクション識別器3300は、例えば、1つ以上の台帳計算ノード2210-2220からトランザクションサプライ1111-1141を引き出すことによって、トランザクションサプライ1111-1141を分散台帳から引き出すことができる。前者のアプローチの利点の1つは、マルチノードトランザクション識別器3300に、トランザクションサプライ1111-1141が迅速に通知されることである。後者のアプローチの利点の1つは、マルチノードトランザクション識別器3300によって評価されるトランザクションサプライ1111-1141が、既に台帳に記録されていることである。
【0049】
マルチノードトランザクション識別器3300は、ファイル等の電子データを受信し、受信した該データを加工し、加工したデータを送信することが可能な任意の電子機器によって実装され得る。例示的な実装として、マルチノードトランザクション識別器3300は、汎用コンピュータ又はPCによって実装され得る。
【0050】
図6は、本発明の実施形態に係る、マルチノードトランザクション識別器6300を概略的に示す。このマルチノードトランザクション識別器6300は、マルチノードトランザクション識別器3300の可能な特定の実装を表している。特に、マルチノードトランザクション識別器6300は、ネットワーク3000からのトランザクションサプライ1111-1141を結合するように構成され、ここで、ネットワーク3000は、トランザクションサプライ1111-1141を発行可能な複数のトランザクションノード1110-1140と、複数の台帳計算ノード2210-2220とを含む。より具体的には、マルチノードトランザクション識別器6300は、結合してマルチノードトランザクションを形成可能な複数のトランザクションサプライを識別するための識別ユニット3610と、少なくとも2つのトランザクションサプライ1111-1141、好ましくは3つ以上のトランザクションサプライ1111-1141を結合して、マルチノードトランザクション3301とするための結合ユニット6330と、マルチノードトランザクション3301を送信し、通常、複数のトランザクションノード1110-1140及び/又は複数の台帳計算ノード2210-2220と通信するための通信ユニット6320とを備える。
【0051】
より具体的には、通信ユニット6320は、ネットワーク3000によって指定されたプロトコルを用いて通信可能な任意の電子機器であり得る。例えば、ネットワーク3000がインターネットである場合、通信ユニット6320は、モデム又は同様のものであり得る。識別ユニット6310及び結合ユニット6330は、それぞれ独立して、それぞれの動作に必要なメモリを備えたCPUであり得、それらは好ましくは、以下にて説明する方法4000を実行可能、又は、以下の附属書1に添付するコードの少なくとも一部によって正式に規定される方法を実行可能である。
【0052】
マルチノードトランザクション識別器3300の存在のおかげで、これらのトランザクションは、ノードにとっての容易さを改善して、かつ、トランザクションノード1110-1140及び台帳計算ノード2210-2220の計算リソースを削減して実行することができる。概して、マルチノードトランザクション識別器3300は、マルチノードトランザクション3301の中央集中方式の識別を可能にして、各ノードの識別操作の実行を緩和する。さらに、複数のトランザクションの代わりに、結合されたマルチノードトランザクションを記録するだけでよいため、該ネットワークでは必要な操作の量が削減される。このようにして、ネットワーク3000は、同等の数の計算リソースを備えたネットワーク2000よりも多くの機能を実装することができる。
【0053】
図4は、本発明の実施形態に係る、トランザクションを実行するための方法4000を概略的に示す。特に、方法4000は、ネットワーク3000における複数のトランザクションサプライ1111-1141に基づいてマルチノードトランザクション3301を識別できる点で有利である。より具体的には、方法4000は、トランザクションサプライ1111-1141をトランザクションノード1110-1140によって発行するステップS4100を含む。該ステップでは、トランザクションノード1110-1140のうち任意のものが、任意の数のトランザクションサプライ1111-1141を発行することができる。トランザクションサプライ1111-1141の発行は、新たに利用可能なトランザクションサプライをネットワーク3000に通知することをトランザクションノード1110-1140に行わせることが可能な任意の方法にて実行され得る。そのような方法は、例えば、図3A-3Cに示されるように、新たに利用可能なトランザクションサプライをネットワーク3000へとブロードキャストすることが挙げられる。代替として又はこれに加えて、他の実施形態では、トランザクションノード1110-1140は、新たに利用可能なトランザクションサプライに関する情報を台帳計算ノード2210-2220にのみ送信してもよい。通常、発行ステップS4100の実装では、トランザクションサプライ1111-1411が発行され、それによって分散型台帳に記録されるべきであることについて、台帳計算ノード2210-2220に通知することをトランザクションノード1110-1140に行わせることが可能な任意のものが実装され得る。本発明の一実施形態では、発行ステップS4100の少なくとも一部は、付録1のコードに記載される関数“CreateSupply”によって実装することができる。特に、関数“CreateSupply”は、ステップS4100のサプライ作成部分を実装するために使用することができ、このとき、さらなる関数が、作成されたサプライをネットワークに送信して該サプライを分散型台帳に記録するために使用され得る。
【0054】
トランザクションサプライ1111-1141は、トランザクションサプライを分散型台帳内に格納できるようにする任意の方法にて表すことができる。ブロックチェーンベースのスマートコントラクトシステム(例えば、イーサリアム等)に関連する特定の実施形態では、トランザクションサプライ1111-1141は、トランザクションノード1110-1140からのリクエストを含むファイル又はデータストリームとして実装され得る。ここで、該リクエストは、新たなトランザクションサプライを作成するためのスマートコントラクトの関数の1つを実行するためのものであり、トランザクションサプライ1111-1141内に含まれるアセットを定義する入力を伴う。スマートコントラクト関数の実際の実行は、台帳計算ノード2210-2220(イーサリアムでは、マイナーとも称される)によって行われ、結果としてスマートコントラクト自体の変数が変更されるため、該トランザクションサプライがスマートコントラクト内へと効率的に記録される(すなわち、該トランザクションサプライが分散型台帳内へと効率的に記録される)。
【0055】
図3A-3Cにおける例として、トランザクションサプライ1111-1141をネットワーク3000に発行する、トランザクションノード1110-1140についての3つの発行ステップS4100を示す。図示の例において見られるように、ネットワーク3000における全てのノードに、トランザクションサプライ1111-1141が到達しているが、必ずしも常にそうであるとは限らない。特に、トランザクションサプライ1111-1141が少なくとも1つの台帳計算ノード2210-2220に到達して、それによってトランザクションサプライ1111-1141が分散型台帳に記録されることが可能になれば、それで十分である。トランザクションサプライ1111-1141が分散型台帳に記録されると、トランザクションサプライ1111-1141はネットワーク3000の全てのユーザにとって利用可能になる。マルチノードトランザクション識別器3300を含むネットワークの任意のノードは、いつでも分散型台帳にアクセス可能であり、この方法にてトランザクションサプライ1111-1141を回収することができる。
【0056】
従来技術のネットワーク2000では、発行ステップS4100の後に、図2に示す状況が発生することになる。すなわち、各トランザクションノード1110-1140は、複数の可能なマルチノードトランザクションを独立して計算し、図1Cに示されているようなマルチノードトランザクションを締結する可能性を評価する必要が生じる。これに対し、本発明では、マルチノードトランザクション識別器3300の存在のおかげで、ネットワーク3000の計算リソースの使用が大幅に改善される。
【0057】
特に、方法4000は、マルチノードトランザクション識別器3300,6300によって、少なくとも1つのトランザクションサプライ1111-1141、好ましくは2つ以上、より好ましくは3つ以上のトランザクションサプライ1111-1141を識別するステップS4300と、それらを結合してマルチノードトランザクション3301とするステップS4400とをさらに含む。説明を簡潔にするため、及び、識別及び結合ステップが動作するためには、少なくとも1つの発行されたトランザクションサプライ1111-1141が必要であるため、図4は識別及び結合ステップを発行ステップS4100に続くものとして示しているが、本発明はこれに限定されないことは明らかであろう。実際に、いくつかの実施形態では、以下にて説明するように、新たに発行されたトランザクションサプライ1111-1141を、新たな可能なマルチノードトランザクション3301を識別するために定期的に評価することによって、識別及び結合ステップを発行ステップS4100と並行して実行することができる。
【0058】
マルチノードトランザクション識別器6300を参照すると、ステップS4300は、識別ユニット6310によって実行され得る一方で、ステップS4400は、結合ユニット6330によって実行され得る。
【0059】
さらに、いくつかの実施形態では、識別及び結合ステップは、マルチノードトランザクションをリクエストする選択的なステップS4200を用いて特定のマルチノードトランザクションを探索しているトランザクションノード1110-1140の1つによってリクエストされ得る。例えば、図1Cの例を参照すると、トランザクションサプライ1111-1141が発行されると、アセットD及びAに関与するトランザクションサプライを探索しているトランザクションノード1140は、マルチノードトランザクション識別器3300に問い合わせて、要件を満たすマルチノードトランザクションの識別をリクエストしてもよい。この場合、マルチノードトランザクション識別器3300は、トランザクションノード1140に要求されるアセットを識別ステップの入力として受信し、これらの要件に適合するマルチノードトランザクション3301を識別及び結合するようにステップS4300及びS4400を実行する。
【0060】
リクエストステップS4200は選択的なステップであって、方法4000は、可能なマルチノードトランザクション3301をマルチノードトランザクション識別器3300に自律的に識別させて、それぞれのマルチノードトランザクションに属するトランザクションノードに通知し、それによってより先見的な役割を実装することによっても実装され得る。この実装では、1つのマルチノードトランザクション3301に属する複数のトランザクションノードが、それらの1つからの明示的なリクエストを待つのではなく、可能なマルチノードトランザクションが存在することについて同時に通知を受けることができるという利点がある。
【0061】
識別ステップS4300では、マルチノードトランザクション識別器3300,6300は、概して、トランザクションサプライ1111-1141の少なくともいくつか、好ましくはそれら全てを評価し、マルチノードトランザクション(例えば、図1Cに概略的に示されるマルチノードトランザクション)の実行可能性が利用可能であるかどうかを評価する。すなわち、マルチノードトランザクション識別器3300,6300は、現在有効なトランザクションサプライ1111-1141をスキャンし、それらの間のマルチノードトランザクションを識別する。該マルチノードトランザクションが、ステップS4200において特定のトランザクションノードによってリクエストされていた場合、識別及び結合ステップS4300は、該トランザクションノードによって表された要件を入力として使用する。そうでない場合、識別ステップS4300は、可能なマルチノードトランザクションを定期的に識別し、それぞれのトランザクションノードに先見的に通知し得る。
【0062】
識別ステップS4300について、いくつかの代替的な実装が可能であることは当業者には明らかであろう。通常、識別ステップS4300は、図1B及び1Cに例示されるように、マルチノードトランザクションを生成可能なトランザクションサプライを識別する。グラフィカルなアナロジーを使用して、結合ステップS4300は、入力として、複数のトランザクションサプライ1111-1141(これらは、空間内のベクトルと考えることができる)を受信する。これらの各トランザクションサプライは、リクエストされたアセットに対応する入力ポートと、提供されたアセットに対応する出力ポートとを有する。当業者は複数のアルゴリズムを識別することができ、それらのアルゴリズムは、それらのトランザクションサプライが結合されるようにすることができる。すなわち、それらのアルゴリズムは、あるポイントにおける入力ポートが、別のポイントにおける出力ポートとマッチするように、様々なポイントが相互に接続されるようにすることができる。これは、グラフ問題、又は、ジオメトリ問題として解釈され得るものであり、この問題のためにいくつかの既知の代替となる解決策が実装され得るが、このような可能な実装の全てについて詳細に説明することは、本発明の目的ではない。
【0063】
以下では、識別ステップS4300を実施するために、可能なマルチノードトランザクションを識別するためにトランザクションサプライ1111-1141をどのように分析することができるかについての例を説明する。その後、結合ステップS4400を実装するために、これらのトランザクションサプライ1111-1141をどのように結合してマルチノードトランザクション3301とすることができるかについての例が説明される。
【0064】
1つの可能な実施形態についての詳細な説明を提供する目的で、特定の可能な実施、識別及び結合するステップが、図5を参照して説明される。これが可能な実施形態の1つにすぎず、本発明はこの具体的に例示された実施態様に限定されないことは明らかであろう。概して、複数のマルチノードトランザクションを識別してそれらを結合する任意の方法が、該識別及び結合ステップによって実装され得る。
【0065】
図5に示す実施形態では、識別及び結合ステップS5300は、複数の利用可能なサプライの中から最初のトランザクションサプライXを選択するステップS5310と、1つ以上のトランザクションY,Y’を再帰的に選択してマッチングするステップS5320-S5340,S5360-S5380とを含む。いくつかの実施形態では、初期トランザクションサプライXは、ネットワーク3000に対して発行されて分散型台帳内に記録されたトランザクションサプライであってもよく、特に、マルチノードトランザクション識別器が可能なマルチノードトランザクションを先見的に探索する実施形態では、そのようなトランザクションサプライであり得る。代替として又はこれに加えて、いくつかの実施形態では、初期トランザクションサプライXは、ステップS4200でトランザクションノードによってリクエストされたがまだ分散型台帳には記録されていない、単に提案されたトランザクションサプライでしかなくてもよい。
【0066】
概括的に言うと、ステップS5310は、図1Cに示されている例のように、トランザクションサプライ1111-1141のうち任意の1つ、又は、ステップS4200でリクエストされたトランザクションから開始し、マルチノードトランザクションを閉じることが可能なマッチするトランザクションサプライを発見するために、残りのトランザクションサプライ1111-1141を再帰的に評価し、同時に、再帰段階に移る際におけるトランザクションサプライの二重評価を回避すると解釈され得る。より正式には、図5に示す例示的な実施形態は、描写を容易にするため、最初の2つの再帰段階のみを明示的に示しており、どのようにアルゴリズムが任意の所望の再帰深さにまで実装できるかについては、当業者には明らかであろう。
【0067】
より具体的には、ステップS5320では、現在有効なトランザクションサプライ1111-1141から、トランザクションサプライXとは異なるトランザクションサプライBが選択される。ステップS5330では、トランザクションサプライXとトランザクションサプライYとの間で一方側マッチング(one-side matching)が実行される。一方側マッチングとは、実装に応じて、トランザクションサプライXの売却アセットとトランザクションサプライYの購入アセットとがマッチについてチェックされること、又は、その逆であることのいずれかを意味する。XとYとの間にマッチが見つからない場合、該動作はステップS5331へと進行し、該ステップでは、トランザクションサプライXとの片側マッチングのために、次のトランザクションサプライYが(残っている場合には)選択される。XとYの間に一方側マッチが見つかった場合、ステップS5340が実行され、ここでは、他方側マッチング(other-side matching)が実行される。ここで、他方側マッチングは、一方側マッチングの補完的なチェックを示し、したがって、一方側マッチングステップS5330の選択された実装に依存する。例えば、一方側マッチングS5330において、トランザクションサプライXの売却アセットとトランザクションサプライYの購入アセットとがマッチするかどうかがチェックされると仮定すると、他方側マッチングステップS5340では、トランザクションサプライXの購入アセットと売却トランザクションサプライYのアセットとがマッチするかどうかがチェックされる。マッチが見つかった場合、トランザクションサプライX及びYはそれぞれ売却アセット及び購入アセットの両方にマッチするため、ステップS5350において結合され得る。その結果、2つのトランザクションサプライXとYに基づくマルチノードトランザクション3301が生じる。
【0068】
一方で、他方側のマッチングステップS5340が成功しない場合、本方法は、ステップS5360においてX及びYとは異なるトランザクションサプライY’を選択してステップS5330及びS5340をステップS5370及びS5380の形式で再帰的に繰り返すステップによって、再帰パスの1段階深くまで再帰的に進行する。特に、ステップS5360では、この時のチェックがトランザクションサプライYとトランザクションサプライY’の間で実行されることを除いて、一方側マッチングチェックが再び実行される。マッチが見つからない場合、トランザクションサプライY’は、ステップS5331と同様のステップS5371において、トランザクションサプライX及びYとは異なる次の利用可能なサプライに(残っている場合には)置き換えられる。一方側マッチが見つかった場合、該動作は、トランザクションサプライXと(トランザクションサプライYの代わりに)トランザクションサプライY’の間で実行されることを除いてステップS5340と同様に動作する他方側マッチングステップS5380へと進行する。マッチが見つかった場合、マルチノードトランザクション3301は、トランザクションサプライX、Y、Y’に基づいて結合される。見つからない場合、本方法は、当業者には明らかであろう方法にて、さらに深い再帰段階へと進行することができる。
【0069】
この例示的な実装のおかげで、存在する可能性のあるマルチノードトランザクションが識別されることを確実にすることができる。
【0070】
次に、これらの様々なサプライは、組み合わせステップS4400において、いくつかの方法にて結合されて1つ以上のマルチノードトランザクション3301とされ得る。一実施形態では、マルチノードトランザクション3301は、マルチノードトランザクション3301が基づいている単一のトランザクションサプライ1111-1141の集合であり得る。例えば、図1Cの例を参照すると、マルチノードトランザクション3301は、以下の1つ以上のトランザクションサプライの集合であり得る:
1.トランザクションノード1110は、アセットAを、トランザクションノード1140に転送する。
2.トランザクションノード1140は、アセットDを、トランザクションノード1110に転送する。
3.トランザクションノード1110は、アセットDを、トランザクションノード1130に転送する。
4.トランザクションノード1130は、アセットCを、トランザクションノード1110に転送する。
5.トランザクションノード1110は、アセットCを、トランザクションノード1120に転送する。
6.トランザクションノード1120は、アセットBを、トランザクションノード1110に転送する。
【0071】
代替として又はこれに加えて、マルチノードトランザクション3301は、マルチノードトランザクション3301が基づいている単一のトランザクションサプライが識別されることを可能にするポインタを含むことができる。そのようなポインタとしては、例えば、単一のトランザクションサプライに対するユニークな参照(例えば、サプライポインタ、番号又はハッシュ)が挙げられる。
【0072】
さらに代替として又はこれに加えて、結合ステップS4400は、最初のトランザクションサプライX及び1つ以上の再帰的にマッチするトランザクションサプライY、Y’を決済するステップであって、それによって決済済みマルチノードトランザクション3301を取得するステップを含み得る。決済済みマルチノードトランザクション3301とは、マルチノードトランザクション3301に基づいている複数のトランザクションサプライがまず決済されてから結合される、単一のトランザクションを意味する。これは、図1Cを参照して上述した例を参照して、より明確に説明することができる。上述したように、図1Cのマルチノードトランザクションは、例えば、6つの独立したトランザクションによって実装され得る。
1.トランザクションノード1110は、アセットAを、トランザクションノード1140に転送する。
2.トランザクションノード1140は、アセットDを、トランザクションノード1110に転送する。
3.トランザクションノード1110は、アセットDを、トランザクションノード1130に転送する。
4.トランザクションノード1130は、アセットCを、トランザクションノード1110に転送する。
5.トランザクションノード1110は、アセットCを、トランザクションノード1120に転送する。
6.トランザクションノード1120は、アセットBを、トランザクションノード1110に転送する。
【0073】
これらのトランザクションは、決済ステップによって結合されて、単一の決済済みマルチノードトランザクション3301になり得る。上記の例を参照すると、
1.アセットAは、トランザクションノード1110からトランザクションノード1140に転送される。
2.アセットDは、トランザクションノード1140からトランザクションノード1110に転送され、次に、トランザクションノード1130に転送される。
3.アセットCは、トランザクションノード1130からトランザクションノード1110に転送され、次に、トランザクションノード1120に転送される。
4.アセットBは、トランザクションノード1120からトランザクションノード1110に転送される。
したがって、以下の決済済みトランザクションが生じる。
1.トランザクションノード1110は、アセットAを、トランザクションノード1140に転送する。
2.トランザクションノード1140は、アセットDを、トランザクションノード1130に転送する。
3.トランザクションノード1130は、アセットCを、トランザクションノード1120に転送する。
4.トランザクションノード1120は、アセットBを、トランザクションノード1110に転送する。
これらは全て、単一の決済済みマルチノードトランザクション3301として分散型台帳内に記録され得る。理解されるように、この決済ステップのおかげで、マルチノードトランザクション3301内で実行される6つの操作と比較して、決済済みマルチノードトランザクション3301で実行される操作の数を、4つにまで有利に減らすことが可能である。これにより、トランザクションを分散型台帳内に記録するために必要な計算能力がより効果的に削減され、それによってシステムの計算リソースをより効率的に使用できるようになる。さらに、このアプローチは、各トランザクションノードが、トランザクションノードが開始時より操作することが意図されていたアセットに関連するトランザクションのみを実行するため、ホワイトリスト登録に関連する問題を有利に削減する。例えば、トランザクションノード1110は、アセットC及びDを避けつつ、アセットBを受信してアセットAを転送する。一方、アセットC及びDは、現在の技術水準に係る逐次的な実装では、トランザクションノード1110に一時的に転送されていたものである。
【0074】
代替として又はこれに加えて、アセットを転送する際にバッファを使用することにより、マルチノードトランザクションがネットワーク3000によって記録され得る。すなわち、該アセットをあるトランザクションノードから別のトランザクションノードに転送する代わりに、該アセットをトランザクションノードからバッファに転送して、その後にバッファから別のトランザクションノードに転送することができる。これにより、1つのトランザクションノードがトランザクションを実行する相手となるトランザクションノードを識別する必要がある可能性に起因して生じ得る、レギュレーション上の問題を避けることもできる。すなわち、トランザクションがトランザクションノードとバッファとの間でのみ実行されるため、トランザクションノードは、特定のトランザクションノードとのトランザクションを有さない。
【0075】
上記の例を参照すると、
1.アセットAは、トランザクションノード1110からトランザクションノード1140に転送される。
2.アセットDは、トランザクションノード1140からバッファに転送され、次に、トランザクションノード1130に転送される。
3.アセットCは、トランザクションノード1130からバッファに転送され、次に、トランザクションノード1120に転送される。
4.アセットBは、トランザクションノード1120からトランザクションノード1110に転送される。
したがって、上記と同じ決済済みトランザクションを生じるが、ここでは、該トランザクションは、完全に2つのノード間で決済されている。
1.トランザクションノード1110は、アセットAを、トランザクションノード1140に転送する。
2.トランザクションノード1140は、アセットDを、トランザクションノード1130に転送する。
3.トランザクションノード1130は、アセットCを、トランザクションノード1120に転送する。
4.トランザクションノード1120は、アセットBを、トランザクションノード1110に転送する。
【0076】
上記の全ての場合において、分散型台帳が単一のマルチノードトランザクション3301のみを記録できるようにすることによって、ネットワーク3000のリソースが、複数のトランザクションを記録する必要がある従来技術よりも効率的に使用される。
【0077】
方法4000は、マルチノードトランザクション識別器3300,6300によってマルチノードトランザクション3301を送信するステップS4500をさらに含む。いくつかの実施形態では、送信ステップS4500は、マルチノードトランザクション3301を、ステップS4200においてマルチノードトランザクションをリクエストしたトランザクションノード1110-1140へと送信するステップを含む。代替の実施形態では、マルチノードトランザクション3301は、該マルチノードトランザクションに関与する全てのノードへと送信され、それによって各ノードが該マルチノードトランザクションを分散型台帳内にさらに記録できるようにされ得る。
【0078】
上記の説明から明らかなように、マルチノードトランザクション識別器3300は、台帳計算ノード2210-2220に対して、マルチノードトランザクション3301を分散型台帳内に記録するよう指示してはいない。逆に、マルチノードトランザクション識別器3300は、マルチノードトランザクション3301を作成した後、マルチノードトランザクション3301のみを1つ以上のトランザクションノードへと送信する。このことは、マルチノードトランザクションを分散型台帳内に記録する決定がトランザクションノードに委ねられ、したがって、マルチノードトランザクション識別器3300が存在することによって任意の意図されない操作が避けられるため、有利である。
【0079】
送信ステップS4500の後、マルチノードトランザクション3301を受信する1つ以上のトランザクションノード1110-1140は、コミットするステップS4600において、台帳計算ノード2210-2220に対し、コミット済みのマルチノードトランザクション1132を発行することによってマルチノードトランザクション3301を分散型台帳内に記録するように命令し得る。それによって、マルチノードトランザクション3301が効果的に実行される。いくつかの実施形態では、コミットするステップS4600の少なくとも一部が、付録1に記載された関数“RunWarp”によって実装され得る。
【0080】
このようにして、コミットするステップS4500を実行するトランザクションノード1110-1140は、少なくとも台帳計算ノード2210,2220に対してマルチノードトランザクション3301を通知し、マルチノードトランザクション3301は、台帳計算ノード2210-2220にて単一のトランザクションとして記録される。
【0081】
これには、いくつかの利点がある。まず、複数の逐次的トランザクションの代わりに、ただ1つのマルチノードトランザクション3301が分散型台帳内に登録されるため、トランザクションを実行するための計算能力と、分散型台帳を格納するためのメモリとの両方に関する計算リソースが削減される。これはまた、有利なことに、ネットワーク3000の計算リソースを増加させることなく、単位時間あたりにより多くのトランザクション実行されることを可能にする。
【0082】
さらに、マルチノードトランザクション3301がコミットされ、それによって分散型台帳内に単一のトランザクションとして(すなわち、単一のステップで)記録されるため、マルチノードトランザクション3301の記録は、成功又は失敗が全体としてのみ起こり得る。すなわち、マルチノードトランザクション3301に含まれるトランザクションの一部を完了したが、マルチノードトランザクション3301全体が完了されないという可能性が排除される。このことは、マルチノードトランザクション3301に含まれるトランザクションチェーンが破損する可能性が避けられるため、特に有利である。
【0083】
加えて、本発明では、マルチノードトランザクション3301に結合されるサプライは、それぞれ2つのアセットを含むことができる。これにより、有利なことに、上述の決済操作が可能になり、該決済操作によって、分散型台帳内で実行及び記録される必要があるトランザクションの数が減少する。
【0084】
したがって、このアプローチのおかげで、少なくとも3つの異なるタイプのノード、すなわち、トランザクションノード1110-1140、台帳計算ノード2210-2220及びマルチノードトランザクション識別器3300が存在する分散型台帳ネットワークを実装することが可能になる。これらのノードは、それぞれ異なる特性を有する。すなわち、台帳計算ノード2210-2220は、分散型台帳の計算及び場合により記録を担当する。トランザクションノード1110-1140は、分散型台帳内に記録されるトランザクションを実行する。マルチノードトランザクション識別器3300は、それ自体はいかなるトランザクションも実行できず、そのため、いかなる分散型台帳の変更も指示することはできない。さらに、マルチノードトランザクション識別器3300はまた、分散型台帳の計算も担当できない。一方、マルチノードトランザクション識別器3300は、トランザクションノード1110-1140によって発行されたいくつかのトランザクションサプライ1111-1141が効果的に結合されることを可能にし、ネットワークの効率的かつ効果的な操作を可能にして、(そうでなければ可能でとならない)マルチノードトランザクションを可能にする触媒として機能すると同時に、トランザクションノード1110-1140及び/又は台帳計算ノード2210-2220による計算リソースの使用を低減する。
【0085】
本発明の一実施形態では、トランザクションサプライ1111-1141の一部を形成するアセットは、ハッシュ識別子を含むように定義することができる。本発明の特定の実施形態では、アセットは、32バイトのデータ構造の形式のハッシュを含む、付録1のコードの“ASSET”構造体として定義され得る。このハッシュは、該アセットの詳細な特性を包含した、外部の格納場所(例えば、データベース内、分散型台帳の外部)におけるデータのフィンガープリント(すなわち、例えば、外部の保存場所におけるデータ認識を可能にする文字列)と解釈され得る。このことは、特にハッシュの作成に数学演算を選択することにより(基礎となるデータが変更されると、異なるハッシュが生じる)、ハッシュが外部データベースのデータが変更されていないことの証明として使用可能であるため、有利である。複数の詳細は、アセットの定義に影響を与えることなく、外部データベースによって定義される任意のサイズをさらに有し得る。すなわち、例えばアセット「木材」については、木材の地理的起源、保管場所及びいくつかの産業的特徴等の複数の詳細が提供され得る。アセット「銀」については、保管場所、純度、インゴットの物理的なサイズ等の複数の詳細が提供される。
【0086】
このアプローチの利点は、ネットワーク3000によって維持される必要があるものが、ハッシュが参照する複数の詳細ではなく、アセットに包含されるハッシュのみであることにある。特に、アセットに包含されるハッシュのみが、分散型台帳内に記録される必要がある。アセット内のハッシュの記録は、任意の長さのアセット詳細の記録よりも計算上はるかに効果的であるため、このアプローチのおかげで、ネットワーク3000のリソースの組み合わせがより効果的に使用される。さらに、いくつかのアセットは、それらを特徴付けるためにそれぞれ異なる量の詳細を有している可能性が高いため、外部データベースに格納された情報を参照するハッシュを使用することにより、分散型台帳内におけるアセットの正式な定義を変更することなく、各アセットに関連付けられている詳細のタイプとサイズをより柔軟にすることができるようになる。
【0087】
さらに、いくつかの実施形態では、外部データベースで利用可能なアセット詳細の記述が、ネットワーク3000の任意のユーザによっていつでもアクセス及びコピーされ得る。これにより、有利なことに、それらの詳細の伝播がコピーによって可能となり、その結果、データの分散ストレージが効果的に生成される。したがって、データセットの信頼性が向上する。その理由は、攻撃者が1つ以上のアセットに関連付けられている記述を変更するには、データセットの利用可能な全てのコピーを変更することが必要になるためである。そうした場合であってもなお、結果として生じるハッシュは、台帳内のハッシュとマッチしないことになる。
【0088】
ハッシュは分散型台帳内に記録されており、かつ、該台帳にコミットされた後にハッシュを変更するための技術的経路が提供されていないため、アセット自体の定義は不変である。しかしながら、いくつかの場合には、アセットの詳細が変更されていた可能性があるため、該ハッシュに関連付けられている詳細を変更する必要があり得る。その例として、銀の保管場所の変更が挙げられる。本発明は、この変更を可能にするが、元のハッシュの修正を可能にすることによってではなく、代わりに、付録1に記載された“AMENDMENT”等の、該台帳内の訂正機能及び訂正記録を用いることによって、変更を可能にする。特に、本発明は、ハッシュが外部データベース上における訂正された記述を参照することを可能にし、それにより、アセット自体について説明した方法と同じ分散された信頼できる方法にて、この訂正が記録及び追跡されることを可能にする。
【0089】
本発明の一実施形態では、トランザクションサプライ1111-1141の一部を形成するアセットは、発行者識別子を含むように定義され得る。本発明の特定の実施形態では、アセットは、ネットワーク3000内におけるノードのアドレスの形式の発行者識別子を含む、付録1のコードの“ASSET”構造体として定義され得る。
【0090】
概して言えば、発行者識別子の存在によって、アセットを特定の発行者まで保証(又は追跡)することが可能になる。さらに、特定の発行者、すなわち発行者アドレスに関連付けられているキーの保持者のみが、使用可能なアセットのトークンの数を作成又は破棄したり、最終的にアセットの記述を修正したりすることが可能になる。このことは、例えば、マルチノードトランザクションをリクエストするステップS4200において、及び/又は、サプライを識別及び結合するステップS4300において、特定の発行者によって作成されたアセットが選択されるように指定され得るため、本発明の方法において特に有利である。例えば、アセット「金」は、種々異なる金オペレータ等の種々異なる発行者に関連付けられている種々異なる形式で存在し得る。次に、発行者識別子は、マルチノードトランザクション3301を識別及び結合する際に評価されるトランザクションサプライを選択する際のフィルタとして使用され得る。その結果、評価されるサプライが少なくなり、それによってマルチノードトランザクション識別器3300のより効率的な操作が可能になる。
【0091】
さらに、発行者識別子は、マルチノードトランザクション識別器3300が、マルチノードトランザクション3301を作成する際における特定のトランザクションサプライの選択について、いかなる責務をも回避できることを保証する。換言すれば、類似のアセットであるが2つの異なる発行者からのものであるアセットが、ネットワーク3000において発行されたトランザクションサプライにおいて利用可能になると仮定すると、マルチノードトランザクション識別器3300は、どのアセットが結合されてマルチノードトランザクション3301となるかについて選択する責務を有することになる。これは、最初の発行者からの1つのアセットが2番目の発行者からの同一のアセットよりも好ましい可能性があるため、選択の責務を推測することに関与し得る。例えば、最初の発行者はより優れた流動性、より確立された操作等を提供し得る。発行者を特定のアセットに関連付けることによって、マルチノードトランザクションに包含されるトランザクションサプライにおいて示される特定のアセットは、必ず特定の発行者からのものである必要があることになり、それによって選択の責務が、マルチノードトランザクション識別器3300ではなく、トランザクションサプライを発行するノードにシフトされるため、この問題が解決される。
【0092】
付録1
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)))
}
}
}
【符号の説明】
【0093】
1110-1140:トランザクションノード
1111-1141:トランザクションサプライ
1132:コミット済みのマルチノードトランザクション

2000:ネットワーク
2210-2220:台帳計算ノード

3000:ネットワーク
3300:マルチノードトランザクション識別器
3301:マルチノードトランザクション

4000:電子商取引を実行する方法
S4100:トランザクションサプライを発行するステップ
S4200:マルチノードトランザクションをリクエストするステップ
S4300:サプライを識別するステップ
S4400:サプライを結合するステップ
S4500:マルチノードトランザクションを送信するステップ
S4600:マルチノードトランザクションをコミットさせるステップ

S5300:サプライを識別及び結合するステップ
S5310:トランザクションサプライAの選択
S5320:N番目のトランザクションサプライBの選択
S5330:一方側マッチング
S5331:Nインデックスの更新
S5340:他方側マッチング
S5350:マッチするトランザクションの結合
S5360:M番目のトランザクションサプライCの選択
S5370:片側マッチング
S5371:Mインデックスの更新
S5380:他方側マッチング
S5390:マッチするトランザクションの結合

6300:マルチノードトランザクション識別器
6310:識別ユニット
6330:結合ユニット
6320:通信ユニット
図1A
図1B
図1C
図2
図3
図3A
図3B
図3C
図3D
図3E
図4
図4A
図4B
図4C
図4D
図4E
図5
図6