1. 程式人生 > >比特幣3

比特幣3

文件 形象 影響 一個 歷史 強制 區塊鏈 變化 依次

區塊鏈是由包含交易信息的區塊從後向前有序鏈接起來的數據結構。它可以被存儲為flat file(一種包含沒有相對關系記錄的文件),或是存儲在一個簡單數據庫中。比特幣核心客戶端使用Google的LevelDB數據庫存儲區塊鏈元數據。區塊被從後向前有序地鏈接在這個鏈條裏,每個區塊都指向前一個區塊。區塊鏈經常被視為一個垂直的棧,第一個區塊作為棧底的首區塊,隨後每個區塊都被放置在其他區塊之上。用棧來形象化表示區塊依次堆疊這一概念後,我們便可以使用一些術語,例如:“高度”來表示區塊與首區塊之間的距離;以及“頂部”或“頂端”來表示最新添加的區塊。

對每個區塊頭進行SHA256加密哈希,可生成一個哈希值。通過這個哈希值,可以識別出區塊鏈中的對應區塊。同時,每一個區塊都可以通過其區塊頭的“父區塊哈希值”字段引用前一區塊(父區塊)。也就是說,每個區塊頭都包含它的父區塊哈希值。這樣把每個區塊鏈接到各自父區塊的哈希值序列就創建了一條一直可以追溯到第一個區塊(創世區塊)的鏈條。

雖然每個區塊只有一個父區塊,但可以暫時擁有多個子區塊。每個子區塊都將同一區塊作為其父區塊,並且在“父區塊哈希值”字段中具有相同的(父區塊)哈希值。一個區塊出現多個子區塊的情況被稱為“區塊鏈分叉”。區塊鏈分叉只是暫時狀態,只有當多個不同區塊幾乎同時被不同的礦工發現時才會發生。最終,只有一個子區塊會成為區塊鏈的一部分,同時解決了“區塊鏈分叉”的問題。盡管一個區塊可能會有不止一個子區塊,但每一區塊只有一個父區塊,這是因為一個區塊只有一個“父區塊哈希值”字段可以指向它的唯一父區塊。

由於區塊頭裏面包含“父區塊哈希值”字段,所以當前區塊的哈希值因此也受到該字段的影響。如果父區塊的身份標識發生變化,子區塊的身份標識也會跟著變化。當父區塊有任何改動時,父區塊的哈希值也發生變化。父區塊的哈希值發生改變將迫使子區塊的“父區塊哈希值”字段發生改變,從而又將導致子區塊的哈希值發生改變。而子區塊的哈希值發生改變又將迫使孫區塊的“父區塊哈希值”字段發生改變,又因此改變了孫區塊哈希值,等等以此類推。一旦一個區塊有很多代以後,這種瀑布效應將保證該區塊不會被改變,除非強制重新計算該區塊所有後續的區塊。正是因為這樣的重新計算需要耗費巨大的計算量,所以一個長區塊鏈的存在可以讓區塊鏈的歷史不可改變,這也是比特幣安全性的一個關鍵特征。

你可以把區塊鏈想象成地質構造中的地質層或者是冰川巖芯樣品。表層可能會隨著季節而變化,甚至在沈積之前就被風吹走了。但是越往深處,地質層就變得越穩定。到了幾百英尺深的地方,你看到的將是保存了數百萬年但依然保持歷史原狀的巖層。在區塊鏈裏,最近的幾個區塊可能會由於區塊鏈分叉所引發的重新計算而被修改。最新的六個區塊就像幾英寸深的表土層。但是,超過這六塊後,區塊在區塊鏈中的位置越深,被改變的可能性就越小。在100個區塊以後,區塊鏈已經足夠穩定,這時Coinbase交易(包含新挖出的比特幣的交易)可以被支付。幾千個區塊(一個月)後的區塊鏈將變成確定的歷史,永遠不會改變。

比特幣3