(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-05-20
(45)【発行日】2022-05-30
(54)【発明の名称】ブロックの分割によりスループットを改善したブロックチェーンシステム及びコンピュータープログラム
(51)【国際特許分類】
G06F 21/64 20130101AFI20220523BHJP
H04L 9/32 20060101ALI20220523BHJP
G06Q 20/38 20120101ALI20220523BHJP
G06Q 20/06 20120101ALN20220523BHJP
【FI】
G06F21/64
H04L9/32 200Z
G06Q20/38 310
G06Q20/06
(21)【出願番号】P 2022012478
(22)【出願日】2022-01-29
【審査請求日】2022-01-29
【早期審査対象出願】
(73)【特許権者】
【識別番号】520291065
【氏名又は名称】柴田 直樹
(74)【代理人】
【識別番号】100196391
【氏名又は名称】萩森 学
(72)【発明者】
【氏名】柴田 直樹
【審査官】岸野 徹
(56)【参考文献】
【文献】特開2020-188503(JP,A)
【文献】特表2019-528590(JP,A)
【文献】米国特許出願公開第2020/0396065(US,A1)
【文献】米国特許出願公開第2020/0013027(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 21/64
H04L 9/32
G06Q 20/38
G06Q 20/06
(57)【特許請求の範囲】
【請求項1】
ピアツーピアネットワークに参加するノードにより運営されるブロックチェーンシステムであって,ブロックチェーンにマイナーが追加したブロックに含まれる取引データ全ての受信を別のマイナーが完了する前に該ブロックの次のブロックに含める取引全ての取引データを該別のマイナーが決定した上で,該受信の完了前に該次のブロックを該別のマイナーがマイニングする手段を備えることを特徴とするブロックチェーンシステム。
【請求項2】
請求項1 に記載のブロックチェーンシステムであって,取引データの欠落した不完全なブロックを含む不完全なブロックチェーンをマイナーが保持する手段を備え,該不完全なブロックチェーンに新しく追加するブロックのナンスを該マイナーが見つけた後にダウンロードの完了した取引データと,該マイナーの保持する該不完全なブロックチェーンに含まれる該不完全なブロックを組み合わせて得られるブロックを該マイナーが検証する手段を備えることを特徴とするブロックチェーンシステム。
【請求項3】
請求項2に記載のブロックチェーンシステムであって,完全なブロックチェーンと上記の不完全なブロックチェーンを保持する手段
と、該システムにより定められた適合度関数をマイナーが備え,該完全なブロックチェーンと該不完全なブロックチェーンのそれぞれ
について、該マイナーがその適合度を該適合度関数を用いて評価し、適合度が最も大きい値であるブロックチェーンを対象にマイニングを行う手段を該マイナーが備え
,該適合度関数は引数として与えられた完全なブロックチェーンまたは不完全なブロックチェーンが将来的に最も速く伸びることがより期待できる場合により大きな値を取ることを特徴とするブロックチェーンシステム。
【請求項4】
請求項2に記載のブロックチェーンシステムであって,完全なブロックチェーンと上記の不完全なブロックチェーンを保持する手段をマイナーが備え,マイナーは保持するブロックチェーンに含まれるブロックの個数を計数する手段を備え,該完全なブロックチェーンと該不完全なブロックチェーンのそれぞれに含まれるブロックの個数を計数し,その中で最もブロックの個数の多いブロックチェーンを対象にマイニングを行う手段を該マイナーが備えることを特徴とするブロックチェーンシステム。
【請求項5】
請求項3
または請求項4に記載のブロックチェーンシステムであって,マイナーがブロックをブロックチェーンに追加する際に,該ブロックを追加することで追加する前の状態から状態の変化する可能性のあるアカウントの集合を該マイナーが求め,得られた集合を表すデータを該ブロックに該マイナーが含める手段を備え,該集合に含まれるアカウントのいずれかの状態を変化させる可能性のある取引の取引データを含まないように別のマイナーが該ブロックの次のブロックを構成した上でマイニングする手段を備えることを特徴とするブロックチェーンシステム。
【請求項6】
請求項3
または請求項4に記載のブロックチェーンシステムであって,ブロックチェーンにマイナーが追加したブロックに含まれる取引データ全ての受信を別のマイナーが完了する前に該ブロックの次のブロックに取引データを一切含まずに該別のマイナーが該次のブロックをマイニングする手段を備えることを特徴とするブロックチェーンシステム。
【請求項7】
請求項3
または請求項4に記載のブロックチェーンシステムであって,マイナーがブロックをブロックチェーンに追加する際に,該ブロックに含まれる取引データの集合を該マイナーが求め,得られた集合を表すデータを該ブロックに該マイナーが含める手段を備え,該集合に含まれる取引データを含まないように別のマイナーが該ブロックの次のブロックを構成した上でマイニングする手段を備え,実行できない取引データを含むブロックをブロックチェーンに追加する手段を備え,ユーザのアカウントの最新状態は,アカウントの初期状態から,ブロックチェーンに記録された取引データの表す取引のうち,実行できない取引を除く取引を順に全て実行した結果であることを特徴とするブロックチェーンシステム。
【請求項8】
請求項1ないし
7のいずれか1項に記載のブロックチェーンシステムを実現するためのコンピュータープログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は,ブロックチェーンシステムにおいて単位時間あたりに処理できる取引の数を増やすための,ブロックの構成方法,ブロック内に格納する情報,そのような構成のブロックの特性を利用してマイニングを行う手法を取り入れたブロックチェーンシステムおよびそれによって実現される暗号資産に関する。
【背景技術】
【0002】
ビットコイン(非特許文献1)の登場以来、ブロックチェーンを利用した暗号資産が多数開発されてきた。暗号資産を用いた取引は年々増加しており,暗号資産の時価総額は2021年初頭に1兆ドルを突破した。ブロックチェーンとはリスト構造のデータであり、データを次々と新たに追加することができ、過去に登録されたデータの修正が困難となるように設計されている。暗号資産における全ての取引の履歴はこのブロックチェーンに保存される。ビットコインは,完全分散型の暗号資産であり,中央銀行など特定のノードを必要とせず,ユーザ間でコインの受け渡しを行うことができる。取引の履歴は,分散型台帳に記録される。プルーフオブワーク(PoW)と呼ばれる仕組みにより,台帳に記録される取引の正しい結果を決めており、コインの二重使用等を防いでいる。ネットワークにおいては多数のIPアドレスを確保するのが容易であり、各IPアドレスに対して投票権の与えられる多数決はうまく機能しない。PoW は、このような環境において計算量の多寡に応じて投票権の与えられる多数決を実現するのに使用される。ビットコインの分散型台帳は,多数のブロックをリンクトリストとして保存する。このリンクトリストをブロックチェーンと呼ぶ。各ブロックは、複数のアイテムと、一つ前のブロックのハッシュ値を含む。アイテムの一部は取引データであり,暗号資産の取引を表す。ブロックチェーンを利用して暗号資産の取引を行うユーザは,事前にブロックチェーン上にアカウントを作成する。アカウントは銀行口座に相当し,各ユーザがブロックチェーン上で所有する暗号資産を管理するためのブロックチェーン上に記録されたデータを指す。取引を行おうとするユーザは取引内容を表す取引データをネットワークにブロードキャストし,矛盾なく実行可能である取引データがブロックチェーンに受理され記録される。ここで,ブロードキャストとは,ネットワークに接続された全てのコンピュータに情報が行き渡るように情報を伝えることを指す。各ユーザのアカウントの最新状態は,アカウントの初期状態から,ブロックチェーンに含まれる各ブロックに記録された取引データの表す取引を順に全て実行した結果として定義される。各ブロックにはナンスと呼ばれる整数値を格納するエントリが用意されており、ブロックのハッシュ値が決められた数のゼロビットで始まるナンスを持ち,かつブロックに含まれた取引が全て矛盾なく実行可能であるようなブロックのみが有効なブロックとして受理される。ブロックに含まれた各取引が矛盾なく実行可能であることを確かめることを検証と呼ぶ。PoWでは、ユーザによりブロードキャストされた取引データをネットワークに参加するノードが集め,検証に成功した取引データを含んだ新しいブロックを構成し,新しいブロックのハッシュ値が決められた数のゼロビットで始まるようなナンスを探す。ネットワークに接続されたコンピュータ(以下これをノードと言う)がそのようなナンスを見つけると,見つけたナンスを含む新しいブロックをネットワーク上にブロードキャストし,このブロックを受信した他のノードは,このブロックを検証し,それに成功するとこのブロックの後に新しいブロックを追加しようとする。ネットワークを維持するために、新しいブロックを追加することに成功したノードにインセンティブとして新しいコインが授与される。ブロックを追加しようとするノードのことをマイナーと呼ぶ。ブロックチェーンに新たなブロックを追加するために,新たなブロックのハッシュ値が決められた数のゼロビットで始まるナンスを探すことを,ブロックのマイニングと呼ぶ。善意のマイナーは、そのノードの知る限り最も長いブロックチェーンにブロックを追加しようとする。大半のCPU 資源が、善意のマイナーによりブロックの追加に使用される限り、正しい取引を記録したブロックチェーンが最も速く伸びる。計算量に応じて投票権の与えられる多数決はこのようにして実現される。このような仕組みにより,分散型台帳に記録された情報の偽造や改ざんは困難であり,偽造などの攻撃を行おうとする悪意のあるノードのCPU資源が善良なノードの持つCPU資源を上回らない限り,攻撃は成功しない。
【0003】
完全分散型のブロックチェーンは,信頼できる第三者を必要としないこと,透明性,匿名性,運営が民主的であること,運営が自動的に行われること,強固なセキュリティといった数々の良い性質を備えている一方で,スケーラビリティの低さ,すなわちそれほど多くの取引を処理できるわけではないことが,ブロックチェーンを実際のビジネスに活用しようとする上での障壁の一つとなっている。ブロックチェーンのスケーラビリティを制限している3つの要因として,スループット,ストレージ,ネットワークが挙げられる。ビットコインのスループット,すなわち単位時間に処理できる取引の数は,おおよそ一秒あたり7取引に制限されており,これは,VISAシステムが一秒あたり2000の取引を処理できるのと比べると大幅に少ない。また,おおもとのビットコインにおいては,現在までブロックチェーン上で行われた取引全ての履歴を各マイナーが保持することを仮定しており,この莫大な量のデータを保持できるストレージを備えたコンピュータは現実的には限られる。ビットコインにおいては,各ブロックにおいて処理される取引データは,ネットワークに二回ブロードキャストされる。一回目のブロードキャストは,ユーザノードが暗号資産の取引を行う際そのユーザノードが行い,二回目のブロードキャストは,新たなブロックがブロックチェーンに追加されるとき,マイナーがブロードキャストする新たなブロックに取引データが含まれる形で行われる。これがネットワークの帯域を圧迫し,またブロックの伝播遅延を増大させる原因の一つとなっている。また,ブロックチェーンには,分散性,スケーラビリティ,セキュリティの間のトリレンマが存在し,すなわち,これらの3 つの要素のうち一つを改善しようとすると,残り二つを犠牲にせざるを得ないとも言われている(非特許文献2,3)。
【0004】
ブロックチェーンのスループットは,ブロック時間,すなわちブロックの生成間隔と,ブロックのデータサイズに深く関連している。ブロックのデータサイズが大きいほど一つのブロックに格納できる取引データの数は増えるが,ブロックのデータサイズを大きくすることでスループットを改善しようという試みには,次の課題がある。ビットコインにおいては,一つの取引をブロックチェーンに記録するためのデータサイズはおよそ250バイトである。ブロック時間が10分の場合に,一秒あたり1000取引のスループットを達成しようとすると,ブロックのサイズは250×1000×60×10=150Mバイトとなる。このサイズのブロックを新しいブロックが追加された直後に,全マイナーに対してブロードキャストする必要がある。PoWにおいては,新しいブロックの追加後,直ちに一斉に全マイナーが新しいブロックのマイニングを開始すると仮定しているが,新しいブロックの伝播時間がかかると,ブロックチェーンのフォーク,すなわち孤立ブロックまたはオーファンブロックと呼ばれる正しいナンスを持つにもかかわらず最長のブロックチェーンに含まれないブロックの発生確率が増え,またネットワーク帯域の細いマイナーがマイニングを始められるまでには時間がかかることで,マイナー間の不公平が生じる。実質的には,高速なネットワークで密に結合したマイナー群が,その他のマイナーに比べて有利になり,ブロックチェーンの分散性が損なわれる。ブロックのデータサイズを変更せずにブロック時間を短くすることでスループットを改善しようという試みに対しても,同じ問題が生じる(非特許文献2,4)。
【0005】
ブルームフィルタは,データアイテムの集合を表現することのできる確率的データ構造である(非特許文献5)。各データアイテムに対してハッシュ値が計算できる必要がある。ブルームフィルタのサイズはあらかじめ設定したパラメータで決まる。空集合を表すブルームフィルタは,全てゼロのビットからなる。ブルームフィルタに対し,新たにデータアイテムを集合に追加する操作と,あるデータアイテムが集合に含まれているかを問い合わせる操作が定義されている。ここで,あるデータアイテムが集合に含まれているかを問い合わせる操作に対する答えには偽陽性が存在し,すなわち,あるデータアイテムが集合に含まれていないと判定された場合は必ず含まれていないが,含まれていると判定されても,実際には含まれていない場合がある。この偽陽性と引き換えに,ブルームフィルタのデータサイズを非常に小さくすることができる。ブルームフィルタのパラメータとして,ビット長m,ハッシュ関数の個数kがある。ブルームフィルタはmビットのデータである。k個のハッシュ関数は,データアイテムを入力とし,それぞれ0以上m未満の整数値を返す。空集合を表すブルームフィルタは,m個のゼロビットからなる。集合に要素を追加するには,その要素のk個のハッシュ関数値を得て,それらの関数値の位置のビットを1にする。ある要素がその集合に含まれるか問い合わせるには,その要素のk個のハッシュ関数値を得て,それらの関数値の位置のビットが全て1かどうか調べる。それらのビットのうちいずれかが0であれば,要素は集合に含まれない。全て1である場合は,要素が集合に含まれる場合と含まれない場合(偽陽性)がある。要素が集合に含まれないにもかかわらず,これらのビットが全て1になる確率(偽陽性発生率)は,集合に含まれる要素の数に応じてブルームフィルタのパラメータを適切に設定することにより,調整することが可能である。
【0006】
Proof-of-Search(以下PoS)は,PoWを拡張したもので,有効なナンスを見つけるための計算資源を最適化問題の解探索のために使うことができる(特許文献1,非特許文献6)。PoSにおいては,最適化問題の解候補とその解候補の評点を結合したものをナンスとして用いる。また,ブロックの間に複数のミニブロックを設け、各ミニブロックが一つのナンスを含む。PoWの代わりにPoSを本願発明と併用する方法について後述する。
【0007】
Compact Block Relay (BIP152)は,新しくブロックチェーンに追加されたブロックをネットワークに伝播させる際の遅延を少なくするための手法である(非特許文献7,8)。ブロックチェーンにおいては,ユーザノードが暗号資産の取引を行う際,まずそのユーザノードが取引データをネットワーク全体にブロードキャストする。この取引データは,各マイナーが受信し,アイテムとして新しく追加されるブロックに取り込み,このブロックがブロックチェーンに追加される際にマイナーがブロックの一部としてもう一度ネットワーク全体にブロードキャストする。従って,各マイナーは,ブロックが新しくブロックチェーンに追加された時点においてすでにブロックに含まれる取引データの大部分を受信している。Compact Block Relayでは,新しく追加されたブロックがネットワーク全体にブロードキャストされる時点で,ブロック全体を中継する前に,ブロック内の取引データそれぞれのハッシュ値を中継先マイナーに送信する。これをもとに,中継先のマイナーは完全なブロックを,自身がすでにユーザノードから受信して保持している取引データから再構築する。ブロック内に,中継先マイナーが保持していない取引データが含まれている場合は,そのデータを中継元マイナーにリクエストする。Xtreme Thinblocks (非特許文献9)は,Compact Block Relay を拡張した手法であり,取引データのIDの伝播の際にブルームフィルタを利用することで,データサイズをさらに小さくする。これらの手法は,ブロックを伝播させるために各ノードがブロックを中継する際に,ブロックの完全な情報の受信を完了させることを前提としており,この条件が満たされない場合は,データを改めて受信する必要が生じる。その際送受信ノード間でデータを双方向にやりとりする必要があり,ネットワークのレイテンシのための伝播遅延時間の増大が生じる。これは,ブロック中の取引の数が増えるとより顕著になる。本願発明では,ブロックの伝播の際に中継元から中継先への一方向の通信を行うだけで良いので,通信路のレイテンシの影響が少なく,双方向の通信が必要となるCompact Block Relay と比べて優位性がある。本願発明とCompactBlock Relay の対比については後述する。Compact Block Relay と本願発明は併用することが可能である。
【0008】
ビットコインのスループットを向上させるため,Segregated WitnessまたはSegWitと呼ばれる技術が開発され,ビットコインに採用されている。これは,ブロック中に占める電子署名のデータをブロックから分離する手法である(非特許文献10)。電子署名のデータがブロックからなくなった分,より多くの取引をブロックに格納することが可能になる。この手法は,本願発明と独立しており,本願発明と併用することが可能である。
【0009】
ブロックチェーンのスループットを向上させるため,オフチェーントランザクションが利用される。これは,複数の取引をまとめ,それらの最終的な結果のみをブロックチェーンに登録することで,途中のやりとりのデータを省略する方法である。この手法は,本願発明と独立しており,本願発明と併用することが可能である。
【0010】
シャーディングは,ブロックチェーンを複数に分割し,それぞれがトランザクションを処理する仕組みであり,複数のブロックチェーンが並列にトランザクションを処理することで,スループットが向上する(非特許文献11)。この手法は,本願発明と独立しており,本願発明と併用することが可能である。
【先行技術文献】
【特許文献】
【0011】
【非特許文献】
【0012】
【文献】Nakamoto, S.: Bitcoin: A Peer-to-Peer Electronic Cash System (2008) .
【文献】Xie, Junfeng, F. Richard Yu, Tao Huang, Renchao Xie, Jiang Liu, and Yunjie Liu. "A survey on the scalability of blockchain systems." IEEE Network 33, no. 5, 2019., pp. 166-173.
【文献】The Scalability Trilemma in Blockchain, [Online] https://medium.com/@aakash_13214/thescalability-trilemmain-blockchain-75fb57f646df
【文献】Kenny L. : The Blockchain Scalability Problem and the Race for Visa-Like Transaction Speed,[Online] https://towardsdatascience.com/the-blockchain-scalability-problem-the-race-for-visa-liketransaction-speed-5cce48f9d44
【文献】Broder, Andrei; Mitzenmacher, Michael, "Network Applications of Bloom Filters: A Survey," Internet Mathematics 1 (4): 485-509, doi:10.1080/15427951.2004.10129096
【文献】N. Shibata, "Proof-of-Search: Combining Blockchain Consensus Formation With Solving Optimization Problems," in IEEE Access, vol. 7, pp. 172994-173006, 2019, doi:10.1109/ACCESS.2019.2956698
【文献】Compact Blocks FAQ, [Online] https://bitcoincore.org/en/2016/06/07/compact-blocks-faq/
【文献】https://en.bitcoin.it/wiki/BIP_0152
【文献】Xtreme Thinblocks, [Online] https://bitco.in/forum/threads/buip010-passed-xtremethinblocks.774/
【文献】[Online] https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki
【文献】Dang, Hung, Tien Tuan Anh Dinh, Dumitrel Loghin, Ee-Chien Chang, Qian Lin, and Beng Chin Ooi : "Towards scaling blockchain systems via sharding." In Proceedings of the 2019 international conference on management of data, pp. 123-140. 2019.
【発明の概要】
【発明が解決しようとする課題】
【0013】
本願発明は,ブロックのデータサイズの増大に伴うブロックの伝播遅延から生ずる,孤立ブロックの発生およびマイナー間の不公平を低減し,その結果ブロックチェーンが単位時間あたりに処理できる取引の数を増やすことを目的とする。
【課題を解決するための手段】
【0014】
ブロックチェーンにおける孤立ブロックは,あるマイナーが新しいブロックを追加するためにブロックのハッシュ値が要求された数のゼロビットから始まるようなナンスを見つけ,そのナンスを含む新たなブロックをブロードキャストし,それがネットワーク全体に伝播する前に,別のマイナーがそのようなナンスを見つけてそのナンスを含む新たなブロックをブロードキャストした場合に発生する。この場合,最も長いブロックチェーンがネットワークに二つまたはそれ以上存在することになり,マイナーによってマイニングの対象とするブロックチェーンが異なる状況が発生する。これをブロックチェーンのフォークと呼ぶ。この後にあるマイナーがいずれかのブロックチェーンに対してブロックを追加すると,全マイナーが一斉にマイニングの対象とするブロックチェーンをブロックが追加された方のブロックチェーンに変更する。この結果,ブロックを追加されなかったもう一方のブロックチェーンの最終ブロックは孤立ブロックとなる。孤立ブロックの発生を抑えるためには,あるマイナーが新たに追加しようとしているブロックのハッシュ値が要求された数のゼロビットから始まるようなナンスを見つけてから,できるだけ早く全マイナーがそのブロックの次のブロックのマイニングを開始できるようにする必要がある。
【0015】
以降,ブロックチェーンのt番目のブロックをブロックtと表記する。ブロックtがブロックチェーンに追加された後マイナーがブロックt+1のマイニングを始めるが,ブロックt+1に含めて良いアイテムはブロックtに含まれるアイテムを全て実行した後に(コインの二重使用などの)矛盾なく実行できるアイテムのみである。以下、ブロックに含まれないアイテムがブロックに含まれるアイテムにより取引結果が影響を受けることを「アイテムが干渉する」と言う。ブロックtまでに含まれてないアイテムのうち,ブロックtに含まれるアイテムに干渉するアイテムが分かれば,それらとは干渉しないアイテムのみをブロックt+1に含めてブロックt+1のマイニングを始めることができる。ビットコインではブロックtに含まれるアイテムの検証に成功した後ブロックt+1のマイニングを始める。ブロックtの検証はブロックtに含まれるアイテムの受信が完了した後に行う必要があるが、この検証は、原理的にはブロックt+1のマイニングはこの検証が完了する前に開始しても良い。
【0016】
本願発明ではブロックはA部とB部が含まれるように構成される。ブロックに含まれるアイテムはB部に格納する。ブロックtのA部は,ビットコインにおけるブロックヘッダに相当し,ブロックt-1のA部のハッシュ値,ブロックtのB部のハッシュ値を含む。ブロックのA部のハッシュ値がシステムによって決められた性質Pを満たし,ブロックに含まれたアイテムが矛盾なく実行可能であるようなブロックのみが,有効なブロックとしてブロックチェーンに受理される。但し,アイテムはA部に含まれても良い。ブロックがブロックチェーンに受理されるためには、該ブロックのA部のハッシュ値がシステムによって決められた性質Pを満たしていることが条件となる。性質Pは、ビットコインのPoWにおいてはハッシュ値が決められた数のゼロビットで始まることとしているが,より一般的にはハッシュ値の取り得る値全ての集合の決められた部分集合に与えられたハッシュ値が含まれるという性質である。
【0017】
本願発明では,新しいブロックの追加時にブロックをブロードキャストする際には,A部をB部に対して優先的にブロードキャストする。また、マイナーはブロックtのA部を受信後ブロックtに含まれたアイテムと干渉するアイテムを含まないようにブロックt+1を構成し,ブロックt+1に対するマイニングを始める。ブロックtに含まれたアイテムと干渉するアイテムを含まないようにブロックt+1を構成する方法については後述する。マイナーが保持するブロックチェーンはB部のダウンロードが完了していない不完全なブロックを含む不完全なブロックチェーンである。以下,不完全なブロックチェーンと完全なブロックチェーンをまとめてチェーンと呼ぶ。マイニングによって新たなブロックのA部のハッシュ値が性質Pを満たすようなナンスを見つけた場合には,このナンスを含む新たなブロックをチェーンに追加し,新しいブロックのA部,次いで残りの部分をブロードキャストする。マイニングの途中にブロックのA部を受信した場合,これをチェーンに矛盾無く追加できる場合には追加する。ブロックのB部を受信した場合は,既に保持している,受信したB部に対応するブロックのA部と組み合わせて得られるブロックを検証し,成功すればチェーンに追加する。
【0018】
欠落したB部のダウンロードは将来的に完了する保証がないため,B部の欠落した不完全なブロックを含む不完全なブロックチェーンに対して新たなブロックのA部のハッシュ値が性質Pを満たすようなナンスを見つけたとしても,そのチェーンに対してマイニングを継続するのが良いとは限らない。また,ブロックtのアイテムの受信を完了する前にブロックt+1のマイニングが始まるため,ブロックtのアイテムの検証をブロックt+1 のマイニングが始まった後に行う必要があるが,場合によってはブロックt+1のA部のハッシュ値が性質Pを満たすようなナンスを見つけた後にブロックtのアイテムの受信が完了し,この場合にもしブロックtに含まれるアイテムの検証に失敗すると,受信したブロックtとマイニングしたブロックt+1の両方を棄却して新たにブロックtのマイニングからやり直す必要が生じる。このような状況に対応するため,本願発明ではいくつかのブロックチェーンをマイナーが保持し,条件によってマイニングを行うブロックチェーンを切り替える。ビットコインでは,基本的にはマイナーの知る最長のブロックチェーンのみを保持してそのブロックチェーンに対してのみマイニングを行うが,本願発明ではマイナーが知っているチェーンを複数保持できるリストを用意し,マイニングの対象をこの中から選択し,条件により切り替える。
【0019】
マイナーのプログラムの実行が開始された時点で,このリストには最長のブロックチェーンのみが格納されている。新しいブロックのA部のハッシュ値が性質Pを満たすようなナンスを見つけた場合やブロックの一部分の受信を完了した場合,リスト中のチェーンのうち矛盾なく追加できるチェーン全てに対して追加してリストを更新する。受信したブロックの一部を追加できるチェーンを保持していない場合は,そのようなチェーンをダウンロードしてリストに追加する。将来的に最も速く伸びることがより期待できるチェーンに対してより大きな値を取るような適合度を計算する関数を用意して,リストが更新された場合にリスト中のチェーンの適合度をそれぞれ計算して,マイニングの対象を,リストの中で最も適合度が高く,かつマイニングを行う条件を満たすチェーンに切り替える。また,リストが大きくなりすぎないように,ある条件を満たすチェーンをリストから削除する。
【0020】
あるチェーンのマイニングを行う条件としては,例えば,そのチェーンに含まれる全てのブロックのA部を保持しており,また全てのブロックについてハッシュ値が性質Pを満たすようなナンスをそのマイナーが知っており,かつ最後からM個前およびそれ以前の全てのブロックのA部とB部の両方を保持していることとしてもよい (ここでMはシステム全体で規定された0以上の定数)。チェーンの適合度を計算する関数として,チェーンに含まれるブロックの数を適合度としても良い。チェーンの適合度を計算する関数に前述のチェーンのマイニングを行う条件を組み込んで,前述の条件を満たす場合にのみ関数が大きな値を返すようにしても良い。マイナーがチェーンをリストから削除する条件として,保持する最長のチェーンより一定ブロック以上短いこととしてもよい。
【0021】
新しいブロックがブロックチェーンに追加された後,新しいブロックに含まれたアイテム全ての受信を完了する前に,新しいブロックの次のブロックに含めるアイテムを決定した上でマイニングを始める方法として,いくつか考えられる。
【0022】
以降,あるアイテムまたは取引を実行した結果,あるアカウントの状態が変化するとき,もしくは条件に応じて変化する可能性のあるとき,そのアイテムまたは取引がそのアカウントを上書きすると言う。アカウントの状態とは,そのアカウントに関連付けられてブロックチェーン上に登録された情報で,そのアカウントに関連する取引の結果に影響を及ぼしうるものを指し,アカウント開設時のアカウントの状態から,ブロックチェーンに記録された取引データの表す取引を順に全て実行した結果として定義される。アカウントの残高はアカウントの状態に含まれる。また,あるアイテムまたは取引の実行結果があるアカウントの状態に依存するとき,もしくは条件に応じて依存する可能性のあるとき,そのアイテムまたは取引がそのアカウントを参照すると言う。
【0023】
以降,ブロックをブロックチェーンに新たに追加することで発生するアカウントの状態の変化が,該ブロックに含まれるアイテム全ての実行によってのみ引き起こされると仮定する。この場合,ブロックCをブロックチェーンに新たに追加することでブロックCを追加する前の状態から状態の変化する可能性のあるアカウントの集合は,ブロックCに含まれるアイテムがそれぞれ上書きするアカウントの集合全ての和集合として求めることができる。なお,ブロックをブロックチェーンに新たに追加することで発生するアカウントの状態の変化が,該ブロックに含まれるアイテム全ての実行によってのみ引き起こされるわけではないような実装も考えられるが,その場合は,「ブロックをブロックチェーンに新たに追加することで該ブロックを追加する前の状態から状態の変化する可能性のあるアカウントの集合」を実装方法に応じて適切に求めることで対応できる。
【0024】
実施例1の方法‐ブロック中のアイテムにより上書きされるアカウントの集合をブロックに含める方法。
新しく追加されたブロックの受信を完了する前に次のブロックに含めて良いアイテムを決定する方法として,ブロックに含まれるアイテムにより上書きされるアカウントの集合を表すデータをブロックのA部に含める方法を実施例1に示す。この方法では,ブロックtに含まれるアイテムにより上書きされるアカウントの集合を表すデータをブロックtのA部に含めてブロックtのアイテムより先に送信することで,ブロックのA部を受信したマイナーは,このデータにより表されるアカウントのいずれも参照しないアイテムのみをブロックt+1に含めて,ブロックtのB部の受信を完了する前にブロックt+1のマイニングを始められる(
図1)。
【0025】
ブロックに含まれるアイテムにより上書きされるアカウントの集合を表すデータをブロックのA部に含めるのではなく,ブロックとは独立してブロードキャストすることにすると,悪意のあるノードが実際にブロックに格納された情報と対応しない,正しくない集合を表すデータをブロックと共にブロードキャストする可能性が考えられ,これがセキュリティ上の懸念となる。ブロックに集合を表すデータを含めることでこの集合が正しいことをブロックが追加された後で検証することができ,正しくない集合を表すデータが含まれたブロックをブロックチェーンに受理しないようにできる。これにより,悪意のあるノードが正しくない集合を表すデータをブロックに含めた場合にはそのブロックは受理されないため,そのブロックをマイニングすることにより得られたはずのコインが得られないことになり,正しくない集合を表すデータをブロックに含めるために実質的に1 ブロックのマイニングコスト相当のコストを支払う必要が生じる。このようにすれば上記のセキュリティ上の懸念を払拭することができる。
【0026】
ブロックに含まれるアイテムにより上書きされるアカウントの集合を表すデータの正しさは,新しいブロックを検証する際にしか調べる必要が無く,ブロックがブロックチェーンに受理されたことが確定した後には検証する必要がなくなる。
図2に示されるようにブロックを構成することで,この集合を表すデータをブロックチェーンの古いブロックから切り離し,ブロックチェーン全体のデータサイズを小さくできる。
【0027】
PoSにおいては,アイテムは全てブロックに含まれ,ミニブロックはハッシュ値,ノードIDとナンスが含まれている。PoWの代わりにPoSを本願発明と併用する場合,ブロックに含まれたアイテム全てをB部に格納し,ブロックの残りの部分にB部のハッシュ値を含めたものをA部としても良い。この場合,マイナーがブロックをマイニングする際には,B部に格納するアイテムを決定した後,A部をブロードキャストし,ハッシュ値が性質Pを満たすようなナンスを含むミニブロックが全て該ブロックの後に付け加えられた後にB部をブロードキャストしても良い(
図3)。
【0028】
実施例2の方法 - ブロックにアイテムを含めないでマイニングする方法
新しく追加されたブロックの受信を完了する前に次のブロックに含めて良いアイテムを決定する方法として,取引データを格納できるブロックを数ブロックおきに限定する方法がある。例えば,奇数番目のブロックのみに取引データを含め,偶数番目のブロックには取引データを含めることを禁止する方法が考えられる(
図4)。この場合,奇数番目のブロックのA部のハッシュ値が性質Pを満たすようなナンスを見つけたマイナーは,このようなナンスを含むA部をブロードキャストし,次いでB部をブロードキャストする。A部を受信した他のマイナーは,次のブロックには取引データを含めないことが決まっているので,これは取引データとは無関係にマイニングができる。従って,各マイナーはB部の受信の完了を待つことなく偶数番目のブロックのマイニングを行うことができ,偶数番目のブロックをマイニングする時間を,一つ前の奇数番目のブロックのB部を伝播させる時間として使うことができる。この方法には,奇数番目のブロックをマイニングする時間をブロックのB部の伝播に使えない欠点がある。奇数番目のブロックをマイニングする時間を短くすると奇数番目のブロックが孤立ブロックになる可能性が高まる。この方法の実施例を実施例2に示す。この方法にはバリエーションが考えられ,例えば,各マイナーが新しく追加されたブロックのA部の受信を完了した直後にアイテムを全く含まない新しいブロックのマイニングを始め,B部の受信の完了と共に新しいブロックに含めるアイテムを確定してアイテムの含まれるブロックのマイニングを開始する方式も考えられる。後者の方法を採用する場合,マイナーにアイテムを含むブロックのマイニングを促すために,トランザクションフィーを高額にする必要がある。
【0029】
実施例3の方法 - 実行できないアイテムがブロックに含まれるのを許容する方法
上で説明した上記の二つの方法は,いずれもアカウントの残高不足などで実行できないアイテムはブロックチェーンに含めないことを前提としたアプローチであるが,実行できないアイテムもブロックに含め,ブロックに含まれたアイテムのうち実行できないアイテムは無視して,実行できるアイテムのみを実行してアカウントの状態を更新するアプローチも考えられる。ブロックの重複登録を避けるために,ブロックに含まれるアイテムの集合を(アカウントの集合の代わりに)A部に含むようにしてもよい。このアプローチを取る場合,マイナーはブロックtのA部を受信後,ブロックt+1に含めるアイテムを決める際に,それぞれのアイテムがブロックtのA部に格納されたアイテムの集合に含まれるか判定し,含まれるならそのアイテムはブロックt+1に含めないようにして,ブロックt+1を構成する。この後,ブロックt+1に対するマイニングを行う。ブロックt+1に含まれたアイテムの中には,残高不足などの理由で実行できないものが含まれ,各アカウントの最新状態を計算する上で,ブロックチェーンに登録された実行できないアイテムは無視される。この方法におけるブロックの検証は,ブロックに含まれるアイテムの集合を表すデータが正しいか調べることである。この方法ではブロックチェーンに実行できない取引データが含まれるため,ブロックチェーンのサイズが大きくなる欠点がある。この方法の実施例を実施例3に示す。
【0030】
集合を表すデータの表現方法
アカウントやアイテムの集合を表現するためにブルームフィルタを用いても良い。A部に格納する,ブロックtに含まれるアイテムの集合や,アイテムにより上書きされるアカウントの集合をブルームフィルタで表現する場合,偽陽性にどう対応するかが課題になる。あるアカウントが偽陽性によりブロックtに含まれるアイテムに上書きされると判定され,実際にはそのアカウントはブロックtに含まれるアテムのいずれにも上書きされない場合には,そのアカウントを参照するアイテムはブロックt+1には含められない。偽陽性によりブロックt+1に含められなかったアイテムは,特に何もしなくともブロックt+2以降のブロックに含められるため,該当する取引の実行が遅延する以外に問題は起きず,偽陽性に対応するための処理は特段必要ない。偽陽性の発生確率1%,アカウントの集合のサイズが2000×60×10の場合,ブルームフィルタのサイズは約1.5Mバイトであり,毎秒1000 取引の場合のCompact Block Relay (BIP152)のデータ転送量1000×6×60×10 = 3.6Mバイトの半分以下ですむ。
【0031】
アカウント等の集合を、ブルームフィルタを用いて表現する方法以外に,この集合をCuckooフィルタを用いて表現する方法,配列で表現する方法,リンクトリストで表現する方法,ハッシュテーブルで表現する方法等があり,これらのいずれかの方法またはこれらの方法の組み合わせでアカウントの集合を表現しても良い。ブルームフィルタやCuckooフィルタ,配列,リンクトリスト,ハッシュテーブル等のデータ構造のデータにより表現されたアカウントの集合は,レンジコーディングやハフマンコーディング,ゴロムコーディング,ランレングスコーディング等の可逆圧縮を用いてさらに圧縮することが可能であり,可逆圧縮を用いて圧縮したデータによってアカウント等の集合を表現しても良い。
【0032】
また,ブロックt-1およびそれ以前のブロックに含まれた情報から,ブロックtを追加することで状態の変化する可能性のあるアカウントを特定できる場合,これらのアカウントとブロックtのA部に格納されたデータを組み合わせることで,「ブロックtをブロックチェーンに新たに追加することでブロックtを追加する前の状態から状態の変化する可能性のあるアカウントの集合」を表すデータとしても良い。あらかじめブロックチェーン上で定義したアカウントの集合を指すIDを利用してアカウントの集合を表しても良い。
【0033】
Compact Block Relayとの対比
以下,本願発明とCompact Block Relay (BIP152)の対比について述べる。Compact Block Relayでは,新しく追加されるブロックをネットワーク全体にブロードキャストする際に,中継元マイナーから中継先マイナーに取引データそれぞれのハッシュ値を送信する。中継先マイナーは,取引データのほとんどを,最初に取引データをブロードキャストしたユーザノードから受信して既に保持しているので,これらは再度中継元マイナーから受信する必要はなく,このための通信を省略することでネットワークの帯域を節約することができる。しかし,中継先マイナーが保持していない取引データに関しては,取引内容が分からないので,それらの取引が全て完了した後にまだブロックチェーンに取り込まれていない取引データのうちどの取引を矛盾なく実行できるかを特定することはできない。それらを特定するためには,完全な取引データを受信する必要がある。これに対し,実施例1の方法では,新しく追加されるブロックに含まれるアイテムにより上書きされるアカウントの集合を表すデータを送信する。この集合に含まれないアカウントは,新しく追加されるブロックに含まれるアイテムによって状態が更新されることはなく,従ってこれらのアカウントを参照しないアイテムは,新しく追加されるブロックに含まれるアイテムを全て実行した後に矛盾なく実行できることが保証される。本願発明では,ブロックのA部の伝播の際に送信側から受信側への一方向の通信を行うだけで良いので,通信路のレイテンシの影響が少ない。一方,Compact Block Relay では,各マイナーが新しく追加されるブロックをブロードキャストする過程において,追加されるブロックに含まれる取引全ての完全な取引データを受信する必要があり,そのうちの一部を中継先のマイナーが保持していない場合は,中継先のマイナーが中継元のマイナーにリクエストを送信して受信する必要がある。このために中継先のマイナーと中継元のマイナー間で双方向の通信が行われる。このようなケースが発生する可能性は,ブロック中に含まれる取引の数が増えるに従って増大する。これにより,Compact Block Relay は通信路のレイテンシの影響を強く受ける。また,本願発明ではブロックのA部の送信の後,B部の送信を直ちに開始するのではなく少し遅らせることで,この間ネットワークの帯域の大部分をブロックのA部の伝播に利用することができ,従ってブロックのA部の伝播をさらに高速化し,その結果マイナーが早く次のブロックのマイニングを開始することが可能であるが,Compact Block Relay ではこの高速化は利用できず,各マイナーは新しく追加されたブロック中の完全な取引データを全て受信するまで次のブロックのマイニングを開始できない。また,計算上本願発明のほうが送信データ量は少なくできる。Compact Block Relay と本願発明は併用することが可能である。
【0034】
第1の発明に係るブロックチェーンシステムは、ピアツーピアネットワークに参加するノードにより運営されるブロックチェーンシステムであって,ブロックチェーンにマイナーが追加したブロックに含まれる取引データ全ての受信を別のマイナーが完了する前に該ブロックの次のブロックに含める取引全ての取引データを該別のマイナーが決定した上で,該受信の完了前に該次のブロックを該別のマイナーがマイニングする手段を備えることを特徴とするものである。
【0035】
第2の発明に係るブロックチェーンシステムは、第1の発明に係るブロックチェーンシステムであって,取引データの欠落した不完全なブロックを含む不完全なブロックチェーンをマイナーが保持する手段を備え,該不完全なブロックチェーンに新しく追加するブロックのナンスを該マイナーが見つけた後にダウンロードの完了した取引データと,該マイナーの保持する該不完全なブロックチェーンに含まれる該不完全なブロックを組み合わせて得られるブロックを該マイナーが検証する手段を備えることを特徴とするものである。
【0036】
第3の発明に係るブロックチェーンシステムは、第2の発明に係るブロックチェーンシステムであって,完全なブロックチェーンと上記の不完全なブロックチェーンを保持する手段をマイナーが備え,該完全なブロックチェーンと該不完全なブロックチェーンのそれぞれの適合度を評価し,その中で最も適合度の高いものを対象にマイニングを行う手段を該マイナーが備えることを特徴とするブロックチェーンシステムものである。
【0037】
第4の発明に係るブロックチェーンシステムは、第3の発明に係るブロックチェーンシステムであって,マイナーがブロックをブロックチェーンに追加する際に,該ブロックを追加することで追加する前の状態から状態の変化する可能性のあるアカウントの集合を該マイナーが求め,得られた集合を表すデータを該ブロックに該マイナーが含める手段を備え,該集合に含まれるアカウントのいずれかの状態を変化させる可能性のある取引の取引データを含まないように別のマイナーが該ブロックの次のブロックを構成した上でマイニングする手段を備えることを特徴とするものである。
【0038】
第5の発明に係るブロックチェーンシステムは、第3の発明に係るブロックチェーンシステムであって,ブロックチェーンにマイナーが追加したブロックに含まれる取引データ全ての受信を別のマイナーが完了する前に該ブロックの次のブロックに取引データを一切含まずに該別のマイナーが該次のブロックをマイニングする手段を備えることを特徴とするものである。
【0039】
第6の発明に係るブロックチェーンシステムは、第3の発明に係るブロックチェーンシステムであって,マイナーがブロックをブロックチェーンに追加する際に,該ブロックに含まれる取引データの集合を該マイナーが求め,得られた集合を表すデータを該ブロックに該マイナーが含める手段を備え,該集合に含まれる取引データを含まないように別のマイナーが該ブロックの次のブロックを構成した上でマイニングする手段を備え,実行できない取引データを含むブロックをブロックチェーンに追加する手段を備え,ユーザのアカウントの最新状態は,アカウントの初期状態から,ブロックチェーンに記録された取引データの表す取引のうち,実行できない取引を除く取引を順に全て実行した結果であることを特徴とするものである。
【0040】
第7の発明はコンピュータープログラムであって、第1ないし第6の発明のいずれか1に係るブロックチェーンシステムを実現するためのものである。
【発明の効果】
【0041】
本願発明により,ブロックのデータサイズの増大に伴うブロックの伝播遅延から生ずる,孤立ブロックの発生およびマイナー間の不公平が低減し,その結果ブロックチェーンが単位時間あたりに処理できる取引の数を増すことができる。
【図面の簡単な説明】
【0042】
【
図1】実施例1 および実施例3 におけるブロックの構造を示す図である。
【
図2】古いブロックから集合を表すデータを削除するためのブロックの構造を示す図である。
【
図3】Proof-of-Search と本願発明を併用するためのブロックの構造を示す図である。
【
図4】実施例2 におけるブロックの構造を示す図である。
【発明を実施するための形態】
【0043】
つぎに、本発明の実施形態を説明するが、本発明の技術的範囲を逸脱しない範囲において様々な変更や修正が可能であることは言うまでもない。
【実施例1】
【0044】
実施例1のブロックチェーンシステムは、第4の発明の一実施例であり、PoWを利用する完全分散型ブロックチェーンシステムの構成の他に、アルゴリズム1 を有する。
【0045】
本システムはPoWを利用する完全分散型ブロックチェーンシステムを強化したものであり,ネットワークトポロジーやブロードキャストの方法に関しては同じ技術を用いている。本システムはピアツーピアネットワークとして構成される。ネットワーク全体は固定トポロジー無しに緩やかに結合している。あるノードがネットワークに参加するためにはすでに参加しているノードを一つは知っている必要がある。各ノードは無作為に選ばれたいくつかのノードと繋がっている。メッセージはゴシッププロトコルによってブロードキャストされる。各ノードはブロックチェーンの全情報のコピーを保持している。
【0046】
ユーザノードが取引を行うには,取引内容を表すアイテムをネットワークにブロードキャストする。マイナーでは2つのスレッドが並列して走っている。ここで,スレッドとは,並列に複数の処理が可能なコンピュータの上で連続して実行される一本の命令の並びを指す。2つのスレッド間でアイテムを格納するリスト(以下アイテムリスト)を共有する。一方のスレッドではアルゴリズム1を実行する。もう一方のスレッドでは,連続的にアイテムを受信して,それらをアイテムリストの最後に追加する。
【0047】
本実施例では,ブロックはA部とB部のみからなり,ブロックに含まれるアイテムは全てB部に格納する。ブロックtのA部は,ブロックt-1のA部のハッシュ値,ブロックtのB部のハッシュ値,ブロックtをブロックチェーンに新たに追加することでブロックtを追加する前の状態から状態の変化する可能性のあるアカウントの集合を表すデータ(ブルームフィルタ),ナンスから構成される(
図1)。完全なブロックチェーンに含まれる各ブロックのA部は,そのA部のハッシュ値が要求された数のゼロビットから始まるようなナンスを含む。
【0048】
各マイナーは,チェーンを複数格納できるチェーンリストを保持する。本実装においては,チェーンリストに格納されるチェーンは,全てのブロックについて少なくともA部を保持している。また,全てのブロックのA部に関して,そのハッシュ値が要求された数のゼロビットから始まるようなナンスをそのA部に含んでいる。
【0049】
アルゴリズム1
1. 完全なブロックチェーンをダウンロードし,このブロックチェーンを空のチェーンリストに追加する。
2. チェーンリスト内の最長のチェーンより一定ブロック数以上短いチェーンをチェーンリストから全て削除する。
3. チェーンリスト中のチェーンそれぞれについてブロックの数を評価し,これをチェーンの適合度とする。チェーンリストから,最後のブロックの一つ前およびそれ以前の全ブロックについてA 部とB部の両方を保持しており,最後のブロックのA 部を保持しているチェーンの中で,最も適合度の高いチェーンを選択する。但し,このチェーンはリストから削除しない。以降このチェーンをマイニングの対象とする。このチェーンに含まれるブロックの数をtとする。
4. ブロックt(マイニングの対象とするチェーンの最後のブロック)のB部を保持している場合は,アイテムリストに含まれるアイテムのうち,ブロックtおよびそれ以前のブロックに含まれておらず,検証に成功したアイテム全てをブロックt+1に格納するアイテムとして選定する。
5. ブロックtのB部を保持していない場合は,アイテムリストに含まれるアイテムのうち,ブロックt-1およびそれ以前のブロックに含まれておらず,検証に成功したアイテムのうち,ブロックtのA部に含まれる「ブロックtをブロックチェーンに新たに追加することでブロックtを追加する前の状態から状態の変化する可能性のあるアカウントの集合を表すデータ」の表すアカウントのいずれも参照しないアイテム全てをブロックt+1に格納するアイテムとして選定する。
6. ステップ4と5で選定したアイテムから,一つのブロックに格納できる数のアイテムを選定してブロックt+1のB部を構成し,ブロックt+1のB部のハッシュ値を計算する。ブロックt+1のB部に含まれる全てのアイテムそれぞれが上書きするアカウントの集合の和集合を求めることで,「ブロックt+1をマイニングの対象とするブロックチェーンに新たに追加することでブロックt+1 を追加する前の状態から状態の変化する可能性のあるアカウントの集合」を求める。求めた集合を表すデータ(ブルームフィルタ)を生成し,このブルームフィルタとブロックt+1のB部のハッシュ値,ブロックtのA部のハッシュ値からブロックt+1のA部を構成する。
7. ブロックt+1のA部のハッシュ値が要求された数のゼロビットから始まるようなナンスを探す。
7a. 7.の過程で,ブロックt+1のA部のハッシュ値が要求された数のゼロビットから始まるようなナンスを見つけた場合:チェーンリスト内の現在マイニングの対象としているチェーンに,見つけたナンスを含むブロックt+1のA部とB部を追加し,ブロックt+1のA部とB部をブロードキャストする。ステップ2 へ。
7b. 7.の過程で,ブロックのA部を受信した場合:チェーンリストに受信したブロックで終わるチェーンを追加する。受信したブロックの一つ前およびそれ以前のブロックのA部またはB部を保持していなければ,ダウンロードしてリストに追加する。ステップ2 へ。
7c. 7.の過程で,あるブロックのB部の受信を完了した場合:受信したブロックをブロックuと呼ぶ。チェーンリスト内のB部の欠落した各ブロックKについて,ブロックKのA部に含まれている「ブロックKのB部のハッシュ値」と,受信したブロックuのB部のハッシュ値が一致し,かつ受信したブロックuのB部から求められる,「ブロックuをブロックチェーンに新たに追加することでブロックuを追加する前の状態から状態の変化する可能性のあるアカウントの集合を表すデータ(ブルームフィルタ)」と,ブロックKのA部に含まれているブルームフィルタが一致する場合に,ブロックuのB部に格納されているアイテム全ての検証を行い,成功した場合,ブロックKに受信したブロックuのB部を追加する。ステップ2 へ。
【実施例2】
【0050】
実施例2のブロックチェーンシステムは、第5の発明の一実施例であり、PoWを利用する完全分散型ブロックチェーンシステムの構成の他に、アルゴリズム2を有する。
【0051】
本システムはPoWを利用する完全分散型ブロックチェーンシステムを強化したものであり,ネットワークトポロジーやブロードキャストの方法に関しては同じ技術を用いている。本システムはピアツーピアネットワークとして構成される。ネットワーク全体は固定トポロジー無しに緩やかに結合している。あるノードがネットワークに参加するためにはすでに参加しているノードを一つは知っている必要がある。各ノードは無作為に選ばれたいくつかのノードと繋がっている。メッセージはゴシッププロトコルによってブロードキャストされる。各ノードはブロックチェーンの全情報のコピーを保持している。
【0052】
ユーザノードが取引を行うには,取引内容を表すアイテムをネットワークにブロードキャストする。マイナーでは2つのスレッドが並列して走っており、そのうちの一方ではアルゴリズム2を実行する。もう一方のスレッドでは,連続的にアイテムを受信して,それらをアイテムリストの最後に追加する。
【0053】
本実施例では,奇数番目のブロックはA部とB部のみからなり,ブロックに含まれるアイテムは全てB部に格納する。奇数番目のブロックのA部は,該ブロックのB部のハッシュ値,該ブロックの一つ前のブロックのA部のハッシュ値,ナンス値から構成される。偶数番目のブロックはA部のみからなり,このA部は一つ前のブロックのA部のハッシュ値とナンスから構成される(
図4)。この実施例では,完全なブロックチェーンに含まれる各ブロックのA部は,そのA部のハッシュ値が要求された数のゼロビットから始まるようなナンスを含む。なおブロックチェーンの最初のブロックは1番目のブロックであり,奇数番目のブロックから始まる。
【0054】
各マイナーは,チェーンを複数格納できるチェーンリストを保持する。本実装においては,チェーンリストに格納されるチェーンは,全てのブロックについて少なくともA部を保持している。また,全てのブロックのA部に関して,そのハッシュ値が要求された数のゼロビットから始まるようなナンスをそのA部に含んでいる。
【0055】
アルゴリズム2
1. 完全なブロックチェーンをダウンロードし,このブロックチェーンを空のチェーンリストに追加する。
2. チェーンリスト内の最長のチェーンより一定ブロック数以上短いチェーンをチェーンリストから全て削除する。
3. チェーンリスト中のチェーンそれぞれについてブロックの数を評価し,これをチェーンの適合度とする。チェーンリスト中の,偶数個のブロックからなり最後の奇数番目のブロックのB 部を保持している最も適合度の高いチェーンと,奇数個のブロックからなる最も適合度の高いチェーンのうち,適合度の高い方を選択する。但し,このチェーンはリストから削除しない。以降このチェーンをマイニングの対象とする。このチェーンに含まれるブロックの数をtとする。
4. ブロックt(マイニングの対象とするチェーンの最後のブロック)が奇数番目のブロックである場合:
ブロックt+1にはアイテムを含めず,ブロックtのA部のハッシュ値からブロックt+1のA部を構成する。
5. ブロックtが偶数番目のブロックである場合:
アイテムリストに含まれるアイテムのうち,マイニングの対象となるブロックチェーンに含まれておらず,かつ検証に成功したアイテム全てをブロックt+1に格納するアイテムとして選定する。ここからさらに一つのブロックに格納できる数のアイテムを選定してブロックt+1のB部を構成し,ブロックt+1のB部のハッシュ値を計算する。このハッシュ値とブロックtのA部のハッシュ値からブロックt+1のA部を構成する。
6. ブロックt+1のA部のハッシュ値が要求された数のゼロビットから始まるようなナンスを探す。
6a. 6.の過程で,ブロックt+1のA部のハッシュ値が要求された数のゼロビットから始まるようなナンスを見つけた場合:チェーンリスト内の現在マイニングの対象としているチェーンに,見つけたナンスを含むブロックt+1全体を追加する。ブロックt+1のA部をブロードキャストし,次いでブロックt+1の残りの部分をブロードキャストする。ステップ2 へ。
6b. 6.の過程で,ブロックのA部を受信した場合:チェーンリストに受信したブロックで終わるチェーンを追加する。受信したブロックの一つ前およびそれ以前のブロックのA部またはB部を保持していなければ,ダウンロードしてリストに追加する。ステップ2へ。
6c. 6.の過程で,ブロックuのB部の受信を完了した場合:チェーンリスト内のB部の欠落した各ブロックKについて,ブロックKのA部に含まれている「ブロックKのB部のハッシュ値」と,受信したブロックuのB部のハッシュ値が一致する場合に,ブロックuのB部に格納されているアイテム全ての検証を行い,成功した場合,ブロックKに受信したブロックuのB部を追加する。ステップ2 へ。
【実施例3】
【0056】
実施例3 のブロックチェーンシステムは、第6の発明の一実施例であり、PoWを利用する完全分散型ブロックチェーンシステムの構成の他に、アルゴリズム3を有する。
【0057】
本システムはPoWを利用する完全分散型ブロックチェーンシステムを強化したものであり,ネットワークトポロジーやブロードキャストの方法に関しては同じ技術を用いている。
【0058】
本システムはピアツーピアネットワークとして構成される。ネットワーク全体は固定トポロジー無しに緩やかに結合している。あるノードがネットワークに参加するためにはすでに参加しているノードを一つは知っている必要がある。各ノードは無作為に選ばれたいくつかのノードと繋がっている。メッセージはゴシッププロトコルによってブロードキャストされる。各ノードはブロックチェーンの全情報のコピーを保持している。
【0059】
ユーザノードが取引を行うには,取引内容を表すアイテムをネットワークにブロードキャストする。マイナーでは2つのスレッドが並列して走っており、そのうちの一方ではアルゴリズム3を実行する。もう一方のスレッドでは,連続的にアイテムを受信して,それらをアイテムリストの最後に追加する。
【0060】
本実施例では,ブロックチェーンに実行できない取引の取引データも記録される。各ユーザのアカウントの最新状態は,アカウントの初期状態から,ブロックチェーンに記録されたアイテムの表す取引のうち,実行できない取引を除く取引を順に全て実行した結果として定義される。
【0061】
本実施例では,ブロックはA部とB部のみからなり,ブロックに含まれるアイテムは全てB部に格納する。ブロックtのA部は,ブロックt-1のA部のハッシュ値,ブロックtのB部のハッシュ値,ブロックtに含まれる全てのアイテムの集合を表すデータ(ブルームフィルタ),ナンスから構成される(
図1)。完全なブロックチェーンに含まれる各ブロックのA部は,そのA部のハッシュ値が要求された数のゼロビットから始まるようなナンスを含む。
【0062】
各マイナーは,チェーンを複数格納できるチェーンリストを保持する。本実装においては,チェーンリストに格納されるチェーンは,全てのブロックについて少なくともA部を保持している。また,全てのブロックのA部に関して,そのハッシュ値が要求された数のゼロビットから始まるようなナンスをそのA部に含んでいる。
【0063】
アルゴリズム3
1. 完全なブロックチェーンをダウンロードし,このブロックチェーンを空のチェーンリストに追加する。
2. チェーンリスト内の最長のチェーンより一定ブロック数以上短いチェーンをチェーンリストから全て削除する。
3. チェーンリスト中のチェーンそれぞれについてブロックの数を評価し,これをチェーンの適合度とする。チェーンリストから,最後のブロックの一つ前およびそれ以前の全ブロックについてA部とB部の両方を保持しており,最後のブロックのA部を保持しているチェーンの中で,最も適合度の高いチェーンを選択する。但し,このチェーンはリストから削除しない。以降このチェーンをマイニングの対象とする。このチェーンに含まれるブロックの数をtとする。
4. ブロックt(マイニングの対象とするチェーンの最後のブロック)のB部を保持している場合は,アイテムリストに含まれるアイテムのうち,ブロックtおよびそれ以前のブロックに含まれておらず,検証に成功したアイテム全てをブロックt+1に格納するアイテムとして選定する。
5. ブロックtのB部を保持していない場合は,アイテムリストに含まれるアイテムのうち,ブロックt-1およびそれ以前のブロックに含まれておらず,検証に成功したアイテムのうち,ブロックtのA部に含まれる「ブロックtに含まれる全てのアイテムの集合を表すデータ」の表す集合に含まれないアイテム全てをブロックt+1に格納するアイテムとして選定する。
6. ステップ4と5で選定したアイテムから,一つのブロックに格納できる数のアイテムを選定してブロックt+1のB部を構成し,ブロックt+1のB部のハッシュ値を計算する。ブロックt+1のB部に含まれる全てのアイテムの集合を表すデータ(ブルームフィルタ)を生成し,このブルームフィルタとブロックt+1のB部のハッシュ値,ブロックtのA部のハッシュ値からブロックt+1のA部を構成する。
7. ブロックt+1のA部のハッシュ値が要求された数のゼロビットから始まるようなナンスを探す。
7a. 7.の過程で,ブロックt+1のA部のハッシュ値が要求された数のゼロビットから始まるようなナンスを見つけた場合:チェーンリスト内の現在マイニングの対象としているチェーンに,見つけたナンスを含むブロックt+1のA部とB部を追加し,ブロックt+1のA部とB部をブロードキャストする。ステップ2 へ。
7b. 7.の過程で,ブロックのA部を受信した場合:チェーンリストに受信したブロックで終わるチェーンを追加する。受信したブロックの一つ前およびそれ以前のブロックのA部またはB部を保持していなければ,ダウンロードしてリストに追加する。ステップ2 へ。
7c. 7.の過程で,ブロックuのB部の受信を完了した場合:チェーンリスト内のB部の欠落した各ブロックKについて,ブロックKのA部に含まれている「ブロックKのB部のハッシュ値」と,受信したブロックuのB部のハッシュ値が一致し,かつ受信したブロックuのB部から求められる,「ブロックuのB部に含まれる全てのアイテムの集合を表すデータ(ブルームフィルタ)」と,ブロックKのA部に含まれているブルームフィルタが一致する場合に,ブロックKに受信したブロックuのB部を追加する。ステップ2 へ。
【産業上の利用可能性】
【0064】
本願発明に係るブロックチェーンシステムは、既存の様々な暗号資産を取引するブロッ
クチェ―ンシステムにも適用可能なものであり、それらにおいても、ブロックチェーンが単位時間あたりに処理できる取引の数を増すことができる。