JP7141147B2 - 取引サーバ装置、仮想通貨取引方法及びプログラム - Google Patents

取引サーバ装置、仮想通貨取引方法及びプログラム Download PDF

Info

Publication number
JP7141147B2
JP7141147B2 JP2021116075A JP2021116075A JP7141147B2 JP 7141147 B2 JP7141147 B2 JP 7141147B2 JP 2021116075 A JP2021116075 A JP 2021116075A JP 2021116075 A JP2021116075 A JP 2021116075A JP 7141147 B2 JP7141147 B2 JP 7141147B2
Authority
JP
Japan
Prior art keywords
transaction
virtual currency
user
remittance
processing unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2021116075A
Other languages
English (en)
Other versions
JP2021168185A (ja
Inventor
一樹 客野
優佑 星月
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Axell Corp
Original Assignee
Axell Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Axell Corp filed Critical Axell Corp
Priority to JP2021116075A priority Critical patent/JP7141147B2/ja
Publication of JP2021168185A publication Critical patent/JP2021168185A/ja
Application granted granted Critical
Publication of JP7141147B2 publication Critical patent/JP7141147B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)

Description

本発明は、仮想通貨を利用者間で取引するための取引サーバ装置に関し、特に、異なる仮想通貨を交換取引するための取引サーバ装置に関する。
近年、P2Pネットワーク上で分散型台帳管理を実現するブロックチェーンと呼ばれる技術が知られている。
そして、このブロックチェーンを取引の台帳として活用した仮想通貨(暗号通貨)(特許文献1)が知られており、現金に代わる新たな決算手段や送金手段などに用いられてきている。
このような仮想通貨として、当初はBitcoin(ビットコイン)(登録商標)のみが知られていたが、現在では、同様の仕組みを利用した様々な仮想通貨(アルトコインと呼ばれる)が利用されている。例えば、アルトコインとしてMonacoin(モナコイン)(登録商標)、Litecoin(ライトコイン)などが知られている。
従来、仮想通貨の利用者は、自己の保有する仮想通貨を別の仮想通貨に交換したいと考えたとき、取引所を利用するか、異なる仮想通貨を保持する利用者間で、それぞれの仮想通貨が有する仕組みを利用して相互で送金取引を行う他は選択肢がなかった。
取引所を利用した仮想通貨の取引では、第三者である取引所を信頼し、取引所に仮想通貨を預けるかたちとなる。
預けた仮想通貨を悪意ある取引所に「持ち逃げ」されるリスクはもちろんあるが、善意の取引所であっても、それらが狙われ、預けた仮想通貨がクラッキングなどによって流出するという懸念がある。
また、異なる仮想通貨を保持する利用者間で仮想通貨を「交換」する方法では、例えば、利用者Aが利用者Bにビットコインを送金し、利用者Bが上記のモナコインを利用者Aが送金するという手順がとられる。その場合、ビットコインを受け取った利用者Bが、約束通りにモナコインを利用者Aに送金せず、ビットコインを「持ち逃げ」するおそれがある。
このようなセキュリティ上の問題を解決するための技術として、「Atomic Swap(以下、アトミックスワップと記載する)」と呼ばれる、取引所を介さず、且つ利用者間の相対取引のリスクをも解消した仮想通貨の取引手法が提案されている(非特許文献1)。
この「アトミックスワップ」では、取引所を介さずに「トラストレス(取引所を信用せず)」にセキュアな取引が行えることはもちろん、特殊なトランザクションを介して非直接的に(間接的に)通貨の交換を行うことで、「トラストレス(相対取引の相手となる利用者を信用せず)」にセキュアな取引を行うことが出来る。「特殊なトラザクション」とは、受取人に加え、有効期限と、当事者の一方がランダムに生成(決定)した秘密の値のハッシュ値と、を指定したトランザクションである。
「アトミックスワップ」の参加者は、上記の特殊なトランザクションを互いに作成する。そして、受取人が上記ランダムに選択された秘密の値を知る場合にのみ、その受取人が特殊なトランザクションに接続するトランザクションを作成して仮想通貨を受け取ることが可能である。
なお、「秘密の値」は取引の過程で開示される必要があるため、参加者の一方のみが仮想通貨を受け取れるということがない。また、一般的には有効期限を指定した上で差出人が仮想通貨を取り戻すことが可能なようトランザクションを作成するため、アトミックスワップに失敗しても、どちらかが仮想通貨を失うということはない。
従って「アトミックスワップ」は、特殊なトランザクションを介して、間接的且つ安全な取引を行うことが出来る。
特開2017-207860公報
bitcoin wiki、[2018年3月1日検索]、インターネット、<URL:https://en.bitcoin.it/wiki/Atomic_cross-chain_trading>
上記のように「アトミックスワップ」では、利用者間で直接の取引が可能であり、取引所を介した取引のリスクを回避出来る。
しかしながら、「アトミックスワップ」を用いて仮想通貨の売買をしようとした場合、仮想通貨の利用者同士が、希望する売買条件を交換可能なインターフェイスが従来存在せず、条件のあった取引相手を見つけることは容易ではい、という問題があった。
本発明は、以上の問題を鑑みてなされたものであり、利用者が希望する仮想通貨の取引条件をマッチングし、容易に、且つ安全に仮想通貨の取引を開始可能とすることを目的とする。
本発明は、上述の課題を解決するためになされたものであり、以下の形態により実現することが可能である。
本発明に係る第1の形態は、複数の仮想通貨取引装置間の仮想通貨の取引を仲介する取引サーバ装置であって、各仮想通貨取引装置は、仮想通貨の交換数量を指定した売り注文及び買い注文をネットワークに送出し、前記取引は、一の利用者からの第1の仮想通貨の送金を示す特定情報を含む第1の送金情報と、前記一の利用者に対して送金された第2の仮想通貨の受け取りを示す第1の受取情報と、他の利用者からの前記第2の仮想通貨の送金を示す前記特定情報を含む第2の送金情報と、前記他の利用者に対して送金された前記第1の仮想通貨の受け取りを示す第2の受取情報と、がネットワークに公開されることにより行われ、ネットワークに送出された売り注文に応じた板情報を生成する板情報生成手段と、前記板情報を前記仮想通貨取引装置に配信する板情報配信手段と、前記取引に含まれる送金情報及び受取情報の少なくとも一つが未承認状態のときに、前記取引で受け取る予定の仮想通貨の数量に応じて与信し、回転取引に利用可能な状態の仮想通貨を前記一の利用者に貸し付ける貸付手段と、を備える取引サーバ装置を特徴とする。
以上のように構成したので、本発明によれば、利用者が希望する仮想通貨の取引条件をマッチングし、容易に、且つ安全に仮想通貨の取引を開始可能とすることが出来る。
本実施形態の仮想通貨取引装置が適用されるシステムの構成を示す概略図である。 仮想通貨のトランザクションを概説するための図である。 アトミックスワップの基本的な仕組みを概説する図である。 アトミックスワップの流れを詳細に説明する図である。 、本実施形態に係る仮想通貨取引装置(端末装置)の機能構成を示す図である。 本実施形態の端末装置における売買注文画面の一例を説明する図である。 本実施形態において、仮想通貨の利用者が行った売り注文を説明する図である。 本実施形態に係る取引サーバの機能構成を示す図である。 売り側の端末装置が実行する売り注文処理を説明するフローチャートである。 取引サーバが実行する板情報生成処理を説明するフローチャートである。 買い側の端末装置が実行する買い注文処理を説明するフローチャートである。 売り側の端末装置が実行するアトミックスワップ実行処理を説明するフローチャートである。 買い側の端末装置が実行するアトミックスワップ実行処理を説明するフローチャートである。 取引サーバが実行する取引評価処理を説明するフローチャートである。 取引サーバが実行する売買マッチング成立後の処理を説明するフローチャートである。 売り注文を行った利用者の取引成功確率を反映した板情報を示す図である。
以下に、図面を参照して本発明の実施の形態を詳細に説明する。
図1は、本実施形態の仮想通貨取引装置が適用されるシステムの構成を示す概略図である。
図1(a)は、本実施形態の仮想通貨取引装置としての端末装置を含むネットワークの構成を示す概略図である。
本実施形態に係るシステム1において、複数の利用者の利用に係る仮想通貨取引装置(以下、端末装置)10a、10b、10c・・がインターネットを介して相互に接続されている。
さらにインターネットには、ブロックチェーンネットワークに参加してマイニング作業を行うマイナーが用いる多数のマイナー装置30と、端末装置10a、10b、10c・・の利用者が、下記に説明するアトミックスワップによる仮想通貨の交換などの取引を行う際に必要となる板情報の提供などを行う取引サーバ40と、が接続されている。
多数のマイナー装置30x(30x-1、30x-2・・・)やクライアント装置によってブロックチェーンネットワークxが構成され、多数のマイナー装置30y(30y-1、30y-2・・・)やクライアント装置によってブロックチェーンネットワークyが構成されている。
これらのブロックチェーンネットワークは、P2P(Peer to Peer)ネットワークであり、ブロックチェーンネットワークxは仮想通貨Xのネットワーク、ブロックチェーンネットワークyは仮想通貨Yのネットワークである。
ブロックチェーンには、仮想通貨に用いられるものを含め、多くのものが存在している。仮想通貨にも、代表的なビットコインの他に、アルトコインと呼ばれるものが知られている。アルトコインの代表的なものとして、Ethereum(イーサリアム)やMonacoinなどが知られている。
インターネット上においてはビットコインを運営、機能させるためのブロックチェーンネットワークや、各種アルトコインの運営、機能させるためのブロックチェーンネットワークが存在する。
各ブロックチェーンネットワークには、それぞれマイナー装置30が多く接続されて、プルーフオブワーク作業を行っている。また、ブロックチェーンネットワーク(仮想通貨)によっては、マイニングとしてプルーフオブワーク作業を行わないものもある。
いずれの場合においても、ブロックチェーンネットワークは、中央集権的なサーバを持たないP2Pネットワークである。ブロックチェーンは、ブロックチェーンネットワークに属するそれぞれのマイナー装置が有するストレージやサーバ装置、プールサーバに備えるストレージに、同じものが格納されている。ブロックチェーンが、分散型取引台帳と呼ばれる所以である。
図1(b)は、ブロックチェーンネットワークに属する装置が有するブロックチェーンを示す図である。
図1(b)を用いて、ブロックチェーンの概略を説明する。
ブロックチェーンは、逐次発生する取引情報などをブロック単位で接続することにより成立する。
すなわち、ブロックチェーン技術では、取引記録や契約など、内容を保証したいデータ(の集合)をブロックという単位で扱う。このブロックを所定の方法で一繋ぎすなわちチェーン状に接続したものがブロックチェーンである。ブロックチェーンの生成にあたってはハッシュ関数が用いられており、ハッシュ関数は任意長の任意データに対して固定長のハッシュ値を求めるための関数である。
ハッシュ関数には一方向性という特徴があり、任意データからハッシュ値を求めることは容易であるが、逆に、ハッシュ値から元のデータを復元することは現実的には不可能であるとされる。
ブロックチェーンに対して新たなブロックを接続するためには、チェーンにおける直前のブロックのハッシュ値と、接続すべき新たなブロックのトランザクションデータを1まとめにしたマークルルートと呼ばれるデータ、Nonce値と呼ばれる数値(例えば32bit固定長数値)を接続したデータに対してハッシュ値(例えば、SHA-256ハッシュ)を計算した時にその上位数ビット(例えば10Bit)が0となるような、Nonce値を求める。
SHA-256ハッシュ値は、ほぼランダムな256bitの値となるため、あるNonce値を選んだ時に上位10bitが0となる確率は1024分の1となるが、上記したハッシュ関数の一方向性によって、基本的に、全てのNonce値に対して総当たりで、上記のハッシュ値の上位ビットが0となるか否かを検証するより他に方法がない。この総当たりでの検証を行って、ハッシュ値の上位ビットが0となるNonce値を見つけ、報告してブロックを承認する作業は、マイニング、あるいはプルーフオブワーク(Proof of Work,PoW)と呼ばれる。
その結果、図1(b)に示すように、ブロックチェーンの各ブロックは、そのブロックのデータと、直前のブロックのハッシュ値と、Nonce値と、を含んでいる。
このようなブロックチェーンは、各ブロックが直前のブロックのハッシュ値を持っているため、先端の(起点となる最古の)ブロックから順に辿ることで、全てのブロックの正当性を確認することが出来る。
なお途中のブロックを改ざんしようとすると、そのブロック以降全てのブロックのNonce値を再計算する必要があるが、上記した総当たりを全てのブロックについて行うしかないため、計算量的に不可能である。
このような特徴を有することで、ブロックチェーンの信頼性は担保されている。
図1に示したように異なるブロックチェーンネットワーク、異なる仮想通貨が存在する中で、仮想通貨同士を交換したいという需要があり、そのための安全な仕組みとして、例えばアトミックスワップと呼ばれるものがすでに知られている。
従来、仮想通貨の利用者は、自己の保有する仮想通貨を別の仮想通貨に交換(両替)したいと考えたとき、取引所を利用するか、異なる仮想通貨(暗号通貨)を保持する利用者間で、それぞれの仮想通貨が有する仕組みを利用して相互で送金取引を行う他は選択肢がなかった。
取引所を利用した方法では、例えば、ビットコインを所持する利用者Aが、モナコインを所望する場合、ある取引所にビットコインを預け、それと同価値のモナコインの支払いを取引所から受ける。あるいは、モナコインを所持する利用者Bが、ビットコインを所望する場合、ある取引所にモナコインを預け、それと同価値のビットコインの支払いを取引所から受ける。
このような取引所を利用した仮想通貨の取引では、第三者である取引所を信頼し、取引所に仮想通貨を預けるかたちとなる。
預けた仮想通貨を悪意ある取引所に「持ち逃げ」されるリスクはもちろんあるが、善意の取引所であっても、それらが狙われ、預けた仮想通貨がクラッキングなどによって流出するという懸念がある。
このようなリスクを嫌い、異なる仮想通貨を保持する利用者間で仮想通貨を「交換」することも出来る。
この方法では、交換レートを利用者間で決められるというメリットもあるが、このような相対での取引では、例えば、利用者Aが利用者Bにビットコインを送金し、利用者Bがモナコインを利用者Aに送金するという手順がとられる。
その場合、ビットコインを受け取った利用者Bが、約束通りにモナコインを利用者Aに送金せず、ビットコインを「持ち逃げ」するおそれがある。
このように、取引所を用いた方法にも、利用者間で仮想通貨を交換する方法にも、無視できないセキュリティリスクが存在する。
アトミックスワップは、異なる仮想通貨を交換するにあたってのセキュリティ上の問題を解決するための技術であり、取引所を介さずに「トラストレス(取引所を信用せず)」にセキュアな取引を行えることはもちろん、特殊なトランザクションを介して非直接的(間接的に)に通貨の交換を行うことで、「トラストレス(相対取引の相手となる利用者を信用せず)」にセキュアな取引を行うことが可能な仮想通貨の取引(交換)手法である。
なお、本明細書において、「仮想通貨を利用者に対して送金」するとは、あくまで便宜的な表現である。
ビットコインをはじめとした仮想通貨においては、仮想通貨の「送金」は、ネットワーク上に分散して記録される所定単位の仮想通貨(通貨価値)(ビットコインではUTXO:Unspent Transaction Outputと呼ぶ)を、利用者の公開鍵あるいは公開鍵ハッシュとしてのアドレスによってロックする処理である。
「UTXO」は、後述する「トランザクション」において他のトランザクションと未だ接続されていないアウトプットを意味し、所有者の公開鍵を記載したScriptPubKeyを含んでいる。
UTXOをロックしている公開鍵の所有者がUTXOの所有者であり、当該UTXOが、その所有者が所有する仮想通貨の残高である。
仮想通貨の「送金」とは、直前の所有者の公開鍵、あるいは公開鍵ハッシュによってロックされているUTXOを、上記直前の所有者が生成した電子署名によってアンロックすることで、新たに作成したトランザクションと接続し、その新たに作成したトランザクションのUTXOを、次の所有者の公開鍵、あるいは公開鍵ハッシュによって再度ロックする処理である。
そして、この「トランザクション」をブロックチェーンネットワークに対して広報(ブロードキャスト)し、トランザクションが承認されてブロックチェーンに組み込まれることで「送金(UTXOの所有権の移転)」が行われる。
仮想通貨の「送金」に際して行われることは、UTXOをアンロックして新たなトランザクションと接続し、その新たなトランザクションが新たなブロックの一部として承認されることであり、何らかの価値情報がデータとして利用者の端末装置間でやりとりされることはない。金銭的価値を示すデータが端末装置間で授受されるわけでもない。
従って、端末装置内に、仮想通貨(の残高)を示す情報が格納されることはない。この点において、仮想通貨は、Felica(登録商標)など、ICチップ内に残高情報を有する一部の電子マネーとは本質的に異なる。
端末装置にインストールされた「ウォレット」ソフトウェアは、利用者の公開鍵あるいは公開鍵ハッシュに紐付けられたUTXOをブロックチェーンネットワークから検索することによって、利用者が有する仮想通貨の「残高」を利用者に提示することが出来る。
図2は、仮想通貨のトランザクションを概説するための図であり、(a)はトランザクションの基本的な構成を概念で示す図、(b)は、前トランザクションに対して、新規トランザクションを接続したときの状態を示す図である。
「トランザクション」は、送金元から送金先への通貨価値の転送(移転)を記号化したものであり、図2(a)に示すように、送金元を示すフィールドであるインプットと、送金先を示すフィールドであるアウトプットと、を有する。
また、「アウトプット」には、送金額と、ScirptPubKeyと、を含む。
ScriptPubKeyは、このアウトプット(トランザクション)をアンロックするための条件を定義したスクリプト言語である。
ScriptPubKeyには、一般的には、特定の秘密鍵による電子署名によってのみアンロックが可能となるようなスクリプトが記述されており、これによって、仮想通貨の所有権が、該当する秘密鍵を所有する送金先のアカウント(利用者)のものとなる。
「インプット」は、UTXOを使うために、ScriptSigと呼ばれるUTXOのロックを解除するためのスクリプトを含む。ScriptSigは主に、ScriptPubKeyで要求されるUTXOのアンロックのための電子署名である。
図2(b)に示すように、前トランザクションにおいてIndex0で特定されるScirptPubKeyに対応するアウトプットに、新規トランザクションが接続されている。
Index1で特定されるScirptPubKeyに対応するアウトプットには、新規トランザクションが接続されていないため、当該アウトプットは、UTXOのままである。
新規トランザクションは、前トランザクションのScriptPubKeyで求められる新規トランザクションを接続した(する)利用者の電子署名を含むScriptSigと、接続先の前トランザクションを特定するためのトランザクションIDとしての前トランザクション全体のハッシュ値(トランザクションハッシュ)と、前トランザクションにおける接続先のScriptPubKeyを特定するためのIndexと、をインプットに含む。
アウトプットには、新規トランザクションのUTXOを、接続した利用者にロックするための公開鍵(公開鍵ハッシュ)を含むScriptPubKeyが含まれる。
新規トランザクションのインプットに付される電子署名は、新規トランザクションのScriptSigを除くデータと、前トランザクションにおける接続されたScriptPubKeyと、のハッシュ値を、秘密鍵を用いて暗号化することで生成される。
図3は、アトミックスワップの基本的な仕組みを概説する図である。
上記のように、アトミックスワップは、利用者A、利用者B間における、異なるブロックチェーンネットワークに係る異なる仮想通貨の交換取引に係る手法である。
利用者Aは仮想通貨X(例えばビットコイン)を利用者Bに対して「送金」し、利用者Bは、利用者Aとの間で予め決定した交換レートにて、相当額の仮想通貨Y(例えばモナコイン)を利用者Aに「送金」する。
ここで説明する例では、利用者Aが先に仮想通貨Xを「送金」し、利用者Bが後から仮想通貨Yを「送金」する。
なお、アトミックスワップの前に、換金レートの決定とともに、公開鍵を利用者間で交換しておく。この他の処理はオンチェーン処理(ブロックチェーンの仕組みを利用した処理)であるが、公開鍵の交換は、E-mailやその他の手段で実行可能な手続である。
アトミックスワップにおいては、利用者Aがランダムに選択した値(後述する秘密の値R)から逆算不可能な方法で生成された値(秘密の値Rのハッシュ値H)を使用する。
まず、送金対象である利用者Aの仮想通貨Xは、利用者Aの公開鍵又は公開鍵ハッシュでロックされた利用者Aの所有に係る仮想通貨のUTXOである。
このUTXOは、現在の所有者である利用者Aの電子署名によってアンロックされる。
そして、利用者A側の端末装置では、上記ランダムに選択された値(秘密の値R)が付与され、かつ利用者Bの持つ秘密鍵により生成可能な電子署名が付与されていること、をアンロックの条件としたScriptPubKey(アウトプット)をUTXOとして持つ特殊なトランザクションが作成されて(上記アンロックしたUTXOに接続され)「送金」が行われる。
また、何らかの理由でアトミックスワップが失敗した場合に備えて、TimeLockを設定することで、一定時間が経過し、且つ利用者Aの持つ秘密鍵による生成可能な電子署名が付与されていることも、上記特殊なトランザクションのアンロック条件として加えることが、一般的に行われている。
上記特殊なトランザクションを作成した時点では、そのUTXOには、如何なるトランザクションも接続されておらず、誰の所有に係るものでもない。一定時間が経過した後には、利用者Aは、そのUTXOのロックを自らの電子署名でアンロックして取り戻すことが可能である。
また利用者B側について、送金対象である利用者Bの仮想通貨Yは、利用者Bの公開鍵又公開鍵ハッシュでロックされた利用者Bの所有に係る仮想通貨のUTXOである。
このUTXOは、利用者Bの電子署名によってアンロックされる。
そして、利用者Aがランダムに選択した上記の値(秘密の値R)が付与され、かつ利用者Aの持つ秘密鍵により生成可能な電子署名が付与されていること、をアンロックの条件としたScriptPubKeyをUTXOとして持つ特殊なトランザクションが作成されて(上記アンロックしたUTXOに接続され)「送金」が行われる。
また、アトミックスワップが失敗した場合に備えて、TimeLockを設定することで、一定時間が経過し、且つ利用者Bの持つ秘密鍵による生成可能な電子署名が付与されていることも特殊なトランザクションのアンロック条件として加えられる。
上記特殊なトランザクションを作成した時点では、そのUTXOには、如何なるトランザクションも接続されておらず、誰の所有に係るものでもない。一定時間が経過した後には、利用者Bは、そのUTXOのロックを自らの電子署名でアンロックして取り戻すことが可能である。
なお、利用者Bが「送金」のために作成した特殊なトランザクションがUTXOのアンロックの条件としている秘密の値Rと、利用者Aの持つ秘密鍵により生成可能な電子署名と、を付与した新たなトランザクションが作成されることで上記特殊なトランザクションがアンロックされ、且つ新たなトランザクションのUTXOが自らの公開鍵でロックされることで、利用者Aは利用者Bが送金した仮想通貨を受け取ることが出来る(UTXOの所有権が利用者Bから利用者Aに移る)。
一方で、利用者Aが「送金」のために作成した特殊なトランザクションがUTXOのアンロックの条件としている秘密の値Rと、利用者Bの持つ秘密鍵により生成可能な電子署名と、を付与した新たなトランザクションが作成されることで上記特殊なトランザクションがアンロックされ、且つ新たなトランザクションのUTXOが自らの公開鍵でロックされることで、利用者Bは利用者Aが送金した仮想通貨を受け取ることが出来る(UTXOの所有権が利用者Aから利用者Bに移る)。
アトミックスワップについて、より詳細に説明する。
ステップ(1)において、利用者Aが利用する端末装置10は、仮想通貨Xを利用者Bに「送金」する第1トランザクションTx1を作成し、ネットワークに送出(ブロードキャスト)する。
第1トランザクションTx1のアウトプットにおけるScriptPubKeyには、利用者Aがランダムに選択した秘密の値Rのハッシュ値Hと、送金先である利用者Bの公開鍵(または、公開鍵ハッシュとしてのアドレス)と、が記載されている。
具体的には、第1トランザクションTx1のScriptPubKeyは、このアウトプット(UTXO)のアンロック条件として、(1)ScriptPubKeyに記載された秘密の値Rのハッシュ値と、第1トランザクションTx1に対応するトランザクションに記載された秘密の値Rのハッシュ値との一致確認、(2)受け取り側(送金先)の電子署名と公開鍵の検証を求める。
すなわち、利用者Aがランダムに選択した秘密の値Rと、受け取り側の利用者Bの電子署名及び公開鍵と、が対応するトランザクションのインプットで指定されたとき、第1トランザクションTx1のアウトプット(UTXO)をアンロックできる。
また、第1トランザクションTx1のScriptPubKeyは、上記TimeLockの期限が過ぎた(タイムアウト)後、(1)送金元の公開鍵、(2)送金元の電子署名が入力されたときに、タイムスタンプの確認と署名の検証を求める。
すなわち、第1トランザクションTx1のアウトプット(UTXO)のアンロック条件は、
(タイムアウト前)利用者Bの電子署名と公開鍵、利用者Aがランダムに選択した秘密の値R
(タイムアウト後)利用者Aの電子署名と公開鍵
である。
受け取り側の利用者Bが利用する端末装置10bは、利用者B自身の電子署名と公開鍵、秘密の値Rをインプットに記載したトランザクション(後述の第4トランザクションTx4)を作成することで、この第1トランザクションTx1を使用した仮想通貨Xの受け取りを完了することが出来る。
上記のように、第1トランザクションTx1には、TimeLockが設定されており、第1トランザクションTx1の作成後、所定時間以内に対応するトランザクション(後述の第4トランザクション)が作成されない場合(TimeLock期限が終了すると)、取引はタイムアウトされる。この場合、送金元である利用者Aの電子署名と公開鍵によって、利用者Aへの「返金(Refund)」が可能となる。
また、第1トランザクションTx1のインプットにおけるScriptSigには、利用者Aの電子署名が含まれる。
この電子署名は、利用者Aの公開鍵又は公開鍵ハッシュにロックされている仮想通貨X(UTXO)を、(利用者Bへの)「送金」のためにアンロックするために、第1トランザクションTx1に付与される。
作成された第1トランザクションTx1は、仮想通貨Xのブロックチェーンネットワークxに公開され、ハッシュ値Hの値は、利用者B(端末装置10b)の知るところとなる。
上記のように、第1トランザクションTx1のアウトプット(UTXO)は、利用者Bの電子署名と公開鍵及び利用者Aがランダムに選択した秘密の値Rによってアンロックすることが出来る。
この時点で、利用者B(端末装置10b)は、秘密の値Rを知らないので自らの電子署名のみによって(上記第4トランザクションTx4を作成して)第1トランザクションTx1のアウトプット(UTXO)をアンロックすることが出来ない(利用者Aの仮想通貨Xを受け取ることが出来ない)。
一方で、利用者Aは、TimeLock期限前は、「送金」した仮想通貨X(ビットコイン)を回収することが出来ない。
ステップ(2)において、利用者Bが利用する端末装置10bは、仮想通貨Yを利用者Aに「送金」する第2トランザクションTx2を作成し、仮想通貨Yのブロックチェーンネットワークyに送出(ブロードキャスト)する。
第2トランザクションTx2のアウトプットにおけるScriptPubKeyには、仮想通貨Xのブロックチェーンネットワークxに公開されているハッシュ値Hと、送金先である利用者Aの公開鍵と、が記載されている。
上記と同様に、第2トランザクションTx2のScriptPubKeyは、このアウトプット(UTXO)のアンロック条件として、(1)ScriptPubKeyに記載された秘密の値Rのハッシュ値と、第2トランザクションTx2に対応するトランザクションに記載される秘密の値Rのハッシュ値と、の一致確認、(2)受け取り側(送金先)の電子署名と公開鍵の検証を求める。
利用者Aがランダムに選択した秘密の値Rと、受け取り側の利用者Aの電子署名及び公開鍵と、が対応するトランザクションのインプットで指定されたとき、第2トランザクションTx2のアウトプット(UTXO)をアンロックできる。
また、第2トランザクションTx2のScriptPubKeyは、上記TimeLock期限が過ぎたタイムアウト後、(1)送金元の公開鍵、(2)送金元の署名が入力されたときに、タイムスタンプの確認と署名の検証を求める。
すなわち、第2トランザクションTx2のアウトプット(UTXO)のアンロック条件は、
(タイムアウト前)利用者Aの電子署名と公開鍵、利用者Aがランダムに選択した秘密の値R
(タイムアウト後)利用者Bの電子署名と公開鍵
である。
受け取り側の利用者Aが利用する端末装置10は、利用者A自身の電子署名と公開鍵、秘密の値Rをインプットに記載したトランザクション(後述の第3トランザクションTx3)を作成することで、この第2トランザクションTx2を使用した仮想通貨Yの受け取りを完了することが出来る。
第2トランザクションTx2には、TimeLockが設定されており、第2トランザクションTx2の作成後、所定時間以内に対応するトランザクション(後述の第3トランザクションTx3)が作成されない場合(TimeLock期限が終了すると)、取引はタイムアウトされる。この場合、送金元である利用者Bの電子署名と公開鍵によって、利用者Bへの「返金(Refund)」が可能となる。
また、第2トランザクションTx2のインプットにおけるScriptSigには、利用者Bの電子署名が含まれる。
この電子署名は、利用者Bの公開鍵又は公開鍵ハッシュにロックされている仮想通貨(UTXO)を、(利用者Aへの)送金のためにアンロックするために、第2トランザクションTx2に付与される。
第2トランザクションTx2のアウトプット(UXTO)は、利用者Aの電子署名と公開鍵、秘密の値Rによってアンロックすることが出来る。
なお、利用者Bは、TimeLock期限前は、「送金」した仮想通貨Y(モナコイン)を回収することが出来ない。
第2トランザクションTx2は仮想通貨Yのブロックチェーンネットワークyに公開される。
ステップ(3)において、利用者Aが利用する端末装置10は、仮想通貨Yを受け取るための第3トランザクションTx3を作成し、ネットワークに送出する。
第3トランザクションTx3は、第2トランザクションTx2に対応するものであり、特に、第3トランザクションTx3のScriptSig(インプット)が、第2トランザクションTx2のScriptPubKey(アウトプット)に対応する。
第3トランザクションTx3のアウトプットにおけるScriptPubKeyには、利用者Aの公開鍵(公開鍵ハッシュとしてのアドレス)が記載されている。
また、第3トランザクションTx3のインプットにおけるScriptSigには、利用者Aがランダムに選択した秘密の値R、利用者Aの電子署名と公開鍵が含まれる。
上記のように第2トランザクションTx2のScirptPubKeyでは、アウトプットのアンロック条件として、秘密の値Rと、利用者Aの電子署名及び公開鍵と、を求めており、これらに対応する内容が記載されている。
利用者A(端末装置10)は、第3トランザクションTx3を作成して第2トランザクションTx2のアウトプット(UTXO)をアンロックし、第3トランザクションTx3のアウトプット(UTXO)を利用者Aの公開鍵又は公開鍵ハッシュにロックすることで、利用者Bが「送金」した仮想通貨Yを受けとることが出来る。
そして、第3トランザクションTx3も仮想通貨Yのブロックチェーンネットワークyに公開される(ブロードキャストされる)ため、秘密の値Rは利用者Bの知るところとなる。
ステップ(4)において、利用者Bが利用する端末装置10bは、仮想通貨Xを受け取るための第4トランザクションTx4を作成してネットワークに送出する。
第4トランザクションTx4は、第1トランザクションTx1に対応するものであり、特に、第4トランザクションTx4のScriptSigが、第1のトランザクションTx1のScriptPubKeyに対応する。
第4トランザクションTx4のアウトプットにおけるScriptPubKeyには、利用者Bの公開鍵(公開鍵ハッシュとしてのアドレス)が記載されている。
また、第4トランザクションTx4のインプットにおけるScriptSigには、(第3トランザクションTx3の結果)ブロックチェーンネットワークに公開されている秘密の値Rと、利用者Bの電子署名が含まれる。
上記のように第1トランザクションTx1のScirptPubKeyは、アウトプット(UTXO)のアンロック条件として利用者Bの電子署名と公開鍵、秘密の値Rを求めており、これらに対応する内容が記載されている。
利用者B(端末装置10b)は、第4トランザクションTx4を作成して第1トランザクションTx1のアウトプット(UTXO)をアンロックし、第4トランザクションTx4のアウトプット(UTXO)を利用者Bの公開鍵又は公開鍵ハッシュにロックすることで、利用者Aが「送金」した仮想通貨Xを受けとることが出来る。
なお、図3において、仮想通貨の「送金」を示す第1トランザクションTx1、第2トランザクションTx2は、夫々、第1の「送金情報」、第2の「送金情報」と考えることが出来る。
また、仮想通貨の「受取」を示す第3トランザクションTx3、第4トランザクションTx4は、第1の「受取情報」、第2の「受取情報」と考えることが出来る。
なお、送金のための第1トランザクションTx1、第2トランザクションTx2が求める解除(アンロック)条件(受け取りのための第3トランザクションTx3、第4トランザクションTx4のインプットに必要な内容)として、送金先(受け取り側)の公開鍵が求められない場合もある。
また、受け取りのための第3トランザクションTx3、第4トランザクションTx4のアウトプットには、受け取り側の公開鍵ハッシュ(アドレス)を指定する場合や、公開鍵そのものを指定する場合がある。
トランザクションスクリプトの記載条件は様々であるが、アトミックスワップにおいて、重要であるのは秘密の値R(とそのハッシュ値H)であり、この値を知る者のみが、後続のトランザクションを繋ぎうる(UTXOをアンロックして仮想通貨を受け取ることが出来る)ということである。
以下の説明では、第3トランザクションTx3、第4トランザクションTx4のインプットにおいて受け取り側の公開鍵については指定を行わず、アウトプットには公開鍵を指定している(P2PK:Pay to Public Keyと呼ばれる方法である)が、本実施形態はそれに限定されることはない。
本実施形態は、第3トランザクションTx3、第4トランザクションTx4のインプットに受け取り側の公開鍵を記載し、アウトプットに受け取り側の公開鍵ハッシュ(アドレス)を指定する(P2PKH:Pay to Public Key Hashと呼ばれる方法である)場合をも含む。
第1トランザクションTx1、第2トランザクションTx2についても、本実施形態は、アウトプットで送金先の公開鍵を指定する場合、送金先の公開鍵ハッシュを指定する場合、のいずれをも含む。
図4は、従来のアトミックスワップの流れを詳細に説明する図である。
図3に示す第1トランザクションTx1から第4トランザクションTx4までの期間が、アトミックスワップの実行期間である。
ステップS1において、最初に仮想通貨を「送金」する側である利用者Aの端末装置10は、利用者Aの電子署名(第1トランザクションTx1用のSigA1)を生成する。この処理はハードウェアウォレットを用いて行われ、利用者Aは、端末装置10にハードウェアウォレットHW_Aを接続する。ハードウェアウォレットには、利用者Aの秘密鍵が格納されている。またハードウェアウォレットHW_Aは、格納されている秘密鍵を用いて電子署名を生成する署名生成用の処理部(回路)を有する。
ステップS2において、端末装置10は、第1トランザクションTx1を作成する。これは、仮想通貨Xを利用者Bに「送金」するためのトランザクションである。
第1トランザクションTx1は、インプット(ScriptSig)として、利用者Aの電子署名(上記のSigA1)を含み、アウトプット(ScriptPubKey)として上記した秘密の値Rのハッシュ値H、送金先である利用者Bの公開鍵(PubKeyB)を含んでいる。
また、第1トランザクションTx1のインプットは、前トランザクションのハッシュ(トランザクションID)を含んでいる。
端末装置10は、この第1トランザクションTx1を、仮想通貨Xのブロックチェーンネットワークxに対して送出する。
第1トランザクションTx1が、仮想通貨Xのブロックチェーンネットワークxに公開されると、ハッシュ値Hも公開される。
この後、望ましくは、利用者AのハードウェアウォレットHW_Aは端末装置10から取り外される。
それを受けて、ステップS3において、後から仮想通貨を「送金」する側である利用者Bの端末装置10bにおいて、利用者Bの電子署名(第2トランザクションTx2用のSigB1)が生成される。この処理もハードウェアウォレットを用いて行われ、利用者Bは端末装置10bにハードウェアウォレットHW_Bを接続する。このハードウェアウォレットHW_Bには、利用者Bの秘密鍵が格納されている。上記と同様に、ハードウェアウォレットHW_Bは、格納されている秘密鍵を用いて電子署名を生成する署名生成用の処理部(回路)を有する。
ステップS4において、端末装置10bは、第2トランザクションTx2を作成する。これは、仮想通貨Yを利用者Aに「送金」するためのトランザクションである。
第2トランザクションTx2は、インプット(ScriptSig)として、利用者Bの電子署名(上記のSigB2)を含み、アウトプット(ScriptPubKey)として、仮想通貨Xのブロックチェーンネットワークxに公開されたハッシュ値H、送金先である利用者Aの公開鍵(PubKeyA)を含んでいる。
また、第2トランザクションTx2のインプットは、前トランザクションのハッシュ(トランザクションID)を含んでいる。
端末装置10bは、この第2トランザクションTx2を、仮想通貨Yのブロックチェーンネットワークyに対して送出する。
この後、望ましくは、利用者BのハードウェアウォレットHW_Bは端末装置10bから取り外される。
次いで、ステップS5において、利用者Aの端末装置10は、利用者Aの電子署名(第3トランザクションTx3用のSigA2)を生成する。この処理もハードウェアウォレットを用いて行われる。
ステップS6において、端末装置10は、第3トランザクションTx3を作成する。これは、第2トランザクションTx2のアウトプット(UTXO)をアンロックして、仮想通貨Yを利用者A自身に「送金」(受取)するためのトランザクションである(当該第3トランザクションTx3のアウトプット(UTXO)をアンロックし、利用者Aの公開鍵(公開鍵ハッシュ)でUTXOをロックしたトランザクションを接続する)。
第3トランザクションTx3は、インプット(ScriptSig)として、利用者A自身の電子署名(上記SigA2)と上記した秘密の値Rを含み、アウトプット(ScriptPubKey)として、送金先である利用者A自身の公開鍵(PubKeyA)を含んでいる。
また、第3トランザクションTx3のインプットは、前トランザクションである第2トランザクションTx2のハッシュ(トランザクションID)を含んでいる。
端末装置10aは、この第3トランザクションTx3を、仮想通貨Yのブロックチェーンネットワークyに対して送出する。
第3トランザクションTx3が、仮想通貨Yのブロックチェーンネットワークyに公開されると、秘密の値Rもブロックチェーンネットワークy上に公開される。
この後、望ましくは、利用者AのハードウェアウォレットHW_Aは、端末装置10から取り外される。
それを受けて、ステップS7において、後から仮想通貨を「送金」する側である利用者Bの端末装置10bにおいて、利用者Bの電子署名(第4トランザクションTx4用のSigB2)が生成される。この処理もハードウェアウォレットを用いて行われ、利用者Bは端末装置10bにハードウェアウォレットHWを接続する。
ステップS8において、端末装置10bは、第4トランザクションTx4を作成する。これは、第1トランザクションTx1のアウトプット(UTXO)をアンロックして仮想通貨Xを利用者B自身に「送金」(受取)するためのトランザクションである(当該第4トランザクションTx4のアウトプット(UTXO)をアンロックし、利用者Bの公開鍵(公開鍵ハッシュ)でUTXOをロックしたトランザクションを接続する。
第4トランザクションTx4は、インプット(ScriptSig)として、利用者B自身の電子署名(上記のSigB2)と仮想通貨Yのブロックチェーンネットワークyに公開された秘密の値Rを含み、アウトプット(ScriptPubKey)として、送金先である利用者B自身の公開鍵(PubKeyB)を含んでいる。
また、第4トランザクションTx4のインプットは、前トランザクションである第1トランザクションTx1のハッシュ(トランザクションID)を含んでいる。
端末装置10bは、この第4トランザクションTx4を、仮想通貨Xのブロックチェーンネットワークxに対して送出する。
なお、上記に説明をした従来知られるアトミックスワップの仕組みには、仮想通貨の交換には時間がかかるという問題がある。
特にビットコインのトランザクションがブロックチェーンで処理されるとき、ネットワークを構成するマイナー装置による上述のPoWに起因して、第1トランザクションTx1、第3トランザクションTx3の処理がブロックチェーンのブロックに組み込まれるまで平均60分を要する。
現在、ビットコインの一つのブロックが承認されるまで約10分間を要することが知られており、ブロックチェーンがほぼ完全に信頼されるまでは6つのブロックが接続される必要があるとされる。
従って、第1トランザクションTx1、第2トランザクションTx2がブロックに完全に組み込まれるまでは約10分×6=60分を要することになる。
その間、互いの利用者が「送金」した仮想通貨を受け取るための第3トランザクションTx3、第4トランザクションTx4を送出することが出来ないため、受け取る予定の仮想通貨を次の取引に利用することが出来ない。
さらに、アトミックスワップの仕組みは、取引所を介さず、利用者間で直接仮想通貨の交換が出来るという利点があるが、取引条件が見合った取引相手を見つけることは容易ではない。取引条件とは、例えば、送金する仮想通貨の種類、着金する仮想通貨の種類、送金する仮想通過と着金する仮想通過との交換レートなどのことである。
本実施形態の仮想通貨取引システムは、アトミックスワップにおいて、取引条件が見合った取引相手を見つけることを容易にし、取引の利便性を向上することを図る。
図5は、本実施形態に係る仮想通貨取引装置(端末装置)の機能構成を示す図であり、(a)はハードウェアによる機能構成を示す図、(b)はソフトウェアによる機能構成を示すブロック図である。
本実施形態の端末装置10a、10b、10c・・・は、仮想通貨を利用する多数の利用者が共通して利用するものであり、共通の構成を有する端末装置10として説明する。
なお、以下の説明では、あくまで一例として、利用者Aと端末装置10aと利用者Bの端末装置10bとの間で行われる処理を説明する。
そして、本実施形態で説明する、例えば、利用者Aが使用する端末装置10aが行う処理と、利用者Bが使用する端末装置10bが行う処理は互いに入れ替え可能である。
下記の説明において、利用者Aが端末装置10aを用いて売り注文を行って、利用者Bが端末装置10bを用いて買い注文を行う場合もあれば、その逆に利用者Bが売り注文を行って、利用者Aが買い注文を行う場合もある。
すなわち、上記の説明では、端末装置10aが秘密の値Rを決定し、アトミックスワップを主導する立場にあったが、当然、端末装置10bが秘密の値Rを決定してアトミックスワップを主導する場合も生じうる。この場合、本実施形態で説明する端末装置10aの処理を、端末装置10bが行い、逆に端末装置10bの処理を、端末装置10aが行うことになる。
端末装置10a、端末装置10bは、本質的に同じ装置であり同様の処理を実行可能であり、役割の違いに応じて、互いに異なる処理を実行することが出来る。
図5(a)に示すように、端末装置10は、装置全体の制御を行う汎用のオペレーティングシステムを実行する。端末装置10は、CPU(Central Processing Unit)11と、RAM(Random Access Memory)12とを備える。さらに、端末装置10は、ドライブ装置13と、記録媒体14と、不図示のROM(Read Only Memory)と、ネットワーク I/F15と、外部IO I/F16とを備える。
CPU11は、端末装置10の機能を実現するプログラムを実行する。RAM12は、CPU11による処理のために各種のプログラムや一時データ、変数が展開される。
ドライブ装置13は、記録媒体14に記憶された情報の読み出しか書き込みかの少なくともいずれか一方を行なう装置である。記録媒体14は、ドライブ装置13によって書き込まれた情報を記憶する。記録媒体14は、例えば、ハードディスク、SSD(Solid State Drive)、CD(Compact Disc)、DVD(Digital Versatile Disc)、ブルーレイディスクなどの種類の記憶媒体のうちの少なくとも1つである。また、例えば、端末装置10は、端末装置10内の記録媒体14の種類に対応したドライブ装置13を含む。
記録媒体14及びROMのすくなくとも一方は、プログラムやデータが格納される。ネットワーク I/F15は、端末装置10をネットワークに接続する。外部IO I/F16は、端末装置10に対して周辺機器を接続する。
外部IO I/F16には、秘密鍵を格納して電子署名の作成に利用するハードウェアウォレットHWを接続することが出来る。
さらに、端末装置10は、マウスやキーボードなどの入力装置17と、液晶ディスプレイなどの表示装置18と、を備え、利用者は、表示装置18に表示された売買注文画面において、仮想通貨の売買注文を行うことが出来る。
また、図5(b)に示すように、CPU11は、処理部として、インターフェイス処理部21と、売り注文処理部22と、買い注文処理部23と、板情報表示処理部24と、アトミックスワップ実行処理部25と、を実行する。
アトミックスワップ実行処理部25は、R値決定処理部25aと、ハッシュ処理部25bと、トランザクション作成処理部25cと、電子署名生成処理部25dと、トランザクション送出処理部25eと、ネットワーク探索処理部25fと、を含む。
インターフェイス処理部21は、表示装置18に売買注文画面100を表示し、売買注文画面100に対する入力装置17を用いた入力を受け付けるための処理部である。
売買注文画面100で設定された項目はRAM12に格納される。
売り注文処理部22は、売買注文画面100に対する入力に基づいて、仮想通貨の売り注文を行うための処理部である。
買い注文処理部23は、売買注文画面100に表示される買い板(板情報)に対する選択操作などに基づいて、仮想通貨の買い注文を行うための処理部である。
板情報表示処理部24は、取引サーバ40から受信した板情報、あるいは端末装置10自体によってブロックチェーンネットワークを探索することによって収集した売り注文から生成した板情報を、インターフェイス処理部21に表示させる処理部である。
図6は、本実施形態の端末装置における売買注文画面の一例を説明する図である。
売買注文画面100は、仮想通貨の売り注文を行うための売り注文欄101と、自端末あるいは他端末で表示された売り注文欄101から行われた売り注文を一覧表示した板情報を表示するとともに買い注文を行うための買い板102と、を備えている。
これはあくまで一例であり、売り注文を行うための画面と、買い板を表示するための画面と、が個別に用意されていてもよい。
売り注文欄101では、例えば、どれだけの数量の(何単位の)仮想通貨Xを、どれだけの数量の(何単位の)仮想通貨Yで売りたいか、を設定することが出来る。
なお、この例では、基準となる仮想通貨Xを、仮想通貨Yで売る(交換する)場合のみが記載されているが、それに限らず、他の仮想通貨同士での売り注文を行えるようにしてもよい。
売り側の利用者の端末装置10において、売りたい仮想通貨Xの数量を入力欄101aに入力し、交換したい(代わりに買いたい)仮想通貨Yの額を入力欄101bに入力した状態で、注文ボタン101cが選択されると、売り注文処理部22が売り注文処理を行う。後述するが、売り注文は、注文内容をアウトプットのOP_RETURNと呼ばれる領域に注文の内容を記したトランザクションをブロードキャストすることによって行われる。OP_RETURNは、トランザクションのアウトプットにおいて80byteの自由データを書ける領域である。
なお、OP_RETURNには、売り注文を行った後で、端末装置10(ウォレット)がオフラインとなった場合でも、売り注文に対する買い注文があったときにはオンラインに復帰できるように通知先のURL若しくはIPアドレスを記載することが出来る。
後述するように、取引サーバ40は、板情報に基づく買い注文があった場合には、対応する売り注文のOP_RETURNに記載される通知先に対して通知を行い、売り側の端末装置を確実にオンラインとして円滑に取引が開始できるように制御する。
買い板102には、板情報表示処理部24が取得、あるいは生成した売り注文の板情報が表示される。
買い側の利用者の端末装置10において、買い板102に表示される売り注文の中から、任意の(買い側の利用者の条件にあった)売り注文が選択されると、買い注文処理部23が買い注文処理を行う。
従来、アトミックスワップによる取引を行う際に、取引条件があった取引相手を探すことは容易ではなかったが、このような板情報を用いることで、条件があう取引相手を容易に見つけることが出来る。
なお、売り注文と買い注文とは表裏一体である。例えば、図6の買い板102に示される売り注文に、利用者Eによる「100単位の仮想通貨Xを、70単位の仮想通貨Yで売りたい」という売り注文がある。
この売り注文を選択することで行われる買い注文は、100単位の仮想通貨Xを利用者Eの希望通り、70単位の仮想通貨Yと引き替えに「買う」注文であると同時に、70単位の仮想通貨Yを100単位の仮想通貨Xと引き替えに「売る」注文に他ならない。
図7は、本実施形態において、仮想通貨の利用者が行った売り注文を説明する図である。
上記したように、売り注文は、注文内容をアウトプットのOP_RETURNと呼ばれる領域に注文の内容を記したトランザクションをブロードキャストすることによって行われる。
図6の買い板102における板情報は、様々な利用者が所望の条件で行った売り注文を取りまとめて表示したものであり、各利用者の端末装置10において以下のような処理が行われることで実現される。
すなわち、図7に示すように、利用者Aの端末装置10aが、100単位の仮想通貨Xを150単位の仮想通貨Yで売りたい旨をOP_RETURNに記したトランザクションをブロードキャストした。
利用者Bの端末装置10bが、100単位の仮想通貨Xを200単位の仮想通貨Yで売りたい旨をOP_RETURNに記したトランザクションをブロードキャストした。
利用者Cの端末装置10cが、100単位の仮想通貨Xを250単位の仮想通貨Yで売りたい旨をOP_RETURNに記したトランザクションをブロードキャストした。
利用者Dの端末装置10dが、100単位の仮想通貨Xを200単位の仮想通貨Yで売りたい旨をOP_RETURNに記したトランザクションをブロードキャストした。
利用者Eの端末装置10eが、100単位の仮想通貨Xを70単位の仮想通貨Yで売りたい旨をOP_RETURNに記したトランザクションをブロードキャストした。
利用者Fの端末装置10fが、100単位の仮想通貨Xを80単位の仮想通貨Yで売りたい旨をOP_RETURNに記したトランザクションをブロードキャストした。
図6の買い板102では、例として、図7に示した各利用者の売り注文を、例えば仮想通貨Xに対する交換レートが低い順に表示している。
また、単一の利用者が、複数の売り注文を出しているような場合には、利用者毎に並び替えて表示するようにしてもよい。
また、後述するが、売り注文を出している利用者毎の取引成功確率によって、売り注文を並び替えて表示してもよい。
なお、図6においては便宜上、売り注文に利用者を付して表示されているが、実際には、利用者のウォレットアドレス(公開鍵、公開鍵ハッシュ)が表示される。
図6の買い板102の売り注文に対する買い注文が行われると(売り注文が選択されると)、選択された売り注文を行った売り側の利用者と、売り注文を選択した買い側の利用者と、の間で、アトミックスワップ実行処理部25によるアトミックスワップが行われる。
図5(b)に戻りアトミックスワップ実行処理部25に含まれる各処理部を説明する。
R値決定処理部25aは、本実施形態では、売り側の端末装置10aにおいて、上記のランダムな値Rを決定する処理部である。
ハッシュ処理部25bは、R値決定処理部25aが決定したランダムな値Rのハッシュ値Hを演算する処理部である。
トランザクション作成処理部25cは、アトミックスワップの契機となった板情報における売り注文又はそれを選択した買い注文の内容に基づいて、アトミックスワップのトランザクションを作成するための処理部である。
電子署名生成処理部25dは、ハードウェアウォレットHWを制御し、ハードウェアウォレットHWに格納されている秘密鍵を利用して電子署名を生成させるための処理部である。
端末装置10に接続されるハードウェアウォレットHWは、夫々、秘密鍵を格納(記憶)する不図示の秘密鍵記憶部と、秘密鍵記憶部に格納されている秘密鍵を用いて電子署名を生成する不図示の署名生成部(回路)を備えている。
ハードウェアウォレットHWは、電子署名生成処理部25dによる制御に基づき、署名生成部において電子署名の生成を行う。
あるいは、ハードウェアウォレットHWは、秘密鍵を格納する機能のみを有し、CPU11(電子署名生成処理部25d)が電子署名を作成するようにしてもよい。
なお、端末装置10に夫々接続されるハードウェアウォレットは、夫々利用者A、利用者Bに帰属し、夫々の利用者の秘密鍵を格納した異なるハードウェアウォレットである。
トランザクション送出処理部25eは、作成したトランザクションを、ネットワーク I/F15を介してブロックチェーンネットワークに送出するための処理部である。
ネットワーク探索処理部25fは、ブロックチェーンネットワークを探索し、承認され、公開されたトランザクションから、アトミックスワップに必要な値(秘密の値R、ハッシュ値H)の値を取得する処理部である。
図8は、本実施形態に係る取引サーバの機能構成を示す図であり、(a)はハードウェアによる機能構成を示す図、(b)はソフトウェアによる機能構成を示すブロック図である。
図8(a)に示すように、取引サーバ40は、CPU41と、RAM42と、HDD43及びROM(図示せず)と、ネットワークI/F44とを備える。CPU41は、装置全体の制御を行う汎用のオペレーティングシステムを実行するとともに、取引サーバ40の機能を実現する。RAM42には、プログラムを実行するCPU41による処理のために各種のプログラム、一時データ及び変数が展開される。HDD43及びROMには、プログラムやデータが格納される。ネットワークI/F44は、取引サーバ40をネットワークに接続する。
また、図8(b)に示すように、CPU41は、処理部として、売り注文取得処理部51と、板情報生成処理部52と、板情報配信処理部53と、買い注文通知処理部54と、取引評価処理部55と、与信・貸付処理部56と、を実行する。
また、取引サーバ40は、記憶部として、注文情報記憶部61、板情報記憶部62、取引評価記憶部63と、を備えている。
売り注文取得処理部51は、仮想通貨Xのブロックチェーンネットワークxの探索を行い、OP_RETURNを用いた売り注文が発見されると、その内容を収集して注文情報記憶部61に格納する処理を行う。
板情報生成処理部52は、注文情報記憶部61に記憶された注文情報に基づいて、板情報を生成し、板情報記憶部62に格納する処理を行う。
板情報配信処理部53は、端末装置10からの要求に応じて、板情報記憶部62に記憶された板情報を、端末装置10に配信する処理を行う。
買い注文通知処理部54は、板情報に含まれる売り注文に対する買い注文が行われたときに、そのことを売り側の端末装置に通知する処理を行う。
取引評価処理部55は、仮想通貨X、Yのブロックチェーンネットワークx、yに対して探索を行い、特定の利用者が過去に行ったアトミックスワップの第1トランザクションTx1の数、第3トランザクションTx3の数から、取引成功回数、取引成功確率を評価し、その評価結果を取引評価記憶部63に格納する処理を行う。
与信・貸付処理部56は、ブロックチェーンネットワークで行われるアトミックスワップを監視し、その実行中に、利用者に対して取引金額に応じた額(数量)の仮想通貨を貸し付ける処理を行う。
なお、本実施形態でいう「貸付」とは、利用者に対して取引金額に応じた額(数量)の仮想通貨を送金することのみを示す。アトミックスワップの正常終了、あるいはキャンセルによって利用者が仮想通貨を取得した後の「返金」については、別途利用者(端末装置)側で、取引サーバ40のウォレットに対する送金トランザクションが公開(ブロードキャスト)されることで行われる。
取引評価記憶部63に格納された利用者毎のアトミックスワップの取引成功確率、取引成功回数は、板情報生成処理部52によって生成される板情報に反映されてもよい。
すなわち、図6に示した端末装置10の売買注文画面100で表示される板情報において、各売り注文に付随して、売り側の利用者の取引成功確率、取引成功回数を表示する。そのようにすることで、買い側の利用者は、取引が成功する見込みが高い売り注文を選んで、買い注文を行うことができる。
板情報において、取引成功確率や取引成功回数によって、売り注文を並び替えて表示するようにしてもよい。
なお、注文情報記憶部61、板情報記憶部62、取引評価記憶部63は、RAM42、HDD43の何れに設定されてもよい。
すなわち、ブロックチェーンネットワークから取得した注文情報や、生成した板情報、各利用者の取引成功確率評価などは、RAM42に保持される一時データとしてのみ扱われても良いし、HDD43にファイルとして格納された上でRAM上にロードされてもよい。
なお、図8の説明おいて、各処理部は、ネットワーク上のブロックチェーンのデータを検索することにより、特定のトランザクションを取得する処理を行っている。また、取引サーバ40がネットワークから取得した完全なブロックチェーンをHDD43に格納しているとき、各処理部は、HDD43に格納されているブロックチェーンのデータを検索することにより、特定のトランザクションを取得してもよい。
図9は、売り側の端末装置が実行する売り注文処理を説明するフローチャートである。
CPU11(インターフェイス処理部21)は、ステップS101において、売買注文画面100の売り注文欄101を用いて、売り注文操作が行われたか否かを判定する。
売り注文操作が行われたと判定した場合(ステップS101でYes)、CPU11(売り注文処理部22)は、ステップS102において、売り注文欄101で設定された売り注文の内容をOP_RETURNに記載したトランザクションを作成する。
売り注文の内容に売り側の利用者のウォレットアドレス(公開鍵、公開鍵ハッシュ)を含めることが好適である。
そして、CPU11(売り注文処理部22)は、ステップS102において、ステップS101で作成したトランザクションをブロックチェーンネットワークに送出(ブロードキャスト)することで、売り注文処理を行う。
売り側の利用者が仮想通貨Xを売る場合、トランザクションは、例えば仮想通貨Xのブロックチェーンネットワークxに送出される。
このときに、CPU11は、手数料支払い手段として、所定の手数料(例えば、仮想通貨X)を取引サーバ40のウォレットアドレスに送金するトランザクションをブロードキャストするようにしてもよい。
売り注文内容を含むトランザクションが承認され、ブロックチェーンに組み込まれることで売り注文が正式に完了する。
図10は、取引サーバが実行する板情報生成・配信処理を説明するフローチャートである。
ステップS111において、CPU41(売り注文取得処理部51)は、板情報の更新タイミングであるか否かを判定する。
更新タイミングであると判定した場合(ステップS111でYes)、CPU41(売り注文取得処理部51)は、ステップS112において、注文情報をOP_RETURNに記載した新たなトランザクションが、仮想通貨Xのブロックチェーンネットワークxにおいて公開されているか否かを判定する。
公開されている場合(ステップS111でYes)、CPU41(売り注文取得処理部51)は、ステップS113において、注文情報をOP_RETURNに記載した新たなトランザクションのOP_RETURNから売り注文の情報(注文者のウォレットアドレス、注文内容)を取得して注文情報記憶部61に格納する。
そして、CPU41(板情報生成処理部52)は、ステップS114において、ステップS113で取得した注文情報を一覧表示した板情報を生成し、板情報記憶部62に格納して今回の処理を終了する。
ステップS111において、板情報の更新タイミングではないと判定した場合(ステップS111でNo)、あるいはOP_RETURNに注文情報を記載した新たなトランザクションが公開されていない場合(ステップS112でNo)、CPU41(板情報配信部53)は、ステップS115において、端末装置から板情報の要求があったか否かを判定する。
板情報の要求があったと判定した場合(ステップS115でYes)、CPU41(板情報配信処理部53)は、ステップS116において、板情報記憶部62に格納されている最新の板情報を、要求のあった端末装置10に配信する。
なお、ブロックチェーンを探索し、売り注文を含むトランザクションから売り注文情報を取得し、板情報を生成する処理は、取引サーバ40で行うのではなく、各端末装置10で行うことも出来る
その場合、端末装置10は、ブロックチェーンを随時監視し、売り注文を含むトランザクションが公開されるとそれを取得して板情報に反映する。
ところで、買い板(板情報)102に表示される売り注文のうち消化された売り注文については買い板102から非表示とされる必要がある。
端末装置10によって行われた買い板102を用いた買い注文が公開された時点で、板情報記憶部62に格納されている板情報から消去してもよいし、買い注文が公開された後、アトミックスワップが正常に終了した時点で(買い側の端末装置10bによって第4トランザクションが公開された時点で)板情報記憶部62に格納されている板情報から消去してもよい。
図11は、買い側の端末装置が実行する買い注文処理を説明するフローチャートである。
CPU11(インターフェイス処理部21)は、ステップS121において、買い板102に表示されている注文内容が入力装置17を用いて選択されることで、買い注文操作が行われたか否かを判定する。
買い注文操作が行われたと判定した場合(ステップS121でYes)、CPU11(買い注文処理部23)は、ステップS122において、買い注文として、買い板102で選択された売り注文の内容をOP_RETURNに記載した買い注文のトランザクションを作成する。買い注文のトランザクションは、売り側の利用者にアトミックスワップをリクエストするトランザクションであると言える。また、その内容として、買い側の利用者のウォレットアドレス(公開鍵、公開鍵ハッシュ)を含めることが好適である。
そして、CPU11(買い注文処理部23)は、ステップS123において、ステップS122で作成したトランザクションをブロードキャストすることで、買い注文処理を行う。
買い側の利用者が、仮想通貨Xと引き替えに仮想通貨Yを「送金」する場合、トランザクションは、例えば仮想通貨Yのブロックチェーンネットワークyに送出される。
このときに、CPU11は、手数料支払い手段として、所定の手数料(例えば、仮想通貨Y)を取引サーバ40のウォレットアドレスに送金するトランザクションをブロードキャストするようにしてもよい。
買い注文内容を含むトランザクションが承認され、ブロックチェーンに組み込まれることで買い注文が正式に完了する。
以上の処理によって、仮想通貨の売り側と買い側のマッチングが終了し、アトミックスワップを行う準備が完了したことになる。
図12は、売り側の端末装置が実行するアトミックスワップ実行処理を説明するフローチャートである。
売り側の端末装置は、ここでは端末装置10aが該当し、図12の説明におけるCPU11は、端末装置10aのCPU11である。
CPU11(アトミックスワップ実行処理部25)は、ステップS151において、売り注文処理に係る売り注文に対応する買い注文のトランザクションが公開されたか否かを判定する。
公開されたと判定した場合(ステップS151でYes)、CPU11(アトミックスワップ実行処理部25)は、ステップS152において、売り注文と、買い注文の内容に基づいて、送金先と、送金額を決定する。
送金先としては、相手方の利用者の公開鍵や公開鍵ハッシュとしてのアドレスが入力される。公開鍵は、事前に交換される。
CPU11(アトミックスワップ実行処理部25)は、ステップS153において、ランダムな値Rを決定し、ステップS154において、値Rのハッシュ値Hを算出する。
ランダムな値Rは、アトミックスワップ実行処理部25によって自動的に生成されてもよいし、売り側の利用者自身が決定して入力するような構成としてもよい。
そして、CPU11(アトミックスワップ実行処理部25)は、ステップS155において、ハードウェアウォレットを制御し、ハードウェアウォレットHW_Aに格納された秘密鍵を利用して第1トランザクションTx1用の利用者Aの電子署名SigA1を生成させる。
そして、CPU11(アトミックスワップ実行処理部25)は、ステップS156において、電子署名SigA1を付した第1トランザクションTx1を作成し、CPU11(トランザクション送出処理部64)は、ステップS157において、第1トランザクションTx1を仮想通貨Yのブロックチェーンネットワークyに送出する。
その後、CPU11(アトミックスワップ実行処理部25)は、ステップS158において、仮想通貨Xのブロックチェーンネットワークxの探索を開始する。
そして、CPU11(アトミックスワップ実行処理部25)は、ステップS159において、(通貨交換の相手方である端末装置10bが作成し、承認されることによって)第2トランザクションTx2が仮想通貨Xのブロックチェーンネットワークxに公開されているか否かを判定する。第2トランザクションTx2はハッシュ値Hを含む。
アトミックスワップ実行処理部25は、ブロックチェーン上のデータの中から、ハッシュ値H、及び利用者Aの公開鍵(アドレス)を含むトランザクションを検索する。これにより、アトミックスワップ実行処理部25は、ブロックチェーン上に第2トランザクションTx2が公開されているか否かを判定する。
または、アトミックスワップ実行処理部25は、端末装置10bから第2トランザクションTx2のトランザクションIDを受け取ってもよい。そして、アトミックスワップ実行処理部25は、受け取ったトランザクションTx2のトランザクションIDを用いてブロックチェーン上のデータを検索する。これにより、アトミックスワップ実行処理部25は、ブロックチェーン上に第2トランザクションTx2が公開されているか否かを判定する。
第2トランザクションTx2が公開されていないと判定した場合(ステップS159でNo)、CPU11(アトミックスワップ実行処理部25)は、ステップS159の処理を繰り返し、第2トランザクションTx2の公開を待機する。
第2トランザクションTx2が公開されていると判定した場合(ステップS159でYes)、CPU11(アトミックスワップ実行処理部25)は、ステップS160において、ハードウェアウォレットを制御し、ハードウェアウォレットHW_Aに格納された秘密鍵を利用して第3トランザクションTx3用の利用者Aの電子署名SigA2を生成させる。
そして、CPU11(アトミックスワップ実行処理部25)は、ステップS161において、電子署名を付した第1トランザクションTx1を作成し、CPU11(トランザクション送出処理部64)は、ステップS162において、第3トランザクションTx1を仮想通貨Yのブロックチェーンネットワークyに送出する。
図13は、買い側の端末装置が実行するアトミックスワップ実行処理を説明するフローチャートである。
買い側の端末装置は、ここでは端末装置10bが該当し、図13の説明におけるCPU11は、端末装置10bのCPU11である。
CPU11(アトミックスワップ実行処理部25)は、ステップS171において、買い注文に基づいて、送金先、送金額を設定する。
そして、CPU11(アトミックスワップ実行処理部25)は、ステップS172において、第1トランザクションTx1が仮想通貨Yのブロックチェーンネットワークyに公開されているか否かを判定する。
アトミックスワップ実行処理部25は、ブロックチェーン上のデータの中から、利用者Aの公開鍵(アドレス)を含むトランザクションを検索する。これにより、アトミックスワップ実行処理部25は、ブロックチェーン上に第1トランザクションTx1が公開されているか否かを判定する。
または、アトミックスワップ実行処理部25は、端末装置10aから第1トランザクションTx1のトランザクションIDを受け取ってもよい。そして、アトミックスワップ実行処理部25は、受け取ったトランザクションTx1のトランザクションIDを用いてブロックチェーン上のデータを検索する。これにより、アトミックスワップ実行処理部25は、ブロックチェーン上に第1トランザクションTx1が公開されているか否かを判定する。
第1トランザクションTx1が公開されていると判定した場合(ステップS172でYes)、CPU11(アトミックスワップ実行処理部25)は、ステップS173において、第1トランザクションTx1に含まれるハッシュ値Hの値を取得する。
次に、CPU11(アトミックスワップ実行処理部25)は、ステップS174において、ハードウェアウォレットHW_Bを制御し、ハードウェアウォレットHWに格納された秘密鍵を利用して、ハッシュ値Hを含んだ第2トランザクションTx2用の利用者Bの電子署名SigB1を生成させる。
CPU11(アトミックスワップ実行処理部25)は、ステップS175において、ステップS174で生成した電子署名SigB1を付した第2トランザクションTx2を作成し、ステップS176において、作成した第2トランザクションTx2を仮想通貨Yのブロックチェーンネットワークyに送出する。
次に、CPU11(アトミックスワップ実行処理部25)は、ステップS177において、ブロックチェーンネットワークyの探索を開始する。
CPU11(アトミックスワップ実行処理部25)は、ステップS178において、第3トランザクションTx3が仮想通貨Yのブロックチェーンネットワークyに公開されているか否かを判定する。
CPU11(アトミックスワップ実行処理部25)は、該当するブロックチェーン全体を検索し利用者Bの公開鍵(アドレス)を含むトランザクションデータを検索することによって、第3トランザクションTx3をブロックチェーンから探し出すことが出来る。
あるいは、第3トランザクションTx3を作成した端末装置10aから、第3トランザクションTx3のトランザクションIDを受け取ることで、そのトランザクションIDに該当するトランザクションを検索することによって、第3トランザクションTx3をブロックチェーンから探し出すことが出来る。
第3トランザクションTx3が公開されていないと判定した場合(ステップS178でNo)、CPU11(アトミックスワップ実行処理部25)は、ステップS178の処理を繰り返し、第3トランザクションTx3の公開を待機する。
第3トランザクションTx3が公開されていると判定した場合(ステップS178でYes)、CPU11(ネットワーク探索処理部65)は、ステップS179において、第3トランザクションTx3のインプットにおける秘密の値Rを取得する。
そして、CPU11(アトミックスワップ実行処理部25)は、ステップS180において、ハードウェアウォレットHW_Bを制御し、ハードウェアウォレットHWに格納された秘密鍵を利用して、Rの値を含んだ第4トランザクションTx4用の利用者Bの電子署名SigB2を生成させる。
CPU11(アトミックスワップ実行処理部25)は、ステップS181において、ステップS180で生成した電子署名SigB2を付した第4トランザクションTx4を作成し、ステップS182において、作成した第4トランザクションTx4を仮想通貨Yのブロックチェーンネットワークyに送出する。
上記のようなアトミックスワップには、取引の成立まで時間がかかるという欠点がある。取引の成立とは、取引対象の仮想通貨を各利用者が最終的に受け取る処理、が完了することである。
従って、アトミックスワップで得られた(得られる予定の)仮想通貨をさらに別の取引に用いたい(回転取引を行いたい)と利用者が考えても、仮想通貨は直ぐに利用可能な状態とはならない。
そこで本実施形態のシステムでは、取引サーバ40は、アトミックスワップでやりとりされる仮想通貨を担保として与信を行い、仮想通貨を双方の利用者に貸し付けることができる。
より具体的には、アトミックスワップのトランザクションを監視し、未承認のトランザクション分は、キャンセルもしくは相当する対価が送金されるものとして、仮想通貨を貸し付ける。キャンセルとは、引の有効期限が過ぎると仮想通貨を元の持ち主に戻す処理のことである。
また、売り注文を出している利用者の過去の取引成功確率をブロックチェーンから計算し、与信する仮想通貨の種類と数量とを決定することも出来る。
図14は、取引サーバが実行する取引評価処理を説明するフローチャートである。
取引サーバ40のCPU41(取引評価処理部55)は、ステップS301において、アトミックスワップの成功確率の評価タイミングであるか否かを判定する。
評価タイミングであると判定した場合(ステップS301でYes)、CPU41(取引評価処理部55)は、ステップS302において、ブロックチェーンネットワークを探索して、特定の利用者が開始したアトミックスワップの全てのトランザクションTx1(ハッシュ値Hを含む)を収集し、ステップS303において、利用者毎に、見つかったトランザクションTx1を計数する。
次いで、CPU41(取引評価処理部55)は、ステップS304において、ブロックチェーンネットワークを探索して、特定の利用者が開始したアトミックスワップの全てのトランザクションTx3(値Rの開示を含む)を収集し、ステップS305において、利用者毎に、見つかったトランザクションTx3を計数する。
特定の利用者が開始した全てのアトミックスワップが正常に開始された場合、その利用者が公開した第1トランザクションTx1の数と、第3トランザクションTx3の数は一致するはずである。
一致しない場合、その利用者は、ランダムな値Rを開示せずにアトミックスワップを中断し、その結果、取引の相手も仮想通貨を受け取っていないことになる。
CPU41(取引評価処理部55)は、ステップS306において、ステップS303で計数した第1トランザクションTx1の数に対する、ステップS305で計数した第3トランザクションTx3の数の割合を、その利用者の「成功確率」として計算する。
そして、CPU41は、ステップS307において、ステップS306で計算した成功確率、ステップS305で計数した成功回数、ステップS303で計数した試行回数(母数)を、利用者毎に関連づけて取引評価記憶部63に格納する。
なお、図14のフローチャートでは、特定の利用者について過去の全てのアトミックスワップのトランザクションを収集するようにしているが、これは初回の評価にのみ必要な処理であり、次回以降の取引評価タイミングでは、初回以降に新たに発生したアトミックスワップのトランザクションのみを取得して、過去分と合算して取引成功確率などを算出することが出来る。
なお、図14の処理は、ブロックチェーンネットワークでアトミックスワップを行った(開始した)全ての利用者の取引成功確率を算出(評価)している。
この方法によっては、特定の利用者が最初に本実施形態の仕組みを用いて売り注文を行い、本実施形態の買い板にその売り注文が表示された時点から、その利用者の過去の取引成功確率や成功回数を全て表示することが出来る。
その反面、全ての利用者について取引履歴を追跡することは、処理負荷や管理すべき情報量の上で問題があるとも言える。本実施形態の仕組みを利用しない利用者の情報は、無駄であると考えられるからである。
そこで、下記に示す売買マッチング後の処理内において、買い板102から開始されたアトミックスワップの成否に基づいて、買い板102に表れた売り側利用者の取引成功確率のみを評価するようにしてもよい。
これにより、ブロックチェーンを探索する負荷や利用者毎の取引成功確率の情報量を著しく低減することが出来る。
図15は、取引サーバが実行する売買マッチング成立後の処理を説明するフローチャートである。
CPU41(買い注文通知処理部54)は、ステップS401においてブロックチェーンネットワークを探索し、板情報に含まれる売り注文に対応する買い注文のトランザクションが公開されたか否かを判定する。
そのようなトランザクションが公開されたと判定した場合(ステップS401でYes)、CPU41(買い注文通知処理部54)は、ステップS402において、売り注文のOP_RETURNに通知先(IPアドレス、URL)の記載があったか否かを判定する。
通知先の記載がないと判定した場合には(ステップS402でNo)、CPU41はステップS404に処理を進める。
通知先の記載があると判定した場合(ステップS402でYes)、CPU41(買い注文通知処理部54)は、ステップS403において、記載された通知先に対して買い注文があったことを通知する。
売り側の端末装置10aにおいて売り注文が行われた後、買い側の端末装置10bで買い注文が行われた場合、に売り側の端末装置にオフラインとなっているとアトミックスワップを開始することが出来ない。
そこで、本実施形態の取引サーバ40では、板情報から買い注文が行われた場合に、対応する売り注文のOP_RETUNに記載された通知先(IPアドレス、URL)に対して通知を行うことで、売り側の端末装置がオンラインとなるように促す。
このように制御することで、板情報を用いて買い注文が行われた場合に、売り注文を行った端末装置(ウォレット)を確実にオンラインとさせて、円滑に取引を開始することが出来る。
その後、CPU41(与信・貸付処理部56)は、ステップS404において、アトミックスワップの第1トランザクションTx1が、売り側の端末装置10aによって公開されたか否かを判定する。
第1トランザクションTx1が公開されたと判定した場合(ステップS404でYes)、CPU41(与信・貸付処理部56)は、ステップ405において、買い側の端末装置10bによって第2トランザクションTx2が公開されたか否かを判定する。
第2トランザクションTx2が公開されたと判定した場合(ステップS405でYes)CPU41(与信・貸付処理部56)は、ステップS406において、売り側の端末装置10aによって第3トランザクションTxがすでに公開されたか否かを判定する。
第3トランザクションTx3がすでに公開されたと判定した場合(ステップS406でYes)、そのまま処理を終了する。
第3トランザクションTx3がまだ公開されていないと判定した場合(ステップS405でNo)、第4トランザクションTx4も当然公開されていないと考えられる。
この状態は、アトミックスワップのために双方の利用者が「送金」した仮想通貨が滞留し、どちらの利用者も受取をしていない状態である。
このような状態では、CPU41(与信・貸付処理部56)は、ステップS407において、図14の処理で評価した、売り側の利用者のアトミックスワップの成功確率に基づいて、貸し付ける仮想通貨と、貸付額を決定する。仮想通貨を貸し付けるとは、売り側の利用者、買い側の利用者に貸付額に応じた仮想通貨を送金する処理のことである。
貸し付ける仮想通貨、貸付額を決定するための基準が、今回の取引における「売り側」に当たる利用者の成功確率であるのは。本実施形態において、ランダムな値Rを決定して取引の主導権を持っているのは売り側の利用者だからである。アトミックスワップの成否は、売り側の利用者がRの値を含む第3トランザクションTx3を公開するか否かに懸かっているため、売り側の利用者の成功確率で取引を評価する
売り側のビットコインと買い側のライトコインを交換する処理を一例として、貸し付ける仮想通貨の種類と数量とを決定する処理を説明する。
<第1例>
ビットコインの売り注文を出している売り側の利用者の過去の取引成功確率が例えば60%の場合、取引サーバ40(与信・貸付処理部56)は、売り側の利用者にはライトコインの取引数量を上限にライトコインを貸し出す。これは、アトミックスワップが成功して売り側がビットコインと引き換えにライトコインを受け取る可能性が比較的高い(60%)ためである。ライトコインの取引数量とは、売り注文及び対応する買い注文で規定されたビットコインと交換するライトコインの数量のことである。
そして、取引サーバ40(与信・貸付処理部56)は、買い側にはビットコインの取引数量を上限にビットコインを貸し出す。これは、アトミックスワップが成功して、買い側がライトコインと引き換えにビットコインを受け取る可能性が高い(60%)ためである。ビットコインの取引数量とは、売り注文及び対応する買い注文で規定されたライトコインと交換するビットコインの数量のことである。
この例の与信・貸付処理では、売り側の利用者の過去の取引成功確率が50%を超える場合、アトミックスワップが成立して、互いに所望する仮想通貨を受け取る可能性が比較的高いため、注文された数量を上限として、取引で受け取る予定の仮想通貨を事前に(取引成立前に)送金する。
逆に、売り側の利用者の過去の取引成功確率が50%以下(未満)であれば、アトミックスワップが成立しない可能性が比較的高い。その場合、仮想通貨の貸付(送金)自体行わないようにするようにしてもよい。あるいは、取引がキャンセルされることを前提に、売り側、買い側の取引の元手となっている仮想通貨(この例であれば、売り側ではビットコイン、買い側ではライトコイン)を、取引数量を上限に売り側、買い側の利用者夫々に貸し出してもよい。
<第2例>
また、上記の<第1例>に比べて細かく条件を設定してもよい。
すなわち、ビットコインの売り注文を出している売り側の利用者の過去の取引成功確率が60%の場合、取引サーバ40(与信・貸付処理部56)は、売り側の利用者には、売り注文及び対応する買い注文で規定されたライトコインの取引数量の6割を上限にライトコインを貸し出すとともに、ビットコインの取引数量の4割を上限にビットコインを貸し出す。
それに対し、取引サーバ40(与信・貸付処理部56)は、買い側の利用者には、ビットコインの取引数量の6割を上限にビットコインを貸し出すとともに、ライトコインの取引数量の4割を上限にライトコインを貸し出す。
売り側の利用者の過去の実績によれば、売り側の利用者は、60%の確率で取引が成功してライトコインを手に入れ、40%の確率で元手のビットコインを取り戻し、売り側の利用者は、60%の確率で取引が成功してビットコインを手に入れ、40%の確率で元手のライトコインを取り戻すと考えられる。
この確率を元に、売り側、買い側双方の利用者に貸し付ける仮想通貨、数量を決定している。
なお、<第1例>、<第2例>において、取引手数料を取る場合には、取引数量から取引手数料に相当する数量を差し引いた数量を、上記取引数量として仮想通貨の貸し出し数量の上限を算出し、仮想通貨を貸し出してもよい。
フローチャートの説明に戻り、ステップS408において、CPU41は、売り側の利用者に、ステップS407で決定した数量の仮想通貨を送金するトランザクションをブロードキャストする。
そして、ステップS409において、取引サーバ40のCPU41は、売り側の利用者に、ステップS407で決定した数量の仮想通貨を送金するトランザクションをブロードキャストする。
以上のように構成することで、本実施形態の仮想通貨取引装置においては、取引速度が遅いアトミックスワップにおいて、アトミックスワップが成功して仮想通貨を受けとる前に、仮想通貨を事前に借り受けて別の取引などに利用することが出来る。
また、アトミックスワップがキャンセルされる場合でも、実際に取引がタイムアウトして元手を取り戻せるようになるまでの時間を無駄にせず、いち早く仮想通貨を受け取って別の取引に利用することが出来る。
このようなことを可能とすることで、仮想通貨の使い勝手、利便性を飛躍的に高めることが出来る。
図16は、売り注文を行った利用者の取引成功確率を反映した板情報を示す図である。
図6、図7に示した利用者A~Fについて、図14の処理で各利用者の過去の取引が以下のように評価されたとする。
すなわち、利用者Aは、100回試行したアトミックスワップが50回成功し、成功確率は50%である。
また、利用者Bは、40回試行したアトミックスワップが12回成功し、成功確率は30%である。
また、利用者Cは、5回試行したアトミックスワップが5回成功し、成功確率は100%である。
また、利用者Dは、30回試行したアトミックスワップが15回成功し、成功確率は50%である。
また、利用者Eは、30回試行したアトミックスワップが30回成功し、成功確率は100%である。
また、利用者Fは、70回試行したアトミックスワップが42回成功し、成功確率は60%である。
そして、図16に示すように、買い板102に表示される板情報に含まれる売り注文には、成功確率、成功回数、試行回数が付加表示される。
この場合、配信サーバ40で生成される板情報では、例えば、図16に示すように、売り注文は、成功確率が高い順、利用者E→利用者C→利用者F→利用者A→利用者D→利用者Bの順番で表示されてもよい。成功率が同じ場合は、成功回数が多い利用者の売り注文を上に表示する。
また、成功確率ではなく、単に、成功回数が多い利用者の売り注文を上に表示するようにしてもよい。
以上のように、取引条件(交換レート)のみならず、アトミックスワップが成功する蓋然性を買い板102上で視認可能としたことで、好ましい取引を判断可能として取引の利便性を大いに高めることが出来る。
10 端末装置、11 CPU、12 RAM、13 ドライブ装置、14 記録媒体、15 ネットワークI/F、16 外部IO I/F、17 入力装置、18 表示装置、21 インターフェイス処理部、22 注文処理部、23 注文処理部、24 板情報表示処理部、25 アトミックスワップ実行処理部、25a R値決定処理部、25b ハッシュ処理部、25c トランザクション作成処理部、25d 電子署名生成処理部、25e トランザクション送出処理部、25f ネットワーク探索処理部、30 マイナー装置、30x マイナー装置、30y マイナー装置、40 取引サーバ、41 CPU、42 RAM、43 HDD、50 ブロックチェーン監視処理部、51 注文取得処理部、52 板情報生成処理部、53 板情報配信処理部、54 注文通知処理部、55 取引評価処理部、56 与信・貸付処理部、61 注文情報記憶部、62 板情報記憶部、63 取引評価記憶部、64 トランザクション送出処理部、65 ネットワーク探索処理部、100 売買注文画面、101 注文欄、102 買い板

Claims (7)

  1. 複数の仮想通貨取引装置間の仮想通貨の取引を仲介する取引サーバ装置であって、
    各仮想通貨取引装置は、仮想通貨の交換数量を指定した売り注文及び買い注文をネットワークに送出し、
    前記取引は、一の利用者からの第1の仮想通貨の送金を示す特定情報を含む第1の送金情報と、前記一の利用者に対して送金された第2の仮想通貨の受け取りを示す第1の受取情報と、他の利用者からの前記第2の仮想通貨の送金を示す前記特定情報を含む第2の送金情報と、前記他の利用者に対して送金された前記第1の仮想通貨の受け取りを示す第2の受取情報と、がネットワークに公開されることにより行われ、
    ネットワークに送出された売り注文に応じた板情報を生成する板情報生成手段と、
    前記板情報を前記仮想通貨取引装置に配信する板情報配信手段と、
    前記取引に含まれる送金情報及び受取情報の少なくとも一つが未承認状態のときに、前記取引で受け取る予定の仮想通貨の数量に応じて与信し、回転取引に利用可能な状態の仮想通貨を前記一の利用者に貸し付ける貸付手段と、
    を備えることを特徴とする取引サーバ装置。
  2. 請求項1に記載の取引サーバ装置において、
    前記貸付手段が貸し付ける仮想通貨の種類は、前記取引が成功したときに、前記一の利用者が受け取る予定の仮想通貨である
    ことを特徴とする取引サーバ装置。
  3. 請求項1に記載の取引サーバ装置において、
    前記貸付手段が貸し付ける仮想通貨の種類は、前記取引が失敗したときに、前記一の利用者が受け取る予定の仮想通貨である
    ことを特徴とする取引サーバ装置。
  4. 請求項1に記載の取引サーバ装置において、
    前記貸付手段が貸し付ける仮想通貨の種類は、前記取引が成功したときに、前記一の利用者が受け取る予定の仮想通貨、及び前記取引が失敗したときに、前記一の利用者が受け取る予定の仮想通貨である
    ことを特徴とする取引サーバ装置。
  5. 請求項1に記載の取引サーバ装置において、
    ネットワークに公開されている、特定の利用者に係る前記第1の送金情報の数に対する前記第1の受取情報の数に応じて、当該利用者に係る前記取引の成功の可能性を評価する評価手段を備え、
    前記貸付手段は、前記評価手段による評価結果に応じて、貸し付けする仮想通貨の数量
    を決定することを特徴とする取引サーバ装置。
  6. 複数の仮想通貨取引装置間の仮想通貨の取引を仲介する取引サーバ装置のプロセッサによって実行される仮想通貨取引方法であって、
    各仮想通貨取引装置は、仮想通貨の交換数量を指定した売り注文及び買い注文をネットワークに送出し、
    前記取引は、一の利用者からの第1の仮想通貨の送金を示す特定情報を含む第1の送金情報と、前記一の利用者に対して送金された第2の仮想通貨の受け取りを示す第1の受取情報と、他の利用者からの前記第2の仮想通貨の送金を示す前記特定情報を含む第2の送金情報と、前記他の利用者に対して送金された前記第1の仮想通貨の受け取りを示す第2の受取情報と、がネットワークに公開されることにより行われ、
    前記プロセッサは、
    前記ネットワークに送出された売り注文に応じた板情報を生成し、
    前記板情報を前記仮想通貨取引装置に配信し、
    前記取引に含まれる送金情報及び受取情報の少なくとも一つが未承認状態のときに、前記取引で受け取る予定の仮想通貨の数量に応じて与信し、回転取引に利用可能な状態の仮想通貨を前記一の利用者に貸し付ける、
    ことを特徴とする仮想通貨取引方法。
  7. 複数の仮想通貨取引装置間の仮想通貨の取引を仲介する取引サーバ装置のプロセッサによって実行されるプログラムであって、
    各仮想通貨取引装置は、仮想通貨の交換数量を指定した売り注文及び買い注文をネットワークに送出し、
    前記取引は、一の利用者からの第1の仮想通貨の送金を示す特定情報を含む第1の送金情報と、前記一の利用者に対して送金された第2の仮想通貨の受け取りを示す第1の受取情報と、他の利用者からの前記第2の仮想通貨の送金を示す前記特定情報を含む第2の送金情報と、前記他の利用者に対して送金された前記第1の仮想通貨の受け取りを示す第2の受取情報と、がネットワークに公開されることにより行われ、
    前記ネットワークに送出された売り注文に応じた板情報を生成し、
    前記板情報を前記仮想通貨取引装置に配信し、
    前記取引に含まれる送金情報及び受取情報の少なくとも一つが未承認状態のときに、前記取引で受け取る予定の仮想通貨の数量に応じて与信し、回転取引に利用可能な状態の仮想通貨を前記一の利用者に貸し付ける、
    処理を前記プロセッサに実行させることを特徴とするプログラム。
JP2021116075A 2018-07-12 2021-07-14 取引サーバ装置、仮想通貨取引方法及びプログラム Active JP7141147B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2021116075A JP7141147B2 (ja) 2018-07-12 2021-07-14 取引サーバ装置、仮想通貨取引方法及びプログラム

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2018132286A JP6959649B2 (ja) 2018-07-12 2018-07-12 仮想通貨取引装置、取引サーバ装置、仮想通貨取引システム、仮想通貨取引方法及びプログラム
JP2021116075A JP7141147B2 (ja) 2018-07-12 2021-07-14 取引サーバ装置、仮想通貨取引方法及びプログラム

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2018132286A Division JP6959649B2 (ja) 2018-07-12 2018-07-12 仮想通貨取引装置、取引サーバ装置、仮想通貨取引システム、仮想通貨取引方法及びプログラム

Publications (2)

Publication Number Publication Date
JP2021168185A JP2021168185A (ja) 2021-10-21
JP7141147B2 true JP7141147B2 (ja) 2022-09-22

Family

ID=69151986

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2018132286A Active JP6959649B2 (ja) 2018-07-12 2018-07-12 仮想通貨取引装置、取引サーバ装置、仮想通貨取引システム、仮想通貨取引方法及びプログラム
JP2021116075A Active JP7141147B2 (ja) 2018-07-12 2021-07-14 取引サーバ装置、仮想通貨取引方法及びプログラム

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2018132286A Active JP6959649B2 (ja) 2018-07-12 2018-07-12 仮想通貨取引装置、取引サーバ装置、仮想通貨取引システム、仮想通貨取引方法及びプログラム

Country Status (1)

Country Link
JP (2) JP6959649B2 (ja)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001265964A (ja) 2000-03-21 2001-09-28 Sharp Corp 取引価格算出装置、取引価格算出方法およびその方法を実現するプログラムを記録した機械読取可能な記録媒体
US20050108027A1 (en) 2003-11-17 2005-05-19 Horger Lee C. Method and apparatus for collecting gambling statistics and for selling speculations via a cryptographically-assisted network
JP2007109020A (ja) 2005-10-13 2007-04-26 Central Tanshi Shoken Kk サーバー装置、取引端末、コンピュータプログラム及び記憶媒体
JP2013041423A (ja) 2011-08-16 2013-02-28 Tokyo Stock Exchange Inc 板情報解析装置、板情報解析方法、及びプログラム
US20150294417A1 (en) 2014-04-10 2015-10-15 Cfph, Llc Spot fixing auction
JP2018045540A (ja) 2016-09-15 2018-03-22 健 坪井 仮想通貨アドレスを含む預金口座情報開示システム

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001265964A (ja) 2000-03-21 2001-09-28 Sharp Corp 取引価格算出装置、取引価格算出方法およびその方法を実現するプログラムを記録した機械読取可能な記録媒体
US20050108027A1 (en) 2003-11-17 2005-05-19 Horger Lee C. Method and apparatus for collecting gambling statistics and for selling speculations via a cryptographically-assisted network
JP2007109020A (ja) 2005-10-13 2007-04-26 Central Tanshi Shoken Kk サーバー装置、取引端末、コンピュータプログラム及び記憶媒体
JP2013041423A (ja) 2011-08-16 2013-02-28 Tokyo Stock Exchange Inc 板情報解析装置、板情報解析方法、及びプログラム
US20150294417A1 (en) 2014-04-10 2015-10-15 Cfph, Llc Spot fixing auction
JP2017510904A (ja) 2014-04-10 2017-04-13 シーエフピーエイチ, エル.エル.シー. スポットフィックスオークション
JP2018045540A (ja) 2016-09-15 2018-03-22 健 坪井 仮想通貨アドレスを含む預金口座情報開示システム

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
Mansi Prakash,Ecosystem of Decentralized Exchanges,[online],Medium,2018年05月30日,https://web.archive.org/web/20180530070918/https://medium.com/@mansiprakash/ecosystem-of-decentralized-exchanges-88ba89f10d64,[2020年9月2日検索]
phideas,barterDEX Whitepaper v2,GitHub,2017年11月09日,https://github.com/SuperNETorg/komodo/wiki/barterDEX-Whitepaper-v2
トレード初心者でもわかる!bitFlyer Lightning 操作方法~証拠金入金から注文種別まで~,[online],ビットコインFX,2017年12月08日,https://web.archive.org/web/20171208204708/https://bitcoin-fx.jp/?p=2091,[令和2年9月2日検索]
ナラヤナン アーヴィンド,仮想通貨の教科書,第1版,日本,日経BP社,2016年12月09日,p.424-427,445-466,ISBN:978-4-8222-8545-6
鹿子木 健,2時間で丸わかり 仮想通貨の超入門書,第1版,株式会社ぱる出版,2018年03月15日,p.155-169,ISBN:978-4-8272-1110-8

Also Published As

Publication number Publication date
JP2021168185A (ja) 2021-10-21
JP6959649B2 (ja) 2021-11-02
JP2020009361A (ja) 2020-01-16

Similar Documents

Publication Publication Date Title
Sunyaev et al. Distributed ledger technology
JP7221546B2 (ja) 公開分散台帳システムにおける取引プライバシー
JP7254701B2 (ja) ブロックチェーン上に格納されたユーザ関連データを生成し及び抽出するコンピュータにより実装されるシステム及び方法
KR101920015B1 (ko) 이종 블록체인 기반의 토큰 관리 방법 및 이를 이용한 토큰 관리 서버
JP6364132B2 (ja) ブロックチェーン取引記録のシステムおよび方法
KR101987692B1 (ko) 블록체인 집행의 스마트 계약을 위한 레지스트리 및 자동화 관리 방법
JP7377312B2 (ja) ブロックチェーンにより実現されるシステム及び方法
US20200051041A1 (en) System and method for arbitrating a blockchain transaction
Schar et al. Bitcoin, Blockchain, and cryptoassets: a comprehensive introduction
JP2001524233A (ja) バーチャルプロパティシステム
KR102181078B1 (ko) 블록체인 기반 중고거래 플랫폼 시스템
JP2020048161A (ja) 取引装置、取引方法及び取引プログラム
AU2022204696A1 (en) Scalable distributed ledger system, transaction privacy and combating fraud, theft and loss
JP2019079502A (ja) アイテム取引システム及びアイテム取引プログラム
JP2019076350A (ja) アイテム取引システム及びアイテム取引プログラム
Vigliotti et al. The Executive Guide to Blockchain: Using Smart Contracts and Digital Currencies in Your Business
Konashevych et al. Randpay: The technology for blockchain micropayments and transactions which require recipient's consent
Flood et al. Blockchain’s future: can the decentralized blockchain community succeed in creating standards?
JP2018022346A (ja) データの取引システム及びプログラム
JP7141147B2 (ja) 取引サーバ装置、仮想通貨取引方法及びプログラム
KR102227291B1 (ko) 암호화폐간 p2p 거래장치 및 방법
Deshmukh et al. A Survey on Blockchain and Cryptocurrency-Based Systems
WO2022153641A1 (ja) 決済システム、決済装置、決済方法及び決済プログラム
Jonéus Analysis of Scalable Blockchain Technology in the Capital Market
Bala et al. Cryptocurrencies as electronic means of payment without the issuer. Computer science, economic, and legal aspects

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210715

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20220830

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220902

R150 Certificate of patent or registration of utility model

Ref document number: 7141147

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150