特許第6811504号(P6811504)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

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

▶ 柴田 直樹の特許一覧

特許6811504最適化問題の解探索を利用した合意形成プロトコルを備えたブロックチェーンシステム及びコンピュータープログラム。
<>
  • 特許6811504-最適化問題の解探索を利用した合意形成プロトコルを備えたブロックチェーンシステム及びコンピュータープログラム。 図000002
  • 特許6811504-最適化問題の解探索を利用した合意形成プロトコルを備えたブロックチェーンシステム及びコンピュータープログラム。 図000003
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6811504
(24)【登録日】2020年12月17日
(45)【発行日】2021年1月13日
(54)【発明の名称】最適化問題の解探索を利用した合意形成プロトコルを備えたブロックチェーンシステム及びコンピュータープログラム。
(51)【国際特許分類】
   H04L 9/32 20060101AFI20201228BHJP
   G06F 17/10 20060101ALI20201228BHJP
【FI】
   H04L9/00 675Z
   G06F17/10
【請求項の数】5
【全頁数】16
(21)【出願番号】特願2020-131296(P2020-131296)
(22)【出願日】2020年8月1日
(65)【公開番号】特開2020-188503(P2020-188503A)
(43)【公開日】2020年11月19日
【審査請求日】2020年8月13日
【新規性喪失の例外の表示】特許法第30条第2項適用 ・高度交通システム(ITS)研究フォーラム2020、2020年1月24日開催。 ・掲載年月日2020年1月14日、https://ipsj.ixsq.nii.ac.jp/ej/?action=pages_view_main&active_action=repository_view_main_item_detail&item_id=202975&item_no=1&page_id=13&block_id=8 ・掲載年月日 2019年11月28日、https://ieeexplore.ieee.org/document/8917609 ・掲載年月日 2019年8月6日、https://arxiv.org/abs/1908.01915v1 ・掲載年月日 2019年12月11日、http://www.naist.jp/en/research_achievements/2019/12/006445.html ・掲載年月日 2019年12月2日、http://www.naist.jp/pressrelease/2019/12/006330.html
【早期審査対象出願】
(73)【特許権者】
【識別番号】520291065
【氏名又は名称】柴田 直樹
(74)【代理人】
【識別番号】100196391
【弁理士】
【氏名又は名称】萩森 学
(72)【発明者】
【氏名】柴田 直樹
【審査官】 中里 裕正
(56)【参考文献】
【文献】 BALL, M. et al.,Proof of Useful Work,Cryptology ePrint Archive,[online],2020年 5月,Report 2017/203,pp.1-30,[2020年11月30日検索],URL,https://eprint.iacr.org/2017/203
【文献】 BALL, M. et al.,Proof of Work from Worst-Case Assumptions,Cryptology ePrint Archive,[online],2018年 6月,Report 2018/559,pp.1-30,[2020年11月30日検索],URL,https://eprint.iacr.org/2018/559
【文献】 LOE, A. F. and QUAGLIA, E. A.,Conquering Generals: an NP-Hard Proof of Useful Work,Proceedings of the 1st Workshop on Cryptocurrencies and Blockchains for Distributed Systems,2018年 6月,pp.54-59
【文献】 CHATTERJEE, K,, GOHARSHADY, A. and POURDAMGHANI, A.,Hybrid Mining,Proceedings of the 34th ACM/SIGAPP Symposium on Applied Computing,2019年 4月,pp.374-381
【文献】 SYAFRUDDIN, W. A., DADKHAH, S. and KOPPEN, M.,Blockchain Sceme Based on Evolutionary Proof of Work,2019 IEEE Congress on Evolutionary Computation (CEC),2019年,pp.771-776
【文献】 LI, W.,Adapting Blockchain Technology for Scientific Computing,arXiv,[online],2018年10月,1804.08230 v2,pp.1-8,[2020年11月30日検索],URL,https://arxiv.org/abs/1804.08230
【文献】 OLIVER, C. G., RICOTTONE, A. and PHILIPPOPOULOS, P.,Proposal for a fully decentralized blockchain and proof-of-work algorithm for solving NP-complete problems,arXiv,[online],2017年 9月,1708.09419 v2,pp.1-4,[2020年11月30日検索],URL,https://arxiv.org/abs/1708.09419
(58)【調査した分野】(Int.Cl.,DB名)
H04L 9/32
G06F 17/10
JSTPlus/JMEDPlus/JST7580(JDreamIII)
IEEE Xplore
THE ACM DIGITAL LIBRARY
(57)【特許請求の範囲】
【請求項1】
ピアツーピアネットワークに参加するノードにより運営されるブロックチェーンシステムであって、
各ノードはジョブを作成しブロックチェーンにブロードキャストする手段と、他のノードから受信したブロックが真正かどうかを検証する手段とを有し、ブロックは一つ前のブロックのハッシュ値とブロードキャストされたジョブの中から選んだジョブと、ナンスからなり、前記ナンスは、当該ブロックに対応するジョブに含まれる最適化問題の解候補とその解候補の評点を結合したものであり、ブロックが真正であるとは、ブロック中のナンスの解候補と評点が対応することであることを特徴とするブロックチェーンシステム。
【請求項2】
請求項1に記載のブロックチェーンシステムであって、
各ノードはミニブロックを作成しブロックチェーンにブロードキャストする手段と、他のノードから受信したミニブロックが真正かどうかを検証する手段とを有し、
ブロックは複数の前記ミニブロックを含み、前記ミニブロックは、ブロックのミニブロック以外の部分のハッシュ値とそのミニブロックを作成したノードのIDとブロードキャストされたジョブの中から選んだ一つのジョブと、ナンスからなり、
前記ミニブロックのハッシュ値が要求された数のゼロビットで始まる数である場合にのみ当該ミニブロックはブロックに含まれることができ、
当該最後のブロックは、要求された全てのジョブに対応するミニブロックの全部が当該最後のブロックに含まれた時にブロックチェーンの末尾に結合することを特徴とするブロックチェーンシステム。
【請求項3】
請求項2に記載のブロックチェーンシステムであって、
前記のジョブは、それを作成したノードのIDと、それを作成したノードが最良の近似解を得ることを希望する最適化問題と、最良の近似解を算出したノードに支払う料金と、エバリュエーターを備えており、前記エバリュエーターは解候補を評価し評点を付すプログラムであり、前記エバリュエーターの出力する評点の最も高い解をブロードキャストしたノードがその最適化問題に設定された料金を得ることを特徴とするブロックチェーンシステム。
【請求項4】
請求項1ないし3に記載のブロックチェーンシステムであって、上記の解候補を探索するために実行したステップ数を決定的に数える機能と、
実行したステップ数を返す機能と、
指定されたステップ数を実行した後に解候補探索のプログラムを強制終了する機能を備えていることを特徴とするブロックチェーンシステム。
【請求項5】
請求項1ないし4に記載のブロックチェーンシステムを実現するためのコンピュータープログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明はブロックチェーンシステム、特にクライアントから要請された最適化問題の解探索を行うことにより有効なナンスが得られる仕組みを備えることにより、有効なナンスを見つけるための計算資源を最適化問題の解探索のために使えるブロックチェーンシステムに関する。
【背景技術】
【0002】
ビットコイン(非特許文献1)の登場以来、ブロックチェーンを利用した暗号通貨が多数開発されてきた。ブロックチェーンとはリスト構造のデータであり、データを次々と新たに追加することができ、過去に登録されたデータの修正が困難となるように設計されている。暗号通貨における全ての取引の履歴はこのブロックチェーンに保存される。ビットコインでは、プルーフオブワーク(proof-of-work、以下PoWと記す) と呼ばれる仕組みにより正しい取引の結果を決めており、コインの二重使用等を防いでいる。PoWにおいては、ネットワークに参加するノードがある計算を行うことで、ノードの持つ計算量に応じた投票権を行使できるような多数決がとられる。なりすましの容易な計算機ネットワークにおいて、PoWは非常にロバストに動作する一方、PoWのために浪費される計算資源および電力が社会問題となっている。2018 年においては、このための電力はアイルランド全体で消費される電力(3.1ギガワット) に及んだ(非特許文献2)。暗号通貨の維持のために浪費される多大な電力の問題を解決するため、PoWの代替として利用できる様々なプロトコルが考案されてきた。これらにより消費される電力を抑えられる一方、完全分散ではないものや、プロトコル特有の問題を抱えているものが多い。PoWのセキュリティの高さと頑健性は他の代替プロトコルより優れており、このためPoWに基づく暗号通貨は依然として最もよく使われている。
【0003】
ビットコイン(非特許文献1)は、ロバストでセキュアな完全分散型の暗号通貨であり、取引の時間的順序をピアツーピア(以後P2Pと記す)型分散タイムスタンプサーバに記録する。この時間的順序に対して、PoWによる計算量的な証明が与えられる。ネットワークにおいては多数のIPアドレスを確保するのが容易であり、各IPアドレスに対して投票権の与えられる多数決はうまく機能しない。PoWは、このような環境において計算量の多寡に応じて投票権の与えられる多数決を実現するのに使用される。ビットコインの分散タイムスタンプサーバは、データアイテムのブロックにタイムスタンプを刻印し、多数のブロックをリンクトリストとして保存する。このリンクトリストはブロックチェーンと呼ばれる。各ブロックは、複数のデータアイテムと、一つ前のブロックのハッシュ値を含む。新しいブロックがチェーンに追加される毎に、新しいブロックのハッシュ値が計算され、ネットワーク上にブロードキャストされる。ビットコインのPoWでは、このハッシュ値が決められた数のゼロビットで始まる数値を見つける。各ブロックには、ナンスと呼ばれる整数値を格納するエントリが用意されており、ブロック全体のハッシュ値が決められた数のゼロビットで始まるナンスを持つブロックのみが、有効なブロックとして受理される。ネットワークを維持するために、新しいブロックを追加することに成功したノードにインセンティブとして新しいコインが授与される。ブロックを追加しようとするノードのことをマイナーと呼ぶ。善意のマイナーは、そのノードの知る限り最も長いチェーンにブロックを追加しようとする。大半のCPU資源が、善意のマイナーによりブロックの追加に使用される限り、正しい取引を記録したチェーンが最も速く伸びる。計算量に応じて投票権の与えられる多数決はこのようにして実現される。各ブロックが追加されるのにかかる時間をブロックタイムと呼ぶ。ハッシュ値のゼロビットの数は、ブロックタイムの期待値が10分になるように自動的に調整される。ビットコインは、下記の性質を満たす。
イ)完全分散であり、自立的に調整される。
ロ)ノードや、外部の組織、人などに一切依存しない。
ハ)ブロックに記録されたデータを変更することが困難である。
ニ)なりすましに耐性がある。
ホ)各マイナーが新たなブロックの追加に成功する確率は、そのノードのCPU 資源の量に比例する。
へ)ブロックの正当性は、任意のノードが任意のタイミングで検証できる。
ト)任意のノードが事前登録無しにいつでも参加できる。
しかしながら、ビットコインではマイナーがCPU 資源をPoWのために費やす必要があり、このCPU資源は、ハッシュ値を繰り返し計算するためだけに使われる。これは、CPU資源の浪費である。
【0004】
ビットコインにより多大な電力が浪費される問題に対処するため、数々のPoWを代替するための手法が提案されてきた。プルーフオブステーク(Proof-of-stake)とプルーフオブバーン(proof-of-burn、非特許文献3)は、最近になって開発された暗号通貨に利用されている手法である。プルーフオブステークは、最初にピアコイン(Peercoin、非特許文献4)において実装された。この手法では、所持する通貨の量や、ノードの古さ、ランダム選択などを組み合わせて次のブロックを追加するノードを選ぶ。所持する通貨の量が多いノードほど頻繁にブロックを追加することができ、従って多くの新しいコインを得ることができる。このプロトコルでは、プロトコルにより選ばれた新しいブロックを追加するノードを信用する必要がある。実質的に、金持ちのノードによりネットワークがコントロールされる。プルーフオブアクティビティー(Proof-of-activity 、非特許文献5)は、PoWとプルーフオブステークの組み合わせである。この手法では、マイナーはPoWと同様の方法で、チェーンに空のブロックヘッダーを追加する。このヘッダーには、プルーフオブステークと同様の方法で複数のノードが指名されており、これらのノード群が新しいブロックに署名する。新しいブロックが全てのノードにより署名されると、このブロックはブロックチェーンの一部として受理される。この手法の利点として、ネットワークをコントロールするためにCPU資源と所持する通貨の両方が必要になること、またCPU資源の消費が純粋なPoWに比べて穏やかであることが挙げられる。プルーフオブバーン(非特許文献3)では、ある特別な宛先に送られたコインが回収不能になるような宛先を用意しておき、ノードが所持しているコインをこの宛先に送った場合に投票権が得られるようにする手法である。この手法では、投票権を持つノードを信用する必要がある。
【0005】
プルーフオブユースフルワーク(Proof-of-useful-work、非特許文献6)、グリッドコイン(Gridcoin、非特許文献7)、パーマコイン(Permacoin、非特許文献8)では、多数決におけるCPU資源をより意味のある用途に利用できる。プルーフオブユースフルワーク (非特許文献6) では、多数決におけるCPU資源を直交ベクトル問題(Orthogonal Vectors problems)を解くために利用できる。プライムコイン(Primecoin、非特許文献9)では、CPU資源を新たな素数を探すために利用できる。しかしながら、これらの問題を解く社会的な需要がどれほどあるのかは明らかではない。グリッドコイン(非特許文献7)は、プルーフオブリサーチ(proof-of-research) と呼ばれる手法を利用する。この手法では、マイナーがバークレー オープンリサーチインフラストラクチャー フォー ネットワークコンピューティング(Berkeley Open Infrastructure for Network Computing、以下BOINCと記す、非特許文献10)で計算を行うことにより、マイナーに対しインセンティブを授与する。この手法では、多数決を取るためのCPU資源を非常に意味のある用途に利用することができるが、暗号通貨はBOINCシステムに依存する必要がある。したがって、BOINC システムがダウンすると、グリッドコインは動作しなくなる。
【0006】
プルーフオブスペース(Proof-of-space、非特許文献11)は、証明者と検証者の間のプロトコルであり、証明者がある大きなデータをローカルストレージに保存しておく。検証者は、証明者にデータを送るよう指示し、これにより証明者がデータを保存しているか確認する。このプロトコルは、確認に必要な計算量および通信量が小さくなるように設計されている。プルーフオブスペースを完全分散のブロックチェーンにおいて利用するためには、新たなブロックを追加するのに成功したノードを決めるための方法と、各ノードがノードの追加に成功する確率を知る方法が必要になる。ノードの追加に成功する確率は、各ノードが保存しているデータ量に比例する必要がある。これらの実用上の問題については、非特許文献12で考察されている。論文中で述べられているとおり、プルーフオブスペースおよびそれを利用したブロックチェーンには、固有の弱点がある。まず、マイナーが同一のストレージ領域を利用して複数のチェーンを同時にマイニングできてしまう。また、同一のストレージ領域を利用してわずかに異なったブロックの追加を試みることができる。
【0007】
特許文献1に係るブロックチェーンシステムは秘密鍵を保有する唯一の特権ノードと公開鍵を保有する複数の通常ノードにより構成されるシステムである。このシステムは秘密鍵で署名値を作ることでブロックを生成する方式であるためブロック生成にともなう計算コストが一般的なブロックチェーンに比べると格段に小さいとのことである。しかし、このシステムにおける特権ノードは信頼される必要がありこのブロックチェーンシステムは分散型ではない。
【先行技術文献】
【特許文献】
【0008】
【特許文献1】特開2020−88864
【非特許文献】
【0009】
【非特許文献1】Nakamoto, S.: Bitcoin: A Peer-to-Peer Electronic CashSystem (2008).
【非特許文献2】Vries, A.: Bitcoin's Growing Energy Problem (2018).
【非特許文献3】P4Titan: Slimcoin A Peer-to-Peer Crypto-Currencywith Proof-of-Burn (2014).
【非特許文献4】Popper, N.: In Bitcoin's Orbit: Rival Virtual Currencies Vie for Acceptance (2013).
【非特許文献5】Bentov, I., Lee, C., Mizrahi, A. and Rosenfeld, M.: Proof of Activity: Extending Bitcoin's Proof of Work via Proof of Stake, ACM SIGMETRICS Performance Evaluation Review, Vol. 42, No. 3, pp. 34{37 (2014).
【非特許文献6】Ball, M., Rosen, A., Sabin, M. and Vasudevan,P. N.: Proofs of Useful Work, IACR Cryptology ePrintArchive, Vol. 2017, p. 203 (2017).
【非特許文献7】Halford, R.: Gridcoin: Crypto-currency using Berkeley open infrastructure network computing grid as a proof of work (2014).
【非特許文献8】Miller, A., Juels, A., Shi, E., Parno, B. and Katz, J.: Per-macoin: Repurposing bitcoin work for data preservation,Security and Privacy (SP), 2014 IEEE Symposium on,IEEE, pp. 475{490 (2014).
【非特許文献9】King, S.: Primecoin: Cryptocurrency with prime num-ber proof-of-work (2013).
【非特許文献10】Anderson, D. P.: BOINC: A System for Public-Resource Computing and Storage, Proceedings of the 5th IEEE/ACM International Workshop on Grid Comput-ing, GRID '04, Washington, DC, USA, IEEE Computer Society, pp. 4{10 (2004).
【非特許文献11】Dziembowski, S., Faust, S., Kolmogorov, V. and Pietrzak, K.: Proofs of Space, Advances in Cryptology {CRYPTO 2015 (Gennaro, R. and Robshaw, M., eds.), Berlin, Heidelberg, Springer Berlin Heidelberg, pp. 585{605 (2015).
【非特許文献12】Fuchsbauer, G.: Spacemint: A Cryptocurrency Based on Proofs of Space, ERCIM News, Vol. 2017 (2015).
【発明の概要】
【発明が解決しようとする課題】
【0010】
本願発明が解決しようとする課題は段落0003に記載したイ)からト)までの全ての長所を備えており、PoWのために浪費される計算資源を最適化問題の近似解の探索に利用でき、また任意のノードが解候補の評価プログラムであるエバリュエーターを含むジョブを登録することができる完全分散型多数決プロトコルを備えたブロックチェーンシステムを提供することである。
【課題を解決するための手段】
【0011】
本願発明に係るブロックチェーンシステムのブロックチェーンをプルーフオブサーチ(proof of search)ブロックチェーンと呼び、以下PoSブロックチェーンと記す。また、本願発明に係るブロックチェーンシステムを以下本システムと呼ぶ。
【0012】
本システムでは、整数値の代わりに、解候補とその評価値を連結したものをナンスとして用いる。有効なナンスを生成するためには、マイナーはエバリュエーターを実行し、何らかの解候補を評価する必要がある。多数決を取る過程において多数のナンスが生成され、従って多数の解候補が評価される。ノード間の共謀を防止するため、本システムでは二つの異なった方法でマイニングノードにインセンティブを提供する。新しいブロックを追加することに成功したマイナーに対しては、PoWと同様に新たなコインを授与する。各ジョブに対し最も良い近似解を見つけたノードに対しては、ジョブを登録したノードが料金を支払う。クライアントはマイニングをすることなくジョブを登録することができ、マイナーはジョブを登録する必要はない。もし、ジョブが全く登録されていなければ、自動的に空のジョブが登録され、これにより本システムはPoW と同等の働きをする。本明細書では、解とは近似解のことを指し、最適化問題の解を得るとは、近似解を得ることを意味する。
【0013】
エバリュエーターは解探索を行う最適化問題のインスタンスを含み、与えられた解候補の評価値を決定的に計算するプログラムである。実行される環境によらず入力が同じであれば全く同じ出力を与える。ジョブは解探索の実行に必要なデータ全てであり、エバリュエーターもジョブに含まれる。任意のノード(クライアント) は、ジョブをブロックチェーンに登録することで最適化問題の解探索をリクエストする。例えば、あるクライアントが巡回セールスマン問題のあるインスタンスの解探索を行いたい場合には、そのためのエバリュエーターを実装し、これを含むジョブをブロックチェーンに登録する。この場合、都市の巡回順がエバリュエーターの入力であり、経路長が出力となる。本システムにおいては、解候補とその評価値を連結したものをナンスとする。本システムを利用したブロックチェーンが、登録された複数のジョブに含まれたエバリュエーターから次のブロックを追加するためのナンスを生成するためのエバリュエーターを選択する。PoWと同様に、次のブロックを追加するために、マイナーはナンスを含むブロック全体のハッシュ値が指定された個数のゼロビットで始まるようなナンスを探す。本システムでは、PoWと異なり、全てのナンスが有効ではない。本システムにおいては、有効なナンスを生成するために指定されたエバリュエーターを使用して解候補を評価する必要がある。この解候補と正しい評価値の組み合わせが有効なナンスである。次のブロックを追加するためには、マイナーは多数のナンスを生成する必要があり、そのために多数の解候補を評価する必要がある。マイナーが次のブロックを追加するためのナンスを見つけたということは、マイナーが多数の解候補を評価したことの確率的な証明となる。
【0014】
マイナーが解候補の評価値を計算することの目的は二つある。一つはナンスを含むブロック全体のハッシュ値が指定された個数のゼロビットで始まるような有効なナンスを探し、次のブロックを追加することであり、これによりマイナーはPoWと同様にコインを得ることができる。もう一つの目的は、良い評価値を持つ解を探すことである。本システムにおいては、よい解を見つけるために多数の解候補を評価する必要があると仮定しており、全ノード中で最も良い解を見つけたノードに、クライアントの登録したジョブに含まれる料金が支払われる。以後、あるジョブの最適化問題の解候補の中で最も良い解を最良の近似解と呼ぶ。この解探索を効率化するために、クライアントはサーチャーと呼ぶプログラムを実装し、ジョブに含める。サーチャーは遺伝アルゴリズムのような解探索アルゴリズムの実装であり、マイナーにより実行される。サーチャーは内部的にエバリュエーターを何度も呼び出す。エバリュエーターが呼び出されるごとに、対応するナンスを含むブロック全体のハッシュ値を計算し、それが指定された個数のゼロビットで始まるか調べ、そうである場合は新たなブロックをネットワークにブロードキャストする。サーチャーの実行は新たなブロックがいずれかのノードによってチェーンに追加されるまで継続する。
【0015】
PoWにおいては、過去の計算結果を再利用することについて考慮する必要はない。本システムにおいては、解候補の評価値の計算量がブロックのハッシュ値の計算量よりも大きいケースがあり、この場合に有効なナンスを異なったノード間で共有することで、一つの有効なナンスに対して複数のハッシュ値を計算する不正が可能になる。これを防止するため、本システムでは評価値とブロックに含まれるナンス以外のデータを関連付ける。エバリュエーターがブロックに含まれるナンス以外のデータのハッシュ値を二つ目の入力とし、この値に応じて出力にわずかな誤差を付加する。各クライアントは、この誤差を付加するアルゴリズムを独自に考案して実装する必要がある。評価値に誤差を付加することで、エバリュエーターをハッシュ関数の代わりに利用していることになるが、本システムにおいては暗号学的ハッシュ関数としての性質はそれほど強く要求されない。エバリュエーターが異なった入力に対し同じ値を出力する頻度はある程度低い必要があるが、ある程度の頻度で同じ値が出力されることは許される。
【0016】
本システムの最小限の機能を利用するためのブロックチェーンのデータ構造を図1に示す。このデータ構造により、単一の固定されたエバリュエーターを利用できるが、最適化問題の良い近似解を見つけるための仕組みは持たない。以降、様々な機能を付け加える方法について述べていく。
【0017】
本システムにおいては、下記の性質が成り立つ。
イ)マイナーは良い解を探してそれをクライアントに提供するインセンティブがある。
ロ)クライアントが既に良い解を知っているジョブを登録するインセンティブがない。
ハ)ジョブの登録・実行のためにコストが必要である。(この性質により価値のないジョブの登録が阻止される。)
特に、クライアントが既に良い解を知っているジョブを登録するケースについて対処が必要である。このようなジョブを登録する動機として、以下が考えられる。
(1)新たなブロックを追加する際に有利になる。
(2)新たなブロックを追加して得られるコインの利益の一部が得られる。
(3)良い解を見つけることで利益が得られる。
本システムでは、クライアントがジョブの実行に対して料金を支払うようにすることで、不正を防ぐ。上記項目(1)と(2)に関しては、段落0015で述べたように、良い解を知っていても、新たなブロックを追加する上で有利にならない。項目(3)に関しては、良い解を見つけることに対する対価はクライアントが支払うため、クライアントが利益を得ることはできない。また、良い解を見つけることに対する対価の受け渡しは、特定のノードを信頼する必要なく自動的に行われる。クライアントにより対価の支払いが確実に行われるようにするため、ジョブの受付時に対価がクライアントの口座から差し引かれる。探索の結果見つかった解はクライアントに安全に通知される。単純にあるノードが見つけた解をネットワークにブロードキャストすると、タイミングによってはこの解を別のノードが盗んでしまうことがあり得る。本システムでは、まず各ノードが見つけた解とノードIDを結合したもののハッシュ値をブロックチェーンに登録し、次のブロック時間に解を登録する。クライアントの払った対価は、最も良い解を見つけたノードに自動的に支払われる。
【0018】
本システムにおいては各ブロック時間に複数のジョブが実行され得るので、ジョブの実行料金を手頃にすることができる。また、各ノードが最も良い解を見つけることで支払われる対価の期待値が、ノードの計算能力に比例する。単純にブロック時間をジョブの実行料金に比例するように調整する方法だと、少額の実行料金でジョブを登録した場合にブロック時間が短くなってしまう。ブロック時間が短くなるとブロックチェーンがフォークする可能性が大きくなってしまう問題が生じる。これを避けるため、本システムではブロック時間を変化させずに、ブロックの間に複数のミニブロックを設け、各ミニブロックが一つのジョブに対応するようにしている。図2に示すように、ミニブロックは前のブロックのハッシュ値、マイナーのIDおよび対応するナンスからなる。マイナーはいずれかのミニブロックのハッシュ値が指定された個数のゼロビットで始まるような有効なナンスを探す。段落0012で説明したとおり、有効なナンスは、ミニブロックに対応する問題のインスタンスの解候補とその評価値からなる。そのようなナンスが見つかるたびに、マイナーはナンスを含むミニブロックをブロードキャストする。PoSブロックチェーンの末尾のブロックがチェーンに付加した後の1ブロックタイムの間にブロードキャストされた全てのミニブロックに対応するナンスが見つかると、ミニブロックの前にある最後のブロックがブロックチェーンに加わる。この時新たなコインが発行され、各ミニブロックに対応するナンスを見つけたノード全てに、新たに発行されたコインが支払われる。メッセージ配送遅延により、ネットワーク中の異なったノードがある時間までに受け取ったメッセージの集合は異なる可能性がある。従って、異なったマイナーは、異なった内容のブロックをネットワークに追加するために計算を行っている可能性がある。これはつまり、これらの二つのマイナーが探しているナンスに対応するミニブロックに含まれる、最後のブロックのハッシュ値が異なる可能性があるということである。ミニブロックに起因するブロックチェーンのフォーク(ミニフォーク) を防止し、より大きな数のマイナーが同じブロックをチェーンに追加するための計算を行うようにするため、本システムでは各マイナーは可能な限り最も長いチェーンに対して新たなブロックを追加するために計算を行う。ここで、あるチェーンが別のチェーンより多くのブロックを含むとき、チェーンの長さがより長いとし、またブロックの数が同じ場合、最後のブロックの後にあるミニブロックの数が多いチェーンの長さがより長いとしている。マイナーがミニブロックを受信したときに、そのチェーンがより長い場合は、このチェーンに対して新たなブロックを追加するために計算を行う。マイナーがミニブロックをブロードキャストする際には、最後のブロックとそれ以降のミニブロック全てをブロードキャストする。
【0019】
本システムでは、エバリュエーターとサーチャーを実行するための環境が必要となる。任意のユーザーがジョブを登録することができるため、ジョブに含まれるプログラムが適切に実装されてない場合に備える必要がある。まず、プログラムが終了しない場合に備え、定められたステップ数の実行の後にプログラムを強制終了する機能を備えている。プログラムは決定的に動作する必要があるため、このステップ数のカウントは正確である必要がある。エバリュエーターがクラッシュした場合、最も低い評価値が返されたものとして扱う。上記をふまえて、ジョブの実行環境は下記の条件を全て満たす。
イ)信頼できないコードを安全に実行できる。
ロ)エバリュエーターを決定的に動作させられる。
ハ)アーキテクチャによらず、実行ステップ数を決定的に数える機能を持つ。
ニ)実行ステップ数を返す。
ホ)指定されたステップの実行の後、実行を中断する。
上記の全ての条件を満たす実行環境を、インタプリタとして実装することは容易である。実行環境中で非決定的な動作をするAPIを提供しないことで、決定的な動作を実現している。
【0020】
ブロックチェーンに登録されたすべてのエバリュエーターはチェーンを検証するために実行されなければならない。しかし、エバリュエーターのサイズはハッシュ値よりもかなり大きいと想定されるので、全てのエバリュエーターを保持するための貯蔵スペースはブロックチェーンの運営にとってかなり重い負荷となる可能性が高い。貯蔵に要するスペースはチェーン検証の要求を緩和することにより小さくすることができる。参加者が、一定数のブロックを検証すれば十分と考えるなら、古いブロックに記録されているジョブの情報を廃棄できる。図2において古いブロックでは点線より上のハッシュ値のみ検証し点線より下の情報は廃棄し得る。このような緩和した検証方法を採用しても新しいブロックの全てのPoSをやり直すことなく古いブロックのアイテムを改変することは極めて困難である。
【0021】
第1の発明に係るブロックチェーンシステムは、ピアツーピアネットワークに参加するノードにより運営されるブロックチェーンシステムであって、各ノードはジョブを作成しブロックチェーンにブロードキャストする手段と、他のノードから受信したブロックが真正かどうかを検証する手段とを有し、ブロックは一つ前のブロックのハッシュ値とブロードキャストされたジョブの中から選んだジョブと、ナンスからなり、前記ナンスは、当該ブロックに対応するジョブに含まれる最適化問題の解候補とその解候補の評点を結合したものであり、ブロックが真正であるとは、ブロック中のナンスの解候補と評点が対応することであることを特徴とするものである。
【0022】
第2の発明に係るブロックチェーンシステムは、第1の発明に係るブロックチェーンシステムであって、各ノードはミニブロックを作成しブロックチェーンにブロードキャストする手段と、他のノードから受信したミニブロックが真正かどうかを検証する手段とを有し、ブロックは複数の前記ミニブロックを含み、前記ミニブロックは、ブロックのミニブロック以外の部分のハッシュ値とそのミニブロックを作成したノードのIDとブロードキャストされたジョブの中から選んだ一つのジョブと、ナンスからなり、前記ミニブロックのハッシュ値が要求された数のゼロビットで始まる数である場合にのみ当該ミニブロックはブロックに含まれることができ、当該最後のブロックは、要求された全てのジョブに対応するミニブロックの全部が当該最後のブロックに含まれた時にブロックチェーンの末尾に結合することを特徴とするものである。
【0023】
第3の発明に係るブロックチェーンシステムは、第2の発明に係るブロックチェーンシステムであって、前記のジョブは、それを作成したノードのIDと、それを作成したノードが最良の近似解を得ることを希望する最適化問題と、最良の近似解を算出したノードに支払う料金と、エバリュエーターを備えており、前記エバリュエーターは解候補を評価し評点を付すプログラムであり、前記エバリュエーターの出力する評点の最も高い解をブロードキャストしたノードがその最適化問題に設定された料金を得ることを特徴とするものである。
【0024】
第4の発明に係るブロックチェーンシステムは、第1ないし第3の発明に係るブロックチェーンシステムであって、上記の解候補を探索するために実行したステップ数を決定的に数える機能と、実行したステップ数を返す機能と、指定されたステップ数を実行した後に解候補探索のプログラムを強制終了する機能を備えていることを特徴とするものである。
【0025】
第5の発明は、第1の発明ないし第4の発明に係るブロックチェーンシステムを実現するためのコンピュータープログラムである。
【発明の効果】
【0026】
ビットコインと同等にロバストでセキュアな完全分散型のブロックチェーンシステムであって、ビットコインではその維持のために浪費されている計算資源と電力を、任意のユーザー(クライアント)が登録した最適化問題の近似解の探索に利用出来るブロックチェーンシステムが提供される。
【図面の簡単な説明】
【0027】
図1】本システムの最小限の機能を利用するためのブロックチェーンのデータ構造の概念図である。
図2】本システムにおける分散タイムスタンプサーバの概念図である。
【発明を実施するための形態】
【0028】
つぎに、本発明の実施形態を説明するが、本発明の技術的範囲を逸脱しない範囲において様々な変更や修正が可能であることは言うまでもない。
【実施例1】
【0029】
あるクライアントが、最適化すべき問題のインスタンスを持っている。このクライアントは、問題のインスタンスに対するエバリュエーターとサーチャーを実装し、このインスタンスの解探索に支払う料金を決める。次に、エバリュエーター、サーチャー、料金を組み合わせてジョブを作り、ブロックチェーンに登録する。この料金は自動的に引き落とされる。このジョブのためにマイナーが使用するCPU資源の期待値は、料金に比例する。マイナーはこの問題の解を探索するためにCPU資源を使う。見つかった解は、ブロックチェーンに登録され、クライアントは支払った料金と引き替えに見つかった解を得る。ここではいつでも十分な数のマイナーがいると仮定する。最も長いチェーンにブロックを追加するために、解探索を行えるジョブは通常複数用意されている。もしジョブを登録するクライアントが居ない場合、通常のPoWにフォールバックし、ミニブロックのハッシュ値が決められた数のゼロビットで始まるようなナンスを見つけるジョブが自動的に追加される。マイナーはサーチャーとエバリュエーターをジョブから抽出し、サーチャーを実行する。サーチャーは、実行中に多数の解候補を生成し、エバリュエーターを何度も呼び出すことでこれらの解候補を評価する。マイナーが良い解候補を見つけた場合、その解候補は保存しておく。マイナーが解候補を評価する際、有効なナンスを生成し、このナンスを含むミニブロック全体のハッシュ値を計算する。もし、このハッシュ値が決められた数のゼロビットで始まる場合、マイナーはこのナンスを含むミニブロックをネットワークにブロードキャストする。新しいミニブロックを追加するのに成功したマイナーは、PoWと同様にコインが授与される。マイナーが、ブロードキャストされた新しいミニブロックを受け取ると、そのマイナーはすぐにそのミニブロックを含む最も長いチェーンに対して新しいミニブロックを追加する処理にとりかかる。これにより、ミニフォークを防ぐことができる。全てのミニブロックが追加されるまでブロックタイムが続く。ブロックタイムの終了後、各マイナーは見つけた中で最も良い解をブロックチェーンに登録する。全てのマイナーの中で最も良い解を見つけたマイナーに対し、ジョブに添付された料金が支払われる。
【0030】
クライアントとマイナーが共謀することで本来より多くのコインを得ようとするケースについて述べる。マイナーが新しいブロックを追加するためには、ブロック全体のハッシュ値が決められた数のゼロビットで始まるようなナンスを探す必要がある。これは、基本的にはランダムな解を選んでハッシュ値を計算することの繰り返しであり、ジョブの問題やそれに対する解とは関係がない。従って、新しいブロックを追加して得られるコインを得るためにクライアントとマイナーが共謀するメリットはない。一方、クライアントは、あるジョブを登録する前に解を計算しておき、その結果を共謀したマイナーに教えるケースが考えられる。しかし、良い解を見つけたことに対する料金はクライアントから共謀したマイナーに支払われるのであり、これはクライアントからマイナーに送金しているのと同じである。送金は、暗号通貨の基本操作で行うことができる。
【実施例2】
【0031】
本システムはPoWを強化したものでありPoWと同じ技術を用いている。PoSブロックチェーンはピアツーピアネットワークとして構成される。ネットワーク全体は固定トポロジー(fixed topology)無しに緩やかに結合している。あるノードがネットワークに参加するためにはすでに参加しているノードを一つは知っている必要がある。各ノードは無作為に選ばれたいくつかのノードと繋がっている。メッセージはゴシッププロトコル(gossip protocol)によってブロードキャストされる。各ノードはブロックチェーンの全情報のコピーを保持している。本プロトコルではどのノードもジョブを登録し解を受け取ることができる。これはクライアントの観点からみると大変単純でありアルゴリズム1に示される。あるジョブが実行されその結果として支払いが為されるためには少なくとも4ブロックタイムを要する。下記は最速のシナリオでジョブがどのように処理されるかを示す。
【0032】
アルゴリズム1 ジョブ実行をリクエストする。
入力:ジョブ実行リクエスト q
出力:探索によって得られた最も良い解 s
1: q をブロックチェーンに登録する。
2: 解 s が得られるまで待つ。
3: s を返す。
【0033】
あるブロックタイムをブロックタイム0とし、それに続くブロックタイムをブロックタイム1、ブロックタイム2、ブロックタイム3、ブロックタイム4とする。この時、各ブロックタイムにおいて以下のことが為される。
ブロックタイム0においてあるジョブがクライアントによりブロードキャストされる。
ブロックタイム1においてこのジョブの有効性が調べられる。このジョブの料金がクライアントのアカウントから取り出され取り置かれる。このジョブがブロックタイム2で実行されるべく選ばれる。
ブロックタイム2においてこのジョブが実行される。
ブロックタイム3において各ノードはこのジョブについて発見した解のハッシュ値をブロードキャストする。ハッシュ値はブロックチェーンに登録される。
ブロックタイム4においてこのジョブの最良の近似解を発見したノードに料金が支払われる。
ジョブの実行と支払いは全てマイナーにより処理される。マイナーはジョブをパイプラインの方法で処理する。アルゴリズム2はマイナーの観点からジョブがどのように処理されるかを示す。
【0034】
アルゴリズム2 マイニング。
1: 新たなブロックが(他のノードによって)追加されるまで待つ。
2: 以降新たなブロックが追加されたチェーンについて処理を行う。
3: while true do
4: // 次のブロック時間に実行されるジョブに関する処理。
5: 未実行の有効なジョブのリストを作成する。
6: 次のブロック時間に実行されるジョブを選択する。
7: クライアントの口座からこれらのジョブの実行料金を引き落とす。
8: 追加しようとするブロックにこれらのジョブを追加する。
9: // このブロック時間に実行されているジョブに関する処理。
10: 新しいトランザクションを検証し,追加しようとするブロックに追加する。
11: // 2ブロック時間前(上記のブロック時間の前)に実行されたジョブに関する処理。
12: ブロックチェーンに登録された情報(マイナーのIDと解の評価値)を参照し,2ブロック時間前に見つけた解が最も良い解であったか調べる。もしそうであれば,見つけた解をブロックチェーンに追加する。
13: // 3ブロック時間前に実行されたジョブに関する処理
14: ブロックチェーンに登録された解が真正か調べ,そうであれば支払いの手続きを行う。
15: repeat
16: 追加しようとしているブロックにある完了してないジョブのうち一つを選んで,新しいミニブロックを受信する(もしくは規定数のゼロビットで始まるナンスを見つける)まで実行する。
17: (規定数のゼロビットで始まるナンスを見つけた場合には)ハッシュ値をブロックチェーンに登録する。
18: (新しいミニブロックを受信した場合には) アルゴリズム3によりチェーンを検証する。
19: if 新しいミニブロックが有効で,それに対応するチェーンがより長い場合 then
20: 以降そのミニブロックに対応するチェーンに対して処理を行う。
21: 変更後のチェーンに含まれないトランザクションを新規に受信したトランザクションのリストに移動する。
22: end if
23: until 新しいブロックが追加されるまで
24: end while
【0035】
2つのスレッドが並列して走っており、その一つはアルゴリズム2である。もう一つのスレッドでは新しく受信されたアイテムはアイテムリストの最後尾に付加される。ブロックチェーンにアイテムを登録するためには、アイテムはネットワークにブロードキャストされなければならない。マイナーに受信されたアイテムはアイテムリストの末尾に付加される。アルゴリズム2が始まると、マイナーはまず作業するチェーンを選ぶ。(2行目)。有効なチェーンが複数存在し得る。それらは、みな同じブロックから始まっている。ある特定のブロックの並び、あるいはチェーンは、末尾のブロックにより特定される。マイナーは最初に受信されたブロックに伴われたチェーンについて作業を始める。
5行目でクライアントの口座の残高がチェックされる。
8行目で、全てのマイナーが同一のジョブセットで作業するようにするために、どのジョブセットにするかについての合意形成と、ゼロビットの数についての合意形成が作業開始前に為されなければならない。
16行目で、サーチャーが段落0019で説明した実行環境で実行される。サーチャーの一例としてアルゴリズム4でランダムサーチャールゴリズムが示される。段落0014で説明したようにこのサーチャーは内部的に対応するエバリュエーターを呼び出す。エバリュエーターは呼び出される都度自動的にエバリュエーションの結果とナンスを生み出し、そのハッシュ値が要求された数のゼロビットで始まるかどうかをチェックする。もしそうであれば新しいミニブロックがブロードキャストされサーチャーの実行が終了する。サーチャーの実行は新しいミニブロックが他のマイニングノードによって付加された時も終了する。新しいブロックが付加された時そのブロックの最後のミニブロックも付加されることに留意されたい。
18行目で、ミニブロックを伴うチェーンが検証される。このプロセスはアルゴリズム3に示されている。このアルゴリズムは段落0018と段落0020で説明されている通りに作動する。ノードが以前検証したチェーンに含まれていたブロックあるいはミニブロックと厳密に同一のブロックあるいはミニブロックは検証する必要は無い。
21行目ではオーファンブロックに含まれていたアイテムは新たに受信したアイテムのリストに移動する。オーファンブロックとは以前はマイナーが作業していたチェーンの一部であったものが、今はもはやマイナーが別のチェーンで作業しているためチェーンの一部ではなくなっているブロックである。
【0036】
アルゴリズム3 チェーンの検証。
入力:ミニブロック b
出力:b に対応するチェーンを検証し,検証に成功したか否かを返す。
1: for b に対応するチェーンの全てのブロック k を古いものから順に
2: if もし k の検証に前に成功しているなら
3: continue
4: end if
5: k 内のトランザクションを調べ,もし無効なものがあれば false を返す。
6: if k が古いなら then
7: 段落0020で述べた,緩い基準で検証を行い,失敗すれば false を返す。
8: else
9: for kと次のブロックの間の全てのミニブロック m について do
10: if もし m の検証に前に成功しているなら
11: continue
12: end if
13: エバリュエーターを実行し,ナンスと評価値が対応するか調べる。対応しなければ false を返す。
14: end for
15: end if
16: end for
17: true を返す。
【0037】
アルゴリズム4 ランダムサーチ。
入力:追加しようとしているブロックのハッシュ値 h, ノードID id, エバリュエーター ev
出力:探索で見つかった最も良い解
1: bests := null, beste = null
2: repeat
3: 解候補 s をランダムに生成する。
4: e := ev(s, hash(h, id))
5: if e が beste より良い then
6: beste := e, bests := s
7: end if
8: h := hash(h, id, s, e)
9: if h が規定の数のゼロビットで始まる then
10: ミニブロックをブロードキャストする。
11: break
12: end if
13: until 新しいミニブロックを受信するまで
14: [bests, beste] を返す。
【0038】
ユーザーの視点からPoSブロックチェーンがどのように役立つのかを説明する。解決してほしい最適化問題を有するクライアントを想定する。当該クライアントはその問題のためのエバリュエーターとサーチャーを実装しその解の料金を決定する。次いで当該クライアントはエバリュエーターとサーチャーと料金を組み合わせてジョブを作成しこれを登録する(アルゴリズム1)。料金はジョブが登録されたら当該クライアントのアカウントから自動的に引き出される。このジョブに想定される計算量はその料金に比例する。マイナーはこの問題の良い解を見つけるべくブロックチェーンで作業する。発見された解はブロックチェーンに登録される。クライアントは料金と引き換えに最良の近似解を得る。出願人はチェーンに新しいブロックを付加しようと試みているマイナーが常に多数存在していると想定している。今まさに最長チェーンのブロックタイムが開始したとする。チェーンは作業すべき多数のジョブを提供する。マイナーはその中から一つのジョブを選ぶ。もし登録されたジョブが存在しない場合は、PoWに戻りブロックのハッシュ値を要求された数のゼロビットで始まるようにするナンスを発見するための空のジョブが挿入される。マイナーはジョブからサーチャーとエバリュエーターを抽出しサーチャーを実行する。サーチャーの実行においてサーチャーはエバリュエーターを何回も呼びだし多数の解候補を作出して評価する。マイナーは良い解の候補を発見したらこれを後に利用するため保持しておく。マイナーは解候補を評価する都度有効なナンスを作りこのナンスを含むミニブロックのハッシュ値を計算する。もしハッシュ値が要求された数のゼロビットで始まっていればマイナーはこの発見されたナンスを含むミニブロック及び直前のブロックをブロードキャストする。新しいミニブロックを付加することに成功したマイナーはPoWと同じように報酬を受け取る。マイナーは、新しいミニブロックが付加されたことに気づいたら、以降このミニブロックを含むチェーンに対し新しいミニブロックを付加するための作業を始める。これは、ミニフォークを避けるためである。ブロックタイムは全てのミニブロックが付加されるまで続く。ブロックタイムが終了した後マイナーは彼が発見した中の最良の解をブロックチェーンに登録する。ジョブの最良の近似解を見つけたノードがその料金を得る。
【0039】
あるクライアントとマイナーが不正にコインを得るために共謀したとする。このマイナーが新しいブロックを付加するためには要求された数のゼロビットで始まるハッシュ値を与える有効なナンスを発見する必要がある。これは本質的にランダムな解候補を取り上げそのハッシュ値を計算することである。問題と解はここでは問題ではない。それゆえクライアントとマイナーに共謀のメリットはない。他方クライアントはジョブを登録する前にそのジョブの計算をし、その解を共謀相手のマイナーに教えることができる。しかし結果としての報酬はそのクライアントが共謀相手に支払うことになるのでメリットはない。クライアントが共謀相手にコインを送ればよいので、これは暗号通貨の通常のトランザクションである。
【0040】
コインの流れとインセンティブの概要は以下のとおりである。ジョブの最良の近似解を発見することのインセンティブとしては、各クライアントはジョブを登録するときに料金を支払う。この料金は登録時に自動的に引き抜かれジョブが完遂されるまでシステムが保持している。登録されたジョブはマイナーによって実行される。ジョブの実行後、システムは各ジョブについてどのマイナーが最良の近似解を発見したかを知る。システムは最良の近似解を発見したマイナーのアカウントに料金を支払う。
新しいミニブロックを付加することに対するインセンティブは以下のとおりである。システムは各ミニブロックのハッシュ値先頭部のゼロビットの数をジョブの料金に応じて決定する(段落0018)。ブロックタイムが始まったら各マイナーは作業するミニブロックを選び対応するサーチャーを実行する。サーチャーの実行において多数のナンスが生成される。ナンスが生成される都度マイナーはそのナンスを含むミニブロックのハッシュ値が要求された数のゼロビットで始まるかをチェックする。要求された数のゼロビットで始まるハッシュ値を与えるナンスを得たマイナーは新しいミニブロックの付加に成功し報酬を受け取る。この報酬の額は要求されたゼロビットの数に応じて決められる(段落0018)。
【産業上の利用可能性】
【0041】
本願発明に係るブロックチェーンシステムは、PoWシステムで無駄に消費されているエネルギーを、任意のユーザーにより登録された問題を解くために利用できるものである。本システムで創成される暗号通貨は、堅固で安全で分散型のプロトコルを備えており、既に普及しているPoWに基づく暗号通貨に代替し得るものである。本システムはいかなる外部組織や外部システムにも依存していない点でグリッドコインよりも優れている。
本システムのユーザーは3種類に分けられる。そしてこれらのユーザーは互いに独立している。第1のユーザーはPoSブロックチェーンを決済の手段として利用する者である。第2のユーザーはその計算力を暗号通貨を稼ぐために使う者である。既存のブロックチェーンはこの2種類のユーザーを持つ。本システムは第3のユーザーをも持つ。第3のユーザーはPoSブロックチェーンを計算インフラとして利用する者である。
本プロトコルにより提供される計算サービスは中間結果がパブリッシュされ得る計算問題にとって有益である。BOINCの普及状況と公共クラウドを鑑みるとこのような計算サービスに対する需要は大きいと期待する。本プロトコルの計算はASIC耐性である。このことは通常のCPUによるマイニングを、より利益の上がるものにする。クラウドコンピューティングと違って、マイニングに用いられるコンピュータは信頼できるものである必要は無い。計算資源が浪費されることが無いので公共機関やより一般的なユーザーが参加することが期待される。このことは本システムを既存のブロックチェーンよりももっと分散化されたものにするであろう。

図1
図2