昨天,對於比特幣裡的技術做了一個拆分、分層,有資料層、網路層、共識層、激勵層、應用層。今天來好好談談資料層,也是最為基礎、最為重要的一塊。
區塊鏈,實際上最最最小的儲存單位為 交易 (不清楚是否存在例外,不過比特幣、乙太坊、EOSIO等等都是以交易為最小單位)。 區塊 內存有數個交易,並且是實際儲存的最小單位。透過區塊的處理驗證,使用有驗證資訊的人可以驗證區塊是否遭到竄改,而這個驗證資訊實際會再作為一個元資料給下一個區塊儲存。也就是每個區塊除了交易資料外,還包含著上一個區塊的驗證資訊,好可以加以驗證上一個區塊的正確性。
透過這樣一塊接著一塊的方式,就有了一個儲存交易、儲存區塊的 鏈狀結構 ,也就是實際 區塊鏈 技術。由於每個區塊都包含前一個區塊的驗證資訊,而這個驗證資訊也是屬於區塊內資料的一部分,所以在產生新的驗證資訊時,也就包含前一個區塊的驗證資訊。這意為著下一個區塊包含過往區塊的隱含資訊。如果前一個區塊遭到竄改,驗證資訊就不會一樣,而因為驗證資訊不同,亦隱含表示區塊內資料遭到竄改,故新的驗證資訊也會不同。
這有些類似蝴蝶效應,過往歷史遭到修改,可能會對未來區塊造成重大影響。反過來看,如果現在擁有一塊正確區塊,就可以驗證所有過往歷史。也就對於要欺騙一個人關於過往歷史的訊息,越是久遠,就越難欺騙。這也是區塊鏈難以竄改特性的重要原因。
不過剛剛說到的驗證資訊是對於區塊而言,那ㄇ交易的?實際上交易包含兩個重要訊息,一個是驗證發起交易的人的訊息;另一個就是交易本身的摘要訊息。 摘要訊息 相似於驗證訊息,並且透過雜奏串鏈(hash list)、雜奏樹(hash tree)的方式將多個交易資料更加以濃縮,並儲存於區塊鏈技術中的 輕量級區塊 [^1]。
默克爾樹 是比特幣中使用的雜奏樹,他長的有點向下面這樣:
上面說到,交易還包含著 驗證發起交易的人的訊息 ,也就是 交易簽章 。交易簽章的基礎技術是 非對稱式加密 。 透過一組成對訊息,對外發布其中一個,而祕密保留另外一個。而他人可以透過公開的訊息加以驗證交易是否是由擁有祕密訊息的人發出的。(突然覺得要簡單解釋好困難阿~~)
或著想想著有個人帶了一張你的簽名,要求你再簽名一次,以確定是同一個人。在今天,許多應用著橢圓式加密的方式進行。(不完全單純是)
上述的驗證訊息,同樣是透過數學方式。而這類的方式稱作 單向雜奏方法 。不過這不意味著真的是單向的,只是一個方向計算非常容易,而另外一個方向的計算極度困難。甚至多數因為會濃縮原始訊息,而有可能產生碰撞。
其他可閱讀資源:
[^1]:相對於 完整區塊 ,輕量級區塊不包含完整交易資訊,驗證時需要向完整區塊請求相關訊息。但有個較低儲存空間的需求、教低網路廣播的需求。