比特幣與區塊鏈科普(一)

這篇文章源於一個小任務,自己順帶著扒拉了些資料,適合給小白看,弄清區塊鏈是個什麼東西?

區塊鏈是怎麼來的?為什麼突然就爆發出來這麼一個東西?

個人認為主要有兩點,一個是08年的金融風暴促成的。最初比特幣的發明人中本聰這類人一定是那種對於權威性的、中心化的東西是很排斥、甚至反感的人。

這世界最大的中心化有兩種,資本的中心化和權力的中心化。美元霸權就是資本中心化裡最強的中心點。幾十年來,隨著美元的潮汐漲落收割了全世界的財富,流到了老奴隸主的倉庫裡。

給大家看張圖。

比特幣與區塊鏈科普(一)

這張圖是啥呢,叫加密無政府主義者宣言。

全世界的密碼朋克們,

有些朋友參加了昨天在硅谷舉辦的密碼朋克線下聚會,希望能把更多會議資料以電子版的形式發佈出來,讓密碼朋克郵件列表上的所有讀者以及監視我們的國保、網監等等各種人都能讀到。

下面給出這篇《加密無政府主義者宣言》,我在 1992 年 9 月第一次密碼朋克會議曾經宣讀過。這個文本最初是在 1988 年中寫的,我在「Crypto'88」研討會和當年晚些時候的「黑客大會」這兩次會議上發給了一些志同道合的技術無政府主義者。後來,我又在 1989 年和 1990 年的黑客大會上就此發表過主題演講。

我本來想做一些改動的,但還是決定讓大家看到其歷史原貌。文中有一些術語可能比較陌生……希望之前發給大家的《Crypto 術語表》能派上用場。

中本聰應該就是這樣的理念。這些人希望用技術改變現實結構中的中心化壓迫和奴役。比特幣以及支撐它運行的區塊鏈從根本上說是一個去中心化的分佈式賬本。也就是說比特幣的區塊鏈是用來記錄一筆筆賬目的。其核心目的就是擺脫對第三方中介的依賴,人人可以記賬,同時又保持大家維護同一份賬本,不會出現不一樣的情況。

另一個是相關的技術儲備都完備了。那這裡邊就有幾個問題需要解決了。一個是雙花問題,所謂雙花就是一筆錢花兩遍。這個問題是電子貨幣獨有的。因為電子貨幣就是一堆代碼,是很容易複製的,它不像我們的實體貨幣,你不可能拿著一筆錢花兩次。區塊鏈中是怎麼解決的呢,就是人人都記賬,而且賬目是公開的,相當於這個網絡中的每個人都可以查賬,而且大家手裡的賬本都是一樣的,這樣的話假如A同時轉了一筆錢給B和C,從賬本里大家會發現這個問題的。另一個是共識問題。簡單講,共識就是大家達成一致協議,維護一個共同的賬本。這樣就讓一些故意造假或疏忽記錯的賬本不會影響總的賬本,讓大家維護共同的一個賬本。

區塊鏈的結構和運行機制

前面我們提到相關的技術儲備都完備了。下面我們看下區塊鏈的實際架構是什麼樣。為什麼用到這些技術?具體他是怎麼解決共識問題的?

比特幣與區塊鏈科普(一)

這裡我找到一張圖,區塊鏈的四大支柱就是P2P網絡、密碼學、數據庫和共識機制。這些技術在區塊鏈之前都是較為成熟的技術,但是區塊鏈的發明使這些技術組合起來使得一個去中心化的分佈式賬本得以實現。下面我們分別來看看這四大支柱。

首先是密碼學。密碼學是電子貨幣的根基,早在比特幣和區塊鏈發明錢,電子貨幣就已經被髮展出來了,比如Ecash,這其中最關鍵的就是密碼技術的使用,他可以通過盲簽名技術加密交易信息,但這個電子貨幣系統還是依賴於中心節點的結算,也沒有流行起來。

密碼學在比特幣區塊鏈中的應用主要有兩類:一個是非對稱加密的應用,一個是哈希算法的應用。前者主要是為了保護交易信息在交易網絡中傳遞的時候被人竊聽或篡改,使用的是電子簽名技術。在比特幣中,使用一個隨機數生成一個密鑰,首先使用隨機數發生器生成一個私鑰,它是一個256位的二進制數。私鑰是不能公開的,相當於銀行卡的密碼。通過一個已知的私鑰,生成一個公鑰,但是通過公鑰不能反推出私鑰。這個公鑰相當於你的銀行卡卡號。另一個哈希算法的使用,我們留在共識機制裡面再講。

其次是P2P網絡,也就是點對點分佈式網絡。通過這個技術可以建立分佈式交易賬簿,並以呼叫問答機制向全網廣播,網絡節點不停地檢查接收的數據,避免數據被篡改。

這裡的檢查就是得益於上一點的數字簽名技術,當A節點發起一筆交易時候,任何收到這條交易信息的節點都可以用A的公鑰去驗證這條消息是否經過篡改。

第三個支柱就是共識機制。這個解決了分佈式網絡中所有節點保持一致的問題。使得所有人維護同一個賬本,雙重支付的問題也得以解決。共識機制有很多種,如pow、pos等。比特幣所使用的共識機制pow,叫做工作量證明。

共識機制,是理解區塊鏈最核心的部分,就是怎麼在分佈式網絡的節點中,維持一個共同的賬本,讓記錯的節點,故意記錯的節點都不會影響到這個最終賬本的權威性。

為了說明這個問題,我找到了一個小例子。

現在我們模擬一個由10個人組成的交易網。這10個人都不相信會計之類的第三方能幫他們準確的記賬或者不造假賬,所以他們決定由他們自己來記賬。10個人共同維護一套賬本。怎麼做的呢。就是每當有一筆交易,交易人就隔空向大家喊話,我向某某轉了一筆錢,這個消息是經過簽名的,然後通過p2p網絡傳遞到每一個人,這時候每個人都可以通過交易者的公鑰去驗證是不是由其本人發起的,消息的傳遞過程中有沒有經過篡改,如果沒有問題,這時候每個人都把這條消息記到一張紙上,這樣經過10條消息後,這張紙被記滿了,然後為了保持一致性,我就推舉一個人把他的這張帳頁作為公共賬本的一部分。

誰最終擁有這個記賬權呢?我決定誰做的工作多,貢獻大,我就把這個記賬權給他。如何衡量這個工作量呢?使用的方法就是哈希算法。

簡單介紹一下哈希算法,哈希算法是一個單項的算法,它可以把一堆任意長度的字符串輸入轉化為固定長度的輸出。並且從輸入到輸出是很容易計算的,但是反過來卻很難。所以知道一個輸出結果,想算出它的輸入值,沒有別的辦法,只能使用計算機暴力窮舉,簡單說就是挨個試。

那具體到這個記賬權的決定,我設置了這樣一條規則,就是一頁帳頁寫滿後,大家開始計算這頁內容加一個數字的哈希,它的輸出必須滿足前3位全是0。這個要求目前的理論和技術條件下,沒有別的辦法,只能暴力窮舉。也就是說誰掌握的計算機比較強,算力大,誰首先算出的概率就比較高。

當一個人首先計算出這個結果,他就在群裡喊一嗓子,同時把算出來的數字作為封戳將這頁帳冊封到信封裡。然後大家就根據他算出來的這個數字去驗證,驗證有兩點,一是算得對不對,也就是拿封戳這個數和帳頁內容的和去哈希,能不能得出符合要求的結果,這個過程前面說了是很快的,二是驗證他的帳頁內容是不是和各自記得一致,因為哈希的特性,輸入有一點改變,結果也是不一樣的,這樣就保證了記賬的這個人是不能篡改帳頁內容的。這樣驗證沒問題後大家就把這頁帳頁的記賬權歸他,也就是總賬本以他的為準。後續的交易以此循環,不斷的以誰先誰出來賦予誰記賬權。這些帳頁怎麼把他們串在一起組成賬本呢,還有一個小技巧,就是我們講的在計算哈希的時候,有兩個輸入,一個是帳頁內容,一個是不斷試錯的值,其實還有一個就是前一頁的哈希結果,這樣每一個都跟前面的一頁聯繫了起來,如果前面的內容有改動,那跟後面的帳頁的聯繫就斷開了。所以如果取得記賬權的人動了壞心思,想把賬冊內容改動一下,同時把封戳拿掉,重新換一個,如果這樣的話,所有在這頁帳頁後面的都會斷掉,他必須重新計算後面每一個帳頁的封戳。而我們前面說了,每一個帳頁的計算都是要耗費大量計算能力的,在一個由無數節點構成的分佈式網絡中,除非你掌握了全網51%以上的算力,你才能做到這一點。這裡面隱含了這樣一個假設,就是說每一頁帳頁的記賬權大家都是在爭搶的,為什麼要爭呢,有人算好了,我們等著用不就好了麼。其實是因為有獎勵機制,比如誰先算出來,團隊成員就給他一個金幣。在比特幣區塊鏈中,這個獎勵就是比特幣,只不過這個比特幣是憑空出來的。所以這個記賬權大家都是來搶的。

以上就是比特幣區塊鏈的共識機制的解決方案,可以看到他是兩條腿走路的,一條基於數學,一條基於人性。

其實為了更好的理解共識,我們還可以介紹一下拜占庭將軍問題,這裡我們先略過,等正文完事,整個有一個粗略認識後,我們可以回過頭來再看,以加深認識。

最後一個是數據庫,這個沒啥好說的,整個區塊鏈就是記錄幣的生成和交易記錄信息的,是一個以區塊為基本單位的鏈式結構,這個鏈就是上面講前一頁和後一頁的哈希聯繫。

這節我們瞭解了區塊鏈的緣起和運行機制和架構,下一節我們將實際的看一看區塊鏈的實際結構。


分享到:


相關文章: