(57)【要約】【課題】ビットコインと同等にロバストでセキュアな完全分散型のブロックチェーンであって、ビットコインではその維持のために浪費されている計算資源と電力を、任意のユーザー（クライアント）が登録した最適化問題の近似解の探索に利用出来るブロックチェーンシステム及びコンピュータープログラムを提供する。【解決手段】クライアントは解候補の評価プログラムおよび料金をシステムにジョブとして登録する。提案手法を用いたブロックチェーンの維持のために、多数のノードがこのプログラムを実行する。最も良い解を見つけたノードに対し、クライアントがジョブとして登録した料金が支払われる。【選択図】図２
2020188503.tif 000002
【特許請求の範囲】
【請求項１】
ピアツーピアネットワークに参加するノードにより運営されるブロックチェーンシステムであって、
各ノードはジョブを作成しブロックチェーンにブロードキャストする手段と、他のノードから受信したブロックが真正かどうかを検証する手段とを有し、ブロックは一つ前のブロックのハッシュ値とブロードキャストされたジョブの中から選んだジョブと、ナンスからなり、前記ナンスは、当該ブロックに対応するジョブに含まれる最適化問題の解候補とその解候補の評点を結合したものであり、ブロックが真正であるとは、ブロック中のナンスの解候補と評点が対応することであることを特徴とするブロックチェーンシステム。
【請求項２】
請求項１に記載のブロックチェーンシステムであって、
各ノードはミニブロックを作成しブロックチェーンにブロードキャストする手段と、他のノードから受信したミニブロックが真正かどうかを検証する手段とを有し、
ブロックは複数の前記ミニブロックを含み、前記ミニブロックは、ブロックのミニブロック以外の部分のハッシュ値とそのミニブロックを作成したノードのIDとブロードキャストされたジョブの中から選んだ一つのジョブと、ナンスからなり、
前記ミニブロックのハッシュ値が要求された数のゼロビットで始まる数である場合にのみ当該ミニブロックはブロックに含まれることができ、
当該最後のブロックは、要求された全てのジョブに対応するミニブロックの全部が当該最後のブロックに含まれた時にブロックチェーンの末尾に結合することを特徴とするブロックチェーンシステム。
【請求項３】
請求項２に記載のブロックチェーンシステムであって、
前記のジョブは、それを作成したノードのIDと、それを作成したノードが最良の近似解を得ることを希望する最適化問題と、最良の近似解を算出したノードに支払う料金と、エバリュエーターを備えており、前記エバリュエーターは解候補を評価し評点を付すプログラムであり、前記エバリュエーターの出力する評点の最も高い解をブロードキャストしたノードがその最適化問題に設定された料金を得ることを特徴とするブロックチェーンシステム。
【請求項４】
請求項１ないし３に記載のブロックチェーンシステムであって、上記の解候補を探索するために実行したステップ数を決定的に数える機能と、
実行したステップ数を返す機能と、
指定されたステップ数を実行した後に解候補探索のプログラムを強制終了する機能を備えていることを特徴とするブロックチェーンシステム。
【請求項５】
請求項１ないし４に記載のブロックチェーンシステムを実現するためのコンピュータープログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はブロックチェーンシステム、特にクライアントから要請された最適化問題の解探索を行うことにより有効なナンスが得られる仕組みを備えることにより、有効なナンスを見つけるための計算資源を最適化問題の解探索のために使えるブロックチェーンシステムに関する。
【背景技術】
【０００２】
ビットコイン（非特許文献１）の登場以来、ブロックチェーンを利用した暗号通貨が多数開発されてきた。ブロックチェーンとはリスト構造のデータであり、データを次々と新たに追加することができ、過去に登録されたデータの修正が困難となるように設計されている。暗号通貨における全ての取引の履歴はこのブロックチェーンに保存される。ビットコインでは、プルーフオブワーク（proof-of-work、以下PoWと記す) と呼ばれる仕組みにより正しい取引の結果を決めており、コインの二重使用等を防いでいる。PoWにおいては、ネットワークに参加するノードがある計算を行うことで、ノードの持つ計算量に応じた投票権を行使できるような多数決がとられる。なりすましの容易な計算機ネットワークにおいて、PoWは非常にロバストに動作する一方、PoWのために浪費される計算資源および電力が社会問題となっている。２０１８ 年においては、このための電力はアイルランド全体で消費される電力(３.１ギガワット) に及んだ（非特許文献２）。暗号通貨の維持のために浪費される多大な電力の問題を解決するため、PoWの代替として利用できる様々なプロトコルが考案されてきた。これらにより消費される電力を抑えられる一方、完全分散ではないものや、プロトコル特有の問題を抱えているものが多い。PoWのセキュリティの高さと頑健性は他の代替プロトコルより優れており、このためPoWに基づく暗号通貨は依然として最もよく使われている。
【０００３】
ビットコイン（非特許文献１）は、ロバストでセキュアな完全分散型の暗号通貨であり、取引の時間的順序をピアツーピア（以後P２Pと記す）型分散タイムスタンプサーバに記録する。この時間的順序に対して、PoWによる計算量的な証明が与えられる。ネットワークにおいては多数のIPアドレスを確保するのが容易であり、各IPアドレスに対して投票権の与えられる多数決はうまく機能しない。PoWは、このような環境において計算量の多寡に応じて投票権の与えられる多数決を実現するのに使用される。ビットコインの分散タイムスタンプサーバは、データアイテムのブロックにタイムスタンプを刻印し、多数のブロックをリンクトリストとして保存する。このリンクトリストはブロックチェーンと呼ばれる。各ブロックは、複数のデータアイテムと、一つ前のブロックのハッシュ値を含む。新しいブロックがチェーンに追加される毎に、新しいブロックのハッシュ値が計算され、ネットワーク上にブロードキャストされる。ビットコインのPoWでは、このハッシュ値が決められた数のゼロビットで始まる数値を見つける。各ブロックには、ナンスと呼ばれる整数値を格納するエントリが用意されており、ブロック全体のハッシュ値が決められた数のゼロビットで始まるナンスを持つブロックのみが、有効なブロックとして受理される。ネットワークを維持するために、新しいブロックを追加することに成功したノードにインセンティブとして新しいコインが授与される。ブロックを追加しようとするノードのことをマイナーと呼ぶ。善意のマイナーは、そのノードの知る限り最も長いチェーンにブロックを追加しようとする。大半のCPU資源が、善意のマイナーによりブロックの追加に使用される限り、正しい取引を記録したチェーンが最も速く伸びる。計算量に応じて投票権の与えられる多数決はこのようにして実現される。各ブロックが追加されるのにかかる時間をブロックタイムと呼ぶ。ハッシュ値のゼロビットの数は、ブロックタイムの期待値が１０分になるように自動的に調整される。ビットコインは、下記の性質を満たす。
イ）完全分散であり、自立的に調整される。
ロ）ノードや、外部の組織、人などに一切依存しない。
ハ）ブロックに記録されたデータを変更することが困難である。
ニ）なりすましに耐性がある。
ホ）各マイナーが新たなブロックの追加に成功する確率は、そのノードのCPU 資源の量に比例する。
へ）ブロックの正当性は、任意のノードが任意のタイミングで検証できる。
ト）任意のノードが事前登録無しにいつでも参加できる。
しかしながら、ビットコインではマイナーがCPU 資源をPoWのために費やす必要があり、このCPU資源は、ハッシュ値を繰り返し計算するためだけに使われる。これは、CPU資源の浪費である。
【０００４】
ビットコインにより多大な電力が浪費される問題に対処するため、数々のPoWを代替するための手法が提案されてきた。プルーフオブステーク（Proof-of-stake）とプルーフオブバーン（proof-of-burn、非特許文献３）は、最近になって開発された暗号通貨に利用されている手法である。プルーフオブステークは、最初にピアコイン（Peercoin、非特許文献４）において実装された。この手法では、所持する通貨の量や、ノードの古さ、ランダム選択などを組み合わせて次のブロックを追加するノードを選ぶ。所持する通貨の量が多いノードほど頻繁にブロックを追加することができ、従って多くの新しいコインを得ることができる。このプロトコルでは、プロトコルにより選ばれた新しいブロックを追加するノードを信用する必要がある。実質的に、金持ちのノードによりネットワークがコントロールされる。プルーフオブアクティビティー（Proof-of-activity 、非特許文献５）は、PoWとプルーフオブステークの組み合わせである。この手法では、マイナーはPoWと同様の方法で、チェーンに空のブロックヘッダーを追加する。このヘッダーには、プルーフオブステークと同様の方法で複数のノードが指名されており、これらのノード群が新しいブロックに署名する。新しいブロックが全てのノードにより署名されると、このブロックはブロックチェーンの一部として受理される。この手法の利点として、ネットワークをコントロールするためにCPU資源と所持する通貨の両方が必要になること、またCPU資源の消費が純粋なPoWに比べて穏やかであることが挙げられる。プルーフオブバーン（非特許文献３）では、ある特別な宛先に送られたコインが回収不能になるような宛先を用意しておき、ノードが所持しているコインをこの宛先に送った場合に投票権が得られるようにする手法である。この手法では、投票権を持つノードを信用する必要がある。
【０００５】
プルーフオブユースフルワーク（Proof-of-useful-work、非特許文献６）、グリッドコイン（Gridcoin、非特許文献７）、パーマコイン（Permacoin、非特許文献８）では、多数決におけるCPU資源をより意味のある用途に利用できる。プルーフオブユースフルワーク （非特許文献６） では、多数決におけるCPU資源を直交ベクトル問題（Orthogonal Vectors problems）を解くために利用できる。プライムコイン（Primecoin、非特許文献９）では、CPU資源を新たな素数を探すために利用できる。しかしながら、これらの問題を解く社会的な需要がどれほどあるのかは明らかではない。グリッドコイン（非特許文献７）は、プルーフオブリサーチ（proof-of-research） と呼ばれる手法を利用する。この手法では、マイナーがバークレー  オープンリサーチインフラストラクチャー  フォー  ネットワークコンピューティング（Berkeley Open Infrastructure for Network Computing、以下BOINCと記す、非特許文献１０）で計算を行うことにより、マイナーに対しインセンティブを授与する。この手法では、多数決を取るためのCPU資源を非常に意味のある用途に利用することができるが、暗号通貨はBOINCシステムに依存する必要がある。したがって、BOINC システムがダウンすると、グリッドコインは動作しなくなる。
【０００６】
プルーフオブスペース（Proof-of-space、非特許文献１１）は、証明者と検証者の間のプロトコルであり、証明者がある大きなデータをローカルストレージに保存しておく。検証者は、証明者にデータを送るよう指示し、これにより証明者がデータを保存しているか確認する。このプロトコルは、確認に必要な計算量および通信量が小さくなるように設計されている。プルーフオブスペースを完全分散のブロックチェーンにおいて利用するためには、新たなブロックを追加するのに成功したノードを決めるための方法と、各ノードがノードの追加に成功する確率を知る方法が必要になる。ノードの追加に成功する確率は、各ノードが保存しているデータ量に比例する必要がある。これらの実用上の問題については、非特許文献１２で考察されている。論文中で述べられているとおり、プルーフオブスペースおよびそれを利用したブロックチェーンには、固有の弱点がある。まず、マイナーが同一のストレージ領域を利用して複数のチェーンを同時にマイニングできてしまう。また、同一のストレージ領域を利用してわずかに異なったブロックの追加を試みることができる。
【０００７】
特許文献１に係るブロックチェーンシステムは秘密鍵を保有する唯一の特権ノードと公開鍵を保有する複数の通常ノードにより構成されるシステムである。このシステムは秘密鍵で署名値を作ることでブロックを生成する方式であるためブロック生成にともなう計算コストが一般的なブロックチェーンに比べると格段に小さいとのことである。しかし、このシステムにおける特権ノードは信頼される必要がありこのブロックチェーンシステムは分散型ではない。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０２０−８８８６４
【非特許文献】
【０００９】
【非特許文献１】Nakamoto, S.: Bitcoin: A Peer-to-Peer Electronic CashSystem (２００８).
【非特許文献２】Vries, A.: Bitcoin's Growing Energy Problem (２０１８).
【非特許文献３】P４Titan: Slimcoin A Peer-to-Peer Crypto-Currencywith Proof-of-Burn (２０１４).
【非特許文献４】Popper, N.: In Bitcoin's Orbit: Rival Virtual Currencies  Vie for Acceptance (２０１３).
【非特許文献５】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. ４２, No. ３, pp. ３４{３７ (２０１４).
【非特許文献６】Ball, M., Rosen, A., Sabin, M. and Vasudevan,P. N.: Proofs of Useful Work, IACR Cryptology ePrintArchive, Vol. ２０１７, p. ２０３ (２０１７).
【非特許文献７】Halford, R.: Gridcoin: Crypto-currency using Berkeley open infrastructure network computing grid as a proof of work (２０１４).
【非特許文献８】Miller, A., Juels, A., Shi, E., Parno, B. and Katz, J.: Per-macoin: Repurposing bitcoin work for data preservation,Security and Privacy (SP), ２０１４ IEEE Symposium on,IEEE, pp. ４７５{４９０ (２０１４).
【非特許文献９】King, S.: Primecoin: Cryptocurrency with prime num-ber proof-of-work (２０１３).
【非特許文献１０】Anderson, D. P.: BOINC: A System for Public-Resource Computing and Storage, Proceedings of the ５th IEEE/ACM International Workshop on Grid Comput-ing, GRID '０４, Washington, DC, USA, IEEE Computer Society, pp. ４{１０ (２００４).
【非特許文献１１】Dziembowski, S., Faust, S., Kolmogorov, V. and Pietrzak, K.: Proofs of Space, Advances in Cryptology {CRYPTO ２０１５ (Gennaro, R. and Robshaw, M., eds.), Berlin, Heidelberg, Springer Berlin Heidelberg, pp. ５８５{６０５ (２０１５).
【非特許文献１２】Fuchsbauer, G.: Spacemint: A Cryptocurrency Based on Proofs of Space, ERCIM News, Vol. ２０１７ (２０１５).
【発明の概要】
【発明が解決しようとする課題】
【００１０】
本願発明が解決しようとする課題は段落０００３に記載したイ）からト）までの全ての長所を備えており、PoWのために浪費される計算資源を最適化問題の近似解の探索に利用でき、また任意のノードが解候補の評価プログラムであるエバリュエーターを含むジョブを登録することができる完全分散型多数決プロトコルを備えたブロックチェーンシステムを提供することである。
【課題を解決するための手段】
【００１１】
本願発明に係るブロックチェーンシステムのブロックチェーンをプルーフオブサーチ（proof of search）ブロックチェーンと呼び、以下PoSブロックチェーンと記す。また、本願発明に係るブロックチェーンシステムを以下本システムと呼ぶ。
【００１２】
本システムでは、整数値の代わりに、解候補とその評価値を連結したものをナンスとして用いる。有効なナンスを生成するためには、マイナーはエバリュエーターを実行し、何らかの解候補を評価する必要がある。多数決を取る過程において多数のナンスが生成され、従って多数の解候補が評価される。ノード間の共謀を防止するため、本システムでは二つの異なった方法でマイニングノードにインセンティブを提供する。新しいブロックを追加することに成功したマイナーに対しては、PoWと同様に新たなコインを授与する。各ジョブに対し最も良い近似解を見つけたノードに対しては、ジョブを登録したノードが料金を支払う。クライアントはマイニングをすることなくジョブを登録することができ、マイナーはジョブを登録する必要はない。もし、ジョブが全く登録されていなければ、自動的に空のジョブが登録され、これにより本システムはPoW と同等の働きをする。本明細書では、解とは近似解のことを指し、最適化問題の解を得るとは、近似解を得ることを意味する。
【００１３】
エバリュエーターは解探索を行う最適化問題のインスタンスを含み、与えられた解候補の評価値を決定的に計算するプログラムである。実行される環境によらず入力が同じであれば全く同じ出力を与える。ジョブは解探索の実行に必要なデータ全てであり、エバリュエーターもジョブに含まれる。任意のノード(クライアント) は、ジョブをブロックチェーンに登録することで最適化問題の解探索をリクエストする。例えば、あるクライアントが巡回セールスマン問題のあるインスタンスの解探索を行いたい場合には、そのためのエバリュエーターを実装し、これを含むジョブをブロックチェーンに登録する。この場合、都市の巡回順がエバリュエーターの入力であり、経路長が出力となる。本システムにおいては、解候補とその評価値を連結したものをナンスとする。本システムを利用したブロックチェーンが、登録された複数のジョブに含まれたエバリュエーターから次のブロックを追加するためのナンスを生成するためのエバリュエーターを選択する。PoWと同様に、次のブロックを追加するために、マイナーはナンスを含むブロック全体のハッシュ値が指定された個数のゼロビットで始まるようなナンスを探す。本システムでは、PoWと異なり、全てのナンスが有効ではない。本システムにおいては、有効なナンスを生成するために指定されたエバリュエーターを使用して解候補を評価する必要がある。この解候補と正しい評価値の組み合わせが有効なナンスである。次のブロックを追加するためには、マイナーは多数のナンスを生成する必要があり、そのために多数の解候補を評価する必要がある。マイナーが次のブロックを追加するためのナンスを見つけたということは、マイナーが多数の解候補を評価したことの確率的な証明となる。
【００１４】
マイナーが解候補の評価値を計算することの目的は二つある。一つはナンスを含むブロック全体のハッシュ値が指定された個数のゼロビットで始まるような有効なナンスを探し、次のブロックを追加することであり、これによりマイナーはPoWと同様にコインを得ることができる。もう一つの目的は、良い評価値を持つ解を探すことである。本システムにおいては、よい解を見つけるために多数の解候補を評価する必要があると仮定しており、全ノード中で最も良い解を見つけたノードに、クライアントの登録したジョブに含まれる料金が支払われる。以後、あるジョブの最適化問題の解候補の中で最も良い解を最良の近似解と呼ぶ。この解探索を効率化するために、クライアントはサーチャーと呼ぶプログラムを実装し、ジョブに含める。サーチャーは遺伝アルゴリズムのような解探索アルゴリズムの実装であり、マイナーにより実行される。サーチャーは内部的にエバリュエーターを何度も呼び出す。エバリュエーターが呼び出されるごとに、対応するナンスを含むブロック全体のハッシュ値を計算し、それが指定された個数のゼロビットで始まるか調べ、そうである場合は新たなブロックをネットワークにブロードキャストする。サーチャーの実行は新たなブロックがいずれかのノードによってチェーンに追加されるまで継続する。
【００１５】
PoWにおいては、過去の計算結果を再利用することについて考慮する必要はない。本システムにおいては、解候補の評価値の計算量がブロックのハッシュ値の計算量よりも大きいケースがあり、この場合に有効なナンスを異なったノード間で共有することで、一つの有効なナンスに対して複数のハッシュ値を計算する不正が可能になる。これを防止するため、本システムでは評価値とブロックに含まれるナンス以外のデータを関連付ける。エバリュエーターがブロックに含まれるナンス以外のデータのハッシュ値を二つ目の入力とし、この値に応じて出力にわずかな誤差を付加する。各クライアントは、この誤差を付加するアルゴリズムを独自に考案して実装する必要がある。評価値に誤差を付加することで、エバリュエーターをハッシュ関数の代わりに利用していることになるが、本システムにおいては暗号学的ハッシュ関数としての性質はそれほど強く要求されない。エバリュエーターが異なった入力に対し同じ値を出力する頻度はある程度低い必要があるが、ある程度の頻度で同じ値が出力されることは許される。
【００１６】
本システムの最小限の機能を利用するためのブロックチェーンのデータ構造を図１に示す。このデータ構造により、単一の固定されたエバリュエーターを利用できるが、最適化問題の良い近似解を見つけるための仕組みは持たない。以降、様々な機能を付け加える方法について述べていく。
【００１７】
本システムにおいては、下記の性質が成り立つ。
イ）マイナーは良い解を探してそれをクライアントに提供するインセンティブがある。
ロ）クライアントが既に良い解を知っているジョブを登録するインセンティブがない。
ハ）ジョブの登録・実行のためにコストが必要である。(この性質により価値のないジョブの登録が阻止される。)
特に、クライアントが既に良い解を知っているジョブを登録するケースについて対処が必要である。このようなジョブを登録する動機として、以下が考えられる。
（１）新たなブロックを追加する際に有利になる。
（２）新たなブロックを追加して得られるコインの利益の一部が得られる。
（３）良い解を見つけることで利益が得られる。
本システムでは、クライアントがジョブの実行に対して料金を支払うようにすることで、不正を防ぐ。上記項目（１）と（２）に関しては、段落００１５で述べたように、良い解を知っていても、新たなブロックを追加する上で有利にならない。項目（３）に関しては、良い解を見つけることに対する対価はクライアントが支払うため、クライアントが利益を得ることはできない。また、良い解を見つけることに対する対価の受け渡しは、特定のノードを信頼する必要なく自動的に行われる。クライアントにより対価の支払いが確実に行われるようにするため、ジョブの受付時に対価がクライアントの口座から差し引かれる。探索の結果見つかった解はクライアントに安全に通知される。単純にあるノードが見つけた解をネットワークにブロードキャストすると、タイミングによってはこの解を別のノードが盗んでしまうことがあり得る。本システムでは、まず各ノードが見つけた解とノードIDを結合したもののハッシュ値をブロックチェーンに登録し、次のブロック時間に解を登録する。クライアントの払った対価は、最も良い解を見つけたノードに自動的に支払われる。
【００１８】
本システムにおいては各ブロック時間に複数のジョブが実行され得るので、ジョブの実行料金を手頃にすることができる。また、各ノードが最も良い解を見つけることで支払われる対価の期待値が、ノードの計算能力に比例する。単純にブロック時間をジョブの実行料金に比例するように調整する方法だと、少額の実行料金でジョブを登録した場合にブロック時間が短くなってしまう。ブロック時間が短くなるとブロックチェーンがフォークする可能性が大きくなってしまう問題が生じる。これを避けるため、本システムではブロック時間を変化させずに、ブロックの間に複数のミニブロックを設け、各ミニブロックが一つのジョブに対応するようにしている。図２に示すように、ミニブロックは前のブロックのハッシュ値、マイナーのIDおよび対応するナンスからなる。マイナーはいずれかのミニブロックのハッシュ値が指定された個数のゼロビットで始まるような有効なナンスを探す。段落００１２で説明したとおり、有効なナンスは、ミニブロックに対応する問題のインスタンスの解候補とその評価値からなる。そのようなナンスが見つかるたびに、マイナーはナンスを含むミニブロックをブロードキャストする。PoSブロックチェーンの末尾のブロックがチェーンに付加した後の１ブロックタイムの間にブロードキャストされた全てのミニブロックに対応するナンスが見つかると、ミニブロックの前にある最後のブロックがブロックチェーンに加わる。この時新たなコインが発行され、各ミニブロックに対応するナンスを見つけたノード全てに、新たに発行されたコインが支払われる。メッセージ配送遅延により、ネットワーク中の異なったノードがある時間までに受け取ったメッセージの集合は異なる可能性がある。従って、異なったマイナーは、異なった内容のブロックをネットワークに追加するために計算を行っている可能性がある。これはつまり、これらの二つのマイナーが探しているナンスに対応するミニブロックに含まれる、最後のブロックのハッシュ値が異なる可能性があるということである。ミニブロックに起因するブロックチェーンのフォーク(ミニフォーク) を防止し、より大きな数のマイナーが同じブロックをチェーンに追加するための計算を行うようにするため、本システムでは各マイナーは可能な限り最も長いチェーンに対して新たなブロックを追加するために計算を行う。ここで、あるチェーンが別のチェーンより多くのブロックを含むとき、チェーンの長さがより長いとし、またブロックの数が同じ場合、最後のブロックの後にあるミニブロックの数が多いチェーンの長さがより長いとしている。マイナーがミニブロックを受信したときに、そのチェーンがより長い場合は、このチェーンに対して新たなブロックを追加するために計算を行う。マイナーがミニブロックをブロードキャストする際には、最後のブロックとそれ以降のミニブロック全てをブロードキャストする。
【００１９】
本システムでは、エバリュエーターとサーチャーを実行するための環境が必要となる。任意のユーザーがジョブを登録することができるため、ジョブに含まれるプログラムが適切に実装されてない場合に備える必要がある。まず、プログラムが終了しない場合に備え、定められたステップ数の実行の後にプログラムを強制終了する機能を備えている。プログラムは決定的に動作する必要があるため、このステップ数のカウントは正確である必要がある。エバリュエーターがクラッシュした場合、最も低い評価値が返されたものとして扱う。上記をふまえて、ジョブの実行環境は下記の条件を全て満たす。
イ）信頼できないコードを安全に実行できる。
ロ）エバリュエーターを決定的に動作させられる。
ハ）アーキテクチャによらず、実行ステップ数を決定的に数える機能を持つ。
ニ）実行ステップ数を返す。
ホ）指定されたステップの実行の後、実行を中断する。
上記の全ての条件を満たす実行環境を、インタプリタとして実装することは容易である。実行環境中で非決定的な動作をするAPIを提供しないことで、決定的な動作を実現している。
【００２０】
ブロックチェーンに登録されたすべてのエバリュエーターはチェーンを検証するために実行されなければならない。しかし、エバリュエーターのサイズはハッシュ値よりもかなり大きいと想定されるので、全てのエバリュエーターを保持するための貯蔵スペースはブロックチェーンの運営にとってかなり重い負荷となる可能性が高い。貯蔵に要するスペースはチェーン検証の要求を緩和することにより小さくすることができる。参加者が、一定数のブロックを検証すれば十分と考えるなら、古いブロックに記録されているジョブの情報を廃棄できる。図２において古いブロックでは点線より上のハッシュ値のみ検証し点線より下の情報は廃棄し得る。このような緩和した検証方法を採用しても新しいブロックの全てのPoSをやり直すことなく古いブロックのアイテムを改変することは極めて困難である。
【００２１】
第１の発明に係るブロックチェーンシステムは、ピアツーピアネットワークに参加するノードにより運営されるブロックチェーンシステムであって、各ノードはジョブを作成しブロックチェーンにブロードキャストする手段と、他のノードから受信したブロックが真正かどうかを検証する手段とを有し、ブロックは一つ前のブロックのハッシュ値とブロードキャストされたジョブの中から選んだジョブと、ナンスからなり、前記ナンスは、当該ブロックに対応するジョブに含まれる最適化問題の解候補とその解候補の評点を結合したものであり、ブロックが真正であるとは、ブロック中のナンスの解候補と評点が対応することであることを特徴とするものである。
【００２２】
第２の発明に係るブロックチェーンシステムは、第１の発明に係るブロックチェーンシステムであって、各ノードはミニブロックを作成しブロックチェーンにブロードキャストする手段と、他のノードから受信したミニブロックが真正かどうかを検証する手段とを有し、ブロックは複数の前記ミニブロックを含み、前記ミニブロックは、ブロックのミニブロック以外の部分のハッシュ値とそのミニブロックを作成したノードのIDとブロードキャストされたジョブの中から選んだ一つのジョブと、ナンスからなり、前記ミニブロックのハッシュ値が要求された数のゼロビットで始まる数である場合にのみ当該ミニブロックはブロックに含まれることができ、当該最後のブロックは、要求された全てのジョブに対応するミニブロックの全部が当該最後のブロックに含まれた時にブロックチェーンの末尾に結合することを特徴とするものである。
【００２３】
第３の発明に係るブロックチェーンシステムは、第２の発明に係るブロックチェーンシステムであって、前記のジョブは、それを作成したノードのIDと、それを作成したノードが最良の近似解を得ることを希望する最適化問題と、最良の近似解を算出したノードに支払う料金と、エバリュエーターを備えており、前記エバリュエーターは解候補を評価し評点を付すプログラムであり、前記エバリュエーターの出力する評点の最も高い解をブロードキャストしたノードがその最適化問題に設定された料金を得ることを特徴とするものである。
【００２４】
第４の発明に係るブロックチェーンシステムは、第１ないし第３の発明に係るブロックチェーンシステムであって、上記の解候補を探索するために実行したステップ数を決定的に数える機能と、実行したステップ数を返す機能と、指定されたステップ数を実行した後に解候補探索のプログラムを強制終了する機能を備えていることを特徴とするものである。
【００２５】
第５の発明は、第１の発明ないし第４の発明に係るブロックチェーンシステムを実現するためのコンピュータープログラムである。
【発明の効果】
【００２６】
ビットコインと同等にロバストでセキュアな完全分散型のブロックチェーンシステムであって、ビットコインではその維持のために浪費されている計算資源と電力を、任意のユーザー（クライアント）が登録した最適化問題の近似解の探索に利用出来るブロックチェーンシステムが提供される。
【図面の簡単な説明】
【００２７】
【図１】本システムの最小限の機能を利用するためのブロックチェーンのデータ構造の概念図である。
【図２】本システムにおける分散タイムスタンプサーバの概念図である。
【発明を実施するための形態】
【００２８】
つぎに、本発明の実施形態を説明するが、本発明の技術的範囲を逸脱しない範囲において様々な変更や修正が可能であることは言うまでもない。
【実施例１】
【００２９】
あるクライアントが、最適化すべき問題のインスタンスを持っている。このクライアントは、問題のインスタンスに対するエバリュエーターとサーチャーを実装し、このインスタンスの解探索に支払う料金を決める。次に、エバリュエーター、サーチャー、料金を組み合わせてジョブを作り、ブロックチェーンに登録する。この料金は自動的に引き落とされる。このジョブのためにマイナーが使用するCPU資源の期待値は、料金に比例する。マイナーはこの問題の解を探索するためにCPU資源を使う。見つかった解は、ブロックチェーンに登録され、クライアントは支払った料金と引き替えに見つかった解を得る。ここではいつでも十分な数のマイナーがいると仮定する。最も長いチェーンにブロックを追加するために、解探索を行えるジョブは通常複数用意されている。もしジョブを登録するクライアントが居ない場合、通常のPoWにフォールバックし、ミニブロックのハッシュ値が決められた数のゼロビットで始まるようなナンスを見つけるジョブが自動的に追加される。マイナーはサーチャーとエバリュエーターをジョブから抽出し、サーチャーを実行する。サーチャーは、実行中に多数の解候補を生成し、エバリュエーターを何度も呼び出すことでこれらの解候補を評価する。マイナーが良い解候補を見つけた場合、その解候補は保存しておく。マイナーが解候補を評価する際、有効なナンスを生成し、このナンスを含むミニブロック全体のハッシュ値を計算する。もし、このハッシュ値が決められた数のゼロビットで始まる場合、マイナーはこのナンスを含むミニブロックをネットワークにブロードキャストする。新しいミニブロックを追加するのに成功したマイナーは、PoWと同様にコインが授与される。マイナーが、ブロードキャストされた新しいミニブロックを受け取ると、そのマイナーはすぐにそのミニブロックを含む最も長いチェーンに対して新しいミニブロックを追加する処理にとりかかる。これにより、ミニフォークを防ぐことができる。全てのミニブロックが追加されるまでブロックタイムが続く。ブロックタイムの終了後、各マイナーは見つけた中で最も良い解をブロックチェーンに登録する。全てのマイナーの中で最も良い解を見つけたマイナーに対し、ジョブに添付された料金が支払われる。
【００３０】
クライアントとマイナーが共謀することで本来より多くのコインを得ようとするケースについて述べる。マイナーが新しいブロックを追加するためには、ブロック全体のハッシュ値が決められた数のゼロビットで始まるようなナンスを探す必要がある。これは、基本的にはランダムな解を選んでハッシュ値を計算することの繰り返しであり、ジョブの問題やそれに対する解とは関係がない。従って、新しいブロックを追加して得られるコインを得るためにクライアントとマイナーが共謀するメリットはない。一方、クライアントは、あるジョブを登録する前に解を計算しておき、その結果を共謀したマイナーに教えるケースが考えられる。しかし、良い解を見つけたことに対する料金はクライアントから共謀したマイナーに支払われるのであり、これはクライアントからマイナーに送金しているのと同じである。送金は、暗号通貨の基本操作で行うことができる。
【実施例２】
【００３１】
本システムはPoWを強化したものでありPoWと同じ技術を用いている。PoSブロックチェーンはピアツーピアネットワークとして構成される。ネットワーク全体は固定トポロジー（fixed topology）無しに緩やかに結合している。あるノードがネットワークに参加するためにはすでに参加しているノードを一つは知っている必要がある。各ノードは無作為に選ばれたいくつかのノードと繋がっている。メッセージはゴシッププロトコル（gossip protocol）によってブロードキャストされる。各ノードはブロックチェーンの全情報のコピーを保持している。本プロトコルではどのノードもジョブを登録し解を受け取ることができる。これはクライアントの観点からみると大変単純でありアルゴリズム１に示される。あるジョブが実行されその結果として支払いが為されるためには少なくとも４ブロックタイムを要する。下記は最速のシナリオでジョブがどのように処理されるかを示す。
【００３２】
アルゴリズム１ ジョブ実行をリクエストする。
入力：ジョブ実行リクエスト q
出力：探索によって得られた最も良い解 s
１: q をブロックチェーンに登録する。
２: 解 s が得られるまで待つ。
３: s を返す。
【００３３】
あるブロックタイムをブロックタイム０とし、それに続くブロックタイムをブロックタイム１、ブロックタイム２、ブロックタイム３、ブロックタイム４とする。この時、各ブロックタイムにおいて以下のことが為される。
ブロックタイム０においてあるジョブがクライアントによりブロードキャストされる。
ブロックタイム１においてこのジョブの有効性が調べられる。このジョブの料金がクライアントのアカウントから取り出され取り置かれる。このジョブがブロックタイム２で実行されるべく選ばれる。
ブロックタイム２においてこのジョブが実行される。
ブロックタイム３において各ノードはこのジョブについて発見した解のハッシュ値をブロードキャストする。ハッシュ値はブロックチェーンに登録される。
ブロックタイム４においてこのジョブの最良の近似解を発見したノードに料金が支払われる。
ジョブの実行と支払いは全てマイナーにより処理される。マイナーはジョブをパイプラインの方法で処理する。アルゴリズム２はマイナーの観点からジョブがどのように処理されるかを示す。
【００３４】
アルゴリズム２ マイニング。
１: 新たなブロックが（他のノードによって）追加されるまで待つ。
２: 以降新たなブロックが追加されたチェーンについて処理を行う。
３: while true do
４:   // 次のブロック時間に実行されるジョブに関する処理。
５:   未実行の有効なジョブのリストを作成する。
６:   次のブロック時間に実行されるジョブを選択する。
７:   クライアントの口座からこれらのジョブの実行料金を引き落とす。
８:   追加しようとするブロックにこれらのジョブを追加する。
９:   // このブロック時間に実行されているジョブに関する処理。
１０:   新しいトランザクションを検証し，追加しようとするブロックに追加する。
１１:   // ２ブロック時間前(上記のブロック時間の前)に実行されたジョブに関する処理。
１２:   ブロックチェーンに登録された情報(マイナーのIDと解の評価値)を参照し，２ブロック時間前に見つけた解が最も良い解であったか調べる。もしそうであれば，見つけた解をブロックチェーンに追加する。
１３:   // ３ブロック時間前に実行されたジョブに関する処理
１４:   ブロックチェーンに登録された解が真正か調べ，そうであれば支払いの手続きを行う。
１５:   repeat
１６:     追加しようとしているブロックにある完了してないジョブのうち一つを選んで，新しいミニブロックを受信する(もしくは規定数のゼロビットで始まるナンスを見つける)まで実行する。
１７:     (規定数のゼロビットで始まるナンスを見つけた場合には)ハッシュ値をブロックチェーンに登録する。
１８:     (新しいミニブロックを受信した場合には) アルゴリズム３によりチェーンを検証する。
１９:     if 新しいミニブロックが有効で，それに対応するチェーンがより長い場合 then
２０:       以降そのミニブロックに対応するチェーンに対して処理を行う。
２１:       変更後のチェーンに含まれないトランザクションを新規に受信したトランザクションのリストに移動する。
２２:     end if
２３:   until 新しいブロックが追加されるまで
２４: end while
【００３５】
２つのスレッドが並列して走っており、その一つはアルゴリズム２である。もう一つのスレッドでは新しく受信されたアイテムはアイテムリストの最後尾に付加される。ブロックチェーンにアイテムを登録するためには、アイテムはネットワークにブロードキャストされなければならない。マイナーに受信されたアイテムはアイテムリストの末尾に付加される。アルゴリズム２が始まると、マイナーはまず作業するチェーンを選ぶ。(２行目)。有効なチェーンが複数存在し得る。それらは、みな同じブロックから始まっている。ある特定のブロックの並び、あるいはチェーンは、末尾のブロックにより特定される。マイナーは最初に受信されたブロックに伴われたチェーンについて作業を始める。
５行目でクライアントの口座の残高がチェックされる。
８行目で、全てのマイナーが同一のジョブセットで作業するようにするために、どのジョブセットにするかについての合意形成と、ゼロビットの数についての合意形成が作業開始前に為されなければならない。
１６行目で、サーチャーが段落００１９で説明した実行環境で実行される。サーチャーの一例としてアルゴリズム４でランダムサーチャールゴリズムが示される。段落００１４で説明したようにこのサーチャーは内部的に対応するエバリュエーターを呼び出す。エバリュエーターは呼び出される都度自動的にエバリュエーションの結果とナンスを生み出し、そのハッシュ値が要求された数のゼロビットで始まるかどうかをチェックする。もしそうであれば新しいミニブロックがブロードキャストされサーチャーの実行が終了する。サーチャーの実行は新しいミニブロックが他のマイニングノードによって付加された時も終了する。新しいブロックが付加された時そのブロックの最後のミニブロックも付加されることに留意されたい。
１８行目で、ミニブロックを伴うチェーンが検証される。このプロセスはアルゴリズム３に示されている。このアルゴリズムは段落００１８と段落００２０で説明されている通りに作動する。ノードが以前検証したチェーンに含まれていたブロックあるいはミニブロックと厳密に同一のブロックあるいはミニブロックは検証する必要は無い。
２１行目ではオーファンブロックに含まれていたアイテムは新たに受信したアイテムのリストに移動する。オーファンブロックとは以前はマイナーが作業していたチェーンの一部であったものが、今はもはやマイナーが別のチェーンで作業しているためチェーンの一部ではなくなっているブロックである。
【００３６】
アルゴリズム３ チェーンの検証。
入力：ミニブロック b
出力：b に対応するチェーンを検証し，検証に成功したか否かを返す。
１: for b に対応するチェーンの全てのブロック k を古いものから順に
２:   if もし k の検証に前に成功しているなら
３:     continue
４:   end if
５:   k 内のトランザクションを調べ，もし無効なものがあれば false を返す。
６:   if k が古いなら then
７:     段落００２０で述べた，緩い基準で検証を行い，失敗すれば false を返す。
８:   else
９:     for kと次のブロックの間の全てのミニブロック m について do
１０:       if もし m の検証に前に成功しているなら
１１:         continue
１２:       end if
１３:     エバリュエーターを実行し，ナンスと評価値が対応するか調べる。対応しなければ false を返す。
１４:     end for
１５:   end if
１６: end for
１７: true を返す。
【００３７】
アルゴリズム４ ランダムサーチ。
入力：追加しようとしているブロックのハッシュ値 h， ノードID id， エバリュエーター ev
出力：探索で見つかった最も良い解
１: bests := null， beste = null
２: repeat
３:   解候補 s をランダムに生成する。
４:   e := ev(s， hash(h， id))
５:   if e が beste より良い then
６:     beste := e， bests := s
７:   end if
８:   h := hash(h， id， s， e)
９:   if h が規定の数のゼロビットで始まる then
１０:     ミニブロックをブロードキャストする。
１１:     break
１２:   end if
１３: until 新しいミニブロックを受信するまで
１４: [bests， beste] を返す。
【００３８】
ユーザーの視点からPoSブロックチェーンがどのように役立つのかを説明する。解決してほしい最適化問題を有するクライアントを想定する。当該クライアントはその問題のためのエバリュエーターとサーチャーを実装しその解の料金を決定する。次いで当該クライアントはエバリュエーターとサーチャーと料金を組み合わせてジョブを作成しこれを登録する(アルゴリズム１)。料金はジョブが登録されたら当該クライアントのアカウントから自動的に引き出される。このジョブに想定される計算量はその料金に比例する。マイナーはこの問題の良い解を見つけるべくブロックチェーンで作業する。発見された解はブロックチェーンに登録される。クライアントは料金と引き換えに最良の近似解を得る。出願人はチェーンに新しいブロックを付加しようと試みているマイナーが常に多数存在していると想定している。今まさに最長チェーンのブロックタイムが開始したとする。チェーンは作業すべき多数のジョブを提供する。マイナーはその中から一つのジョブを選ぶ。もし登録されたジョブが存在しない場合は、PoWに戻りブロックのハッシュ値を要求された数のゼロビットで始まるようにするナンスを発見するための空のジョブが挿入される。マイナーはジョブからサーチャーとエバリュエーターを抽出しサーチャーを実行する。サーチャーの実行においてサーチャーはエバリュエーターを何回も呼びだし多数の解候補を作出して評価する。マイナーは良い解の候補を発見したらこれを後に利用するため保持しておく。マイナーは解候補を評価する都度有効なナンスを作りこのナンスを含むミニブロックのハッシュ値を計算する。もしハッシュ値が要求された数のゼロビットで始まっていればマイナーはこの発見されたナンスを含むミニブロック及び直前のブロックをブロードキャストする。新しいミニブロックを付加することに成功したマイナーはPoWと同じように報酬を受け取る。マイナーは、新しいミニブロックが付加されたことに気づいたら、以降このミニブロックを含むチェーンに対し新しいミニブロックを付加するための作業を始める。これは、ミニフォークを避けるためである。ブロックタイムは全てのミニブロックが付加されるまで続く。ブロックタイムが終了した後マイナーは彼が発見した中の最良の解をブロックチェーンに登録する。ジョブの最良の近似解を見つけたノードがその料金を得る。
【００３９】
あるクライアントとマイナーが不正にコインを得るために共謀したとする。このマイナーが新しいブロックを付加するためには要求された数のゼロビットで始まるハッシュ値を与える有効なナンスを発見する必要がある。これは本質的にランダムな解候補を取り上げそのハッシュ値を計算することである。問題と解はここでは問題ではない。それゆえクライアントとマイナーに共謀のメリットはない。他方クライアントはジョブを登録する前にそのジョブの計算をし、その解を共謀相手のマイナーに教えることができる。しかし結果としての報酬はそのクライアントが共謀相手に支払うことになるのでメリットはない。クライアントが共謀相手にコインを送ればよいので、これは暗号通貨の通常のトランザクションである。
【００４０】
コインの流れとインセンティブの概要は以下のとおりである。ジョブの最良の近似解を発見することのインセンティブとしては、各クライアントはジョブを登録するときに料金を支払う。この料金は登録時に自動的に引き抜かれジョブが完遂されるまでシステムが保持している。登録されたジョブはマイナーによって実行される。ジョブの実行後、システムは各ジョブについてどのマイナーが最良の近似解を発見したかを知る。システムは最良の近似解を発見したマイナーのアカウントに料金を支払う。
新しいミニブロックを付加することに対するインセンティブは以下のとおりである。システムは各ミニブロックのハッシュ値先頭部のゼロビットの数をジョブの料金に応じて決定する（段落００１８）。ブロックタイムが始まったら各マイナーは作業するミニブロックを選び対応するサーチャーを実行する。サーチャーの実行において多数のナンスが生成される。ナンスが生成される都度マイナーはそのナンスを含むミニブロックのハッシュ値が要求された数のゼロビットで始まるかをチェックする。要求された数のゼロビットで始まるハッシュ値を与えるナンスを得たマイナーは新しいミニブロックの付加に成功し報酬を受け取る。この報酬の額は要求されたゼロビットの数に応じて決められる（段落００１８）。
【産業上の利用可能性】
【００４１】
本願発明に係るブロックチェーンシステムは、PoWシステムで無駄に消費されているエネルギーを、任意のユーザーにより登録された問題を解くために利用できるものである。本システムで創成される暗号通貨は、堅固で安全で分散型のプロトコルを備えており、既に普及しているPoWに基づく暗号通貨に代替し得るものである。本システムはいかなる外部組織や外部システムにも依存していない点でグリッドコインよりも優れている。
本システムのユーザーは３種類に分けられる。そしてこれらのユーザーは互いに独立している。第１のユーザーはPoSブロックチェーンを決済の手段として利用する者である。第２のユーザーはその計算力を暗号通貨を稼ぐために使う者である。既存のブロックチェーンはこの２種類のユーザーを持つ。本システムは第３のユーザーをも持つ。第３のユーザーはPoSブロックチェーンを計算インフラとして利用する者である。
本プロトコルにより提供される計算サービスは中間結果がパブリッシュされ得る計算問題にとって有益である。BOINCの普及状況と公共クラウドを鑑みるとこのような計算サービスに対する需要は大きいと期待する。本プロトコルの計算はASIC耐性である。このことは通常のCPUによるマイニングを、より利益の上がるものにする。クラウドコンピューティングと違って、マイニングに用いられるコンピュータは信頼できるものである必要は無い。計算資源が浪費されることが無いので公共機関やより一般的なユーザーが参加することが期待される。このことは本システムを既存のブロックチェーンよりももっと分散化されたものにするであろう。
【図１】
2020188503.tif 000003
【図２】
2020188503.tif 000004