區塊鏈機制#
哈希#
哈希函數(如 SHA-256)接收一個數據塊,並生成一個有效的隨機固定大小整數。
數據塊的任意改變都會影響哈希值。
基於哈希的工作量證明#
- 無法從輸出計算輸入
- 要查找輸入開頭有 N 個零的哈希值,需要 2N 次 Nonce 是一個在加密通信只能使用一次的數字。計算 —— 證明計算功
- 如果我們對遞增的 “nonce” 進行哈希處理作為哈希輸入,(Nonce 是一個在加密通信只能使用一次的數字)我們可以去尋找零:
鏈競賽#
- 參數 N 設置遊戲難度。(哈希值開頭有 N 個零)
- 玩家獲得一個區塊列表,其中包含:
- 一個區塊編號
- 一個獲勝者編號
- 一個 nonce 值
- 一個帶有 N 個零的前一個區塊的哈希
- 玩家通過創建區塊來累積積分
– 哈希前一個區塊
– 找到一個新區塊的哈希,並且有足夠的零
– 然後他們將這個區塊傳送給所有人
設置 N=3,目的是找到一個 nonce,結合 winner、parent hash 等,使得生成的 hash 值滿足開頭 N 個零。
算法 來創建一個新區塊:
- 驗證所有前一個區塊的哈希
- 使用隨機 nonce 構建一個新區塊
- 哈希新區塊。它有 N 個零嗎?
– 沒有?返回第 2 步
– 是的?將你的新區塊發送給所有人!
對於 N 個 0,因為 SHA-256 輸出實際上是隨機的,所以得到 N 零位 = 與拋硬幣並連續獲得 N 個正面相同。對於 N 個零,必須嘗試 2N/2 個隨機數。N=1,嘗試 1 個隨機數;N = 16,嘗試 32768 個隨機數;N = 32,試用 20 億個 nonce。
作弊者#
一個作弊方法:編造一個假哈希。
然後:
- 算法中的第 1 步將對所有其他玩家失敗。
- 其他玩家將不會使用你的區塊,使其不成為鏈的一部分。
簽名#
比特幣帳戶和簽名#
使玩家 ID = 公鑰
我們現在可以通過簽署消息並將其發送給所有人來進行交易
已簽署的交易是:
・不可更改
・任何人都可以驗證
・從密鑰到密鑰,與 “真實” 身份無關
與交易的競賽#
我們不能保證 public_key1 確實有 50 點,這造成了過度交易。解決方法,把交易信息放進區塊中。
“過度交易” 問題難以解決,原因是沒有一個絕對不可改變的時間來源。在防止過度交易的過程中,時間戳是一種常用的手段,用於確定交易的先後順序和時間限制。但如果沒有一個絕對可信且不可篡改的時間源,玩家可能會利用時間上的漏洞來繞過對過度交易的限制。例如,玩家可能通過操縱本地時間或利用時間記錄的不確定性,在短時間內進行遠超規則允許數量的交易,而系統由於缺乏可靠的時間依據,難以有效識別和阻止這種過度交易行為。
・玩家付出努力以獲得積分
・玩家可以安全地交易積分
– 簽名防止交易的更改
– 簽名驗證交易的來源
・玩家可以檢測過度交易
– 玩家將拒絕在過度交易的區塊上延長遊戲
– 如果他們這樣做,他們就是在浪費努力,因為其他玩家不會在他們的區塊上延長遊戲
每個區塊都包含一個時間戳,用於記錄該區塊被創建的時間。當交易被打包進區塊時,它們會按照時間順序被記錄下來。這使得系統可以清晰地看到交易的先後順序,從而判斷是否存在短時間內的過度交易行為。在區塊鏈網絡中,當礦工將交易打包進區塊後,該區塊需要經過其他節點的驗證。節點會檢查交易的合法性,包括交易的簽名是否正確、發送方是否有足夠的餘額等。對於試圖進行過度交易(即交易金額超過其實際擁有的點數或餘額)的交易,節點會拒絕將其包含在有效的區塊中。只有當所有節點都驗證通過後,該區塊才能被添加到區塊鏈上,從而保證了交易的合法性和真實性,防止了過度交易的發生。
為什麼要費心將交易放在您的區塊中?
・讓我們通過在交易中增加費用來解決這個問題
– 通過每增加一筆交易給他們積分來激勵玩家添加交易
– 獲得積分的兩種方法!
・為什麼要限制玩家交易?
– 讓玩家向任何擁有公鑰的人發送積分....
– 這現在是一個全球交易系統
簡化比特幣#
・玩家 = “礦工”,積分 = “比特幣”
・交易將價值(比特幣)從密鑰傳送到密鑰
・鏈競賽遊戲(區塊鏈)防止
過度消費而不需要中央權威
・遊戲規則 = 比特幣節點代碼,由礦工共識改變
・玩家共識取代權威
– 硬幣數量(限制為 2100 萬)
– 每個區塊的獎勵
– 難度如何增長
請注意,玩家 / 礦工可以與非玩家互動
・一旦創建了積分,接收者就可以創建對任何公鑰的交易・現在可以擴展到與非礦工 / 玩家的交易
・所有積分仍然來自某個區塊 / 礦工
像是一本存摺。
攻擊#
- 比特幣(或任何區塊鏈)的規則由礦工節點決定
礦工節點的核心作用:在比特幣或其他區塊鏈系統中,礦工節點扮演著至關重要的角色。礦工節點負責驗證交易、打包區塊,並通過共識機制將新的區塊添加到區塊鏈上。區塊鏈的規則實際上是由這些礦工節點共同遵循和執行的。例如,在比特幣網絡中,礦工節點需要按照特定的算法(如工作量證明)來競爭記帳權,只有符合規則的區塊才能被其他節點接受並添加到區塊鏈中。 - 多數決原則:“無論 51% 的礦工運行什麼都會獲勝” 這句話體現了區塊鏈中的多數決原則。在許多區塊鏈的共識機制中,當超過 51% 的礦工節點達成一致時,它們所認可的規則和區塊將被整個網絡接受。這是因為區塊鏈是一個去中心化的系統,沒有單一的權威機構來決定規則,而是依靠多數節點的共識來保證系統的一致性和安全性。
- 大多數參與者叛變會發生什麼
51% 攻擊:當區塊鏈網絡中超過 51% 的礦工節點出現叛變或被惡意控制時,就可能發生 51% 攻擊。在這種情況下,攻擊者可以利用其掌握的多數算力來延長惡意的區塊鏈分支(“extend bad blocks”)。攻擊者可以通過重新排列交易順序、撤銷已經確認的交易等方式來破壞區塊鏈的正常運行。例如,攻擊者可以在完成一筆交易後,通過 51% 攻擊撤銷該交易,然後將相同的資產再次轉移到其他地址,實現雙重花費。 - 對系統的影響:51% 攻擊會嚴重破壞區塊鏈的安全性和信任機制。用戶將無法信任區塊鏈上的交易記錄,因為攻擊者可以隨意篡改它們。這可能導致整個區塊鏈系統的崩潰,用戶對該區塊鏈的信心喪失,進而影響其價值和應用。
- 叛變所需的節點比例
- 不同網絡的差異:並非所有的區塊鏈網絡都需要 51% 的節點叛變才會受到攻擊。根據不同的區塊鏈網絡設計和共識機制,實際需要叛變的節點比例可能會低至 30% 或更少。一些新型的共識算法在設計上試圖降低對多數節點的依賴,以提高系統的安全性和抗攻擊能力。然而,即使叛變節點比例較低,攻擊者仍然可能對區塊鏈網絡造成嚴重的破壞。
- Sybil 攻擊:Sybil 攻擊是一種在計算機安全領域中針對對等網絡(peer - to - peer networks)聲譽系統的攻擊方式。在區塊鏈網絡中,攻擊者可以通過偽造大量的虛假節點身份(Sybil 節點)來控制網絡中的部分算力或投票權。這些虛假節點可以協同工作,模擬出多數節點的意見,從而干擾區塊鏈的共識過程,實現對區塊鏈網絡的攻擊。例如,攻擊者可以利用 Sybil 節點在權益證明(PoS)共識機制中獲取更多的記帳權,進而實施惡意行為。
操作現實#
- 假設廉價的存儲和網絡條件
- 節點存儲所有交易記錄:區塊鏈系統假定存儲和網絡成本相對較低,在這樣的前提下,每個節點都能夠存儲區塊鏈上發生過的每一筆交易。這種設計是為了保證區塊鏈的去中心化和數據的完整性。每個節點都有完整的帳本副本,使得任何節點都可以獨立驗證交易的合法性和區塊鏈的狀態。例如,在比特幣網絡中,全節點會存儲從創世區塊以來的所有交易信息,這有助於維護網絡的安全性和透明度。
- 交易和區塊廣播:當新的交易發生或者新的區塊被創建時,這些信息會在整個網絡中進行廣播。每個節點都會接收到這些廣播消息,並對其進行驗證。交易廣播確保了所有節點都能及時知曉新的交易請求,而區塊廣播則使得新的區塊能夠被添加到區塊鏈上。然而,這種廣播機制可能會對網絡的擴展性產生一定的限制。隨著區塊鏈上交易數量的不斷增加,廣播和同步這些信息所需的網絡帶寬和時間也會相應增加,從而可能導致網絡擁堵,影響系統的性能和擴展性。
- 交易速度慢
- 依賴公共區塊驗證:在區塊鏈中,要驗證一筆交易是否有效,需要等待該交易被打包進一個公共區塊,並經過一定數量的確認。由於區塊鏈的共識機制(如工作量證明)需要一定的時間來完成,因此交易確認的過程相對較慢。例如,在比特幣網絡中,平均每 10 分鐘生成一個新的區塊,而且為了確保交易的安全性,通常需要等待 6 個區塊的確認,這意味著一筆交易可能需要大約 1 個小時才能得到較為可靠的確認。這種延遲在一些對交易速度要求較高的場景中(如日常購物支付)可能會成為一個顯著的問題。
- 私鑰控制至關重要
- 丟失私鑰導致資金無法使用:私鑰是用戶控制其區塊鏈資產的關鍵。私鑰是一個隨機生成的數字,只有擁有私鑰的人才能對相應地址中的資產進行操作。如果用戶丟失了私鑰,就意味著失去了對該地址中資金的控制權,這些資金將變得無法花費。由於私鑰的性質是不可恢復的(除非有備份),一旦丟失,用戶將面臨永久性的資產損失。例如,早期比特幣持有者可能因為忘記私鑰存儲位置或存儲設備損壞等原因,導致大量比特幣無法被使用。
- 私鑰被盜導致資產被盜:私鑰的安全性直接關係到用戶資產的安全。如果私鑰被竊取,攻擊者就可以使用該私鑰簽署交易,將用戶地址中的資金轉移到自己的地址。黑客可能通過各種手段獲取用戶的私鑰,如網絡攻擊、惡意軟件感染等。因此,用戶必須採取嚴格的安全措施來保護自己的私鑰,如使用硬體錢包、設置強密碼、定期備份等。
比特幣錢包和地址#
- 用戶可以獲得多個錢包,如同銀行帳戶
- 每個錢包可以有許多地址
地址的作用:比特幣地址類似於銀行帳戶的帳號,是用戶接收比特幣的具體標識。每個錢包都可以生成多個不同的地址,這些地址都與該錢包相關聯,但彼此獨立。
滿足多樣化需求:多個地址可以滿足用戶在不同場景下的使用需求。比如,用戶在不同的交易平台、不同的合作夥伴之間進行交易時,可以使用不同的地址來接收比特幣。這樣可以方便用戶對不同來源的資金進行區分和管理。 - 用戶使用地址來接收比特幣
交易流程:當用戶想要接收比特幣時,只需將自己的比特幣地址提供給發送方。發送方在發起交易時,將比特幣發送到該地址對應的區塊鏈上的帳戶中。一旦交易被網絡確認並記錄在區塊鏈上,用戶就成功收到了比特幣。
地址的唯一性:每個比特幣地址都是唯一的,這確保了比特幣能夠準確無誤地發送到指定的用戶帳戶。同時,地址的生成是基於密碼學算法,具有很高的安全性,保證了交易的可靠性。 - 每個地址通常只使用一次
增強隱私和安全:為了提高交易的隱私性和安全性,比特幣地址一般建議只使用一次。如果一個地址被多次使用,攻擊者可以通過分析區塊鏈上的交易記錄,更容易地追蹤該地址所有者的交易行為和資金流向,從而泄露用戶的隱私信息。而每次使用新的地址接收比特幣,可以使交易記錄更加分散,增加了追蹤的難度,保護了用戶的隱私。
防止地址被標記:在區塊鏈網絡中,某些地址可能會因為參與了特定類型的交易(如非法交易)而被標記。如果用戶一直使用同一個地址,就有可能受到這些標記的影響,導致自己的帳戶被限制或調查。使用一次性地址可以避免這種風險。 - 使用地址接收比特幣使交易
更加私密
減少信息暴露:比特幣交易的一個重要特點是其相對匿名性。使用地址接收比特幣時,發送方和接收方的真實身份並不會直接暴露在交易記錄中,只有地址信息被記錄在區塊鏈上。而且,由於每個地址通常只使用一次,進一步增加了交易的隱私性,使得外界難以通過區塊鏈數據直接關聯到具體的用戶身份。
保護商業秘密:對於企業或商家來說,使用比特幣地址接收款項可以保護其商業秘密。交易對手無法通過交易記錄輕易了解到企業的財務狀況、交易規模等敏感信息,有助於維護企業的競爭優勢和商業利益。
超越比特幣#
- 交易不必僅僅是交易
- 交易可以包含:
- 可執行代碼
- 實際上,BTC 交易是腳本
- 腳本指定何時可以花費輸出–合約
- 設置允許輸出移動的條件–隨機數據以進行時間戳
私有鏈#
- 改變遊戲以要求簽名區塊
- 限制礦工為某些授權集
- 用於添加其他規則或防止區塊 “接管”
- 用於在區塊鏈上交易證券的方法
- 相同的加密物理學適用…
區塊鏈屬性#
交易#
・與當今企業交易一樣,區塊鏈是
歷史決策和行動的檔案。
・歷史證明提供來源。
不可變賬本#
- 區塊鏈通過交易來保存數據
- 與傳統數據庫的共性:和現有的數據庫一樣,區塊鏈也是一種數據存儲和管理的方式,它通過記錄交易來保存數據。交易是區塊鏈中數據的基本載體,每一筆交易都包含了特定的信息,如資產的轉移、合約的執行等。這些交易數據在區塊鏈中被有序地組織和存儲,形成了一個完整的數據集,類似於傳統數據庫中存儲的各種業務記錄。
- 區塊鏈數據寫入後的不可更改性
- 修改難度極大:一旦數據以區塊的形式被寫入區塊鏈,就變得極其難以更改。這是因為區塊鏈採用了鏈式結構,每個區塊都包含了前一個區塊的哈希值。哈希值是對區塊內所有數據進行哈希運算得到的一個固定長度的字符串,它具有唯一性和敏感性,只要區塊內的數據有任何微小的變化,哈希值就會完全不同。如果要修改某個區塊中的數據,就必須同時修改該區塊以及其後所有區塊的哈希值,因為後續區塊的哈希值是基於前面區塊的內容計算得到的。
- 需要達成共識:除了要重新計算大量的哈希值外,修改區塊鏈中的數據還需要得到網絡中大多數節點的共識。在區塊鏈網絡中,節點通過共識機制(如工作量證明、權益證明等)來驗證和確認區塊的合法性。如果要修改已有的區塊,就需要說服網絡中超過一定比例的節點接受這個修改,而這在一個去中心化的網絡中是非常困難的,因為節點之間往往是相互獨立且利益不同的,很難達成一致來修改已經確認的交易記錄。
- 交易的不可變性
- 交易記錄永久保存:“交易是不可變的,或不可磨滅的” 強調了區塊鏈交易的不可更改性和永久性。一旦一筆交易被記錄在區塊鏈上,它就成為了不可磨滅的歷史記錄,無法被篡改或刪除。這種特性保證了交易的真實性和可信度,使得區塊鏈在金融、供應鏈管理等領域具有重要的應用價值,因為它可以提供一個可靠的、可追溯的交易歷史。
- 區塊鏈是只讀和只寫的數據庫
- 讀寫特性:從數據庫的角度來看,區塊鏈可以被看作是一種只讀和只寫的數據庫。“只寫” 意味著新的交易數據可以不斷地被添加到區塊鏈上,而且一旦寫入就無法修改;“只讀” 表示用戶只能讀取區塊鏈上已經存在的交易記錄,而不能對其進行修改或刪除操作。這種特性與傳統數據庫有所不同,傳統數據庫通常允許對數據進行更新、刪除等操作,而區塊鏈的設計更側重於保證數據的安全性和不可篡改性。
- 處理錯誤的方式
- 類似帳本糾錯:就像用墨水書寫的帳本一樣,如果在區塊鏈上記錄的交易出現錯誤,不能直接擦除或修改原有的記錄。而是需要通過創建一個新的交易來糾正錯誤。例如,如果在一筆資產轉移交易中出現了金額錯誤,那麼可以通過發起一筆新的交易來調整資產的數量,使帳戶餘額恢復到正確的狀態。這種處理錯誤的方式保證了區塊鏈交易記錄的完整性和可追溯性,所有的操作都有跡可循。
去中心化的對等體#
加密過程#
標準加密實踐
- 一些區塊鏈允許 “BYOE”(自帶加密)
- 所有區塊都被加密
- 一些區塊鏈是公共的,一些是私有的
- 公共區塊鏈仍然是加密的,但對公眾可見,例如 https://www.blockchain.com/explorer
- 私有區塊鏈使用用戶權限來控制可見性,例如:
- 客戶 – 寫入和查看所有數據
- 審計員 – 查看所有交易
- 供應商 A – 寫入和查看合作夥伴 A 數據
- 供應商 B – 寫入和查看合作夥伴 B 數據
我們可以將哈希值視為一個實數,設置一個目標條,找出滿足小於條的哈希值。可以提高條來降低難度。
共識機制#
- 確保區塊鏈中的下一個區塊是唯一的真相版本
- 防止強大的對手破壞系統並成功分叉鏈
- 許多共識機制,各有利弊
工作量證明#
權益證明#
- 利益相關者將他們的硬幣投入 POS 機制
- 比工作量證明更快且對環境更友好
- 硬幣越多 -> 創建下一個區塊的機會越高
- 交易費用支付給創建區塊的礦工
經過時間的證明#
・每個節點生成一個隨機等待時間
・每個節點在嘗試提出新區塊之前,等待其隨機確定的時間段。
・等待時間結束後,等待最久的節點有資格提出下一個區塊。
・最公平的區塊鏈共識算法之一
智能合約#
- 計算機代碼
- 智能合約
- 在區塊提交之前提供業務邏輯層