[比特币]比特币中的数据结构
哈希指針(Hash Pointers)
對(duì)于一個(gè)結(jié)構(gòu)體而言,指向它的指針存儲(chǔ)的是它在內(nèi)存中的首地址;而指向它的哈希指針,不僅保存這它的首地址,還保存著該結(jié)構(gòu)體內(nèi)容的哈希值。通過(guò)哈希指針,不僅可以找到該結(jié)構(gòu)體,還能查驗(yàn)該結(jié)構(gòu)內(nèi)容是否被篡改過(guò)。
區(qū)塊鏈
比特幣中存儲(chǔ)數(shù)據(jù)用的是區(qū)塊鏈。所謂區(qū)塊鏈,可以理解為鏈表。不過(guò)與鏈表不同的是,區(qū)塊鏈?zhǔn)褂霉V羔槾媪似胀ㄖ羔槨O聢D為區(qū)塊鏈簡(jiǎn)單結(jié)構(gòu):
哈希指針包含在該區(qū)塊的區(qū)塊頭中,它是對(duì)前一個(gè)區(qū)塊的整體進(jìn)行哈希運(yùn)算得到的。
Merkle tree
如上圖所示,與Binary tree不同,Merkle tree中各節(jié)點(diǎn)保存的都是子節(jié)點(diǎn)的Hash值。
在Merkle Tree中,每個(gè)葉子存儲(chǔ)的都是一筆交易的Hash,父節(jié)點(diǎn)存儲(chǔ)的是對(duì)子節(jié)點(diǎn)取Hash后的值。所以如果有交易內(nèi)容內(nèi)容被修改,那么最終都會(huì)輻射到Merkle Tree的根節(jié)點(diǎn)。
比特幣中的應(yīng)用
在比特幣網(wǎng)絡(luò)中,所有的交易信息都是存儲(chǔ)在區(qū)塊中,通過(guò)Hash指針組織成區(qū)塊鏈;每個(gè)區(qū)塊都可以分為兩部分:block header和block body。block body中存儲(chǔ)該區(qū)塊包含的所有交易,block header中包含有前一個(gè)區(qū)塊的Hash(只是對(duì)前一個(gè)區(qū)塊的Block header進(jìn)行Hash,并非對(duì)整個(gè)區(qū)塊進(jìn)行Hash),本區(qū)塊中所有交易組成的Merkle tree的根Hash以及其它信息(包括區(qū)塊版本、挖礦難度、時(shí)間戳、Nonce)。
在比特幣網(wǎng)絡(luò)中,存在兩種類(lèi)型的節(jié)點(diǎn):
全節(jié)點(diǎn),存儲(chǔ)有整個(gè)比特幣網(wǎng)絡(luò)中的所有block。
輕節(jié)點(diǎn),只存儲(chǔ)block header。比特幣錢(qián)包就是輕節(jié)點(diǎn)的一種。輕節(jié)點(diǎn)并不參與比特幣網(wǎng)絡(luò)的構(gòu)建,只能算是比特幣網(wǎng)絡(luò)的一個(gè)應(yīng)用。
在使用比特幣錢(qián)包交易時(shí),需要向收款方證明該交易已經(jīng)被寫(xiě)入?yún)^(qū)塊。此時(shí),可以使用 Merkle Proof來(lái)證明該交易已被寫(xiě)入?yún)^(qū)塊。
提供Merkle Proof時(shí),錢(qián)包會(huì)向附近的全節(jié)點(diǎn)發(fā)出請(qǐng)求,全節(jié)點(diǎn)會(huì)將Merkle tree中與該交易相關(guān)路徑上的節(jié)點(diǎn)返回給請(qǐng)求方,之后錢(qián)包再將收到的信息發(fā)送給收款方進(jìn)行驗(yàn)證。如下圖所示,全節(jié)點(diǎn)只需將紅框選中的Hash返回給錢(qián)包即可,其它節(jié)點(diǎn)的Hash因?yàn)椴粎⑴c計(jì)算,所以無(wú)需返回。
聲明:本作品采用署名-非商業(yè)性使用-相同方式共享 4.0 國(guó)際 (CC BY-NC-SA 4.0)進(jìn)行許可,使用時(shí)請(qǐng)注明出處。
總結(jié)
以上是生活随笔為你收集整理的[比特币]比特币中的数据结构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Salesforce的基础用户界面定制
- 下一篇: 美图秀秀首页界面按钮设计(二)