簡述區塊鏈(1)- 也許只有這一篇

1、嘮叨兩句算法

最近一直在考慮一個事情,就是怎麼給不太瞭解技術的人講清楚區塊鏈。我先試着寫下來,而後在逐步打磨吧,目標就是讓哪些說看區塊鏈看的雲裏霧裏的同窗能對區塊鏈有一些認知。數據庫

 

2、定義安全

簡單的給區塊鏈下個定義:基於加密算法的,去中心化的分佈式帳本技術。這裏有三個關鍵詞:加密算法、去中心化、分佈式帳本,下面我就嘗試從三個關鍵詞爲線索,介紹一下區塊鏈的概念。併發

 

3、分佈式帳本分佈式

比特幣是一個點對點的電子現金系統,既然是現金系統,那麼就得記帳唄,這大概就是這個帳本的由來,就是流水帳嘛,張三給了李四一百塊錢,王五給了張三五十塊錢,blabla。這種東西,就是一條一條的數據,記錄在文件裏,數據庫裏等等。區塊鏈的帳本存儲,固然就是區塊和鏈了。分佈式帳本,就是在說不只存一份數據,每一個全節點都存一份數據,只要不是所有節點掛掉,總有節點可提供數據的。性能

1. 區塊:塊由區塊頭和區塊體組成,區塊頭包含一些前一個區塊的Hash啊,當前區塊中全部交易的默克爾樹根啊,時間戳啊,隨機數啊,等等。區塊體裏就是一筆筆的交易。區塊鏈

簡單說下默克爾樹,好比當前區塊有4比交易A,B,C,D,AB取hash,CD取hash,兩個Hash結果再取hash,就造成了默克爾樹,樹根能夠理解爲一個checksum,任何一個交易改一點,整棵默克爾樹就都變化了,能夠保證沒有篡改,這個樹還能夠支持輕錢包SPV驗證。加密

2. 交易:每一筆交易主要包含了一個或多個Input和Output,Input記錄的是引用到的前一筆未花費交易的索引,Output記錄的是將資產轉移到那個地址。這裏講腳本的時候,還要講。blog

3. 鏈:剛纔講了區塊頭包含了前一個區塊的Hash,這東西就是爲了把區塊鏈接起來,成爲一個鏈,鏈上的交易順序不能認爲嚴格的先後關係,可是基本能夠認爲是有一個追溯的結構。做爲程序猿,你會想須要遍歷鏈,怎麼整,拿到創世塊,它沒有前一個區塊Hash,取到它的默克爾樹根做爲key去存儲裏面找下一個區塊,如此往復。索引

 

4、去中心化

我想把這部分經過和通常NoSql數據庫的一些方式作對比,NoSql數據庫爲了達到讀的併發性能和數據的安全,一般都會保存多個副本,ReplicaSet的概念。同時對於寫的數據,總要先找個主節點寫,寫完了再同步給副本集,選主的時候,數據一致的時候,都須要幾個節點達成共識,一般會有Paxos,Raft這樣的算法來保證。把這部分放大到公網上,就基本能夠映射到區塊鏈上了,區塊鏈的各個全節點都保持一個完整帳本,全網的ReplicaSet;得到記帳權要記帳寫塊了,誰來寫,區塊鏈上經過PoW,PoS,DPos等等共識算法來達成共識,又和Paxos,Raft對應上了。

說到共識了,咱們想一下記帳權這個事,就是挖礦,首先是個經濟問題,我幹嗎要挖啊,你得給我獎勵,比特幣系統中得到了記帳權生成了區塊,就能得到比特幣的獎勵,比特幣價格高,固然能夠激勵記帳這個事了,那麼問題來了,這個經濟問題變成了一個博弈問題了,這麼賺錢,憑啥你挖啊。這時候就得有個算法來規定好遊戲玩法,比特幣怎麼個玩法PoW,就是來個數學謎題,誰算出來誰記帳。這個數學謎題能夠簡單這麼理解,就是你生成的塊,加上一個隨機數位能夠調節,而後基於一種Hash算法,你生成出來的結果必須小於某某數,這個某某數就是難度,能夠動態調節的,如今比特幣的這個難度很高,因此你也就別跟礦主彪啦。那爲何叫PoW了,就是工做量證實,由於這個Hash之間沒有關聯型,我上次隨機數計算的結果和我此次隨機數計算的結果之間沒有半分錢關聯,這也就是爲啥算力規模愈來愈大了,能夠並行計算,算力越大,機率越大。你要非較真說,其實理論上,你可能不多計算就恰好碰到了正確結果,沒錯,這事就能夠類比高考了,你說有沒有神蒙,蒙得高分,有,可是大致上這個考分大概其能證實你努力過吧。

 

5、加密算法

非對稱加密大夥都明白,很少講了,利用非對稱加密的簽名驗籤能夠實現區塊鏈最關鍵的特色,確權。只有我用個人私鑰簽名過的數據,你用個人公鑰才能驗證經過,其餘誰想仿造都不行,因此這錢就只能是我來花了。說到確權,這事可大了,區塊鏈爲啥火,就是由於確權,數字資產能確權了,這意味着什麼?意味着互聯網變成了價值互聯網了,價值能夠傳遞了。

那這簽名驗籤的用哪兒了,也沒見哪兒使啊,別急,剛纔咱介紹交易的時候不是留了一個箭頭麼,這交易上記的不只僅是轉移到對方的地址,而是一個腳本。若是就一地址擱那,都說是本身的,那不亂套了,這錢誰能用,得確權,這就須要腳本系統了。

首先說說比特幣的地址啊,地址咋生成,下圖講的特清楚,我從網上拷的。你說好好一圖,我隨便用,不能賣錢,爲啥,不就是由於無法確權嘛。

而後咱們簡單說說這個比特幣的腳本系統,它是基於棧的腳本系統。這裏我暫時不展開,僅已最經常使用的比特幣鎖定腳本P2PKH腳本做爲例子講講。

鎖定腳本

DUP HASH160 [Public Key Hash] EqualVerify CheckSig

花錢的時候你得經過鎖定腳本的驗證,這個就是一個確權的過程,你要想驗證經過你得提供解鎖腳本

[Sig] [Public Key]

簡單說下驗證過程吧,下面這堆腳本基於棧執行

[Sig] [Public Key] DUP HASH160 [Public Key Hash] EqualVerify CheckSig

1. [Sig]入棧

2. [Public Key]入棧

3. DUP複製棧頂[Public Key]再入棧

4. 拿出棧頂[Public Key]執行HASH160(這個正是Public Key Hash的算法),入棧

5. 鎖定腳本里的常量[Public Key Hash]入棧

6. 取出棧頂裏腳本里的[Public Key Hash]和計算出來的比較,相等就繼續

7. 這下棧裏從底到頂分別是[Sig][Public Key],CheckSig拿出棧裏這倆驗籤,經過錢就是你的,請用。

 

比特幣的腳本指令不少,你能夠本身寫腳本出來,就是有點麻煩,寫彙編似的,可是這東西也是個好東西,直接就引出了後面的智能合約來了,

 

6、小結

今天主要從加密算法,去中心化和分佈式帳本三個方面簡單介紹了一下區塊鏈,感受沒達到個人預期讓沒接觸過的忽然開竅的感受,後面打磨打磨吧的再。本文裏主要以比特幣做爲實例進行介紹的,我以爲比特幣最牛逼的地方就是確權和智能合約,打開了無限遐想。公鏈上開發,不少選擇,我其實不太喜歡比特幣,開發起來太麻煩,並且就如今這個幣值,搞些大宗交易,跨境大額轉帳啥的還成,其餘的,呵呵吧,可是幣王仍是幣王,這裏面的原理仍是值得細細琢磨的。

相關文章
相關標籤/搜索