(O+P)ut

OutPut Log by SE in SIer



(O+P)ut

OutPut Log by SE in SIer

【ブロックチェーン】なぜ送金手数料を高めに設定するのか

スポンサーリンク

f:id:mtiit:20181209112106p:plain
とある記事にて
ビットコインの送金を早くするためには送金手数料を高めに設定すればよい
と記載されていました。

書面の都合か自明だから、理由が解説されていなかったので、
本記事ではこの理由について解説します。

それは、タイトルの「なぜ送金手数料を高めに設定する必要があるのか」という問いへの答えでもあります。
一般的に、送金手数料は少なければ少ないほど嬉しいはずです。


結論からいうと、
トランザクションプールにトランザクジョンを入れるか入れないかはマイナーが選択できる からです。
この説明で理解できた方は本記事を読む必要はないと思います。


記事の中では、読者を置いてけぼりにしないよう適宜QA形式をとっています。
他にも素朴な疑問があれば、コメント欄にてお知らせください。


そもそもブロックチェーンとは

本記事を読んでいる方は既にご存知かとは思いますが、念のために説明します。

ブロックチェーンとは分散型台帳技術の一つで、ブロックの連なりで構成されています。

そのブロックチェーンの中に複数のトランザクションが格納されており、
AさんからBさんにX円送金する、というのがトランザクションの一例です。

ブロックの中にはトランザクション以外にも

  • 一つ前のブロックのハッシュ値
  • ルートハッシュ
  • ナンス

というものがブロックに格納されています。

f:id:mtiit:20181208223104j:plain
(ブロックの構成)


一つ前のブロックのハッシュ値

一つ前のブロックのハッシュ値が格納されています。
こちらは、不変です。

これは何に使うんですか?

今回の説明ではあまり登場はしないですが、過去のトランザクションを書き換えるのを防止するのに役立ちます。

ルートハッシュ値(トップハッシュ値)

このブロックの中に入っている全てのトランザクション(上の図でいうTx)から構成される値です。
図にもあるように全てのトランザクションから計算されているので、
例えばトランザクションが一つ追加されるとこの値も変わります。

TxやHashは具体的に何ですか?

Txはトランザクションで、それを扱いやすいような一定の長さの値に変換するのがHashです。Txを書き換えるとルートハッシュ値も変わってしまうのがポイントです。

ナンス

一つ前のブロックのハッシュ値とルートハッシュ値にぴったりあう値( ナンス )を見つけることができれば、ブロックを前のブロックの続きに繋げることができます。

ぴったりあう値を見つけるうまい方法が現在は見つかっていないので、総当たりで試すしかありません。
f:id:mtiit:20181208231239j:plain

上の図ではBlock1208ではナンスが既に確定しているので、各コンピュータはBlock1209のナンスを見つけようとしているという状態です。

なぜナンスを求める作業を各コンピュータは行うのですか?

ブロックを繋げることに成功すると、そのブロックに含まれる全てのトランザクションの送金手数料とプラスアルファ*1を報酬として受け取れるからです。

ナンスを見つけて報酬を受け取ることをマイニングというため、ナンスの計算をしているコンピュータをマイナーと呼びます。


さて、やっと送金手数料という用語が出てきました。ここらが本題です。



送金手数料

送金手数料とは、トランザクションTxの中に含まれています。
例えば、Cが以下のようなトランザクションTxCを発生させたとします。
f:id:mtiit:20181209095709j:plain
すると、ブロックチェーンは分散台帳なので他のコンピュータにも取引が伝搬していきます。

しかし、それをブロックに取り込むか取り込まないかはそれぞれが決定することができます。
取り込むトランザクションはトランザクションプールというところに保管します。

分散台帳なのだからトランザクションプールの中身は全員同じでは?

違います。
トランザクションプールにはまだ検証されていないトランザクションが入っており、各参加者で違う可能性があります。

どこかで各参加者は同じ台帳を持っていると読んだ気がしますが?

それは、既に検証済みの過去のブロックのことです。
現在検証中のブロックはそれぞれが違う中身であり、
ナンスを最初に発見した人のブロックが、確定済みのブロックとして各参加者に通知され、共有されます。


ここが肝ですが、
一つのブロックに含むことができるトランザクションには上限が設定されているので、参加者は手数料が大きい取引をできるだけトランザクションプールに取り込もうとします。
よって、トランザクションが発生して他の参加者にも伝搬したにも関わらず、それが各自のトランザクションプールに取り込まれない可能性があります。

トランザクションがブロックプールに取り込まれないとなぜ困るんですか?

もし、そのトランザクションを取り込んでいない参加者がナンスを発見すれば、その取引は少なくとも次のブロックで取り込まれるまでは成約されないことになるからです。

少なくとも?

次のブロックのナンスを求めるコンピュータのブロックプールに必ず取り込まれる保証がないので少なくとも、と記載しています。最速で次のブロックで取り込まれます。


要は、確率の問題です。

いくら手数料が高くてもトランザクションが伝搬されるのには時間がかかるので、トランザクションが届く前にナンスを発見すればそのトランザクションは取り込まれず次のブロックに回されてしまいます。

どのコンピュータがナンスを発見するか分からない以上は、届いたら90%取り込んでもらえるトランザクションと届いても10%しか取り込んでもらえないトランザクションでは後者の方が成約が遅れる可能性が高いということです。
そして、取り込まれるか否かは手数料で判断されます。

取り込まれたトランザクションと取り込まれなかったトランザクションはどうなるのですか?

取り込まれたトランザクションは次のブロックではトランザクションプールから消されます。
f:id:mtiit:20181209102720j:plain
上のようにBがナンスを発見し、ブロックを繋げることに成功したとします。
それぞれのコンピュータは、Bからその報告を受け取り、確かにナンスが正しいことを確認して次のブロックのナンス探しに移ります。
その際に、Bの報告に含まれているトランザクションの中で自分のトランザクションプールに入っているものがあれば除外します。AとCは、TxAとTxBが検証済みであることを知って自分のプールから除外してナンスを探すわけです。

この場合では、
TxCはBlockXでは取り込まれていませんのでBloxkX+1での成約が次のチャンスです。
f:id:mtiit:20181209103952j:plain

まとめ

再掲ですが、
なぜビットコインの送金を早くするためにはお送金手数料を高めに設定すればよいのかという問いへの答えは、
トランザクションプールにトランザクジョンを入れるか入れないかはマイナーが選択できる から、です。

正確に言えば、送金を早くするというよりかは送金を遅くしないための施策です。

どんなに手数料を高めに設定したとしても、参加者がナンスを発見するまでの時間を短くすることができないからです。

まとめとして、
ブロックチェーン技術は、大型メインフレーム等を利用せずとも決済を行える事から少ない送金手数料で送金が可能という面も確かにあります。
ただ、それだけではなく、成約に至るまでの時間が保証されないというネガティブな側面にも合わせて目を向けることが肝要と思います。

以上、なぜ送金手数料を高めに設定するのか、でした。ご参考になれば幸いです。

*1:プラスアルファとはマイニング報酬のことを指します。例えばビットコインでは、一定期間毎に半減していき、最終的にはなくなります。