Untuk agan-agan yang masih bingung dengan merkle root, mari kita coba membuat merkle root semi manual.
Untuk memahami bahasan kali ini agan harus tahu dulu apa itu little endian dan big endian,
tl;dr terkait arah data serial dari most significant byte atau less significant byte (kanan ke kiri atau kiri ke kanan).
Untuk membuat merkle root bitcoin kita harus membalik byte tx hash dari little endian ke big endian (dan sebaliknya). Karena hash-hash pada merkle tree di blockexplorer bitcoin dalam little endian.
Misalnya menggunakan data:
Block 100000
"result": {
"hash": "000000000003ba27aa200b1cecaad478d2b00432346c3f1f3986da1afd33e506",
"height": 100000,
"merkleroot": "f3e94742aca4b5ef85488dc37c06c3282295ffec960994b2c0d5ac2a25a95766",
"tx": [
"8c14f0db3df150123e6f3dbbf30f8b955a8249b62ac1d1ff16284aefa3d06d87",
"fff2525b8931402dd09222c50775608f75787bd2b87e56995a7bdd30f79702c4",
"6359f0868171b1d194cbee1af2f16ea598ae8fad666d9b012c8ed2b79a236ec4",
"e9a66845e05d5abc0ad04ec80f774a7e585c6e8db975962d069a522137b80c1d"
],
"time": 1293623863,
"nonce": 274148111,
"bits": "1b04864c"
"difficulty": 14484.1623612254,
"previousblockhash": "000000000002d01c1fccc21636b607dfd930d31d01c3a62104612a1719011250",
},
1. Perhatikan transaksi pertama:
Little endian: 8c14f0db3df150123e6f3dbbf30f8b955a8249b62ac1d1ff16284aefa3d06d87
2. Pecah-pecah berdasarkan byte:
Little endian tx1: 8c|14|f0|db|3d|f1|50|12|3e|6f|3d|bb|f3|0f|8b|95|5a|82|49|b6|2a|c1|d1|ff|16|28|4a|ef|a3|d0|6d|87
3. Balik byte dari ujung kanan ke ujung kiri, dan seterusnya:
Big endian tx1: 876dd0a3ef4a2816ffd1c12ab649825a958b0ff3bb3d6f3e1250f13ddbf0148c
4. Lakukan hal yang sama dengan ketiga transaksi lainnya:
tx1: 876dd0a3ef4a2816ffd1c12ab649825a958b0ff3bb3d6f3e1250f13ddbf0148c
tx2: c40297f730dd7b5a99567eb8d27b78758f607507c52292d02d4031895b52f2ff
tx3: c46e239ab7d28e2c019b6d66ad8fae98a56ef1f21aeecb94d1b1718186f05963
tx4: 1d0cb83721529a062d9675b98d6e5c587e4a770fc84ed00abc5a5de04568a6e9
5. Gabungkan tx1 dan tx2 (ingat pohon merkle):
876dd0a3ef4a2816ffd1c12ab649825a958b0ff3bb3d6f3e1250f13ddbf0148cc40297f730dd7b5a99567eb8d27b78758f607507c52292d02d4031895b52f2ff
lalu hash dengan sha-256 dua kali:
cd93fc352d3b9f27392b3052c61190609fdc80194ade62771ce9588808980be9
15b88c5107195bf09eb9da89b83d95b3d070079a3c5c5d3d17d0dcd873fbdacc
6. Gabungkan tx3 dan tx4 (ingat pohon merkle):
c46e239ab7d28e2c019b6d66ad8fae98a56ef1f21aeecb94d1b1718186f059631d0cb83721529a062d9675b98d6e5c587e4a770fc84ed00abc5a5de04568a6e9
lalu hash dengan sha-256 dua kali:
7bfbbc4c45c546751e34184c7983911a002881a6d0c82c83cd528c42905f2743
49aef42d78e3e9999c9e6ec9e1dddd6cb880bf3b076a03be1318ca789089308e
7. Gabungkan hasil nomor 5 dan 6 (ingat pohon merkle):
15b88c5107195bf09eb9da89b83d95b3d070079a3c5c5d3d17d0dcd873fbdacc49aef42d78e3e9999c9e6ec9e1dddd6cb880bf3b076a03be1318ca789089308e
lalu hash dengan sha-256 dua kali:
d3385fcaedeb4dcf33129605b444fa22f697ff5600842e0dcec886f3ab981efb
6657a9252aacd5c0b2940996ecff952228c3067cc38d4885efb5a4ac4247e9f3
8. Pecah-pecah berdasarkan byte:
Big endian merkle root: 66|57|a9|25|2a|ac|d5|c0|b2|94|09|96|ec|ff|95|22|28|c3|06|7c|c3|8d|48|85|ef|b5|a4|ac|42|47|e9|f3
9. Balik byte dari ujung kanan ke ujung kiri, dan seterusnya:
Little endian merkle root: f3e94742aca4b5ef85488dc37c06c3282295ffec960994b2c0d5ac2a25a95766
Diinspirasi dari: https://medium.com/coinmonks/how-to-manually-verify-the-merkle-root-of-a-bitcoin-block-command-line-7881397d4db1
Online tools:
https://www.scadacore.com/tools/programming-calculators/online-hex-converter/
http://www.fileformat.info/tool/hash.htm