區塊鏈究竟是如何工作的?

京東科技開發者發表於2019-11-04

區塊鏈究竟是如何工作的?


區塊鏈技術可能是自網際網路時代來臨以來最好的發明。它在不需要信任和中央權威的情況下允許進行價值交換。來,讓我們來想象一場打賭,我們在舊金山明天的天氣上賭50美元。我打賭會是晴天,而你選擇會下雨。現在,我們有三個選項來管理這筆交易:

  1. 我們可以選擇互相 信任。無論晴雨,輸的人將給贏的人50美元。如果我們是朋友,這可能是一個很好的處理方式。然而,無論朋友還是陌生人,誰都不可能輕易付錢給誰。
  2. 我們可以選擇把賭注變成 合同。一旦簽訂了合同,雙方都更容易履行付款義務。然而,如果輸的人就是不履行付款義務的話,那麼獲勝者將不得不採取法律手段並花費額外的錢來支付法律費用,同時訴訟可能也會需要很高的時間成本。這看起來似乎不是管理交易的最佳方式,特別是對於少量現金的交易。
  3. 我們可以選擇讓 中立的第三方 介入。我們每個人給第三方50美元,第三方將把總數給獲勝者。但是,也許她會帶著我們所有的錢跑掉呢?至此,我們只能在前兩個選項中進行選擇: 信任合同
但是,信任和合同都不是最佳解決方案:我們無法信任陌生人,而執行合同需要時間和金錢。區塊鏈技術很有趣,因為它為我們提供了安全、快速、便宜的第三種解決方案。
區塊鏈能夠讓我們寫幾行程式碼(一個執行在區塊鏈上的程式)來讓我們雙方都將向它傳送50美元。這個程式會保證這100美元的安全,同時在幾個資料來源上自動查詢明天的天氣。無論明天是晴天還是雨天,它都會自動將全部金額轉給獲勝者。每一方都可以在程式執行前檢查它的契約邏輯,但是一旦它在區塊鏈上執行,任何人就都無法更改或停止它了。對於50美元的小賭注來說,這可能是太大的精力投入了,但想象一下出售一所房子或一家公司時呢?
本文解釋了區塊鏈是如何工作的,但沒有深入討論技術細節,而是透過深入挖掘,讓你大致瞭解底層邏輯和機制。

比特幣的基礎知識

區塊鏈究竟是如何工作的?

圖片由作者提供


區塊鏈技術最廣為人知和討論最多的應用是比特幣,這是一種可以用來交換產品和服務的數字貨幣,就像美元、歐元、人民幣和其他國家貨幣一樣。讓我們從區塊鏈技術的第一個應用程式入手,來了解它是如何工作。

“比特幣讓我們第一次能在網際網路上給網路使用者轉移獨一無二的數字資產,而且這種方式安全可靠,每個人都知道轉賬的發生,沒有人會質疑它的合法性。這項成果(指比特幣)的巨大突破,無論怎麼誇讚都不為過。” ——馬克•安德森
“一比特幣”是比特幣(BTC)數字貨幣的單一單位。就像美元一樣,比特幣本身沒有價值;它之所以有價值,只是因為我們同意進行商品和服務交易,以使更多的貨幣處於我們的控制之下。
為了記錄我們每個人擁有的比特幣數量,區塊鏈使用了分類賬,這是一種跟蹤所有比特幣交易的數字檔案。

區塊鏈究竟是如何工作的?

圖1 -比特幣電子賬本


分類帳檔案不儲存在中央實體伺服器(如銀行或單個資料中心)中。它透過一個同時進行儲存資料和執行計算的私有計算機網路來分佈在世界各地。每臺計算機代表區塊鏈網路的一個“節點”,並有一份總賬檔案的副本。

如果某天,David想給Sandra傳送比特幣,那麼他會向網路傳送一條訊息,說他的賬戶裡的比特幣數量應該減少5個BTC,而Sandra的賬戶裡的比特幣數量應該增加5個BTC。網路中的每個節點都將接收到該交易訊息,並將請求的事務應用到其分類帳副本中,從而更新帳戶餘額。
區塊鏈究竟是如何工作的?
圖2 -交易請求訊息


分類帳是由一組相互連線的計算機來管理的,而不是像銀行那樣由一個集中的實體來管理,這一事實具有如下幾點含義:

  • 在我們的銀行系統中,我們只知道自己的交易和賬戶餘額;但是在區塊鏈上,每個人都可以看到其他人的事務。
  • 雖然你通常可以信任你的銀行,但比特幣網路是分散式的,如果出了問題,沒有服務檯可以呼叫,也沒有任何人可以起訴。
  • 區塊鏈系統的設計不需要任何信任;它透過特殊的數學函式和程式碼來實現安全性和可靠性。
我們可以將區塊鏈定義為一個系統,一個允許一組連線電腦來維護單個分類帳的更新和安全。然後呢,為了在區塊鏈上進行交易,你需要一個“錢包”,一個允許你儲存和交換比特幣的程式。由於只有你才能使用你的比特幣,所以每個錢包都由一種特殊的加密方法保護,這種保護方法將使用一對獨特但相互連線的金鑰:一個私有金鑰和一個公共金鑰。
如果訊息使用特定的公鑰加密,則只有擁有對應的私鑰才能解密和讀取訊息。反過來也一樣:如果使用私鑰加密訊息,那麼也只能透過配對的公鑰解密它。因此,當David想要執行一筆比特幣交易時,他需要廣播一條用他錢包的私鑰加密的訊息。由於David是唯一一個知道開啟錢包所需的私鑰的人,所以他是唯一一個可以使用這筆比特幣的人。此外,網路中的每個節點都可以透過使用David錢包的公鑰解密訊息,來交叉檢查事務請求是否來自David。
當你使用錢包的私鑰加密交易請求時,將生成一個數字簽名,區塊鏈計算機將使用該數字簽名來驗證交易的來源和真實性。數字簽名是由你的交易請求和你的私鑰產生的文字字串;因此,它不能用於其他事務。一旦你更改了交易請求訊息中的單個字元,數字簽名也將會更改,以保證沒有潛在的攻擊者可以更改你的交易請求或你傳送的比特幣數量。
區塊鏈究竟是如何工作的?
圖3 -簡化數字簽名交易加密


想要傳送比特幣,你需要證明你擁有一個特定錢包的私鑰,因為你需要這個私鑰來加密你的交易請求資訊。由於你只能在訊息加密後才能廣播訊息,所以你永遠無無需透露你的私鑰是什麼。


跟蹤錢包餘額

區塊鏈中的每個節點都儲存著一份分類帳副本。那麼,一個節點如何知道你的帳戶餘額呢?區塊鏈系統根本不記錄賬戶餘額;它只記錄每一筆經過驗證和批准的交易。分類賬實際上並不記錄餘額,它只記錄比特幣網路中廣播的每一筆交易(如圖4)。因此,為了確定你的錢包餘額,你需要分析和驗證連線到你錢包的整個網路中發生的所有交易。
區塊鏈究竟是如何工作的?
圖4 -區塊鏈網路賬本


這種“餘額”驗證是基於到以前事務的連結執行的。也就是說,如果要向John傳送10個比特幣,Mary必須生成一個交易請求,該請求包括之前傳入的交易的連結,這些交易加起來至少有10個比特幣。這些連結稱為“輸入”。網路中的節點將對金額進行驗證,並確保這些投入還沒有被花費。實際上,每次你在事務中引用輸入時,它們都將被視為無效的。這一切都是在Mary的錢包裡自動執行,並由比特幣網路節點進行雙重檢查;她只不過是使用John的公鑰向他的錢包傳送了一個10 BTC的事務。

那麼,系統是如何才能相信輸入事務是有效的呢?是這樣,它會檢查所有的與你錢包相關的以前的交易,這些交易都是透過引用輸入來執行的。為了加快驗證過程,網路節點保留了未使用事務的特殊記錄。多虧了這種安全檢查,保證了比特幣不可能被重複使用。
區塊鏈究竟是如何工作的?
圖5 -區塊鏈交易資訊結構


擁有比特幣是什麼意思呢?也就是說明,有些交易記錄在分類賬上,指向你的錢包地址,但還沒有被用作輸入。同時,所有在比特幣網路上執行交易的程式碼都是開源的;這意味著任何有膝上型電腦和網際網路連線的人都可以操作交易。然而,如果用於傳播交易請求訊息的程式碼出現錯誤,相關的比特幣將永久丟失。

請注意,由於網路是分散式的,因此沒有客服支援可以呼叫,也沒有任何人能夠幫助你恢復丟失的事務或忘記的錢包密碼。因此,如果你對在比特幣網路上進行交易感興趣,那麼最好使用開源的、官方版本的比特幣錢包軟體(如bitcoin Core),並將您錢包的密碼或私鑰儲存在一個非常安全的儲存庫中。

區塊鏈為什麼叫區塊鏈?它真的安全嗎?

任何人都可以透過匿名連線(例如TOR網路或VPN網路)訪問比特幣網路,並提交或接收僅顯示其公鑰的交易。但是,如果某人反覆使用相同的公鑰,則可以將所有交易連線到同一所有者。比特幣網路允許您生成任意數量的錢包,每個錢包都有自己的私鑰和公鑰。這樣就可以在不同的錢包上接收付款,除非你將所有接收到的比特幣傳送到單個錢包,否則任何人都無法知道你究竟擁有哪些錢包的私鑰。
比特幣地址(Bitcoin addresses)的總數是 2^¹⁶⁰或1461501637330902918203684832716283019655932542976
上述引用中的數字意味著在允許每一個人都擁有錢包的同時,還可以保護網路免受部分可能的攻擊。
不過即便是透過這種設定,仍然存在著一個很大的安全漏洞,在花掉比特幣後,可以利用該漏洞來召回比特幣。事務在網路中是從一個節點傳遞到另一個節點的,因此兩個事務到達每個節點的順序可以不同。攻擊者可以傳送交易,等待對方傳送產品,然後將反向交易傳送回自己的帳戶。在這種情況下,某些節點可以在第一個交易之前接收到第二個交易,因此認為初始支付交易無效,交易輸入將被標記為已花費。那我們要怎麼才能知道先請求哪個交易呢?按時間戳訂購交易是不安全的因為它很容易被偽造,這增加了比特幣交易的安全風險。
如果發生這種情況,則網路節點之間在每個節點接收到的交易順序上將存在分歧。因此,區塊鏈系統已設計為使用節點協議來訂購交易並防止上述欺詐行為。
比特幣的網路訂單交易透過其分組成塊(Block) ; 每個區塊都包含一定數量的交易以及到上一個區塊的連結。這就是將一個塊放在另一個塊之後的原因。因此,將塊組織成一個與時間相關的鏈(圖6),該鏈為整個系統命名:區塊鏈。
區塊鏈究竟是如何工作的?
圖6 -簡化的區塊鏈序列結構


同一區塊中的事務被視為同時發生,而尚未在區塊中的事務被視為未確認。每個節點都可以將事務分組為一個塊,然後將其釋出到網路,作為下一個塊的劃分參考。由於任何節點都可以建議一個新的塊,系統如何來定義下一個塊應該怎麼劃分呢?

要新增到區塊鏈中,每個塊都必須包含使用不可逆的密碼雜湊函式建立的複雜數學問題的答案。解決此類數學問題的唯一方法是猜測隨機數,該隨機數與先前的塊內容結合可生成定義的結果。一臺典型的計算機可能需要大約一年的時間才能猜出正確的數字。但是,由於網路中有大量正在猜測數字的計算機,因此平均每10分鐘就會解決一個塊。解決數學問題的節點獲得將下一個塊放置在鏈上並將其推到網路的權利。
如果兩個節點同時解決問題並將塊同時傳送到網路怎麼辦?在這種情況下,兩個塊就都會被進行推送,並且每個節點都建立在它首先接收的塊上。但是,區塊鏈系統要求每個節點立即在可用的最長區塊鏈上構建。因此,如果不清楚哪個塊是最後一個塊,則在解決下一個塊時,每個節點將採用最長的鏈作為唯一選擇。
區塊鏈究竟是如何工作的?
圖7 -鏈端模糊邏輯


由於同時解決區塊的可能性低,幾乎不可能一次又一次地解決多個區塊,構建不同的“尾巴”,因此整個區塊鏈可以快速穩定到每個節點都同意的單個字串區塊。

關於哪個區塊代表鏈尾末端的爭論,再次開啟了對於區塊鏈安全性的討論。如果某個交易恰好位於屬於較短尾部的區塊中(如圖7中的區塊B),則在解決了下一個區塊後,該交易以及該區塊中的所有其他交易將回到未確認的交易中。
比特幣區塊鏈系統中的交易受到數字競賽的保護:任何攻擊者都在與整個網路競爭。
讓我們看看Mary如何利用這種鏈末歧義來執行“雙重攻擊”(double-spending attack)的。Mary寄錢給John,John將產品寄給Mary。由於節點始終採用長鏈作為已確認的交易,因此,如果Mary可以生成包含相同反向引用的反向交易的長鏈,則John的資金和產品都將無法使用。
區塊鏈究竟是如何工作的?
圖8 -Mary攻擊模型


系統如何防止此類欺詐?每個塊都包含對前一個塊的引用 (請參見圖6)。為了將以下模組擴充套件到網路,就要解決一系列數學問題。由於要解決一個區塊並將其放置在區塊鏈上需要大量隨機猜測,因此很難預先計算一系列區塊。Mary正在與網路的其餘部分競爭,使她能夠將下一個區塊放在鏈上。即使她先於其他人解決了問題,也不太可能連續解決兩個、三個或更多的問題,因為每次她都需要與整個網路的計算來競爭。

有人可能會想,Mary可以使用超快速計算機生成足夠的隨機猜測值來與整個網路競爭來解決這個問題嗎?是,這確實是有可能的。她在控制整個挽留過50%計算能力時,將可能有50%的機會在其他節點之前解決一個塊,如果想要解決兩個塊,那機率就降低到了20%……要決絕的問題越多,成功的可能性就會越低。因此,即使使用非常非常快的計算機,由於網路中的使用者數太過龐大,幾乎不太可能在確切時間連續解決幾個區塊。
所以,我們可以看到隨著時間的推移,交易變得越來越安全。例如,在一小時前確認的區塊中包含的安全性比最近10分鐘內確認的區塊中的安全性高。由於平均平均每10分鐘將一個區塊新增到鏈中,因此一個小時前第一次包含在該區塊中的交易很可能已被處理且其結果不可逆。
區塊鏈究竟是如何工作的?
圖9 -區塊鏈交易安全



比特幣挖礦

如果要傳送比特幣,那就需要有比特幣轉入到你自己的錢包中這樣流程才能進行。這適用於網路上的每筆交易。那麼,一開始的比特幣是從哪裡來的呢?
由於軟體錯誤或錢包密碼丟失都有可能造成比特幣通貨緊縮,因此每一個解決區塊數學問題的節點都會獲得獎勵。為了獲得這些比特幣獎勵而執行比特幣區塊鏈軟體的活動稱為“採礦”,這非常類似於開採黃金。
獎勵是私人操作節點的主要動力,從而為處理交易和穩定區塊鏈網路提供了必要的計算能力。
因為一臺典型的計算機要花很長時間才能解決一個塊 (平均大約一年),所以節點按組分在一起解決問題,這樣可以大大提高效率,然後小組成員共享獎勵的比特幣。這些多個組一起解決問題的形式就稱為採礦池。
其中一些採礦池非常大,佔網路總計算能力的20%以上。就像上述Mary的那個攻擊示例所示,這對網路安全具有明顯的影響。即使這些池中的一個可能潛節點獲得了50%的網路計算能力,時間越久,其中的交易就越安全。
但是,其中一些具有強大計算能力的礦池已決定限制其成員,以維護整體網路安全。由於技術創新和節點數量的增加,隨著時間的流逝,整個網路的計算能力可能會增加,因此,區塊鏈系統重新校準了求解下一個區塊的數學難度,以使整個網路的平均目標時間為10分鐘。這樣可以確保網路的穩定性和整體安全性。
此外,每四年區塊的挖礦獎勵會減少一半,因此隨著時間的推移,大家對於開採比特幣(執行網路)的興趣就減少了。因此,為了避免節點停止挖礦,系統允許每筆交易資訊可以附帶一點回饋金,節點便可以獲得額外的利益。
由於這種機制,與較高獎勵相關聯的交易通常比與較低獎勵相關聯的交易處理得更快。這意味著,在傳送交易時,你可以決定是想更快地處理(更昂貴)還是更便宜地處理(花費更多時間)。與銀行收取的費用相比,目前比特幣網路中的交易費用很少,並且與交易金額無關。

區塊鏈的好處和挑戰

在對區塊鏈的工作原理有了一個大致的瞭解的基礎上,讓我們快速看一下為什麼有那麼多人都在關注它?
使用區塊鏈技術具有的顯著優勢:
  • 你可以全權控制自己的資產;沒有任何第三方可以替你持有你的資產或限制你的訪問;
  • 不管你是從地球上的任何地方進行交易,它的成本都非常低,允許進行小額付款;
  • 財產可以在幾分鐘內實現安全轉移確認;
  • 具有很高的透明度,任何人都可以隨時驗證在區塊鏈上進行的每筆交易;
  • 可以利用區塊鏈技術來構建去中心化應用程式,這些應用程式可以快速安全地管理資訊並轉移價值。


但是,區塊鏈目前也有一些挑戰需要解決:

  • 交易可以匿名傳送和接收。這樣既可以保護使用者隱私,又可以允許網路上的非法活動。 儘管出現了許多交易平臺,數字貨幣越來越流行,但是用比特幣交易商品和服務仍然不容易;
  • 像許多其他加密貨幣一樣,比特幣非常不穩定:市場上沒有太多的比特幣,需求正在迅速變化。比特幣價格不穩定,會受到加密貨幣行業的重大事件或政策釋出的影響。


總體而言,區塊鏈技術具有革新意義。在廣告、能源分配等多個行業的有著待挖掘的潛力。其主要推力在於去中心化以及依賴性,受到了眾多行業的關注。

原文連結:



目前,京東雲區塊鏈專案BDS已開源,同時還在招募開發者加入!點選 閱讀 可瞭解詳情
歡迎點選“ 京東雲 ”瞭解更多精彩內容

區塊鏈究竟是如何工作的?


以上資訊來源於網路,由“京東雲開發者社群”公眾號編輯整理,
不代表京東雲立場。
區塊鏈究竟是如何工作的?


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69912185/viewspace-2662575/,如需轉載,請註明出處,否則將追究法律責任。

相關文章