こぶたのラッパ » 2016 年 10 月 25 日

Daily Archives: 2016 年 10 月 25 日

ビットコイン

読んで楽しい「ビットコインとブロックチェーン – 暗号通貨を支える技術」

Published by:

51njhwzbjjl-_sx393_bo1204203200_

技術書でこんなに楽しいと感じたのは、そうとう久々です。
いやでも、これはわくわくせざるを得ませんよ!

特に面白いと感じた箇所をダイジェストで書いてみたいと思います。

ビットコインを送る/受け取る

ジョーのウォレットは、ジョーの資金から0.10 bitcoinをアリスのアドレスに送るというトランザクションを生成し、ジョーの秘密鍵で署名します。
(中略)
peer-to-peerプロトコルにより、このトランザクションの情報はビットコインネットワーク上に素早く伝搬されます。
ネットワーク上で密に繋がったノードのほとんどが、このトランザクションを1秒以内に受け取り、アリスのアドレスを初めて認識します。

ビットコインを送る際は、送り先のアドレス(ビットコインアドレス)を先方から受け取ります。
ビットコインアドレスは1から始まるアルファベット+数字の組み合わせ文字で、やり取りするたびに新しいアドレスを使います

何度かビットコインを移動したり支払いすると分かりますが、「払ったよ」→「受け取ったよ」はメールの送受信と同じくらいの早さで実行されます

「ビットコインは遅い」という話を以前読んだ覚えがあるのですが、トランザクションそのものはあっという間に伝わっています。

ただ、そのトランザクションがブロックチェーンと呼ばれる共有元帳に取り込まれ、その後10分毎の承認を3回とか6回繰り返さないと受け付けませんという「方針」の受取者の場合には時間がかかるということです。

今まで試したところでは承認回数=3回のところが多かったので、20分~30分くらいはかかることになります。

公共料金の支払いなどでは困りませんが、美容室やカフェでビットコイン支払いする場合はそんなに待てません。

そんな少額決済の場合は、トランザクション通知を受けた時点で受け付けるような方針になるでしょうね。

ビットコイントランザクションに関するよくある誤解は、「承認」のために新しいブロックが生成されるまで10分間待たなければならないとか、完全な6回の承認のために60分間待たなければならないといったことです。
承認は、トランザクションがビットコインネットワーク全体に受け入れられたことを保証しますが、このように待つことはコーヒー一杯のような少額の商品には必要ありません。
店舗側は、承認がない場合でも、いつも彼らが受け入れている個人IDや署名がないクレジットカードよりリスクが大きくないなら、有効な少額のトランザクションを受け入れるでしょう。

なぜ「承認」が必要かというと、同じビットコインアドレスを同時に二重使用した場合に、決済後に片方がキャンセルされる可能性があるためです。

二重使用は技術的に(今のところ)難しい手法のため、頻繁に発生するとは思えませんが、今後簡単に起こすツールなんかが出ないとも限りません。

高額のやり取りの場合は気をつけないとだめですね。

1ビットコイン=ン万円なのに、どうやって支払うの?

正直に言いますと、つい最近まで私も、1ビットコイン=1ビットコインアドレスだとすると、どうやって支払いに使うの?なんて素朴に思っていました。

ビットコインのやり取りの最小単位は 1/100,000,000 ビットコインで、ビットコイン考案者のナカモト・サトシ氏にちなんで「1 satoshi」と呼ばれています。
1ビットコイン=6万円とすると、1 satoshi=0.0006円なので、少額決済ももちろん可能なんですね。

じゃあビットコインアドレスって何?となりますが、これは支払い時のワンタイム・アドレスのようなもので、トランザクションを識別するためにつけているだけのものです。

ですので、ウォレット(お財布)にビットコインが 1 ビットコインありますという時にも、実際は受け取りトランザクションの合計値を表示していて、例えば 0.1 受け取りビットコイン+0.5 受け取りビットコイン+0.4 受け取りビットコインのトランザクションをウォレットがかき集めて足し算して表示してくれてるんです。

ちなみに一回のやり取りごとに一定の手数料(今は3~5円くらい)を払う必要がありますが、これは決済会社がマージンとして取っているわけではなく、マイナー(マイニングを行っている人々)への報酬として使われています。

マイニングってどんな計算を行ってるの?

ビットコインはマイニング(採掘)という操作を行ってはじめて発行されます。

これもこの本を読むまでは、何か特殊な数学的な計算を専用コンピュータに行わせて、その解を得た人がビットコインを貰えると思っていました。

大体この通りとも言えるのですが、実際はビットコインのやり取り(トランザクション)をブロックに詰め込んで、共有元帳に加えていいか、検証する操作を行っています。

ビットコインネットワークに送られたトランザクションは、グローバルに分散した元帳であるブロックチェーンの一分となるまでは、検証されたことになりません。
平均して10分ごとに、マイナーはブロックチェーンに取り込まれていないトランザクションを含むブロックを生成します。
新しいトランザクションは、ウォレットやその他のソフトウェアから常にビットコインネットワークに流れ込みます。
ビットコインネットワークのノードがこの新しいトランザクションを見つけると、各ノード中にある、未検証のトランザクションを一時的にとどめておくトランザクションプールに加えます。
マイナーは新しいブロックを作るとき、未検証のトランザクションをこのプールから取り出して新しいブロックに追加します。
その上で、新しいブロックの有効性を証明するために(proof of workとして知られる)非常に難しい問題を解きます。

単に無意味な計算を行っているわけではなく、ビットコインネットワークの基本となる共有元帳(ブロックチェーン)を成り立たせるという、大事な役割を担ってるんですね。

プールに貯まっているトランザクションのうち、頭から数百件をかき集めて一つのブロックにまとめ、そのブロックのハッシュ値がある決められた値になるよう計算し、最初に計算した人が各トランザクションに含まれている手数料を受け取ることが出来ます。

また、この人はこの手数料とは別に、新規に発行されたビットコイン(2016年10月時点で12.5ビットコイン。時間とともに報酬金は減っていく)を受け取ります。

ちょっとマイニングを試してみたいなという人は諦めたほうがいいです。
特殊な専用ハードウェア+専用環境をそろえないと、まるで徒労に終わります。

その他気になるキーワード

ビットコインクライアント・・・ビットコインコアと呼ばれる、ビットコインシステムのすべての機能を実装しているクライアントです。インストールして実行すると、数日がかりで元帳をダウンロード&同期します。

楕円曲線暗号・・・ビットコインで使っている公開鍵などを生成するために使いますが、ものすごい詳しく書かれています。読むと頭が良くなったように感じます。

階層的決定性ウォレット・・・ビットコインのやり取りに使うビットコインアドレスですが、一つのルートキーからツリー構造で生成することが出来ます。元となるキーは秘密のままに、子キーだけを人に渡して支払い操作をしてもらうなんてことが可能です。

Proof-Of-Workアルゴリズム・・・マイニングで行っている「特殊な計算」が何をしているのか、詳細にわかりやすく説明してくれています。これも一度読むと人に教えたくなります。

ブロックチェーンフォーク・・・全世界で同時にマイナーが競い合っているブロックチェーン作りですが、同時に別のブロックが承認されたらどうなるの?という、ある意味ブロックチェーンの肝とも言える部分は、けっこう最後の最後でやっと教えてくれます。読んですっきり!