仮想通貨の個別取引やその記録をトランザクションといい、多くの仮想通貨ではそのネットワークに接続されているノード(コンピュータ)がトランザクションを承認し、それをブロックとしてまとめてブロックチェーンに接続することによってその健全性を保っています。
今回は、トランザクションの仕組みと、どのように承認されているのかを見てみましょう。
トランザクションとは?
トランザクションとは、仮想通貨の個別の取引や記録をさします。例えば「AさんがBさんに5BTCを支払った」という記録はトランザクションですし、「BさんがCさんに10LTC支払った」という記録もトランザクションです。
ビットコインやライトコインのトランザクションは一定時間ごとにまとめられ、1つのブロックに格納され、新しく生成されたブロックは直前のブロックに接続されます。この最古のブロックから最新のブロックまでが1つのチェーンで結ばれたものをブロックチェーンと呼びます。
ブロックチェーンはもっとも古いものから最新の取引まで、全てが記録された取引台帳のようなものです。このブロックチェーンが改ざんされない限りビットコインの不正な取得や使用は起こりえず、そしてブロックチェーンは改ざんが極めて難しいため、不正な取得や使用はまず起こりません。
トランザクションの仕組み
トランザクションの仕組みは仮想通貨によって異なりますが、ビットコインのトランザクションの仕組みを例に見てみましょう。ビットコインのトランザクションは、次の4つのデータで成り立っています。
- Unspent Transaction Output(UTXO)
- アウトプット
- インプット
- メタデータ
Unspent Transaction Output(UTXO)は、「未使用トランザクションアウトプット」と訳され、使用していない使用権のあるビットコインを指します。
ビットコインは残高ではなく、受取総額と支払総額の差額を管理することによって成り立っています。例えば、Aさんから10BTC受け取り、その後Bさんに7BTC支払い、更にその後Cさんから2BTC受け取ったとしましょう。あなたのウォレットの受取総額は12BTC、支払総額は7BTCです。差額は5BTCなので、あなたはビットコインのブロックチェーン上で5BTCを他人に送金する権利を有していることになります。
ビットコインのウォレットにはビットコイン保有量が表示されていますが、それはそのウォレットにビットコインが入っていることを意味しているわけではありません。その数字はあなたのウォレットの受取総額と支払総額の取引の差額であり、あなたが使える権利を有するビットコインの量であると考えてください。
もちろん、ウォレットを仮想通貨の財布と捉えても不都合はありませんが、実際に仮想通貨が入っていないと理解しておくことは重要です。ウォレットの秘密鍵を盗まれれば、ウォレットが手元にあっても勝手に送金されてしまうリスクがあるのは留意が必要です。
アウトプットは受取人に関する情報、インプットは支払人に関する情報です。メタデータはトランザクションそのものの情報を表すおまけのデータのようなもので、トランザクションのデータサイズやトランザクションIDなどが該当します。自分の取引が正確に承認されたか否かを知りたい場合は、そのIDをチェックすればOKです。
取引から承認までの流れ
ビットコインのブロックチェーンは、各ユーザーのトランザクションを世界中に散らばったノードが承認することで成立しています。ビットコインでは、承認の仕組みとしてPoW(Proof Of Work)を採用しています。これは計算能力の高いノードほど承認作業に参加しやすくなる仕組みです。そのため、承認作業をするマイナーは、その作業のために高いノードを大量に用意して稼働させています。
ノードの購入費用もそれが使う電気代も高額なので、一部の大組織以外は事実上承認作業に参加できない状態が続いています。
さて、支払人がビットコインの送金手続きをすると、概ね以下のような流れで承認作業が行われます。
- 支払い手続き
- トランザクションプールに滞留
- 検証
- 承認&ブロックチェーンへの記録
送金手続き
まず、ビットコインの支払人は、支払い手続きを行います。支払い手続きとは「私のウォレットから受取人のウォレットにビットコインを移したいので承認してください」という、いわば「お願い」です。お願いはまず、トランザクションプールというプールに集められます。
トランザクションプールに滞留
トランザクションプールには、支払人、もしくは支払人以外の「お願い」がたくさん滞留しています。マイナーはこのプールの中から自分が承認したいトランザクションを選び出します。この時点では支払人はすでに送金手続きをしたものの、まだ受取人が使えるようにはなっていない、いわば宙ぶらりんの状態です。
検証
マイナーはコンピュータの演算能力を駆使して使って高度な計算を、承認作業を行います。
承認&ブロックチェーンへの記録
承認された支払人のトランザクションは、同時期に承認された他のトランザクションと一緒に、新たに生成されたブロックにまとめられ、ブロックチェーンに繋げられます。この段階で、支払人のトランザクションは1段階の承認を得たことになります。この段階で受取人のもとにビットコインが送られることはほぼありませせん。承認が1回だけだと不正送金のリスクを否定しきれないからです。
支払人のトランザクションが記録されたブロックの次に新しいブロックが接続されると、その時点で2つの承認を得たことになります。更に新しいブロックが接続されると、3つの承認を得たことになります。
承認数が増えれば増えるほど不正送金のリスクは小さくなり、十分に小さくなったときに初めて受け取り権利が与えられます。ビットコインの送金時間は10分と言われますが、それは承認数を1回にした場合の数字です。承認数を増やせば、その分だけ時間がかかります。
何回承認されればOKとするかは取引所やウォレットによって異なりますが、ビットコインなら3段階から6段階が主流です。承認数が少ないほど早く送金できますが、そのかわり不正送金のリスクも高まります。
また、仮想通貨によって安全が確保できる承認数は異なります。例えば、イーサリアム(ETH)はビットコインと比べて多くの承認数を必要とすることが多いです(イーサリアムはブロック生成間隔が短いため、送金時間自体はビットコインよりも短いことが多いです)。
トランザクションの確認方法
ビットコインを送金してから実際にそれが承認されるまでにはかなりの時間がかかるため、送金がうまく言っていないのではないかと心配になります。そんなときは、自分のトランザクションがブロックチェーン上でどの段階かを確認しましょう。
トランザクションの確認のためには前述のトランザクションIDが必要です。仮想通貨取引所から送金した場合は、その取引所のサイト内から確認できます。次に、Blockchain.infoで、トランザクションIDを検索します。するとその取引の承認状況が表示されます。「未承認の取引!」と表示されたら、その取引はまだ誰にも承認されていない状態なので、まだそれなりに長い時間待つ必要があります。「1確認」「2確認」などと表示されているときは、ある程度承認されているので、もう少し待てばOKです。
トランザクションによる問題点
ビットコインの仕組みはよくできていますがそれでも完璧なものではなく、いくつかの弱点を抱えています。その中でも特に大きいのが、トランザクション展性という問題です。
トランザクション展性
トランザクション展性とは、前述のトランザクションIDを、第三者が自由に書き換えられてしまう脆弱性のことです。トランザクションIDは、トランザクションのデータ全体のハッシュ値です。ハッシュ値とはハッシュ関数によって算出される、元データとは全く無関係に見える値です。なにか適当な値をハッシュ関数に通すと、別の値が出てくるのです。
第三者はインプットに含まれる署名を書き換えることによって、送金者や受取人を買えないまま、全く別のトランザクションIDを生成できます。仮にトランザクションIDを書き換えると、どのようなことが起こるのでしょうか。もし、あなたの使っているウォレットがトランザクションIDだけで残高計算を行っているのでなければ、特に問題は起きません。しかし、それを行っている場合は、ビットコインの再送を外部から行えるようになってしまい、いわゆる二重支払いが発生します。
このような問題を解決するために提案されたのがSegwitという技術です。Segwitはすでにビットコインに搭載されており、一定の効果を得ています。