(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-01-05
(45)【発行日】2023-01-16
(54)【発明の名称】ブロックチェーンにデータブロックを記録する方法、リーダーアカウンティングノード及びコンピュータプログラム
(51)【国際特許分類】
G06F 21/64 20130101AFI20230106BHJP
H04L 9/32 20060101ALI20230106BHJP
【FI】
G06F21/64
H04L9/32 200Z
(21)【出願番号】P 2021547120
(86)(22)【出願日】2020-02-20
(86)【国際出願番号】 CN2020075976
(87)【国際公開番号】W WO2020169061
(87)【国際公開日】2020-08-27
【審査請求日】2021-08-11
(31)【優先権主張番号】201910130823.9
(32)【優先日】2019-02-21
(33)【優先権主張国・地域又は機関】CN
(73)【特許権者】
【識別番号】517392436
【氏名又は名称】▲騰▼▲訊▼科技(深▲セン▼)有限公司
(74)【代理人】
【識別番号】100110364
【氏名又は名称】実広 信哉
(74)【代理人】
【識別番号】100150197
【氏名又は名称】松尾 直樹
(72)【発明者】
【氏名】李 茂材
(72)【発明者】
【氏名】▲藍▼ ▲虎▼
(72)【発明者】
【氏名】王 宗友
【審査官】吉田 歩
(56)【参考文献】
【文献】米国特許出願公開第2018/0165476(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 21/64
H04L 9/32
(57)【特許請求の範囲】
【請求項1】
ブロックチェーンにデータブロックを記録する方法であって、
前記ブロックチェーンは複数のブランチブロックチェーンを含み、前記複数のブランチブロックチェーンは、同一の組のアカウンティングノードによってデータブロックが記録され、
前記方法は、当該組のアカウンティングノードにおけるリーダーアカウンティングノードによって実行され、
ターゲットデータブロックを生成するステップと、
前記複数のブランチブロックチェーンのうち、コンセンサスをまだ完了しておらず、ブロックチェーンへの記録を待つデータブロックを有するブランチブロックチェーンが存在するか否かを確定するステップと、
コンセンサスをまだ完了しておらず、ブロックチェーンへの記録を待つデータブロックを有しないブランチブロックチェーンが存在すると、前記コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンから、前記ターゲットデータブロックを記録するブランチブロックチェーンを選択するステップと、
選択されたブランチブロックチェーンに記録されている、1つ前のデータブロックのダイジェスト値を、前記ターゲットデータブロックのブロックヘッダーに記録するステップと、
前記ターゲットデータブロックを当該組のアカウンティングノードにおける他のアカウンティングノードに送信してノードコンセンサスを実行して、前記選択されたブランチブロックチェーンに記録するステップとを含む方法。
【請求項2】
前記複数のブランチブロックチェーンのうち、コンセンサスをまだ完了しておらず、ブロックチェーンへの記録を待つデータブロックを有するブランチブロックチェーンが存在するか否かを確定した後に、前記方法は、
前記複数のブランチブロックチェーンのすべてがコンセンサスをまだ完了しておらず、ブロックチェーンへの記録を待つデータブロックを有すると、前記複数のブランチブロックチェーンのデータブロックがコンセンサスを完了するのを待ち、データブロックのコンセンサスを最も早く完了したブランチブロックチェーンを、ターゲットデータブロックを記録するブランチブロックチェーンとして選択するステップをさらに含む請求項1に記載の方法。
【請求項3】
前記複数のブランチブロックチェーンは、シリアルナンバーを有し、
前記コンセンサスをまだ完了しておらず、ブロックチェーンへの記録を待つデータブロックを有しないブランチブロックチェーンから、ターゲットデータブロックを記録するブランチブロックチェーンを選択するステップは、
前記コンセンサスをまだ完了しておらず、ブロックチェーンへの記録を待つデータブロックを有しないブランチブロックチェーンから、第1のブランチブロックチェーンを確定するステップであって、前記第1のブランチブロックチェーンのシリアルナンバーが第2のブランチブロックチェーンのシリアルナンバーよりも大きく、前記第2のブランチブロックチェーンは前記ターゲットデータブロックの1つ前のデータブロックを記録するブランチブロックチェーンであるステップと、
前記第1のブランチブロックチェーンのうちシリアルナンバーが最も小さい1つの第1のブランチブロックチェーンを、ターゲットデータブロックを記録するブランチブロックチェーンとして選択するステップと、
前記コンセンサスをまだ完了しておらず、ブロックチェーンへの記録を待つデータブロックを有しないブランチブロックチェーンに、シリアルナンバーが前記第2のブランチブロックチェーンのシリアルナンバーよりも大きいブランチブロックチェーンが存在しないと、前記コンセンサスをまだ完了しておらず、ブロックチェーンへの記録を待つデータブロックを有しないブランチブロックチェーンのうちシリアルナンバーが最も小さい1つのブランチブロックチェーンを、ターゲットデータブロックを記録するブランチブロックチェーンとして選択するステップとを含む請求項1に記載の方法。
【請求項4】
前記コンセンサスをまだ完了しておらず、ブロックチェーンへの記録を待つデータブロックを有しないブランチブロックチェーンから、ターゲットデータブロックを記録するブランチブロックチェーンを選択するステップは、
コンセンサスをまだ完了しておらず、ブロックチェーンへの記録を待つデータブロックを有しないブランチブロックチェーンにおける記録されたデータブロック数を確定するステップと、
コンセンサスをまだ完了しておらず、ブロックチェーンへの記録を待つデータブロックを有しないブランチブロックチェーンにおける最後のデータブロックの記録時間と現在の時間との時間差を確定するステップと、
前記記録されたデータブロック数及び前記時間差に応じて、前記コンセンサスをまだ完了しておらず、ブロックチェーンへの記録を待つデータブロックを有しないブランチブロックチェーンから、ターゲットデータブロックを記録するブランチブロックチェーンを選択するステップとを含む請求項1に記載の方法。
【請求項5】
前記記録されたデータブロック数及び前記時間差に応じて、前記コンセンサスをまだ完了しておらず、ブロックチェーンへの記録を待つデータブロックを有しないブランチブロックチェーンから、ターゲットデータブロックを記録するブランチブロックチェーンを選択するステップは、
コンセンサスをまだ完了しておらず、ブロックチェーンへの記録を待つデータブロックを有しないブランチブロックチェーンの前記記録されたデータブロック数に対して、第1のスコアを確定するステップと、
コンセンサスをまだ完了しておらず、ブロックチェーンへの記録を待つデータブロックを有しないブランチブロックチェーンの前記時間差に対して、第2のスコアを確定するステップと、
第1のスコアと第2のスコアの加重和に基づいて、ターゲットデータブロックを記録するブランチブロックチェーンを確定するステップとを含む請求項4に記載の方法。
【請求項6】
前記複数のブランチブロックチェーンのそれぞれは識別子を有し、
前記選択されたブランチブロックチェーンに記録された1つ前のデータブロックのダイジェスト値を前記ターゲットデータブロックのブロックヘッダーに記録するステップは、前記選択されたブランチブロックチェーンに記録された1つ前のデータブロックのダイジェスト値、及び前記選択されたブランチブロックチェーンの識別子を、ターゲットデータブロックのブロックヘッダーに記録するステップを含み、
前記ターゲットデータブロックを当該組のアカウンティングノードにおける他のアカウンティングノードに送信してコンセンサスを実行して、選択されたブランチブロックチェーンに記録するステップは、
ターゲットデータブロックを当該組のアカウンティングノードにおける他のアカウンティングノードに送信するステップと、
前記他のアカウンティングノードからのターゲットデータブロックに対する検証結果を受信するステップと、
検証結果に基づいて検証に成功したことを確定した後に、ターゲットデータブロックを、前記選択されたブランチブロックチェーンに記録し、当該組のアカウンティングノードにおける他のアカウンティングノードに通知して、前記他のアカウンティングノードが前記ブロックヘッダーにおけるブランチブロックチェーンの識別子に応じて、ターゲットデータブロックを前記選択されたブランチブロックチェーンに記録するようにするステップとを含む請求項1~5の何れか1項に記載の方法。
【請求項7】
前記ターゲットデータブロックにおけるトランザクション情報は、入力項目及び出力項目を有し、前記入力項目が、前記ターゲットデータブロックの前に前記ブロックチェーンに記録された別のデータブロックのトランザクション情報の出力項目にリンクされ、
前記他のアカウンティングノードからのターゲットデータブロックに対する検証結果は、
前記ターゲットデータブロックにおけるトランザクション情報の入力項目にリンクされている出力項目が、前記ターゲットデータブロックがブロックチェーンに記録されたときに、前記ブロックチェーンに記録されたデータブロックにおけるトランザクション情報の入力項目に既にリンクされているか否かを確定するステップであって、そうであれば、検証結果が不合格であり、そうなければ、検証結果が合格である前記ステップにより生成される請求項6に記載の方法。
【請求項8】
前記ターゲットデータブロックにおけるトランザクション情報の入力項目にリンクされている出力項目が、前記ターゲットデータブロックがブロックチェーンに記録されたときに、前記ブロックチェーンに記録されたデータブロックにおけるトランザクション情報の入力項目に既にリンクされているか否かを確定するステップは、
前記ターゲットデータブロックがブロックチェーンに記録された時間と、別のデータブロックがブロックチェーンに記録された時間との間にブロックチェーンに記録されたデータブロックにおけるトランザクション情報の入力項目をトラバーサルし、当該入力項目が当該別の
データブロックのトランザクション情報の出力項目にリンクされているか否かを逐一確定するステップを含む請求項7に記載の方法。
【請求項9】
前記ターゲットデータブロックにおけるトランザクション情報の入力項目にリンクされている出力項目が、前記ターゲットデータブロックがブロックチェーンに記録されたときに、前記ブロックチェーンに記録されたデータブロックにおけるトランザクション情報の入力項目に既にリンクされているか否かを確定するステップは、
前記ターゲットデータブロックにおけるトランザクション情報の入力項目にリンクされている別のデータブロックのトランザクション情報の出力項目に対応する占有ステータスワードをクエリするステップであって、当該占有ステータスワードが占有を指示すると、検証結果が不合格であり、そうなければ、検証結果が合格であるステップと、
前記ターゲットデータブロックを当該組のアカウンティングノードにおける他のアカウンティングノードに送信してコンセンサスを実行し、前記選択されたブランチブロックチェーンに記録した後に、前記方法は、
前記ターゲットデータブロックにおけるトランザクション情報の出力項目に対応する占有ステータスワードを未占有を指示するように設定するステップと、
前記ターゲットデータブロックにおけるトランザクション情報の入力項目にリンクされている別のデータブロックのトランザクション情報の出力項目に対応する占有ステータスワードを設置して、占有を指示するステップをさらに含む請求項7に記載の方法。
【請求項10】
前記選択されたブランチブロックチェーンに記録された1つ前のデータブロックのダイジェスト値をターゲットデータブロックのブロックヘッダーに記録するステップは、
前記選択されたブランチブロックチェーンに記録された1つ前のデータブロックのダイジェスト値を、前記リーダーアカウンティングノードに固有の秘密鍵で前記ダイジェスト値を暗号化して形成する署名とともに、ターゲットデータブロックのブロックヘッダーに記録するステップを含み、
前記他のアカウンティングノードからのターゲットデータブロックに対する検証結果は、以下のステップ、即ち:
前記リーダーアカウンティングノードに固有の公開鍵で前記署名を復号化するステップと、
復号化した結果とブロックヘッダーにおけるダイジェスト値とを比較し、一致すると、検証結果が合格であり、一致しないと、検証結果が不合格であるステップとにより生成される請求項6に記載の方法。
【請求項11】
前記ターゲットデータブロックにおけるトランザクション情報は、当該トランザクション情報が発生する発生側ノードが前記発生側ノードに固有の秘密鍵で署名され、当該トランザクション情報とともにターゲットデータブロックに記録され、
前記他のアカウンティングノードからのターゲットデータブロックに対する検証結果は、以下のステップ、即ち:
ターゲットデータブロックにおける各トランザクション情報の署名に対して、前記発生側ノードに固有の公開鍵で復号化するステップと、
ターゲットデータブロックにおける各トランザクション情報に対して、ダイジェスト値を求めるステップと、
復号化した結果と、ターゲットデータブロックにおける対応するトランザクション情報のダイジェスト値とを比較し、各トランザクション情報に対する復号化結果と対応するトランザクション情報のダイジェスト値とが一致すると、検証結果が合格であり、一致しないと、検証結果が不合格であるステップとにより、生成される請求項1~10の何れか1項に記載の方法。
【請求項12】
前記複数のブランチブロックチェーンは、M次元行列に配列された複数のブランチブロックチェーンであり、Mが1よりも大きい正の整数であり、各ブランチブロックチェーンの識別子がM個の要素のベクトルであり、各要素が当該ブランチブロックチェーンの相応する1次元におけるシリアルナンバーを示す請求項1~11の何れか1項に記載の方法。
【請求項13】
ブロックチェーンの記録に使用されるリーダーアカウンティングノードであって、前記ブロックチェーンは複数のブランチブロックチェーンを含み、前記複数のブランチブロックチェーンは同一の組のアカウンティングノードによりデータブロックが記録され、前記リーダーアカウンティングノードは当該組のアカウンティングノードから選択されたものであり、前記リーダーアカウンティングノードは、
ターゲットデータブロックを生成するためのターゲットデータブロック生成モジュールと、
前記複数のブランチブロックチェーンのうち、コンセンサスをまだ完了しておらず、ブロックチェーンへの記録を待つデータブロックを有するブランチブロックチェーンが存在するか否かを確定するための確定モジュールと、
コンセンサスをまだ完了しておらず、ブロックチェーンへの記録を待つデータブロックを有しないブランチブロックチェーンが存在すると、前記コンセンサスをまだ完了しておらず、ブロックチェーンへの記録を待つデータブロックを有しないブランチブロックチェーンから、前記ターゲットデータブロックを記録するブランチブロックチェーンを選択するためのブランチブロックチェーン選択モジュールと、
選択されたブランチブロックチェーンに記録された1つ前のデータブロックのダイジェスト値を、前記ターゲットデータブロックのブロックヘッダーに記録するためのダイジェスト値記録モジュールと、
前記ターゲットデータブロックを、当該組のアカウンティングノードにおける他のアカウンティングノードに送信してコンセンサスを実行し、前記選択されたブランチブロックチェーンに記録するためのコンセンサスブロックチェーン記録モジュールとを含むリーダーアカウンティングノード。
【請求項14】
リーダーアカウンティングノードであって、
コンピュータ読み取り可能な指令が記憶されているメモリと、
メモリに記憶されているコンピュータ読み取り可能な指令を読み取って、請求項1-12のいずれか一項に記載の方法を実行するプロセッサーとを含むリーダーアカウンティングノード。
【請求項15】
指令を含むコンピュータプログラムであって、コンピュータ上で実行される場合、前記コンピュータに請求項1-12のいずれか一項に記載の方法を実行させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本願は、2019年02月21日に中国専利局に提出した、出願番号が201910130823.9であって、発明の名称が「ブロックチェーンにデータブロックを記録する方法、リーダーアカウンティングノード及び媒体」である中国特許出願の優先権を主張し、その全ての内容を援用して本願に組み込む。
【0002】
本開示は、ブロックチェーンの分野に関し、具体的に、ブロックチェーンにデータブロックを記録することに関する。
【背景技術】
【0003】
ブロックチェーンシステムにおいて、ブロックチェーンにトランザクション情報を記録するアカウンティングノードがリーダーアカウンティングノードにトランザクション情報を送信する必要があり、リーダーアカウンティングノードはブロックチェーンへの記録を必要とするトランザクション情報を一つ一つのブロックにパッケージングし、各ブロックに前のブロックのダイジェストを保存し、このようなメカニズムにより、一つ一つのブロックを直列に接続してブロックチェーン構造を形成し、改ざん防止の効果を実現する。ブロックチェーン上の一つのブロックが改ざんされたと、その後のブロックにこのブロックのダイジェストを記録したので、改ざんされたブロックとマッチングしない。
【発明の概要】
【課題を解決するための手段】
【0004】
本開示はブロックチェーンにデータブロックを記録する効率を向上させることを一つの目的とする。
【0005】
本開示の実施例の一局面によれば、ブロックチェーンにデータブロックを記録する方法を開示しており、前記ブロックチェーンは複数のブランチブロックチェーンを含み、前記複数のブランチブロックチェーンは同一の組のアカウンティングノードがデータブロックを記録し、前記方法は当該組のアカウンティングノードにおけるリーダーアカウンティングノードによって実行され、前記方法は、
ターゲットデータブロックを生成するステップと、
前記複数のブランチブロックチェーンのうち、コンセンサスをまだ完了しておらず、ブロックチェーンへの記録を待つデータブロックを有するブランチブロックチェーンが存在するか否かを確定するステップと、
コンセンサスをまだ完了しておらず、ブロックチェーンへの記録を待つデータブロックを有しないブランチブロックチェーンが存在すると、前記コンセンサスをまだ完了しておらず、ブロックチェーンへの記録を待つデータブロックを有しないブランチブロックチェーンから、前記ターゲットデータブロックを記録するブランチブロックチェーンを選択するステップと、
選択されたブランチブロックチェーンに記録されている1つ前のデータブロックのダイジェスト値を、前記ターゲットデータブロックのブロックヘッダーに記録するステップと、
前記ターゲットデータブロックを当該組のアカウンティングノードにおける他のアカウンティングノードに送信してノードコンセンサスを実行し、前記選択されたブランチブロックチェーンに記録するステップとを含む。
【0006】
本開示の実施例の一局面によれば、ブロックチェーンの記録に使用されるリーダーアカウンティングノードを開示しており、前記ブロックチェーンは複数のブランチブロックチェーンを含み、前記複数のブランチブロックチェーンは同一の組のアカウンティングノードによりデータブロックが記録され、前記リーダーアカウンティングノードは当該組のアカウンティングノードから選択されたものであり、前記リーダーアカウンティングノードは、
ターゲットデータブロックを生成するためのターゲットデータブロック生成モジュールと、
前記複数のブランチブロックチェーンのうち、コンセンサスをまだ完了しておらず、ブロックチェーンへの記録を待つデータブロックを有するブランチブロックチェーンが存在するか否かを確定するための確定モジュールと、
コンセンサスをまだ完了しておらず、ブロックチェーンへの記録を待つデータブロックを有しないブランチブロックチェーンが存在すると、前記コンセンサスをまだ完了しておらず、ブロックチェーンへの記録を待つデータブロックを有しないブランチブロックチェーンから、前記ターゲットデータブロックを記録するブランチブロックチェーンを選択するためのブランチブロックチェーン選択モジュールと、
選択されたブランチブロックチェーンに記録された1つ前のデータブロックのダイジェスト値を、前記ターゲットデータブロックのブロックヘッダーに記録するためのダイジェスト値記録モジュールと、
前記ターゲットデータブロックを、当該組のアカウンティングノードにおける他のアカウンティングノードに送信してコンセンサスを実行し、前記選択されたブランチブロックチェーンに記録するためのコンセンサスブロックチェーン記録モジュールとを含む。
【0007】
本開示の実施例の一局面によれば、リーダーアカウンティングノードを開示しており、コンピュータ読み取り可能な指令を記憶しているメモリと、メモリに記憶されているコンピュータ読み取り可能な指令を読み取って、以上に記載の方法を実行するプロセッサーとを含む。
【0008】
本開示の実施例の一局面によれば、コンピュータプログラム媒体を開示しており、コンピュータ読み取り可能な指令を記憶しており、前記コンピュータ読み取り可能な指令がコンピュータのプロセッサーによって実行される場合に、コンピュータに以上に記載の方法を実行させる。
【0009】
本開示の実施例において、ブロックチェーンは複数のブランチブロックチェーンを含み、これらのブランチブロックチェーンは同一の組のアカウンティングノードによりデータブロックが記録される。このように、ターゲットデータブロックをブロックチェーン記録しようとする場合に、ブランチブロックチェーンうちの、コンセンサス中にあり、ブロックチェーンへの記録を待つデータブロックを有しないようなブランチブロックチェーンにブロックチェーン記録することができる。ブロックヘッダーに1つ前のデータブロックのダイジェストを記録する場合に、ブロックチェーン全体の1つ前のデータブロックのダイジェストをブロックヘッダーに記録するのではなく、選択されたブランチブロックチェーンに前に記録されたデータブロック(コンセンサスを完了し、待たない)のダイジェストをデータブロックのブロックヘッダーに記録する。このように、従来技術のブロックチェーン全体の1つ前のデータブロックがコンセンサスを完了するまで待ち、そのダイジェストを取得し、ターゲットデータブロックのブロックヘッダーに記録することを回避し、一旦、1つ前のデータブロックがコンセンサスを完了しないと、常に待つ必要があり、効率が低くなる。このような複数のブランチブロックチェーンの形態により、ブロック生成プロセスはある程度並行しており、システムのブロック生成の効率が向上する。複数のブランチブロックチェーンは同一の組のアカウンティングノードによりアカウンティングされるため、同一のプロセスにおいてメンテナンスすることが保証され、アカウンティングノードのそれぞれは、当該組のアカウンティングノードがデータを記録する全ての履歴情報を持ち、ブロックチェーンに跨いで不完全なデータ情報を記録する欠点を回避する。
【0010】
本開示の他の特徴及び利点は、以下の詳細な説明により明らかになり、部分的に本開示の実施により習得される。
【0011】
理解すべきことであるが、上記の一般的な説明と後述する細部の説明は、単なる例示的であり、本開示を限定するものではない。
【図面の簡単な説明】
【0012】
図面を参照しながら、その例示的な実施例を詳しく説明することにより、本開示の上記及び他の目的、特徴及び利点は明らかになる。
【
図1】1A-1Cは本開示の一実施例によるブロックチェーンにデータブロックを記録する方法の3つのアーキテクチャ図を示す。
【
図2】2A-2Eは、電子請求書がブロックチェーンに記録される適用シナリオでブロックチェーンにデータブロックを記録する方法が実行されるプロセスでのインターフェース図を示す。
【
図3】3Aは一般的なシングルブロックチェーン構造にデータブロックを記録する模式図を示し、3Bは、本開示の一実施形態によるマルチブランチブロックチェーン構造にデータブロックを記録する模式図を示す。
【
図4】4Aは一般的なブロックチェーン上のブロックのデータ構造の模式図を示し、4Bは本開示の実施例にかかるブロックヘッダーのデータ構造の模式図である。
【
図5】5Aは一般的なブロックデータ構造におけるトランザクション情報の入力項目と出力項目のリンク関係を示し、5Bは、本開示の実施例によるブロックデータ構造におけるトランザクション情報入力項目と出力項目のリンク関係を示す。
【
図6】本開示の一実施例によるブロックチェーンにデータブロックを記録するシーケンス図を示す。
【
図7】本開示の実施例によるマルチブランチブロックチェーン構造にデータブロックを記録するプロセスの模式図を示す。
【
図8】多次元行列形式に配列された複数のブランチブロックチェーンの模式図を示す。
【
図9】本開示の一実施例によるブロックチェーンにデータブロックを記録する方法のフローチャートを示す。
【
図10】本開示の一実施例によるステップ430の1つの具体的な手順のフローチャートを示す。
【
図11】本開示の一実施例によるテップ4303の1つの具体的な手順のフローチャートを示す。
【
図12】本開示の一実施例によるステップ450の1つの具体的な手順のフローチャートを示す。
【
図13】本開示の一実施例による他のアカウンティングノードがターゲットデータブロックに対する検証結果を生成するフローチャートを示す。
【
図14】本開示の一実施例によるリーダーアカウンティングノードの確定プロセスの詳細なフローチャートを示す。
【
図15】本開示の一実施例によるリーダーアカウンティングノードのブロック図を示す。
【
図16】本開示の一実施例によるリーダーアカウンティングノードのハードウェア図を示す。
【発明を実施するための形態】
【0013】
以下、図面を参照しながら、例示的な実施形態について全面的に説明する。しかし、例示的な実施形態は、複数の形態で実施することができ、ここで記述された例に限られると理解してはいけない。むしろ、これらの実施形態を提供することで、本開示を全面的かつ完全にし、例示的な実施形態の発想を当業者に全面的に伝える。図面は、本開示の模式図に過ぎず、必ずしも比例で描かれているものではない。図面中の同一の符号は、同一又は類似した部分を示しているので、それらに対する繰り返し説明が省略される。
【0014】
また、説明される特徴、構造又は特性は1つ又は複数の実施形態において任意の適切な方法で組み合わせることができる。以下の説明では、多くの具体的な詳細を提供することで、本開示の実施形態の十分な理解を提供する。しかし、当業者にとって明らかなように、前記具体的な詳細のうちの1つ以上を省略したり、又は他の方法、ユニット、装置、ステップ等を用いたりして、本開示の技術案を実施することができる。他の場合には、本開示の各形態が不明瞭になることを避けるように、周知の構造、方法、装置、実現、材料又は操作が詳細に示されていない又は説明されていない。
【0015】
図面に示されるブロック図の一部は機能エンティティであり、必ずしも物理的又は論理的に別個のエンティティに対応する必要はない。ソフトウェア形態でこれらの機能エンティティを実装し、又は1つ又は複数のハードウェアモジュール又は集積回路にこれらの機能エンティティを実装し、又は異なるネットワーク及び/又はプロセッサ装置及び/又はマイクロコントローラ装置においてこれらの機能エンティティを実装することができる。
【0016】
以下、まず、
図1A-1Cを参照し本開示の実施例が適用されるアーキテクチャ、及び流れ全体を説明する。
【0017】
図1Aに示すアーキテクチャにおいて、1組のアカウンティングノード100は複数のアカウンティングノード101を含み、複数のアカウンティングノード101に1つのリーダーアカウンティングノード102がある。当該リーダーアカウンティングノード102は不変であってもよいし、全てのアカウンティングノード101から定期的に選出されてもよい。
図1Aに示すアーキテクチャにおいて、各アカウンティングノード101もトランザクション情報が発生する発生側ノード、即ち、トランザクション情報発生側アカウンティングノード103である。
【0018】
トランザクション情報発生側アカウンティングノード103は、ブロックチェーン200に記録される必要のあるトランザクション情報を発生して、リーダーアカウンティングノード102に送信する。リーダーアカウンティングノード102は、当該トランザクション情報をすぐにブロックチェーン記録するのではなく、パッケージング条件を満足するまで(例えば、バッファリングされたトランザクション情報が所定の数又は所定のサイズに達するまで) 待ち、それを1つのパケットにパッケージングし、ブロックチェーンへの記録の準備ができる。ブロックチェーン200は3つの(図には3つが示されているが、他の数でもよい)ブランチブロックチェーン201を含むので、リーダーアカウンティングノード102は、このパケットをどのブランチブロックチェーン201に記録するかを確定する。ターゲットデータブロックの前のブロックチェーンに記録されるデータブロックが記録するブランチブロックチェーンはブランチブロックチェーン1であり、コンセンサスはまだ完了し、従来技術に従って、当該1つ前のデータブロックに対してコンセンサスを完了するまで待ち、ダイジェストを確定し、さらに、ターゲットデータブロックのブロックヘッダーの書き込みを完了する。このように、ブロックチェーン記録効率は低くなる。
図1Aに3つのブランチブロックチェーンがあり、ブランチブロックチェーン1を除く二つのブランチブロックチェーン2と3の最後のデータブロックは既にコンセンサスが完了されるので、ブランチブロックチェーン2と3から1つのブランチブロックチェーンを選択してブロックチェーン記録することができる。この二つのブランチブロックチェーンの現在の最後のデータブロックは既にコンセンサスが完了され、そのダイジェストは確定されたので、当該ダイジェストをターゲットデータブロックのブロックヘッダーに書き込み、ターゲットデータブロックを当該組のアカウンティングノード100における他のアカウンティングノード101に送信しコンセンサスを完了した後に、当該ブランチブロックチェーンにブロックチェーン記録し、ブロック効率の向上を実現する。
【0019】
図1Bは、本開示の実施例によるブロックチェーンにデータブロックを記録する方法が適用される他のアーキテクチャを示す。
図1Bは、1組のアカウンティングノード100そのものがトランザクション情報の発生する発生側ノードではないという点で、
図1Aと違う。トランザクション情報発生側ノード104は当該組のアカウンティングノード100の外部にあり、各トランザクション情報発生側ノード104は当該組のアカウンティングノード100において1つの対応するアカウンティングノード101がある。トランザクション情報発生側ノード104は、ブロックチェーンへの記録を必要とするトランザクション情報を生成すると、対応するアカウンティングノード101に送信し、対応するアカウンティングノード101がリーダーアカウンティングノード102に送信する。リーダーアカウンティングノードがパッケージングしブロックチェーンへの記録するプロセスは
図1Aに示すものと同様であるので、再度説明されない。
【0020】
図1Bにおいて、トランザクション情報発生側ノード104はアカウンティング(データブロックのブロックチェーンへの記録)権限を持たず、アカウンティングノード101のアカウンティング行為を検証及び監視することもできず、アカウンティングノード101を完全に信頼することしかできない。
【0021】
図1Cにおいて、トランザクション情報発生側サービスノード106も当該組のアカウンティングノード100の外部にある。しかしながら、各トランザクション情報発生側サービスノード106は1組のサービスノード107を構成し、なお、当該組のサービスノード107におけるトランザクション情報発生側サービスノード106はアカウンティング(データブロックのブロックチェーンへの記録)権限を持たないが、アカウンティングノード101のアカウンティング行為を検証及び監視することができるという点で、
図1Bと違う。
【0022】
具体的に、トランザクション情報発生側サービスノード106にブロックチェーンへの記録を必要とするトランザクション情報がある場合、トランザクション情報をエージェントノード105に送信する。エージェントノード105は当該組のサービスノード107のうちの、当該組のアカウンティングノード100と当該組のサービスノード107との間のインターフェースに固有のノードである。エージェントノード105は当該トランザクション情報を当該組のアカウンティングノード100における1つのアカウンティングノード102に送信し、当該アカウンティングノード102が当該トランザクション情報をリーダーアカウンティングノード102に送信する。リーダーアカウンティングノード102がパッケージングしチェーニングするプロセスは
図1Aに示すものと同様であるので、再度説明されない。
【0023】
リーダーアカウンティングノード102は、データブロックをチェーニングする場合に、ブロックヘッダーに当該データブロックのブロック本体に対してダイジェスト演算を行って得られるダイジェスト、及びダイジェストをリーダーアカウンティングノード102の秘密鍵で暗号化して得られる署名を加入する。リーダーアカウンティングノード102はチェーニングを完了した後に、データブロックのブロックヘッダーをエージェントノード105を介して各トランザクション情報発生側サービスノード106に発行し、各トランザクション情報発生側サービスノード106は、リーダー記録ノード102の公開鍵で当該署名を復号化してダイジェストを取得し、ブロックヘッダーそのものに含まれているダイジェストと比較し、一致すると、署名の検証が合格であり、一致しないと、署名の検証が不合格であり、これにより、アカウンティングノード101の集団的不正行為を防止し、アカウンティングノード101のアカウンティングを検証する。従って、
図1Cのアーキテクチャは、トランザクション情報発生側サービスノード106がアカウンティングノード101のアカウンティング行為を監視でき、アカウンティングノード101を受動的に信頼することないという点で、
図1Bのアーキテクチャとは異なる。
【0024】
図2A-2Eは、電子請求書がチェーニングされる適用シナリオ下でブロックチェーンにデータブロックを記録する方法が実行されるプロセスにおけるインターフェース図を示している。
【0025】
電子請求書が一方から他方に転送されるプロセスは、電子請求書の一回トランザクションと見なされる。トランザクションに関する情報はトランザクション情報と称される。税務局の端末は電子請求書を起票機関の端末に発行し、電子請求書は発行のトランザクションを完了し、電子請求書を発行するトランザクション情報をブロックチェーンに書き込む必要がある。起票機関の端末は電子請求書を払い戻し者の端末に発行し、電子請求書は、1回の起票のトランザクションを完了し、起票されたトランザクション情報をブロックチェーンに書き込む必要がある。払い戻し者の端末は払い戻し者の端末機関の端末と払い戻しを行い、電子請求書は1回の払い戻しトランザクションを完了し、払い戻されたトランザクション情報をブロックチェーンに書き込む必要がある。この場合に、トランザクション情報をチェーニングする必要がある。
【0026】
リーダーアカウンティングノード102はターゲットデータブロックに追加するトランザクション情報を受信した後に、すぐにトランザクション情報をパッケージングしチェーニングするのではなく、ターゲットデータブロックに追加するトランザクション情報が十分なサイズとなるまで、又は十分な数を有するまで待った後に、一つのターゲットデータブロックにパッケージングする。ターゲットデータブロックに追加するトランザクション情報が十分なサイズになると、リーダーアカウンティングノード102に
図2Aに示すインターフェースが表示され、「現在チェーニングすべき電子請求書トランザクション情報が既にパッケージングサイズに対して十分であり、パッケージングを開始する」ということを提示する。
【0027】
管理者が
図2Aのインターフェースに「確定」をクリックすると、記録するブランチブロックチェーンを選択し始める。当該ブロックチェーン上の1つ前のデータブロックがブランチブロックチェーン1に記録しようとするが、まだコンセンサスを完了しない。ターゲットデータブロックもブランチブロックチェーン1に記録しようとすると、1つ前のデータブロックのコンセンサスを完了するのを待つ必要があり、そのダイジェストをターゲットデータブロックのブロックヘッダーに記録し、このようにすれば、チェーニング効率が非常に低い。従って、最後のデータブロックが既にコンセンサスを完了した2つのブランチブロックチェーン、即ち、ブランチブロックチェーン2と3において、1つのブランチブロックチェーン、例えば、ブランチブロックチェーン2を選択することができる。直接にブランチブロックチェーン2の現在の最後のデータブロックのダイジェストをデータブロックのブロックヘッダーに記録することができる。このようにすれば、1つ前のデータブロックがコンセンサスをまだ完了しておらず、ダイジェストを取得しブロック本体に書き込むことができないことを回避し、無制限の待機を引き起こす。この場合に、
図2Bのインターフェースに、「ブロックチェーン上の1つ前のデータブロックがブランチブロックチェーン1に記録され、現在生成するターゲットデータブロックがブランチブロックチェーン2に記録される」ということを提示する。
【0028】
管理者が
図2Bのインターフェースに「確定」をクリックすると、
図2Cのインターフェースが表示され、「既にブランチブロックチェーン2上の1つ前のデータブロックのダイジェスト値をターゲットデータブロックのブロックヘッダーに記録し、他のアカウンティングノードに送信してコンセンサスを実行するか」ということを提示する。管理者が「確定」を選択したと、ターゲットデータブロックを他のアカウンティングノードに送信してコンセンサスをとって、このアカウンティングノードはターゲットデータブロックをブロックチェーンに記録する。
【0029】
他のアカウンティングノードのコンセンサスに成功した後に、
図2Dに示すインターフェースが表示され、「他のアカウンティングノードのコンセンサスに成功し、チェーニングするか」ということを提示する。管理者が「確定」を選択したと、他のアカウンティングノードはターゲットデータブロックをブロックチェーンに記録する。
【0030】
チェーニング後、
図2Eに示すインターフェースが表示され、「チェーニング完了」ということを提示する。
【0031】
以下、
図3A及び
図3Bを本開示の実施例によるマルチブランチブロックチェーン構造にデータブロックを記録することと、従来のシングルブロックチェーン構造にデータブロックを記録することとの違いについて検討する。
【0032】
図4Aに示すように、データブロックのデータ構造はブロックヘッダー301とブロック本体302とを含む。ブロック本体302はチェーニングさせる全てのトランザクション情報を含む部分であり、チェーニングの実質的な内容である。ブロックヘッダー301はチェーニングされる追加情報(例えば、識別子情報)を携帯する部分である。ブロックヘッダー302は少なくとも2つの方面の内容を記録し、1つがターゲットデータブロックのブロック本体のダイジェストであり、もう一つがブロックチェーン上の1つ前のデータブロックのダイジェストである。前者は、クエリの便宜のために、このデータブロックを一意に代表する識別子を形成することである。後者は、各ブロックに前のブロックに関する内容を含むようにし、同時に自分のコンテンツも後のブロックに関連付けて、変更できないという目的を達成する。ブロックチェーン上のブロックが勝手に改ざんされたと、前のブロックのブロックヘッダーの内容と後のブロックのブロックヘッダーの内容がマッチングできないため、容易に見つける。
【0033】
従って、
図3Aに示すように、従来のシングルブロックチェーン構造において、各データブロックのブロックヘッダーに1つ前のデータブロックのダイジェスト値を書き込む必要があるため、1つ前のデータブロックがコンセンサスを完了する前に、ターゲットデータブロックに常に1つのフィールドの値がまだ確定されず、これは、1つ前のデータブロックが既にコンセンサスをとったまで待たなければならず、ターゲットデータブロックをチェーニングできることを招く。
図3Aにおいて、1つ前のデータブロックがチェーニング済みのデータブロック203となった(コンセンサスを完了した)まで待たなければならず、コンセンサス中のデータブロック204をチェーニングできる。
【0034】
本開示の実施例において、
図3Bに示すように、ブロックチェーンは複数のブランチブロックチェーン1-5に分割される。
図3Bの曲線は、各ブランチブロックチェーンがチェーニングするブランチブロックチェーンとして選択される順序である。ブロックチェーンに既に10個のチェーニング済みのデータブロック203を記録した場合に、データブロック204がコンセンサス中であり、それを選択してブランチブロックチェーン1に記録し、後のチェーニングすべきデータブロック205が選択されてブランチブロックチェーン1に記録せず、継続的に選択されてコンセンサス中であるデータブロックのないブランチブロックチェーン2、3、4…に記録され、選択されブランチブロックチェーン1に記録すると、データブロック204のコンセンサスを待たなければならず、そのダイジェストを取得できるからであり、これにより、ダイジェストを次のチェーニングすべきデータブロック205のブロックヘッダーに記録し、チェーニングが完了し、このように、待機時間が長くなり、並行して処理できず、効率が低い。継続的に選択されブランチブロックチェーン2、3、4などに記録されるとこのような問題がなく、これらのブランチブロックチェーンの現在の最後のデータブロックが既にコンセンサスを完了したので、このブランチブロックチェーン上の現在の最後のデータブロックのダイジェストを、チェーニングするデータブロックのブロックヘッダーに書き込むことができ、従って、比較的に快速に当該ブランチブロックチェーンに記録することができ、チェーニングの効率を向上させる。
【0035】
図9に示すように、本開示の一実施例によれば、ブロックチェーンにデータブロックを記録する方法を提供する。当該方法は、
図1A-Cにおけるリーダーアカウンティングノード102によって実行される。当該リーダーアカウンティングノードは固定であってもよいし、定期的に選出されてもよい。リーダーアカウンティングノード102の選出方法は、後で詳細に説明される。
【0036】
当該実施例において、ブロックチェーンは複数のブランチブロックチェーンを含む。ブランチブロックチェーンはブロックチェーンが分割される、同一の組のアカウンティングノードがデータブロックを記録し同一のプロセスを占有するチェーンである。同一のプロセスとは、ブランチブロックチェーンの配分は、統合してスケジュールされ、各ブランチブロックチェーンに記録されるデータブロックも統括するスケジューリング順序に従って記録される。これは、サブブロックチェーンの概念とは対照的である。サブブロックチェーンとは、ブロックチェーンが分割される、異なる組のアカウンティングノードがデータブロックを記録し異なるプロセスを占有するチェーンである。例えば、サブブロックチェーン1、2、3はそれぞれサプライチェーンファイナンス、電子請求書、法定デジタル通貨のトランザクションのデータブロックを記録する可能性があり、それぞれ、サプライチェーンファイナンス、電子請求書、法定デジタル通貨データブロックを専用に記録するアカウンティングノード組1、アカウンティングノード組2、アカウンティングノード組3がチェーニングを完了する。各アカウンティングノード組に各データブロックをチェーニングする順序も互いに独立し、互いに影響を与えない。それに対して、ブランチブロックチェーン1、2、3は同一の組のアカウンティングノードによって記録され、ブランチブロックチェーン1、2、3にデータブロックを記録する順序も、当該組のアカウンティングノードにおけるデータブロックの生成順序に影響され、ブランチブロックチェーンに記録される順序は独立せず、ブロックチェーン全体における生成順序によって制御される。
【0037】
図9に示すように、当該実施例において、前記方法は、ステップ410~ステップ450を含む。
ステップ410において、ターゲットデータブロックを生成する。
ステップ420において、前記複数のブランチブロックチェーンのうち、コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有するブランチブロックチェーンが存在するか否かを確定する。
ステップ430において、コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンが存在すると、前記コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンから、ターゲットデータブロックを記録するブランチブロックチェーンを選択する。
ステップ440において、前記選択されたブランチブロックチェーンに記録されている1つ前のデータブロックのダイジェスト値を、ターゲットデータブロックのブロックヘッダーに記録する。
ステップ450において、前記ターゲットデータブロックを当該組のアカウンティングノードにおける他のアカウンティングノードに送信してノードコンセンサスを実行し、前記選択されたブランチブロックチェーンに記録する。
【0038】
以下、これらのステップについて詳細に説明する。
【0039】
ステップ410において、ターゲットデータブロックを生成する。
【0040】
ターゲットデータブロックはチェーニングを必要とするトランザクション情報を含む、現在チェーニングするデータブロックである。一実施例において、リーダーアカウンティングノード102は、ターゲットデータブロックに追加するトランザクション情報を受信した後に、すぐにトランザクション情報をパッケージングしチェーニングするのではなく、ターゲットデータブロックに追加するトランザクション情報が所定の条件を満足するまで、例えば、十分なサイズとなる、又は、十分な数を有するまで待ち、1つのターゲットデータブロックにパッケージングできる。
【0041】
ステップ420において、前記複数のブランチブロックチェーンのうち、コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有するブランチブロックチェーンが存在するか否かを確定する。
【0042】
当該組のアカウンティングノードがチェーニングする必要があるデータブロックはすべてリーダーアカウンティングノードを介してチェーニングされるため、リーダーアカウンティングノードは、これらのブランチブロックチェーンのうちどのブランチブロックチェーンにコンセンサスをまだ完了していないデータブロックがあるか、どのブランチブロックチェーンにコンセンサスをまだ完了しないデータブロックがないかについて、非常に分かる。一実施例において、リーダー記録ノードにおいて各ブランチブロックチェーンに対して1つのコンセンサスフラグビットを設置することができる。1つのデータブロックを生成する度に、当該データブロックが記録するブランチブロックチェーンを選択する場合に、当該ブランチブロックチェーンに対応するコンセンサスフラグビットは1にセットされる。一旦、前記ブランチブロックチェーンのコンセンサスが完了したと、当該ブランチブロックチェーンに対応するコンセンサスフラグビットを0にセットする。このように、コンセンサスフラグビットが0であるブランチブロックチェーンは、コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンである。
【0043】
ステップ430において、コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンが存在すると、前記コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンから、前記ターゲットデータブロックを記録するブランチブロックチェーンを選択する。
【0044】
ターゲットデータブロックを記録するブランチブロックチェーンを選択する方式は、コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンにおいて、シリアルナンバーの順序に従って、選択することであってもよい。
【0045】
この実施例において、前記コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンから、ターゲットデータブロックを記録するブランチブロックチェーンを選択することは、
前記コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンから、第1のブランチブロックチェーンを確定し、前記第1のブランチブロックチェーンのシリアルナンバーが第2のブランチブロックチェーンのシリアルナンバーよりも大きく、前記第2のブランチブロックチェーンは前記ターゲットデータブロックの1つ前のデータブロックを記録するブランチブロックチェーンであり、
前記第1のブランチブロックチェーンのうちシリアルナンバーが最も小さい1つを、ターゲットデータブロックを記録するブランチブロックチェーンとして選択し、
前記コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンに、シリアルナンバーが前記第2のブランチブロックチェーンのシリアルナンバーよりも大きいブランチブロックチェーンが存在しないと、前記コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンのうちシリアルナンバーが最も小さい1つのブランチブロックチェーンを、ターゲットデータブロックを記録するブランチブロックチェーンとして選択することを含む。
【0046】
前記コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンのうち、シリアルナンバーがブロックチェーンの1つ前のデータブロックが記録されるブランチブロックチェーンのシリアルナンバーよりも大きいブランチブロックチェーンから選択することにより、シリアルナンバーが小さい順に選択することを保証する。これらのシリアルナンバーがブロックチェーンの1つ前のデータブロックが記録されるブランチブロックチェーン(即ち、第2のブランチブロックチェーン)のシリアルナンバーよりも大きい第1のブランチブロックチェーンにおいて、シリアルナンバーが最も小さい1つを、ターゲットデータブロックを記録するチェーンのブランチブロックチェーンとして選択することにより、途中で漏れがないことを保証する。例えば、五つのブランチブロックチェーンがあり、シリアルナンバーが1-5であるが、シリアルナンバーが1、3、5であるブランチブロックチェーンのみは、コンセンサスがまだ完了していないデータブロックを有しないブランチブロックチェーンである。1つ前のデータブロックがブランチブロックチェーン2にチェーニングされ、この場合、シリアルナンバー2よりも大きいブランチブロックチェーン3、5から選択し、シリアルナンバー3が比較的に小さいシリアルナンバーであるので、ブランチブロックチェーン3を選択してチェーニングする。
【0047】
また、ブランチブロックチェーンが非常に大きいシリアルナンバーを選択すると、当該シリアルナンバーよりも大きいブランチブロックチェーンであって、コンセンサスをまだ完了していないデータブロックを有しないブランチブロックチェーンがなくなる場合、シリアルナンバーが最も小さいブランチブロックチェーンにループバックでき、チェックを開始することを保証するにはループメカニズムもある。従って、シリアルナンバーが1つ前のデータブロックがチェーニングするブランチブロックチェーン(即ち、前記第2のブランチブロックチェーン)のシリアルナンバーよりも大きい、コンセンサスをまだ完了していないデータブロックを有しないブランチブロックチェーンが存在しないと、前記コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンのうちシリアルナンバーが最も小さい1つのブランチブロックチェーンを、ターゲットデータブロックを記録するブランチブロックチェーンとして選択し、即ち、シリアルナンバーが最も小さいブロックチェーンにループバックして新たに選択する。例えば、五つのブランチブロックチェーンがあり、シリアルナンバーが1-5であるが、シリアルナンバーが1-3であるブランチブロックチェーンのみは、コンセンサスがまだ完了していないデータブロックを有しないブランチブロックチェーンである。1つ前のデータブロックがブランチブロックチェーン4にチェーニングされ、シリアルナンバーが4よりも大きい、コンセンサスをまだ完了していないデータブロックを有しないブランチブロックチェーンが存在しないので、従って、シリアルナンバー1にループバックし、ブランチブロックチェーン1を選択してチェーニングする。
【0048】
上記の実施例の利点は、シリアルナンバーのポーリングの形態に従い、実施が簡単かつ容易であり、実施コストが低いことである。
【0049】
ターゲットデータブロックを記録するブランチブロックチェーンを選択する方式の一つは、各ブランチブロックチェーン上のデータブロック数を平均化する原則に従って、ターゲットデータブロックを、前記記録されているデータブロックが最も少ないブランチブロックチェーンに割り当てることであってもよい。この実施例において、前記コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンから、ターゲットデータブロックを記録するブランチブロックチェーンを選択することは、
コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンの記録されたデータブロック数を確定し、
記録されたデータブロック数が最も少ない1つのブランチブロックチェーンを、ターゲットデータブロックを記録するブランチブロックチェーンとして選択することを含む。
【0050】
一実施例において、コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンの記録されたデータブロック数を確定することは、コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しない各ブランチブロックチェーンの最後のデータブロックのブロック高さをクエリすることにより、実現されてもよい。ブロック高さとは、ブロックの当該ブランチブロックチェーンにおける記録時間順序に従うシリアルナンバーである。あるブランチブロックチェーンに、一番目のデータブロックを記録し、高さが1であり、二番目のデータブロックを記録し、高さが2であり、このように類推する。このようにブロック高さは、当該ブランチブロックチェーン上の記録されたデータブロック数を代表する。
【0051】
当該実施例の利点は、ブランチブロックチェーンのデータブロック数を平均化するのに有利であり、リソース使用の合理性を向上させる。
【0052】
ターゲットデータブロックを記録するブランチブロックチェーンを選択する別の方式は、各ブランチブロックチェーン上の時間平均化などの記録の原則に従って、ターゲットデータブロックを、コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーン上の現在の最後のデータブロックの記録時間と現在データとの差が最大であると確定する1つのブランチブロックチェーンに割り当てることであってもよい。この実施例において、前記コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンから、ターゲットデータブロックを記録するブランチブロックチェーンを選択することは、
コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーン上の最後のデータブロックの記録時間と現在の時間との時間差を確定することを含む。
例えば、前記時間差が最大である1つのブランチブロックチェーンを、ターゲットデータブロックを記録するブランチブロックチェーンとして選択してもよい。
【0053】
リーダーアカウンティングノードには、1つのデータブロック識別子と記録時間との対応関係リストをメンテナンスすることができる。コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーン上の現在の最後のデータブロックの識別子に応じて、当該対応関係リストを調べて、コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーン上の現在の最後のデータブロックの記録時間を取得してもよい。
【0054】
記録された最後のデータブロックの記録時間と現在の時間との差が最大である1つのほかのブランチブロックチェーンを、ターゲットデータブロックを記録するブランチブロックチェーンとして選択する利点は、チェーニングの時間が接近するデータブロックを異なるブランチブロックチェーンに分散させる、各ブランチブロックチェーンにチェーニングの時間上で比較的分散したデータブロックを記憶させ、各ブランチブロックチェーンがデータブロックのチェーニング時間の方で負荷を平均化することに有利である。
【0055】
別の実施例において、
図10に示すように、前記コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンから、ターゲットデータブロックを記録するブランチブロックチェーンを選択することは、ステップ4301~ステップ4303を含む。
ステップ4301において、コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンの記録されたデータブロック数を確定する。
ステップ4302において、コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーン上の最後のデータブロックの記録時間と現在の時間との時間差を確定する。
ステップ4303において、前記記録されたデータブロック数及び前記時間差に応じて、前記コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンから、ターゲットデータブロックを記録するブランチブロックチェーンを選択する。
【0056】
当該実施例は、ブランチブロックチェーンの記録されたデータブロック数のみを考慮するか、又は記録された最後のデータブロックのブロックヘッダーにおける記録時間と現在の時間との差のみを考慮して、ターゲットデータブロックを記録するブランチブロックチェーンを確定する実施例と比べて、各ブランチブロックチェーンのデータブロック数のバランスを考慮するだけでなく、各ブランチブロックチェーン上の、異なる時間におけるチェーニングする各データブロックのバランスも考慮し、各ブランチブロックチェーンにおけるデータブロック全体の負荷のバランスに有利し、リソースの協同効果を向上させる。
【0057】
図11に示すように、一実施例において、ステップ4303は、ステップ43031~ステップ43033を含む。
ステップ43031において、コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンの前記記録されたデータブロック数に対して、第1のスコアを確定する。
ステップ43032において、コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンの前記時間差に対して、第2のスコアを確定する。
ステップ43033において、第1のスコアと第2のスコアの加重和に基づいて、ターゲットデータブロックを記録するブランチブロックチェーンを確定する。
【0058】
この実施例において、ブランチブロックチェーンの記録されたデータブロック数、又は記録された最後のデータブロックのブロックヘッダーにおける記録時間と現在の時間との差をスコア化し、スコアの値に応じてターゲットデータブロックを記録するブランチブロックチェーンを総合確定する。これの利点は、より量子化される方法でターゲットデータブロックを記録するブランチブロックチェーンを選択し、ブランチブロックチェーンの選択の精度を向上させるである。
【0059】
一実施例において、ステップ43031は、式で実現されることができる。ブランチブロックチェーンの記録されたデータブロック数が少ないほど、ターゲットデータブロックを記録するブランチブロックチェーンとして確定する可能性が高くなるので、それにより高い第1のスコアを設置できる。従って、以下の式を設置することができる。
S1=a1/(1+P) 式1
その中、S1は第1のスコアを代表し、a1は予め経験的に設置された定数であり、Pはブランチブロックチェーンの記録されたデータブロック数である。分母に1つ増加させる項目を設置することは、現在、あるブランチブロックチェーンにおいてチェーニングされたデータブロックがない場合に、分母が0に等しくなるのを防止するためである。式1により、コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンに対して、第1のスコアを算出することができる。
【0060】
式法で第1のスコアを算出する利点は、ブランチブロックチェーンを選択する正確性を向上させることである。
【0061】
別の実施例において、ステップ43031は、予め設定されたブランチブロックチェーンの記録されたデータブロック数と第1のスコアとの対応関係表を検索することで実現されてもよい。以下は当該対応関係表の一例である。
【表1】
【0062】
このように、ブランチブロックチェーンの記録されたデータブロック数と第1のスコアの対応関係表を検索することで、当該ブランチブロックチェーンの第1のスコアを得ることができる。
【0063】
当該表を調べる方式の利点は、操作が簡単で行ないやすい。
【0064】
一実施例において、ステップ43032は、式の方式で実現されてもよい。記録された最後のデータブロックのブロックヘッダーにおける記録時間と現在の時間との差が大きいほど、ターゲットデータブロックを記録するブランチブロックチェーンとして確定する可能性が高くなり、それにより高い第2のスコアを設置できる。従って、以下の式を設置することができる。
S2=a2ΔT 式2
なお、S2は第2のスコアを代表し、a2は予め経験的に設置された定数であり、ΔTは記録された最後のデータブロックのブロックヘッダーにおける記録時間と現在の時間との差である。式2により、コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンに対して、第2のスコアを算出することができる。
【0065】
同様に、別の実施例において、ステップ43032は、予め設定された記録された最後のデータブロックのブロックヘッダーにおける記録時間と現在の時間との時間差と、第2のスコアとの対応関係表を調べることにより、実現されることができる。以下、当該対応関係表の一例である。
【0066】
【0067】
ステップ43033において、第1のスコアと第2のスコアの加重和に基づいて、ターゲットデータブロックを記録するブランチブロックチェーンを確定する。
【0068】
この実施例の利点は、第1のスコアと第2のスコアに異なる重みを割り当て、ブランチブロックチェーンの記録されたデータブロック数、及び記録された最後のデータブロックのブロックヘッダーにおける記録時間と現在の時間との差が、ブランチブロックチェーンの選択に対する貢献の違いを十分に考慮し、ブランチブロックチェーンを確定する精度を向上させる。
【0069】
具体的な実施中に、第1のスコア及び第2のスコアの加重和が最大のブランチブロックチェーンを、ターゲットデータブロックを記録するブランチブロックチェーンとして確定してもよい。第1のスコア及び第2のスコアの加重和又は加重平均値が所定の加重和閾値を超える全てのブランチブロックチェーンから1つのブランチブロックチェーンを任意に取って、ターゲットデータブロックを記録するブランチブロックチェーンとして確定してもよい。
【0070】
ステップ440において、選択されたブランチブロックチェーンに記録された1つ前のデータブロックのダイジェスト値を、前記ターゲットデータブロックのブロックヘッダーに記録する。
【0071】
ここで選択されたブランチブロックチェーンに記録された1つ前のデータブロックとは、選択されたブランチブロックチェーンに現在前記録された最後のデータブロックである。当該最後のデータブロックは、既にチェーニングを完了したデータブロックであり、すぐにそのダイジェスト値をターゲットデータブロックのブロックヘッダーに入れてチェーニングし、待たずに、チェーニング効率が向上する。
【0072】
一実施例において、
図4Aに示すように、ブロックヘッダーは、ターゲットデータブロックのブロック本体のダイジェスト値をさらに含む。ブロック本体は、ターゲットデータブロックにおける全てのトランザクション情報を含む。ダイジェスト値の作用は、ブロック本体の内容が異なるとダイジェスト値が異なるため、当該ダイジェスト値が当該データブロックを唯一に代表することである。クエリの場合に、当該ダイジェスト値に応じてデータブロックをクエリすることができる。
【0073】
この実施例において、ステップ440は、
所定のダイジェストアルゴリズムに従って、ターゲットデータブロックのブロック本体のダイジェスト値を算出し、
ターゲットデータブロックのブロック本体のダイジェスト値を、前記選択されたブランチブロックチェーンに記録された1つ前のデータブロックのダイジェスト値とともにターゲットデータブロックのブロックヘッダーに記録することを含む。
【0074】
ステップ450において、前記ターゲットデータブロックを当該組のアカウンティングノードにおける他のアカウンティングノードに送信してコンセンサスを実行し、選択されたブランチブロックチェーンに記録する。
【0075】
図3Bに示すように、ターゲットデータブロックを、選択されたブランチブロックチェーンに記録することは、ターゲットデータブロックを、選択されたブランチブロックチェーンの1つ前のデータブロックの後に記録し、その1つ前のデータブロックのダイジェスト値をターゲットデータブロックのブロックヘッダーに記録し、ターゲットデータブロックのダイジェスト値も当該ブランチブロックチェーン上のターゲットデータブロックの次の記録するデータブロックのブロックヘッダーに記録し、互いに検証し改ざんできないチェーンを形成することを意味する。当該ブランチブロックチェーンのブロック高さはインクリメントする。
【0076】
一実施例において、各ブランチブロックチェーンは識別子を有する。各ブランチブロックチェーンの識別子は互いに異なる。ステップ450は、選択されたブランチブロックチェーンに記録された1つ前のデータブロックのダイジェスト値、及び選択されたブランチブロックチェーンの識別子と、ターゲットデータブロックのブロックヘッダーに記録することを含む。
【0077】
実際に、
図4Bに示すように、ブロックヘッダーに、選択されたブランチブロックチェーンに記録された1つ前のデータブロックのダイジェスト値(hashPrevBlock)、及び選択されたブランチブロックチェーンの識別子(nChinaId)だけでなく、ターゲットデータブロックのブロック本体のダイジェスト値(
図4Bに、具体的に、マークルツリールートであり、ダイジェスト値の一種であり、hashMerkleRoot)、ブロックチェーンバージョン番号(nVersion)、ブロックチェーンの記録時間(即ち、チェーニング時間、nTime)及びブロックチェーン特殊マーカー(nNonce)も含む。
【0078】
図4Bにおいて、従来のブロックヘッダーは、ブロックチェーンバージョン番号(nVersion)、ブランチブロックチェーンに記録された1つ前のデータブロックのダイジェスト値(hashPrevBlock)、ターゲットデータブロックのブロック本体のダイジェスト値(hashMerkleRoot)、ブロックチェーンの記録時間(即ち、チェーニング時間、nTime)及びブロックチェーン特殊マーカー(nNonce)のみを含む。本開示の実施例において、ブロックヘッダーにおいて、ブランチブロックチェーンの識別子(nChinaId)を追加する。しかし、当業者であれば、ブロックチェーンバージョン番号(nVersion)、ブロックチェーンの記録時間(nTime)及びブロックチェーン特殊マーカー(nNonce)がオプションであると理解されたい。一実施例において、ブロックヘッダーにはそれらを全く含まれなくてもよい。別の実施例において、ブロックヘッダーにはそれらのうちの1つ又は複数を含んでもよい。別の実施例において、ブロックヘッダーには上記で言及されたフィールド以外の他のフィールドをさらに含んでもよい。
【0079】
ブロックチェーンバージョン番号(nVersion)は、ブロックチェーンシステムのバージョン番号を示す。例えば、電子請求書情報を記録するブロックチェーンシステムは第1世代システムから第2世代システムにアップグレードされる場合があり、そのブロックチェーンシステムのネットワーキング形態、ブロックチェーン上のデータブロックのデータ構造がアップグレード後に変更される場合がある。ブロックヘッダーにブロックチェーンバージョン番号を標識すると、当該データブロックがどのブロックチェーンシステムバージョンでチェーニングされたデータブロックであるかを標識することに寄与する。
【0080】
ブロックチェーンの記録時間(nTime)は、データブロックを当該ブロックチェーンに記録する時間である。それは、リーダーアカウンティングノードがターゲットデータブロックをチェーニングする場合に現在の時間を当該記録時間フィールドに書き込み、その後チェーニングされる。
【0081】
ブロックチェーン特殊マーカー(nNonce)は、ビットコイントランザクションを標識する場合によく使用されている1つのフィールドである。
【0082】
ブロックヘッダーには、当該ブランチブロックチェーンの識別子が含まれており、チェーニングの場合に、便利に当該識別子に応じてデータブロックを当該識別子に対応するブランチブロックチェーンに記録する。一実施例において、
図12に示すように、ステップ450は、ステップ4501~ステップ4503を含む。
ステップ4501において、ターゲットデータブロックを当該組のアカウンティングノードにおける他のアカウンティングノードに送信する。
ステップ4502において、前記他のアカウンティングノードからのターゲットデータブロックに対する検証結果を受信する。
ステップ4503、検証結果に基づいて検証に成功したことを確定した後に、ターゲットデータブロックを、前記選択されたブランチブロックチェーンに記録し、当該組のアカウンティングノードにおける他のアカウンティングノードに通知し、前記他のアカウンティングノードが前記ブロックヘッダーにおけるブランチブロックチェーンの識別子に応じて、ターゲットデータブロックを前記選択されたブランチブロックチェーンに記録するようにする。
【0083】
以下、ステップ4501-4503について詳細に説明する。
【0084】
ステップ4501において、ターゲットデータブロックを当該組のアカウンティングノードにおける他のアカウンティングノードに送信することは、当該組のアカウンティングノードにおける他のアカウンティングノードが当該ターゲットデータブロックを検証するようにし、コンセンサスの目的を実現する。
【0085】
ステップ4502において、前記他のアカウンティングノードからのターゲットデータブロックに対する検証結果を受信する。
【0086】
他のアカウンティングノードによるターゲットデータブロックの検証は、出力項目消費の検証、データブロック署名の検証、トランザクション情報署名の検証などを含む。
【0087】
以下、出力項目消費の検証について検討する。
【0088】
一実施例において、ブロック本体における各トランザクション情報は入力項目と出力項目を有する。トランザクションは、既に存在している幾つかの情報をトランザクション情報発生側ノードに入力し、トランザクション情報発生側ノードが入力された情報を処理し、トランザクション結果情報を発生して出力するプロセスとして理解され得、なお、トランザクション情報発生側ノードの情報に入力されることを入力項目といい、トランザクション情報発生側ノードが出力するトランザクション結果情報を出力項目という。
【0089】
例えば、電子請求書が適用されるシナリオにおいて、税務局の端末は、起票機関の端末に電子請求書を発行する場合に、税務局の端末に入力される発行者情報(例えば、税務局名、住所など)は入力項目であり、電子請求書を発行した結果として、発生した一連の電子請求書の識別子(例えば、電子請求書のシリアルナンバーなど)、電子請求書に記入された起票機関の端末情報(起票機関名、納税者識別番号など)は出力項目である。起票機関の端末は、払い戻し者の端末に電子請求書を発行する場合に、起票機関の端末に入力された電子請求書情報(例えば、発行された電子請求書の識別子など)は入力項目であり、電子請求書を発行した結果として、電子請求書に記入された払い戻し者名、連絡先などは出力項目である。払い戻し者の端末は、払い戻し機関の端末に払い戻す場合に、払い戻し機関の端末に入力された払い戻し者名、連絡先などは入力項目であり、払い戻しの結果として、払い戻し機関名、納税者識別番号などは出力項目である。入力項目と出力項目は相対的であることが分かる。
【0090】
以上から分かるように、1つのトランザクション情報における入力項目は、別のトランザクション情報における出力項目であり得る。例えば、電子請求書を発行するトランザクション情報の入力項目は電子請求書を発行するトランザクション情報の出力項目であり、電子請求書を払い戻すトランザクション情報の入力項目は電子請求書を発行するトランザクション情報の出力項目である。従って、前記入力項目は、多くの場合、当該ターゲットデータブロックが前にブロックチェーンに記録された別のデータブロックのトランザクション情報の出力項目にリンクされている。例えば、ターゲットデータブロックは電子請求書を払い戻すトランザクション情報の所在するデータブロックの入力項目であり、電子請求書を発行するトランザクション情報の所在するデータブロックの出力項目にリンクされている。リンクの意味は、あるトランザクション情報における入力項目は別のトランザクション情報における出力項目である場合に、当該入力項目を別のトランザクション情報における出力項目で示し、これにより、データブロックのトランザクション情報間の関係を明らかに表す。
【0091】
一実施例において、前記入力項目は、入力項目にリンクされているブランチブロックチェーン識別子(nPreOutChinaId)、入力項目にリンクされているデータブロックのダイジェスト値(hashPrevTx)、入力項目にリンクされているデータブロックないのトランザクション情報のインデックス(NPreOutIndex)を含む。
【0092】
図4Bに示すように、従来のブロック本体におけるトランザクション情報の入力項目は五つのフィールドを含んでもよく、それぞれ、ブロックチェーンバージョン番号(nVersion)、入力項目にリンクされているデータブロックのダイジェスト値(hashPrevTx)、入力項目にリンクされているデータブロック内のトランザクション情報のインデックス(NPreOutIndex)、スクリプト長さ(nScriptLength)、スクリプト(bScript)である。入力項目にリンクされているデータブロックのダイジェスト値(hashPrevTx)は、入力項目がブロックチェーンに記録された前のどのデータブロックにリンクされるかを標識する。入力項目にリンクされているデータブロック内のトランザクション情報のインデックス(NPreOutIndex)は、入力項目が当該データブロック内のどのトランザクション情報にリンクされるかを標識する。入力項目にリンクされているデータブロックのダイジェスト値(hashPrevTx)、入力項目にリンクされているデータブロック内のトランザクション情報のインデックス(NPreOutIndex)により、シングルブロックチェーン上の入力項目にリンクされているブロックチェーンに前に記録されたトランザクション情報の位置を唯一に制限する。でも、マルチブランチブロックチェーンの場合に、入力項目に別のフィールド、つまり、入力項目にリンクされているブランチブロックチェーン識別子(nPreOutChinaId)が必要である。入力項目にリンクされているブランチブロックチェーン識別子(nPreOutChinaId)により、まず、入力項目にリンクされているブランチブロックチェーンを探し出す。当該ブランチブロックチェーンを探し出した後に、入力項目にリンクされているデータブロックのダイジェスト値(hashPrevTx)により、入力項目にリンクされている1つ前のデータブロックを探し出す。当該データブロックを探し出した後に、入力項目にリンクされているデータブロック内のトランザクション情報のインデックス(NPreOutIndex)により、入力項目にリンクされているトランザクション情報を探し出し、マルチブランチブロックチェーン構造における入力項目にリンクされている前に記録されたトランザクション情報の精確な位置決めを実現する。
【0093】
図5Aと
図5Bは、それぞれ、従来のシングルブロックチェーン構造において、データブロックのトランザクション情報の入力項目と前に記録されたトランザクション情報の出力項目とのリンク、及び本開示の実施例のマルチブランチブロックチェーン構造において、データブロックのトランザクション情報の入力項目と前に記録された、異なるブランチブロックチェーンにある可能性があるトランザクション情報の出力項目とのリンクについて、明らかに示す。
【0094】
図5Aに示すように、従来の単ブロックチェーン構造において、データブロックにおけるあるトランザクション情報の入力項目が他のトランザクション情報の出力項目にリンクされると、当該ブロックチェーン上の前に記録されたあるデータブロックにおけるあるトランザクション情報の出力項目にリンクされなければならない。
【0095】
図5Bに示すように、本開示の実施例のマルチブランチブロックチェーン構造において、データブロックにおけるあるトランザクション情報の入力項目が他のトランザクション情報の出力項目にリンクされると、必ずしも当該トランザクション情報の所在するこのブランチブロックチェーン上の前に記録されたデータブロックにおけるトランザクション情報の出力項目である必要はなく、このブランチブロックチェーン以外の他のブランチブロックチェーン上の前に記録されたあるデータブロックにおけるあるトランザクション情報の出力項目にリンクされる可能性がある。このような方式により、各ブランチブロックチェーン間が同じプロセスを共有し、同じ未占有のリソースを共有することが保証される。 どのブランチブロックチェーンがリソースを占有していても、ブロックチェーンの総リソースを占有し、これは、サブブロックチェーンの状況とはまったく異なる。
【0096】
一実施例において、前記他のアカウンティングノードからのターゲットデータブロックに対する検証結果は、(入力項目消費の検証プロセス)は、
前記ターゲットデータブロックにおけるトランザクション情報の入力項目にリンクされている出力項目が、前記ターゲットデータブロックがブロックチェーンに記録された場合に、既に前記ブロックチェーンに記録されたデータブロックにおけるトランザクション情報の入力項目にリンクされているか否かを確定し、そうであれば、検証結果が不合格であり、そうなければ、検証結果が合格であることにより、生成される。
【0097】
当該検証の意味は特定のトランザクション行為の再発、例えば、電子請求書の繰り返し払い戻しを防止する。電子請求書払い戻しのトランザクション情報の入力項目は、前に電子請求書を発行するトランザクション情報の出力項目にリンクされている。電子請求書を発行するトランザクション情報のデータブロックがチェーニングした後に、当該電子請求書が既に払い戻されたと、当該払い戻し電子請求書のトランザクション情報の入力項目も同様に当該電子請求書を発行するトランザクション情報の出力項目にリンクされ、ターゲットデータブロックにおけるトランザクション情報もまた当該電子請求書を発行するトランザクション情報の出力項目にリンクされるので、繰り返し払い戻し操作であり、出力項目消費の検証が不合格であることを表明する。
【0098】
一実施例において、前記ターゲットデータブロックにおけるトランザクション情報の入力項目にリンクされている出力項目が、前記ターゲットデータブロックがブロックチェーンに記録された場合に、既に前記ブロックチェーンに記録されたデータブロックにおけるトランザクション情報の入力項目にリンクされているか否かを確定することは、
前記ターゲットデータブロックがブロックチェーンに記録された時間と当該別のデータブロックがブロックチェーンに記録された時間との間にブロックチェーンに記録されたデータブロックにおけるトランザクション情報の入力項目をトラバーサルし、当該入力項目が当該別のデータブロックのトランザクション情報の出力項目にリンクされているか否かを逐一確定することを含む。
【0099】
データブロックのブロックヘッダーにデータブロックの記録時間、即ち、チェーニング時間を記録しているので、ターゲットデータブロック及び当該別のデータブロックから、ターゲットデータブロック及び当該別のデータブロックの記録時間を取得することができる。その後、この二つの記録時間の間にブロックチェーンに記録された全てのデータブロックを探し出す。
【0100】
一実施例において、この二つの記録時間の間にブロックチェーンに記録された全てのデータブロックを探し出す形態は、リーダーアカウンティングノードに、記録された全てのデータブロック識別子(例えば、ダイジェスト値)と、記録時間と、記録されたブランチブロックチェーン識別子との対応関係表をメンテナンスしている。リーダーアカウンティングノードは1つのデータブロックを1つのブランチブロックチェーンに記録する度に、記録されたデータブロック識別子(例えば、ダイジェスト値)、記録時間及び記録されたブランチブロックチェーン識別子を対応付けて対応関係表に記録する。このように、対応関係表における記録時間が前記二つの記録時間の間にある全てのレコードを調べ、探し出されたレコード中のブランチブロックチェーン識別子に従って、対応するブランチブロックチェーンを探し出し、探し出されたレコード中のデータブロック識別子(例えば、ダイジェスト値)に従って、ブランチブロックチェーン上の対応するデータブロックを探し出すことができる。当該実施例の利点は、表を調べる方式により、前記二つの記録時間の間にブロックチェーンに記録された全てのデータブロックを調べる処理速度を向上させる。
【0101】
別の実施例において、この二つの記録時間の間にブロックチェーンに記録された全てのデータブロックを探し出すことは、各ブランチブロックチェーン上の各データブロックに対して、当該データブロックのブロックヘッダーにおける記録時間が前記二つの記録時間の間にあるか否かを確定し、そうであれば、当該データブロックは、この二つの記録時間の間にブロックチェーンに記録されたデータブロックである。当該実施例の利点は、リーダーアカウンティングノードのメモリを占有せず、リソースを節約することである。
【0102】
この二つの記録時間の間にブロックチェーンに記録された全てのデータブロックを探し出した後に、その中の各データブロックにおけるトランザクション情報の入力項目に対して、当該入力項目が当該別のデータブロックのトランザクション情報の出力項目にリンクされているか否かを逐一確定し、入力項目が当該別のデータブロックのトランザクション情報にリンクされている一つの出力項目を確定したと、あるトランザクションを繰り返して行う行為、例えば、繰り返し払い戻しがあることを表明し、当該トランザクション情報が無効であると確定し、逆に、当該トランザクション情報が有効であると確定する。
【0103】
このような前記ターゲットデータブロックにおけるトランザクション情報の入力項目にリンクされている出力項目が、前記ターゲットデータブロックがブロックチェーンに記録された場合に、既に前記ブロックチェーンに記録されたデータブロックにおけるトランザクション情報の入力項目にリンクされているか否かを確定する利点は、当該トランザクション情報の有効性を検証する正確性を向上させる。
【0104】
別の実施例において、前記ターゲットデータブロックにおけるトランザクション情報の入力項目にリンクされている出力項目が、前記ターゲットデータブロックがブロックチェーンに記録された場合に、既に前記ブロックチェーンに記録されたデータブロックにおけるトランザクション情報の入力項目にリンクされているか否かを確定することは、
前記ターゲットデータブロックにおける各トランザクション情報の入力項目にリンクされている別のデータブロックのトランザクション情報の出力項目に対応する占有ステータスワードをクエリし、当該占有ステータスワードが占有を指示すると、検証結果が不合格であり、そうなければ、検証結果が合格であることを含む。
【0105】
それに相応して、ステップ450の後に、前記方法は、
前記ターゲットデータブロックにおける各トランザクション情報の出力項目に対応する占有ステータスワードを設置して未占有を指示し、
前記ターゲットデータブロックにおけるトランザクション情報の入力項目にリンクされている別のデータブロックのトランザクション情報の出力項目に対応する占有ステータスワードを設置して、占有を指示することをさらに含む。
【0106】
この実施例において、リーダーアカウンティングノードは、1つのデータブロックをチェーニングする度に、当該データブロックにおける各トランザクション情報の出力項目に1つの占有ステータスワードを割り当て、当該トランザクション情報と対応付けてリーダーアカウンティングノードのメモリに記憶し、当該占有ステータスワードを未占有に設置し、例えば、0に設置する。その後、一旦いかなるデータブロックをチェーニングすると、これらのデータブロックにおけるトランザクション情報の出力項目も同様に占有ステータスワードが割り当てられ、未占有以外を指示するように設置され、これらのトランザクション情報の入力項目にリンクされているトランザクション情報の出力項目に対応する占有ステータスワードは占有を指示するように設置され、例えば、1に設置する。既に占有を指示するように設置された占有ステータスワードは、再び、占有を指示するように設置できなく、このように、繰り返し払い戻しなどのトランザクションの再発を回避する。
【0107】
具体的に、前記ブロック本体における各トランザクション情報の入力項目にリンクされている別のデータブロックのトランザクション情報の出力項目に対応する占有ステータスワードをクエリし、当該占有ステータスワードが占有を指示すると、あるトランザクション(例えば、繰り返し払い戻し)を繰り返し発生する可能性が非常に高いことを表明し、検証結果が不合格であると確定し、そうなければ、検証結果が合格であると確定する。
【0108】
当該実施例の利点は、メモリにおける占有ステータスワードを快速にクエリすることで、出力項目消費の検証を行うことができることであり、出力項目消費検証の効率を向上させる。
【0109】
以下、データブロック署名の検証のプロセスについて検討する。
【0110】
一実施例において、ステップ440は、前記選択されたブランチブロックチェーンに記録された1つ前のデータブロックのダイジェスト値を、前記リーダーアカウンティングノードに固有の秘密鍵で前記ダイジェスト値を暗号化して形成する署名とともに、ターゲットデータブロックのブロックヘッダーに記録することを含む。
【0111】
前記他のアカウンティングノードからのターゲットデータブロックに対する検証結果は、
前記リーダーアカウンティングノードに固有の公開鍵で前記署名を復号化し、
復号化した結果とブロックヘッダーにおけるダイジェスト値とを比較し、一致すると、検証結果が合格であり、一致しないと、検証結果が不合格であることにより、生成される。
【0112】
当該実施例の利点は、リーダーアカウンティングノードのアカウンティングを検証でき、これにより、以後のプロセスにおいて当該アカウンティングが否認防止性を有することである。リーダーアカウンティングノードは、前記リーダーアカウンティングノードに固有の秘密鍵でブロック本体を署名し、リーダーアカウンティングノードそのもの以外、一般、当該リーダーアカウンティングノードの秘密鍵を有しないので、リーダーアカウンティングノードの公開鍵から前記ブロック本体及び署名に対する検証に成功したと、当該ブロック本体は当該リーダーアカウンティングノードによりチェーニングされなければならないことを表明する。これから、当該ブロック本体の内容に問題が発生し、例えば、改ざんが報告された場合に、必ずリーダーアカウンティングノードが行い、リーダー記録ノードのみがその秘密鍵で署名できるので、否認防止性が発生し、ブロックチェーンがチェーニングするセキュリティを向上させる。
【0113】
リーダーアカウンティングノードの公開鍵と秘密鍵は、専用の認証センターノード(図示せず)によって一律に発行できる。
【0114】
以下、トランザクション情報署名の検証のプロセスについて検討する。
【0115】
上面実施例は、データブロック全体のブロック本体を署名する場合に焦点を合わせて、以下の実施例において、ブロック本体における各トランザクション情報を署名する場合について説明する。ブロック本体における各トランザクション情報を署名することはトランザクション情報の発生側ノードが行う。
【0116】
当該実施例において、ターゲットデータブロックに追加するトランザクション情報は、当該トランザクション情報が発生する発生側ノードが前記発生側ノードに固有の秘密鍵で署名される。
【0117】
図1Aのアーキテクチャにおいて、トランザクション情報が発生する発生側ノードはトランザクション情報発生側アカウンティングノード103である。
図1Bのアーキテクチャにおいて、トランザクション情報が発生する発生側ノードは当該組のアカウンティングノード100以外のトランザクション情報発生側ノード104である。
図1Cのアーキテクチャにおいて、トランザクション情報が発生する発生側ノードはサービスノード組107におけるトランザクション情報発生側サービスノード106である。
【0118】
一実施例において、前記発生側ノードに固有の公開鍵と秘密鍵は、専用の認証センターノード(図示せず)によって一律に発行することもできる。
【0119】
この実施例において、前記ターゲットデータブロックにおおける各トランザクション情報は、当該トランザクション情報が発生する発生側ノードが前記発生側ノードに固有の秘密鍵で署名され、当該トランザクション情報とともにターゲットデータブロックに記録される。即ち、ブロック本体には、各トランザクション情報だけでなく、各トランザクション情報に対応する署名も含む。トランザクション情報と署名とは一対一に対応してブロック本体に記録される。
【0120】
図13に示すように、この実施例において、前記他のアカウンティングノードからのターゲットデータブロックに対する検証結果は以下のように生成される。
ステップ610において、ターゲットデータブロックにおける各トランザクション情報の署名に対して、前記発生側ノードに固有の公開鍵で復号化する。
ステップ620において、ターゲットデータブロックにおける各トランザクション情報に対して、ダイジェスト値を求める。
ステップ630において、復号化した結果と、ターゲットデータブロックにおける対応するトランザクション情報のダイジェスト値とを比較し、各トランザクション情報に対する復号化結果と対応するトランザクション情報のダイジェスト値とが一致すると、検証結果が合格であり、一致しないと、検証結果が不合格である。
【0121】
トランザクション情報署名の検証は、ブロック本体における各トランザクション情報が相応する発生側ノードが実際発生したものである、改ざんされず、伝送中で失わないか否かを検証することを目的とする。当該実施例は、データブロックにおけるトランザクション情報のセキュリティをさらに向上させる。
【0122】
トランザクション情報発生側ノードがトランザクション情報の署名が発生することは、一般、以下のプロセスに従い、トランザクション情報に対して、所定のダイジェストアルゴリズムに従って、ダイジェストを生成し、トランザクション情報の発生側ノードに固有の秘密鍵でダイジェストを暗号化し、トランザクション情報の署名を取得する。それに相応して、第2の署名を検証する場合に、トランザクション情報の発生側ノードに固有の公開鍵でトランザクション情報の署名を復号化し、次に、トランザクション情報の署名が発生する場合に同じ所定のダイジェストアルゴリズムに従って、トランザクション情報に対して、ダイジェストを生成し、生成したダイジェストと復号化して得られたダイジェストとを比較し、一致すると、当該トランザクション情報がトランザクション情報発生側ノードが実際に発生したものであり、且つ伝送損失なしであり、トランザクション情報の署名の検証に成功し、そうなければ、トランザクション情報の署名の検証が不合格であることを表明する。
【0123】
上記のデータブロックの出力項目消費の検証、データブロック署名の検証及びトランザクション情報署名の検証のプロセスは、
図6のリーダーアカウンティングノードがチェーニングを必要とするデータブロックを各他のアカウンティングノードに送信し各他のアカウンティングノードが検証するプロセスにおいて実行される。検証が合格であると、各検証が合格であるアカウンティングノードは、全ての他のアカウンティングノードに、検証に成功したメッセージを送信する。
【0124】
ステップ4503において、検証結果に基づいて検証に成功したことを確定した後に、ターゲットデータブロックを、選択されたブランチブロックチェーンに記録し、当該組のアカウンティングノードにおける他のアカウンティングノードに通知し、他のアカウンティングノードが前記ブロックヘッダーにおけるブランチブロックチェーンの識別子に応じて、ターゲットデータブロックを選択されたブランチブロックチェーンに記録するようにする。
【0125】
一実施例において、上記の出力項目消費の検証、データブロック署名の検証及びトランザクション情報署名の検証が同時に存在する場合に、上記の3つの検証のいずれかが不合格である限り、当該他のアカウンティングノードは、リーダーアカウンティングノードに検証が不合格である検証結果を送信し、上記の3つの検証のすべてが合格であると、当該他のアカウンティングノードはリーダーアカウンティングノードに検証が合格である検証結果を送信する。
【0126】
一実施例において、以下のように、検証結果に基づいて検証に成功することを確定する。
リーダーアカウンティングノードは受信した検証が合格である検証結果数が(2f+1)に達すると、検証に成功したと確定し、なお、fは(N-1)/3よりも小さい最大の整数であり、Nは当該組のアカウンティングノードにおけるアカウンティングノードの数である。所定数(2f+1)以上の他のアカウンティングノードからフィードバックした検証が合格である検証結果を受信したと、f以上のアカウンティングノードが相互に連携して悪事をすることを防止し、アカウンティングのセキュリティを向上させる効果を実現することができる。
【0127】
このプロセスは、
図6により明確になる。
図6において、リーダーアカウンティングノードは、他のアカウンティングノードにデータブロックをブロードキャストする。他のアカウンティングノードは、ブロック本体を受信した後に、検証しなければならず、検証が合格であると、検証が合格である検証結果を戻す。リーダーアカウンティングノードは、(2f+1)以上の検証が合格である検証結果を受信したと、検証に成功したと確定する。
【0128】
その後、
図6に示すように、リーダーアカウンティングノードはターゲットデータブロックをブロックヘッダーにおけるブランチブロックチェーン識別子に対応するブランチブロックチェーンに提出。ブロックチェーンシステムにおいて、各アカウンティングノードが同様なブロックチェーンを同期するので、リーダー記録ノードは、さらに、ターゲットデータブロックを当該組のアカウンティングノードにおける他のアカウンティングノードに送信する必要があり、他のアカウンティングノードが前記ブロックヘッダーにおけるブランチブロックチェーンの識別子に応じて、ターゲットデータブロックを、選択されたブランチブロックチェーンに提出ようにする。このように、同期は完了する。各他のアカウンティングノードの提出に成功した後に、リーダーアカウンティングノードに、提出に成功したメッセージを送信する。リーダーアカウンティングノードは、所定数(2f+1)の他のアカウンティングノードから送信した提出に成功したメッセージを受信した後に、チェーニングが完了すると確定する。なお、fは(N-1)/3よりも小さい最大の整数であり、Nは当該組のアカウンティングノードにおけるアカウンティングノードの数である。fはアルゴリズムが許容できる当該組のアカウンティングノードのうちの悪意のあるノードの数である。
【0129】
一実施例において、ステップ420の後に、前記方法は、各ブランチブロックチェーンのすべてがコンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有すると、各ブランチブロックチェーンのデータブロックがコンセンサスを完了するのを待ち、データブロックがコンセンサスを最も早く完了したブランチブロックチェーンを、ターゲットデータブロックを記録するブランチブロックチェーンとして選択することをさらに含む。
【0130】
前述ステップ430の前提条件は、コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンが存在することである。しかし、幾つかの特殊な場合において、短時間でチェーニングするデータブロックが非常に多いことなどの原因によって、全てのブランチブロックチェーンが存在しないような場合を引き起こし、即ち、全てのブランチブロックチェーンにコンセンサスをまだ完了しておらず、チェーニングを待つデータブロックがある。この場合、各ブランチブロックチェーンのデータブロックがコンセンサスを完了するのを待ち、データブロックがコンセンサスを最も早く完了したブランチブロックチェーンを、ターゲットデータブロックを記録するブランチブロックチェーンとして選択することができる。このようにすれば、利点は、あるブランチブロックチェーンのデータブロックがコンセンサスを最も早く完了したと、すぐに当該ブランチブロックチェーンを利用してチェーニングすることができ、チェーニング時間を節約し、チェーニング効率を向上させる。
【0131】
当該ステップの後、また、ステップ440及びステップ450、即ち、ダイジェスト値の記録及びコンセンサスチェーニングのプロセスを実行する必要があり、この部分は、以上と同じであるので、再度説明されない。
【0132】
図3Bは、複数のブランチブロックチェーンが1次元で配列された構成形式を示し、即ち、複数のブランチブロックチェーンが1次元で順に配列され、例えば、ブランチブロックチェーン1-ブランチブロックチェーン2-ブランチブロックチェーン3-ブランチブロックチェーン4-ブランチブロックチェーン5であり、ブランチブロックチェーンの数が比較的に少ない場合に管理されやすい。ブランチブロックチェーンの数が数千に達する場合、多次元配列の方はより良い形式であり得る。
【0133】
従って、一実施例において、前記複数のブランチブロックチェーンは、M次元行列に配列された複数のブランチブロックチェーンであり、Mが1よりも大きい正の整数であり、各ブランチブロックチェーンの識別子がM個の要素のベクトルであり、各要素が当該ブランチブロックチェーンの相応する1次元におけるシリアルナンバーを示す。
【0134】
図8の例において、M=2、即ち、次元が2であり、各次元に最大シリアルナンバーが3であり、つまり、各次元に1、2、3の3つのシリアルナンバーがあり、この場合、各ブランチブロックチェーンの識別子は、二つの要素があるベクトルであり、各ベクトルの取り得る値は1-3であり、全部で(1,1)、(1,2)、(1,3)、(2,1)、(2,2)、(2,3)、(3,1)、(3,2)、(3,3)の9種類の識別子があり、それぞれ九つのブランチブロックチェーンを代表する。各ブランチブロックチェーンにおいてデータブロックが当該ブランチブロックチェーンに記録される順序で配列される。
【0135】
図8において、各ブランチブロックチェーンに3つのデータブロックを配列する模式図を示す。実際に、各ブランチブロックチェーンに他の数のデータブロックを配列する可能性がある。そして、ブランチブロックチェーンはより多い次元の行列に配列され得、各次元に他の数のシリアルナンバーがあり得る。各ブランチブロックチェーン間に記録の順序を予め定めることができる。ターゲットデータブロックを記録するブランチブロックチェーンを選択する場合に、定められた順序に従って、1つ前のデータブロックの所在するブランチブロックチェーンの次のブランチブロックチェーンを、ターゲットデータブロックを記録するブランチブロックチェーンとして選択することができる。例えば、
図8に、(1,1)-(1,2)-(1,3)-(2,1)-(2,2)-(2,3)-(3,1)-(3,2)-(3,3)という順序に従って、記録用のブランチブロックチェーンを選択することができる。1つ前のデータブロックがブランチブロックチェーン(1,3)に記録された場合に、ターゲットデータブロックをブランチブロックチェーン(2,1)に記録する。
【0136】
多次元行列配列形態の利点は、ブランチブロックチェーンの数が大きい場合に、ブランチブロックチェーンスケジューリングの効率を向上するのに有利である。
【0137】
図7は、本開示の実施例の適用効果を総合的に示している。
図7において、トランザクション情報発生側ノード1-3はトランザクション情報を発生して、リーダーアカウンティングノードに送信してチェーニングする。リーダーアカウンティングノードはこれらのトランザクション情報を受信し、パッケージング条件を満足すると考えて、それをパッケージングする。次に、リーダーアカウンティングノードは記録するブランチブロックチェーンを選択し始め、即ち、前記コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンから、ターゲットデータブロックを記録するブランチブロックチェーンを選択し始める。次に、このブランチブロックチェーンの識別子をデータブロックのブロックヘッダーに入れて、アカウンティングノード1-3にブロードキャストする。アカウンティングノード1-3は当該データブロックを受信した後に、上記の出力項目消費の検証、データブロック署名の検証、トランザクション情報署名の検証などの検証を行い、検証結果を当該組のアカウンティングノードにおける他の全てアカウンティングノードにブロードキャストする。リーダーアカウンティングノードは所定数のアカウンティングノードから送信した検証が合格である検証結果を受信した場合に、ブロックヘッダーにおけるブランチブロックチェーン識別子に従って、データブロックを対応するブランチブロックチェーンに提出する。各他のアカウンティングノードもブロックヘッダーにおけるブランチブロックチェーン識別子に従って、データブロックを、対応するブランチブロックチェーンに提出する。
【0138】
当該図から分かるように、リーダーアカウンティングノードが記録するブランチブロックチェーンを選択する場合に、コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンを選択するので、1つ前のデータブロックチェーニングが完了するのを待たずに、当該コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーン上の最後のデータブロックのダイジェスト値を選択してターゲットデータブロックのブロックヘッダーに記録し、チェーニングすることができ、待ち時間を減少し、チェーニング効率を向上させる。
【0139】
一実施例において、
図14に示すように、リーダーアカウンティングノードが当該組のアカウンティングノードから以下の形態に従って選出される。
ステップ710において、当該組のアカウンティングノードにおける各アカウンティングノードの現在の処理負荷を取得する。
ステップ720において、前記現在の処理負荷に基づいて、リーダーアカウンティングノードを確定する。
【0140】
当該実施例において、リーダーアカウンティングノードは固定されず、各アカウンティングノードの処理負荷に応じて調整され、アカウンティングノード処理負荷を分散する効果を実現する。
【0141】
処理負荷とは、ノードが処理しているタスクの量である。それは、ノードが処理しているタスクの数で表すことができる。ステップ710において、当該組のアカウンティングノードにおける各アカウンティングノードの現在の処理負荷を取得することは、各アカウンティングノードが能動的に報告すること及び受動的にクエリすることの二つの形態を採用してもよい。
【0142】
能動的に報告する実施例において、ステップ710は、
当該組のアカウンティングノードにおける各アカウンティングノードが定期的にブロードキャストしたリアルタイム処理負荷を受信し、
受信した各アカウンティングノードが最近ブロードキャストしたリアルタイムの処理負荷を、当該アカウンティングノードの現在の処理負荷とすることを含む。
【0143】
リアルタイムの処理負荷とは、ノードのブロードキャストのタイミングにおける処理負荷である。
【0144】
当該組のアカウンティングノードにおける各アカウンティングノードの現在の処理負荷を取得する必要がある場合に、受信し記憶された各アカウンティングノードが最近ブロードキャストしたリアルタイム処理負荷を調べ、当該アカウンティングノードの現在の処理負荷とする。例えば、3秒ごとに、アカウンティングノードは、当該組のアカウンティングノードにおける他の全てアカウンティングノードにリアルタイム処理負荷をブロードキャストする。12:37:31に、アカウンティングノードがブロードキャストしたリアルタイムの処理負荷を受信した。12:37:33に、アカウンティングノードの現在の処理負荷を確定する必要がある。アカウンティングノードがブロードキャストしたリアルタイムの処理負荷を、12:37:31に最近受信したと確定する。従って、12:37:31にブロードキャストされたリアルタイム処理負荷を、当該アカウンティングノードの現在の処理負荷とする。
【0145】
能動的に報告する実施例の利点は、リーダーアカウンティングノードがクエリする処理のオーバーヘッドを減少することである。
【0146】
受動的にクエリする実施例において、ステップ710は、
当該組のアカウンティングノードにおける各アカウンティングノードに現在の処理負荷クエリする要求を送信し、
各アカウンティングノードから現在の処理負荷を受信することを含む。
【0147】
受動的にクエリする実施例の利点は、アカウンティングノードの現在の処理負荷を確定する必要がある場合のみに、クエリを開始し、クエリされた現在の処理負荷は、アカウンティングノードの現在の処理負荷を確定する必要ある場合における実負荷であり、アカウンティングノードの現在の処理負荷を確定する正確性を向上させる。
【0148】
一実施例において、ステップ720は、
前記現在の処理負荷が最小のアカウンティングノードを、リーダーアカウンティングノードとして確定することを含む。
【0149】
現在の処理負荷が最小のアカウンティングノードは、ワークロードが最も不十分であるアカウンティングノードであり得る。それをリーダーアカウンティングノードとして選択することは、アカウンティングノードのワークロードのバランスにより有利である。
【0150】
別の実施例において、ステップ720は、
前記現在の処理負荷が所定の処理負荷閾値よりも低いアカウンティングノードからいずれか一つを、リーダーアカウンティングノードとして選択することを含む。
【0151】
当該実施例において、現在の処理負荷が所定の処理負荷閾値よりも低い限り、リーダーアカウンティングノードとすることができると見なされると考えられる。当該実施例の利点は、処理負荷が最小のアカウンティングノードのみを選択し、当該処理負荷が最小のアカウンティングノードが渋滞することを防止する。
【0152】
図15に示すように、本開示の一実施例によれば、ブロックチェーンの記録に使用されるリーダーアカウンティングノードを提供し、前記ブロックチェーンは複数のブランチブロックチェーンを含み、前記複数のブランチブロックチェーンは同一の組のアカウンティングノードがデータブロックを記録し、前記リーダーアカウンティングノードは当該組のアカウンティングノードから選択され、前記リーダーアカウンティングノードは、
ターゲットデータブロックを生成するためのターゲットデータブロック生成モジュール910と、
前記複数のブランチブロックチェーンのうち、コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有するブランチブロックチェーンが存在するか否かを確定するための確定モジュール920と、
コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンが存在すると、前記コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンから、前記ターゲットデータブロックを記録するブランチブロックチェーンを選択するためのブランチブロックチェーン選択モジュール930と、
選択されたブランチブロックチェーンに記録された1つ前のデータブロックのダイジェスト値を、前記ターゲットデータブロックのブロックヘッダーに記録するためのダイジェスト値記録モジュール940と、
前記ターゲットデータブロックを、当該組のアカウンティングノードにおける他のアカウンティングノードに送信してコンセンサスを実行し、前記選択されたブランチブロックチェーンに記録するためのコンセンサスブロックチェーン記録モジュール950とを含むことを特徴とするリーダーアカウンティングノード。
【0153】
一実施例において、前記リーダーアカウンティングノードは、
前記複数のブランチブロックチェーンのすべてがコンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有すると、前記複数のブランチブロックチェーンのデータブロックがコンセンサスを完了するのを待ち、データブロックがコンセンサスを最も早く完了したブランチブロックチェーンを、ターゲットデータブロックを記録するブランチブロックチェーンとして選択するための第2のブランチブロックチェーン選択モジュールをさらに含む。
【0154】
一実施例において、前記複数のブランチブロックチェーンはシリアルナンバーを有する。第1のブランチブロックチェーン選択モジュール930は、さらに、
前記コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンから、第1のブランチブロックチェーンを確定し、前記第1のブランチブロックチェーンのシリアルナンバーが第2のブランチブロックチェーンのシリアルナンバーよりも大きく、前記第2のブランチブロックチェーンは前記ターゲットデータブロックの1つ前のデータブロックを記録するブランチブロックチェーンであり、
前記第1のブランチブロックチェーンのうちシリアルナンバーが最も小さい1つを、ターゲットデータブロックを記録するブランチブロックチェーンとして選択し、
前記コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンに、シリアルナンバーが前記第2のブランチブロックチェーンのシリアルナンバーよりも大きいブランチブロックチェーンが存在しないと、前記コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンのうちシリアルナンバーが最も小さい1つのブランチブロックチェーンを、ターゲットデータブロックを記録するブランチブロックチェーンとして選択するために用いられる。
【0155】
一実施例において、前記第1のブランチブロックチェーン選択モジュール930は、さらに、
コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンの記録されたデータブロック数を確定し、
コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーン上の最後のデータブロックの記録時間と現在の時間との時間差を確定し、
前記記録されたデータブロック数及び前記時間差に応じて、前記コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンから、ターゲットデータブロックを記録するブランチブロックチェーンを選択するために用いられる。
【0156】
一実施例において、前記記録されたデータブロック数及び前記時間差に応じて、前記コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンから、ターゲットデータブロックを記録するブランチブロックチェーンを選択することは、
コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンの前記記録されたデータブロック数に対して、第1のスコアを確定し、
コンセンサスをまだ完了しておらず、チェーニングを待つデータブロックを有しないブランチブロックチェーンの前記時間差に対して、第2のスコアを確定し、
第1のスコアと第2のスコアの加重和に基づいて、ターゲットデータブロックを記録するブランチブロックチェーンを確定することを含む。
【0157】
一実施例において、前記複数のブランチブロックチェーンのそれぞれは識別子を有する。前記ダイジェスト値記録モジュール940は、さらに、前記選択されたブランチブロックチェーンに記録された1つ前のデータブロックのダイジェスト値、及び前記選択されたブランチブロックチェーンの識別子を、ターゲットデータブロックのブロックヘッダーに記録するために用いられる。前記コンセンサスブロックチェーン記録モジュール950は、さらに、
ターゲットデータブロックを当該組のアカウンティングノードにおける他のアカウンティングノードに送信し、
前記他のアカウンティングノードからのターゲットデータブロックに対する検証結果を受信し、
検証結果に基づいて検証に成功したことを確定した後に、ターゲットデータブロックを、前記選択されたブランチブロックチェーンに記録し、当該組のアカウンティングノードにおける他のアカウンティングノードに通知し、前記他のアカウンティングノードが前記ブロックヘッダーにおけるブランチブロックチェーンの識別子に応じて、ターゲットデータブロックを前記選択されたブランチブロックチェーンに記録するようにするために用いられる。
【0158】
一実施例において、前記ターゲットデータブロックにおけるトランザクション情報は入力項目及び出力項目を有し、前記入力項目が前記ターゲットデータブロックの前に前記ブロックチェーンに記録された別のデータブロックのトランザクション情報の出力項目にリンクされる。前記他のアカウンティングノードからのターゲットデータブロックに対する検証結果は、前記コンセンサスブロックチェーン記録モジュール950により、
前記ターゲットデータブロックにおけるトランザクション情報の入力項目にリンクされている出力項目が、前記ターゲットデータブロックがブロックチェーンに記録された場合に、既に前記ブロックチェーンに記録されたデータブロックにおけるトランザクション情報の入力項目にリンクされているか否かを確定し、そうであれば、検証結果が不合格であり、そうなければ、検証結果が合格であることにより、生成される。
【0159】
一実施例において、前記コンセンサスブロックチェーン記録モジュール950は、さらに、
前記ターゲットデータブロックがブロックチェーンに記録された時間と当該別のデータブロックがブロックチェーンに記録された時間との間にブロックチェーンに記録されたデータブロックにおけるトランザクション情報の入力項目をトラバーサルし、当該入力項目が当該別のデータブロックのトランザクション情報の出力項目にリンクされているか否かを逐一確定するために用いられる。
【0160】
一実施例において、前記コンセンサスブロックチェーン記録モジュール950は、さらに、
前記ターゲットデータブロックにおけるトランザクション情報の入力項目にリンクされている別のデータブロックのトランザクション情報の出力項目に対応する占有ステータスワードをクエリし、当該占有ステータスワードが占有を指示すると、検証結果が不合格であり、そうなければ、検証結果が合格であり、
前記ターゲットデータブロックにおけるトランザクション情報の出力項目に対応する占有ステータスワードを設置して未占有を指示し、
前記ターゲットデータブロックにおけるトランザクション情報の入力項目にリンクされている別のデータブロックのトランザクション情報の出力項目に対応する占有ステータスワードを設置して、占有を指示するために用いられる。
【0161】
一実施例において、前記ダイジェスト値記録モジュール940は、さらに、前記選択されたブランチブロックチェーンに記録された1つ前のデータブロックのダイジェスト値を、前記リーダーアカウンティングノードに固有の秘密鍵で前記ダイジェスト値を暗号化して形成する署名とともに、ターゲットデータブロックのブロックヘッダーに記録するために用いられる。前記他のアカウンティングノードからのターゲットデータブロックに対する検証結果は、
前記リーダーアカウンティングノードに固有の公開鍵で前記署名を復号化し、
復号化した結果とブロックヘッダーにおけるダイジェスト値とを比較し、一致すると、検証結果が合格であり、一致しないと、検証結果が不合格であることにより、生成される。
【0162】
一実施例において、前記ターゲットデータブロックにおけるトランザクション情報は、当該トランザクション情報が発生する発生側ノードが前記発生側ノードに固有の秘密鍵で署名され、当該トランザクション情報とともにターゲットデータブロックに記録される。
前記他のアカウンティングノードからのターゲットデータブロックに対する検証結果は前記コンセンサスブロックチェーン記録モジュール950により、
ターゲットデータブロックにおける各トランザクション情報の署名に対して、前記発生側ノードに固有の公開鍵で復号化し、
ターゲットデータブロックにおける各トランザクション情報に対して、ダイジェスト値を求め、
復号化した結果と、ターゲットデータブロックにおける対応するトランザクション情報のダイジェスト値とを比較し、各トランザクション情報に対する復号化結果と対応するトランザクション情報のダイジェスト値とが一致すると、検証結果が合格であり、一致しないと、検証結果が不合格であることにより、生成される。
【0163】
一実施例において、前記複数のブランチブロックチェーンは、M次元行列に配列された複数のブランチブロックチェーンであり、Mが1よりも大きい正の整数であり、各ブランチブロックチェーンの識別子がM個の要素のベクトルであり、各要素が当該ブランチブロックチェーンの相応する1次元におけるシリアルナンバーを示す。
【0164】
本開示の実施例によるブロックチェーンネットワークにデータブロックを記録する方法は
図16に示すリーダーアカウンティングノード102によって実現されることができる。以下、
図16を参照しながら本開示の実施例によるリーダーアカウンティングノード102を説明する。
図16に示されるリーダーアカウンティングノード102は単なる例示に過ぎず、本開示の実施例の機能と適用範囲を限定するものではない。
【0165】
図16に示されるように、リーダーアカウンティングノード102は汎用コンピュータの態様で表され、リーダーアカウンティングノード102のコンポーネントは、上記少なくとも1つの処理ユニット810と、少なくとも1つの記憶ユニット820と、異なるシステムコンポーネントを接続する(処理ユニット810と記憶ユニット820とを含む)バス830とを含んでもよいが、これらに限らない。
【0166】
そのうち、前記記憶ユニットには、前記処理ユニット810によって実行可能なプログラムコードが格納されており、これによって、前記処理ユニット810は、本明細書の上記例示的な方法の説明部分に記載された本発明の各例示的な実施形態によるステップを実行することができる。例えば、前記処理ユニット810は
図9に示される各ステップを実行することができる。
【0167】
記憶ユニット820は、揮発性記憶ユニットの態様の読み取り可能な媒体、例えばランダムアクセス記憶ユニット(RAM)8201及び/又はバッファリング記憶ユニット8202を含んでもよく、読み取り専用記憶ユニット(ROM)8203をさらに含んでもよい。
【0168】
記憶ユニット820は、1組(少なくとも1つ)のプログラムモジュール8205を有するプログラム/ユーティリティ8204を含んでもよく、このようなプログラムモジュール8205は、オペレーティングシステム、1つ又は複数のアプリケーション、他のプログラムモジュール、及びプログラムデータを含むが、これらに限らず、これらの例示の各々又はある組み合わせには、ネットワーク環境の実現を含む可能性がある。
【0169】
バス830は、いくつかのタイプのバス構成の一種又は多種であってもよく、記憶ユニットバス又は記憶ユニットコントローラ、周辺バス、グラフィックス加速ポート、処理ユニット、又は各種のバス構成のいずれかのバス構成を使用するローカルエリアバスを含む。
【0170】
リーダーアカウンティングノード102は、1つ又は複数の外部デバイス700(例えば、キーボード、ポインティングデバイス、ブルートゥースデバイス等)と通信することができ、ユーザが当該リーダーアカウンティングノード102と対話できるようにする1つ又は複数のデバイスと通信することもでき、及び/又は、当該リーダーアカウンティングノード102が1つ又は複数の他のコンピュータデバイスと通信できるようにする任意のデバイス(例えば、ルータ、変復調器等)と通信することができる。このような通信は、入出力(I/O)インターフェース850を介して行うことができる。また、リーダーアカウンティングノード102は、ネットワークアダプタ860を介して1つ又は複数のネットワーク(例えば、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、及び/又は公衆ネットワーク、例えばインターネット)と通信することもできる。図に示されるように、ネットワークアダプタ860はバス830を介してリーダーアカウンティングノード102の他のモジュールと通信する。理解すべきことは、図示されていないが、リーダーアカウンティングノード102を組み合わせて他のハードウェア及び/又はソフトウェアモジュールを使用することができ、マイクロコード、デバイスドライバー、冗長処理ユニット、外部磁気ディスクドライブアレイ、RAIDシステム、磁気テープドライバ及びデータバックアップ記憶システム等を含むが、これらに限らない。
【0171】
以上の実施形態の説明によれば、当業者が容易に理解できるように、ここで説明された例示的な実施形態はソフトウェアにより実現されてもよいし、ソフトウェアを必要なハードウェアと組み合わせることで実現されてもよい。したがって、本開示の実施形態による技術案は、ソフトウェア製品という態様で表されることができ、当該ソフトウェア製品は、不揮発性記憶媒体(CD-ROM、USBメモリ、リムーバブルハードディスク等であってもよい)又はネットワーク上に格納され、一台のコンピュータデバイス(パソコン、サーバ、端末装置、又はネットワークデバイス等であってもよい)が本開示の実施形態による方法を実行できるように、いくつかの指令を含んでもよい。
【0172】
本開示の例示的な実施例では、コンピュータ読み取り可能な指令が格納され、前記コンピュータ読み取り可能な指令がコンピュータのプロセッサによって実行される場合、コンピュータに上記方法実施例部分に記載された方法を実行させるコンピュータプログラム媒体がさらに提供されている
【0173】
本開示の1つの実施例によれば、ポータブル形コンパクト・ディスク-読み取り専用メモリ(CD-ROM)を採用でき、かつプログラムコードを含み、端末装置、例えばパソコン上で運行できる、上記方法実施例における方法を実現するためのプログラム製品がさらに提供されている。しかしながら、本発明のプログラム製品はこれに限らず、本明細書では、読み取り可能な記憶媒体は、プログラムを包含又は記憶する任意の実体媒体であってもよく、当該プログラムは指令実行システム、装置又はデバイスによって使用され、又はそれらと組み合わせて使用されてもよい。
【0174】
前記プログラム製品は1つ又は複数の読み取り可能な媒体の任意の組み合わせを使用してもよい。読み取り可能な媒体は、読み取り可能な信号媒体又は読み取り可能な記憶媒体であってもよい。読み取り可能な記憶媒体は、例えば電気、磁気、光、電磁気、赤外線、又は半導体のシステム、装置又はデバイス、又は任意の以上の組み合わせであってもよいが、これらに限らない。読み取り可能な記憶媒体のさらなる具体的な例(非網羅的なリスト)として、1つ又は複数のワイヤを有する電気接続、ポータブル形ディスク、ハードディスク、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、消去可能・プログラム可能な読み取り専用メモリ(EPROM又はフラッシュメモリ)、光ファイバー、ポータブル形コンパクト・ディスク-読み取り専用メモリ(CD-ROM)、光学メモリ、磁気メモリ、又は上記の任意の適切な組み合わせを含む。
【0175】
コンピュータ読み取り可能な信号媒体は、ベースバンドにおいて、又は搬送波の一部として伝播されるデータ信号を含んでもよく、そのうち、読み取り可能なプログラムコードがキャリアされている。このように伝播されるデータ信号は、種々の態様を採用することができ、電磁信号、光信号、又は前述の任意の適切な組み合わせを含むが、これらに限らない。読み取り可能な信号媒体は、読み取り可能な記憶媒体以外の任意の読み取り可能な媒体であってもよく、当該読み取り可能な媒体は、指令実行システム、装置又はデバイスによって使用され、又はそれらと組み合わせて使用されたプログラムを送信、伝播又は伝送することができる。
【0176】
読み取り可能な媒体に含まれるプログラムコードは、任意の適切な媒体で伝送されることができ、無線、有線、光ケーブル、RF等、又は上記の任意の適切な組み合わせを含むが、これらに限らない。
【0177】
本開示の実施例は、さらに、コマンドを含むコンピュータプログラム製品を提供し、サーバ上で実行される場合に、サーバに上記実施例で提供される方法を実行させる。
【0178】
1つ又は複数のプログラミング言語の任意の組み合わせで本発明の操作を実行するためのプログラムコードを作成することができ、前記プログラミング言語は、Java、C++等のオブジェクト向けのプログラミング言語を含み、「C」言語又は類似するプログラミング言語等の通常の手続き型プログラミング言語も含む。プログラムコードは、完全にユーザコンピューティングデバイス上で実行され、部分的にユーザ機器上で実行され、独立したソフトウェアパッケージとして実行され、一部がユーザコンピューティングデバイス上で実行され、一部がリモートコンピューティングデバイス上で実行され、あるいは、完全にリモートコンピューティングデバイス又はサーバ上で実行される。リモートコンピューティングデバイスに係る場合、リモートコンピューティングデバイスは、ローカルエリアネットワーク(LAN)又はワイドエリアネットワーク(WAN)を含む任意のタイプのネットワークを通じてユーザコンピューティングデバイスに接続されることができ、あるいは、外部のコンピューティングデバイスに接続される(例えば、インターネットサービスプロバイダを利用してインターネットを通じて接続される)ことができる。
【0179】
注意すべきことであるが、上記の詳細な説明では、動作実行のためのデバイスのいくつかのモジュール又はユニットが言及されているが、このような区分は強制的なものではない。実際には、本開示の実施形態によれば、上記に記載された2つ以上のモジュール又はユニットの特徴と機能は1つのモジュール又はユニットで具体化されることができる。逆に、上記に記載された1つのモジュール又はユニットの特徴と機能はさらに複数のモジュール又はユニットによって具体化されるように区分されることができる。
【0180】
なお、図面では、特定の順序で本開示の方法の各ステップが説明されているが、これは、当該特定の順序でこれらのステップを実行しなければならないことを要求又は示唆し、又はすべての示されるステップを実行しなければ希望の結果を実現できないというわけではない。追加的又は代替的に、いくつかのステップを省略したり、複数のステップを1つのステップに併合して実行したり、及び/又は1つのステップを複数のステップに分解して実行したりしてもよい。
【0181】
以上の実施形態の説明によれば、当業者が容易に理解できるように、ここで説明された例示的な実施形態はソフトウェアにより実現されてもよいし、ソフトウェアを必要なハードウェアと組み合わせることで実現されてもよい。したがって、本開示の実施形態による
技術案は、ソフトウェア製品という態様で表されることができ、当該ソフトウェア製品は、不揮発性記憶媒体(CD-ROM、USBメモリ、リムーバブルハードディスク等であってもよい)又はネットワーク上に格納され、一台のコンピューティングデバイス(パソコン、サーバ、モバイル端末、又はネットワークデバイス等であってもよい)が本開示の実施形態による方法を実行できるように、いくつかの指令を含んでもよい。
【0182】
当業者は、本明細書を考慮し、かつここで開示された発明を実施した後、本開示の他の実施案を容易に想到し得る。本願は、本開示のいかなる変形、用途又は適応的な変化も含むことを意図しており、これらの変形、用途又は適応的な変化は、本開示の一般的な原理に従っており、本開示に開示されていない本分野の公知常識又は慣用の技術的手段を含む。本明細書及び実施例は例示的なものとみなされるだけであり、本開示の実際の範囲と趣旨は添付の特許請求の範囲によって指摘される。
【符号の説明】
【0183】
100 アカウンティングノード
101 アカウンティングノード
102 リーダーアカウンティングノード
103 トランザクション情報発生側アカウンティングノード
104 トランザクション情報発生側ノード
105 エージェントノード
106 トランザクション情報発生側サービスノード
107 サービスノード
200 ブロックチェーン
201 ブランチブロックチェーン
203 データブロック
204 データブロック
205 データブロック