Ang isang puno ng Merkle ay isang istraktura ng data na ginagamit sa mga aplikasyon sa science sa computer. Sa bitcoin at iba pang mga cryptocurrencies, ang mga puno ng Merkle ay nagsisilbi upang mai-encode ang data ng blockchain nang mas mahusay at ligtas.
Ang mga ito ay tinutukoy din bilang "mga puno ng hash puno."
Paghiwa sa Merkle Tree
Sa blockchain ng bitcoin, ang isang bloke ng mga transaksyon ay pinapatakbo sa isang algorithm upang makabuo ng isang hash, na kung saan ay isang string ng mga numero at titik na maaaring magamit upang mapatunayan na ang isang naibigay na hanay ng data ay kapareho ng orihinal na hanay ng mga transaksyon, ngunit hindi makuha ang orihinal na hanay ng mga transaksyon. Ang software ng Bitcoin ay hindi pinapatakbo ang buong bloke ng data ng transaksyon - na kumakatawan sa 10 minuto na halaga ng mga transaksyon sa average - sa pamamagitan ng hash function sa isang pagkakataon, gayunpaman. Sa halip ang bawat transaksyon ay nasobrahan, kung gayon ang bawat pares ng mga transaksyon ay pinagsama-sama at magkasama, at iba pa hanggang sa may isang pag-hash para sa buong bloke. (Kung mayroong isang kakaibang bilang ng mga transaksyon, ang isang transaksyon ay doble at ang hash nito ay pinagsama sa sarili nito.)
Na-visualize, ang istraktura na ito ay kahawig ng isang puno. Sa diagram sa ibaba, ang "T" ay nagtatalaga ng isang transaksyon, "H" isang hash. Tandaan na ang imahe ay lubos na pinasimple; isang average na bloke ang naglalaman ng higit sa 500 mga transaksyon, hindi walong.
Ang hashes sa ilalim na hilera ay tinutukoy bilang "dahon, " ang intermediate hashes bilang "mga sanga, " at ang hash sa tuktok bilang "ugat." Ang Merkle root ng isang naibigay na bloke ay naka-imbak sa header: halimbawa, ang Merkle root of block # 482819 ay e045b18e7a3d708d686717b4f44db2099aabcad9bebf968de5f7271b458f71c8. Ang ugat ay pinagsama sa iba pang impormasyon (ang bersyon ng software, hash ng nakaraang block, timestamp, ang kahirapan target, at ang nonce) at pagkatapos ay magpatakbo ng isang hash function upang makagawa ng natatanging hash ng block: 000000000000000000bfc767ef8bf28c42cbd4bdbafd9aa1b5c3c33c2b0895. Ang hash na ito ay hindi talaga kasama sa may-katuturang bloke, ngunit ang susunod; naiiba ito sa ugat ng Merkle.
Ang puno ng Merkle ay kapaki-pakinabang dahil pinapayagan nito ang mga gumagamit na mapatunayan ang isang tiyak na transaksyon nang hindi nai-download ang buong blockchain (higit sa 130 gigabytes sa pagtatapos ng Agosto 2017). Halimbawa, sabihin na nais mong patunayan na ang transaksyon T D ay kasama sa block sa diagram sa itaas. Kung mayroon kang hangganan ng ugat (H ABCDEFGH), ang proseso ay tulad ng isang laro ng sudoku: nag-query ka sa network tungkol sa H D, at ibabalik nito ang H C, H AB, at H EFGH. Pinapayagan ka ng punong Merkle na mapatunayan na ang lahat ay accounted para sa tatlong hashes: na ibinigay H AB, H C, H EFGH, at ang root H ABCDEFGH, H D (ang nawawalang hash) ay kailangang naroroon sa data.
Ang mga puno ng Merkle ay pinangalanang Ralph Merkle, na iminungkahi ang mga ito sa isang 1987 na papel na pinamagatang "A Digital Signature Batay sa isang Conventional Encryption Function." Nag-imbento din ang Merkle ng hashing ng kriptograpya.