【解決手段】システムにおいて、マイニングプールを管理する分散処理サーバは、選択部と、第1送信部と、受信部と、第2送信部と、支払部とを備える。選択部は、第1分散型取引台帳を選択する。第1送信部は、第1分散型取引台帳のマイニングで用いる、第1演算方法の指示と、第1データとをクライアント装置に送信する。受信部は、演算結果をクライアント装置から受信する。第2送信部は、演算結果を第1分散型取引台帳のネットワークに送信する。支払部は、第1種類の報酬を獲得した場合、報酬をクライアント装置に分配し、クライアント装置に報酬として支払う第2種類の報酬の種類と第1種類の報酬の種類とが異なるとき、分配した第1種類の報酬の量に相当する量の第2種類の報酬をクライアント装置に支払う。
【発明を実施するための形態】
【0014】
以下に、図面を参照して本発明の実施の形態を詳細に説明する。
図1は、本実施形態に係る分散処理サーバが適用されるブロックチェインネットワークの概要を説明する図である。
図1(a)はブロックチェインネットワークの構成を示す概略図である。
図1(a)に示すように、ブロックチェインネットワークは、本実施形態に係る分散処理サーバ(マイニングサーバ)10と、ブロックチェインネットワークに参加してマイニング(プルーフオブワーク)作業を行うマイナーが用いるマイナー装置30と、ブロックチェインネットワークに直接参加(接続)せずマイニングプールに参加してマイニング作業を行うプール参加者が使用するクライアント装置50と、上記マイニングプールを提供するプールサーバ40と、インターネットに接続されている。
ブロックチェインには、仮想通貨に用いられるものを含め、多くのものが存在している。仮想通貨にも、代表的なビットコインの他に、オルトコインと呼ばれるものが知られている。オルトコインの代表的なものとして、Ethereum(イーサリアム)やMonacoin(モナコイン)などが知られている。
【0015】
インターネット上においてはビットコインを運営、機能させるためのブロックチェインネットワークや、各種オルトコインの運営、機能させるためのブロックチェインネットワークが存在する。
各ブロックチェインネットワークには、それぞれマイナー装置30や、プールサーバ40が多く接続されて、プルーフオブワーク作業を行っている。
例えば、ブロックチェインネットワークAには、マイナー装置30Aや、マイニングプールを形成するプールサーバ40A及びクライアント装置50A(50A−1、50A−2・・)が含まれる。
また、ブロックチェインネットワークBには、マイナー装置30Bや、マイニングプールを形成するプールサーバ40B及びクライアント装置50B(50B−1、50B−2・・)が含まれる。
ブロックチェインネットワークは、中央集権的なサーバを持たないP2P(Peer to Peer)ネットワークである。ブロックチェインは、ブロックチェインネットワークに属するそれぞれのマイナー装置が有するストレージやサーバ装置、プールサーバ40に備えるストレージに、同じものが格納されている。ブロックチェインが、分散型取引台帳と呼ばれる所以である。
【0016】
図1(b)は、ブロックチェインネットワークに属する装置が有するブロックチェインを示す図である。
図1(b)を用いて、ブロックチェインの概略を説明する。
ブロックチェインは、逐次発生する取引情報などをブロック単位で接続することにより成立する。
【0017】
すなわち、ブロックチェイン技術では、取引記録や契約など、内容を保証したいデータをブロックという単位で扱う。このブロックを所定の方法で一繋ぎ(チェイン状)に接続したものがブロックチェインである。ブロックチェインの生成にあたってはハッシュ関数が用いられており、ハッシュ関数は任意長の任意データに対して固定長のハッシュ値を求めるための関数である。
ハッシュ関数には一方向性という特徴があり、任意データからハッシュ値を求めることは容易であるが、逆に、ハッシュ値から元のデータを復元することは現実的には不可能であるとされる。
【0018】
ブロックチェインに対して新たなブロックを接続するためには、チェインにおける直前のブロックのハッシュ値と、接続すべき新たなブロックの(トランザクション)データ、Nonce値と呼ばれる数値(例えば32bit固定長数値)を接続したデータに対してハッシュ値(例えば、SHA−256ハッシュ)を計算した時にその上位数ビット(例えば10Bit)が0となるような、Nonce値を求める。
SHA−256ハッシュ値は、ほぼランダムな256bitの値となるため、あるNonce値を選んだ時に上位10bitが0となる確率は1024分の1となるが、上記したハッシュ関数の一方向性によって、基本的に、総当たりをするより他に方法がない。この総当たりを行って、ハッシュ値の上位ビットが0となるNonce値を見つけ、報告することをマイニングと呼ぶ。
その結果、
図1(b)を示すように、ブロックチェインの各ブロックは、そのブロックのデータと、直前のブロックのハッシュ値と、Nonce値と、を含んでいる。
【0019】
このようなブロックチェインは、各ブロックが直前のブロックのハッシュ値を持っているため、先端の(起点となる最古の)ブロックから順に辿ることで、全てのブロックの正当性を確認することが出来る。
なお途中のブロックを改ざんしようとすると、そのブロック以降全てのブロックのNonce値を再計算する必要があるが、上記した総当たりを全てのブロックについて行うしかないため、計算量的に不可能である。
このような特徴を有することで、ブロックチェインの信頼性は担保されている。
なお、Nonce値を求めること自体には、非常な困難が伴うが、一度見つけられたNonce値を用いれば、ブロックチェインに対して新たにブロックを追加する処理は非常に容易である。
【0020】
ところが、Nonce値の自由度が32bitであるにも係わらず、当たりとなる確率が1024分の1であるため、ハッシュ値の上位ビットを0とするNonce値は複数あり得る。よって、同時にマイニングを行っているクライアント装置が複数あることを考慮すると、複数のブロックが正しいものとして報告される場合がある。
この場合、ブロックチェインのシステムとしては、一旦両方を正しいものと仮定した後、長く伸びたチェインを正しいものとし、短いチェインを分岐(フォーク)として切り捨てることを行う。
つまり、不正なデータをブロックチェインに挿入したい攻撃者は、不正なデータを先端に繋いだ後、さらにそこに繋がるブロックを次々につないでチェインを伸ばし続ける必要がある。
【0021】
しかし、このような攻撃は、マイニングを行っている正当なクライアント装置全体の演算資源を上回る演算資源(全体の演算資源の51%)があれば十分である。
逆に言えば、ブロックチェインの安全性を保つには、正当なクライアント装置による演算資源を十分に確保することが必要である。
そのため、例えばビットコインの場合には、マイニングに成功したクライアント装置にビットコインを報酬として支払うことで、マイニングを行うユーザを集め、正当なクライアント装置による演算資源を確保している。
ビットコイン等、すでに市場が十分に拡がっているブロックチェインのシステムであれば、マイニングを行う正当なクライアント装置が十分な数あり、これを上回る演算資源を用意することはもはや現実的ではない。
しかしながら、新規にブロックチェインを用いた仮想通貨を立ち上げる場合や、仮想通貨以外のブロックチェインのシステムであり報酬を設定できないことで、マイニングを行うクライアント装置が十分に確保出来ない状況では、悪意をもった一組織(一主体)が比較的簡単に51%を超える演算資源を確保できてしまう可能性がある。
このような状況において、既存のマイニングプールを活用することで、必要な演算資源を容易に確保することができ、これは非常に有用である。
【0022】
本実施形態に係る分散処理サーバ(マイニングサーバ)10は、
図1(a)に示したプールサーバ40と同様にマイニングプールを構成する。
ただし、後述するが、本実施形態の分散処理サーバ(マイニングサーバ)10は、単一のブロックチェインのみならず、複数のブロックチェインに対するプールサーバとして機能しうる。
分散処理サーバ(マイニングサーバ)10は、複数の異なるブロックチェインのP2Pネットワークに参加し、それぞれのブロックチェインの情報を取得する。
その結果、分散処理サーバ(マイニングサーバ)10に接続するクライアント装置は、複数の異なるブロックチェインに対するマイニングに参加することが出来る。
【0023】
図2は、マイニングプールを含む本実施形態に係るブロックチェインネットワークを説明する図である。
図2を用いて、マイニングプールについて概説する。
ブロックチェインネットワークは、インターネットに接続されている複数のマイナー装置が相互に接続されてP2Pネットワークを形成することによって構成される。
また、本実施形態のブロックチェインネットワークは、マイニングプールを管理するプールサーバ40を含んでいる。
ブロックチェイン(仮想通貨)の技術では、報酬を目的としたマイニングは、大規模な演算資源を有する主体によって組織的且つ大々的に行われている一方で、そのような大規模な演算資源を有さない個人のユーザを集め、ユーザ間で探索範囲を分担してマイニングを行い、得られた報酬を山分けするマイニングプールと呼ばれる仕組みが存在している。
プールサーバ40は、各クライアント装置に対して、ブロックチェインにおける前ブロックのハッシュ値、現ブロックのデータ(トランザクションデータ)及び、各クライアント装置に割り振られたNonce値の探索範囲を送信する。
データを受け取ったクライアント装置では、探索範囲内のNonce値の中から正解となるNonce値を探索する。
正解となるNonce値が発見された場合には、発見したNonce値をプールサーバ40に送信する。
【0024】
このNonce値の発見が、ブロックチェインネットワーク内を通じて最初の発見であった場合には、プールサーバ40の運営者に対して報酬の仮想通貨が支払われるが、マイニングプールの場合、得られた報酬は参加者で山分けされることが多い。
例えば、Nonce値が32bitだとすると、この先頭のブロックのNonce値のうち、0〜99をAさん(のクライアント装置)、100〜199をBさん(のクライアント装置)、200〜299をCさん(のクライアント装置)のように分担して総当たりの探索を行わせる。
そして、マイニングプールの参加者のうち一人でもマイニングに成功すると(正解となるNonce値を発見すると)、マイニングプール全体に報酬が得られる。
マイニングプールは、このマイニングプール全体で得た報酬を、参加者全員で山分けすることで成立している。
【0025】
図3は、本実施の形態のシステムに係る分散処理サーバの特徴を説明する図である。
上記したように、本実施形態の分散処理サーバ(マイニングサーバ)10は、基本的に、
図2に示したプールサーバ40と同様の機能を有する。
分散処理サーバ(マイニングサーバ)10は、各クライアント装置50(50−1、50−2、50−3)に対して、ブロックチェインにおける前ブロックのハッシュ値、現ブロックのデータ(トランザクションデータ)及び、各クライアント装置に割り振られたNonce値の探索範囲を送信する。さらに、そのブロックチェインで用いられるハッシュ関数の指定も行う。
データを受け取ったクライアント装置50では、指定されたハッシュ関数とデータを用いて探索範囲内のNonce値の中から正解となるNonce値を探索する。
正解となるNonce値が発見された場合には、発見したNonce値をプールサーバ40に送信し、仮想通貨の報酬を受け取って参加者に分配することを目的とする。
【0026】
しかしながら、本実施形態の分散処理サーバ(マイニングサーバ)10は、何れか特定のブロックチェインネットワークにのみ属するのはなく、
図3に示すように、例えば、ブロックチェインネットワークA、ブロックチェインネットワークB、ブロックチェインネットワークCに属し、これら全てのブロックチェインネットワークについてブロックチェインを格納し、また、新たなブロックを取得している。
そして、本実施形態の分散処理サーバ(マイニングサーバ)10は、クライアント装置50(50−1、50−2、50−3)に対して、複数のブロックチェインに係るデータやハッシュ値を選択的に送付可能である。
本実施形態の分散処理サーバ(マイニングサーバ)10は、本来独立して機能するこれらのブロックチェインネットワークを接続する装置であると言える。
なお、クライアント装置は、本実施形態の分散処理サーバ(マイニングサーバ)10ではなく、他のブロックチェインネットワークに属するプールサーバ40A、40Bに接続、参加することも可能であるが、本実施形態の分散処理サーバ(マイニングサーバ)10に接続することで、複数のブロックチェインに間接的に参画して、そのメリットを享受することが出来る。
【0027】
本実施形態の分散処理サーバ(マイニングサーバ)10は、複数のブロックチェインネットワークから、所定の基準に基づいて、マイニングプールの参加者にとって有利な(望ましい)ブロックチェインを選択してマイニングを行わせる。
マイニングプールの参加者たちは、分散処理サーバ(マイニングサーバ)10から与えられたデータやハッシュ値に基づいてマイニングを行い、誰か一人でもマイニングに成功した場合には(正解となるNonce値を発見した場合には)、それについてブロックチェインネットワークから得られる報酬(仮想通貨)を山分けすることが出来る。
【0028】
また、後述するように、本実施形態においては、報酬としてマイニングを行ったブロックチェインに係る仮想通貨ではなく、異なる仮想通貨がマイニングプールの参加者に対して支払われてもよい。
つまり、マイニングプールの参加者たちは、ビットコインやその他の仮想通貨のマイニングを行い、誰か一人でもマイニングに成功した場合には、報酬として、マイニングしている通貨とは異なる例えばモナコインを山分けする。
【0029】
このようなマイニングプールであれば、マイニングを行うユーザにとっては何を報酬とするかが問題であり、何をマイニングしているかはユーザが関知するものではないため、マイニングプールを管理するサーバで最も効率の良いブロックチェインを選択してクライアント装置に送信することで、効率のよいマイニングができることになる。
すなわち、複数のブロックチェインのシステムが存在していて、それぞれにマイニングについて報酬が設定されている場合、その中で最も効率が良いものを選択して採掘を行う。
どのブロックチェインについてマイニングを行うことが効率的であるかを決定するためには、例えば、後述するように発掘金額の期待値を考慮することが出来る。
【0030】
ただし、本実施形態のマイニングシステムにおいて、マイニングの対象となるブロックチェインは、仮想通貨のためのものに限定されることはない。
例えば、ブロックチェインネットワークCは、例えば、仮想通貨以外のためのブロックチェインであり、所謂仮想通貨による報酬が支払われることはない。
本実施形態のマイニングシステムは、このような報酬を伴わないブロックチェインについても、十分な演算資源を提供することを一つの目的としているからである。
また、ブロックチェインは、特定の管理者を持たないオープンなP2Pネットワークで実現される仕組みであるが、昨今では、企業が運営するクライアントサーバ型のブロックチェインも現れている。
【0031】
ブロックチェインなどに用いられるブロックチェインが、誰でも参加可能なパブリックチェインであるのに対し、企業通貨は、登録したマイナーのみがマイニングを行えるプライベートチェインである。マイニングプールと同様に、全ブロックのハッシュ値と現ブロックのデータ、探索範囲を登録ユーザの端末に送付してNonceを探索させることで成立しうる。マイニングの報酬は、企業によって決定される
本実施形態のマイニングシステムは、このような企業が運営する仮想通貨システムにも適用可能とし、このような仮想通貨システムに十分な演算資源を提供することを一つの目的としている。
また、仮想通貨をマイニングの対象とする場合でも、必ずしも発掘可能金額の期待値だけを基準に決定するのではない。
本実施形態のマイニングシステムは、立ち上げから間もなく、接続されたブロックの数が少ないことから悪意あるフォークのリスクがあるブロックチェインについて、十分な演算資源を提供することを一つの目的としているからである。
【0032】
図4は、本実施形態に係る分散処理サーバの機能構成を示す図であり、(a)はハードウェアによる機能構成を示す図、(b)はソフトウェアによる機能構成を示すブロック図である。
図4(a)に示すように、分散処理サーバとしてのマイニングサーバ10は、装置全体の制御を行う汎用のオペレーティングシステムを実行するとともに分散処理サーバ(マイニングサーバ)10の機能を実現するプログラムを実行するCPU(Central Processing Unit)11と、CPU11による処理のために各種のプログラムや一時データ、変数が展開されるRAM(Random Access Memory)12と、プログラムやデータが格納されるHDD(Hard Disk Drive)13や不図示のROM(Read Only Memory)と、分散処理サーバ(マイニングサーバ)10をネットワークに接続するためのネットワークI/F14と
、を備えている。
【0033】
また、
図4(b)に示すように、CPU11は、処理部として、ブロックデータ受信処理部20と、通貨情報受信処理部21と、対象通貨選択処理部22と、探索指示送信処理部23と、Nonce受信処理部24と、Nonce送信処理部25と、報酬支払処理部26と、を実行する。
また、記憶部には、ブロックデータ記憶部27、通貨情報記憶部28、前ブロックハッシュ値記憶部29がそれぞれ設定されており、上記の各処理部によって各記憶部に対してデータが格納され、あるいはデータが読み出される。
ブロックデータ記憶部27には、本実施形態の分散処理サーバ(マイニングサーバ)10が取り扱う仮想通貨の最新のブロックデータが格納される。
また、通貨情報記憶部28には、本実施形態の分散処理サーバ(マイニングサーバ)10が取り扱う仮想通貨についてのレート情報等が格納される。
前ブロックハッシュ値記憶部29には、本実施形態の分散処理サーバ(マイニングサーバ)10が取り扱う仮想通貨について、最新のブロックよりも前のブロックのハッシュ値が格納される。
ブロックデータ記憶部27、通貨情報記憶部28、前ブロックハッシュ値記憶部29は、RAM12、HDD13の何れに設定されてもよい。
すなわち、ブロックチェインネットワークから取得される最新のブロックデータや、レート情報、前ブロックのハッシュ値などは、RAM12に保持される一時データとしてのみ扱われても良いし、HDD13にファイルとして格納された上でRAM上にロードされてもよい。
【0034】
各処理部について概説する。
ブロックデータ受信処理部20は、本実施形態の分散処理サーバ(マイニングサーバ)10が取り扱う仮想通貨について、新たに発生したブロックデータ(トランザクションデータ)を、ネットワークI/F14を介してブロックチェインネットワークから取得して、記憶部に設定されたブロックデータ記憶部27に格納する。
通貨情報受信処理部21は、ネットワークI/F14を介して、インターネット上に存在する仮想通貨の取引所や販売所のサーバ装置から各仮想通貨のレート情報等を取得して通貨情報記憶部28に格納する。
対象通貨選択処理部22は、通貨情報記憶部28に格納されているレート情報等に応じた所定条件に基づいて、マイニングプールによってマイニングを行う仮想通貨を選択する処理を行う。
【0035】
探索指示送信処理部23は、ネットワークI/F14を介して、対象通貨選択処理部22によって選択されたマイニング対象の仮想通貨について、最新のブロックデータ、前ブロックのハッシュ値、Nonce値の探索範囲をマイニングプールの各クライアント装置50に送信する。
Nonce受信処理部24は、ネットワークI/F14を介して、マイニングプールのクライアント装置50(探索に成功した場合)、あるいは、ブロックチェインネットワークに属する他のマイナー装置や他のプールサーバ40から、正解とされるNonce値を受信する。
そして、そのNonce値を用いて、最新のブロックデータを分散処理サーバ(マイニングサーバ)10が保持するブロックチェインに結合する処理を行う。
【0036】
Nonce送信処理部25は、Nonce受信処理部24が、マイニングプールのクライアント装置50から正解となるNonce値を受信した場合に、ネットワークI/F14を介して、そのNonce値を、ブロックチェインネットワークに属する他のマイナー装置や他のプールサーバ40に送信する処理を行う。
それをすることで、分散処理サーバ10(マイニングサーバ)の運営者には報酬を受け取る権利が発生し、正解となるNonce値の送信がブロックチェインネットワークの中で最も早ければ、実際に報酬を受け取ることが出来る。
報酬支払処理部26は、マイニングプールの参加者に対して報酬の支払い(山分け)を行う処理部であり、各仮想通貨について参加者が保有するウォレットに対して送金処理を行う。これは、各仮想通貨の取引所に対する送金依頼として行われる。
【0037】
図5は、本実施形態の分散処理サーバ(ブロックデータ受信処理部)が実行するブロックデータ受信処理を説明するフローチャートである。
ブロックデータ受信処理部20は、ステップS101において、ブロックデータを受信したか否かを判定する。
ブロックデータを受信したと判定した場合(ステップS101でYes)、ブロックデータ受信処理部20は、ステップS102において、ブロックチェインネットワークAに係るブロックデータAを受信したか否かを判定する。
【0038】
ブロックデータAを受信したと判定した場合(ステップS102でYes)、ブロックデータ受信処理部20は、ステップS103において、受信したブロックデータAを、記憶部におけるブロックデータA用のブロックデータ記憶部27Aに格納する。
ブロックデータAを受信したと判定しなかった場合(ステップS102でNo)、ブロックデータ受信処理部20は、ステップS104において、ブロックチェインネットワークBに係るブロックデータBを受信したか否かを判定する。
ブロックデータBを受信したと判定した場合(ステップS104でYes)、ブロックデータ受信処理部20は、ステップS105において、受信したブロックデータBを、記憶部におけるブロックデータB用のブロックデータ記憶部27Bに格納する。
ブロックデータBを受信したと判定しなかった場合(ステップS104でNo)、ブロックデータ受信処理部20は、ステップS106において、ブロックチェインネットワークCに係るブロックデータCを受信したか否かを判定する。
【0039】
ブロックデータCを受信したと判定した場合(ステップS106でYes)、ブロックデータ受信処理部20は、ステップS107において、受信したブロックデータCを、記憶部におけるブロックデータC用のブロックデータ記憶部27Cに格納する。
なお、分散処理サーバ(マイニングサーバ)10が参加し、ブロックデータ(トランザクション)を受け取るブロックチェインネットワークは、ブロックチェインネットワークA〜Cの3つに限らず、これもよりも多くともよく、また2つのネットワークでもよい。ただし、本実施形態の趣旨からは、分散処理サーバ(マイニングサーバ)10は少なくとも2つのブロックチェインネットワークに参加している必要がある。
【0040】
図6は、本実施形態の分散処理サーバ(Nonce受信処理部)が実行するNonce値(Nonceデータ)受信処理を説明するフローチャートである。
Nonce受信処理部24は、ステップS111において、Nonce値(Nonceデータ)を受信したか否かを判定する。
Nonce値を受信したと判定した場合(ステップS111でYes)、Nonce受信処理部24は、ステップS112において、ブロックチェインネットワークAに係るNonce値Aを受信したか否かを判定する。
Nonce値Aを受信したと判定した場合(ステップS112でYes)、Nonce受信処理部24は、ステップS113において、受信したNonce値Aを用いて、ブロックデータ記憶部27Aに格納されているブロックデータAを、ブロックチェインAに結合する処理を行う。
Nonce値Aを受信したと判定しなかった場合(ステップS112でNo)、Nonce受信処理部24は、ステップS114において、ブロックチェインネットワークBに係るNonce値Bを受信したか否かを判定する。
【0041】
Nonce値Bを受信したと判定した場合(ステップS114でYes)、Nonce受信処理部24は、ステップS115において、受信したNonce値Bを用いて、ブロックデータ記憶部27Bに格納されているブロックデータBを、ブロックチェインBに結合する処理を行う。
Nonce値Bを受信したと判定しなかった場合(ステップS114でNo)、Nonce受信処理部24は、ステップS116において、ブロックチェインネットワークCに係るNonce値Cを受信したか否かを判定する。
Nonce値Cを受信したと判定した場合(ステップS116でYes)、Nonce受信処理部24は、ステップS117において、受信したNonce値Cを用いて、ブロックデータ記憶部27Cに格納されているブロックデータCを、ブロックチェインCに結合する処理を行う。
なお、受信されたNonce値は、Nonce送信処理部25によって、対応するブロックチェインネットワークに向けて送信される。
【0042】
図7は、本実施形態の分散処理サーバ(対象通貨選択処理部)が実行する対象通貨選択処理を説明する図である。
図7(a)に示すフローチャートにおいて、マイニングサーバ10(対象通貨選択処理部22)は、常に変動する仮想通貨の換金レートを定期的に確認する。
対象通貨選択処理部22は、ステップS121において、換金レートの確認タイミングとなったか否かを判定する。
確認タイミングとなったと判定した場合(ステップS121でYes)、対象通貨選択処理部22は、ステップS122において、換金レート情報をインターネット上に存在する各仮想通貨の取引所や販売所のサーバに対し、換金レート情報を要求する処理を行う。
【0043】
確認タイミングとなったと判定しなかった場合(ステップS121でNo)、対象通貨選択処理部22は、ステップS123において、換金レートを上記取引所や販売所のサーバから受信したか否かを判定する。
受信したと判定した場合(ステップS123でYes)、対象通貨選択処理部22は、ステップS124において、受信した換金レートを、記憶部の通貨情報記憶部28に格納する。
そして、対象通貨選択処理部22はステップS125において、ハッシュレート、難易度、換金レートに基づいて、各仮想通貨の発掘可能金額の期待値を算出し、ステップS126において、算出した期待値に基づいてマイニングの対象通貨を決定する。
【0044】
図7(b)は、算出された発掘可能金額を例示する図である。
発掘金額期待値は、例えば、
(式)期待値=ハッシュレート/((2^32)*難易度)*換金レート
で表せられる。
ハッシュレートとは、単位時間当たり(例えば1秒)のハッシュ計算数であり、難易度は、1/2^32に対してどのくらい当たりが少ないかを示す係数である。
図7(b)に示すように、仮想通貨Aは、ハッシュ関数がSHA−256、GPUでのハッシュレート[MH/s]が865、最近の難易度が1873105475221.61、発掘期待度[coin/H]が1.2430193960451E−22、発掘速度期待値[coin/hour]が、0.0000000003870762、換金レート[¥/coin]が1627000としたときに、発掘金額期待値[¥/hour]が0.0006297730である。
【0045】
また仮想通貨Bは、ハッシュ関数がLyra2REv2、GPUでのハッシュレート[MH/s]が60、最近の難易度が74330.69278829、発掘期待度[coin/H]が3.1323620824717−E15、発掘速度期待値[coin/hour]が、0.0006765902098138、換金レート[¥/coin]が1188としたときに、発掘金額期待値[¥/hour]が0.0006297730]である。
この場合、1時間当たりの発掘金額期待値は、仮想通貨Bの方が高いといえ、対象通貨選択処理部22は、仮想通貨Bを、マイニングの対象通貨に決定する。
【0046】
図7(a)のフローチャートに戻り、対象通貨選択処理部22は、ステップS127において、記憶部に格納されている対象通貨情報を更新する。
なお、上記のように、対象通貨情報に定義されるマイニングの対象は仮想通貨に限定されることはない。
例えば、時間帯に基づいてマイニング対象を決定することで、一定時間、仮想通貨ではなく報酬を伴わないブロックチェインのマイニングを行うようにしてもよい。
このようにすることで、報酬を伴わないブロックチェインに正当な演算資源を提供することが出来る。
【0047】
また、仮想通貨に関するマイニングを行う場合であっても、発掘可能金額の期待値によってマイニング対象を決定するのではなく、予め定めた時間毎に、マイニング対象を交互に替えるようにしてもよい。
あるいは、発掘可能金額の期待値によるマイニング対象の決定を基本としつつ、同じ仮想通貨に対するマイニングが続く場合には、他の仮想通貨のマイニングを挟むようにしてもよい。
このようにすることで、参加者数が少なく、接続されたブロック数の少ない比較的新しい仮想通貨のブロックチェインに、正当な演算資源を提供することが出来る。
【0048】
また、オープンな仕組みで行われるビットコインなどの仮想通貨とは異なり特定の企業が発行、運営するプライベートチェイン(クローズドな仕組みであり、マイニングを行うには登録が必要)による仮想通貨の場合、マイニングによる報酬は運営企業が設定する。
その場合、企業側が設定する報酬と、その他の仮想通貨(パブリックチェイン)の発掘期待額を考慮して、マイニングを行う仮想通貨を決定してもよい。
企業が発行、運営するプライベートチェインによる仮想通貨のマイニングを、所定の基準によって優先的に行うようにしてもよい。
【0049】
しかし、企業が発行、運営するプライベートチェインにおいてトランザクションが発生しておらず、仮想通貨のマイニングが必要ない(マイニングの要請がない)場合には、発掘可能金額の期待値のみを考慮してマイニングを行うことが出来る。
企業が発行する仮想通貨のマイニングに参加する参加者にとって、企業からのマイニングの依頼がない場合、自身の計算機資源を有効に活用することが出来ない。
しかし、そのような参加者も、本実施形態のマイニングサーバ10に接続することで、企業からのマイニングの依頼がない場合でも、その他のブロックチェイン(仮想通貨)についてマイニングを行うことで計算機資源の稼働率を高めるとことが出来る。
仮想通貨のマイニングでは必ず報酬を受け取ることが出来る保障はないが、並行して企業が発行する仮想通貨のマイニングに参加することでリスクを抑えることが出来る。
【0050】
さらに、分散処理サーバ(マイニングサーバ)10に接続する利用者端末に対して、一律にマイニング対象を指定して、前ブロックのハッシュ値、現ブロックのデータ、使用するハッシュ関数の指定を送信するのではなく、利用者端末それぞれのハードウェア的、ソフトウェア的特性に合わせ、各端末に最適なマイニング対象を指定するようにしてもよい。
【0051】
図8は、本実施形態の分散処理サーバ(探索指示送信処理部)が実行する探索指示送信処理を説明する図である。
探索指示送信処理部23は、ステップS131において、記憶部に格納されている対象通貨情報を確認する。
そして、探索指示送信処理部23は、ステップS132において、ブロックデータ記憶部27を参照し、対象通貨情報で指定されるマイニング対象の仮想通貨について新たなブロックが受信されているか否かを判定する。
【0052】
新たなブロックが受信されていると判定した場合(ステップS132でYes)、探索指示送信処理部23は、ステップS133において、Nonce値を、マイニングプールの参加者で分割した探索範囲を生成する。
そして、探索指示送信処理部23は、ステップS132において、対象通貨について、現ブロックのデータ、前ブロックのハッシュ値、及び探索範囲を、各クライアント装置に対して送信する。
【0053】
図9は、本実施形態のシステムを構成するクライアント装置の機能構成を示す図であり、(a)はハードウェア構成を示す図、(b)はソフトウェアによる機能構成を示す図である。
図9(a)に示すように、クライアント装置50は、装置全体の制御を行う汎用のオペレーティングシステムを実行するとともにクライアント装置50の機能を実現するプログラムやマイニングツールを実行するCPU(Central Processing Unit)51と、CPU11による処理のために各種のプログラムや一時データ、変数が展開されるRAM(Random Access Memory)52と、プログラムやデータが格納されるHDD(Hard Disk Drive)53や不図示のROM(Read Only Memory)と、クライアント装置50をネットワークに接続するためのネットワークI/F54と、を備えている。
【0054】
また、
図9(b)に示すように、CPU51は、処理部として、探索指示受信処理部60と、探索処理部61と、Nonce送信処理部62と、を実行する。
これらの処理部は、一般にマイニングツールと呼ばれるものに相当する。
探索指示受信処理部60は、本実施形態の分散処理サーバ(マイニングサーバ)10や他のプールサーバ40から探索指示(新たなブロック(トランザクション)データ、前ブロックのハッシュ、探索範囲、ハッシュ関数の指定)を受信して、記憶部の探索指示記憶領域に格納する。
探索処理部61は、探索指示記憶領域に格納された探索指示に基づいて、正解となるNonce値の探索処理を行う。
なお、探索処理部61は、探索指示において指定されるブロックチェイン毎に異なるハッシュ関数によるハッシュ処理(探索処理)を実行可能であり、ブロックチェインAで用いられるハッシュ関数Aによる処理を実行するハッシュA処理部、ブロックチェインBで用いられるハッシュ関数Bによる処理を実行するハッシュB処理部、ブロックチェインCで用いられるハッシュ関数Cによる処理を実行するハッシュC処理部を含む。
Nonce送信処理部62は、探索処理部61によって正解のNonce値が見つかった場合、そのNonce値を、本実施形態の分散処理サーバ(マイニングサーバ)10や他のプールサーバ40に送信する処理を行う。
【0055】
図10は、本実施形態のクライアント装置(探索指示受信処理部)が実行する探索指示受信処理を説明するフローチャートである。
探索指示受信処理部60は、ステップS201において、探索指示を受信したか否かを判定する。
探索指示を受信したと判定した場合(ステップS201でYes)、探索指示受信処理部60は、ステップS202において、ブロックチェインネットワークAに係る探索指示を受信したか否かを判定する。
ブロックチェインネットワークAに係る探索指示を受信したと判定した場合(ステップS202でYes)、探索指示受信処理部60は、ステップS203において、受信した探索指示に基づいて、ハッシュ処理部Aによる探索処理を開始させる。
ブロックチェインネットワークAに係る探索指示を受信したと判定しなかった場合(ステップS202でNo)、探索指示受信処理部60は、ステップS204において、ブロックチェインネットワークBに係る探索指示を受信したか否かを判定する。
【0056】
ブロックチェインネットワークBに係る探索指示を受信したと判定した場合(ステップS204でYes)、探索指示受信処理部60は、ステップS205において、受信した探索指示に基づいて、ハッシュ処理部Bによる探索処理を開始させる。
ブロックチェインネットワークBに係る探索指示を受信したと判定しなかった場合(ステップS204でNo)、探索指示受信処理部60は、ステップS206において、ブロックチェインネットワークCに係る探索指示を受信したか否かを判定する。
ブロックチェインネットワークCに係る探索指示を受信したと判定した場合(ステップS206でYes)、Nonce受信処理部24は、ステップS207において、受信した探索指示に基づいて、ハッシュ処理部Bによる探索処理を開始させる。
本実施形態のクライアント装置では、異なるハッシュ処理部による正解の探索処理を、分散処理サーバ(マイニングサーバ)10から受信する探索指示に基づいて、動的に切り替えることが出来る。
従来マイニング用いられていた、PC等にインストールされるマイニングツールは、基本的には単一のハッシュ関数、それに対応した仮想通貨のマイニングのみに対応していたが、本実施形態のクライアント装置は、複数の仮想通貨のマイニングに対応することが出来る。
【0057】
図11は、本実施形態のクライアント装置が実行する探索処理を説明するフローチャートである。
探索処理部61は、ステップS211において、RAM52にセットした変数Nに、探索指示で指定されている探索範囲内のNonce値の数を設定(代入)する。
次に、探索処理部61は、ステップS212において、探索対象のNonce値が何番目であるかを示す、RAM52にセットした変数Mに1をセットする。
探索処理部61は、ステップS213において、M番目(M=1の場合は1番目)のNonce値(探索範囲として「0」〜「99」が割り当てられている場合には「0」)、前ブロックのハッシュ値、現ブロックのデータを含むデータのハッシュ値を算出する。
【0058】
探索処理部61は、ステップS214において、算出されたハッシュ値が所定の条件(ビットコインの場合、上位17ケタが0)を満たすか否かを判定する。
条件が満たされると判定した場合(ステップS214でYes)、探索処理部61は、ステップS215において、該当のNonce値を正解の値に決定する。
Nonce送信処理部62は、ステップS216において、正解のNonce値を分散処理サーバ(マイニングサーバ)10又は他のプールサーバ40、マイナー装置に送信する。
条件が満たされないと判定した場合(ステップS214でNo)、探索処理部61は、ステップS217において、M=Nであるか否か、すなわち、割り立てられたすべてのNonce値について探索を行ったか否かを判定する。
M=Nであると判定した場合(ステップS217でYes)、探索処理部61は、ステップS218において、割り当てられた探索範囲内に正解の値はないと判断し、処理を終了する。
M=Nであると判定しなかった場合(ステップS217でNo)、探索処理部61は、ステップS219において、変数MにM+1を代入し、ステップS213に処理を戻し、次のNonce値について探索処理を行う。
【0059】
図12は、本実施形態の分散処理サーバ(報酬支払処理部)が実行する報酬支払処理を説明するフローチャートである。
報酬支払処理部26は、S141において、何れかのブロックチェイン(仮想通貨)について報酬を獲得したか否かを判定する。
これは、本実施形態の分散処理サーバ10の運営者のウォレットに入金があったか否かの情報等から判断出来る。
報酬が獲得されたと判定した場合(ステップS141でYes)、報酬支払処理部26は、ステップS142において、獲得された報酬をプール参加者の人数で割り、参加者一人分の報酬額を決定する。
報酬支払処理部26は、ステップS143において、一人分の報酬額を、参加者毎に予め定められた他の仮想通貨の相当額に変換する。
この処理には、通貨情報記憶部28に格納されている、法定通貨(日本円、米ドル、人民元など)と仮想通貨の換金レートを活用することが出来る。
仮想通貨同士で価値の変換(両替)を行うことは出来ないが、法定通貨を基準とした割合で換算することは可能である。
換算が終了すると、報酬支払処理部26は、ステップS144において、報酬として支払う仮想通貨の取引所に対し、各参加者のウォレットへの送金処理を依頼する処理を実行する。
【0060】
以上のように構成したことにより、本実施形態のマイニングシステムによれば、サーバ装置(分散処理サーバ)に接続する参加者を、複数のブロックチェインに係るマイニング作業に参加させることが出来る。
この複数のブロックチェインには、既に十分に普及してマイナーの数も十分に確保されて報酬も支払われるビットコインなどの仮想通貨に係るチェイン、立ち上げから間もなく、マイナーの数も少ないことから悪意の攻撃者によるフォークのリスクがある仮想通貨に係るチェイン、さらには、仮想通貨ではなくマイニングよる報酬が支払われないチェインが含まれる。
【0061】
参加者にはビットコインのマイニングよる報酬を分配しつつ、空き時間には無報酬のマイニング作業や新規な仮想通貨のマイニング作業参加してもらうことが可能である。
従って、本発明によれば、新規にブロックチェインを用いた仮想通貨を立ち上げる場合や、仮想通貨以外のブロックチェインについて、正当なマイニングを行うクライアント装置による十分な規模の演算資源を容易に確保することが出来る。
【0062】
その一方で、仮想通貨のマイニングを行う場合には、複数のブロックチェインシステムの中から、最も報酬効率の良いブロックチェイン(仮想通貨)を決定して、ブロック情報等をクライアント装置に送信する。
このようにすることで、特定の仮想通貨のマイニングのみをマイニングする場合に比べて、参加者の利益を最大化することが出来るため、参加者のモチベーションを高め、正当なマイニングを行うクライアント装置による十分な規模の演算資源をより確保しやすくなる。
また、本実施形態の分散処理サーバに接続するクライアント装置が増加することで、新たにプライベートチェインを立ち上げたい事業者等に有用な演算リソースを提供し得る。
【0063】
上記に説明したように、本実施形態において、分散処理サーバ(マイニングサーバ)10は、複数の異なるデータソース(ブロックチェイン)からデータを取得可能であり、所定の条件に基づいて、複数のデータソース(ブロックチェイン)のうち一のデータソース(ブロックチェイン)を決定する。
そして、決定したデータソースから取得した対象データ(ブロックデータ)と、対象データに応じたデータ処理方法(ハッシュ関数の指定)と、を少なくとも含む情報を各クライアント装置50に送信する。
クライアント装置50は、上記の対象データ及びデータ処理方法に基づいてデータ処理を行う。そしえ、クライアント装置50は、データ処理の結果情報を分散処理サーバ(マイニングサーバ)10に送信し分散処理サーバ(マイニングサーバ)10は、結果情報を受信する。
このような構成は、ブロックチェインシステムにおいて用いられるサーバ装置及びクライアント装置に限られることはなく、同様の仕組みを他の分散処理システムに適用することが出来る。
【0064】
図13は、本実施形態の分散処理サーバが適用される分散処理システムの他の例を示す図である。
図13において、本実施形態の分散処理サーバ10Zは、インターネットを通じて、複数の異なるネットワークに接続可能となっている。
例えば、分散処理サーバ10Zは、X大学のネットワーク200にルータを介して接続し、外部に公開されたデータベースサーバ210から解析用のデータを取得することが出来る。
また、分散処理サーバ10Zは、Y研究所のネットワーク250にルータを介して接続し、外部に公開されたデータベースサーバ260から解析用のデータを取得することが出来る。
分散処理サーバ10Zは、複数のクライアント装置50Z(50Z―1、50Z−2、50Z−3)の接続を受容する。
【0065】
それぞれのデータベースサーバ210、デーベースサーバ260から取得されるデータは、分散処理を前提とした分割データである。代表的な例としては、ガンや白血病などの疾病の原因となる物質と、その物質の働きを抑える可能性がある物質の相性を演算などによって確かめるものである。
当然、対象となる疾病や物質によってデータの内容や、演算手法も異なる。
【0066】
参加者は、一般的には、自ら所有するクライアント装置に専用のクライアントソフトウェアをインストールし、クライアント装置を用いてそれぞれのデータベースサーバに個別にアクセスして分割データを取得し、解析に参加する。
それに対して、本実施形態においては、参加者のクライアント装置は、分散処理サーバ10Zに接続する。
分散処理サーバ10Zは、定期的にデータベースサーバ210、デーベースサーバ260から分割データを取得し、記憶部のデータ記憶部に格納する。
そして、分割処理サーバ10Aは、CPU11(対象データ選択処理部)によって、所定の条件に基づいてクライアント装置に送信するデータを決定し、CPU11(解析指示送信処理部)が決定したデータをクライアント装置に送信する処理を行う。
クライアント装置にインストールされるクライアントソフトウェアは、サーバから受信するデータに従って、解析ツールを切り替える機能を有する。
【0067】
データを受け取ったクライアント装置では、指定された解析手法と分割データに基づいて解析を行い、解析結果情報を分割処理サーバ10Aに送信する。
対象データ選択処理部がクライアント装置に送信するデータを決定する基準は、例えば時間帯や、各システムにおける解析の状況などを様々に考慮することが出来る。
以上のように構成することによって、分散処理に参加するクライアント装置を、分割処理サーバ10Aに接続させることによって複数のプロジェクトに参加させることができ、演算資源の確保に苦しむプロジェクトにとっての大きな助けとすることが出来る。