這應該是目前對區塊鏈最通俗易懂的解釋了。。.
區塊鏈如何運作的?
下面這篇文翻譯自”How Does the Blockchain Work?”全文。作者Michele D‘Aliessi用通俗易懂的文字闡述了區塊鏈(Blockchain)的工作原理,是一篇非常不錯的入門文章。
先舉個例子,我和你打賭50元明天的天氣。我賭它會是晴天,你賭它會是雨天。我們會有三種方式來完成交易:
①我們信任彼此。不論結果是晴天,還是雨天,輸家要給贏家50元。如果我們是朋友,這會是一個好的交易方式。然而,即便是朋友,也有可能會賴皮不認輸而不愿付錢,更何況是陌生人。
②我們可以訂定合約,如果有任何一方不愿付錢,贏家可以告輸家。但要花錢花時間打官司,只為了討回50元,實在是得不償失。
③我們找一個中立的第三者,每人分別先給她50元,結果揭曉后,她再把所有的錢100元給贏家。無奈的是,這個第三者有可能卷款潛逃。
我們無法信任陌生人,也覺得打官司勞神傷財。
區塊鏈技術很有趣,因為它幫我們實現第③種交易方式,而且安全、快速和便宜。
我們只需寫幾行程序代碼,讓它執行在區塊鏈網絡(Blockchain Network)上,進行交易。
以打賭天氣的例子,這個程序會確保100元的安全,并且一到明天會自動確認天氣狀況,結果揭曉后,也會自動將100元匯到贏家的帳戶里。在區塊鏈網絡上的交易,是無法被篡改或終止的,而且適合于大型交易,如賣一間房子或一家公司。
比特幣是人們最熟知的采用區塊鏈技術的應用。我們先來說明比特幣是如何工作的,在說明過程中一點一點帶入區塊鏈的概念。
什么是比特幣?
一塊比特幣就是一個單位的電子比特貨幣(BTC),并且就像真實的一塊錢貨幣一樣,本身是沒有價值的,只有在進行物品交易時才會產生價值。
在比特幣系統里,有一本帳本(ledger),它是一個電子檔案,記錄著所有的交易紀錄。
▲圖1 比特幣電子帳本
這帳本不是存放在一個中央機構(比如銀行),或者一個數據庫。它擁有無數份副本,散布存放在區塊鏈網絡上的每一臺電腦里,而每臺電腦我們稱為“節點(node)”。
如果David想用比特幣轉帳給Sandra,他就發送一個信息告訴網絡說:他的帳戶減5 BTC,然后Sandra的帳戶加5 BTC。在網絡中的每個節點都會收到信息,并且將這筆交易記錄到自己的帳本里,然后更新帳戶的余額。
▲圖2 請求交易信息
說到這里,關于帳本是由一組電腦共同維護,而不是由一個類似銀行的中心機構來掌管,有三個啟發:
?在銀行系統中,我們只知道自己的交易紀錄和帳戶余額,而在區塊鏈網絡里,每個人可以知道任何人的交易紀錄。
?一般來說你信任你的銀行,而比特幣是分布式系統,運行在網絡上,任何事情發生錯誤,是沒有客服人員可以幫你的。
?區塊鏈不是建構在信任情感的基礎上,其安全性和可靠性是通過特殊的數學函數和程序代碼達到的。
我們可以將區塊鏈定義為一個系統,它讓一組互聯的電腦安全地共同維護一份帳本。
為了能在區塊鏈網絡里進行交易,你需要一個錢包(wallet),它讓你可以存放和交易你的比特幣。只有你可以花費你的比特幣,所以每個錢包被特殊的加密法保護著,使用一對獨特且配對的鑰匙:公鑰和私鑰,才能解鎖。
如果一個信息被公鑰加密,只有配對的私鑰才能解密讀到信息。反之,如果你用你的私鑰加密信息,只有配對的公鑰可以解密。所以當David想要轉帳,他需要用他的私鑰將轉帳信息加密后,送到網絡里,然后每個節點使用David的公鑰將信息解開,以確認是由David發送的。
在加密完成時會產生一個電子簽名,它會被節點們用來確認交易信息的發送來源和真偽。電子簽名內容是一串文字,它是由交易信息和私鑰所組成的,所以不能用在其他的交易信息上。如果你更改交易信息中任何一個字節,電子簽名也會跟著改變,所以黑客很難更改你的交易信息或是得知交易金額。
▲圖3 電子簽名與加密交易
錢包的公鑰其實是網絡里的一個地址(send to address),所以當你轉比特幣給某人時,你其實是將比特幣轉公鑰的地址。而且你必須證明你是私鑰的所有人,才能進行轉帳。請注意,在網絡里的交易信息已經是被加密過的,你不用暴露你的私鑰。
每個節點都保有一份帳本,但節點是如何知道你的帳戶余額呢?區塊鏈系統并沒有記錄每個人的帳戶余額(注:所以帳本實際上不是圖1那樣),事實上,它只紀錄網絡上每筆交易紀錄(如下圖)。為了得知你的帳戶余額,你必須分析和驗證所有曾經跟你錢包產生交易的紀錄。
▲圖4 區塊鏈網絡的帳本
“帳戶余額”的計算和驗證需要靠之前的交易紀錄。舉個例子,為了轉出 10 BTC給John,Mary先發起一個交易信息,它包含了之前部分的轉入交易紀錄,只要這些紀錄的轉入金額的總和剛好或大于10 BTC,即可發送信息。這些包含的交易紀錄稱作輸入(inputs),每個節點會驗證這些輸入的金額的總和是等于或大于10 BTC。這些計算和驗證會由錢包和節點自動完成,使用者不需要煩惱。
▲圖5 區塊鏈的交易信息結構
那么,系統如何信任這些輸入呢?
它要確認你的錢包在之前所有的轉入交易紀錄中是否真的有這些輸入。為了簡化和加速驗證的過程,每個節點會保留一份特殊的數據來達到目的,也因為這個驗證過程,錢不可能會無緣無故多出來。
持有比特幣代表的是,帳本上你還未變成輸入的交易紀錄。
在比特幣網絡上執行交易的程序都是開源的,這表示任何人只要有電腦和網絡就可以進行交易。然而,程序的錯誤有可能導致你的比特幣會不見。還記得嗎?比特幣是分散式網絡,并沒有專屬的客服人員替你找回遺失的錢或錢包密碼。所以你想要用比特幣進行交易,建議使用正式的比特幣錢包軟件,并且妥善保存你的錢包密碼或私鑰。
嗯,了解,但它真的安全嗎?而且它為什么叫做區塊鏈?
任何人都可以進到比特幣網絡,并且只需要出示他的公鑰就可以進行交易。如果一直使用同一個公鑰,所有的交易紀錄就會指向同一個帳戶。比特幣網絡允許你產生多個錢包,每個錢包都擁有自己的公鑰和私鑰。這么做可以讓你用不同的錢包做消費。沒有一個公開的方式可以知道你是這多個錢包的擁有者,除非你將每個錢包的比特幣轉到同一個錢包去。
比特幣地址(Bitcoin addresses),也就是錢包,的總數是 2^1??或1461501637330902918203684832716283019655932542976。在讓任何人都可以擁有錢包的情況下,用這么大的數字可以防止一些可能的攻擊。
話雖如此,仍然有一個安全漏洞會被利用:如果把錢轉出后馬上取消交易。交易信息會在網絡里的節點間傳遞,所以兩個交易信息抵達同一個節點的時間會不一樣。黑客送出一個交易信息,在等商家把貨物寄出后,再送出一個取消交易的信息。這種情況下,有些節點會先收到第二個信息,而把第一個信息視為非法。如何知道交易信息之間的優先順序?使用時間戳(timestamp),但它容易被偽造。因此這會發生一些舞弊現象。
節點間會為了交易的順序而意見不合,所以區塊鏈系統設計的一套機制讓所有節點可以遵循一致的交易順序。
比特幣網絡為了將交易信息排出順序,所以將它們包成一組,稱為區塊(block),每個區塊包含的若干個交易信息和一個連到前個區塊的連接。隨著時間,一個區塊跟著另一個區塊,形成一條時間鏈,這就是區塊鏈。
▲圖6 區塊鏈的序列結構
在時間序列上,同個區塊內的交易信息被認為是同時發生,還未被打包進區塊的交易信息會被視為未確認狀態。每個節點都可以將若干個交易信息打包成區塊發送到網絡上,并建議其為鏈上的最新候選區塊。
因為任何節點都可以發送候選區塊,系統如何決定誰才是可以放在鏈上的最新區塊?
區塊鏈系統使用加密哈希函數(cryptographic hash function)設計了一道復雜的數學題,候選區塊只要有正確答案,就可以成為鏈上的最新區塊。
這個答案是由節點計算后一起被打包進區塊。答案是一個數字,得到答案的唯一方法就是用猜的,猜到對為止。一臺普通配置的電腦需要花一年的時間才能猜對答案。所謂團結就是力量,區塊鏈網絡里有很多臺電腦(節點),一起猜,只需要平均10分鐘就可找到答案。
哪個節點先猜到了答案,它就先有權利將它的候選區塊放到鏈上。
要找茬的話:如果兩個節點同時猜到答案,同時將各自的候選區塊放在鏈上,會怎么樣?每個節點都有一份區塊鏈副本,當節點拿到其他節點丟出來的候選區塊(已有正確答案的),就會把區塊放到副本鏈上,同時系統會要求節點搜尋網絡里有沒有比它的副本鏈更長的鏈,如果有,舍棄原有的鏈,取用更長的鏈。
▲圖7 解決鏈模糊邏輯
事實上,節點同時猜對答案的發生機率很低,所以整個區塊鏈會很快地穩定下來,收斂成單一條鏈。話雖如此,不一致的鏈尾區塊仍存在潛在的安全問題。如果區塊屬于較短的鏈尾上(如圖7的區塊B),一旦系統決定采用其他更長的鏈(如圖7的區塊A和N),則區塊B內的所有交易信息會被設定回到未確認狀態。
我們來看看Mary如何利用鏈尾模糊現象來進行攻擊。Mary要付錢給John,John要出貨給Mary,因為節點總是取用長鏈執行其上的交易信息,這個時候Mary假造一個更長的鏈,里面包含了一個取消交易的信息,于是John可能會財貨兩失。
▲圖8 Mary的攻擊方法
系統如何防止這類攻擊?剛提到所有節點會合力找到數學題的答案才能把候選區塊放到鏈上,單靠一臺電腦去猜是非常困難,Mary必須比網絡上所有的節點更快找到答案,才可能把假造的候選區塊放到鏈上。就算她成功假造了第一個區塊,還有第二個、第三個區塊,每次都要跟整個網絡上節點們做競賽。如果Mary用一臺超級快的電腦呢?因為網絡上有大量的節點,Mary不可能在確切的時間點假造多個區塊來進行攻擊。
如果她控制了網絡上一半的節點,她有50%的機率可以成功假造區塊,但如果要連續假造兩個區塊,機率降到25%。想假造越多的區塊,Mary的成功機率越低。
比特幣區塊鏈系統的交易信息是被數學競賽保護著:黑客是跟整個網絡做競速。
所以,交易信息隨著時間越來越安全。越舊的區塊比越新的區塊更安全。平均10分鐘就有一個新的區塊加到鏈上,大概一個小時后,里面的交易信息有很高的機率已經被執行了,而且是不可逆的。
▲圖9 區塊鏈的交易安全
為了轉錢出去,你的錢包必須先驗證有錢轉進來過,網絡上所有的交易都會經過這樣的驗證。雞生蛋,蛋生雞,但一開始的比特幣從哪來?
為了平衡軟件錯誤或錢包密碼遺失所造成的通貨緊縮,系統會把一些回饋金給解開數學題的節點。為了得到回饋金而去執行軟件的行為,稱為“挖礦”?——?就像挖金礦一樣。
回饋金是一種激勵,推動人們去建立節點,順帶貢獻一些計算效能來幫助整個網絡的運算和穩定。
因為一臺電腦需要花很長的時間解題(大約平均一年),所以幾個節點可以組成一個群組一起解題。這種方式會比較快,而且平分得到的回饋金。這種群組稱為挖礦池(mining pools)。
有些挖礦池很大,可能擁有整個網絡超過20%的計算效能。這可能會有安全性問題,就像剛剛Mary那個例子。但就算挖礦池得到50%的計算效能,時間越久,交易信息就越安全。
然而,有些挖礦池會限制節點的數量避免過大的計算效能來保障網絡的安全。
而且隨著時間整個網絡的計算效能會提升,例如技術的創新或節點數量的增加,區塊鏈網絡會重新調整數學題的難度,讓產生新的區塊的時間保持在10分鐘。這么做可以促使網絡的穩定和安全。
再者,每四年挖礦的回饋金會減半,所以隨著時間人們對挖礦的興趣會減少。為了避免節點停止挖礦,系統允許每筆交易信息可以附帶一點回饋金,節點便可以獲得額外的利益。
因為這個機制,如果交易信息帶有較高的回饋金,就會比較快被執行。這表示你想要你的交易快點被執行,就得附加比較高的回饋金。跟銀行的手續費來比,比特幣的交易回饋金顯得比較少,而且跟交易量無關。
▲圖10 比特幣交易
現在你已經對區塊鏈有一個初步的了解,我們來快速看一下它為什么有趣。
使用區塊鏈技術有幾個相當顯著的好處:
?你可完全控制自己的身家財產,沒有第三方機構組織保管或限制你使用它。
?交易成本非常低,讓我們可以實現小額支付(micropayments)。
?財產可以在幾分鐘內就完成轉移,交易紀錄可以在幾個小時內獲得保障。
?任何人可以在任何時間驗證每個交易紀錄,區塊鏈具有高透明度。
?應用區塊鏈技術可以打造任何去中心化的應用軟件,它可以快速且安全管理和傳送數據。
然而,有一些挑戰需要克服:
?交易紀錄都是匿名的。一方面保障了用戶的隱私,另一方面管制機構無法追蹤非法的交易行為。
?即使很多交易平臺興起,仍不容易使用比特幣買東西。
?比特幣就像其他的虛擬貨幣,非常不穩定:在市場上不容易取得而且需求劇烈變化。比特幣的價格很容易受到虛擬貨幣市場的突發事件影響。
?區塊鏈技術還處于起步階段,每天都有新的發展讓區塊鏈更安全且穩定。
整體來說,區塊鏈技術在許多行業上也具有潛在的革命性,例如從廣告到能源。它的主要影響力是源自于去中心化的概念和不需要無形的信賴,很多的應用正在發展中。
評論