剖析區(qū)塊鏈(五): 核心技術(shù)之merkle樹(shù)

在區(qū)塊鏈中脯倚, merkle樹(shù)充當(dāng)著一個(gè)代表性的角色纲酗,一個(gè)區(qū)塊中的所有交易信息都被它歸納總結(jié)脚猾,大大提高區(qū)塊鏈的效率霍狰。下面先講一下區(qū)塊鏈(以比特幣系統(tǒng)為例)中為什么要用merkle樹(shù)這個(gè)方法抡草,并且引申出比特幣輕錢(qián)包的實(shí)現(xiàn)基礎(chǔ)--簡(jiǎn)化支付驗(yàn)證(SPV)。不會(huì)像單純講技術(shù)那樣枯燥的蔗坯,相信用過(guò)btc錢(qián)包的都會(huì)對(duì)本文感興趣渠牲。

?

大家都知道,比特幣網(wǎng)絡(luò)中所有產(chǎn)生的交易都要打包進(jìn)區(qū)塊中步悠,一般情況下,一個(gè)區(qū)塊中包含幾百上千筆交易是很常見(jiàn)的瘫镇。由于比特幣的去中心化特性鼎兽,網(wǎng)絡(luò)中的每個(gè)節(jié)點(diǎn)必須是獨(dú)立,自給自足的铣除,也就是每個(gè)節(jié)點(diǎn)必須存儲(chǔ)一個(gè)區(qū)塊鏈的完整副本谚咬。在2014年4月,比特幣網(wǎng)絡(luò)中一個(gè)全節(jié)點(diǎn)要存儲(chǔ)尚粘、處理所有區(qū)塊的數(shù)據(jù)择卦,需要占用15GB的空間,并且隨著越來(lái)越多的人使用比特幣郎嫁,每個(gè)月以超過(guò)1GB的速度在增長(zhǎng)秉继。到如今,完整的下載比特幣所有的區(qū)塊數(shù)據(jù)泽铛,也就是運(yùn)行一個(gè)全節(jié)點(diǎn)尚辑,需要200GB以上的空間...


這樣的規(guī)則隨著日益劇增的全節(jié)點(diǎn)所需空間,越來(lái)越難以讓人遵守盔腔,難道讓每個(gè)人都去運(yùn)行一個(gè)全節(jié)點(diǎn)嗎杠茬?還有節(jié)點(diǎn)就是區(qū)塊鏈網(wǎng)絡(luò)中的完全參與者,他們要遵守節(jié)點(diǎn)必須驗(yàn)證交易和區(qū)塊弛随,再加上想要與其他節(jié)點(diǎn)交互瓢喉、下載新區(qū)塊,對(duì)網(wǎng)絡(luò)流量也是有一定要求的舀透,節(jié)點(diǎn)要做的會(huì)越來(lái)越麻煩栓票,并且效率低下。


于是中本聰在比特幣白皮書(shū)中提出了對(duì)這個(gè)問(wèn)題的解決方案:簡(jiǎn)化支付驗(yàn)證(Simplified Payment Verification, SPV)盐杂。SPV是一個(gè)比特幣輕節(jié)點(diǎn)逗载,也就是我們大部分人在電腦安裝的輕量級(jí)的比特幣錢(qián)包哆窿,理論上來(lái)說(shuō),要驗(yàn)證一筆交易厉斟,錢(qián)包需要遍歷所有的區(qū)塊找到和該筆交易相關(guān)的所有交易進(jìn)行逐個(gè)驗(yàn)證才是可靠的挚躯。但有了SPV就不用這么麻煩了,它不需要同步下載整個(gè)區(qū)塊鏈的數(shù)據(jù)即不用運(yùn)行全節(jié)點(diǎn)就可以驗(yàn)證支付擦秽,也不需要驗(yàn)證區(qū)塊和交易码荔,用戶只需要保存所有的區(qū)塊頭就可以了。要知道感挥,區(qū)塊頭包含著區(qū)塊的必要屬性缩搅,僅80個(gè)字節(jié)大小,而區(qū)塊體當(dāng)中包含著成百上千筆交易触幼,每筆交易一般要400多個(gè)字節(jié)大小硼瓣。


這里需要注意的是,SPV強(qiáng)調(diào)的是驗(yàn)證支付置谦,不是驗(yàn)證交易堂鲤。這兩個(gè)概念是不同的。驗(yàn)證支付媒峡,比較簡(jiǎn)單瘟栖,只需要判斷用于支付的那筆交易是否被驗(yàn)證過(guò),以及得到網(wǎng)絡(luò)多少次確認(rèn)(即有多少個(gè)區(qū)塊疊加)谅阿。而交易驗(yàn)證則復(fù)雜的多半哟,需要驗(yàn)證賬戶余額是否足夠支出、是否存在雙重支付签餐、交易腳本是否通過(guò)等問(wèn)題寓涨,一般這個(gè)操作是由全節(jié)點(diǎn)的礦工來(lái)完成。


為了實(shí)現(xiàn)SPV贱田,需要有一種方式來(lái)檢查一個(gè)區(qū)塊是否包含了某筆交易缅茉,而不用去下載整個(gè)區(qū)塊。這就是merkle樹(shù)所要完成的事男摧。先來(lái)看看什么是merkle樹(shù)吧蔬墩。

1.概念

Merkle tree(默克爾樹(shù)),常叫它merkle樹(shù)耗拓,是一種哈希二叉樹(shù)拇颅,在計(jì)算機(jī)科學(xué)中,二叉樹(shù)是每個(gè)節(jié)點(diǎn)最多有兩個(gè)子樹(shù)的樹(shù)結(jié)構(gòu)乔询,每個(gè)節(jié)點(diǎn)代表一條結(jié)構(gòu)化數(shù)據(jù)樟插。通常子樹(shù)被稱作“左子樹(shù)”(left subtree)和“右子樹(shù)”(right subtree)。二叉樹(shù)常被用于實(shí)現(xiàn)數(shù)據(jù)快速查詢。

2.結(jié)構(gòu)

由一個(gè)根節(jié)點(diǎn)黄锤、一組中間節(jié)點(diǎn)和一組葉節(jié)點(diǎn)組成搪缨。葉節(jié)點(diǎn)包含存儲(chǔ)數(shù)據(jù)或其哈希值,中間節(jié)點(diǎn)是它的兩個(gè)孩子節(jié)點(diǎn)內(nèi)容的哈希值鸵熟,根節(jié)點(diǎn)也是由它的兩個(gè)子節(jié)點(diǎn)內(nèi)容的哈希值組成副编。所以Merkle樹(shù)也稱哈希樹(shù)。

3.特點(diǎn)

技術(shù)特點(diǎn)就不多講了流强,主要特點(diǎn)就是:底層(葉子節(jié)點(diǎn))數(shù)據(jù)的任何變動(dòng)痹届,都會(huì)逐級(jí)向上傳遞到其父節(jié)點(diǎn),一直到Merkle樹(shù)的根節(jié)點(diǎn)使得根節(jié)點(diǎn)的哈希值發(fā)生變化打月。


4.總結(jié)原理

區(qū)塊鏈中每個(gè)區(qū)塊都會(huì)有一個(gè) Merkle 樹(shù)队腐,它從葉子節(jié)點(diǎn)(樹(shù)的底部)開(kāi)始,一個(gè)葉子節(jié)點(diǎn)就是一個(gè)交易哈希奏篙。葉子節(jié)點(diǎn)的數(shù)量必須是雙數(shù)柴淘,但是并非每個(gè)塊都包含了雙數(shù)的交易。如果一個(gè)塊里面的交易數(shù)為單數(shù)秘通,那么就將最后一個(gè)葉子節(jié)點(diǎn)(也就是 Merkle 樹(shù)的最后一個(gè)交易悠就,不是區(qū)塊的最后一筆交易)復(fù)制一份湊成雙數(shù)。

從下往上充易,兩兩成對(duì),連接兩個(gè)節(jié)點(diǎn)哈希荸型,將組合哈希作為新的哈希盹靴。新的哈希就成為新的樹(shù)節(jié)點(diǎn)。重復(fù)該過(guò)程瑞妇,直到僅有一個(gè)節(jié)點(diǎn)稿静,也就是樹(shù)根。根哈希然后就會(huì)當(dāng)做是整個(gè)塊交易的唯一標(biāo)示辕狰,將它保存到區(qū)塊頭改备,然后用于工作量證明。


以上就是對(duì)于merkle樹(shù)的介紹蔓倍,感興趣的話悬钳,后面不妨跟著阿深一起一層層剝開(kāi)區(qū)塊鏈,歡迎大家轉(zhuǎn)發(fā)評(píng)論偶翅。如果對(duì)你有幫助不勝榮幸默勾。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市聚谁,隨后出現(xiàn)的幾起案子母剥,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件环疼,死亡現(xiàn)場(chǎng)離奇詭異习霹,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)炫隶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)淋叶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人等限,你說(shuō)我怎么就攤上這事爸吮。” “怎么了望门?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵形娇,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我筹误,道長(zhǎng)桐早,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任厨剪,我火速辦了婚禮哄酝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘祷膳。我一直安慰自己陶衅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布直晨。 她就那樣靜靜地躺著搀军,像睡著了一般。 火紅的嫁衣襯著肌膚如雪勇皇。 梳的紋絲不亂的頭發(fā)上罩句,一...
    開(kāi)封第一講書(shū)人閱讀 52,328評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音敛摘,去河邊找鬼门烂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛兄淫,可吹牛的內(nèi)容都是我干的屯远。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼捕虽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼氓润!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起薯鳍,我...
    開(kāi)封第一講書(shū)人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤咖气,失蹤者是張志新(化名)和其女友劉穎挨措,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體崩溪,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡浅役,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了伶唯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片觉既。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖乳幸,靈堂內(nèi)的尸體忽然破棺而出瞪讼,到底是詐尸還是另有隱情,我是刑警寧澤粹断,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布符欠,位于F島的核電站,受9級(jí)特大地震影響瓶埋,放射性物質(zhì)發(fā)生泄漏希柿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一养筒、第九天 我趴在偏房一處隱蔽的房頂上張望曾撤。 院中可真熱鬧,春花似錦晕粪、人聲如沸挤悉。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)尖啡。三九已至,卻和暖如春剩膘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盆顾。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工怠褐, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人您宪。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓奈懒,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親宪巨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子磷杏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容