找回密碼
 立即注冊
發布
  • QQ空間
  • 回復
  • 收藏

區塊鏈的運作方式

2019-7-7 08:53

區塊鏈技術大概是繼互聯網之后最偉大的發明了。它使得人們在無需信任且去中心化的情況下也能進行價值交換。假設我們之間打了一個賭,賭舊金山明天天氣,賭注是 50 美元。我賭明天會是晴天,而你認為會是雨天。如今我們有三種方式來實現這一賭約:
  1. 我們可以 信任彼此。無論是下雨還是放晴,輸家都支付給贏家 50 美元。如果我們是朋友,這當然是一種實現賭約的好方法。然而,無論我們是朋友還是陌生人,輸家都有一萬種方法拒不支付。
  2. 我們可以將賭約轉化為 合同。一旦簽訂一份合同,雙方都有義務去履行賭約,支付賭注。然而,若是輸家決定拒絕履行,贏家就得支付額外的報酬并且花費很多時間以通過法律手段謀求其正當權利。尤其是對于小額賭注而言,這看起來并不是一種最優的實現方式。
  3. 我們還可以邀請 中立第三方。參與賭注的玩家各支付 50 美元給第三方,而第三方會將這 100 美元支付給贏家。然而,這位所謂的第三方也有可能做出卷款潛逃的行為。因此,這種方法與前兩種方法并沒有本質差別:要么相互信任,要么訴諸合同

最佳的解決辦法既非信任亦非合同:我們沒法信任陌生人,同時簽訂合同需要花費很多金錢和時間。區塊鏈技術在這一方面惹人注目,正是因為它給了我們第三個選擇,兼具安全、快捷、以及便宜三種特性。

區塊鏈使我們能夠寫幾行代碼并在鏈上運行一個程序,雙方分別向該程序發送 50 美元。這一程序將會確保這 100 美元的安全,并根據多種數據來源自動查詢明天的天氣情況。無論是放晴還是下雨,它都會自動將這筆錢轉移到贏家名下。任何一方都有權利檢查合約邏輯,一旦程序開始在鏈上運行,就不能被更改或中止。也許這對于 50 美元的賭約來說是小題大做,但對于房屋買賣以及公司間交易來說,這是一種合乎常理的選擇。

編者注:就目前(2019 年 7 月 3 日)而言,上面這一段對區塊鏈功能的描述有點夸大其詞了,實際上并不能做到。但這并不影響本文后續部分的價值,而且我相信,詳細閱讀后文之后,讀者自己也能理解,為什么上面這一段不太可行,但區塊鏈依然有其價值。

本文不會深入討論技術細節,只會釋放為了理解這一技術的底層邏輯和機制而必須具有的知識。

比特幣基礎知識


區塊鏈的運作方式

-圖片由作者提供- 區塊鏈最為眾所周知和受到廣泛討論的應用是比特幣,它是一種可用于產品和服務交易的數字貨幣,正如美元、歐元、人民幣和其他國家貨幣一樣。讓我們通過區塊鏈技術的第一次應用來學習它的工作方式。

“比特幣讓我們有了從未有過的體驗——使互聯網用戶可以向另一位用戶轉讓一筆獨一無二的數字資產,并且確保這筆轉賬安全可靠,同時所有人都知道這筆轉賬發生,但沒有人可以挑戰轉賬的合法性。我幾乎無法用言語來贊美這一開創性成果。”

——Marc Andreessen

bitcoin 是比特幣(BTC)這一數字貨幣的基本單位。正如美元一樣,比特幣本身沒有使用價值;它擁有價值是因為人們同意用其支付貨物和服務以換取更多的該幣種,同時也相信其他人也會這樣做。

為了記錄我們每個人所擁有的比特幣數量,區塊鏈使用一種賬本,一份記錄了所有比特幣交易的數字文件。

區塊鏈的運作方式

-圖 1. 簡化的比特幣賬本數字文件- 帳本文件并不存儲在某個中央處理器中,如一家銀行或一家數據中心。它通過私人計算機網絡儲存在世界各地,經由這些計算機儲存數據并完成計算。每一臺計算機都代表區塊鏈網絡的 “節點”,并擁有賬本文件的副本。

假如 David 希望將比特幣支付給 Sandra,他便在網絡中進行廣播,宣稱 David 本人賬戶中的比特幣將會減少 5 枚比特幣,而 Sandra 賬戶中的比特幣將會增加相同數目。網絡中的每一節點都會收到這條消息并將這一交易請求覆寫到其賬本副本上,并更新雙方帳戶余額。

區塊鏈的運作方式

-圖 2. 簡化的交易請求訊息- 鑒于賬本由一群相互連通的計算機而非諸如銀行這類中心化的實體來維護,區塊鏈有以下幾個特點:
  • 在我們的銀行系統中每個人僅僅了解發生在自己身上的交易和賬戶余額;而在區塊鏈中每個人都能知道其他所有人的交易。
  • 盡管你通常可以信任你的銀行,但比特幣網絡是分布式的,如果出現問題,你并沒有服務臺可以咨詢也沒人能讓你起訴
  • 區塊鏈本身的設計方式使得人們無需相互信任,而是通過特定的數學函數和代碼來保證其安全性和可靠性。

我們可以這樣定義區塊鏈:讓一組相互連接的電腦可以維護一個安全賬本、且賬本可以不斷更新的系統。為了在區塊鏈上完成交易,你需要一個錢包——一個讓你儲存并交易比特幣的程序。由于每個人的比特幣應該只能由自己花掉,每個錢包都受到一種特殊的密碼學技術的保護,這種技術要用到一對不同但互相關聯的密鑰:私鑰和公鑰。

編者注:使用兩把不同但相互關聯的私鑰的辦法來自于非對稱密碼學,即在加密和解密過程中使用兩把不同密鑰的密碼學技術。在這種模式中,私鑰即 Private Key,指由行動者自己保管、可以推導出公鑰(但不能反向推導出私鑰)并且(出于實際需要)不該公開給任何人的密鑰,公鑰即 Public Key,是由私鑰推導出來的、可以公開給任何人的密鑰。

公鑰密碼學一般有兩種用途。一種是加密通信,發送者使用接收者的公鑰來加密,接收者使用自己的私鑰來解密,這樣就能保證機密性;另一種是數字簽名,簽名者用自己的私鑰來簽名,驗證者用簽名者的公鑰來校驗,這樣就能保證簽名的身份同一性(不能欺詐也不能抵賴)。

……。當 David 想要支付比特幣時,他需要廣播一條經由他錢包中私鑰加密過的信息。由于 David 是唯一一個知道解鎖錢包對應的私鑰的人,所以他是唯一一個可以花費他持有的比特幣的人。網絡中的任意節點都可以通過使用 David 錢包對應的公鑰解密信息,從而檢查交易請求是否確實來自 David 本人。

當你使用你錢包中的私鑰來加密一條交易請求信息時,你也生成了一個數字簽名,區塊鏈中的計算機通過檢驗該簽名來判斷交易請求的來源和真實性。這一數字簽名是由你的交易請求和私鑰共同生成的一串文本;因此它不能被用于其他交易。如果你更改了交易請求信息中的任何一個字符,那么數字簽名就會變得不一樣,因此任何攻擊者(如果有的話)都不能更改交易請求或交易額。

區塊鏈的運作方式

-圖 3. 簡化的數字簽名- 鑒于交易請求信息需要使用私鑰加密,也就是說在支付比特幣之前,你總是需要證明你是你的錢包私鑰的所有者。由于信息總在加密后才會廣播,因此你永遠不會泄露你的私鑰。

編者注:進階閱讀:

追蹤你的錢包余額


區塊鏈中的每個節點都保存了賬本副本。那么,某個節點是怎樣知道你賬戶余額的呢?區塊鏈系統本身并不會追蹤余額;它僅僅記錄每一筆經過確認與驗證的交易。事實上,賬本也不會追蹤余額,而僅僅追蹤比特幣網絡內廣播的每筆交易(圖四)。要確定你的錢包余額,你需要分析并驗證整個網絡內與你的錢包有關聯的每一筆交易。

區塊鏈的運作方式

-圖 4. 區塊鏈賬本- “余額” 的驗證基于先前進行的交易。要向 John 支付 10 枚比特幣,Mary 需要生成一個交易請求,這一請求包含了 Mary 先前收到比特幣合計至少 10 枚的交易鏈接。這些鏈接被稱為 “輸入”。網絡中的節點會確認交易額并確保這些 “輸入” 暫未被花費。事實上,每當你在交易中納入某些 “輸入” 時,它們在這次交易之后的交易中就會變得無效。上述這些內容會自動在 Mary 的錢包中完成,并通過比特幣網絡的節點進行二次確認;她只是通過 John 的公鑰向他的錢包支付了 10 枚比特幣。

編者注:上面談到的只是比特幣等使用 UTXO 形式來表示資金的區塊鏈的特點。并非所有區塊鏈都是如此的,比如以太坊就不是這樣。

區塊鏈的運作方式

-圖 5. 區塊鏈交易請求結構- 那么,系統如何確認這些交易的輸入是有效的?它會通過查詢 “輸入” 來檢查所有與你用于支付的錢包相關的交易。為了使得這一檢查更加快捷,網絡節點會保留未花費貨幣的記錄。多虧了這種安全檢查,我們才能確保比特幣不能被雙花(即一筆錢被同時支付給不同的人)。

擁有比特幣也就意味著比特幣賬本中的一些交易指向你的錢包地址,并且它們暫時還沒有被用作 “輸入”。在比特幣網絡上所有用于執行交易的代碼都是開源的;也就是說,任何一臺聯網的筆記本電腦的持有者都可以進行交易。然而,一旦用于廣播交易請求信息的代碼存在任何問題,與交易相關的比特幣就會永遠消失。

編者注:就實際而言,上面這段話的最后一句是錯的。因為只要代碼沒有破壞掉賬本,全網就有無數個副本;記錄在賬本上的錢,只要沒花掉,自然也就不會少。但是會不會有一些軟件漏洞會讓比特幣完全失去價值呢?可以看看下面這篇文章的討論:

請記住,由于網絡是分布式的,客服電話是不存在的,也沒有人可以幫助你找回消失的交易或遺忘的密碼。因此,如果你對比特幣網絡交易感興趣,最好使用比特幣錢包的官方開源版本(如 Bitcoin Core),并把你的錢包密碼和私鑰保存在一個固若金湯的保險柜里。

放在比特幣錢包里的錢真的安全嗎?“區塊鏈 ”的名字來源說~

人人都能夠匿名連接比特幣網絡(例如:可以通過TOR network或者VPN network來連入比特幣網絡),而且收發交易的過程都只需公開公鑰(而無需透露其它信息)。如果有人總是使用同一公鑰,人們只要通過他的公鑰,就可以查詢到他所有的交易了。但是人們可以創建很多個錢包,每個錢包的私鑰各不相同,這樣用戶就可以用不同的錢包接收轉賬了。除非你把所有比特幣都轉到一個錢包,否則,其他人無論如何也不可能知道哪些錢包地址是你的。
比特幣地址的總數有 2160個,或者說 1461501637330902918203684832716283019655932542976 個。

比特幣錢包地址數量之大,使得每個用戶都能擁有自己的錢包,又無需擔心被攻擊者破解。

盡管有了這一設置,但還有一個安全漏洞未解決——撤回已經花掉的比特幣。因為交易是在節點間隨機傳遞的,因此兩單交易的在節點間傳輸的順序可能會有所不同。攻擊者可以先發送交易指令,等到交易對手方發貨之后,就立馬發送相反的交易指令到他自己的賬戶。在這種情況下,一些節點可能趕在接受到第一交易指令前早已收到了第二交易指令,故把第一支付交易指令視作無效。可此時,交易輸入項已然顯示為 “完成”。那么,問題來了——人們究竟怎么檢驗哪個交易指令為先呢?用時間戳給各單交易進行排序是極其不安全的,因為時間戳很容易被人偽造。所以,(在這樣的開放網絡中)并沒有任何(簡單的技術)辦法辨別交易的先后順序;這就出現了欺詐的可能。

如果真的有人惡意撤回交易,網絡中的節點接收到的交易順序就會不一致。因此,區塊鏈系統有意設計得需要節點達成一致(共識),以此來防止上面所說的詐騙事件。

比特幣網絡把各單交易分進不同的區塊來給它們排序,每個區塊包含確定數量的交易和該區塊與前一區塊的鏈接。如此一來,區塊就一個接著一個地按時間排列。區塊也因此變成了時間順序的鏈條,故而得其名曰:區塊鏈

區塊鏈的運作方式

-圖 6. 簡化的區塊鏈排序結構- 在同一區塊內的交易被認為同時發生,而還沒被納入區塊的交易都是未確認交易。每個節點都可以將交易打包進一個數據塊,并廣播到網絡中、建議其它節點接受該數據塊作為最新區塊。可是,按照這意思,任意節點都可以提議新區塊,面對眾多的答案,系統中節點應該怎么就下一個區塊達成共識呢?

每一區塊必須解開由(計算上)不可逆的密碼學哈希函數設置的復雜數學問題,才可成為區塊鏈中的一員(塊)。解決這復雜數學問題的唯一方法是——結合著上一個區塊的內容,不斷地猜測隨機數,直至找到一個符合定義的結果。一臺普通電腦大約需要花近一年的時間來猜對這個數字。這個數字聽起來很大,但大家不要忘了網絡中有千千萬萬臺電腦在猜數字,平均每 10 分鐘就會產生一個區塊。解決數學難題的節點會獲得廣播該區塊并要求大家把該塊當作最新區塊的權利。

編者注:這么說可能更順一點。在設計上,(除了第一個區塊)每個區塊都必須指定自己要承接的上一個區塊;結合著這上一個區塊的內容,我們可以用密碼學哈希函數設計出一種計算難題:要求通過改變輸入來使得哈希函數的結果符合一定的形式要求(比如小于某個值)。因為哈希函數的結果是隨機的,而且在計算上是單向的(不可能通過 y 反推出 x),因此,找出符合要求的解的唯一方法就是暴力運算。找出了這樣的一個解之后,找到解的節點就可以廣播相應的區塊、要求其它節點接受了。

而上面這個 “10 分鐘”,即是比特幣的 “區塊間隔”(或者說 “出塊時間”)。不同的區塊鏈往往有不同的出塊時間。

這時,可能會有善于提問題的同學舉起小手手問:要是碰到兩個節點同時解決了問題,并把他們的塊都發送到網絡,這時可怎么辦?

在這種情況下,兩個區塊都廣播到網絡中了,其他節點就在自己先收到的區塊上開始繼續加塊。但是,比特幣協議要求每一個節點都在其可見的最長鏈上加塊,因此,若不清楚哪一個是最新區塊(兩個塊同時被挖出),一旦某一個區塊后面的區塊得以挖出,根據最長鏈規則,該問題即可解決。

區塊鏈的運作方式

-圖 7. 鏈頂端的模糊性解決邏輯-

由于同時挖出區塊的可能性很低,也幾乎不可能在每一個高度都有多個區塊同時挖出。所以,整個區塊鏈就會在一條每個節點都同意的鏈上迅速穩定下來。

但 “哪個區塊是區塊鏈的頂端” 的分歧又給了詐騙者可乘之機。如果交易恰好在非最長鏈中(如圖 7 的區塊 B),一旦(最長鏈)挖出了下一區塊,在該區塊中的這單交易和其他交易將復歸為 “未確定的交易(狀態)”。

數學競賽保護著在比特幣區塊鏈的系統中的交易,簡言之,每個攻擊者無疑都在單挑整個網絡。

讓我們來看看這個例子,瑪麗是怎么利用鏈條頂端的模糊性進行 “雙花攻擊” 的。瑪麗轉一些錢給約翰,約翰知道后就發貨給瑪麗。因為節點總采用最長鏈規則來確認交易,所以,如果瑪麗能夠挖出一條更長的鏈,同時撤回上述交易,那么約翰就會錢貨兩空。

區塊鏈的運作方式

-圖 8. 瑪麗的 “雙花攻擊” -

那系統怎么預防這種詐騙的呢?每個區塊會引用前一區塊的區塊 ID(詳見六6)。前一區塊的 ID 也是密碼學謎題的一個元素,節點(“礦工”)要解決這個難題才能將后續區塊上鏈。因為解一個難題并把新區塊放上鏈需要大量隨機的猜測,所以預先計算一連串區塊是極其困難的。在這個數學競賽中,以一敵眾的瑪麗暫時搶先放置了下一個區塊,不過,離她的如意算盤還早著了——她幾乎不可能連續地解決第二個、第三個、第四個......畢竟她的對手是整個網絡呀!

如果瑪麗用跑得超級快的電腦和整個網絡杠呢?答案還是一樣滴。由于網絡上有千千萬萬個對手,不管瑪麗用的是多么多么快的電腦,瑪麗在進行雙花攻擊時,需要接二連三地解決數學題,這還真滴不太可能(可不要怪我打擊人哦)。

瑪麗需要控制全網絡 50% 的計算能力,才有 50% 可能性趕在其他節點之前解開一個區塊。即使在這種情況下,她也僅有 25% 可能性可以連續出兩個區塊。簡單地說,她需要連續出的區塊越多,她成功的可能性就越小。再敲一下小黑板——在比特幣區塊鏈系統中的交易受這種數學競賽 “護體” ,攻擊者無疑是以卵擊石。

因此,隨著時間推移,交易也會更為安全。舉個例子,那些一小時前確認并保存在區塊中的交易比十分鐘前確認的交易更加的安全。由于區塊平均每十分鐘會增加一個,那么在一小時前保存在區塊當中的交易早已確認,變得不可逆了。

區塊鏈的運作方式

-圖 9. 區塊鏈的交易安全性-

比特幣挖礦

要發送比特幣的時候,你需要引用一筆接收者為你的錢包的資金。這適用于網絡中的每一交易。
編者注:這就是所謂的 “UTXO”,即在比特幣系統中,錢不像我們的銀行賬戶那樣是以數字的形式存在的,而是以一張票據(note)的形式存在的。當你要轉賬時,你等于是要把票據拆成(或補成)一筆特定數額的票據,然后用只有提供接收者私鑰才能解鎖的方式給這筆資金上鎖。接收方日后要花這筆錢的時候也是如此:用自己的私鑰解鎖。

以太坊則相反,使用的是賬戶模式,很像我們的銀行賬戶。詳情可見:

那么,我們此時會問——比特幣最初是從哪里來的呢?

作為一種平衡比特幣通縮特性的方式(這種特性由軟件出錯和錢包密碼丟失所致),每當人們解決一個區塊的數學題,就會得到相應的獎勵。這種為了得到比特幣獎勵而運行比特幣軟件的行為,我們稱之為——“挖礦”,這其實蠻像淘金的。

激勵個人去運作節點的主要動機是獎勵,這種激勵措施也為保證交易正常運行和區塊鏈網絡穩定性提供必要的計算能力。我們之前也提過了,普通的電腦要解出一個區塊需要將近一年的時間,所以,節點們一般都會組隊,以減少每個節點需要猜的數字。成群結隊可以加快猜對數字而得到獎勵的速度,之后可以再在組內分享收益。我們把這些小組稱之為——“礦池”(mining pool)。

有些礦池非常大,集中了全網多于 20% 的計算能力。 如此龐大的計算能力貌似對網絡的安全性提出了挑戰,我們可以從上述所說的雙花攻擊的例子中即可看出。但即使有些礦池可能集中到了全網絡 50% 的計算能力,區塊在鏈上的深度越高,交易安全性就越高。

值得一提的是,有些擁有強大計算能力的礦池已經決定為保全整個網絡的安全自覺地限制了自己的成員數量。

隨著科學技術創新和節點的數量增多,整個網絡的計算能力很可能會越來越強,比特幣協議也會重新校準解題難度,以保證仍舊平均每十分鐘增加一個區塊。這保證了網絡的穩定性和整體安全性。

另外,區塊獎勵會每四年減半一次,所以對于人們來說,挖礦(運行網絡)不會一直那么有吸引力。為了鼓勵節點保持運行,每筆交易都可以附加小額的手續費。這些獎勵會進入成功挖出區塊的礦工囊中。有了這種機制,那些有高額手續費的交易通常會比那些有較少手續費的交易更快得到打包。這樣,想讓交易盡快確認(更貴)呢?還是想節省一點交易費(更慢)?任君選擇。 目前來看,比特幣網中的交易費用比銀行的交易費用還是低很多的,此外,比特幣的交易費與交易金額并無關聯。

比特幣的優勢和它面臨的挑戰


讀到文章此處,你對區塊鏈的運行有了總體的了解。我們現在再快速復習一下為什么區塊鏈如此地有趣吧~

區塊鏈技術顯著的優勢在于:
  • 你可以牢牢地把控住自己資產的價值,沒有其他第三方可以控制你的資產或者限制你對你的資產的獲取權限。
  • 全球轉移價值的成本變得非常低廉,使小額支付可行。
  • 可以在幾分鐘內傳遞價值,且在短短幾小時后,我們就可以認定轉賬的確定性,而不是傳統節奏上按天或者按周來計算。
  • 所有人在所有時候都可以驗證在區塊鏈上發生的每一單交易,這確保了交易的透明化。
  • 我們還可以利用區塊鏈技術構建去中心化應用程序,這些應用能夠管理信息,且快速安全地傳遞價值。

然而,區塊鏈仍然存在著一些需要解決的挑戰:
  • 可以匿名發送和接收交易。這雖然保護了用戶的隱私,但是也允許了網絡上的不法活動。
  • 盡管越來越多交易平臺涌現出來,電子貨幣也越來越受歡迎,但是把比特幣用于商品和服務交易還不算容易。
  • 和其他加密貨幣一樣,比特幣的價格波動還很大。在市面上,并沒有很多流通的比特幣,且人們對比特幣的需求變化莫測。比特幣的價格很大程度上也會受行業中的大事件影響。

總體來說,從廣告到能源分配,區塊鏈有潛力革新許多行業。去中心化的屬性和消除人們對信任的需求是它最神奇的魔力了。

新的使用案例每時每刻都在增加,比如:一個可以運行智能合約的完全去中心化平臺——以太坊。但是,需要我們記住的是:這項技術依然處在早期階段。日復一日,隨著有助于提高區塊鏈安全性的新工具不斷研發出來,區塊鏈的技術可以覆蓋更廣泛的功能、工具和服務。

原文鏈接:https://medium.com/s/story/how-does-the-blockchain-work-98c8cd01d2ae作者:Michele D'Aliessi翻譯&校對:周瑾, ViolaH & Elisa

本文由原作者授權 EthFans 翻譯及再出版。

(本文來源于以太坊愛好者 EthFans,未經作者許可嚴禁轉載,違者法律必究)
相關新聞
捕鸟达人原版 北京赛记录查询 pk10高手赌法长期 福建时时软件怎么样 江苏七位数视频直播 捕鱼游戏平台 北京赛app 排列五预测专家 310比分直播网 秒速时时规律 开数下期必开七肖 快乐十分技巧黑龙江时时走势图 北京塞车pk记录 一分赛车技巧 网上玩龙虎死守一个 内蒙古时时十一选五开奖 重庆时时彩现场直播