(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-10-17
(54)【発明の名称】分散ブロックチェーントランザクションシステム
(51)【国際特許分類】
G06F 9/46 20060101AFI20221007BHJP
H04L 9/32 20060101ALI20221007BHJP
【FI】
G06F9/46 420
H04L9/32 200Z
G06F9/46 430
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2022507488
(86)(22)【出願日】2020-08-05
(85)【翻訳文提出日】2022-04-01
(86)【国際出願番号】 CA2020051065
(87)【国際公開番号】W WO2021022369
(87)【国際公開日】2021-02-11
(32)【優先日】2019-08-06
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】521155900
【氏名又は名称】ゼットイーユー・テクノロジーズ・インコーポレイテッド
(74)【代理人】
【識別番号】100108453
【氏名又は名称】村山 靖彦
(74)【代理人】
【識別番号】100110364
【氏名又は名称】実広 信哉
(74)【代理人】
【識別番号】100133400
【氏名又は名称】阿部 達彦
(72)【発明者】
【氏名】ユミン・キアン
(72)【発明者】
【氏名】フランソワ・デュマ
(72)【発明者】
【氏名】パトリシア・ポパール-フォルティア
(72)【発明者】
【氏名】ジャン-フィリップ・ボーデ
(57)【要約】
第1のノードを備える第1の参加者ブロックチェーンと、第2のノードを備える第2の参加者ブロックチェーンと、調整者ノードを備える調整者ブロックチェーンとを含む、分散ブロックチェーントランザクションを実行するためのシステムが開示される。分散トランザクションに第1の参加者ブロックチェーン上の第1のトランザクションと第2の参加者ブロックチェーン上の第2のトランザクションとが関与する。調整者ブロックチェーンは、調整者ノードと第1および第2のノードとの間でセキュアなメッセージを転送するように適合され、また、グローバルステータス値を維持し、それによって、第1および第2のトランザクションを、第1および第2のトランザクションが全て一緒にコミットされるかまたはロールバックされ、その結果、システムが分散トランザクションの終わりに一貫した状態を保つように、調整するように適合される。
【特許請求の範囲】
【請求項1】
分散ブロックチェーントランザクションのためのシステムであって、
a)第1のノードを備える第1の参加者ブロックチェーンと、
b)第2のノードを備える第2の参加者ブロックチェーンと、
c)調整者ノードを備える調整者ブロックチェーンと
を備え、
前記分散トランザクションに前記第1の参加者ブロックチェーン上の第1のトランザクションと前記第2の参加者ブロックチェーン上の第2のトランザクションとが関与し、
前記調整者ブロックチェーンが、前記調整者ノードと前記第1のノードおよび前記第2のノードとの間でセキュアなメッセージを転送するように適合され、また、グローバルステータス値を維持し、それによって、前記第1のトランザクションおよび前記第2のトランザクションを、前記第1のトランザクションおよび前記第2のトランザクションが全て一緒にコミットされるかまたはロールバックされ、その結果、前記システムが前記分散トランザクションの終わりに一貫した状態を保つように、調整するように適合される、システム。
【請求項2】
第3のノードを有する第3の参加者ブロックチェーンをさらに備え、前記分散トランザクションに前記第3の参加者ブロックチェーン上の第3のトランザクションがさらに関与し、前記第1のトランザクション、前記第2のトランザクション、および前記第3のトランザクションが全て一緒にコミットされるかまたはロールバックされる、請求項1に記載のシステム。
【請求項3】
前記セキュアなメッセージが、前記調整者ブロックチェーンによって暗号化される、請求項1に記載のシステム。
【請求項4】
第1のユーザに送信された前記メッセージのサブセットがないかリスンする、前記第1の参加者ブロックチェーンにおける第1のメッセージングエージェントをさらに備える、請求項1に記載のシステム。
【請求項5】
第2のユーザに送信された前記メッセージのサブセットがないかリスンする、前記第2の参加者ブロックチェーンにおける第2のメッセージングエージェントをさらに備える、請求項1に記載のシステム。
【請求項6】
前記分散トランザクションが、
a)各ブロックチェーンの一貫性を検出し、リソースを確保するために使用される、第1の「試行」フェーズと、
b)前記分散トランザクションの前記システムへのサブミッションを確認するために使用される、第2の「確認」フェーズと、
c)エラーの場合に実行されたサービスをキャンセルし、前記リソースを解放するために使用される、第3の「キャンセル」フェーズと
を含む、請求項1に記載のシステム。
【請求項7】
前記第1の試行フェーズの実行に成功すると、前記第2の確認フェーズが開始され、前記第2の確認フェーズも成功しなければならない、請求項6に記載のシステム。
【請求項8】
前記第2の確認フェーズが冪等性を満たす、請求項6に記載のシステム。
【請求項9】
前記第3のキャンセルフェーズのオペレーションが冪等性を満たす、請求項6に記載のシステム。
【請求項10】
前記第1の参加者ブロックチェーンがイーサリアムであり、前記第2の参加者ブロックチェーンがEOSである、請求項1に記載のシステム。
【請求項11】
第1のユーザと第2のユーザとの間で、第1のコントラクトを備える第1の参加者ブロックチェーンと、第2のコントラクトを備える第2の参加者ブロックチェーンと、第3のコントラクトを備える調整者ブロックチェーンとを備えたシステムを使用して、分散ブロックチェーントランザクションを実行し、前記分散トランザクションに前記第1の参加者ブロックチェーン上の第1のトランザクションと前記第2の参加者ブロックチェーン上の第2のトランザクションとが関与する、方法であって、
前記調整者ブロックチェーンにおいて、
a)乱数シードC、およびH
C=hash(シードC)として計算されるハッシュH
Cを生成するステップと、
b)前記第1の参加者ブロックチェーンから、H
1=hash(R
A+シードA+H
C)として計算されるハッシュH
1を受信するステップであって、シードAが、前記第1の参加者ブロックチェーンにおいて生成された乱数シードであり、R
Aが、前記第1の参加者ブロックチェーン上で実行された前記第1のコントラクトの結果である、ステップと、
c)前記第2の参加者ブロックチェーンから、H
2=hash(R
B+シードB+H
C)として計算されるハッシュH
2を受信するステップであって、シードBが、前記第2の参加者ブロックチェーンにおいて生成された乱数シードであり、R
Bが、前記第2の参加者ブロックチェーン上で実行された前記第2のコントラクトの結果である、ステップと、
d)ハッシュH
3=hash(H
1+H
2)を計算するステップと、
e)前記第3のコントラクトのコミットファンクションを、シードC、H
1、H
2、およびH
3を用いて実行するステップと、
f)シードA、シードB、シードC、およびハッシュ値H
1、H
2、H
3を収集し、検証するステップと、
g)シードAおよびH
1の検証後に、前記第1の参加者ブロックチェーン上の前記第1のトランザクションをコミットするステップと、
h)シードBおよびH
2の検証後に、前記第2の参加者ブロックチェーンのオペレーションをコミットするステップと
を含む方法。
【請求項12】
前記第1の参加者ブロックチェーンから前記第2の参加者ブロックチェーンへの前記メッセージのサブセットが、前記調整者ブロックチェーンを通過することをさらに含む、請求項11に記載の方法。
【請求項13】
前記第2の参加者ブロックチェーンから前記第1の参加者ブロックチェーンへの前記メッセージのサブセットが、前記調整者ブロックチェーンを通過することをさらに含む、請求項11に記載の方法。
【請求項14】
セキュリティメッセージをそれぞれ、前記第1のユーザおよび前記第2のユーザに送信するステップであって、前記セキュリティメッセージが前記第1のユーザに、前記第2のユーザが、前記第1のコントラクト内の第1の準備フェーズのファンクションおよび前記第2のコントラクト内の第2の準備フェーズのファンクションを実行していることを知らせる、ステップをさらに含む、請求項11に記載の方法。
【請求項15】
第3のコミットフェーズを完了した後に、前記調整者ブロックチェーン上のグローバルトランザクションステータスを修正するステップをさらに含む、請求項11に記載の方法。
【請求項16】
a)前記第1のユーザによって、前記分散トランザクションのタイムアウトを検出するステップと、
b)前記調整者ブロックチェーンから、準備フェーズの結果を取り出すステップと、
c)R
Aの、シードAを用いた検証後に、前記第1の参加者ブロックチェーン上の前記第1のトランザクションをコミットし、そうでない場合は、前記分散トランザクションをロールバックするステップと
をさらに含む、請求項11に記載の方法。
【請求項17】
a)前記第2のユーザによって、前記分散トランザクションのタイムアウトを検出するステップと、
b)前記調整者ブロックチェーンから、準備フェーズの結果を取り出すステップと、
c)R
Bの、シードBを用いた検証後に、前記第2の参加者ブロックチェーン上の前記第2のトランザクションをコミットし、そうでない場合は、前記分散トランザクションをロールバックするステップと
をさらに含む、請求項11に記載の方法。
【請求項18】
第1のユーザと第2のユーザとの間で、第1のコントラクトを備える第1の参加者ブロックチェーンと、第2のコントラクトを備える第2の参加者ブロックチェーンと、第3のコントラクトを備える調整者ブロックチェーンとを備えたシステムを使用して、分散ブロックチェーントランザクションを実行し、前記分散トランザクションに前記第1の参加者ブロックチェーン上の第1のトランザクションと前記第2の参加者ブロックチェーン上の第2のトランザクションとが関与する、方法であって、
前記第1の参加者ブロックチェーンにおいて、
a)前記調整者ブロックチェーンから、乱数シードC、およびH
C=hash(シードC)として計算されるハッシュH
Cを受信するステップと、
b)H
1=hash(R
A+シードA+H
C)として計算されるハッシュH
1を生成するステップであって、シードAが、前記第1の参加者ブロックチェーンにおいて生成された乱数シードであり、R
Aが、前記第1の参加者ブロックチェーン上で実行された前記第1のコントラクトの結果である、ステップと、
c)H
1をシードCと照合し、照合に成功するとシードAをリリースするステップと
を含む方法。
【請求項19】
第1のユーザと第2のユーザとの間で、第1のコントラクトを備える第1の参加者ブロックチェーンと、第2のコントラクトを備える第2の参加者ブロックチェーンと、第3のコントラクトを備える調整者ブロックチェーンとを備えたシステムを使用して、分散ブロックチェーントランザクションを実行し、前記分散トランザクションに前記第1の参加者ブロックチェーン上の第1のトランザクションと前記第2の参加者ブロックチェーン上の第2のトランザクションとが関与する、方法であって、
前記第2の参加者ブロックチェーンにおいて、
a)前記調整者ブロックチェーンから、乱数シードC、およびH
C=hash(シードC)として計算されるハッシュH
Cを受信するステップと、
b)H
2=hash(R
B+シードB+H
C)として計算されるハッシュH
2を生成するステップであって、シードBが、前記第2の参加者ブロックチェーンにおいて生成された乱数シードであり、R
Bが、前記第2の参加者ブロックチェーン上で実行された前記第2のコントラクトの結果である、ステップと、
c)H
2をシードCと照合し、照合に成功するとシードBをリリースするステップと
を含む方法。
【発明の詳細な説明】
【技術分野】
【0001】
本出願は、一般に、ブロックチェーンシステムに関し、詳細には、複数のブロックチェーンを用いる分散ブロックチェーントランザクションシステムに関する。
【背景技術】
【0002】
従来のリレーショナルデータベース管理システムは、典型的には、万一エラーが発生した場合でさえ妥当性を保証すべきトランザクションをサポートする、多くのクラスのアプリケーションに使用されてきた。トランザクションは、同時に発生することのある個々の不可分なオペレーションである。トランザクション処理システムは、トランザクションの同時処理を管理し、データの共有を可能にし、データの完全性を確実なものにし、トランザクション実行の優先順位付けを管理する。
【0003】
したがって、そのようなトランザクションは、原子性、一貫性、独立性、および耐久性(略してACID)と呼ばれる特性のセットによって特徴付けられる。原子性とは、データに対する全ての変更が、それらがあたかも単一のオペレーションであるかのように実施されることを意味する。一貫性とは、トランザクションの開始時およびその終了時に、データが一貫した状態にあることを要するものである。独立性とは、トランザクションの中間状態が、他のトランザクションにとって不可視であることを意味する。耐久性とは、トランザクションの完了が成功した後では、万一システム障害が発生した場合でさえ、データに対する変更が永続し、取り消されないことを意味する。
【0004】
トランザクションをサポートするアプリケーションにおける基本的要件は、1つのオペレーションに複数のデータベースオペレーションが関与し、これらのレコードが全て一緒に成功するかまたは失敗しなければならない、ということである。例えば、ある銀行口座から別の銀行口座への資金の移動は、ある口座からの引落としや別の口座への入金など、複数の変更が関与していてさえ、単一のデータベーストランザクションである。
【0005】
一方、ブロックチェーントランザクションは、コンセンサスを介して機能する。ブロックチェーン技術は、集団参加および参加者間のコンセンサスによって、トランザクションの信頼できるレコードを維持する。ブロックチェーンはしばしば、ノードと呼ばれるネットワーク接続された複数のデバイスによって共同で維持される分散型台帳技術(DLT)と理解され、説明されている。したがって、ブロックチェーンは、分散型データベースシステムと考えることができる。
【0006】
データベースではなくブロックチェーンが関与する分散トランザクションには、いくつかの課題が伴う。本発明の一目的は、確実に、複数のブロックチェーンにわたるトランザクションがコミットするかまたはロールバックし、それによって、複数のブロックチェーンからなるシステムが一貫した状態に保たれて、ACIDテストを満たすようにするために、これらの課題のうちの少なくともいくつかを解決することである。
【0007】
異なるブロックチェーンにわたるオペレーションを調整するいくつかの試みが行われてきた。顕著な一例が、アトミックスワップである。アトミックスワップは最初に、DecredとLitecoinが最初のアトミックスワップを行った2017年9月辺りに注目を集めた。それ以来、同様のいくつかのサービスが、Shapeshift、0x、およびAltcoin.ioなど、非集中型の交換所またはプロトコルによって可能にされてきた。
【0008】
アトミックスワップは、交換所や他の集中型機関(centralized authority)など、信用されたサードパーティを使用することなく、異なる暗号通貨同士の交換を可能にする、自己実行型のスマートコントラクトである。アトミックスワップは、ハッシュタイムロックコントラクト(HTLC)を利用し、ハッシュタイムロックコントラクトでは、指定された期間の満了前に、両パーティがトランザクションの完了を検証する必要がある。トランザクションが時間内に検証されない場合、トランザクションは失敗し、通貨はそれらの元の所有者に戻される。
【0009】
しかし、アトミックスワップには、受け入れられる暗号通貨に対する制約、高額なトランザクション手数料、およびスケーラビリティの欠如を含む、それ自体の問題がある。従来、これらのタイプのトランザクションは、1対1のトランザクション、例えば0.4ビットコインと10イーサ(Ether)の交換に限定されており、典型的には、複数の、すなわち2つよりも多くのブロックチェーンをサポートしていない。さらに、現在のスワップ技術にはスケーラビリティが欠如しており、というのも、現在のスワップ技術では台帳間にコネクタを維持する必要があるためである。これにより、交換所に統合される新たな暗号資産ごとに、指数関数的にますます多くのコネクタおよび関連するサポート資産が生じる。
【0010】
このため、そのようなアトミックスワップの技術およびプロトコルは、流動的で、非集中型の、スケーラブルな、かつブロックチェーンに依存しない解決策を提供することができなかった。
【0011】
トランザクションの原子性および一貫性については、単一のブロックチェーン上のトランザクションがそれら自体の複雑なコンセンサスメカニズムを通じて解決してきた。トランザクションの独立性については、各ブロックチェーンスマートコントラクトの実行がシリアル化されるので、この問題は発生しない。耐久性は、ブロックチェーンが恒久で不変のレコードであるため、満たされる。しかし、多くの異なるタイプのブロックチェーンがある。ブロックチェーン自体の特徴のため、チェーン間相互運用性は実装が困難であり、各ブロックチェーンは、典型的には、そのようなオペレーションをサポートするのに十分なリソースまたはインターフェースを有していない。
【発明の概要】
【発明が解決しようとする課題】
【0012】
したがって、前述の課題のうちの少なくともいくつかを緩和するための、改善されたシステムおよび方法が必要とされている。
【課題を解決するための手段】
【0013】
本発明の実施形態は、全てが同時に成功するかまたは同時に失敗する、相互に関連のない複数のブロックチェーンノードにわたるトランザクションを可能にする、分散ブロックチェーンベースのトランザクションのシステムおよび方法を提供する。
【0014】
本発明の一態様によれば、分散ブロックチェーントランザクションのためのシステムが提供される。システムは、第1のノードを備える第1の参加者ブロックチェーンと、第2のノードを備える第2の参加者ブロックチェーンと、調整者ノードを備える調整者ブロックチェーンとを含み、分散トランザクションに第1の参加者ブロックチェーン上の第1のトランザクションと第2の参加者ブロックチェーン上の第2のトランザクションとが関与し、調整者ブロックチェーンは、調整者ノードと第1および第2のノードとの間でセキュアなメッセージを転送するように適合され、また、グローバルステータス値を維持し、それによって、第1および第2のトランザクションを、第1および第2のトランザクションが全て一緒にコミットされるかまたはロールバックされ、その結果、前記システムが前記分散トランザクションの終わりに一貫した状態を保つように、調整するように適合される。
【0015】
本発明の一態様によれば、第1のユーザと第2のユーザとの間で、第1のコントラクトを備える第1の参加者ブロックチェーンと、第2のコントラクトを備える第2の参加者ブロックチェーンと、第3のコントラクトを備える調整者ブロックチェーンとを備えたシステムを使用して、分散ブロックチェーントランザクションを実行し、分散トランザクションに第1のチェーン上の第1のトランザクションと第2のチェーン上の第2のトランザクションとが関与する、方法であって、調整者ブロックチェーンにおいて、乱数シードC、およびHC=hash(シードC)として計算されるハッシュHCを生成することと、第1の参加者ブロックチェーンから、H1=hash(RA+シードA+HC)として計算されるハッシュH1を受信することであって、シードAが、第1のチェーンにおいて生成された乱数シードであり、RAが、第1のチェーン上で実行された第1のコントラクトの結果である、受信することと、第2の参加者ブロックチェーンから、H2=hash(RB+シードB+HC)として計算されるハッシュH2を受信することであって、シードBが、第2のチェーンにおいて生成された乱数シードであり、RBが、第2のチェーン上で実行された第2のコントラクトの結果である、受信することと、ハッシュH3=hash(H1+H2)を計算することと、第3のコントラクトのコミットファンクションを、シードC、H1、H2、およびH3を用いて実行することと、シードA、シードB、シードC、およびハッシュ値H1、H2、H3を収集し、検証することと、シードAおよびH1の検証後に、第1の参加者ブロックチェーン上の第1のトランザクションをコミットすることと、シードBおよびH2の検証後に、第2の参加者ブロックチェーンのオペレーションをコミットすることとを含む、方法が提供される。
【0016】
本発明の一態様によれば、第1のユーザと第2のユーザとの間で、第1のコントラクトを備える第1の参加者ブロックチェーンと、第2のコントラクトを備える第2の参加者ブロックチェーンと、第3のコントラクトを備える調整者ブロックチェーンとを備えたシステムを使用して、分散ブロックチェーントランザクションを実行し、分散トランザクションに第1のチェーン上の第1のトランザクションと第2のチェーン上の第2のトランザクションとが関与する、方法であって、第1の参加者ブロックチェーンにおいて、a)調整者ブロックチェーンから、乱数シードC、およびHC=hash(シードC)として計算されるハッシュHCを受信することと、b)H1=hash(RA+シードA+HC)として計算されるハッシュH1を生成することであって、シードAが、第1のチェーンにおいて生成された乱数シードであり、RAが、第1のチェーン上で実行された第1のコントラクトの結果である、生成することと、c)H1をシードCと照合し、照合に成功するとシードAをリリースすることとを含む、方法が提供される。
【0017】
本発明の一態様によれば、第1のユーザと第2のユーザとの間で、第1のコントラクトを備える第1の参加者ブロックチェーンと、第2のコントラクトを備える第2の参加者ブロックチェーンと、第3のコントラクトを備える調整者ブロックチェーンとを備えたシステムを使用して、分散ブロックチェーントランザクションを実行し、分散トランザクションに第1のチェーン上の第1のトランザクションと第2のチェーン上の第2のトランザクションとが関与する、方法であって、第2の参加者ブロックチェーンにおいて、調整者ブロックチェーンから、乱数シードC、およびHC=hash(シードC)として計算されるハッシュHCを受信することと、H2=hash(RB+シードB+HC)として計算されるハッシュH2を生成することであって、シードBが、第2の参加者ブロックチェーンにおいて生成された乱数シードであり、RBが、第2の参加者ブロックチェーン上で実行された第2のコントラクトの結果である、生成することと、H2をシードCと照合し、照合に成功するとシードBをリリースすることとを含む、方法が提供される。
【0018】
加えて、トランザクション不正検出メカニズムが開示される。
【0019】
本発明の実施形態をほんの一例として示す図において。
【図面の簡単な説明】
【0020】
【
図1】本発明の一実施形態の典型例である、複数のブロックチェーンにわたる分散トランザクションを実施するシステムの簡易概略図である。
【
図2】複数のノードにわたるマルチフェーズ調整トランザクション(multi-phase coordinated transaction)の簡易概略アクティビティ図である。
【
図3】本発明の例示的な一実施形態による、例示的なシステムデプロイメントアーキテクチャの図である。
【
図4A】ブロックチェーンのチェーン間トランザクションの例示的な実行フローの図である。
【
図4B】ブロックチェーンのチェーン間トランザクションの例示的な実行フローの図である。
【
図5A】コントラクト準備フェーズ(Preparation Phase)のコンセンサスの例示的な失敗プロセスの図である。
【
図5B】コントラクト準備フェーズのコンセンサスの例示的な失敗プロセスの図である。
【
図6】参加者または調整者の不正を検出し回避するための例示的な方法を描いた、フローチャート図である。
【
図7】トランザクションタイムアウトをハンドリングするためのステップを要約したフローチャートである。
【発明を実施するための形態】
【0021】
本発明の少なくともいくつかの実施形態は、従来のデータベース管理システムではなく複数のブロックチェーンが関与する分散ブロックチェーン環境におけるトランザクション管理に関する問題に対処するものである。
【0022】
本発明のさまざまな実施形態についての説明を下で行う。本開示では、「1つの(a)」または「1つの(an)」という語の使用は、本明細書において「備える」という用語とともに使用されるとき、「1つの(one)」を意味することがあるが、それは、「1つまたは複数の」、「少なくとも1つの」、および「1つまたは1つよりも多くの」という意味とも一致する。単数形で表現された任意の要素は、その複数形も包含する。複数形で表現された任意の要素は、その単数形も包含する。「複数」という用語は、本明細書では、1つよりも多くの、を意味し、例えば2つ以上の、3つ以上の、4つ以上の、などを意味する。「上部」、「底部」、「上方に」、「下方に」、「縦に」、および「横に」など、方向を示す用語は、相対的参照を行うことを目的として使用されているにすぎず、任意の物品を使用時にどのように位置付けるべきか、または任意の物品をどのようにアセンブリ内にもしくは環境に対して取り付けるべきかに対する、いかなる制限も示唆するものではない。
【0023】
「備える」、「有する」、「含む」、および「収容する」という用語、ならびにそれらの文法上の変形は、包含的またはオープンエンド形式であり、記載されていない追加の要素および/または方法ステップを除外しない。「本質的に~からなる」という用語は、本明細書において組成、使用、または方法に関連して使用されるとき、追加の要素、方法ステップ、または追加の要素と方法ステップの両方が存在する可能性があるが、これらの追加物が、記載された組成、方法、または使用の機能する様式に実質的に影響を及ぼさない、ということを意味する。「~からなる」という用語は、本明細書において組成、使用、または方法に関連して使用されるとき、追加の要素および/または方法ステップの存在を除外する。
【0024】
加えて、「第1の」、「第2の」、「第3の」などという用語は、説明を目的として使用されているにすぎず、相対的重要性を示すまたは意味するものと解釈することはできない。
【0025】
本発明の説明においては、「取り付けられた」、「リンクされた」、および「接続された」という用語は、別段の明示的な定めおよび制限のない限り、広い意味に解釈すべきである、ということにも留意されたい。例えば、それは固定の接続とすることもでき、あるいは組立て式の接続とすることもでき、あるいは一体に接続することもでき、それはハードワイヤードとすることもでき、あるいはソフトワイヤードとすることもでき、それは直接的に接続されてもよく、仲介物を通じて間接的に接続されてもよい。当業者にとって、本発明における上記用語の具体的な意味は、文脈の中で理解されることが可能である。
【0026】
本開示では、「ブロックチェーン」および「チェーン」という用語は、交換可能に使用されることがある。
【0027】
本発明の実施形態を示す図面において、同一のまたは類似の参照ラベルは、同一のまたは類似の部分に対応する。本発明の説明において、「複数の」の意味は、別段の指定のない限り、2つ以上の、を意味することに留意されたい。「上」、「下」、「左」、「右」、「内側」、「外側」、「前端」、「後端」、「頭部」、「尾部」という用語の方向または位置、すなわち図面内に示す配向または位置的関係は、示されたデバイスまたは要素が特定の配向を有し、特定の配向で構築され、動作されなければならない、ということを示すまたは意味するためのものではなく、単に本発明の説明の便宜を図り、説明を簡易にするためのものであり、したがって、本発明を限定するものとして使用することはできない。
【0028】
トランザクションは、アクティビティに関与する全てのオペレーションを不可分の実行単位に組み込むためのメカニズムを提供する。トランザクションを構成する全てのオペレーションは、全てのオペレーションの実施が成功した場合にのみ、コミットされることが可能であり、オペレーションのいずれかが失敗した場合、これにより、トランザクション全体のロールバックが生じる。簡単に言えば、トランザクションは、「全か無か」のメカニズムを提供する。
【0029】
上で背景技術の中で述べたように、従来のトランザクションは、原子性、一貫性、独立性、および耐久性(ACID)と呼ばれる特性のセットによって特徴付けられる。
【0030】
原子性とは、データに対する全ての変更が、それらがあたかも単一のオペレーションであるかのように実施されることを意味する。
【0031】
一貫性とは、トランザクションの開始時およびその終了時に、データが一貫した状態にあることを要するものである。トランザクションの完了が成功した場合、システム内の全ての変更は正しく適用され、システムは有効な状態にある。トランザクション内でエラーが発生した場合、システム内の全ての変更は自動的にロールバックされ、システムは元の状態に戻る。
【0032】
独立性とは、トランザクションの中間状態が、他のトランザクションにとって不可視であることを意味する。同時環境では、異なるトランザクションが同一データを同時に操作するときに、各トランザクションはそれ自体の完全データ空間(complete data space)を有する。
【0033】
耐久性とは、トランザクションの完了が成功した後では、万一システム障害が発生した場合でさえ、データに対する変更が永続し、取り消されないことを意味する。
【0034】
分散ブロックチェーン環境では、各チェーン内のオペレーションは、オペレーションが前述のACIDテストに準拠するという意味で、トランザクションとみなされてよい。
【0035】
現在、既存のチェーン間トランザクション方式は、トークン転送など、単一のタイプのオペレーションしかサポートしておらず、それらの方式の大多数は、2つのチェーン間の対話しかサポートしていない。2つよりも多くのチェーンが関与するものを含む、より複雑なトランザクションがサポートされていることは、知られていない。
【0036】
例示的な一実施形態では、従来の分散取引環境とは異なりノードが信用されていない複数の異種ブロックチェーンシステムにわたる分散トランザクションの課題に対する解決策が提供される。
【0037】
本実施形態によって提供される解決策には、分散トランザクションメッセージのための信用された伝送メカニズムを提供すること、確実に分散取引ノードオペレーションが信用されるようにすること、分散トランザクションデータの一貫性を確実なものにすること、および分散トランザクション結果の原子性を確実なものにすること、という課題を解決することが関与する。
【0038】
システムアーキテクチャ
例示的なシステムのアーキテクチャの概略ブロック図を
図1に示す。システムは、ブロックチェーンA、B、およびCを含む。独立したブロックチェーンにわたって分散トランザクションオペレーションが実施されるために、分散トランザクションは、各チェーン上のスマートコントラクトを作動させ、各チェーン上のスマートコントラクトオペレーションは同時に成功するかまたは失敗しなければならない。
【0039】
例示的な一解決策は、最初に各チェーン上のスマートコントラクトを変形し、元のワンタイム(one-time)オペレーションを3つのフェーズに分割する、というものである。
【0040】
「準備フェーズ」と呼ばれる第1のフェーズでは、スマートコントラクトに関与する全てのリソースがロックされ、それによって、スマートコントラクトが完全に実行される前に、確実に他のスマートコントラクトまたはユーザがリソースを使用することができないようになる。例えば、トークンが関与する場合、ユーザトークンがユーザアカウントから(中間調整者アカウントなどの)サードパーティセキュリティアカウントに転送され、他のブロックチェーン内のリソースは、リソースをロックされたものとして示すためのタグを使用することによって、リソースロックを完了させることができる。
【0041】
「コミットフェーズ」と呼ばれる第2のフェーズでは、各パーティがそれらのそれぞれに対応する準備フェーズの完了に成功している。最初に、各ノードがコントラクト完了証明書を調整者ブロックチェーン101にサブミットし、調整者は、各チェーン上のプルーフ(proof)を検証して、各チェーンが準備フェーズを完了したことを確認し、その後、各チェーンはコミットフェーズに入ることができる。コミットフェーズは、ロックされたリソースを解放し、スマートコントラクトのロジック要件に従って、対応するトークンまたはデータオペレーションを完了させる。コントラクト関連のリソースは、準備フェーズにおいて中間調整者アカウントに転送されたので、コントラクトは、全てのノード上の準備フェーズ段階が正常に終了したというプルーフを以て、オペレーションを開始する必要がある。それと同時に、コントラクトの実行中にプルーフが検証される必要がある。
【0042】
「ロールバックフェーズ」と呼ばれる第3のフェーズでは、参加者のいずれかが準備フェーズにおいてコントラクト準備フェーズオペレーションの実施に失敗した場合、または任意のノードが誤った証明書を提供した場合、グローバルトランザクションを実施することはできない。関連のあるチェーンが、ロールバックコントラクトを実行し、それにより、ロックされたリソースが解放され、影響を受けた任意のデータの値が、準備フェーズコントラクトの実行前に存在した以前の状態に戻る。
【0043】
確実にコントラクトが中間状態において停止しないようにするために、タイムアウトメカニズムがある。コミットフェーズまたはロールバックフェーズがトリガされないとき、各チェーンユーザは、調整者ブロックチェーン101内のレコードに従って、オペレーション(すなわちコミットまたはロールバック)を実施することができる。
【0044】
トランザクション調整
図2は、複数のノードにわたるマルチフェーズ調整トランザクションの概略アクティビティ図を描いている。トランザクションに複数の参加者があるとき、複数のノードにわたる分散トランザクションの実行を調整するために、サードパーティトランザクション調整者が導入される。各オペレーションについて、対応する肯定応答および/または補償アクションもしくは取り消しアクションを登録するというのが、主旨である。アクティビティは、次の3つのフェーズに分割されてよい。
【0045】
「試行フェーズ」と呼ばれる第1のフェーズは、一貫性を検出し、ビジネスシステムのリソースを確保するため(疑似独立性)に使用される。
【0046】
「確認フェーズ」と呼ばれる第2のフェーズは、ビジネスシステムのサブミッションを確認するために使用される。試行フェーズの実行が成功すると、確認フェーズが開始され、デフォルトの確認フェーズは失敗に終わらない。本実施形態では、試行フェーズが成功する限り、確認フェーズも成功しなければならない。確認フェーズオペレーションは冪等性を満たす。確認フェーズが失敗した場合、再試行が必要となる。
【0047】
「キャンセルフェーズ」と呼ばれる第3のフェーズは、ビジネス実行エラーが検出された状態において、実施されたサービスをキャンセルするために使用され、リソース解放が確保される。キャンセルフェーズオペレーションも冪等性を満たす。
【0048】
一実施形態では、フェーズまたはノードのクラッシュ後に確実にシステムが一貫した状態に留まるようにするために、分散トランザクションモデルは、各ノード内の現在の状態を記録する。調整者ブロックチェーンは、全てのサブチェーンと対話し、調整者ブロックチェーン上にグローバルトランザクションステータスを記録する。グローバルトランザクションの状態と、各サブチェーン上のトランザクションの状態は、一貫していなければならない。各サブチェーンは、ローカルトランザクション実行の状態、およびグローバルトランザクションハッシュコードを記録する。本実施形態では、サブチェーンは互いに通信するのではなく、調整者のみと通信する。
【0049】
確実にチェーン間通信がセキュアかつ信頼できるものとなるように、チェーン間メッセージは調整者ブロックチェーンを通過する。全てのメッセージは、メッセージの送信者によって、受信者の公開鍵、すなわちウォレットアドレスを使用して暗号化される。メッセージを受信した後、受信者はメッセージを、そのウォレット内にある自身の秘密鍵を使用して復号する。したがって、このようにして、受信者および各メッセージの内容が暗号化され、セキュアに転送される、ということが確認され得る。ウォレットの公開鍵はオンチェーンで検証されることが可能であり、一方、秘密鍵は秘匿され、他の誰にも取得することはできない。
【0050】
システムデプロイメントアーキテクチャ
図3は、本開示の一実施形態の典型例であるシステムの、例示的なデプロイメントアーキテクチャを示す概略図である。システムは、調整者ブロックチェーン101、および2つの参加者ブロックチェーン102、103を含む。
【0051】
システムはブロックチェーン102内に、ローカルトランザクションエグゼキュータ113、ユーザMのウォレット111、ユーザMのメッセージエージェント112を含む。
【0052】
システムはまた、ブロックチェーン103内に、ローカルトランザクションエグゼキュータ118、ユーザNのウォレット119、ユーザNのメッセージエージェント120を含む。
【0053】
システムはさらに、ローカルトランザクションコントラクト114、ならびにユーザM、N、およびPそれぞれのアカウント115、116、117を含む。
【0054】
システムはさらに、ローカルトランザクションコントラクト121、ならびにユーザM、N、およびPそれぞれのアカウント122、123、124を含む。
【0055】
システムは、調整者エグゼキュータ127、ユーザPのウォレット125、およびメッセージエージェント126を含む。
【0056】
システムはまた、下で説明するように、ノード104、105、106、107、108、109、および110を含む。
【0057】
調整者ブロックチェーン101は、参加者と調整者との間でセキュリティメッセージを転送するために使用される。調整者ブロックチェーン101はまた、グローバルトランザクションのステータスを記録する。調整者ブロックチェーン101上には、セキュアメッセージコントラクト128およびグローバルトランザクション調整コントラクト129がデプロイされている。ブロックチェーン102は、ローカルコントラクト114を実行するために使用される。ブロックチェーン103は、ローカルコントラクト121を実行するために使用される。
【0058】
ノード104は、ユーザMによってトリガされるローカルトランザクションコントラクトを有する場合があり、ユーザMは、ノード104を通じてブロックチェーンAまたはブロックチェーン102に直接的にアクセスすることができる。例えば、ユーザMからユーザNに10イーサを転送することが望まれる場合、ユーザMはそのコントラクトを起動することが認可されなければならず、というのも、プライベートウォレットはユーザMにしかアクセスされないためである。このノードは、ブロックチェーン102のデータおよびユーザMのウォレットを保持する。ユーザM以外の他のユーザは、ノード104にアクセスできるべきではない。準備フェーズが完了した後、ユーザMは、コントラクトステータスプルーフ、すなわちハッシュ値を、調整者ブロックチェーン101に送信する必要がある。
【0059】
ノード105は、ブロックチェーン102の検証ノードであり、調整者エリア内にデプロイされており、調整者によって、チェーンAまたはブロックチェーン102上でローカル準備フェーズトランザクションが完了したかどうかを検証するように、また対応するエビデンスを抽出するように動作される。コミットフェーズ中、調整者はこのノード105を通じて、ブロックチェーン102またはブロックチェーンAのローカルコントラクトのコミットオペレーションまたはロールバックオペレーションをトリガする。ユーザPが、調整者ユーザとして、このノードを通じてブロックチェーンAのステータスおよびデータを同期する働きをし、ブロックチェーンAのローカルトランザクション完了ステータスを検証し、ブロックチェーンA上のコントラクトオペレーションをトリガする。
【0060】
ノード106は、調整者ブロックチェーン101に属しているが、ユーザMのドメイン内にデプロイされている。ユーザMは、このノードを通じて調整者ブロックチェーンのデータおよびステータスを同期し、他のノードのローカルトランザクションの完了のエビデンスをチェックすることができる。
【0061】
ノード107:チェーン103のコントラクトがノード107をトリガし、ノード107はユーザNのドメイン内にデプロイされている。ユーザNは、このノードのアクセス権を有し、このノードは、ローカルコントラクトをトリガすることができる。
【0062】
ノード108:チェーン103がノード108を検証し、ノード108は、ブロックチェーン103に属しているが、調整者エリア内にデプロイされており、調整者によって、チェーンBまたはブロックチェーン103上でローカル準備フェーズトランザクションが完了したかどうかを検証し、対応するエビデンスを抽出するように動作される。コミットフェーズ中、調整者はノード108を通じて、ブロックチェーンBのローカルコントラクトのコミットオペレーションまたはロールバックオペレーションをトリガする。ユーザPが、調整者ユーザとして、このノードを通じてブロックチェーンBのステータスおよびデータを同期する働きをし、ブロックチェーンBのローカルトランザクション完了ステータスを検証し、ブロックチェーンB上のコントラクトオペレーションをトリガする。
【0063】
ノード109:調整者ブロックチェーン101がノード109を検証し、ノード109は、調整者ブロックチェーン101に属しているが、ユーザNのドメイン内にデプロイされている。ユーザNは、このノードを通じて調整者ブロックチェーン101のデータおよびステータスを同期し、他のノードのローカルトランザクションの完了のエビデンスをチェックすることができる。
【0064】
ノード110:調整者ブロックチェーン101の実行ノードは、調整者ブロックチェーン101に属しており、調整者のドメイン内にデプロイされている。ユーザPが、調整者として、このノードを通じて調整者コントラクトをトリガする働きをし、次いで、ノード106、109が問い合わせできるように、グローバルトランザクションステータスおよびそのエビデンスを調整者ブロックチェーン101に書き込む。
【0065】
ユーザMのウォレット111は、ユーザMの秘密鍵を保存するために使用され、暗号化されたメッセージの伝送を実施するために使用される。
【0066】
ユーザMのメッセージングエージェント112は、いかなる時点においても調整者ブロックチェーン101内にユーザMに送信された暗号化されたメッセージがないかリスンする。メッセージングエージェント112は、暗号化されたメッセージを調整者ブロックチェーン101から受信すると、ウォレット内の秘密鍵対を暗号化する。メッセージが復号され、元の命令に戻され、実行のためにローカルトランザクションエグゼキュータ113に引き渡される。
【0067】
ユーザMのローカルエグゼキュータ113は、受信したアクションの命令を実行し、ブロックチェーンA上のスマートコントラクトを作動させるかもしくは調整者ブロックチェーン101上のグローバルコントラクトステータスをチェックし、またはノード106を通じてローカル実行結果証明書を調整者ブロックチェーン101に対して同期するように、構成される。
【0068】
ブロックチェーンAのローカルトランザクションコントラクト114は、準備、コミット、およびロールバックの3つの部分に分割され、それらはそれぞれ、グローバルコントラクトステータスに従って呼び出される。準備フェーズは、ユーザMによって呼び出される。コミットまたはロールバックは、調整者としての役割を果たすユーザPによって呼び出される。それがタイムアウトした場合、各参加者ユーザによってロールバックが呼び出される。
【0069】
ユーザMのブロックチェーンAのアカウント115、ユーザNのブロックチェーンAのアカウント116、およびユーザPのブロックチェーンAのアカウント117を含む、いくつかのアカウントがある。
【0070】
ユーザNのコマンドエグゼキュータ118は、受信したアクションの命令を実行し、ブロックチェーンB上のスマートコントラクトを作動させるかもしくは調整者ブロックチェーン101上のグローバルコントラクトステータスをチェックし、またはノード109を通じてローカル実行結果証明書を調整者ブロックチェーン101に対して同期するように、構成される。
【0071】
ユーザNのウォレット119は、ユーザNの秘密鍵を格納する。ユーザNが暗号化されたメッセージを受信すると、秘密鍵が復号される。
【0072】
ユーザNのメッセージングエージェント120は、チェーン101によってユーザNに送信された情報がないかリスンし、ユーザNの秘密鍵を呼び出して、情報を復号する。調整者にフィードバックメッセージが送信される必要があるとき、このモジュールは、調整者の公開鍵を取得して、データを暗号化し、それを調整者ブロックチェーン上のメッセージコントラクトに送信する。
【0073】
ブロックチェーンBのローカルトランザクションコントラクト121は、準備、コミット、およびロールバックの3つの部分に分割され、それらはそれぞれ、グローバルコントラクト状態に従って呼び出される。準備部分は、ユーザNによって呼び出される。コミットまたはロールバックは、調整者としての役割を果たすユーザPによって呼び出される。それは、タイムアウトした場合、ロールバックを自動的に呼び出す。
【0074】
ユーザMのブロックチェーンBのアカウント122、ユーザNのブロックチェーンBのアカウント123、およびユーザPのブロックチェーンBのアカウント124を含む、いくつかのさらなるアカウントがある。ユーザPのウォレット125は、ユーザPの秘密鍵を格納する。
【0075】
メッセージエージェント126を使用して、ユーザPのメッセージプロキシが、調整者ブロックチェーン上にユーザPに送信されたメッセージがないかリスンし、暗号化処理および復号処理を実施する。
【0076】
調整者エグゼキュータ127としての役割を果たすユーザPは、調整者ブロックチェーン上のトランザクション調整コントラクトを作動させ、各サブチェーン上の各ノードトランザクションのコミットアクションまたはロールバックアクションを実施する。調整者はまた、各ノードのコントラクト実行エビデンスを取得し、検証する必要がある。
【0077】
ブロックチェーンのチェーン間トランザクション
図4は、ブロックチェーンのチェーン間トランザクションの例示的な実行フローを描いている。一例を使用して、ブロックチェーンのチェーン間トランザクションの実行フローを示す。ユーザMが1イーサを第1のブロックチェーンA(例えばイーサリアム(ETHEREUM)(商標)チェーン)上に有しており、ユーザNが10EOSを第2のブロックチェーンB(すなわちEOS(商標)チェーン)上に有していると仮定されたい。ユーザらは、1イーサと10EOSを交換したい。このチェーン間トランザクションは、次の2つのトランザクションをそれぞれ、イーサリアムチェーンおよびEOSチェーン上で実施する必要がある:第1のイーサリアムブロックチェーン上で、ユーザMがユーザNに1イーサを転送する。EOSチェーン上で、ユーザNがユーザMに10EOSを転送する。
【0078】
上で述べたように、
図4は、いくつかのステップまたは段階が関与するブロックチェーンのチェーン間トランザクションの実行フローを描いている。
【0079】
ステップ1において、ユーザPが分散トランザクションを開始する。これは、分散トランザクションを開始するためにユーザがメッセージをユーザPに送信することとすることもできる。
【0080】
ステップ2において、ユーザPが乱数シードを生成し、シードハッシュ値を計算する。ユーザPは、調整者ブロックチェーン101上での分散トランザクションの開始を記録し、シードおよびハッシュ値を記録する。
【0081】
ステップ3において、ユーザPが、セキュリティメッセージをそれぞれ、ユーザMおよびユーザNに送信する。メッセージはユーザMに、ユーザNがイーサリアムチェーン上のコントラクトA内の準備フェーズファンクションおよびEOSチェーン上のコントラクトB内の準備フェーズファンクションを実行していることを知らせる。コントラクトパラメータは、ユーザPのシードのハッシュ値、および関連のトランザクションパラメータである。
【0082】
ステップ4において、ユーザMがこの情報を受信する。ユーザMは、調整者ブロックチェーン内でグローバルトランザクションが開始したこと、およびパラメータが正しいことを検証する。
【0083】
ステップ5において、ユーザMが、イーサリアム準備フェーズにおいて転送トランザクションを実施し、ユーザMのウォレット内の1イーサを調整者としての役割を果たすユーザPに転送し、乱数を生成し、その乱数のハッシュ値を計算し、そのハッシュ値をパラメータとして使用する。この情報が、イーサリアムコントラクトパラメータに渡される。ハッシュ値は、イーサリアムチェーン上のコントラクト内に記録される。
【0084】
ステップ6において、ユーザMは、コントラクトの実行が成功すると、調整者ブロックチェーン上の分散取引コントラクトを開始し、ローカル準備フェーズトランザクション結果を調整者ブロックチェーン内に記録する。調整者ブロックチェーンは、ユーザMによって生成された乱数を表示する。
【0085】
ステップ7において、ユーザNが、ブロックチェーンEOS上でコントラクト準備フェーズを実行し、ユーザNから調整者としての役割を果たすユーザPに10EOSを転送し、コントラクト実行状態をEOSチェーン上に記録する。生成された乱数ハッシュ値も、EOSチェーン内に格納される。ローカル準備フェーズコントラクトの実行および結果が、オリジナルの乱数と組み合わされて、調整者ブロックチェーン101コントラクトに引き渡すべき新たなハッシュ値H1=HASH(準備フェーズ結果+オリジナルの乱数)が生成される。
【0086】
ステップ8において、調整者ブロックチェーン101コントラクトが、全ての参加ノードの結果およびオリジナルの乱数を取得した後に、調整者ブロックチェーン101コントラクトの準備フェーズの結果を書き込む。
【0087】
ステップ9において、調整者ブロックチェーン101が、グローバル実行結果、および全てのノードによって報告されたH1ハッシュ値を、各参加チェーンコントラクトに書き込む。各参加者チェーン上でのコントラクト判定がローカル乱数と一致した後で、ローカル乱数が調整者に公開される。
【0088】
ステップ10において、調整者としての役割を果たすユーザPが、参加ユーザMおよびNによって生成された乱数を、各参加者ブロックチェーン内のコントラクトを通じて取得し、それをイーサリアムチェーン上のコントラクトのコミットファンクションに渡して、コミットファンクションを実行する。コミットファンクションは、乱数を取得した後で、各ノードの乱数、および準備フェーズを検証する。コントラクトステータスが、各ノードについて以前に保存されたH1ハッシュ値と一致する場合、コミットファンクションは、ユーザPからユーザNに1イーサを転送するアクションを実行する。コミットフェーズタスクを完了した後で、調整者としての役割を果たすユーザPは、調整者ブロックチェーン101上のグローバルトランザクションステータスを修正する。
【0089】
ステップ11において、調整者としての役割を果たすユーザPが、参加ユーザMおよびNによって生成された乱数を、各参加者ブロックチェーン内のコントラクトを通じて取得し、それをイーサリアムチェーン上のコントラクトのコミットファンクションに渡して、コミットファンクションを実行する。コミットファンクションは、乱数を取得した後で、各ノードの乱数、および準備フェーズを検証する。コントラクト状態が、各ノードについて以前に保存されたH1ハッシュ値と一致する場合、コミットファンクションは、ユーザPからユーザNに1イーサを転送するアクションを実行する。コミットフェーズタスクを完了した後で、調整者としての役割を果たすユーザPは、調整者ブロックチェーン101上のグローバルトランザクションステータスを修正する。
【0090】
ステップ12において、サードパーティが、ユーザM、N、およびPを通じてコントラクトの「検証」オペレーションを呼び出し、指定されたエグゼキュータが各段階においてグローバルタスクを作動させたことを検証し、コントラクトの実行が正しいことを確認することができる。
【0091】
ステップ13において、全ての参加ノードの乱数を取得した後で、調整者コントラクトが、H=HASH(M+N+HASH(P))を再計算し、それが調整者ブロックチェーン101のコミットフェーズ値と一致することを確認する。これにより、グローバル分散トランザクションオペレーションステータスが完了状態になり、チェーン間分散トランザクションの終了が合図される。
【0092】
ステップ14において、任意のノードがコミットフェーズオペレーションの実施に成功していない場合、コントラクトはH=HASH(M+N+HASH(P))を記録しない。調整者ノードが全てのコミットフェーズフィードバックを収集した後で、対応するチェーン上での検証は、グローバルトランザクションがサブミットされ得なかったため失敗する。この場合、準備フェーズアクションの実行は成功しているので、調整者ノードは、コミットフェーズトランザクションをそれが成功するまで再実行しようと試みる。
【0093】
ステップ15において、任意のノードが準備フェーズ前に失敗している場合、通常の調整者ノードは、ロールバックフェーズコントラクトオペレーションを能動的に実行し、正常に実行された準備フェーズアクションを、対応するチェーン内の実行前の状態に戻す。この例では、イーサリアムチェーン上でのロールバックフェーズオペレーションは、調整者としての役割を果たすユーザPがユーザMに1イーサを転送し戻すことを意味する。EOSチェーン上でのロールバックフェーズオペレーションは、調整者としての役割を果たすユーザPがユーザNに10EOSを転送し戻すことを意味する。
【0094】
ステップ16において、全ての準備フェーズトランザクションが成功しているが、あるノードがコントラクトを終了したい場合、システムは、コミットフェーズコントラクトファンクションを自動的に実施する。
【0095】
ステップ17において、タイムアウト期間が満了する前にノードトランザクションのコミットフェーズまたはロールバックフェーズが作動されない場合、分散トランザクションタイムアウトが失敗する。調整者は、グローバル準備フェーズ実行結果に従って、ロールバックフェーズコントラクトファンクションを自動的に実行するか、またはコミットフェーズコントラクトオペレーションを自動的に実行する。
【0096】
ステップ18において、任意のノードによって残りのノードに送信されたメッセージの内容がローカルコントラクト実行の結果と一致しない場合、残りのノードは、オリジナルの値およびハッシュ値を検証することによって、関連のコントラクトを迅速に見いだし、それが実行されるのを阻止することができる。
【0097】
コントラクト準備フェーズの失敗プロセス
図5は、コントラクト準備フェーズのコンセンサスの失敗プロセスを描いている。
【0098】
ステップ1~7:これらは、成功した実行プロセスと同じである。相違は、1つのチェーン上でのトランザクションが失敗する可能性があることである。ここでは、EOSチェーン上でのユーザNから調整者としての役割を果たすユーザPへの10EOSのコントラクトが失敗したと仮定する。
【0099】
ステップ8:調整者としての役割を果たすユーザPが、各ノードによって、セキュリティメッセージを通じてローカル準備フェーズコントラクト実行結果について通知される。
【0100】
ステップ9:調整者としての役割を果たすユーザPが、各チェーンのコントラクト実行結果を検証し、結果を調整者ブロックチェーン101に書き込む。
【0101】
ステップ10:準備フェーズオペレーションの全てのステップが成功したのではないため、調整者としての役割を果たすユーザPが、各チェーン上のコントラクトを作動させ、ロールバックフェーズオペレーションを実施し、各ノードの乱数のオリジナルの値をコントラクト入力として提供する。
【0102】
ステップ11:各参加チェーンのコントラクト検査コントラクト内に記録されたハッシュ値が、調整者内に渡されたオリジナルの乱数と一致する場合、コントラクトが実行し始める。
【0103】
ステップ12:各コントラクトが、ロールバックフェーズオペレーションを実行する。ブロックチェーン102は、調整者としての役割を果たすユーザPからユーザMに1イーサを転送する。ブロックチェーン103は、ロールバックフェーズオペレーションの実施に失敗しており、というのも、コントラクトトランザクションのコントラクトオペレーションが失敗したためである。
【0104】
ステップ13:調整者としての役割を果たすユーザPが、ロールバックフェーズ実行結果を調整者ブロックチェーン101に書き込む。任意のサブチェーンロールバックフェーズオペレーションが失敗した場合、各サブチェーンはそれが成功するまで周期的に再試行する。例えば、可能な1つのシナリオは、コントラクトが途中まで実行されている、というものである。全ての参加者は調整者としての役割を果たすユーザPに資産を転送したが、ユーザPは資産を不正流用しており、その結果、ロールバックフェーズにおいて資産が不十分となる。ロールバックフェーズアクションを完了することができないので、ロールバックフェーズアクションは定期的に再試行され、ある時点で、ユーザPのアカウントに十分な資金がある限り、ロールバックフェーズアクションは完了される。
【0105】
ステップ14:任意の参加者が、コントラクトプロセス内で記録された乱数ハッシュ値を、パーティによって提供されたオリジナルの乱数を通じて突き合わせて、コントラクトステータスの正しさを検証することができる。
【0106】
参加者または調整者の不正を回避するための方法
参加者または調整者による不正を回避するための方法を表すブロック図を、
図6に示す。
【0107】
ユーザMが不正者であり、ローカル準備フェーズコントラクトにおいて、調整者としての役割を果たすユーザPに1イーサを転送するためにコントラクトが呼び出されなければならないが、呼び出されていない、と仮定されたい。この時点で、ユーザMは、成功したコミットフェーズオペレーションを調整者としての役割を果たすユーザPに送信し、ハッシュH1=(結果+シードA+ハッシュC)を送信する。
【0108】
調整者としての役割を果たすユーザPは、このハッシュ値を使用して、ブロックチェーンA上のコントラクト実行結果を検証する。準備フェーズオペレーションは実行されていないので、正しい結果はチェーン内に保存されておらず、したがってH1の値は間違っているはずであり、したがってそれが検証にパスすることは不可能である。調整者としての役割を果たすユーザPは、ユーザMが不正であることを時間内に発見することができる。
【0109】
調整者としての役割を果たすユーザPが不正者であり、たとえ次段階が実行されるときに全てのノードユーザの準備フェーズコントラクトの実行が成功していても、誤った通知ブロックチェーン102が、ブロックチェーン103のコントラクトが実行に失敗しており、ロールバックフェーズを実施する必要がある、と伝えていると仮定されたい。
【0110】
この時点で、ユーザMは、コントラクトに対する、調整者としての役割を果たすユーザPの乱数のオリジナルの値を、準備フェーズによって書き込まれた準備フェーズの以前の状態の値H1と比較する。調整者としての役割を果たすユーザPが結果を偽っているので、H1の計算値は一貫していない可能性があり、したがって、ユーザMは、調整者としての役割を果たすユーザPが結果を改ざんしていることを時間内に知ることができ、したがって、ロールバックフェーズを拒否する。
【0111】
この場合、コントラクト調整者の不正行為のため、グローバルトランザクションが正しく調整され得ず、全てのノードのグローバルトランザクションは、信用された新たな調整者が残りの調整者の正しい実行結果を各参加者ブロックチェーンに提供するまで、一時中断状態に入る。各参加者コントラクトは、ロールバックフェーズまたはコミットフェーズがこのグローバル実行結果に基づくかどうかを判定する。
【0112】
トランザクションタイムアウト
どのようにシステムがトランザクションタイムアウトをハンドリングするかについての方法が、
図7に描かれたフローチャート内に要約されている。
【0113】
何らかの理由で、グローバルトランザクションがタイムアウト前にその最終状態に達しない場合、各ノードのユーザは、調整者ブロックチェーン101上の現在のグローバルトランザクション実行状態を能動的に問い合わせ、ローカルコントラクトに調整者トランザクションからの結果を供給することができる。ローカルコントラクトは、グローバルトランザクション状態に従って、ローカルブロックチェーントランザクションがオペレーションをコミットすべきか、それともロールバックすべきかを判定する。
【0114】
各サブチェーン内のユーザが誤った請求をサブミットするのを防ぐために、ユーザには、自身がローカルコントラクトにおいてコミットフェーズまたはロールバックフェーズをトリガすることができる前に、各チェーンについての正しい準備フェーズ段階結果、ハッシュコード、および乱数シードを得ることが求められる。
【0115】
ブロックチェーンコントラクトの、このチェーン内でトランザクションをコミットまたはロールバックするという前提は、ユーザが全てのノードの正しい乱数を提供するかどうかにかかっている。調整者コントラクトが各サブチェーンの全ての乱数を正しく取得しているとき、各サブチェーンのユーザは、調整者ブロックチェーン101のハッシュから乱数を抽出することができる。この値および各サブチェーンからの実行結果ステータスが、検証のためにローカルサブチェーンに転送される。検証にパスした後、ローカルサブチェーンコントラクトは、グローバル準備フェーズが成功しているかどうかに従って、コミットフェーズまたはロールバックフェーズになることが決定される。タイムアウト後に調整者ブロックチェーン101上に全てのノードの乱数の完全な証明書がない場合、全てのサブチェーンコントラクトは、各チェーン内の全ての有効な乱数シードが提供されるまで、一時中断される。このようにして、任意のユーザが不正データをサブミットするのを防止することができる。
【0116】
以上、ほんの一例として、本発明の実施形態について説明してきたが、添付の特許請求の範囲に記載の範囲から逸脱することなく多くの変形および置換が可能であるため、特許請求の範囲によって定められる本発明は、例示的な実施形態についての上記の説明中に記載した特定の詳細によって限定すべきではない、ということを理解されたい。
【符号の説明】
【0117】
101 調整者ブロックチェーン
102 参加者ブロックチェーン
103 参加者ブロックチェーン
104,105,106,107,108,109,110 ノード
111 ユーザMのウォレット
112 ユーザMのメッセージエージェント
113 ユーザMのローカルトランザクションエグゼキュータ
114 ブロックチェーンAのローカルトランザクションコントラクト
115 ユーザMのブロックチェーンAのアカウント
116 ユーザNのブロックチェーンAのアカウント
117 ユーザPのブロックチェーンAのアカウント
118 ユーザNのローカルトランザクションエグゼキュータ
119 ユーザNのウォレット
120 ユーザNのメッセージエージェント
121 ブロックチェーンBのローカルトランザクションコントラクト
122 ユーザMのブロックチェーンBのアカウント
123 ユーザNのブロックチェーンBのアカウント
124 ユーザPのブロックチェーンBのアカウント
125 ユーザPのウォレット
126 メッセージエージェント
127 調整者エグゼキュータ
128 セキュアメッセージコントラクト
129 グローバルトランザクション調整コントラクト
【国際調査報告】