pythonでマークル木を作成する

技術メモ

今日もブロックチェーン大学校の課題にTry!

ブロックチェーンのどれかのブロックで、マークル木を作ってください。ブロックのマークルルートを構成する1世代前の2つのSHA256ハッシュ値を求めなさい

という課題。

Bitcoinを技術的に理解する
という slideshare を発見したが、とてもわかりやすい資料。

pycoinのソースで参考にならないかと探していると以下テストを発見

https://github.com/richardkiss/pycoin/blob/d25926a41c67e2ada2c04c5035f705b2476fd868/pycoin/merkle.py#L51

def test_merkle():
    s1 = h2b_rev("56dee62283a06e85e182e2d0b421aceb0eadec3d5f86cdadf9688fc095b72510")
    assert merkle([s1], double_sha256) == s1
    # from block 71043
    mr = h2b_rev("30325a06daadcefb0a3d1fe0b6112bb6dfef794316751afc63f567aef94bd5c8")
    s1 = h2b_rev("67ffe41e53534805fb6883b4708fd3744358f99e99bc52111e7a17248effebee")
    s2 = h2b_rev("c8b336acfc22d66edf6634ce095b888fe6d16810d9c85aff4d6641982c2499d1")
    assert merkle([s1, s2], double_sha256) == mr

    # from block 71038
    mr = h2b_rev("4f4c8c201e85a64a410cc7272c77f443d8b8df3289c67af9dab1e87d9e61985e")
    s1 = h2b_rev("f484b014c55a43b409a59de3177d49a88149b4473f9a7b81ea9e3535d4b7a301")
    s2 = h2b_rev("7b5636e9bc6ec910157e88702699bc7892675e8b489632c9166764341a4d4cfe")
    s3 = h2b_rev("f8b02b8bf25cb6008e38eb5453a22c502f37e76375a86a0f0cfaa3c301aa1209")
    assert merkle([s1, s2, s3], double_sha256) == mr

ここで参照している 71043 を試してみることにすると、、、

https://blockchain.info/block/000000000055853dcdc641c42eaa56983998ed8173a83773bd0e8b8661ebb2cf

こんな感じのhash値。

67ffe41e53534805fb6883b4708fd3744358f99e99bc52111e7a17248effebee
c8b336acfc22d66edf6634ce095b888fe6d16810d9c85aff4d6641982c2499d1

が1つ前のそれぞれの取引ID。これらをLEにかけて

>>> from pycoin.serialize import h2b_rev
>>> h2b_rev("67ffe41e53534805fb6883b4708fd3744358f99e99bc52111e7a17248effebee").encode('hex')
'eeebff8e24177a1e1152bc999ef9584374d38f70b48368fb054853531ee4ff67'
>>> h2b_rev("c8b336acfc22d66edf6634ce095b888fe6d16810d9c85aff4d6641982c2499d1").encode('hex')
'd199242c9841664dff5ac8d91068d1e68f885b09ce3466df6ed622fcac36b3c8'

こんな感じかなぁ。

Sponsored Link
コメントはまだありません

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


仮想通貨全般
TendermintをDocker使って起動してみる

以前、勉強会に行ってきた際にTendermintの事を聞いて ブロックチェーンプロトコルが実装できる …

仮想通貨全般
Bitcoinのdifficultyを決めるnBitsを理解する

マイニングする際の理解を深めようと思い、マイニング難易度(difficulty)を決めるnBitsに …

仮想通貨全般
EOS Night Meetupにいってきた

今回は、以前からEOSに興味があったので EOS Night Meetupにいってきました。 暗号通 …