おはようビットコイン

ふんわり系ビットコインライフ

8月1日の衝撃:Median Time Pastってなんでしたっけ??

去る8月1日、

ビットコインハードフォークの瞬間を

皆様はどのようにお過ごしになりましたでしょうか。

私はあるビットコイン女子の方と焼酎を飲んでいました。

f:id:ohayo-bitcoin:20170812000547p:plain (※イメージ図です、一人で飲んでいたわけではありません)

ビットコインキャッシュの情報サイトやBCHサポート派取引所などが12:20UTC (日本時間21時20分) に分岐予定と告知していたので、そのつもりで待っていました。

そして21時20分頃、

スマホで様子を見ていたのですが、なんかフォークしていない模様…

よくよく見てみると、後6ブロック待てなどとの情報が。。。

でも、今回のフォークは何番目のブロックで分岐とかそういう決め方じゃなかったし、6ブロック(=1時間) も遅れるとかどういう意味よ?!?!

f:id:ohayo-bitcoin:20170812000847p:plain

というわけで、急いでググったのでした。

で、出てきたのがこれ。

BIP113 - Median Time-Past (MTP)

「このBIPではロックタイムの比較を行うのに、トランザクションが含まれているブロックのタイムスタンプではなく、過去11ブロックのタイムスタンプの中央値を使うことを提案する。既存のコンセンサスルールでは単純にブロックのタイムスタンプを使っているが、このBIPによりマイナーがブロックのタイムスタンプをごまかしてより多くの手数料をかせぐようなことができないようにする。」http://techmedia-think.hatenablog.com/entry/2016/03/30/134859

f:id:ohayo-bitcoin:20170812001311p:plain

残念だけど、意味がわかんなかった。

控えめに言っても、文系女子にはキツい。

大学でやった宗教史も人類学もノリでかじったアラビア語も、ビットコインの大分裂を前にはなんの役にも立ってくれない。

で、結局皆様ご存知の通り、その1時間後くらいにフォークして、その後ブロック生成までに時間が

(以下略)

ビットコインキャッシュの価格が爆

(以下略)

という感じでした。

でも、やっぱり気になってしょうがない

まあ無事フォークしたんだし、

思ってたよりちょっと遅くフォークしただけだから皆興味ないんだろうしな、、なんて思いながらも

11ブロックの平均値って何よ? どうやって計算してるの?

もし次に同じようなことがあったらまた翻弄されるしかないの??

と、気になったので、詳しい人に聞いた事をメモ的に殴り書きします。 (認識が間違ってるとか付け足しとかあったら教えてください)

まず、BIPを読んで分かったこと

今回のハードフォークは11ブロックの中央値に当たる時間が21:20を過ぎないと起きない。

これだけは、分かった。

(ちなみに時間の表記は日本時間を使っています。)

超基礎の基礎、11ブロックのカウントの仕方は?

最新ブロックから過去にさかのぼって11個分のブロックのカウントし、新しいブロックが生成されるたびに毎回計算し直すようです。

f:id:ohayo-bitcoin:20170812001352p:plain

中央値はどうやって分かるの?

最新ブロックから11ブロック遡って真ん中に当たる6ブロック目のタイムスタンプが21:20よりあとの時間になっていればいいのかなと思っていました。

ビットコインの開発に詳しい方に聞いたら、「まあ、だいたいそんな感じ」との微妙なお返事が。

後日別の方から聞くと、最新から11ブロック分のタイムスタンプの時間を出して、それを早い順から遅い順に並べ直して、真ん中(6こ目)のブロックの時間が9:20を過ぎてれば良いという話らしい。

並べ替えとか必要なくない?

と思ったのですが、以下のように後からできたブロックなのになぜか記録されている時間の順番は逆、ということもあるようで

f:id:ohayo-bitcoin:20170813213111p:plain

時計に多少の誤差があるのは当然とは思っていたけれど、

思っていたよりも誤差の幅が大きくて、最大2時間ズレちゃうことがあるらしい。

なので、こういう課題を考慮した上でこんなちょっと面倒くさい方法になったみたいです。

f:id:ohayo-bitcoin:20170812001311p:plain

正直フォークよりも前にMTPを分かっていなかったのはリサーチ不足だったので反省ですが、また一つBIPを覚えるいい機会になりました。

おわり♡