区块链记账原理
2019獨角獸企業重金招聘Python工程師標準>>>
本文首發于深入淺出區塊鏈社區 原文鏈接:區塊鏈記賬原理原文已更新,請讀者前往原文閱讀
區塊鏈(1.0)是一個基于密碼學安全的分布式賬本,是一個方便驗證,不可篡改的賬本。 通常認為與智能合約相結合的區塊鏈為區塊鏈2.0, 如以太坊是典型的區塊鏈2.0 很多人只了解過比特幣,不知道區塊鏈,比特幣實際是一個使用了區塊鏈技術的應用,只是比特幣當前太熱,把區塊鏈技術的光芒給掩蓋了。區塊鏈才是未來,期望各位開發人員少關心幣價,多關心技術。 本文將講解區塊鏈1.0技術是如何實現的。
哈希函數
在講區塊鏈記賬之前,先說明一下哈希函數。 哈希函數:Hash(原始信息) = 摘要信息 原始信息可以是任意的信息, hash之后會得到一個簡短的摘要信息
哈希函數有幾個特點:
- 同樣的原始信息用同一個哈希函數總能得到相同的摘要信息
- 原始信息任何微小的變化都會哈希出面目全非的摘要信息
- 從摘要信息無法逆向推算出原始信息
舉例說明: Hash(張三借給李四100萬,利息1%,1年后還本息 .....) = AC4635D34DEF 賬本上記錄了AC4635D34DEF這樣一條記錄。
可以看出哈希函數有4個作用:
- 簡化信息 很好理解,哈希后的信息變短了。
- 標識信息 可以使用AC4635D34DEF來標識原始信息,摘要信息也稱為原始信息的id。
- 隱匿信息 賬本是AC4635D34DEF這樣一條記錄,原始信息被隱匿。
- 驗證信息 假如李四在還款時欺騙說,張三只借給李四10萬,雙方可以用AC4635D34DEF來驗證原始信息
哈希函數的這4個作用在區塊鏈技術里有廣泛的運用。 (哈希函數是一組函數或算法,以后會發文章專門介紹哈希)
區塊鏈記賬方法
假設有一個賬頁序號為0的賬頁交易記錄如下:
| 賬號 | 入賬 | 出賬 | 余額 | 備注說明 | | - | - | - | - | - | | 王二 | 100 | | 190 | 收到xxx貨款 | | 張三 | | 100 | 30 | xxxx | | 李四 | 120 | 90 | 170 | xxxx |
記賬時間為:2017-10-22 10:22:02
區塊鏈在記賬是會把賬頁信息(包含序號、記賬時間、交易記錄)作為原始信息進行Hash, 得到一個Hash值,如:787635ACD, 用函數表示為:
Hash(序號0、記賬時間、交易記錄) = 787635ACD賬頁信息和Hash值組合在一起就構成了第一個區塊。
比特幣系統里約10分鐘記一次賬,即每個區塊生成時間大概間隔10分鐘
在記第2個賬頁的時候,會把上一個塊的Hash值和當前的賬頁信息一起作為原始信息進行Hash,即:
Hash(上一個Hash值、序號1、記賬時間、交易記錄) = 456635BCD這樣第2個區塊不僅包含了本賬頁信息,還間接的包含了第一個區塊的信息。依次按照此方法繼續記賬,則最新的區塊總是間接包含了所有之前的賬頁信息。
所有這些區塊組合起來就形成了區塊鏈,這樣的區塊鏈就構成了一個便于驗證(只要驗證最后一個區塊的Hash值就相當于驗證了整個賬本),不可更改(任何一個交易信息的更改,會讓所有之后的區塊的Hash值發生變化,這樣在驗證時就無法通過)的總賬本。
記賬有成本,想了解節點為什么要記賬,請看這篇:比特幣如何挖礦(挖礦原理)-工作量證明
? 深入淺出區塊鏈 - 系統學習區塊鏈,打造最好的區塊鏈技術博客。
? 我的知識星球為各位解答區塊鏈技術問題,歡迎加入討論。
? 關注公眾號“深入淺出區塊鏈技術”第一時間獲取區塊鏈技術信息。
轉載于:https://my.oschina.net/u/3724910/blog/1809579
總結
- 上一篇: 面向对象(一)
- 下一篇: 正则表达式从基础到深入实战