天天看點

一文搞懂區塊鍊基本原理一、架構二、賬本模型三、共識儲存四、總結

一、架構

認識區塊鍊,讓我們從最開始的比特币開始。

比特币本質上來講,是一個全球統一的分布式賬本,記錄着所有的交易記錄。隻要根據你所有的交易記錄,就能知道你現在有多少錢了。

弄一個賬本很簡單,但是要讓全世界都信任這個賬本就很難了,我們來看看比特币是如何做到的。

一文搞懂區塊鍊基本原理一、架構二、賬本模型三、共識儲存四、總結

支撐比特币的技術從下到上大概可以分為三層:

  • 第一層 p2p網絡層。這一層主要解決的問題是,分布式的節點如何發現自己人,節點之間如何通信形成一個網絡。
  • 第二層 共識存儲層。全球那麼多節點如何達成共識,共同維護唯一的一份賬本,并且别人還搗亂不了。
  • 第三層 賬本模型。賬要怎麼記才合理呢。

二、賬本模型

2.1 交易

比特币的賬本中隻記錄一個東西,就是“交易”。

一文搞懂區塊鍊基本原理一、架構二、賬本模型三、共識儲存四、總結

上圖記錄了三筆交易

每一筆交易主要有兩個部分:

交易輸入:記錄了這筆交易錢從哪兒來。

交易輸出:輸入的這些錢将到哪兒去。

我們來看這三筆交易:

1001号交易:一般的交易交易輸入填寫的是已經記錄在案的交易輸出,而挖礦是一種特殊的交易,輸入不用引用其他的交易輸出,是以比特币賬本中的錢都是來源于挖礦交易,其他的交易隻會做轉移,不會憑空産生錢。在這筆交易中張三獲得來12.5個币。

2001号交易:交易輸入引用了1001号交易的第一号輸出,輸出有兩項:2.5給李四,10給張三。也就是張三把挖礦所得的12.5分了2.5給李四,自己留下了10。一般交易輸入之和等于交易輸出之和,是以比特币中經常會有這種自己賬号出現在交易輸出中稱為找零。

3001号交易:交易輸入有兩項,交易輸出也有兩項。李四和張三共同轉錢給王五。

2.2 怎麼知道自己有多少錢

現在假設你是張三你現在知道自己有多少餘額嗎,如果你要轉3個币給李四又該怎麼做。

我們已經知道每筆交易的輸入,都是之前的交易的輸出,所謂的花錢就是構造一筆交易引用之前的交易輸出,是以比特币中餘額稱作UTXO(未被花費的交易輸出)。想知道你有多少餘額,隻需要找到交易輸出是你的賬号,而且沒有被其他交易輸入引用的全部交易輸出額之和,就是你的全部餘額了。

如果你想要轉3個币給李四,你就找到到你的UTXO填入交易輸入,李四的賬号填入交易輸出,構造一筆交易釋出到比特币網絡中等待礦工打包,當你的交易打包釋出到了網絡中得到承認的時候你的轉賬就成功了,李四就多了3個币的UTXO了。

2.3 怎麼證明錢是你的

比特币交易輸出都是公開,那怎麼能保證隻有我能使用我的交易輸出,而别人不會用了我的錢呢,首先我們來科普下非對稱加密的相關知識。

非對稱加密中,公鑰和私鑰是成對存在的,公鑰加密的東西隻有與之比對的私鑰能解開,私鑰加密的東西隻有與之比對的公鑰能解開。

加密:一般來說我們把公鑰放出去,想給你傳資訊的人就使用你的公鑰把資訊加密傳送給你,你用私鑰解密就能看到真實的資訊了,而沒有私鑰的人死活解不開密文的。

簽名:你把你說過的話用私鑰加密放出去,别人使用你的公鑰就能驗證這話是不是你說的,因為隻有你的私鑰加密的東西你的公鑰才能解開,其他人是沒法僞造的,其他人你得不到你的私鑰。

在比特币中公鑰可以看作是你的賬号,私鑰你就悄咪咪自己保管好,别人轉錢給你的時候就把你的公鑰放到交易輸出中,如果你要使用這筆UTXO就得使用你的私鑰提供一個簽名證明這你有這公鑰對應的私鑰,才能得到礦工的承認,才能得到全世界的承認,最後你這筆錢才能算花出去了。

2.4 智能合約

一文搞懂區塊鍊基本原理一、架構二、賬本模型三、共識儲存四、總結

上圖才是一筆交易真正的樣子,每個交易輸出都包含一個鎖定腳本,每個交易輸入都包含一個解鎖腳本。這裡的腳本就是指程式設計的那種腳本,是可以一段可以運作程式代碼。普通的交易鎖定腳本的意思是讓解鎖腳本提供一個簽名能與自身的公鑰比對上那你就可以使用這筆UTXO。當你構造好解鎖腳本和交易之後,礦工會運作鎖定腳本和解鎖腳本來驗證你的這筆交易合不合法,決定是否打包。

這裡你是否看出了比特币實作智能合約牛B之處。比如你爸想給你一筆錢,但是又希望你用的時候得你媽同意,那你爸就可以構造一筆交易在鎖定腳本中寫到得同時用你媽和你的簽名才能使用這筆錢,這樣你就必須得到你媽的簽名才能構造解鎖腳本,才能用這筆錢了。這裡又可以看出其實比特币對于賬戶的概念是比較弱的:隻要你能給出解鎖腳本比對上鎖定腳本就能使用這筆UTXO了,沒有什麼賬戶的概念。有了鎖定腳本和解鎖腳本,我們就能做很多擴充的事情了。

參考資料:鎖定腳本和解鎖腳本怎麼運作

三、共識儲存

上面我們已經知道如何構造一個合法的交易,這麼多交易如何來組成一個合法的賬本呢,賬本又應該存在哪兒才安全呢。

3.1 賬本-區塊鍊

一文搞懂區塊鍊基本原理一、架構二、賬本模型三、共識儲存四、總結

賬本就長這樣,我們把一堆交易記錄打個包成為上圖的每一個小方塊,這樣的方塊稱為區塊,然後把他們首尾相連就成了區塊鍊也,是不是so easy. 每一塊都記錄了上一塊的hash值,這樣就使得它有這樣一個特性:如果你想改變其中的一筆交易記錄那這個區塊的hash就會變,也就導緻了下一個區塊hash改變,産生一連串的反應,是以想篡改越久遠的曆史越難。

3.2 賬本放哪兒

這樣的一個賬本應該存哪兒呢。

比特币的政策是讓每個人都存下來維護着,當有人挖出了新的區塊就大吼一聲,所有人都來驗證看是不是真的,驗證成功就更新賬本,這樣曆史賬本就幾乎不可能被篡改了,除非你改變所有人的。

3.3 挖礦

曆史不能被更改,那我們怎麼來寫入新的區塊呢。

假設我們每個人都可以寫,豈不是就很混亂了,你想在A上加一區塊B,他卻想在A上面加個區塊C,就不能維持唯一的一份賬本了。

比特币想了個辦法使得每個新的區塊隻能有一個人來寫。誰來寫呢,比特币說誰每次我釋出一道題,誰先解出來,誰就能擁有記賬權寫下這個新的區塊。然後大家來解題了,這個題很難解出來(可能要耗費十幾分鐘時間),但是又很好去驗證(大家一看就知道你做的對不對),那些沒解出題來卻想濫竽充數的人就很容易被大家看出來,得不到大家的承認。

解題争取記賬權的過程就稱作挖礦,比特币這種耗費計算資源來算題争取記賬權的模式又被稱為工作量證明,意思就是想要記賬就得讓我看到你的努力,越努力就越有機會得到記賬權。

3.4 共識

介紹來這麼多,大家應該能從中明白“共識”這兩個字的含義了吧,比特币建立的這一套體系其實隻是一套規則而已,大家都去相信且遵守這套規則,抵制不守規則的人,那比特币就能一緻存在下去。

四、總結

講到這裡大家應該都明白了比特币的基本原理了吧,至于它用到的p2p網絡,又是一片新天地了。

從分布式系統來看比特币的話,挖礦其實就是個leader選舉的過程,隻有leader擁有寫權限,寫完從節點再進行同步。

區塊鍊給世界帶了很多新的東西,請在評論區說下你的高見。

繼續閱讀