JP2020518887A - 合意システムのダウンタイムの回復 - Google Patents

合意システムのダウンタイムの回復 Download PDF

Info

Publication number
JP2020518887A
JP2020518887A JP2019553486A JP2019553486A JP2020518887A JP 2020518887 A JP2020518887 A JP 2020518887A JP 2019553486 A JP2019553486 A JP 2019553486A JP 2019553486 A JP2019553486 A JP 2019553486A JP 2020518887 A JP2020518887 A JP 2020518887A
Authority
JP
Japan
Prior art keywords
message
node
messages
nodes
backup
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2019553486A
Other languages
English (en)
Other versions
JP6880227B2 (ja
Inventor
ターイー ヤン
ターイー ヤン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Publication of JP2020518887A publication Critical patent/JP2020518887A/ja
Application granted granted Critical
Publication of JP6880227B2 publication Critical patent/JP6880227B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1458Management of the backup or restore process
    • G06F11/1464Management of the backup or restore process for networked environments
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1438Restarting or rejuvenating
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0618Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
    • H04L9/0637Modes of operation, e.g. cipher block chaining [CBC], electronic codebook [ECB] or Galois/counter mode [GCM]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3236Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
    • H04L9/3239Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions involving non-keyed hash functions, e.g. modification detection codes [MDCs], MD5, SHA or RIPEMD
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/50Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Signal Processing (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Quality & Reliability (AREA)
  • Retry When Errors Occur (AREA)
  • Hardware Redundancy (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Debugging And Monitoring (AREA)

Abstract

合意システムのダウンタイムの回復のために、コンピュータ記憶媒体上でエンコードされたコンピュータ・プログラムを含んでいる、方法、システム、および装置。この方法のうちの1つは、事前準備メッセージを一次ノードから取得することと、事前準備メッセージの受容を示す準備メッセージを一次ノードおよび他の(N−2)個のバックアップ・ノードのうちの少なくとも一部にマルチキャストすることと、(Q−1)個以上の準備メッセージをバックアップ・ノードのうちの(Q−1)個以上からそれぞれ取得することと、事前準備メッセージおよび(Q−1)個以上の準備メッセージを格納することと、コミット・メッセージを、一次ノードおよび他のバックアップ・ノードのうちの少なくとも一部にマルチキャストすることであって、このコミット・メッセージが、1つのバックアップ・ノードが(Q−1)個以上の準備メッセージに同意していることを示す、マルチキャストすることと、一次ノードおよびバックアップ・ノードのうちのQ個以上のノードから、対応するノードが(Q−1)個以上の準備メッセージに同意していることをそれぞれ示す、Q個以上のコミット・メッセージをそれぞれ取得することとを含む。

Description

本出願は、一般に、合意システムおよび合意方法のための方法およびデバイスに関連しており、特に、プラクティカル・ビザンチン・フォールト・トレランス(PBFT:Practical Byzantine Fault Tolerance)合意システムおよび合意方法に関連している。
プラクティカル・ビザンチン・フォールト・トレランス(PBFT)は、ブロックチェーン・システムなどの分散システムにおいて実装できる合意メカニズムの一種である。PBFT合意メカニズムは、システムの特定のノードが(例えば、不十分なネットワーク接続またはその他の原因によって)故障しているか、または(例えば、悪意を持って活動しながら)誤った情報を他のピアに伝搬しているにもかかわらず、分散システムが安全性および活性を含む十分な合意に達することができるようにする。そのようなメカニズムの目的は、システムの正しい機能に対する、およびシステム内の機能しているノード(例えば、故障していない善意のノード)によって達せられた合意に対する、機能していないノードの影響を軽減することによって、破滅的なシステム故障を防ぐことである。
PBFT合意メカニズムは、独立したノード故障および特定の独立したノードによって伝搬されて操作されるメッセージが存在することを仮定することによって、ビザンチン故障(例えば、機能していないノード)を許容するプラクティカル・ビザンチン状態マシンの複製を提供することに重点を置く。このPBFT合意メカニズムでは、例えば、ブロックチェーン・システム内のすべてのノードが、ある順序で順序付けられ、1つのノードが一次ノード(リーダー・ノードまたはマスターノードとしても知られている)になり、他のノードがバックアップ・ノードと呼ばれる(フォロワー・ノードとしても知られている)。システム内のすべてのノードは互いに通信し、目標は、すべての善意のノードが、システムの状態に関して同意/合意に達することである。
例えば、PBFT合意メカニズムが機能するために、特定の脆弱性の期間内で、ブロックチェーン・システム内の機能していないノードの数が、同時に、システム内のノードの総数の3分の1以上になることができない、ということが仮定される。この方法は、多くてもF個のノードが同時に機能していないノードである限り、活性および安全性の両方を効果的に提供する。言い換えると、一部の実装では、PBFT合意メカニズムによって許容できる機能していないノードの数Fは、(N−1)/3を最も近い整数に切り下げた数に等しく、Nはシステム内のノードの総数を指定する。一部の実装では、PBFT合意メカニズムを実装するブロックチェーン・システムは、合計で少なくとも3F+1個のノードが存在する場合、最大でF個のビザンチン故障を処理することができる。
PBFT合意メカニズムは、通常、正常動作プロトコル(3段階プロトコルとしても知られている)およびビュー変更プロトコルを含み、正常動作プロトコルは、メカニズムの安全性を保証するために提供され、一方、ビュー変更プロトコルは、メカニズムの活性を保証するために提供される。正常段階プロトコルは、主に3つのフェーズ(すなわち、事前準備フェーズ、準備フェーズ、およびコミット・フェーズ)を順番に含んでいる。すべてのフェーズはメッセージ駆動型であり、すなわち、現在のフェーズにおいて十分な数のメッセージを取得することによって、プロトコル内の次のフェーズがトリガーされる。正常動作プロトコルでは、プロセス全体が、各フェーズで連続的に受信された十分な数のメッセージに応じて、大きく前進する。ビュー変更プロトコルにおいてさえ、プロセスは、正常動作プロトコルでの準備メッセージに基づいて前進する。したがって、PBFT合意メカニズムが、機能するために、合意メッセージに大きく依存しているということを理解することができる。1つまたは複数のノードが機能しなくなった場合(例えば、ダウンタイムおよび再起動が発生した場合)、メモリに格納されたメッセージが失われ、合意プロセス全体に影響を与え、不整合さえ招くであろう。
本明細書のさまざまな実施形態は、合意システムのダウンタイムの回復のためのシステム、方法、および非一時的コンピュータ可読媒体を含むが、これらに限定されない。
一実施形態によれば、コンピュータ実装合意方法が、ある数(N)のノードによって維持されるブロックチェーン上で実装され、ノードのうちの1つが一次ノードとして機能し、他の(N−1)個のノードがバックアップ・ノードとして機能し、この方法がバックアップ・ノードのうちの1つによって実行される。この方法は、事前準備メッセージを一次ノードから取得することと、準備メッセージ(「マルチキャストされた準備メッセージ」とも呼ばれる)を一次ノードおよび他の(N−2)個のバックアップ・ノードのうちの少なくとも一部にマルチキャストすることであって、この準備メッセージが事前準備メッセージの受容を示す、マルチキャストすることと、(Q−1)個以上の準備メッセージをバックアップ・ノードのうちの(Q−1)個以上からそれぞれ取得することであって、Q(定数)が、(N+F+1)/2を最も近い整数に切り上げた値であり、Fが(N−1)/3を最も近い整数に切り下げた値である、取得することと、事前準備メッセージおよび(Q−1)個以上の準備メッセージを格納することと、コミット・メッセージを、一次ノードおよび他のバックアップ・ノードのうちの少なくとも一部にマルチキャストすることであって、このコミット・メッセージが、1つのバックアップ・ノードが(Q−1)個以上の準備メッセージに同意していることを示す、マルチキャストすることと、一次ノードおよびバックアップ・ノードのうちのQ個以上のノードから、対応するノードが対応するノードによって受信された(Q−1)個以上の準備メッセージに同意していることをそれぞれ示す、Q個以上のコミット・メッセージをそれぞれ取得することとを含む。一実施形態では、(Q−1)個以上の準備メッセージがマルチキャストされた準備メッセージを含み、Q個以上のコミット・メッセージがマルチキャストされたコミット・メッセージを含む。
一部の実施形態では、事前準備メッセージを一次ノードから取得する前に、この方法は、1つまたは複数のトランザクション要求を、1つまたは複数のクライアント、一次ノード、または他のバックアップ・ノードのうちの1つまたは複数のうちの少なくとも1つから取得することをさらに含む。
他の実施形態では、事前準備メッセージが、1つまたは複数のトランザクション要求に対応する1つまたは複数のトランザクションの順序を含み、コミット・メッセージが、コミット・メッセージを送信した対応するノードがこの順序に同意していることを示す。
さらに他の実施形態では、この方法は、この順序に従って、1つまたは複数のトランザクションを、1つのバックアップ・ノードによって維持されるブロックチェーンのローカル・コピーに詰め込むことをさらに含む。
さらに他の実施形態では、事前準備メッセージおよび(Q−1)個以上の準備メッセージを格納することが、事前準備メッセージおよび(Q−1)個以上の準備メッセージのみを格納することを含む。
一部の実施形態では、コミット・メッセージをマルチキャストした後に、この方法は、システムの再起動を実行することと、格納された事前準備メッセージおよび格納された(Q−1)個以上の準備メッセージを読み込むこととをさらに含む。
他の実施形態では、事前準備メッセージおよび(Q−1)個以上の準備メッセージを格納した後で、コミット・メッセージをマルチキャストする前に、この方法は、システムの再起動を実行することと、格納された事前準備メッセージおよび格納された(Q−1)個以上の準備メッセージを読み込むこととをさらに含む。
さらに他の実施形態では、事前準備メッセージおよび(Q−1)個以上の準備メッセージを格納した後で、コミット・メッセージをマルチキャストする前に、この方法は、読み込まれた事前準備メッセージおよび読み込まれた(Q−1)個以上の準備メッセージを含んでいるビュー変更メッセージ(「マルチキャストされたビュー変更メッセージ」とも呼ばれる)をマルチキャストすることをさらに含む。
さらに他の実施形態では、事前準備メッセージおよび少なくとも2F個の準備メッセージを格納した後で、コミット・メッセージをマルチキャストする前に、この方法は、対応するノードがビュー変更メッセージに同意していることをそれぞれ示すQ個以上のビュー変更メッセージを新しい一次ノードが受信したことを示している、新しいビュー・メッセージを、新しい一次ノードから取得することと、別の準備メッセージ(「別のマルチキャストされた準備メッセージ」とも呼ばれる)を、新しい一次ノードを含んでいるバックアップ・ノードのうちの少なくとも一部にマルチキャストすることであって、この別の準備メッセージが新しいビュー・メッセージの受容を示す、マルチキャストすることと、別の(Q−1)個以上の準備メッセージをバックアップ・ノードのうちの(Q−1)個以上からそれぞれ取得することとをさらに含む。一実施形態では、Q個以上のビュー変更メッセージがマルチキャストされたビュー変更メッセージを含み、別の(Q−1)個以上の準備メッセージが別のマルチキャストされた準備メッセージを含む。
一部の実施形態では、事前準備メッセージおよび(Q−1)個以上の準備メッセージを格納した後で、コミット・メッセージをマルチキャストする前に、この方法は、対応するノードがビュー変更メッセージに同意していることをそれぞれ示すQ個以上のビュー変更メッセージを、バックアップ・ノードのうちのQ個以上からそれぞれ取得することと、新しい一次ノードとして機能している1つのバックアップ・ノードがQ個以上のビュー変更メッセージを受信したことを示す新しいビュー・メッセージを、バックアップ・ノードのうちの少なくとも一部にマルチキャストすることと、別の(Q−1)個以上の準備メッセージを、バックアップ・ノードのうちの(Q−1)個以上からそれぞれ取得することとさらに含む。
さらに他の実施形態では、最大でN個のノードすべてにクラッシュが発生し、N個のノードのうちの少なくともQ個が、システムの再起動を実行し、対応する格納された事前準備メッセージおよび格納された(Q−1)個以上の準備メッセージをそれぞれ読み込む。
さらに他の実施形態では、システムの再起動を実行することが、ビュー変更をトリガーせずにシステムの再起動を実行することを含む。
一部の実施形態では、ブロックチェーンを維持するためのバックアップ・ノードのうちの1つとして機能している合意システムが、1つまたは複数のプロセッサと、1つまたは複数のプロセッサに結合されており、前述の実施形態のいずれかの方法を実行するために1つまたは複数のプロセッサによって実行可能な命令が格納されている、1つまたは複数のコンピュータ可読メモリとを備える。
他の実施形態では、ブロックチェーンを維持するためのバックアップ・ノードのうちの1つとして機能している合意装置が、前述の実施形態のいずれかの方法を実行するために複数のモジュールを備える。
別の実施形態によれば、合意システムはブロックチェーンを維持するためであり、ある数(N)のノードがブロックチェーンを維持し、N個のノードのうちの1つが一次ノードとして機能し、他の(N−1)個のノードがバックアップ・ノードとして機能し、この合意システムが、(N−1)個のバックアップ・ノードのうちの1つとして機能し、1つまたは複数のプロセッサと、1つまたは複数のプロセッサに結合され、1つまたは複数のプロセッサによって実行可能な命令を使用して構成された1つまたは複数の非一時的コンピュータ可読メモリとを備え、それらの命令が、システムに、事前準備メッセージを一次ノードから取得することと、事前準備メッセージを一次ノードから取得することと、準備メッセージを一次ノードおよび他の(N−2)個のバックアップ・ノードのうちの少なくとも一部にマルチキャストすることであって、この準備メッセージが事前準備メッセージの受容を示す、マルチキャストすることと、(Q−1)個以上の準備メッセージをバックアップ・ノードのうちの(Q−1)個以上からそれぞれ取得することであって、Q(定数)が、(N+F+1)/2を最も近い整数に切り上げた値であり、Fが(N−1)/3を最も近い整数に切り下げた値である、取得することと、事前準備メッセージおよび(Q−1)個以上の準備メッセージを格納することと、コミット・メッセージを、一次ノードおよび他のバックアップ・ノードのうちの少なくとも一部にマルチキャストすることであって、このコミット・メッセージが、1つのバックアップ・ノードが(Q−1)個以上の準備メッセージに同意していることを示す、マルチキャストすることと、一次ノードおよびバックアップ・ノードのうちのQ個以上のノードから、対応するノードが対応するノードによって受信された(Q−1)個以上の準備メッセージに同意していることをそれぞれ示す、Q個以上のコミット・メッセージをそれぞれ取得することとを含んでいる動作を実行させる。
さらに別の実施形態によれば、非一時的コンピュータ可読記憶媒体はブロックチェーンを維持するためであり、ある数(N)のノードがブロックチェーンを維持し、N個のノードのうちの1つが一次ノードとして機能し、他の(N−1)個のノードがバックアップ・ノードとして機能し、この記憶媒体が、(N−1)個のバックアップ・ノードのうちの1つに関連付けられており、1つまたは複数のプロセッサによって実行可能な命令を使用して構成されており、それらの命令が、1つまたは複数のプロセッサに、事前準備メッセージを一次ノードから取得することと、事前準備メッセージを一次ノードから取得することと、準備メッセージを一次ノードおよび他の(N−2)個のバックアップ・ノードのうちの少なくとも一部にマルチキャストすることであって、この準備メッセージが事前準備メッセージの受容を示す、マルチキャストすることと、(Q−1)個以上の準備メッセージをバックアップ・ノードのうちの(Q−1)個以上からそれぞれ取得することであって、Q(定数)が、(N+F+1)/2を最も近い整数に切り上げた値であり、Fが(N−1)/3を最も近い整数に切り下げた値である、取得することと、事前準備メッセージおよび(Q−1)個以上の準備メッセージを格納することと、コミット・メッセージを、一次ノードおよび他のバックアップ・ノードのうちの少なくとも一部にマルチキャストすることであって、このコミット・メッセージが、1つのバックアップ・ノードが(Q−1)個以上の準備メッセージに同意していることを示す、マルチキャストすることと、一次ノードおよびバックアップ・ノードのうちのQ個以上のノードから、対応するノードが対応するノードによって受信された(Q−1)個以上の準備メッセージに同意していることをそれぞれ示す、Q個以上のコミット・メッセージをそれぞれ取得することとを含んでいる動作を実行させる。
さらに別の実施形態によれば、合意装置は、ブロックチェーンを維持するためである。ある数(N)のノードがブロックチェーンを維持し、N個のノードのうちの1つが一次ノードとして機能し、他の(N−1)個のノードがバックアップ・ノードとして機能し、この合意装置が、(N−1)個のバックアップ・ノードのうちの1つとして機能し、事前準備メッセージを一次ノードから取得するための第1の取得モジュールと、準備メッセージを一次ノードおよび他の(N−2)個のバックアップ・ノードのうちの少なくとも一部にマルチキャストするための第1のマルチキャスト・モジュールであって、この準備メッセージが事前準備メッセージの受容を示す、第1のマルチキャスト・モジュールと、(Q−1)個以上の準備メッセージをバックアップ・ノードのうちの(Q−1)個以上からそれぞれ取得するための第2の取得モジュールであって、Q(定数)が、(N+F+1)/2を最も近い整数に切り上げた値であり、Fが(N−1)/3を最も近い整数に切り下げた値である、第2の取得モジュールと、事前準備メッセージおよび(Q−1)個以上の準備メッセージを格納するための格納モジュールと、コミット・メッセージを、一次ノードおよび他のバックアップ・ノードのうちの少なくとも一部にマルチキャストするための第2のマルチキャスト・モジュールであって、このコミット・メッセージが、1つのバックアップ・ノードが(Q−1)個以上の準備メッセージに同意していることを示す、第2のマルチキャスト・モジュールと、一次ノードおよびバックアップ・ノードのうちのQ個以上のノードから、対応するノードが対応するノードによって受信された(Q−1)個以上の準備メッセージに同意していることをそれぞれ示す、Q個以上のコミット・メッセージをそれぞれ取得するための第3の取得モジュールとを備える。
本明細書において開示される実施形態は、1つまたは複数の技術的効果を有する。一部の実施形態では、方法およびシステムは、ノードのうちの1つまたは複数にシステム・クラッシュが発生した後に、PBFT合意システムのさまざまなノードが正常動作を再開できることを保証できる。他の実施形態では、合意検証の各回で、合意システムのノード(一次またはバックアップ)が、中断(例えば、システム全体のクラッシュ)が発生したときに、一貫性のない合意結果およびブロックチェーンの分岐を引き起こさずに合意検証を再開できるように、事前準備メッセージおよび十分な数の準備メッセージを格納してよい。さらに他の実施形態では、クラッシュ後に、ノードが、システムの再起動を実行し、格納されたメッセージを読み込んで、正常機能を復元してよい。格納されたメッセージを読み込むことによって、システムのダウンタイムの回復を促進できる。さらに他の実施形態では、(正常動作プロトコルの準備フェーズで)準備メッセージを取得した後で、(正常動作プロトコルのコミット・フェーズで)コミット・メッセージをマルチキャストする前に、事前準備メッセージおよび少なくとも(Q−1)個の準備メッセージが格納されてよい。したがって、ダウンタイムの回復を実現するために、事前準備メッセージおよび(Q−1)個の準備メッセージより多くのメッセージを格納する必要がないため、格納のためにコミットする必要のあるシステム・リソースが少なくなる。一部の実施形態では、一貫性のない合意結果およびブロックチェーンの分岐を伴わずに、最大でF個の悪意のあるノードまたは故障しているノードを許容できる。すなわち、最大でF個のノードが信頼できない場合でも、PBFT合意システムの定数によって決定された合意検証は信頼できる。
本明細書で開示されたシステム、方法、および非一時的コンピュータ可読媒体のこれらおよびその他の特徴だけでなく、構造の関連する要素および部分の組合せの動作および機能の方法ならびに製造の経済性が、添付の図面を参照して以下の説明および添付の特許請求の範囲を検討したときに、さらに明らかになってよく、それらすべてが、類似する参照番号がさまざまな図内の対応する部分を指定している本明細書の一部を形成する。しかし、それらの図面が単に例示および説明を目的としており、制限として意図されていないということが、明確に理解されるべきである。
さまざまな実施形態に従ってネットワークを示す図である。 PBFTの正常動作プロトコルを示す図である。 1つの故障しているレプリカを含むPBFTの正常動作プロトコルを示す図である。 PBFTの正常動作プロトコルおよびビュー変更プロトコルを示す図である。 PBFTの正常動作プロトコルのステップのフローチャートを示す図である。 PBFTのビュー変更プロトコルのステップのフローチャートを示す図である。 さまざまな実施形態に従って、合意システムの正常動作プロトコルのステップのフローチャートを示す図である。 さまざまな実施形態に従って、合意ステップのフローチャートを示す図である。 さまざまな実施形態に従って、合意ステップのフローチャートを示す図である。 さまざまな実施形態に従って、合意ステップのフローチャートを示す図である。 さまざまな実施形態に従って、合意ステップのフローチャートを示す図である。 さまざまな実施形態に従って、合意方法のフローチャートを示す図である。 さまざまな実施形態に従って、合意方法のフローチャートを示す図である。 さまざまな実施形態に従って、合意システムのブロック図を示す図である。 さまざまな実施形態に従って、合意システムのブロック図を示す図である。 本明細書に記載された実施形態のいずれかが実装されてよいコンピュータ・システムのブロック図を示している。
本明細書において開示される実施形態は、PBFTのダウンタイム回復のシステム、方法、および非一時的コンピュータ可読媒体を含むが、これらに限定されない。さまざまな実施形態では、ブロックチェーン・システムなどの分散ネットワーク・システムが複数のノードを含んでよい。ブロックチェーン・システムは、PBFT合意メカニズムを実装してよく、複数のノードのうちの1つが一次ノードとして指定され、他のノードがバックアップ・ノードとして指定される。一部の実施形態によれば、ブロックチェーン・システムにおいて実行される合意検証の各回で、合意メッセージのすべてではなく、一部のみが格納される。例えば、正常動作プロトコルの間の事前準備メッセージおよび十分な数の準備メッセージが格納される。一部の実施形態では、事前準備メッセージおよび(Q−1)個の準備メッセージのみが格納される。Qは、定数を表し、(N+F+1)/2を最も近い整数に切り上げた値になり、Fは、(N−1)/3を最も近い整数に切り下げた値になる。このようにして、合意検証プロセスを中断(例えば、システム全体のクラッシュ)から再開して、効果的かつ効率的に進めることができ、システムのストレージ消費を少なくし、一貫性のない合意結果およびブロックチェーンの分岐を引き起こさない。PBFTと同様に、開示されるシステム、方法、および非一時的コンピュータ可読媒体は、SecureRing、Byzantine Paxos、Q/U、HQ、Zyzzvyva、ABsTRACTs、RBFT、Adapt、Tangaroa、CheapBFT、MinBFT、FastBFTなどの、その他の合意プロトコルに適用できる。PBFTのさまざまな態様を、M. Castro、B. Liskov、「Practical Byzantine Fault Tolerance」、Proceedings of the Third Symposium on Operating Systems Design and Implementation(1999年2月)で参照することができ、この文献は参照によって全体として本明細書に組み込まれている。
図1は、さまざまな実施形態に従ってネットワーク120を示している。以下で提示されるコンポーネントは、例示的であるよう意図されている。図に示されているように、ネットワーク120は、ブロックチェーン・システムなどの分散ネットワーク・システム112を含んでよい。ネットワーク・システム112は、サーバ、コンピュータ、携帯電話などの1つまたは複数のコンピューティング・デバイスに実装された1つまたは複数のノード(例えば、ノード0、ノード1、ノード2、ノード3、ノード4…ノードi、…など)を備えてよい。ネットワーク・システム112は、ネットワーク120または追加システムの他のデバイスにアクセスするために、適切なソフトウェア(例えば、合意プログラム)および/またはハードウェア(例えば、有線、無線接続)と共にインストールされてよい。各ノードは、1つまたは複数のプロセッサおよび1つまたは複数のプロセッサに結合された1つまたは複数のメモリを含んでよい。例えば、1つまたは複数のメモリは、非一時的かつコンピュータ可読であり、1つまたは複数のプロセッサに、本明細書に記載された動作を実行させるように、1つまたは複数のプロセッサによって実行可能な命令を使用して構成される。この図ではノードが単一のコンポーネントとして示されているが、それらのノードを単一のデバイスまたは一緒に結合された複数のデバイスとして実装できるということが、理解されるであろう。一般に、ノードは、互いに通信することができてよく、ネットワーク・システム112の外部の他のデバイスと通信することができてよい。例えば、1つまたは複数の有線ネットワークまたは無線ネットワーク(例えば、インターネット)を介して、データを伝達することができる。
さまざまな実施形態では、ネットワーク・システム112が、複数のノードを備えているブロックチェーン・システムとして実装されてよい。例えば図1に示されているように、ブロックチェーン・システムは、複数のブロックチェーン・ノード(例えば、ノード0、ノード1、ノード2、ノード3、ノード4、…ノードiなど)を備えている。複数のノードは、あるブロックチェーン・ノードが別のブロックチェーン・ノードと通信するネットワーク(例えば、ピアツーピア・ネットワーク)を形成してよい。図に示されているブロックチェーン・ノードの順序および数は、説明を簡単にするための単なる例である。ブロックチェーン・ノードは、サーバ、コンピュータなどにおいて実装されてよい。各ブロックチェーン・ノードは、TCP/IPなどのさまざまなタイプの通信方法を介して一緒に結合された1つまたは複数の物理ハードウェア・デバイスまたは仮想デバイスに対応してよい。分類に応じて、ブロックチェーン・ノードは、満杯になったノード、Gethノード、合意ノードなどを含んでよい。
さまざまな実施形態では、ブロックチェーン・システムが、ノードAおよびノードB(例えば、軽量ノード)などの他のシステムおよびデバイスと情報をやりとりしてよい。この情報のやりとりは、例えば、要求を受信し、その要求の実行結果を返す目的で、データの送信および受信を含んでよい。1つの例では、ユーザAが、ブロックチェーンを経由してユーザBとトランザクションを行いたいことがある。このトランザクションは、ユーザAの口座にある資産をユーザBの口座に移すことを含んでいることがある。ユーザAおよびユーザBは、トランザクション用の適切なブロックチェーン・ソフトウェア(例えば、仮想通貨ウォレット)がインストールされたデバイスのノードAおよびBをそれぞれ使用することができる。ノードAは、ノード0との通信を介してブロックチェーンにアクセスすることができ、ノードBは、ノード1との通信を介してブロックチェーンにアクセスすることができる。例えば、ノードAは、ノード0を介してトランザクション要求をブロックチェーンにサブミットすることができ、ノードBは、ノード1を介してスマート・コントラクト実行要求をブロックチェーンにサブミットすることができる。ブロックチェーンの外で、ノードAおよびノードBが通信の他のチャネル(例えば、ノード0および1を通過しない標準的なインターネット通信)を有してよい。
ブロックチェーン・ノードはそれぞれ、メモリを備えるか、またはメモリに結合されてよい。一部の実施形態では、このメモリは、プール・データベースを格納してよい。プール・データベースは、分散方式で、複数のブロックチェーン・ノードによってアクセス可能であってよい。例えば、プール・データベースは、ブロックチェーン・ノードのメモリにそれぞれ格納されてよい。プール・データベースは、ユーザによって操作されるノードAおよびBなどの、1つまたは複数のユーザ・デバイスによってサブミットされた複数のトランザクションを格納してよい。
ブロックチェーン・ノードは、合意を通じて、トランザクションをブロックチェーンと呼ばれる分散型台帳に記録する、ネットワーク(例えば、P2Pネットワーク)を形成する。P2Pネットワークの参加者は、ブロックチェーンを維持するノードと呼ばれることがある。ブロックチェーンのPSPネットワークでは、各ノードが合意検証に参加し、ブロックチェーンの完全な台帳のコピーを格納する。すべてのノードは、ブロックチェーン合意アルゴリズムによってトランザクションのバッチを確認し、すべてのノードが一貫性のある確認結果、したがって、ブロックチェーンの一貫性のあるコピーを持つことを保証する。
ブロックチェーン合意アルゴリズムの1つは、プラクティカル・ビザンチン・フォールト・トレランス(PBFT)である。ビザンチン・フォールト・トレランスは、一般的なビザンチン問題に由来する。P2Pネットワーク・システムの場合、機能していないノードの数が特定の制限内である限り、システムは適切に機能し続けることができる。そのようなシステムは、ビザンチン・フォールト・トレラント・システムと呼ばれる。PBFTは、ビザンチン・フォールト・トレランスのネットワーク能力の最適化の一例である。PBFTは、サーバをコピーし、サーバのコピーとのクライアントの情報のやりとりを同期させることによって、ビザンチン状態マシンをネットワークに提供する。
PBFTの動作の中心は、ブロックチェーンに記録された情報の一貫性のある全体的視点の維持であり、それによって、ユーザが分散方式で互いに情報をやりとりできるようにするための骨格を形成する。PBFT合意メカニズムの安全性は、ブロックチェーン・システムにとって極めて重要である。合意モデルの2つの重要な特性は、(1)安全性または一貫性:すべての善意のノードが同じ有効な出力を生成すること、および(2)活性:すべての善意のノードが、中間段階で止まることなく、合意において最終的にある値を生成することである。セキュリティで保護された堅牢なPBFT合意メカニズムは、ノードの故障、ネットワークの分割、メッセージの遅延、不規則な順序でのメッセージ配信、メッセージの破損などの、多種多様なビザンチン動作を許容し、システム内の機能していないノードの数が限定されている限り、複数のノードで合意に達する必要がある。その目的で、PBFTモデルは、以下で詳細に説明される、正常動作/一貫性プロトコルおよびビュー変更プロトコルという、2つの相互排他的なプロトコルのうちのいずれか1つの下で機能する。本明細書では、機能していないとは、故障していることおよび/または悪意があることを意味し、機能しているとは、故障しておらず、善意であることを意味する。可能性のある故障している動作および/または悪意のある動作としては、メッセージを配信できないこと、メッセージ配信の遅延、不規則な順序でのメッセージ配信、ビザンチン故障(プロトコルに違反して、任意のメッセージを、さまざまなノードに配信する)などが挙げられる。
一部の実施形態では、プラクティカル・ビザンチン・フォールト・トレランス(PBFT)メカニズムを実装するブロックチェーン・システムが、合計でN個のノードを含んでよく、N個のノードのうちの1つが一次ノードとして機能し、N個のノードのうちの他のノードがバックアップ・ノードとして機能する。ビュー変更プロトコルを通じて、別のノードが新しい一次ノードになるように選ばれてよいため、一次ノードの指定は特定のノードに固定されなくてよい。例えば、一次ノードは、モジュロ演算によって選ばれてよく、モジュロ演算では、最低のシリアル番号(ビュー番号の剰余)を有する機能しているノードが、新しい一次ノードになる。現在のビューおよびノードの総数Nが、一次ノードのid=(ビュー+1)mod Nを決定してよい。PBFTでは、新しい一次ノードが選ばれるたびに、ビューが変更される。例えば、各ビュー変更と共に、ビューが0から単調に増加する。すなわち、一次ノードにおける変更と共に、ビューが変化してよい。
一部の実施形態では、一次ノードがビューvで機能しており、正常動作プロトコルが実行される。正常動作の場合、一次ノードおよび/またはバックアップ・ノードが、未検証のトランザクションに関連付けられた要求を1つまたは複数のクライアントから受信してよい。例えば、ノードAがクライアントとして要求を一次ノードおよび/またはバックアップ・ノードにサブミットしてよい。この要求は、未検証のトランザクション(例えば、合意検証によってブロックチェーン内の新しいブロックに追加されるトランザクション)を含んでよい。未検証のトランザクションの例としては、ブロックチェーンベースの金融トランザクション、スマート・コントラクトのデプロイメント、または実行トランザクションなどが挙げられる。一次ノードおよびバックアップ・ノードは、トランザクションの何らかの予備的検証を実行してもしなくてもよい。要求を受信するバックアップ・ノードは、受信された要求を一次ノードに転送してよい。一次ノードで、未検証のトランザクションを含む要求が特定のレベルに達したか、またはその他の方法でトリガー条件を満たした後に、一次ノードは、1回の合意検証を開始し、未検証のトランザクションに対して検証結果を提案してよい。バックアップ・ノードは、この合意に応答し、提案を確認し、合意に達してよい。ノードの要件は、それらのノードが決定論的であり、同じ状態で開始することである。最終結果は、すべての善意のノードが、レコードの順序に関して合意に達し、それを受け入れるか、または拒否する。合意検証が実行された後に、トランザクションが、ブロックチェーンの新しいブロックに詰め込まれ、ノードによって維持されるローカル・ブロックチェーンのコピーに追加されてよい。また、最初に要求を送信したクライアント(例えば、ノードA)に通知される。
前述したように、安全性を維持するために、PBFT合意メカニズムは、正常動作プロトコルの3つのフェーズ(事前準備フェーズ、準備フェーズ、およびコミット・フェーズ)を主に含んでいる。図2A〜図2Cを参照すると、PBFT合意メカニズムを実装するブロックチェーン・システムの例が、4つのレプリカ(レプリカ0、レプリカ1、レプリカ2、およびレプリカ3)を含んでいる(レプリカは、ノードの別の用語である)。番号0〜3は、新しい一次ノードを決定するために使用できる、レプリカのシリアル番号である。レプリカ0は、一次ノード0に対応してよく、レプリカ1、2、および3は、バックアップ・ノード1、2、および3に対応してよい。これらのレプリカは、例えば、前述したネットワーク・システム112の対応するノードにおいて実装されてよい。正常動作プロトコルが、機能していないノードが存在しない図2Aに示されており、別の正常動作プロトコルが、レプリカ3が機能していないノードである図2Bに示されている。両方の状況では、正常動作プロトコルが、事前準備フェーズ、準備フェーズ、およびコミット・フェーズに加えて、要求フェーズおよび応答フェーズという2つのフェーズをさらに含んでよい。図2Aに対応するステップのフローチャートが、図3Aに示されている。
図2A、2B、および3Aを参照すると、クライアントが要求(メッセージ)を、要求を提唱する責任を負う一次ノード(レプリカ0)にサブミットするときに、正常動作プロトコルが要求フェーズで開始している。要求は、クライアント、要求動作(例えば、合意検証のための1つまたは複数のトランザクション)、および要求のタイムスタンプの情報を含んでよい。クライアント(クライアント・ノードとも呼ばれる)は、例えば、前述したノードAに実装されてよい。ノードAは、軽量ノード(例えば、携帯電話に実装されたノード)であってよい。追加的または代替的に、クライアントは要求をバックアップ・ノードにサブミットしてよく、バックアップ・ノードは、事前準備フェーズの前に、この要求を一次ノードに転送する。要求を一次ノードが受信するのか、バックアップ・ノードが受信するのかにかかわらず、対応するノードが、受信された要求をネットワーク内の他のノードにマルチキャストしてよい。したがって、いずれにせよ一次ノードは、クライアントによって合意ネットワークにサブミットされた保留中の要求を最終的に取得することができる(ステップ311)。
それに応じて、一次ノードは、リーダーのように機能し、要求に関連付けられた1つまたは複数のトランザクションを検証するようにバックアップ・ノードを誘導する。一次ノードは、ビュー内の要求の実行を順序付ける責任を負う。事前準備フェーズでは、一次ノードが複数の要求を取得し、取得された要求の妥当性を確認し、要求ごとにシーケンス番号を提案してよい。したがって、各要求は、増加するシーケンス番号を割り当てられ、このようにして順番に並べられてよい。さらに、事前準備メッセージは、ブロック高さを含んでよい。ブロック高さは、ブロックチェーンの現在の高さに基づいてよい。例えば、ブロックチェーンが1000個のブロックを現在含んでいる場合、ブロック高さは、1000個のブロックがブロックチェーン内にすでに存在していることを示す1000であってよく、または要求に関連付けられた1つまたは複数のトランザクションがブロックチェーンの1001番目のブロック(他のノードによってまだ検証されていない)に詰め込まれるように提案されていることを示す1001であってよい。一次ノードは、クライアントの要求を、対応するシーケンス番号および/またはブロック高さと共に転送してよい。例えば、一次ノードは、要求を取得した後に、シーケンス番号を割り当てることによって対応するトランザクションを実行するために、要求をある順序で配置し、リストに格納してよい。一次ノードは、事前準備メッセージを、ブロックチェーン・システム内のすべてのバックアップ・ノード(レプリカ1〜レプリカ3)に送信してよい(ステップ312)。図2Aに示されているように、一次ノードが、事前準備メッセージ内で、または事前準備メッセージと共に、このリストをバックアップ・ノードにマルチキャストしてよい。図2Bに示されているように、バックアップ・ノード(レプリカ3)が機能しておらず、一次ノードがそれを認識していない場合でも、一次ノードは、依然として事前準備メッセージを送信することができる(ステップ313)。各バックアップ・ノードは、事前準備メッセージが有効である限り、それを受け入れる。事前準備メッセージは、ビュー番号、シーケンス番号、一次ノードによる署名、ダイジェスト(d)、その他のメタデータなどを含んでよく、これらを使用して、事前準備メッセージの妥当性を決定することができる。
準備フェーズでは、バックアップ・ノードが事前準備メッセージを受け入れる場合、バックアップ・ノードは、次に、一次ノードを含むブロックチェーン・システム内の他のノードに、準備メッセージをマルチキャストする(ステップ314)。準備メッセージをマルチキャストするということは、送信側ノードが事前準備メッセージに同意するということを示している。各準備メッセージは、有効である限り、受信側ノードによって受け入れられる。準備メッセージの妥当性は、同様に、ビュー番号、シーケンス番号、対応するバックアップ・ノードの署名、ダイジェスト(d)、その他のメタデータなどに基づいて決定することができる。バックアップ・ノードが有効な事前準備メッセージを一次ノードから受信し、(Q−1)個以上の個別の有効な一貫性のある準備メッセージを他のノードから取得した場合(ステップ315)、バックアップ・ノードが準備され、定数(Q)は、すべてのレプリカ/ノードのデータの一貫性およびフォールト・トレランス要件を保証するために必要なレプリカ/ノードの数を指定する。一部の実施形態では、PBFTシステムを実装するブロックチェーン・システムは、少なくとも3F+1個のレプリカ/ノードを含み、Fは、PBFTが安全性および活性を伴って機能するために許容できるビザンチン故障/機能していないノードの数を指定し、定数(Q)は2F+1に等しい。この場合、事前準備メッセージおよび少なくとも2F個のメッセージを格納することができる。2F個の準備メッセージは、マルチキャストされた準備メッセージを含んでよい。ここで、事前準備メッセージを一次ノードの準備メッセージと同等のものとして扱うことができるため(ただし、一次ノード自体は、準備メッセージを送信しなくてよい)、QではなくQ−1(この場合は2F)個の準備メッセージが必要である。事前準備メッセージをもう1つの準備メッセージとして数える場合、すべてのノードのうちの少なくともQ(例えば、2F+1)個が事前準備メッセージを受け入れたことを示す、少なくともQ(例えば、2F+1)個の個別の有効な準備メッセージが存在し、そのうちの最大でF個の機能していないノードを許容できる。したがって、事前準備から準備までのフェーズは、要求がビューvで実行される場合に、その要求のシーケンス番号で実行されるということに、少なくともF+1個の機能しているノード(最大でF個の機能していないノードを考慮した2F+1個の準備されたノード)が同意しているということを保証する。準備フェーズは、ビュー内の各要求のフォールト・トレラントな一貫性のある順序付けを保証する。
一部の実施形態では、事前準備メッセージおよび(Q−1)個の準備メッセージの受信後に、バックアップ・ノードは順序を検証し、その検証結果を、一次ノードによって事前準備メッセージに書き込まれている提案された検証結果と比較してよい。順序を検証するための複数の手法が存在してよい。例えば、提案された検証結果は、ダイジェスト(d)に書き込まれている提案されたマークル・パトリシア・トライのルートを含んでよい。バックアップ・ノードは、順序に従って、要求に関連付けられたトランザクションを配置し、マークル・パトリシア・トライのルートを計算し、提案されたマークル・パトリシア・トライのルートと比較してよい。この計算は、ブロックチェーン内の既存のブロックのノードのハッシュなどの、特定の既存の情報を必要としてもよい。この比較は、バックアップ・ノードによって計算されたダイジェスト(D(m))を生成する。ダイジェスト(D(m))がダイジェスト(d)と一致する場合、検証が成功する。検証が行われた後に、バックアップ・ノードは、要求の順序付け(例えば、要求に関連付けられたトランザクションをブロックチェーンの新しいブロックに詰め込むための順序)に同意してよい。同様に、バックアップ・ノードは、受信したコミット・メッセージ(コミット・フェーズに関して下で説明される)が同じダイジェストD(m)を含んでいるかどうかを検証し、他のノードも要求の順序付けに同意しているかどうかを決定してよい。準備されたノードがQ(例えば、2F+1)個のコミット・メッセージを取得し、より低いシーケンス番号を有するすべての要求の実行が完了している場合、このノードは要求を実行してよい。
一部の実施形態では、事前準備メッセージは、要求の実行に関連する新しいブロックまたはその他の情報(例えば、要求に関連付けられたトランザクション)のダイジェスト(d)を含んでよい。ダイジェスト(d)(例えば、ハッシュ値)は、ハッシュ・アルゴリズムをトランザクションなどのデータに適用することの数値結果であってよい。バックアップ・ノードは、ダイジェスト(d)を確認するためのトランザクションを実行してよい。複数の要求の場合、バックアップ・ノードは、順序(すなわち、要求のシーケンス番号)に従って要求を実行し、ダイジェストD(m)を取得してよい。D(m)およびdが一致する場合、バックアップ・ノードは、バックアップ・ノードが一次ノードの妥当性確認結果に同意することを示すコミット・メッセージ(コミット・フェーズに関して下で説明される)をマルチキャストする。特定のシーケンス番号の保留中の要求に関して、準備されたノードがQ(例えば、2F+1)個のコミット・メッセージを取得し、より低いシーケンス番号を有するすべての要求の実行が完了している場合、このノードは要求を実行してよい。
コミット・フェーズにおいて、ノードが準備された場合、このノードは、コミット・メッセージを他のノードにマルチキャストしてよい(ステップ316)。このノードは、コミット・メッセージを他のノードから受信してよい。各ノードは、コミット・メッセージが有効である限り、それを受け入れる。コミット・メッセージは、ビュー番号、シーケンス番号、署名、ダイジェスト、その他のメタデータなどを含んでよく、これらを使用して、メッセージの妥当性を決定することができる。一部の実施形態では、ノードが少なくともQ個の個別の有効な一貫性のあるコミット・メッセージを取得した場合、それは、定数のノードがコミットし(すなわち、少なくとも(Q−F)個の善意のノードが準備され)、合意が達せられたということを示す(ステップ317)。少なくともQ個の有効なコミット・メッセージは、マルチキャストされたコミット・メッセージを含んでよい。したがって、準備からコミットまでのフェーズは、要求がそのシーケンス番号で、ビューv内で最終的に実行されるということに、少なくとも(Q−F)個の機能しているノード(最大でF個の機能していないノードを考慮したQ個のコミット・メッセージ)が同意しているということを保証する。各ノードは異なるビューでコミットすることがあるため(例えば、一部のノードが新しいビューにすでに移行しており、他の一部のノードが前のビューに留まっている場合)、受信されたコミット・メッセージは、異なるビュー内で実行されたコミットに対応することがある。機能しているノードが各要求のシーケンス番号に同意するため、コミット・フェーズは、複数のビューにわたる各要求のフォールト・トレラントな一貫性のある順序付けを保証する。
一部の実施形態では、ノードが少なくともQ個の個別の有効な一貫性のあるコミット・メッセージを取得した場合、ノードは、対応する要求を実行してよい。例えば、Q個のコミット・メッセージが取得されたということは、新しいブロックの合意検証が実行されたということを意味する。したがって、ノードは、新しいブロックを、ブロックチェーンのローカルに維持されるコピーに詰め込んでよい。そうでない場合、バックアップ・ノードは、ビュー変更プロトコルを直接トリガーしてよい。
応答フェーズにおいて、要求の実行後に、ノードが応答メッセージをクライアントに直接送信する。ブロックチェーンに詰め込まれたトランザクションの場合、応答メッセージがブロックチェーン内のトランザクションのアドレスを含んでよい。最大でF個の故障が許容されるため、クライアントは、結果を受け入れる前に、異なるノードからの有効な署名、ならびに同じ要求のタイムスタンプおよび同じ実行結果を含んでいる(Q−F)個の応答を待つ。図2Aおよび図2Bに示されているPBFTネットワーク・システムの場合、合計で4つのノードが存在するため、最大で1つ(F=1)の機能していないノードを許容することができる。したがって図2Bでは、レプリカ3が機能していなくても、依然として合意に達することができる。
一次ノードが要求をマルチキャストせずに一定の時間が経過した場合、活性を維持するために、ビュー変更プロトコルにおいて一次ノードを交換することができる。例えば、バックアップ・ノードはタイマーを維持してよい。バックアップ・ノードは、要求を受信し、タイマーがまだ実行されていない場合、タイマーを開始する。バックアップ・ノードは、要求を実行するのを待たなくなった(すなわち、要求が実行される)ときにタイマーを停止するが、その時点で1つまたは複数の他の要求の実行を待っている場合、タイマーを再開する。タイマーが終了した場合、バックアップ・ノードは、一次ノードが機能していないということを決定してよい。したがってバックアップ・ノードは、ビュー変更メッセージを他のノードにマルチキャストしてよい。別の例の場合、バックアップ・ノードは、一次ノードが悪意を持っているということを決定してよい。したがってバックアップ・ノードは、ビュー変更メッセージをマルチキャストしてよい。別の例の場合、クライアントは、クライアントが要求を一次ノードに送信した後に、応答を受信せずに多すぎる時間が経過したかどうかを、タイマーを使用して決定できる。このタイマーが終了した場合、クライアントはその要求をすべてのノードに送信する。ノードがこの要求についてすでに知っている場合、再ブロードキャストは無視される。ノードがこの要求について知らない場合、ノードはタイマーを開始する。ノードのタイマーのタイムアウトの時点で、ノードは、一次ノードが故障しているという疑いに基づいて、ビュー変更メッセージを他のバックアップ・ノードにマルチキャストすることによって、ビュー変更プロセスを開始する(ステップ321)。送信側ノードが故障していないことを他のノードが知るように、ビュー変更メッセージは、システム状態を(以前の正常動作中のそのノード自身の準備メッセージを含んでいるアーカイブされたメッセージの形態で)含む。
圧倒的多数の機能しているノードが、一次ノードが機能していないかどうかを決定して、その一次ノードを除去し、直列の次の一次ノードを置き換えに使用することができる。一次ノードが故障しているということを十分な数のノードが断定したときに、ビュー変更が発生する。図2Cの一部はビュー変更プロトコルを示しており、ビュー変更プロトコルに対応するステップのフローチャートが、図3Bに示されている。図2Cおよび図3Bを参照すると、ビュー変更フェーズにおいて、現在のビューがvである場合、ノードp=(v+1)mod Nが、新しい一次ノードになるために、Q個の有効なビュー変更メッセージを取得するのを待ち、pはレプリカ/ノードのシリアル番号であり、vはビュー番号であり、Nはレプリカ/ノードの総数である(ステップ322)。Q個のビュー変更メッセージは、マルチキャストされたビュー変更メッセージを含んでよい。前のビューがvであるため、ビュー変更メッセージはそれぞれ、新しいビューv+1を含んでよい。新しい一次ノードpがQ個のビュー変更メッセージを取得した後に、一次ノードpは新しいビュー・メッセージをマルチキャストする(ステップ323)。このメッセージは、受信されたすべての有効なビュー変更メッセージ、および一次ノードの故障に起因してまだ完了していないことがあるすべての要求のセットを含む。新しい一次ノードは、最後のチェックポイントを決定し、特に、故障していないノードの最後の状態に追い付くことを保証してよく、これは、新しいビュー内で以前の要求(例えば、準備されてコミットされたが、実行されていない要求)を再コミットすることを含んでよい。ビュー変更が発生している間、新しい要求は受け入れられない。ノードが、Q個のビュー変更メッセージを含んでいる有効な新しいビュー・メッセージを受信した後に、このノードは、ビューv+1に移行し、未完了の要求のセットを処理する。その後、正常動作プロトコルが続行し、各ノードが、最後の安定したチェックポイントのシーケンス番号と準備メッセージ内の最高の番号の間の要求をやり直すが、要求を再実行することは避ける。バックアップ・ノードは、新しい一次ノードのタイマーを設定してよい(ステップ324)。
図3Cは、図3Bに類似しているが、格納フェーズが追加されている点が異なる。すなわち、ステップ331〜337はそれぞれステップ311〜317に類似しているが、ステップ399がステップ335と336の間で追加として実行される点が異なる。一部の実施形態では、図3Cに示されているように、準備フェーズ(バックアップ・ノードまたは一次ノードが(Q−1)個の準備メッセージを取得する)とコミット・フェーズ(バックアップ・ノードまたは一次ノードがコミット・メッセージをマルチキャストする)の間で、格納フェーズにおいて事前準備メッセージおよび少なくとも(Q−1)個の準備メッセージが格納されてよい。以下では、図4A〜図6Bを参照して、さらに詳細が説明される。
図4Aは、本明細書のさまざまな実施形態に従って一次ノードによって実行される合意ステップ410aのフローチャートを示している。図4Bは、本明細書のさまざまな実施形態に従ってバックアップ・ノードによって実行される合意ステップ410bのフローチャートを示している。これら2つの図は、少なくとも3F+1個のノードが含まれているPBFT合意メカニズムを実装するブロックチェーン・システムを示している。ただし、本明細書はこれに限定されない。ブロックチェーン・システムは、有効な合意プロセスを維持し、安全性および活性の要件を満たすために、定数のノードがシステム内に存在する限り、「少なくとも3F+1」以外の数のノードを含んでよい。一部の実施形態では、合意ステップ410aは、図4Aに示されているようにビューv内の一次ノードによって実行され、合意ステップ410bは、図4Bに示されているようにビューv内のバックアップ・ノードによって実行され、ビュー変更のトリガーは発生しない。このビューは、N個のノードのうちのどれが一次ノードと見なされるかを示しており、Nはネットワーク・システム内のノードの数を指定する。ステップ410aおよび410bは、図1のシステム100の1つまたは複数のコンポーネント(例えば、前述したノード0、ノード1、ノード2、…、またはノードi、または類似するデバイス、あるいはノードのいずれかおよび追加のデバイス(例えば、ノードA)の組合せ)によってそれぞれ実装されてよい。この図では、ノードA(例えば、前述した軽量ノード)はクライアントであり、ノード0〜ノード3はネットワーク・システム112内のノードである。現在のビューv内で、ノード0が一次ノードとして機能し、ノード1〜3がバックアップ・ノードとして機能する。ステップ410aおよび410bは、さまざまなハードウェアマシンおよび/またはソフトウェアを備えている合意システムまたはデバイス(例えば、コンピュータ、サーバ)によってそれぞれ実装されてよい。例えば、合意システムまたはデバイスは、1つまたは複数のプロセッサと、1つまたは複数のプロセッサに結合され、システムまたはデバイス(例えば、プロセッサ)にステップ410aまたは410bを実行させるように1つまたは複数のプロセッサによって実行可能な命令を使用して構成された、1つまたは複数の非一時的コンピュータ可読記憶媒体(例えば、1つまたは複数のメモリ)とを備えてよい。以下で提示される動作は、例示的であるよう意図されている。実装に応じて、この動作は、さまざまな順序で、または並列に実行される、追加のステップ、より少ないステップ、または代替のステップを含んでよい。
図4Aおよび4Bの縦方向に、さまざまなステップが「要求」フェーズ、「事前準備」フェーズ、「準備」フェーズ、「格納」フェーズ、「コミット」フェーズ、および「応答」フェーズに対応しており、これらのフェーズは、図1〜図3Cを参照する前述の説明で参照されてよい。さまざまなフェーズの配置は、明確にするために示されており、厳密な順序の要件を有していなくてよい。例えば格納フェーズは、準備フェーズが終了する前に開始してよく、かつ/またはコミット・フェーズが開始した後に終了してよい。図4Aに示されているように、例えば、下で説明されているような中断(例えば、ダウンタイムの状況)が発生した場合に、任意選択的なステップ498が、ステップ415とステップ417の間で追加として実行されてよい。一次ノードおよびバックアップ・ノードは、PBFT合意メカニズムにおいて定義されるノードであってよい。
図4Aのステップ410aおよび図4Bのステップ410bは、1つまたは複数の要求の1回の合意検証に適用されてよい。例えば、1回の合意検証は、1つまたは複数のトランザクション要求を処理してよい。合意検証に成功した場合、対応するトランザクションがブロックチェーンの新しいブロックに詰め込まれる。以下の説明では、特に示されない限り、特定のステップが組み合わせられるとき、図4Aまたは図4Bのいずれかを参照する。ステップ411aおよび412aは図4Aのみに現れ、ステップ411bおよび412bは図4Bのみに現れる。ステップ413、414、415、416、および417は、図4Aおよび図4Bの両方に示されている。
図4Aに示されているように、ステップ411aで、要求フェーズにおいて一次ノードが要求をクライアントから取得してよい。例えば、要求は、一次ノード(ノード0)によってクライアント(ノードA)から直接取得されるか、または破線で示されているように、要求を一次ノードに転送したバックアップ・ノード(例えば、バックアップ・ノード1、2、または3)から取得されてよい。一部の実施形態では、要求は、合意検証に関する(スマート・コントラクトを含むか、または含まない)1つまたは複数のトランザクションを伴ってよい。合意検証は、正常動作プロトコルの実行中に実行されてよい。代替として、要求は他の動作に対応してよい。
ステップ412aで、事前準備フェーズにおいて、一次ノード(ノード0)が、バックアップ・ノード(ノード1、2、および3)への要求と一緒に事前準備メッセージをマルチキャストする。一部の実施形態では、複数の要求を取得した後に、一次ノードは、事前準備メッセージおよび複数の要求をバックアップ・ノードの各々にマルチキャストしてよい。事前準備メッセージは、要求の順序(例えば、要求に関連付けられたトランザクションの順序)を含んでよい。
正常動作プロトコルにおいてバックアップ・ノード(例えば、ノード1、2、または3)によって実行されるステップを示している図4Bに示されているように、バックアップ・ノードが、ステップ411bで、事前準備フェーズにおいて要求と一緒に事前準備メッセージを取得する。この要求は、合意検証に関連するトランザクションを含んでよい。一部の実施形態では、事前準備メッセージおよび要求が一次ノードから取得されてよい。一部の実施形態では、事前準備メッセージが一次ノードから取得されてよく、要求がクライアント、一次ノード、および/または任意のその他のバックアップ・ノードから取得されてよい。一次ノードが機能していない場合、ビュー変更プロトコルがトリガーされてよい。
ステップ412bで、準備フェーズにおいて、事前準備メッセージが有効である場合、バックアップ・ノードが準備メッセージをシステム内の他のノードにマルチキャストする。
ステップ413で、準備フェーズにおいて、一次ノードまたはバックアップ・ノードが他のノードから送信された準備メッセージを受信する。(Q−1)個の有効な準備メッセージを取得することは、合意プロセスが次のコミット・フェーズに移行する前に満たされるべき条件であってよい。図4Aおよび4Bに示された実施形態では、例えば、(Q−1)は2Fであり、2F個以上の準備メッセージが必要である。2F個以上の準備メッセージは、バックアップ・ノードまたは一次ノード自体の準備メッセージを含んでよい。バックアップ・ノードの場合、2F個以上の準備メッセージは、ステップ412bでの準備メッセージ(すなわち、ステップ412bでのバックアップ・ノード自体による準備メッセージのマルチキャスト)を含んでよい。
ステップ414で、一次ノードまたはバックアップ・ノードが、事前準備メッセージおよび少なくとも(Q−1)個の準備メッセージを格納してよい。例えば、3F個の準備メッセージがノードによって取得された場合、事前準備メッセージおよび2F〜3F(2Fおよび3Fを含む)個の準備メッセージがノードによって格納されてよい。一部の実施形態では、事前準備メッセージおよびQ−1個の準備メッセージのみが格納される。一部の実施形態では、事前準備メッセージおよび2F個の準備メッセージのみが格納される。例えば、3F個の準備メッセージが取得された場合、システム全体が中断(例えば、システム・クラッシュ)から回復した後に、多すぎるシステムの記憶リソースを消費することなく有効な合意プロセスが効果的かつ効率的に再開されて前進するために格納される必要がある合意メッセージの最小量は、事前準備メッセージおよび2F個の準備メッセージであってよい。一部の実施形態では、事前準備メッセージおよび(Q−1)個以上の準備メッセージを格納することが、事前準備メッセージおよび(Q−1)個以上の準備メッセージのみを格納することを含んでおり、つまり、事前準備メッセージおよび少なくとも2F個の準備メッセージ以外のメッセージが格納されないことを意味する。例えば、合意検証の各回で、コミット・メッセージは格納されない。同じことが、複数回の合意検証が実行される場合に適用されてよい。
ステップ413およびステップ414は、順序通りに、同時に、または別の方式で実行されてよい。一部の実施形態では、(Q−1)個以上の準備メッセージが取得された場合にのみ、事前準備メッセージおよび少なくとも(Q−1)個の準備メッセージの格納が実行されてよい。他の実施形態では、各メッセージが取得された後にいつでも、事前準備メッセージおよび少なくとも(Q−1)個の準備メッセージの格納が実行されてよい。
一部の実施形態では、中断からのシステムの回復後に、格納されたメッセージが取り出し可能である限り、事前準備メッセージおよび少なくとも(Q−1)個の準備メッセージが、さまざまな方式で格納されてよい。例えば、事前準備メッセージおよび少なくとも(Q−1)個の準備メッセージは、格納がシステム・クラッシュおよび再起動による影響を受けないことを保証する永続的記憶装置に格納されてよい。
一部の実施形態では、システムの動作に中断(例えば、システム・クラッシュに起因するダウンタイム)が生じていない場合、ステップ415が実行されてよい。一実施形態では、少なくとも事前準備メッセージおよび(Q−1)個の準備メッセージが格納された後に、ステップ415でコミット・フェーズが実行される。ステップ415では、コミット・フェーズにおいて、一次ノードおよびバックアップ・ノードがそれぞれ、コミット・メッセージを他のノードにマルチキャストする。各ノードは、他のノードによってマルチキャストされたコミット・メッセージを受信してもよい。ステップ416で、一次ノードまたはバックアップ・ノードが、少なくとも定数(Q)(この場合は2F+1)のコミット・メッセージを取得してよい。バックアップ・ノードまたは一次ノードの場合、図4Aおよび4Bに示されているように、Q個のコミット・メッセージが、ステップ415でのコミット・メッセージ(すなわち、ステップ415でバックアップ・ノードまたは一次ノード自体によってマルチキャストされたコミット・メッセージ)を含んでよい。ステップ417で、あるノードが、十分な数のノード(例えば、Q個のノード)がコミットしたことを確認した場合、このノードは、順序に従って要求を実行し、応答メッセージを介してクライアント(ノードA)に通知してよい。
一部の実施形態では、コミット・メッセージがマルチキャストされた後に、システムの動作に中断(例えば、システム・クラッシュに起因するダウンタイム)が生じている場合、ステップ415の後のステップ417の前に、任意選択的なステップ498が実行されてよい。ステップ498で、一次ノードまたはバックアップ・ノードがシステムの再起動を実行し、ノードがステップ414で一度格納した事前準備メッセージおよび少なくとも(Q−1)個の準備メッセージを読み込んでよい。一部の実施形態では、システムは、中断の後に、自主的に、または選択の余地なく、再起動してよい。その後、残りのステップ416〜417またはステップ417が続いてよい。
一部の実施形態では、コミット・メッセージがマルチキャストされる前に、システムの動作に中断(例えば、システム・クラッシュに起因するダウンタイム)が生じている場合、ステップ414の後のステップ415の前に、任意選択的なステップ499が実行されてよい。ステップ499で、一次ノードまたはバックアップ・ノードが、ノードが格納フェーズ(ステップ414)で一度格納した事前準備メッセージおよび少なくとも(Q−1)個の準備メッセージを読み込んでよい。一部の実施形態では、システムは、中断の後に、自主的に、または選択の余地なく、再起動してよい。ステップ499が実行された場合、特定の状況下で(例えば、機能していないノードが一次ノードであり、一次ノードが、タイムアウト期間内にその機能する状態を再開していない場合)、ビュー変更プロトコルがトリガーされてよい。しかし、タイムアウト条件が満たされない場合(例えば、タイムアウト条件をトリガーする前にステップ499が完了した場合)、図4Aおよび4Bに示されているように、ビュー変更プロトコルがトリガーされなくてよい。したがって、機能していない一次ノードが、タイムアウト条件を回避できるほど十分に素早くその機能する状態を再開した場合、ビュー変更プロトコルがトリガーされなくてよく、プロトコルにおいてステップ415〜417が続いてよい。タイムアウト条件が満たされた場合(例えば、タイムアウト条件がトリガーされる前にステップ499が完了しない場合)、図4Cおよび図4Dを参照して下で説明されているように、ビュー変更プロトコルがトリガーされてよい。
図4Cは、本明細書のさまざまな実施形態に従って、ビューv+1内の新しい一次ノードになるビューv内のバックアップ・ノードによる合意ステップ420aのフローチャートを示している。図4Dは、本明細書のさまざまな実施形態に従って、ビューv+1内でバックアップ・ノードのままであるビューv内のバックアップ・ノードによる合意ステップ420bのフローチャートを示している。ステップ420aおよび420bは、図1のシステム100の1つまたは複数のコンポーネント(例えば、前述したノード0、ノード1、ノード2、…、またはノードi、または類似するデバイス、あるいはノードのいずれかおよび追加のデバイス(例えば、ノードA)の組合せ)によって実装されてよい。この図では、ノードA(例えば、前述した軽量ノード)はクライアントであり、ノード0〜ノード3はブロックチェーン・ノードである。図4Aおよび図4Bにおいて説明されているように、ビューv内ではノード0が一次ノードとして機能していたが、図4Cおよび図4Dのビューv+1の場合、ノード1が新しい一次ノードになり、ノード2〜3はバックアップ・ノードのままである。ステップ420aおよび420bは、分散ネットワーク・システム(例えば、ブロックチェーン・システム)の1つまたは複数のノードによってそれぞれ実装されてよい。ステップ420aおよび420bは、さまざまなハードウェアマシンおよび/またはソフトウェアを備えている合意システムまたはデバイス(例えば、コンピュータ、サーバ)によってそれぞれ実装されてよい。例えば、合意システムまたはデバイスは、1つまたは複数のプロセッサと、1つまたは複数のプロセッサに結合され、システムまたはデバイス(例えば、プロセッサ)にステップ420aおよび420bを実行させるように1つまたは複数のプロセッサによって実行可能な命令を使用して構成された、1つまたは複数の非一時的コンピュータ可読記憶媒体(例えば、1つまたは複数のメモリ)とを備えてよい。以下で提示される動作は、例示的であるよう意図されている。実装に応じて、この動作は、さまざまな順序で、または並列に実行される、追加のステップ、より少ないステップ、または代替のステップを含んでよい。
前述したように、図4Bのステップ414の後のステップ415の前にビュー変更がトリガーされた場合、図4Cおよび図4Dに示されているステップが実行される。簡潔にするために、ステップ499の前のステップ(図4Bに示されているステップ414までのステップ)は、図4Cおよび図4Dにおいて再現されない。
一部の実施形態では、図4Cおよび図4Dに示されている合意ステップ420aおよび420bは、ビュー変更をトリガーする状況に対応してよい。ビューv内の一次ノード(例えば、ノード0)は、故障するか、またはその他の方法で機能しなくなることがある。図4Cの場合、ビューv+1内の新しい一次ノードになるビューv内のようなバックアップ・ノード(例えば、ノード1)は、ステップ499、423、424a、425a、426a、425、426、および427を実行してよい。ビューv+1内でバックアップ・ノードのままであるビューv内のバックアップ・ノード(例えば、ノード2または3)は、ステップ499、423、424b、425b、426b、425、426、および427を実行してよい。2つの図の縦方向に、さまざまなステップが「ビュー変更」フェーズ、「新しいビュー」フェーズ、「準備」フェーズ、「コミット」フェーズ、および「応答」フェーズに対応しており、これらのフェーズは、図1〜図3Cを参照する前述の説明で参照されてよい。さまざまなフェーズの配置は、明確にするために示されており、厳密な順序の要件を有していなくてよい。一次ノードおよびバックアップ・ノードは、PBFT合意メカニズムにおいて定義されるノードであってよい。以下の説明では、特定のステップが組み合わせられるとき、図4Cまたは図4Dのいずれかを参照する。
一部の実施形態では、ステップ499に示されているように、まだビューv内にある一次ノード(ノード0)およびバックアップ・ノード(ノード1、2、および/または3)の一部が、ステップ414でそれぞれ格納された事前準備メッセージおよび少なくとも(Q−1)個の準備メッセージをそれぞれ読み込んでよい。メッセージが永続的記憶装置から格納された場合、ここでそれらのメッセージが永続的記憶装置から読み込まれてよい。正常動作の中断(例えば、システム・クラッシュに起因するダウンタイム)に応答して、システムの再起動が実行されてよい。
一実施形態では、一次ノードが機能していないという疑いがあるとき、ステップ423に示されているように、バックアップ・ノード(例えば、ノード1、2、また3)がビュー変更メッセージをマルチキャストしてよく、このビュー変更メッセージは、読み込まれた事前準備メッセージおよび読み込まれた少なくとも(Q−1)個の準備メッセージを含んでよい。ビュー変更プロトコルにおいて、バックアップ・ノードのうちの1つが新しい一次ノードになってよく、残りのノードがバックアップ・ノードのままであってよい。新しい一次ノードの選択は、上で説明されている。例えば、図に示されているように、ノード1が、新しい一次ノードになるように選ばれてよく、ノード2および3がバックアップ・ノードのままであってよい。
ステップ424aで、バックアップ・ノードが、対応するノードがビュー変更メッセージに同意していることをそれぞれ示す少なくともQ個のビュー変更メッセージを他のノードから取得した場合、新しい一次ノード(例えば、ノード1)が選択されてよい。少なくともQ個のビュー変更メッセージが、バックアップ・ノード自体によってマルチキャストされたビュー変更メッセージを含んでよい。ステップ425aで、新しい一次ノード(例えば、ノード1)が、少なくともQ個のビュー変更メッセージを含んでいる新しいビュー・メッセージを、バックアップ・ノードのうちの少なくとも一部にマルチキャストする。
図4Dに示されているように、ステップ424bで、ビュー変更プロトコルの過程で、バックアップ・ノードが、対応するノードがビュー変更メッセージに同意していることをそれぞれ示すQ個以上のビュー変更メッセージを新しい一次ノードが受信したことを示す新しいビュー・メッセージを、新しい一次ノードから取得してよい。ステップ425bで、バックアップ・ノードが、新しいビュー・メッセージの受容を示す別の準備メッセージをマルチキャストする。別の準備メッセージは、少なくともビュー番号に関して、図4Aおよび図4Bの準備メッセージと異なってよい。
図4Cを参照すると、ステップ426aで、新しい一次ノード(ノード1)が別の(Q−1)個以上の準備メッセージを取得してよい。ステップ426bで、残りのバックアップ・ノードが、別の(Q−1)個以上の準備メッセージをそれぞれ取得してよい。図4Cおよび図4Dの準備フェーズは、図4Aおよび図4Bの準備フェーズに類似しているが、ビュー変更後の準備メッセージの内容が異なってよく、一部のノードが要求の一部をコミットしていてよいという点が異なる。区別するために、図4Cおよび図4Dの準備フェーズの準備メッセージは、別の準備メッセージまたは別の量の準備メッセージと呼ばれる。
ビュー変更プロトコルにおけるステップ425〜427は、正常動作プロトコルにおけるステップ415〜417に類似しているが、次の態様において異なっていてよい。(1)ビュー番号、(2)コミットされる要求が、対応するノードで再コミットされる必要がない、(3)機能していないノード0がステップ425〜427を実行しなくてよいか、またはステップ425〜427を正しく実行しなくよい。
開示された方法は、記憶装置の消費に対する要求を少なくして、ブロックチェーン・システムの適切な機能を保証することができる。1つの例では、ノードの総数が少なくとも3F+1個であるブロックチェーン・システムにおいて、少なくともF+1個のノードがコミット・メッセージをマルチキャストした場合、それは、少なくとも2F+1個のノードが準備を完了しており、事前準備メッセージおよび少なくとも2F個の準備メッセージが持続しているということを意味する。一部の実施形態では、事前準備メッセージおよび少なくとも2F個の準備メッセージが、格納フェーズにおいて各ノードによって格納される。例えば、一次ノードおよび/または一部のバックアップ・ノードが、事前準備メッセージおよび準備メッセージを格納している。そのため、格納フェーズのないプロセスとは異なり、1つまたは複数のノードまたは最悪の場合にすべてのノードにシステム・クラッシュが発生して再起動した場合でも、格納フェーズで一度格納された事前準備メッセージおよび少なくとも2F個のメッセージが読み込まれる。その結果、再起動して機能を再開しない(コミット・メッセージをマルチキャストしていても、していなくてもよい)F個のノードが存在する場合でも、事前準備メッセージおよび少なくとも2F個のメッセージが格納されて読み込まれるため、合意検証プロセス全体が、記憶装置の消費に対する要求を少なくし、その他の方法では不整合および/または分岐を引き起こすことがあるか、あるいはシステムの安全性および/または活性に影響を与えることがあるシステム・クラッシュによる影響を受けずに、効果的に再開され、前進することができる。
一部の実施形態では、一次ノードが、再起動したノードのうちのノードでないとすると、タイムアウト期間が終了した場合に、ビュー変更がトリガーされてよい。少なくともQ個のノードが準備を完了しているため、そのうちのF個がコミットしており、再起動を実行しない場合でも、(Q−F)個のノードがシステムの再起動を実行し、格納された事前準備メッセージおよび準備メッセージを読み込んでよい。再起動された(Q−F)個のノードによってマルチキャストされたビュー変更メッセージは、クラッシュ前からの事前準備メッセージおよび準備メッセージを運び、新しい一次ノードによってマルチキャストされた新しいビュー・メッセージが同じメッセージを運ぶことを保証する。このようにして、一貫性のない合意結果およびブロックチェーンの分岐が防がれる。
他の実施形態では、一次ノードが、再起動したQ個のノードのうちのノードである場合、一次ノードは、正常動作プロトコルの再開を試みるか、または他の動作を提案してよい。再起動が十分に高速でない場合、少なくとも(Q−F)個のノードが、読み込まれた事前準備メッセージおよび準備メッセージによってロックされるため、それらのノードは一次ノードに応答しない。したがって、合意に達することができず、新しい一次ノードを選ぶためにビュー変更がトリガーされてよい。残りのノードは、前述したビュー変更の実施形態に従ってよい。
図5Aは、本明細書のさまざまな実施形態に従って、合意方法510のフローチャートを示している。方法510は、図1のシステム100の1つまたは複数のコンポーネント(例えば、前述したノード0、ノード1、ノード2、…、またはノードi、または類似するデバイス、あるいはノードのいずれかおよび1つまたは複数の追加のデバイス(例えば、ノードA)の組合せ)によって実装されてよい。方法510は、1つまたは複数のブロックチェーン・ノード(例えば、バックアップ・ノード)によって実装されてよい。方法510は、さまざまなハードウェアマシンおよび/またはソフトウェアを備えている合意システムまたはデバイス(例えば、コンピュータ、サーバ)によって実装されてよい。例えば、合意システムまたはデバイスは、1つまたは複数のプロセッサと、1つまたは複数のプロセッサに結合され、システムまたはデバイス(例えば、プロセッサ)に方法510を実行させるように1つまたは複数のプロセッサによって実行可能な命令を使用して構成された、1つまたは複数の非一時的コンピュータ可読記憶媒体(例えば、1つまたは複数のメモリ)とを備えてよい。以下で提示される方法510の動作は、例示的であるよう意図されている。実装に応じて、方法510は、さまざまな順序で、または並列に実行される、追加のステップ、より少ないステップ、または代替のステップを含んでよい。下で説明されているさまざまなブロックは、特に指定されない限り、図に示された順序で実行される必要はない。例えば、ブロック512は、ブロック513が開始された後に開始し、ブロック513が終了される前に終了してよい。同様に、ブロック515は、ブロック516が開始された後に開始し、ブロック516が終了される前に終了してよい。別の例を挙げると、ブロック513および514は、順序通りに、または並列に実行されてよい。
一部の実施形態では、方法510が、ある数(N)のノードによって維持されるブロックチェーン上で実装されてよく、ノードのうちの1つが一次ノードとして機能し、他の(N−1)個のノードがバックアップ・ノードとして機能し、方法510がバックアップ・ノードのうちの1つによって実行される。Nは、4以上の任意の整数であることができる。一部の実施形態では、Nは3F+1に等しく、Fは、PBFT合意メカニズムにおいてシステムが許容できる機能していないノードの数を指定する。一次ノードおよびバックアップ・ノードは、PBFT合意メカニズムにおいて定義されるノードであってよい。方法510は、1つまたは複数の要求(例えば、ブロックチェーン・トランザクション要求)の1回の合意検証に適用されてよい。方法510のステップは、現在のビュー内のバックアップ・ノードによって実行されてよく、このバックアップ・ノードはバックアップ・ノードのままであってよく、またはビュー変更が行われる場合に、新しい一次ノードになってよい。PBFT合意メカニズムに従うビューは、方法510の実施中に変化することもあれば、変化しないこともある。方法510のさらなる詳細については、図1〜図4Bおよび関連する前述の説明を参照することができる。
ブロック511は、事前準備メッセージを一次ノードから取得することを含んでいる。一部の実施形態では、事前準備メッセージを一次ノードから取得する前に、方法510は、1つまたは複数のトランザクション要求を、1つまたは複数のクライアント、一次ノード、または他のバックアップ・ノードのうちの1つまたは複数のうちの少なくとも1つから取得することをさらに含む。用語「トランザクション要求」におけるトランザクションは、ブロックチェーン・システムを介して実施され、ブロックチェーンに記録されてよい。トランザクションは、例えば、金融トランザクション、ブロックチェーン契約をデプロイするか、または呼び出すブロックチェーン契約トランザクション、ブロックチェーンの状態(例えば、世界状態)を更新するトランザクションなどを含んでよい。トランザクションは、金銭のやりとりを伴う必要はない。トランザクション要求は、合意検証を介してブロックチェーンに追加されるブロックチェーン・トランザクションを含んでよい。一実施形態では、事前準備メッセージは、1つまたは複数のトランザクション要求に対応する1つまたは複数のトランザクションの順序を含む。この順序は、トランザクション要求を実行するために事前準備メッセージをマルチキャストする一次ノードによって提案されてよい。この順序は、トランザクションを含んでいる提案された新しいブロックの一意のハッシュ値の識別に対応してよい。一次ノードおよびバックアップ・ノードは、提案された順序を検証し、合意に達しようと試みる。代替として、この要求は、1つまたは複数のコンピューティング・デバイスに対する、情報を提供すること、または別の機能を実行することの別の命令を含んでよい。
ブロック512は、準備メッセージを一次ノードおよび他の(N−2)個のバックアップ・ノードのうちの少なくとも一部にマルチキャストすることを含んでおり、この準備メッセージは、事前準備メッセージの受容を示す。マルチキャストとは、PBFTシステム内の他のノードのうちの1つまたは複数あるいはすべてへのブロードキャストを意味する。機能している各バックアップ・ノードは、準備メッセージをマルチキャストしてよい。
ブロック513は、(Q−1)個以上の準備メッセージをバックアップ・ノードのうちの(Q−1)個以上からそれぞれ取得することを含んでおり、Q(定数)は、(N+F+1)/2を最も近い整数に切り上げた値になり、Fは、(N−1)/3を最も近い整数に切り下げた値になる。例えば、方法510を実行しているノードは、N個のノードのうちの1つである。(Q−1)個の準備メッセージは、個別のノードからであってよく、有効かつ一貫性があり、少なくとも(Q−1)個のバックアップ・ノードおよび一次ノードが事前準備メッセージに同意していることを示す。
ブロック514は、事前準備メッセージおよび(Q−1)個以上の準備メッセージを格納することを含んでいる。例えば、(Q−1)が2Fであり、3F個の準備メッセージが前のステップで取得された場合、ここで、事前準備メッセージおよび2F〜3F(2Fおよび3Fを含む)個の準備メッセージが格納されてよい。一部の実施形態では、事前準備メッセージおよび(Q−1)個の準備メッセージのみが格納される。例えば、(Q−1)が2Fであり、3F個の準備メッセージが前のステップで取得された場合、ここで、事前準備メッセージおよび2F個の準備メッセージのみが格納されてよい。一部の実施形態では、事前準備メッセージおよび(Q−1)個以上の準備メッセージを格納することが、事前準備メッセージおよび(Q−1)個以上の準備メッセージのみを格納することを含む。例えば、事前準備メッセージおよび(Q−1)個の準備メッセージのみが格納される。事前準備メッセージおよび(Q−1)個以上の準備メッセージ以外のメッセージは、格納されない。例えば、合意検証の各回で、コミット・メッセージは格納されない。同じことが、複数回の合意検証が実行される場合に適用されてよい。
一部の実施形態では、システムの再起動などのシステムのダウンタイムの回復後に、格納されたデータが取り出し可能である限り、事前準備メッセージおよび少なくとも(Q−1)個の準備メッセージが、さまざまな方式で格納されてよい。例えば、事前準備メッセージおよび(Q−1)個以上の準備メッセージが、リレーショナル・データベース、非リレーショナル・データベース、文書システムなどに格納されてよい。例えば、事前準備メッセージおよび(Q−1)個以上の準備メッセージが、永続的記憶装置に格納されてよい。本明細書に記載された格納ステップおよびその他のステップは、プログラミング言語によって制限されなくてよい。
一部の実施形態では、ブロック514は、ブロック513が満たされた場合にのみ、すなわち、(Q−1)個以上の準備メッセージが取得された場合にのみ、実行されてよい。他の実施形態では、各事前準備メッセージまたは準備メッセージは、受信されたときにすぐに格納されてよい。
一部の実施形態では、事前準備メッセージおよび(Q−1)個以上の準備メッセージを格納した後で(ブロック514)、コミット・メッセージをマルチキャストする前に(ブロック515)、この方法は、システムの再起動を実行することと、格納された事前準備メッセージおよび格納された(Q−1)個以上の準備メッセージを読み込むこととをさらに含む。正常動作の中断(例えば、システム・クラッシュ、停電など)に応答して、システムの再起動が実行されてよい。中断は、PBFTシステム内のノードのうちの1つまたは複数あるいはすべてに発生することがある。一部の実施形態では、最大でN個のノードすべてにクラッシュが発生し、N個のノードのうちの少なくともQ個が、システムの再起動を実行し、対応する格納された事前準備メッセージおよび格納された(Q−1)個以上の準備メッセージをそれぞれ読み込む。次に、ビュー変更プロトコルがトリガーされてもされなくてもよい。
一実施形態では、再起動がタイムアウトのトリガーを回避するほど十分に素早く、したがってシステムの再起動がビュー変更のトリガーを回避する場合、ビュー変更プロトコルがトリガーされなくてよい。すなわち、システムの再起動を実行することは、ビュー変更をトリガーせずにシステムの再起動を実行することを含む。それに応じて、ブロック515からの方法510の残りのステップが続いてよい。
そうでない場合、ビュー変更プロトコルがトリガーされてよい。一実施形態では、事前準備メッセージおよび(Q−1)個以上の準備メッセージを格納した後で、コミット・メッセージをマルチキャストする前に、この方法は、読み込まれた事前準備メッセージおよび読み込まれた(Q−1)個以上の準備メッセージを含んでいるビュー変更メッセージをマルチキャストすることをさらに含む。他のバックアップ・ノードが、ビュー変更メッセージをマルチキャストしてもよい。バックアップ・ノードのうちの1つが新しい一次ノードになるように選ばれてよく、この新しい一次ノードは、先行するステップを実行した1つのバックアップ・ノードであってもなくてもよい。
一部の実施形態では、上記のステップを実行したバックアップ・ノードが、新しい一次ノードになるように選ばれない場合、このバックアップ・ノードはバックアップ・ノードのままであってよく、ビュー変更中に次のステップを実行してよい。事前準備メッセージおよび(Q−1)個以上の準備メッセージを格納した後で、コミット・メッセージをマルチキャストする前に、この方法は、対応するノードがビュー変更メッセージに同意していることをそれぞれ示すQ個以上のビュー変更メッセージを新しい一次ノードが受信したことを示している、新しいビュー・メッセージを、新しい一次ノードから取得することと、別の準備メッセージを、新しい一次ノードを含んでいるバックアップ・ノードのうちの少なくとも一部にマルチキャストすることであって、この別の準備メッセージが新しいビュー・メッセージの受容を示す、マルチキャストすることと、別の(Q−1)個以上の準備メッセージをバックアップ・ノードのうちの(Q−1)個以上からそれぞれ取得することであって、これらの別の(Q−1)個以上の準備メッセージが、マルチキャストされた別の準備メッセージを含んでいる、取得することとをさらに含む。
他の実施形態では、上記のステップを実行したノードが、新しい一次ノードになるように選ばれた場合、このノードは新しい一次ノードになってよく、ビュー変更中に次のステップを実行してよい。事前準備メッセージおよび(Q−1)個以上の準備メッセージを格納した後で、コミット・メッセージをマルチキャストする前に、この方法は、対応するノードがビュー変更メッセージに同意していることをそれぞれ示すQ個以上のビュー変更メッセージを、バックアップ・ノードのうちのQ個以上からそれぞれ取得することであって、これらのQ個以上のビュー変更メッセージがマルチキャストされたビュー変更メッセージを含んでいる、取得することと、新しい一次ノードとして機能している1つのバックアップ・ノードがQ個以上のビュー変更メッセージを受信したことを示す新しいビュー・メッセージを、バックアップ・ノードのうちの少なくとも一部にマルチキャストすることと、別の(Q−1)個以上の準備メッセージをバックアップ・ノードのうちの(Q−1)個以上からそれぞれ取得することであって、これらの別の(Q−1)個以上の準備メッセージが、別のマルチキャストされた準備メッセージを含んでいる、マルチキャストすることとをさらに含む。
ビュー変更が行われない場合は、ブロック511〜514と同じビュー内にいる間に、またはブロック515の前にビュー変更が行われた場合は、新しいビュー内で、ブロック515および516ならびに次のステップが実行されてよい。
ブロック515は、コミット・メッセージを一次ノードおよび他のバックアップ・ノードのうちの少なくとも一部にマルチキャストすることを含んでおり、このコミット・メッセージは、1つのバックアップ・ノードが(Q−1)個以上の準備メッセージに同意していることを示す。一部の実施形態では、このコミット・メッセージは、1つのバックアップ・ノードが事前準備メッセージに同意し、(Q−1)個以上の準備メッセージを取得したことを示す。一部の実施形態では、コミット・メッセージをマルチキャストすることに同意することに関して、検証ステップが実行されてよい。例えば、前述したように、ダイジェストdに対して検証するために、順序に従ってダイジェストD(m)が決定されてよい。一致する場合、コミット・メッセージがマルチキャストされてよい。
一部の実施形態では、コミット・メッセージをそれぞれマルチキャストした後に、ブロック513で、バックアップ・ノードのうちの(Q−1)個以上のうちの最大でF個が故障しているか、またはその他の方法で機能しておらず、システムの再起動を実行しない。例えば、コミットしたF個のノードでシステム・クラッシュが発生し、これらのノードが再起動せず、機能を再開しないことがある。それにもかかわらず、一貫性のない結果およびブロックチェーンの分岐を引き起こさずに、合意検証を適切に実行することができる。
ブロック516は、一次ノードおよびバックアップ・ノードのうちのQ個以上のノードから、対応するノードが対応するノードによって受信された(Q−1)個以上の準備メッセージに同意していることをそれぞれ示す、Q個以上のコミット・メッセージをそれぞれ取得することを含んでいる。一部の実施形態では、このコミット・メッセージは、コミット・メッセージをマルチキャストした対応するノードが事前準備メッセージに同意し、(Q−1)個以上の準備メッセージを取得したことを示す。Q個のコミット・メッセージは、個別のノードからであってよく、有効かつ一貫性があり、Q個のノードが順番に要求を実行する準備ができているということを示す。したがって、大部分のノードによって合意が達せられ、次の実行ステップを実行することができる。
一部の実施形態では、コミット・メッセージをマルチキャストした後に(ブロック515)、要求を実行する前に、この方法は、システムの再起動を実行することと、格納された事前準備メッセージおよび格納された(Q−1)個以上の準備メッセージを読み込むこととをさらに含む。システムの再起動は、自主的に、または選択の余地なく、実行されてよい。システムの再起動は、システム・クラッシュなどの、システムまたはデバイスの機能の中断によって引き起こされてよい。
一部の実施形態では、方法510は、この順序に従って、1つまたは複数のトランザクションを、1つのバックアップ・ノードによって維持されるブロックチェーンのローカル・コピーに詰め込むことをさらに含んでよい。例えば、少なくとも(Q−F)個の善意のノード(Q個のコミット・メッセージだが、最大でF個の機能していないノードを考慮している)がコミット・メッセージ内のダイジェストdを検証したときに、要求の合意が検証されてよい(または一次ノードの場合、一次ノードがダイジェストdを提案したため、検証を実行する必要がなくてよい)。その結果、十分な数のノードが対応するトランザクションを検証した場合、それらのトランザクションをブロックチェーンに詰め込むことができる。最初に要求を送信したクライアント(例えば、ノードA)に通知されてよい。
図5Bは、本明細書のさまざまな実施形態に従って、合意方法520のフローチャートを示している。方法520は、図1のシステム100の1つまたは複数のコンポーネント(例えば、前述したノード0、ノード1、ノード2、…、またはノードi、または類似するデバイス、あるいはノードのいずれかおよび1つまたは複数の追加のデバイス(例えば、ノードA)の組合せ)によって実装されてよい。方法520は、1つまたは複数のブロックチェーン・ノード(例えば、一次ノード)によって実装されてよい。方法520は、さまざまなハードウェアマシンおよび/またはソフトウェアを備えている合意システムまたはデバイス(例えば、コンピュータ、サーバ)によって実装されてよい。例えば、合意システムまたはデバイスは、1つまたは複数のプロセッサと、1つまたは複数のプロセッサに結合され、システムまたはデバイス(例えば、プロセッサ)に方法520を実行させるように1つまたは複数のプロセッサによって実行可能な命令を使用して構成された、1つまたは複数の非一時的コンピュータ可読記憶媒体(例えば、1つまたは複数のメモリ)とを備えてよい。以下で提示される方法520の動作は、例示的であるよう意図されている。実装に応じて、方法520は、さまざまな順序で、または並列に実行される、追加のステップ、より少ないステップ、または代替のステップを含んでよい。下で説明されているさまざまなブロックは、特に指定されない限り、図に示された順序で実行される必要はない。例えば、ブロック521は、ブロック522が開始された後に開始し、ブロック522が終了される前に終了してよい。同様に、ブロック524は、ブロック525が開始された後に開始し、ブロック525が終了される前に終了してよい。別の例を挙げると、ブロック522および523は、順序通りに、または並列に実行されてよい。
一部の実施形態では、方法520が、ある数(N)のノードによって維持されるブロックチェーン上で実装されてよく、ノードのうちの1つが一次ノードとして機能し、他の(N−1)個のノードがバックアップ・ノードとして機能し、方法520が一次ノードによって実行される。一次ノードおよびバックアップ・ノードは、PBFTモデルにおいて定義されるノードであってよい。方法520は、1つまたは複数の要求(例えば、ブロックチェーン・トランザクション要求)の1回の合意検証に適用されてよい。方法520のさらなる詳細については、図1〜図4Bおよび関連する前述の説明を参照することができる。
ブロック521は、事前準備メッセージをバックアップ・ノードのうちの少なくとも一部にマルチキャストすることを含んでいる。一部の実施形態では、事前準備メッセージをバックアップ・ノードのうちの少なくとも一部にマルチキャストする前に、方法520は、1つまたは複数のトランザクション要求を、1つまたは複数のクライアント(例えば、軽量ノード)またはバックアップ・ノードのうちの1つまたは複数のうちの少なくとも1つから取得することをさらに含む。トランザクション要求は、合意検証を介してブロックチェーンに追加されるブロックチェーン・トランザクションを含んでよい。一実施形態では、事前準備メッセージは、1つまたは複数のトランザクション要求に対応する1つまたは複数のトランザクションの順序を含む。この順序は、トランザクション要求を実行するために事前準備メッセージをマルチキャストする一次ノードによって提案されてよい。この順序は、トランザクションを含んでいる提案された新しいブロックの一意のハッシュ値の識別に対応してよい。一次ノードおよびバックアップ・ノードは、提案された順序を検証し、合意に達しようと試みる。代替として、この要求は、1つまたは複数のコンピューティング・デバイスに対する、情報を提供すること、または別の機能を実行することの別の命令を含んでよい。
ブロック522〜525はブロック513〜516および関連する前述の説明に類似してよいが、一次ノードが機能しなくなった場合に、ビュー変更がトリガーされ、新しい一次ノードが選ばれるという点が異なる。
ブロック522は、(Q−1)個以上の準備メッセージをバックアップ・ノードのうちの(Q−1)個以上からそれぞれ取得することを含んでおり、これらの準備メッセージは、対応するバックアップ・ノードによる事前準備メッセージの受容をそれぞれ示し、Q(定数)は、(N+F+1)/2を最も近い整数に切り上げた値になり、Fは、(N−1)/3を最も近い整数に切り下げた値になる。バックアップ・ノードは、準備メッセージをそれぞれマルチキャストしていてよい。一部の実施形態では、Fは、機能しているN個のノードの合意システムを維持するためにN個のノードのうちで許容される、機能していないノードの最大数を表す。例えば、方法520を実行しているノードは、N個のノードのうちの1つである。(Q−1)個以上の準備メッセージは、個別のノードからであってよく、有効かつ一貫性があり、(Q−1)個以上のバックアップ・ノードおよび一次ノードが事前準備メッセージに同意していることを示す。
ブロック523は、事前準備メッセージおよび(Q−1)個以上の準備メッセージを格納することを含んでいる。例えば、(Q−1)が2Fであり、3F個の準備メッセージが前のステップで取得された場合、ここで、事前準備メッセージおよび2F〜3F(2Fおよび3Fを含む)個の準備メッセージが格納されてよい。一部の実施形態では、事前準備メッセージおよび(Q−1)個の準備メッセージのみが格納される。例えば、(Q−1)が2Fであり、3F個の準備メッセージが前のステップで取得された場合、ここで、事前準備メッセージおよび2F個の準備メッセージのみが格納されてよい。一部の実施形態では、事前準備メッセージおよび(Q−1)個以上の準備メッセージを格納することが、事前準備メッセージおよび(Q−1)個以上の準備メッセージのみを格納することを含む。例えば、事前準備メッセージおよび(Q−1)個の準備メッセージのみが格納される。事前準備メッセージおよび(Q−1)個以上の準備メッセージ以外のメッセージは、格納されない。例えば、合意検証の各回で、コミット・メッセージは格納されない。同じことが、複数回の合意検証が実行される場合に適用されてよい。
一部の実施形態では、システムの再起動などのシステムのダウンタイムの回復後に、格納されたデータが取り出し可能である限り、事前準備メッセージおよび(Q−1)個以上の準備メッセージが、さまざまな方式で格納されてよい。例えば、事前準備メッセージおよび(Q−1)個以上の準備メッセージが、リレーショナル・データベース、非リレーショナル・データベース、文書システムなどに格納されてよい。例えば、事前準備メッセージおよび(Q−1)個以上の準備メッセージが、永続的記憶装置に格納されてよい。本明細書に記載された格納ステップおよびその他のステップは、プログラミング言語によって制限されなくてよい。
一部の実施形態では、ブロック523は、ブロック522が満たされた場合にのみ、すなわち、(Q−1)個以上の準備メッセージが取得された場合にのみ、実行されてよい。他の実施形態では、各事前準備メッセージまたは準備メッセージは、受信されたときにすぐに格納されてよい。
一部の実施形態では、事前準備メッセージおよび(Q−1)個以上の準備メッセージを格納した後で(ブロック523)、コミット・メッセージをマルチキャストする前に(ブロック524)、この方法は、システムの再起動を実行することと、格納された事前準備メッセージおよび格納された(Q−1)個以上の準備メッセージを読み込むこととをさらに含む。正常動作の中断(例えば、システム・クラッシュ、停電など)に応答して、システムの再起動が実行されてよい。中断は、PBFTシステム内のノードのうちの1つまたは複数あるいはすべてに発生することがある。一部の実施形態では、最大でN個のノードすべてにクラッシュが発生し、N個のノードのうちの少なくともQ個が、システムの再起動を実行し、対応する格納された事前準備メッセージおよび格納された(Q−1)個以上の準備メッセージをそれぞれ読み込む。次に、ビュー変更プロトコルがトリガーされてもされなくてもよい。
一実施形態では、再起動がタイムアウトのトリガーを回避するほど十分に素早く、したがってシステムの再起動がビュー変更のトリガーを回避する場合、ビュー変更プロトコルがトリガーされなくてよい。それに応じて、ブロック524からの方法520の残りのステップが続いてよい。別の実施形態では、ビュー変更プロトコルがトリガーされてよく、ブロック524からの方法520の残りのステップが続かなくてよい。
ブロック524は、コミット・メッセージをバックアップ・ノードのうちの少なくとも一部にマルチキャストすることを含んでおり、このコミット・メッセージは、一次ノードが(Q−1)個以上の準備メッセージに同意していることを示す。一部の実施形態では、このコミット・メッセージは、一次ノードが(Q−1)個以上の準備メッセージを取得したことを示す。一部の実施形態では、コミット・メッセージをそれぞれマルチキャストした後に、ブロック522で、バックアップ・ノードのうちの(Q−1)個以上のうちの最大でF個が故障しているか、またはその他の方法で機能しておらず、システムの再起動を実行しない。例えば、コミットしたF個のノードでシステム・クラッシュが発生し、これらのノードが再起動せず、機能を再開しないことがある。それにもかかわらず、一貫性のない結果およびブロックチェーンの分岐を引き起こさずに、合意検証を適切に実行することができる。
ブロック525は、一次ノードおよびバックアップ・ノードのうちのQ個以上のノードから、対応するノードが対応するノードによって受信された(Q−1)個以上の準備メッセージに同意していることをそれぞれ示す、Q個以上のコミット・メッセージをそれぞれ取得することを含んでおり、これらのQ個以上のコミット・メッセージは、マルチキャストされたコミット・メッセージを含んでいる。一部の実施形態では、このコミット・メッセージは、コミット・メッセージをマルチキャストした対応するノードが事前準備メッセージに同意し、(Q−1)個以上の準備メッセージを取得したことを示す。Q個以上のコミット・メッセージは、個別のノードからであってよく、有効かつ一貫性があり、Q個以上のノードが順番に要求を実行する準備ができているということを示す。したがって、大部分のノードによって合意が達せられ、次の実行ステップを実行することができる。
一部の実施形態では、コミット・メッセージをマルチキャストした後に(ブロック525)、要求を実行する前に、この方法は、システムの再起動を実行することと、格納された事前準備メッセージおよび格納された(Q−1)個以上の準備メッセージを読み込むこととをさらに含む。システムの再起動は、自主的に、または選択の余地なく、実行されてよい。システムの再起動は、システム・クラッシュなどの、システムまたはデバイスの機能の中断によって引き起こされてよい。
一部の実施形態では、方法520は、この順序に従って、1つまたは複数のトランザクションを、一次ノードによって維持されるブロックチェーンのローカル・コピーに詰め込むことをさらに含んでよい。例えば、少なくとも(Q−F)個の善意のノード(Q個のコミット・メッセージだが、最大でF個の機能していないノードを考慮している)がコミット・メッセージ内のダイジェストdを検証したときに、要求の合意が検証されてよい(または一次ノードの場合、一次ノードがダイジェストdを提案したため、検証を実行する必要がなくてよい)。その結果、十分な数のノードが対応するトランザクションを検証した場合、それらのトランザクションをブロックチェーンに詰め込むことができる。最初に要求を送信したクライアント(例えば、ノードA)に通知されてよい。
図6Aは、さまざまな実施形態に従って、合意システム610のブロック図を示している。合意システム610(例えば、コンピュータ・システム)は、前述したノード0、ノード1、ノード2、…、またはノードi、または類似するデバイス、あるいはノードのいずれかおよび追加のデバイス(例えば、ノードA)の組合せの実装の例であってよい。方法510は、合意システム610によって実装されてよい。合意システム610は、1つまたは複数のプロセッサと、1つまたは複数のプロセッサに結合され、システムまたはデバイス(例えば、プロセッサ)に方法510を実行させるように1つまたは複数のプロセッサによって実行可能な命令を使用して構成された、1つまたは複数の非一時的コンピュータ可読記憶媒体(例えば、1つまたは複数のメモリ)とを備えてよい。合意システム610は、バックアップ・ノードにおいて実装されてよい。合意システム610は、命令(例えば、ソフトウェア命令)に対応するさまざまなユニット/モジュールを備えてよい。
一部の実施形態では、合意システム610は、合意装置と呼ばれてよい。この合意装置はブロックチェーンを維持するためであってよく、ある数(N)のノードがブロックチェーンを維持し、N個のノードのうちの1つが一次ノードとして機能し、他の(N−1)個のノードがバックアップ・ノードとして機能し、この合意装置は、(N−1)個のバックアップ・ノードのうちの1つとして機能し、1つまたは複数のプロセッサと、1つまたは複数のプロセッサに結合され、この装置に動作を実行させるために1つまたは複数のプロセッサによって実行可能な命令を使用して構成された1つまたは複数の非一時的コンピュータ可読メモリとを備える。この合意装置は、命令(例えば、ソフトウェア命令)に対応するさまざまなユニット/モジュールを備えてよい。この合意装置は、事前準備メッセージを一次ノードから取得するための第1の取得モジュール611と、準備メッセージを一次ノードおよび他の(N−2)個のバックアップ・ノードのうちの少なくとも一部にマルチキャストするための第1のマルチキャスト・モジュール612であって、この準備メッセージが事前準備メッセージの受容を示す、第1のマルチキャスト・モジュール612と、(Q−1)個以上の準備メッセージをバックアップ・ノードのうちの(Q−1)個以上からそれぞれ取得するための第2の取得モジュール613であって、Q(定数)が、(N+F+1)/2を最も近い整数に切り上げた値であり、Fが(N−1)/3を最も近い整数に切り下げた値であり、(Q−1)以上の準備メッセージがマルチキャストされた準備メッセージを含んでいる、第2の取得モジュール613と、事前準備メッセージおよび(Q−1)個以上の準備メッセージを格納するための格納モジュール614と、コミット・メッセージを、一次ノードおよび他のバックアップ・ノードのうちの少なくとも一部にマルチキャストするための第2のマルチキャスト・モジュール615であって、このコミット・メッセージが、1つのバックアップ・ノードが(Q−1)個以上の準備メッセージに同意していることを示す、第2のマルチキャスト・モジュール615と、一次ノードおよびバックアップ・ノードのうちのQ個以上のノードから、対応するノードが対応するノードによって受信された(Q−1)個以上の準備メッセージに同意していることをそれぞれ示す、Q個以上のコミット・メッセージをそれぞれ取得するための第3の取得モジュール616であって、Q個以上のコミット・メッセージがマルチキャストされたコミット・メッセージを含んでいる、第3の取得モジュール616とを備えてよい。
一部の実施形態では、第1の取得モジュール611または別のモジュールは、1つまたは複数のトランザクション要求を、1つまたは複数のクライアント、一次ノード、または他のバックアップ・ノードのうちの1つまたは複数のうちの少なくとも1つから取得するためでもある。この合意装置は、この順序に従って、1つまたは複数のトランザクションを、1つのバックアップ・ノードによって維持されるブロックチェーンのローカル・コピーに詰め込むための詰め込みモジュール617をさらに備えてよい。
図6Bは、さまざまな実施形態に従って、合意システム620のブロック図を示している。合意システム620(例えば、コンピュータ・システム)は、前述したノード0、ノード1、ノード2、…、またはノードi、または類似するデバイス、あるいはノードのいずれかおよび追加のデバイス(例えば、ノードA)の組合せの実装の例であってよい。方法520は、合意システム620によって実装されてよい。合意システム620は、1つまたは複数のプロセッサと、1つまたは複数のプロセッサに結合され、システムまたはデバイス(例えば、プロセッサ)に方法520を実行させるように1つまたは複数のプロセッサによって実行可能な命令を使用して構成された、1つまたは複数の非一時的コンピュータ可読記憶媒体(例えば、1つまたは複数のメモリ)とを備えてよい。合意システム620は、一次ノードにおいて実装されてよい。合意システム620は、命令(例えば、ソフトウェア命令)に対応するさまざまなユニット/モジュールを備えてよい。
一部の実施形態では、合意システム620は、合意装置と呼ばれてよい。この合意装置はブロックチェーンを維持するためであってよく、ある数(N)のノードがブロックチェーンを維持し、N個のノードのうちの1つが一次ノードとして機能し、他の(N−1)個のノードがバックアップ・ノードとして機能し、この合意装置は、一次ノードとして機能し、1つまたは複数のプロセッサと、1つまたは複数のプロセッサに結合され、この装置に動作を実行させるために1つまたは複数のプロセッサによって実行可能な命令を使用して構成された1つまたは複数の非一時的コンピュータ可読メモリとを備える。この合意装置は、命令(例えば、ソフトウェア命令)に対応するさまざまなユニット/モジュールを備えてよい。この合意装置は、事前準備メッセージをバックアップ・ノードのうちの少なくとも一部にマルチキャストするための第1のマルチキャスト・モジュール621と、(Q−1)個以上の準備メッセージをバックアップ・ノードのうちの(Q−1)個以上からそれぞれ取得するための第1の取得モジュール622であって、これらの準備メッセージが、対応するバックアップ・ノードによる事前準備メッセージの受容をそれぞれ示し、Q(定数)が、(N+F+1)/2を最も近い整数に切り上げた値であり、Fが(N−1)/3を最も近い整数に切り下げた値である、第1の取得モジュール622と、事前準備メッセージおよび(Q−1)個以上の準備メッセージを格納するための格納モジュール623と、コミット・メッセージを、バックアップ・ノードのうちの少なくとも一部にマルチキャストするための第2のマルチキャスト・モジュール624であって、このコミット・メッセージが、一次ノードが(Q−1)個以上の準備メッセージに同意していることを示す、第2のマルチキャスト・モジュール624と、一次ノードおよびバックアップ・ノードのうちのQ個以上のノードから、対応するノードが対応するノードによって受信された(Q−1)個以上の準備メッセージに同意していることをそれぞれ示す、Q個以上のコミット・メッセージをそれぞれ取得するための第2の取得モジュール625であって、Q個以上のコミット・メッセージがマルチキャストされたコミット・メッセージを含んでいる、第2の取得モジュール625とを備えてよい。
一部の実施形態では、この合意装置は、1つまたは複数のトランザクション要求を、1つまたは複数のクライアントまたはバックアップ・ノードのうちの1つまたは複数のうちの少なくとも1つから取得するための第3の取得モジュール626をさらに備えてよい。この合意装置は、この順序に従って、1つまたは複数のトランザクションを、一次ノードによって維持されるブロックチェーンのローカル・コピーに詰め込むための詰め込みモジュール627をさらに備えてよい。
本明細書に記載された技術は、1つまたは複数の専用コンピューティング・デバイスによって実装される。それらの専用コンピューティング・デバイスは、デスクトップ・コンピュータ・システム、サーバ・コンピュータ・システム、ポータブル・コンピュータ・システム、ハンドヘルド・デバイス、ネットワーク・デバイス、あるいは本技術を実装するために配線論理および/またはプログラム論理を組み込む任意のその他デバイスまたはデバイスの組合せであってよい。それらの専用コンピューティング・デバイスは、パーソナル・コンピュータ、ラップトップ、携帯電話、カメラ付き携帯電話、スマートフォン、パーソナル・デジタル・アシスタント、メディア・プレーヤー、ナビゲーション・デバイス、電子メール・デバイス、ゲーム機、タブレット・コンピュータ、ウェアラブル・デバイス、またはこれらの組合せとして実装されてよい。コンピューティング・デバイスは、通常、オペレーティング・システム・ソフトウェアによって制御され、調整されてよい。従来のオペレーティング・システムは、特に、実行のためにコンピュータ・プロセッサを制御およびスケジューリングし、メモリ管理を実行し、ファイル・システム、ネットワーク接続、I/Oサービスを提供し、グラフィカル・ユーザ・インターフェイス(GUI:graphical user interface)などのユーザ・インターフェイス機能を提供する。本明細書に記載されたさまざまなシステム、装置、記憶媒体、モジュール、およびユニットは、専用コンピューティング・デバイス、あるいは1つまたは複数の専用コンピューティング・デバイスの1つまたは複数のコンピューティング・チップにおいて実装されてよい。一部の実施形態では、本明細書に記載された命令は、専用コンピューティング・デバイス上の仮想マシンにおいて実装されてよい。それらの命令は、実行されたときに、専用コンピューティング・デバイスに、本明細書に記載されたさまざまな方法を実行させてよい。この仮想マシンは、ソフトウェア、ハードウェア、またはこれらの組合せを含んでよい。例えば、仮想マシンは、イーサリアム内でスマート・コントラクト用の実行時環境を提供するイーサリアム仮想マシン(EVM:Ethereum Virtual Machine)ソフトウェアを含んでよい。
図7は、本明細書に記載された実施形態のいずれかが実装されてよいコンピュータ・システム700を示すブロック図である。システム700は、本明細書に記載された方法(例えば、合意方法510、合意方法520)のいずれかを実行してよい。システム700は、本明細書に記載されたシステム(例えば、合意システム610、合意システム620)のいずれかにおいて実装されてよい。システム700は、本明細書に記載されたノードのいずれかにおいて実装されてよく、ブロックチェーン契約を実装するために、対応するステップを実行するように構成されてよい。コンピュータ・システム700は、情報を伝達するためのバス702またはその他の通信機構、情報を処理するためにバス702に結合された1つまたは複数のハードウェア・プロセッサ704を含んでいる。ハードウェア・プロセッサ704は、例えば、1つまたは複数の汎用マイクロプロセッサであってよい。
コンピュータ・システム700は、情報およびプロセッサ704によって実行可能な命令を格納するためにバス702に結合された、ランダム・アクセス・メモリ(RAM:random access memory)などのメイン・メモリ706、キャッシュ、および/またはその他の動的記憶デバイスも含んでいる。メイン・メモリ706は、プロセッサ704によって実行可能な命令の実行中にテンポラリ変数またはその他の中間情報を格納するために使用されてもよい。そのような命令は、プロセッサ704によってアクセス可能な記憶媒体に格納された場合、コンピュータ・システム700を、命令で指定された動作を実行するようにカスタマイズされた専用マシンにする。コンピュータ・システム700は、プロセッサ704用の静的情報および命令を格納するためにバス702に結合された、読み取り専用メモリ(ROM:read only memory)708またはその他の静的記憶デバイスをさらに含んでいる。磁気ディスク、光ディスク、またはUSBサム・ドライブ(フラッシュ・ドライブ)などの記憶デバイス710が、情報および命令を格納するために提供され、バス702に結合される。
コンピュータ・システム700は、コンピュータ・システムと組み合わせてコンピュータ・システム700が専用マシンになることを引き起こすか、または専用マシンになるようにプログラムする、カスタマイズされた配線論理、1つまたは複数のASICもしくはFPGA、ファームウェア、および/またはプログラム論理を使用して、本明細書に記載された技術を実装してよい。一実施形態によれば、本明細書に記載された動作、方法、およびプロセスは、プロセッサ704がメイン・メモリ706に含まれている1つまたは複数の命令の1つまたは複数のシーケンスを実行することに応答して、コンピュータ・システム700によって実行される。そのような命令は、記憶デバイス710などの別の記憶媒体からメイン・メモリ706に読み取られてよい。メイン・メモリ706に含まれている命令のシーケンスの実行は、プロセッサ704に、本明細書に記載されたプロセスのステップを実行させる。代替の実施形態では、ソフトウェア命令の代わりに、またはソフトウェア命令と組み合わせて、配線接続された回路が使用されてよい。
メイン・メモリ706、ROM708、および/または記憶装置710は、非一時的記憶媒体を含んでよい。「非一時的媒体」という用語および類似の用語は、本明細書において使用されるとき、マシンを特定の様式で動作させるデータおよび/または命令を格納する媒体を指しており、この媒体は、非一時的信号を除外する。そのような非一時的媒体は、不揮発性媒体および/または揮発性媒体を含んでよい。不揮発性媒体の例としては、記憶デバイス710などの、光ディスクまたは磁気ディスクが挙げられる。揮発性媒体の例としては、メイン・メモリ706などの、動的メモリが挙げられる。非一時的媒体の一般的形態の例としては、フロッピー・ディスク、フレキシブル・ディスク、ハード・ディスク、半導体ドライブ、磁気テープ、または任意のその他の磁気データ記憶媒体、C−ROM、任意のその他の光データ記憶媒体、穴のパターンを有する任意の物理的媒体、RAM、PROM、およびEPROM、フラッシュEPROM、NVRAM、任意のその他のメモリ・チップまたはメモリ・カートリッジ、ならびにこれらのネットワーク化されたバージョンが挙げられる。
コンピュータ・システム700は、バス702に結合されたネットワーク・インターフェイス718も含んでいる。ネットワーク・インターフェイス718は、1つまたは複数のローカル・ネットワークに接続された1つまたは複数のネットワーク・リンクに結合している双方向データ通信を提供する。例えば、ネットワーク・インターフェイス718は、総合デジタル通信網(ISDN:integrated services digital network)カード、ケーブル・モデム、衛星モデム、または対応するタイプの電話回線とのデータ通信接続を提供するためのモデムであってよい。別の例として、ネットワーク・インターフェイス718は、互換性のあるLANとのデータ通信接続を提供するためのローカル・エリア・ネットワーク(LAN:local area network)カード(またはWANと通信するためのWANコンポーネント)であってよい。無線リンクが実装されてもよい。いずれかのそのような実装では、ネットワーク・インターフェイス718は、さまざまなタイプの情報を表すデジタル・データ・ストリームを運ぶ電気信号、電磁信号、または光信号を送信および受信する。
コンピュータ・システム700は、ネットワーク、ネットワーク・リンク、およびネットワーク・インターフェイス718を介して、メッセージを送信し、プログラム・コードを含むデータを受信することができる。インターネットの例では、サーバが、インターネット、ISP、ローカル・ネットワーク、およびネットワーク・インターフェイス718を介して、アプリケーション・プログラムの要求されたコードを送信してよい。
受信されたコードは、受信されたときにプロセッサ704によって実行されてよく、かつ/または後で実行するために、記憶デバイス710またはその他の不揮発性記憶装置に格納されてよい。
上記のセクションにおいて説明されたプロセス、方法、およびアルゴリズムの各々は、コンピュータ・ハードウェアを備えている1つまたは複数のコンピュータ・システムまたはコンピュータ・プロセッサによって実行されるコード・モジュールにおいて具現化され、完全に、または部分的に自動化されてよい。プロセスおよびアルゴリズムは、特定用途向け回路において部分的または全体的に実装されてよい。
前述したさまざまな特徴およびプロセスが、互いに独立して使用されてよく、またはさまざまな手法で組み合わせられてよい。可能性のあるすべての組合せおよび部分的組合せが、本明細書の範囲に含まれるよう意図されている。加えて、一部の実装では、特定の方法またはプロセスのブロックが省略されてよい。また、本明細書に記載された方法およびプロセスは、いずれかの特定のシーケンスに限定されず、それらに関連するブロックまたは状態を、適切な他のシーケンスで実行することができる。例えば、説明されたブロックまたは状態は、具体的に開示された順序以外の順序で実行されてよく、あるいは複数のブロックまたは状態が、単一のブロックまたは状態に組み合わせられてよい。ブロックまたは状態の例は、直列、並列、または何らかのその他の方式で実行されてよい。ブロックまたは状態は、開示された実施形態に追加されるか、または開示された実施形態から削除されてよい。本明細書に記載されたシステムおよびコンポーネントの例は、説明された方法とは異なって構成されてよい。例えば、要素が、開示された実施形態に追加されるか、開示された実施形態から削除されるか、または開示された実施形態と比較して再配置されてよい。
本明細書に記載された方法のさまざまな動作は、関連する動作を実行するように(例えば、ソフトウェアによって)一時的に構成されるか、または永続的に構成される1つまたは複数のプロセッサによって、少なくとも部分的に実行されてよい。一時的に構成されるか、または永続的に構成されるかにかかわらず、そのようなプロセッサは、本明細書に記載された1つまたは複数の動作または機能を実行するように動作するプロセッサ実装エンジンを構成してよい。
同様に本明細書に記載された方法は、少なくとも部分的にプロセッサ実装であってよく、特定の1つまたは複数のプロセッサがハードウェアの例である。例えば、方法の動作のうちの少なくとも一部が、1つまたは複数のプロセッサまたはプロセッサ実装エンジンによって実行されてよい。さらに、1つまたは複数のプロセッサが、「クラウド・コンピューティング」環境内で、または「SaaA(Software as a Service)」として、関連する動作の実行をサポートするように動作してもよい。例えば、動作のうちの少なくとも一部は、(プロセッサを含んでいるマシンの例として)コンピュータのグループによって実行されてよく、それらの動作は、ネットワーク(例えば、インターネット)を介して、および1つまたは複数の適切なインターフェイス(例えば、アプリケーションプログラムインターフェイス(API))を介してアクセス可能である。
特定の動作の実行は、単一のマシン内に存在するだけでなく、複数のマシンにわたってデプロイされて、プロセッサ間で分散されてよい。一部の実施形態では、プロセッサまたはプロセッサ実装エンジンは、単一の地理的位置(例えば、住居環境内、オフィス環境内、またはサーバ・ファーム内)に配置されてよい。他の実施形態では、プロセッサまたはプロセッサ実装エンジンは、複数の地理的位置にわたって分散されてよい。
本明細書全体を通じて、複数のインスタンスが、単一のインスタンスとして説明されたコンポーネント、動作、または構造を実装してよい。1つまたは複数の方法の個別の動作が別々の動作として示され、説明されているが、個別の動作のうちの1つまたは複数が同時に実行されてよく、各動作が、示された順序で実行される必要はない。構成において別々のコンポーネントとして提示された構造および機能は、組み合わされた構造またはコンポーネントとして実装されてよい。同様に、単一のコンポーネントとして提示された構造および機能は、別々のコンポーネントとして実装されてよい。これらおよびその他の変形、変更、追加、および改良は、本明細書における主題の範囲に含まれる。さらに、本明細書において使用されている関連性を表す用語(「第1の」、「第2の」、「第3の」など)は、どのような順序、高さ、または重要性も意味しておらず、ある要素を別の要素から区別するために使用されている。さらに、「1つの(a)」、「1つの(an)」、および「複数の」という用語は、本明細書では数量の制限を意味しておらず、言及されている物品のうちの少なくとも1つが存在することを意味している。
主題の概要が特定の実施形態を参照して説明されているが、本明細書の実施形態のより広い範囲を逸脱することなく、それらの実施形態に対してさまざまな修正および変更が行われてよい。「発明を実施するための形態」は、制限する意味で受け取られるべきではなく、さまざまな実施形態の範囲は、添付の特許請求の範囲に資格が与えられるあらゆる同等のものと共に、添付の特許請求の範囲によってのみ定義される。

Claims (15)

  1. ある数(N)のノードによって維持されるブロックチェーン上で実装されるコンピュータ実装合意方法であって、前記ノードのうちの1つが一次ノードとして機能し、他の(N−1)個の前記ノードがバックアップ・ノードとして機能し、前記方法が前記バックアップ・ノードのうちの1つによって実行され、前記方法が、
    事前準備メッセージを前記一次ノードから取得することと、
    準備メッセージを前記一次ノードおよび他の(N−2)個の前記バックアップ・ノードのうちの少なくとも一部にマルチキャストすることであって、前記準備メッセージが前記事前準備メッセージの受容を示す、マルチキャストすることと、
    (Q−1)個以上の準備メッセージを前記バックアップ・ノードのうちの(Q−1)個以上からそれぞれ取得することであって、Q(定数)が、(N+F+1)/2を最も近い整数に切り上げた値であり、Fが、(N−1)/3を最も近い整数に切り下げた値である、取得することと、
    前記事前準備メッセージおよび前記(Q−1)個以上の準備メッセージを格納することと、
    コミット・メッセージを前記一次ノードおよび前記他のバックアップ・ノードのうちの少なくとも一部にマルチキャストすることであって、前記コミット・メッセージが、前記1つのバックアップ・ノードが前記(Q−1)個以上の準備メッセージに同意していることを示す、マルチキャストすることと、
    前記一次ノードおよび前記バックアップ・ノードのうちのQ個以上のノードから、対応する前記ノードが前記対応するノードによって受信された(Q−1)個以上の準備メッセージに同意していることをそれぞれ示す、Q個以上のコミット・メッセージをそれぞれ取得することとを含んでいる、コンピュータ実装合意方法。
  2. 前記事前準備メッセージを前記一次ノードから取得する前に、前記方法が、1つまたは複数のトランザクション要求を、1つまたは複数のクライアント、前記一次ノード、または前記他のバックアップ・ノードのうちの1つまたは複数のうちの少なくとも1つから取得することをさらに含んでいる、請求項1に記載の方法。
  3. 前記事前準備メッセージが、前記1つまたは複数のトランザクション要求に対応する1つまたは複数のトランザクションの順序を含んでおり、
    前記コミット・メッセージが、前記コミット・メッセージを送信した前記対応するノードが前記順序に同意していることを示す、請求項2に記載の方法。
  4. 前記順序に従って、前記1つまたは複数のトランザクションを、前記1つのバックアップ・ノードによって維持される前記ブロックチェーンのローカル・コピーに詰め込むことをさらに含んでいる、請求項3に記載の方法。
  5. 前記(Q−1)個以上の準備メッセージが、前記マルチキャストされた準備メッセージを含んでおり、
    前記Q個以上のコミット・メッセージが、前記マルチキャストされたコミット・メッセージを含んでいる、請求項1から4のいずれか一項に記載の方法。
  6. 前記事前準備メッセージおよび前記(Q−1)個以上の準備メッセージを格納することが、
    前記事前準備メッセージおよび前記(Q−1)個以上の準備メッセージのみを格納することを含んでいる、請求項1から5のいずれか一項に記載の方法。
  7. 前記コミット・メッセージをマルチキャストした後に、
    システムの再起動を実行することと、
    格納された前記事前準備メッセージおよび格納された前記(Q−1)個以上の準備メッセージを読み込むこととをさらに含んでいる、請求項1から6のいずれか一項に記載の方法。
  8. 前記事前準備メッセージおよび前記(Q−1)個以上の準備メッセージを格納した後で、前記コミット・メッセージをマルチキャストする前に、
    システムの再起動を実行することと、
    格納された前記事前準備メッセージおよび格納された前記(Q−1)個以上の準備メッセージを読み込むこととをさらに含んでいる、請求項1から6のいずれか一項に記載の方法。
  9. 前記事前準備メッセージおよび前記(Q−1)個以上の準備メッセージを格納した後で、前記コミット・メッセージをマルチキャストする前に、
    読み込まれた前記事前準備メッセージおよび読み込まれた前記(Q−1)個以上の準備メッセージを含んでいるビュー変更メッセージをマルチキャストすることをさらに含んでいる、請求項8に記載の方法。
  10. 前記事前準備メッセージおよび前記(Q−1)個以上の準備メッセージを格納した後で、前記コミット・メッセージをマルチキャストする前に、
    前記対応するノードが前記ビュー変更メッセージに同意していることをそれぞれ示すQ個以上のビュー変更メッセージを新しい一次ノードが受信したことを示している、新しいビュー・メッセージを、前記新しい一次ノードから取得することと、
    別の準備メッセージを、前記新しい一次ノードを含んでいる前記バックアップ・ノードのうちの少なくとも一部にマルチキャストすることであって、前記別の準備メッセージが前記新しいビュー・メッセージの受容を示す、マルチキャストすることと、
    別の(Q−1)個以上の準備メッセージを前記バックアップ・ノードのうちの(Q−1)個以上からそれぞれ取得することとをさらに含んでいる、請求項9に記載の方法。
  11. 前記Q個以上のビュー変更メッセージが、前記マルチキャストされたビュー変更メッセージを含んでおり、
    前記別の(Q−1)個以上の準備メッセージが、前記別のマルチキャストされた準備メッセージを含んでいる、請求項10に記載の方法。
  12. 前記事前準備メッセージおよび前記(Q−1)個以上の準備メッセージを格納した後で、前記コミット・メッセージをマルチキャストする前に、
    前記対応するノードが前記ビュー変更メッセージに同意していることをそれぞれ示すQ個以上のビュー変更メッセージを、前記バックアップ・ノードのうちのQ個以上からそれぞれ取得することと、
    新しい一次ノードとして機能している前記1つのバックアップ・ノードが前記Q個以上のビュー変更メッセージを受信したことを示す新しいビュー・メッセージを、前記バックアップ・ノードのうちの少なくとも一部にマルチキャストすることと、
    別の(Q−1)個以上の準備メッセージを前記バックアップ・ノードのうちの(Q−1)個以上からそれぞれ取得することとをさらに含んでいる、請求項9に記載の方法。
  13. 前記システムの再起動を実行することが、
    ビュー変更をトリガーせずに前記システムの再起動を実行することを含んでいる、請求項8に記載の方法。
  14. ブロックチェーンを維持するためのバックアップ・ノードのうちの1つとして機能している合意システムであって、
    1つまたは複数のプロセッサと、
    前記1つまたは複数のプロセッサに結合されており、請求項1から13のいずれか一項に記載の方法を実行するために前記1つまたは複数のプロセッサによって実行可能な命令が格納されている、1つまたは複数のコンピュータ可読メモリとを備えている、合意システム。
  15. ブロックチェーンを維持するためのバックアップ・ノードのうちの1つとして機能している合意装置であって、請求項1から13のいずれか一項に記載の方法を実行するために複数のモジュールを備えている、合意装置。
JP2019553486A 2019-03-18 2019-03-18 合意システムのダウンタイムの回復 Active JP6880227B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2019/078552 WO2019101245A2 (en) 2019-03-18 2019-03-18 Consensus system downtime recovery

Publications (2)

Publication Number Publication Date
JP2020518887A true JP2020518887A (ja) 2020-06-25
JP6880227B2 JP6880227B2 (ja) 2021-06-02

Family

ID=66631283

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019553486A Active JP6880227B2 (ja) 2019-03-18 2019-03-18 合意システムのダウンタイムの回復

Country Status (9)

Country Link
US (2) US11347598B2 (ja)
EP (1) EP3607733B1 (ja)
JP (1) JP6880227B2 (ja)
KR (1) KR102365793B1 (ja)
CN (1) CN110870288B (ja)
AU (1) AU2019203865B2 (ja)
SG (1) SG11201908387SA (ja)
TW (1) TWI724678B (ja)
WO (1) WO2019101245A2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2022547013A (ja) * 2019-10-10 2022-11-10 杭州趣鏈科技有限公司 Pbftアルゴリズムに基づいて改善された単一ノードの異常能動的回復方法、システム、設備および媒体

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102170345B1 (ko) * 2019-03-18 2020-10-28 알리바바 그룹 홀딩 리미티드 뷰 변경 프로토콜을 종료하기 위한 시스템 및 방법
US10938750B2 (en) 2019-03-18 2021-03-02 Advanced New Technologies Co., Ltd. Consensus system downtime recovery
ES2862428T3 (es) 2019-03-18 2021-10-07 Advanced New Technologies Co Ltd Recuperación de tiempo de inactividad de sistema de consenso
CA3057395A1 (en) 2019-03-18 2019-05-31 Alibaba Group Holding Limited System and method for ending view change protocol
US11108553B2 (en) * 2019-04-05 2021-08-31 International Business Machines Corporation Database transaction guaranteed commitment
CN111108478B (zh) 2019-07-11 2023-11-21 创新先进技术有限公司 一种用于通信和共享区块链数据的方法、系统、和装置
SG11202001989WA (en) 2019-07-11 2020-04-29 Alibaba Group Holding Ltd Shared blockchain data storage
SG11202001975SA (en) 2019-07-11 2020-04-29 Alibaba Group Holding Ltd Shared blockchain data storage
CN110730204B (zh) * 2019-09-05 2022-09-02 创新先进技术有限公司 区块链网络中删除节点的方法和区块链系统
CN110727731B (zh) 2019-09-05 2021-12-21 创新先进技术有限公司 区块链网络中加入节点的方法和区块链系统
US20210099312A1 (en) * 2019-09-27 2021-04-01 Cypherium Blockchain Inc. Systems and methods for selecting and utilizing a committee of validator nodes in a distributed system
CN111522648B (zh) * 2020-07-03 2020-10-09 支付宝(杭州)信息技术有限公司 一种区块链的交易处理方法、装置及电子设备
KR102447063B1 (ko) * 2020-12-24 2022-09-23 한양대학교 산학협력단 개선된 pbft 기반의 블록체인 관리 방법, 블록체인 시스템 및 노드 장치
US11343313B1 (en) * 2021-01-28 2022-05-24 International Business Machines Corporation Fault tolerant periodic leader rotation for blockchain
US11743327B2 (en) * 2021-02-05 2023-08-29 International Business Machines Corporation Topological ordering of blockchain associated proposals
KR102574890B1 (ko) * 2021-04-02 2023-09-06 주식회사 헤세그 장애 노드에 내성을 갖는 블록체인 시스템 및 그 동작 방법
US11983161B2 (en) 2021-06-23 2024-05-14 Bank Of America Corporation System for mitigating data loss in an edge computing environment using machine learning and distributed ledger techniques
CN113850600B (zh) * 2021-12-01 2022-04-26 深圳前海微众银行股份有限公司 基于区块链的交易共识方法、装置、设备及存储介质
KR20240047735A (ko) * 2022-10-05 2024-04-12 한양대학교 산학협력단 상태기계복제를 위한 2단계 비잔틴 합의 방법 및 시스템
CN116991623B (zh) * 2023-08-30 2024-01-02 杭州趣链科技有限公司 区块链节点异常恢复方法、装置、电子设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6671821B1 (en) * 1999-11-22 2003-12-30 Massachusetts Institute Of Technology Byzantine fault tolerance
JP2015146165A (ja) * 2014-02-04 2015-08-13 日本電信電話株式会社 障害耐性信号処理装置および障害耐性信号処理方法
CN108492103A (zh) * 2018-02-07 2018-09-04 北京大学深圳研究生院 一种联盟区块链共识方法
JP2019029019A (ja) * 2017-07-28 2019-02-21 株式会社日立製作所 複数のシステムからのデータのブロックチェーンロギング

Family Cites Families (59)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6728958B1 (en) 1998-07-31 2004-04-27 Hewlett-Packard Development Company, L.P. Volatile resource manager with pre-prepare notification
US6928577B2 (en) * 2002-07-29 2005-08-09 Eternal Systems, Inc. Consistent message ordering for semi-active and passive replication
US7454521B2 (en) * 2003-10-23 2008-11-18 Microsoft Corporation Byzantine fault quantifying clock synchronization
US8868504B2 (en) 2007-03-07 2014-10-21 Oracle International Corporation Database system with active standby and nodes
US8943271B2 (en) 2008-06-12 2015-01-27 Microsoft Corporation Distributed cache arrangement
US9455992B2 (en) 2009-06-12 2016-09-27 Microsoft Technology Licensing, Llc Trusted hardware component for distributed systems
US8856593B2 (en) 2010-04-12 2014-10-07 Sandisk Enterprise Ip Llc Failure recovery using consensus replication in a distributed flash memory system
US8549142B2 (en) 2011-03-28 2013-10-01 Siemens Corporation Replicated state machine utilizing view change protocol resilient to performance attacks
US20130138614A1 (en) 2011-11-30 2013-05-30 Mark Travis Two-phase data locking transaction processing with distributed partitions and mirroring
US9450852B1 (en) * 2014-01-03 2016-09-20 Juniper Networks, Inc. Systems and methods for preventing split-brain scenarios in high-availability clusters
US9251017B2 (en) 2014-03-25 2016-02-02 International Business Machines Corporation Handling failed cluster members when replicating a database between clusters
WO2016024986A1 (en) 2014-08-15 2016-02-18 Hewlett-Packard Development Company, L.P. Three phase commit for a distributed file system
US9720789B2 (en) * 2014-10-15 2017-08-01 Netapp, Inc. Multicast transport configuration
US10304143B2 (en) 2016-05-05 2019-05-28 Lance Timothy Kasper Consensus system for manipulation resistant digital record keeping
EP3317775B1 (en) 2015-07-02 2022-02-16 Nasdaq, Inc. Systems and methods of secure provenance for distributed transaction databases
US10812582B2 (en) * 2016-03-10 2020-10-20 Vmware, Inc. Management of applications across nodes using exo-clones
US10198325B2 (en) 2016-05-24 2019-02-05 Mastercard International Incorporated Method and system for desynchronization recovery for permissioned blockchains using bloom filters
US10204341B2 (en) 2016-05-24 2019-02-12 Mastercard International Incorporated Method and system for an efficient consensus mechanism for permissioned blockchains using bloom filters and audit guarantees
WO2017186317A1 (en) 2016-10-04 2017-11-02 Nec Europe Ltd. Method and system for byzantine fault-tolerance replicating of data on a plurality of servers
US10158527B2 (en) 2016-10-28 2018-12-18 International Business Machines Corporation Changing an existing blockchain trust configuration
JP6968166B2 (ja) 2016-11-25 2021-11-17 エヌイーシー ラボラトリーズ ヨーロッパ ゲーエムベーハー データをビザンチン障害耐性複製する方法及びシステム
US11954697B2 (en) 2017-02-27 2024-04-09 Ncr Corporation Blockchain consumer ledger
CN106789095B (zh) 2017-03-30 2020-12-08 腾讯科技(深圳)有限公司 分布式系统及消息处理方法
US20180285217A1 (en) 2017-03-31 2018-10-04 Intel Corporation Failover response using a known good state from a distributed ledger
WO2018194368A1 (en) 2017-04-18 2018-10-25 Samsung Electronics Co., Ltd. Method and apparatus for access control in distributed blockchain-based internet of things (iot) network
US20180308091A1 (en) 2017-04-21 2018-10-25 Vmware, Inc. Fairness preserving byzantine agreements
US11626993B2 (en) 2017-05-22 2023-04-11 Visa International Service Association Network for improved verification speed with tamper resistant data
US10740733B2 (en) 2017-05-25 2020-08-11 Oracle International Corporaton Sharded permissioned distributed ledgers
US11055703B2 (en) 2017-06-19 2021-07-06 Hitachi, Ltd. Smart contract lifecycle management
CN107301600B (zh) 2017-06-23 2021-07-20 北京天德科技有限公司 一种跨链交易的区块链互联网模型的核心构建方法
CN107248076A (zh) 2017-06-24 2017-10-13 北京天德科技有限公司 一种双链式跨链交易的区块链互联网模型的核心算法
EP3649558B8 (en) 2017-07-06 2024-04-17 Chromaway AB Method and system for a distributed computing system
US10984134B2 (en) * 2017-07-14 2021-04-20 Microsoft Technology Licensing, Llc Blockchain system for leveraging member nodes to achieve consensus
CN107528882B (zh) * 2017-07-14 2020-12-25 创新先进技术有限公司 区块链共识网络中处理共识请求的方法、装置和电子设备
CN107423426B (zh) 2017-08-02 2020-06-02 众安信息技术服务有限公司 一种区块链块数据的数据归档方法及电子设备
US10735203B2 (en) 2017-10-09 2020-08-04 Cisco Technology, Inc. Sharing network security threat information using a blockchain network
US10832241B2 (en) 2017-10-11 2020-11-10 International Business Machines Corporation Transaction reservation for block space on a blockchain
CN107819749A (zh) 2017-10-26 2018-03-20 平安科技(深圳)有限公司 基于以太坊的区块链系统和交易数据处理方法
CA3078476C (en) 2017-10-31 2022-10-18 Ab Initio Technology Llc Managing a computing cluster using durability level indicators
US10572352B2 (en) 2017-11-01 2020-02-25 Vmware, Inc. Byzantine fault tolerance with verifiable secret sharing at constant overhead
US10735450B2 (en) 2017-11-30 2020-08-04 Intel Corporation Trust topology selection for distributed transaction processing in computing environments
US11055419B2 (en) 2017-12-01 2021-07-06 Alan Health and Science Decentralized data authentication system for creation of integrated lifetime health records
US11243945B2 (en) 2017-12-11 2022-02-08 International Business Machines Corporation Distributed database having blockchain attributes
US11139979B2 (en) * 2017-12-18 2021-10-05 Koninklijke Kpn N.V. Primary and secondary blockchain device
CN108108967B (zh) 2017-12-29 2020-10-16 山大地纬软件股份有限公司 面向复杂数字资产的多阶段pbft共识系统及方法
CN108134706B (zh) 2018-01-02 2020-08-18 中国工商银行股份有限公司 区块链多活高可用系统、计算机设备以及方法
CN108108487B (zh) 2018-01-10 2019-11-22 杭州复杂美科技有限公司 一种区块链的共识方法
EP3522064B1 (en) * 2018-02-02 2021-12-22 Università Degli Studi Di Trento A method and apparatus for distributed, privacy-preserving and integrity-preserving exchange, inventory and order book
US20190251573A1 (en) 2018-02-09 2019-08-15 Airbus (S.A.S.) Systems and methods of verifying credentials of aircraft personnel using a blockchain computer system
TWI659373B (zh) 2018-02-14 2019-05-11 財團法人工業技術研究院 區塊鏈系統及應用其的方法
CN108616596B (zh) 2018-05-09 2020-12-25 南京邮电大学 基于动态授权和网络环境感知的区块链自适应共识方法
US10671315B2 (en) * 2018-08-17 2020-06-02 Bank Of America Corporation Blockchain architecture for selective data restore and migration
CN109345386B (zh) 2018-08-31 2020-04-14 阿里巴巴集团控股有限公司 基于区块链的交易共识处理方法及装置、电子设备
CN109347804B (zh) 2018-09-19 2020-02-07 电子科技大学 一种用于区块链的拜占庭容错共识优化方法
CN109472593A (zh) * 2018-10-10 2019-03-15 远光软件股份有限公司 一种基于区块链技术的结算方法、装置及区块链网络
CN111045855B (zh) * 2018-10-12 2024-01-26 伊姆西Ip控股有限责任公司 备份数据的方法、装置和计算机程序产品
CN109327459B (zh) 2018-11-12 2020-12-01 崔晓晖 一种联盟区块链网络的共识方法
CN109447810B (zh) * 2018-11-29 2021-03-09 杭州秘猿科技有限公司 并行区块链共识方法、系统、电子设备和计算机可读存储介质
SG11201907346UA (en) 2018-12-13 2019-09-27 Alibaba Group Holding Ltd Performing a change of primary node in a distributed system

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6671821B1 (en) * 1999-11-22 2003-12-30 Massachusetts Institute Of Technology Byzantine fault tolerance
JP2015146165A (ja) * 2014-02-04 2015-08-13 日本電信電話株式会社 障害耐性信号処理装置および障害耐性信号処理方法
JP2019029019A (ja) * 2017-07-28 2019-02-21 株式会社日立製作所 複数のシステムからのデータのブロックチェーンロギング
CN108492103A (zh) * 2018-02-07 2018-09-04 北京大学深圳研究生院 一种联盟区块链共识方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
MIGUEL CASTRO ET AL.: "Practical Byzantine Fault Tolerance and Proactive Recovery", ACM TRANSACTIONS ON COMPUTER SYSTEMS, vol. 20, no. 4, JPN7020003767, November 2002 (2002-11-01), pages 398 - 461, XP058290927, ISSN: 0004393928, DOI: 10.1145/571637.571640 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2022547013A (ja) * 2019-10-10 2022-11-10 杭州趣鏈科技有限公司 Pbftアルゴリズムに基づいて改善された単一ノードの異常能動的回復方法、システム、設備および媒体
JP7367191B2 (ja) 2019-10-10 2023-10-23 杭州趣鏈科技有限公司 Pbftアルゴリズムに基づいて改善された単一ノードの異常能動的回復方法、システム、設備および媒体
US11841778B2 (en) 2019-10-10 2023-12-12 Hangzhou Qulian Technology Co., Ltd. Method and system for active failure recovery of single node improved based on PBFT algorithm, computer device and storage medium

Also Published As

Publication number Publication date
CN110870288A (zh) 2020-03-06
US10922195B2 (en) 2021-02-16
WO2019101245A3 (en) 2020-01-16
EP3607733A4 (en) 2020-05-27
KR20200112633A (ko) 2020-10-05
SG11201908387SA (en) 2019-10-30
EP3607733B1 (en) 2022-02-09
AU2019203865A1 (en) 2019-05-31
KR102365793B1 (ko) 2022-02-21
US20200125456A1 (en) 2020-04-23
CN110870288B (zh) 2022-05-27
US20200004643A1 (en) 2020-01-02
EP3607733A2 (en) 2020-02-12
US11347598B2 (en) 2022-05-31
AU2019203865B2 (en) 2021-01-21
TW202037138A (zh) 2020-10-01
TWI724678B (zh) 2021-04-11
JP6880227B2 (ja) 2021-06-02
WO2019101245A2 (en) 2019-05-31

Similar Documents

Publication Publication Date Title
JP6880227B2 (ja) 合意システムのダウンタイムの回復
JP6731123B1 (ja) 合意システムのダウンタイムの回復
CN111630826B (zh) 共识系统和方法
JP6882527B2 (ja) ビュー変更プロトコルを終了するためのシステムおよび方法
JP6923674B2 (ja) ビュー変更プロトコルを終了するためのシステムおよび方法
US10938750B2 (en) Consensus system downtime recovery
AU2019101612A4 (en) Consensus system downtime recovery
AU2019101610A4 (en) Consensus system downtime recovery

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20191106

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20201014

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20201030

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20201201

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210301

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20210330

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210430

R150 Certificate of patent or registration of utility model

Ref document number: 6880227

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250