ハードフォークの衝撃:Median Time Pastってなんでしたっけ?
こんにちは、ヨリコビールです。この記事では2017年のビットコイン分裂の瞬間に学んだMedian Time Pastについて説明しています。フォークのタイミングがブロックの番号ではなく時間で指定されている場合、予定時刻よりもしばらく後にフォークする理由をゆるふわ文系女子視点で解説します。
__________________
2017年8月1日、ビットコインハードフォークの瞬間を
皆様はどのようにお過ごしになりましたでしょうか。
私はあるビットコイン女子の方と焼酎を飲んでいました。
(※イメージ図です、一人で飲んでいたわけではありません)
ビットコインキャッシュの情報サイトやBCHサポート派取引所などが12:20UTC (日本時間21時20分) に分岐予定と告知していたので、そのつもりで待っていました。
そして21時20分頃、
スマホで様子を見ていたのですが、なんかフォークしていない模様...
よくよく見てみると、後6ブロック待てなどとの情報が。
21時20分にハードフォークする予定なのに6ブロック(=1時間) も遅れるとかどういう意味よ?!?!
というわけで、急いでググったのでした。 どうやら21時20分(MTP)というのがキーワードのようです。
で、出てきたのがこれ。
BIP113 - Median Time-Past (MTP)
「このBIPではロックタイムの比較を行うのに、トランザクションが含まれているブロックのタイムスタンプではなく、過去11ブロックのタイムスタンプの中央値を使うことを提案する。」
http://techmedia-think.hatenablog.com/entry/2016/03/30/134859
上記の解説を書いている方は本当にすごい方なのですが、文系女子の私にはどういう意味か理解できませんでした。
大学で学んだ宗教史もアラビア語も、ビットコインの大分裂を前にはなんの役にも立ってくれない。
で、結局皆様ご存知の通り、その1時間後くらいにフォークして、その後ブロック生成までに時間が
(以下略)
でビットコインキャッシュの価格が爆
(以下略)
という感じでした。
でも、やっぱり気になってしょうがない
まあ無事フォークしたんだし、
思ってたよりちょっと遅くフォークしただけだから皆興味ないんだろうしな、、なんて思いながらも
11ブロックの平均値って何よ? どうやって計算してるの?
もし次に同じようなことがあったらまた翻弄されるしかないの??
と、気になったので、詳しい人に聞いた事をメモ的に殴り書きします。 (認識が間違ってるとか付け足しとかあったら教えてください)
まず、BIPを読んで分かったこと
今回のハードフォークは11ブロックの中央値に当たる時間が21:20を過ぎないと起きない。
これだけは、分かった。
(ちなみに時間の表記は日本時間を使っています。)
超基礎の基礎、11ブロックのカウントの仕方は?
最新ブロックから過去にさかのぼって11個分のブロックのカウントし、新しいブロックが生成されるたびに毎回計算し直すようです。
中央値はどうやって分かるの?
最新ブロックから11ブロック遡って真ん中に当たる6ブロック目のタイムスタンプが21:20よりあとの時間になっていればいいのかなと思っていました。
ビットコインの開発に詳しい方に聞いたら、「まあ、だいたいそんな感じ」との微妙なお返事が。
後日別の方から聞くと、最新から11ブロック分のタイムスタンプの時間を出して、それを早い順から遅い順に並べ直して、真ん中(6こ目)のブロックの時間が9:20を過ぎてれば良いという話らしい。
並べ替えとか必要なくない?
と思ったのですが、以下のように後からできたブロックなのになぜか記録されている時間の順番は逆、ということもあるようで
時計に多少の誤差があるのは当然とは思っていたけれど、
マイナーの時計は思っていたよりも誤差の幅が大きくて、最大2時間ズレちゃうことがあるらしい。
なので、こういう課題を考慮した上でこんなちょっと面倒くさい方法になったみたいです。
正直フォークよりも前にMTPを分かっていなかったのはリサーチ不足だったので反省ですが、また一つBIPを覚えるいい機会になりました。
ハードフォークのカウントダウンをしたのに肩透かしを食らってしまった方のお役に立てば幸いです。