揭開挖礦的神秘面紗

新手Jul 15, 2024
本文詳細介紹了區塊鏈中“挖礦”過程。通過將其類比於傳統的礦業活動,它解釋了數字挖礦的基本概念,這涉及使用計算資源來解決數學問題,用於交易驗證和新貨幣發行。
揭開挖礦的神秘面紗

轉發原標題‘白話區塊鏈三:揭開挖礦神秘的面紗——挖礦是什麼?為什麼要挖礦?誰是我們買不起顯卡的罪魁禍首?’

對於大多數人來說,與區塊鏈相關的最熟悉概念之一可能是挖礦。許多人可能已經聽過很多次挖礦,但不太確定它實際上包含了什麼。在本節中,我們將打斷我們的常規程序,首先介紹“挖礦”。

快速回顧來自「普通區塊鏈1:比特幣簡介(區塊鏈革命的先驅和主權貨幣的挑戰者)」的內容,其中中本聰設計了比特幣貨幣系統,將簿記的獎勵與貨幣發行聯繫起來。這種方法通過簿記過程實現貨幣發行的自動化,解決了貨幣發行問題,同時也鼓勵簿記者積極參與。

1. 什麼是挖礦?

在現實世界中,挖礦包括礦工使用各種工具從礦坑中挖掘出藏在岩石中的貴金屬。礦工通過體力勞動從大自然中藏匿的這些稀有金屬中提取價值。

對於具有記賬獎勵的區塊鏈項目(通常是數字貨幣項目),網絡節點耗費計算資源來解決問題。一旦他們找到解決方案,他們將區塊打包並以新發行的貨幣形式獲得獎勵。這個過程類似於從礦石中提取金等貴金屬,因此通常被稱為“挖礦”。在這裡,記賬者是礦工,他們競爭使用硬體和電力打包區塊,從而創造新的貨幣。

2. 為什麼挖礦是必要的?

挖礦有兩個主要目的:將最近的交易打包成區塊,並將它們連接到區塊鏈上進行驗證,以及通過獎勵簿記員發行新貨幣。以下是挖礦的詳細功能:

  1. 選書記的選擇:需要一種策略來從眾多候選人中選擇實際的書記。 挖礦結果被用作此選擇的基礎,確保每筆交易都得到所有參與者的認可,實現網絡範圍內的共識。
  2. 交易驗證:每筆比特幣交易都需要在網絡中由礦工進行驗證。該過程確認了交易的有效性,包括:
    • 確保交易格式和大小符合規格。
    • 驗證每筆交易簽名的有效性,以確保它是由擁有相關私鑰的用戶發起的。
    • 檢查輸入金額是否超過輸出金額(其中部分金額作為手續費),確保用於付款的代幣未被重複使用。
    • 確認該交易在以前的區塊中未被包含。
  3. 新貨幣的發行:挖礦也是比特幣進入流通的方式。當礦工成功挖掘出一個新區塊時,他們將獲得一定數量的比特幣作為獎勵。這種獎勵機制不僅激勵人們參與挖礦,還作為比特幣發行的一種方法。這種貨幣發行方式確保了貨幣流通的穩定和可控增加,有助於管理通脹。
  4. 鼓勵參與:獎勵機制激勵更多人參與維護貨幣系統,促進其持續和健壯的發展。
  5. 增強網絡安全和去中心化:從挖礦中獲得的獎勵導致了大量的礦工,進而形成了分散的計算能力。這種去中心化確保沒有任何單一實體能夠控制50%的計算能力,從而增強了系統的透明度和安全性。遵循最長鏈原則進一步提高了系統的安全性。

3. 為什麼礦工願意參與挖礦?

礦工參與挖礦是因為他們成功將區塊打包到區塊鏈上,因此獲得了豐厚的獎勵。這些獎勵來自兩個主要來源:

  • 區塊獎勵(新發行的貨幣):貨幣系統自動發行新貨幣,完全歸礦工所有。例如,在比特幣系統中,目前,礦工每打包一個區塊就會收到3.125個比特幣。鑒於每個比特幣的價值約為 65,000 美元,打包一個區塊可以產生超過 200,000 美元,約合 147 萬元人民幣。
  • 用戶支付的交易費用:由於區塊的容量有限,無法容納所有交易記錄,一些用戶支付交易費用來激勵礦工優先處理他們的交易,以加快確認速度。在從交易池中選擇要包含在區塊中的交易時,礦工傾向於選擇那些具有較高費用的交易。一個區塊可以包含數千筆交易,而這些交易的所有費用都歸礦工所有,代表另一個重要的收入來源。隨著越來越多人使用比特幣進行交易,競爭入塊的激烈程度不斷加劇,導致用戶願意支付的費用也越來越高。

隨著時間的推移,區塊獎勵將會減少(例如,比特幣的減半機制,每四年左右獎勵就會減半)。最終,在所有2100萬比特幣挖掘完畢後,預計在2141年左右,自動區塊獎勵將停止存在,交易手續費將成為礦工的主要收入來源。

技巧

比特幣大約每10分鐘生成一個新的區塊。最初,每個新區塊產生50比特幣的獎勵。這個獎勵每4年減半一次,到目前為止,已經有四次這樣的減半事件。目前,每個區塊產生3.125比特幣,最近的減半事件發生在2024年4月。預計下一次減半事件將在2028年左右發生。到2141年左右,比特幣將達到其發行上限。

交易費用不僅受供需影響,還受交易大小影響,因為費用與交易在區塊中佔用的空間成比例。

4. 如何參與挖礦

對於礦工來說,參與挖礦是很簡單的。下載一個數字貨幣錢包客戶端,在客戶端中點擊挖礦按鈕開始挖礦。

對於有區塊獎勵的區塊鏈項目,挖礦算法通常被寫入集成到錢包中的腳本中。礦工只需點擊一個按鈕即可啟動腳本。

挖礦算法是確定性的,這意味著只要礦工持續運行算法,他們最終會得到一個結果。然而,由於計算資源不同,不同礦工計算這個結果所需的時間可能不同。一旦節點計算出目標值,其他礦工在那段時間內的努力將變得徒勞,因為耗費的物理資源導致負面回報。

為了避免浪費努力,礦工們通常通過加入挖礦池節點來共享他們的計算資源。這個節點像其他節點一樣運作,但具有顯著更多的計算能力。當挖礦池成功挖掘出一個區塊時,獎勵會根據參與礦工的計算資源分配。需要注意的是,在區塊鏈上,打包該區塊的礦工是挖礦池節點,而個人礦工獲得的獎勵是由挖礦池分配的,而非直接來自貨幣系統。

生产专业高效挖掘芯片的公司比特大陆,已巩固了挖矿池的角色,有助于中央化记账权力的贡献。

5. 挖礦謎題的具體細節

不同的區塊鏈項目可能有不同的挖礦謎題和難度水平。在這裡,我們以比特幣為例。比特幣使用的挖礦算法被稱為工作量證明(PoW)。這個算法的本質是,要獲得一個結果,必須付出一定量的工作來證明它。

挖礦難題並非傳統的數學問題,而是涉及尋找一個稱為 nonce 的隨機數。這個 nonce 與區塊中的數據結合後,通過哈希函數處理,必須產生滿足特定條件的哈希值。通常,這個條件要求哈希值小於目標值(或者等價地,哈希值的前 n 位為零)。方程式如下:hash(nonce+block_data)≤target\text{hash}(\text{nonce} + \text{block_data}) \leq \text{target}hash(nonce+block_data)≤target

比特幣使用sha-256哈希函數,將任何長度的輸入轉換為256位的固定輸出(相當於64個十六進制數字或32字節)。輸出幾乎是隨機的,但對於相同的輸入保證是相同的。挖礦涉及不斷更改nonce,並使用sha-256對塊頭數據進行哈希,直到找到滿足目標條件的哈希值為止。

例如,帶有前30位為零的SHA-256哈希值:000000000000000000000000000000111111010000011011000100100110111011000110100010011011000110100010110110101010011101011010100100011011010001111101001111110101001101111101011110011100011110011110000111000100110000001011011010001110011100110010111010010010010001101010110010110000000000000000000000000000000111111010000011011000100100110111011000110100010011011000110100010110110101010011101011010100100011011010001111101001111110101001101111101011110011100011110011110000111000100110000001011011010001110011100110010111010010010010001101010110010110

將此轉換為十六進制,結果值以七個零開頭:00000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac9000000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac9000000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac90

簡單來說,找到一個哈希值,其前n位為0的概率為12n\frac{1}{2^n}2n1​。n越大,前綴0的位數越多,概率越低。

  • n = 10n = 10n = 10: 1 in 1,024
  • n=20n = 20n=20: 1 in 1,048,576
  • n=30n = 30n=30: 1 in 1,073,741,824
  • n = 40:1 在 1,099,511,627,776 中的機會
  • n=50n = 50n=50: 1 in 1,125,899,906,842,624

對於n最大為256的情況,以目前人類計算能力(不包括量子計算機)來找到這樣一個哈希值幾乎是不可能的,除非地球停止存在。

由於SHA-256的特性,唯一的方法是暴力攻擊,這涉及不斷嘗試不同的nonce直到條件滿足。這種對高性能計算設備的需求是採礦需要這樣的設備的原因。

因為您無法預測將nonce添加到區塊數據並通過sha-256運算所生成的哈希值,所以這個過程完全是隨機的。例如,如果目標哈希值為10,000,您無法知道哪個nonce與區塊數據相結合會產生小於10,000的哈希值。這種不可預測和隨機的特性意味著挖礦者必須不斷列舉可能性直到滿足條件。如果有多個值滿足條件,則選擇最小的哈希值,因為較小的哈希值表示更高的難度和更低的發生概率。

驗證生成的哈希值是否符合要求很容易,只需要一次比較操作。然而,找到小於或等於目標值的哈希值只能通過蠻力枚舉來實現。這種特徵,即驗證結果容易但找到結果困難,被稱為計算不對稱性。

6. 挖礦算法的代碼模擬

以下代碼模擬了挖礦過程。它以一個區塊頭數據字符串“geekbang”開始,從一個nonce值為10,000開始增量搜索,直到找到符合指定條件的nonce。

這裡有一個展示挖礦過程的Python腳本:

import hashlib
def main():
    base_string = "geekbang"
    nonce = 10000
    count = 0
    while true:
        target_string = base_string + str(nonce)
        pow_hash = hashlib.sha256(target_string.encode()).hexdigest()
        count += 1
        if pow_hash.startswith("0000"):  # first 4 hex digits are 0, equivalent to the first 16 bits being 0
            print("hash:", pow_hash)
            print("nonce:", nonce, "scan times:", count)
            break
        nonce += 1
if __name__ == '__main__':
    main()

當需求是哈希結果的前4個十六進制數字為零(相當於前16位為零)時,計算次數約為58,000。如果要求增加到前5位數為零,計算次數增加到1.23百萬。當需求是前7位數為零時,計算次數達到1.6億。這說明哈希前綴中每增加一個零,計算量大約增加16倍。

這裡是不同目標條件的結果:

前4位十六進位數為零(16位元):

import hashlib

def main():

base_string = “geekbang”nonce = 10000count = 0而 true: target_string = base_string + str(nonce) pow_hash = hashlib.sha256(target_string).hexdigest() count = count + 1 if pow_hash.startswith(“0000”): # 前4個16進位是0,相當於前16個比特位是0 列印 pow_hash 列印 “nonce: https://s3.ap-northeast-1.amazonaws.com/gimg.gateimg.com/learn/51d786353cf4ac886dbb869fc7abf883dac67ceb.png” 掃描次數: https://s3.ap-northeast-1.amazonaws.com/gimg.gateimg.com/learn/4ebdb22f10c27f8797a1c2ae7bbbd78f40220ed4.png“” %(隨機數,計數)中斷隨機數 = 隨機數 + 1

如果名字=='主要‘:

main()

正如所见,增加散列中所需的前导零的数量显著增加了所需的尝试次数,呈指数增长的趋势。这证明了挖礦的计算困难性和资源需求,强调了在挖礦过程中需要高性能计算设备的必要性。

7. 動態難度調整

為了確保每10分鐘產生一個區塊,比特幣系統通過改變散列值中所需的前導零的數量來調整挖礦難度。這種難度調整機制是比特幣系統的重要組成部分。它評估了生成最後2016個區塊所需的時間,這個時間理想上應該是大約兩周。如果這些區塊在兩周內挖出,難度會增加,即增加更多的前導零(降低目標值)。相反,如果花費的時間超過兩週,難度會降低,即減少前導零的數量(提高目標值)。這個機制確保了生成一個區塊的時間大約在10分鐘左右,即使網絡的總哈希率波動。

這個由比特幣的創造者中本聰設計的難度調整機制從一開始就計劃自動適應網絡的總計算能力。 它保持穩定的挖礦速度,防止貨幣過於快速發行,可能擾亂市場經濟。

8. 挖礦算法的執行過程

不同的區塊鏈項目可能有不同的挖礦算法。在這裡,我們描述了最著名的一個:比特幣挖礦算法。

比特幣底層挖礦算法的執行過程如下:

  1. 選擇交易:從記憶池中選擇多筆交易(通常優先考慮那些具有較高手續費的交易)。自動生成一筆特殊交易(通常稱為coinbase交易),其中接收者為礦工,交易金額為區塊獎勵加上所有選定交易的手續費。將這筆特殊交易置於所選交易的開頭,形成區塊打包的交易集合。
  2. 構建默克爾樹:從交易集合中構建默克爾哈希樹。默克爾樹是一棵二叉樹,其中每個葉節點存儲著一個交易的哈希值,為其獨特識別和索引。每個上層節點存儲其子節點的結合哈希值,最終匯聚於根節點。根節點為默克爾樹獨特識別,並且通過擴展,識別所有交易。
  3. 構建區塊標頭:從默克爾根值、一個 nonce、區塊版本、上一個區塊的哈希、時間戳、難度目標和 nonce 中組合區塊標頭。區塊標頭大小為 80 字節。
  4. 對區塊標頭進行哈希運算:不斷更改區塊標頭中的nonce值,並對區塊標頭內容執行雙重sha-256哈希運算(即sha256(sha256(block_header)))。將結果哈希與網絡的當前目標值進行比較。如果結果小於目標值(表示前n位為零),則謎題已解決,工作證明完成。
  5. 廣播區塊:將新挖掘的區塊發送到相鄰節點,通知它們區塊已成功挖掘。
  6. 驗證和傳播:當接收到新的區塊時,其他節點對區塊標頭進行雙重哈希以獲取區塊哈希。他們驗證區塊哈希的前n位是否為零,確認區塊,停止對此區塊的計算,並將其傳播到其相鄰節點。

區塊標頭中每個字段的大小如下:

https://time.geekbang.org/column/article/5963

alt="">

Merkle樹結構如下:

大后端私房菜]. alt="">

9. 挖礦中的爭議

挖礦所涉及的主要爭議涉及比特幣及其衍生品使用的工作量證明(PoW)算法。這些算法要求礦工投入大量的計算資源來解決網絡上達成一致的問題。許多人同時進行這些計算,但只有第一個解決問題的人獲得獎勵。其他參與者的計算和電力資源被浪費了,並沒有產生額外的價值。

優化這種資源浪費的兩個主要途徑:

  1. 切換到更少資源密集型的演算法:例如,以太坊已從工作量證明(PoW)演算法轉換為股權證明(PoS)演算法,大大減少資源浪費。
  2. 利用閒置的電力資源:挖礦節點正在嘗試使用可再生能源,如風能,進行挖礦操作。另一個重要的發展是利用原本浪費的天然氣。此外,一些機構正在探索回收比特幣挖礦產生的多餘熱能的方法。

10. 问题

挖礦的價值是什麼?這似乎是對資源的浪費和對社會毫無意義。

重新訪問本文中「挖礦為何必要?」一節,挖礦的直接意義是支持數字貨幣的發行。挖礦獎勵鼓勵更多人參與維護數字貨幣,使其更加穩定。此外,挖礦算法維護數字貨幣系統的交易一致性,使其更加強大,更不易受到內部和外部攻擊的影響。

挖礦的間接意義源於數字貨幣本身。數字貨幣創造了一個全球的、無需信任的貨幣系統,在無需中央機構的情況下進行安全交易,避免了中央集權的缺點。它們的全球特性還能實現高效和低成本的跨境交易。

挖礦回報會下降到低於成本,導致礦工停止挖礦和交易停止嗎?

挖礦回報完全依賴系統獎勵,而這些獎勵隨著時間的推移而減少,這是一個常見的問題。然而,挖礦還會從交易費中產生顯著的收入。隨著數字貨幣的普及,數字貨幣交易市場將會擴大。這增加的交易量將加劇區塊包含的競爭,推高用戶為了優先處理其交易而願意支付的費用。因此,礦工可以繼續賺取可觀的交易費,確保交易處理的持續性。

如果挖礦成本超過區塊鏈費用,是否可以繼續挖礦?

交易手續費是否能夠補償挖礦成本?

是的,交易费用可以帮助补偿挖矿的成本。随着区块奖励逐渐减少,交易费用成为矿工的重要收入来源。这确保即使电费很高,矿工仍然可以通过用户支付的交易处理费用来维持他们的运营。

如果多個礦工同時解決了這個謎題,會發生什麼情況?

多個礦工同時廣播新塊時,他們會分擔挖礦獎勵嗎?

不,如果多個礦工同時解決問題並廣播其新區塊,將在區塊鏈中創建一個暫時性分叉。這是它的運作方式:

  1. 暫時分叉:當一些節點接收到相同高度的兩個有效區塊時,它們暫時存儲兩個區塊,從而在區塊鏈中造成暫時的分叉。
  2. 解決分叉:隨著新區塊的挖礦,節點將繼續在最長的鏈上進行構建。網絡最終會收斂到單一的鏈上,丟棄較短的鏈。
  3. 選擇主鏈:節點會遵循最長的鏈(即具有最多累積工作證明的鏈)。最終在最長的鏈上的礦工將收到獎勵,而其他區塊則成為“孤立”區塊。

範例:

  • 礦工 A 和礦工 B 都在相同的高度挖掘一個區塊並廣播它。
  • 一些節點首先接收到礦工A的區塊,而其他節點則接收到礦工B的區塊。
  • 兩條鏈都是暫時存在的。
  • 當下一個區塊被挖掘出來時,如果它被添加到礦工A的鏈上,那麼該鏈將成為最長的鏈,節點將採用它作為主鏈。
  • 礦工A收到獎勵,礦工B的區塊被丟棄。

為什麼擁有50%以上哈希算力的節點不作弊?

什麼是 51% 攻擊,為什麼超級節點不作弊?

當單一實體或團體控制網絡超過50%的計算能力時,將發生51%攻擊。這就是為什麼超級節點通常不會作弊的原因:

  1. 實際上是不可能的:由於像比特幣這樣的主要加密貨幣規模巨大且分散,擁有總網絡算力的51%是非常不可能的。
  2. 網路驗證:即使超級節點試圖作弊,所有節點也會獨立驗證每個區塊。無效交易或雙花嘗試被網路拒絕,使超級節點的努力徒勞無功。
  3. 聲譽和經濟激勵: 超級節點從維護區塊鏈的完整性中獲益更多,而不是從攻擊它中獲益。成功的攻擊可能會貶值加密貨幣,損害攻擊者的投資。
  4. 攻擊類型:
    • 雙重支付:企圖兩次花費相同的錢幣。
    • 交易阻塞:阻止某些交易被包含在区块中。
    • 自私挖礦:試圖通過有選擇地披露區塊來獲得更多挖礦獎勵。
    • 時間戳記操作:更改區塊時間戳記以獲得挖礦優勢。
    • 空區塊攻擊:在沒有交易的情況下挖掘區塊以減慢網路速度。

為什麼區塊鏈假設沒有固定的簿記人員來防止欺詐交易

區塊鏈如何防止故意干擾和欺詐交易?

  1. 鄰近節點的驗證:當一個區塊被分發給鄰近節點時,這些節點將檢查區塊內的交易。如果他們發現任何無效的交易,他們將拒絕該區塊並不再傳播。
  2. 共識機制:比特幣的共識機制依賴於最長鏈的原理。所有網路節點都嘗試擴展最長的有效鏈。如果有人試圖更改歷史記錄(例如,刪除交易),他們必須修改連結到被篡改區塊的所有後續區塊,並確保修改後的鏈比當前主鏈長。這需要大量的計算資源,實際上是不可能的。

阻止礦工分發不一致的區塊

  1. 區塊分配的一致性:礦工無法在短時間內找到多個有效的隨機數值,從而阻止他們同時將不同的合法區塊分配給不同的節點。任何非法區塊都會被相鄰節點丟棄。

交易池(記憶池)是什麼?

定義和功能:在區塊鏈網絡中,所有尚未被納入區塊的廣播交易暫時存儲在網絡節點的內存池(mempool)中。礦工監視其內存池以選擇交易以構建新區塊。

交易選擇策略:礦工可以根據自己的策略從內存池中選擇交易。通常,他們會優先處理手續費較高的交易,但有些礦工也會考慮其他因素,比如交易的年齡(它在內存池中停留的時間)。

比特幣系統中的收入來源

參與者和他們的收入方式:除了用戶外,比特幣系統中的三個主要參與者是挖礦者、開發者和節點運營商。

  1. 挖礦者:通過挖礦獲取獎勵和交易手續費。
  2. 開發人員和節點運營商:通常不直接從比特幣系統中獲得收益。他們的貢獻往往是理想主義的,旨在維護系統的完整性。他們可能通過其他方式獲得收入,如捐贈和贊助。他們參與挖礦取決於個人偏好。

為什麼 GPU 價格上漲?為什麼挖礦 GPU 是不可取的?

GPU 價格上漲:礦工出於採礦目的對 GPU 的高需求導致供應短缺,導致價格上漲。

挖礦GPU:挖礦GPU是以前用於加密貨幣挖礦的GPU。這些GPU經歷了大量的計算,導致了顯著的磨損。由於性能下降,大多數人不願購買使用過的挖礦GPU。

礦工需要儲存完整的分散式帳本數據嗎?

完全冗餘存儲要求:是的,礦工需要存儲整個區塊鏈帳本,以驗證令牌之前是否被花費過,並確保帳本的安全性和完整性。然而,對於非常早期的區塊,礦工只需要存儲區塊頭,而不是完整的區塊內容。這有助於保持區塊鏈的效率,同時保持其安全性。

當比特幣的供應限制達到時會發生什麼?

21百萬比特幣之後就沒有自動獎勵:一旦比特幣的總供應量達到了2100萬的上限,系統將不再發行新的比特幣作為挖礦者的獎勵。如果用戶也不願意支付交易費用,理論上,交易系統可能面臨運營挑戰。然而,用戶可能會願意支付交易費用來處理他們的交易,確保系統的繼續運作。

區塊高度將繼續增加:即使在達到 2100 萬枚比特幣的最大供應後,只要礦工願意挖礦並將交易打包到新區塊中,區塊高度(區塊總數)將繼續增加。區塊高度不受比特幣供應上限的限制。

共識變更的潛力:社區可以提出共識規則的更改,例如增加比特幣的總供應量,以便按需生成新的幣種。

礦工如何獲得獎勵?

coinbase交易:在比特幣區塊鏈中,礦工獎勵通過一個特殊的交易進行分配,該交易被稱為“coinbase交易”或“區塊獎勵”。這筆交易具有獨特的特點:

  1. 無需廣播:coinbase交易是每個區塊中的第一筆交易,由挖礦演算法自動創建,無需廣播給其他節點。
  2. 沒有輸入:與常規比特幣交易不同,coinbase交易沒有輸入(沒有發件人)。它生成新的比特幣,獎勵給礦工。
  3. 輸出: coinbase交易將獎勵輸出到礦工的錢包地址,其中包括新鑄造的比特幣和包含在塊中的所有交易費用。

礦工收入是如何計算的?

每個區塊的收入計算:礦工的收入是在每個區塊成功挖掘並得到網絡共識機制確認時計算的。挖掘該區塊的礦工(或礦池)將獲得區塊獎勵和該區塊中所有交易的累計手續費。

獲得獎勵的過程:一旦礦工或礦池成功挖掘一個區塊並經由網路確認後,他們會獲得該區塊的獎勵和交易手續費。這是通過coinbase交易來執行的,該交易將手續費和獎勵轉換為未花費的交易輸出(UTXO),並記入礦工的帳戶。

塊是按順序創建的還是並行創建的?

順序創建:區塊在區塊鏈中按順序創建。只有在前一個區塊成功挖礦並添加到鏈中後,才能創建新的區塊。

打包交易

每個區塊多個交易:區塊通常包含多個交易。礦工包括盡可能多的交易,以最大化他們的交易費用收入,而不是單獨打包交易。

區塊空間的利用

部分填充的塊:大多數塊未充分利用。礦工一旦找到滿足難度要求的有效哈希值,就會開始處理下一個區塊,無論該區塊是否已滿。

不帶交易的挖礦

空塊:即使沒有交易可以包含,也可以挖掘區塊。這些稱為空塊的區塊仍然向礦工提供系統獎勵。

處理區塊鏈分叉

最長鏈規則:當出現分叉時,網絡將遵循具有最多累積工作量證明的鏈,通常是最長的鏈。一旦明確哪一條鏈的工作量更大,節點會切換到較長的鏈。

防止雙重花費

雙重花費解決:

  • 如果一個區塊包含衝突的交易(雙重支付),則只有第一個被包括在區塊中的有效交易被視為有效。其他衝突的交易將被丟棄。
  • 如果兩個衝突的交易包含在不同的區塊中,首先得到確認的區塊中的交易被認為是有效的。

詳細的雙重支付處理

驗證過程:

  • 區塊之間: 如果兩筆嘗試花費同一個硬幣的交易被包含在不同的區塊中,首先被確認的區塊中的交易將被視為有效。包含衝突交易的區塊將被拒絕。
  • 在同一個區塊內:如果同一個區塊中包含了兩筆衝突的交易,礦工將只包含其中一筆。礦工通常是根據交易手續費(較高手續費優先)或交易的時間(較早的交易優先)來做選擇。

用戶如何控制他們支付的交易費用?

交易手續費計算:用戶可以控制交易手續費以加快交易確認速度。手續費根據以下公式計算:

交易費用=總投入-總產出-變更

使用者透過調整輸入金額、輸出金額和找零金額來設定交易手續費。

數字貨幣挖礦過程

  1. 準備挖礦設備:配置挖礦硬件或高性能計算設備。
  2. 確保網絡連接:將挖礦設備連接到互聯網。
  3. 下載數字錢包:獲取一個數字錢包,並生成您的私鑰和公鑰。
  4. 開始挖礦:在錢包中點擊挖礦按鈕開始挖礦。

在矿池挖礦

收益分配:在矿池挖矿时,矿池节点接收区块奖励,然后根据其贡献的计算能力将收益分配给其成员。该分配通过向矿工的钱包进行转账来执行。

什麼是自私挖礦?

自私挖礦:自私挖礦是一種策略,其中一個礦工(或礦池)找到一個新的區塊,但不立即廣播。相反,他們繼續在他們的鏈(隱藏鏈)上私下挖礦。一旦他們找到其他區塊,他們一次性廣播所有區塊。這可能使其他礦工的工作無效,並將計算能力和獎勵傾向於自私挖礦者。比特幣可以通過改進廣播協議來減輕自私挖礦的影響。

接收交易和區塊時節點驗證

交易驗證:當一筆交易被廣播到節點時,它會經過幾個檢查來確定是否應該被添加到記憶池:

  1. 交易格式:驗證交易數據結構的正確性。
  2. 交易簽名:驗證交易簽名的真實性。
  3. 雙重支出:確保輸入之前沒有在記憶體池或區塊鏈中花費過。
  4. 輸入和輸出:確認總輸入金額大於或等於總輸出金額。
  5. 交易腳本: 執行和驗證腳本(主要用於智能合約)。
  6. 鎖定時間:檢查是否滿足鎖定時間條件(區塊高度或時間)。
  7. 交易規模和費用:確保交易規模和費用充足。

區塊驗證:當礦工節點收到一個新的區塊時,它會對該區塊及其交易進行廣泛的檢查:

  1. 交易有效性:驗證區塊中的每個交易(與交易驗證相同的檢查)。
  2. 區塊特定檢查:
    • 區塊大小:確保區塊大小在允許的範圍內。
    • 區塊獎勵:驗證區塊獎勵(新鑄造的比特幣和交易費用)是否正確。
    • 默克爾根:計算並驗證區塊的默克爾根。
    • 時間戳:確認區塊的時間戳在合理範圍內。
    • 難度目標:檢查該區塊是否符合當前的難度目標。

11. 參考資料

[1] 課程12 | 深入挖礦技術(4):pow 共識-區塊鏈深度解析-geek 時間:免責聲明:

  1. 這篇文章是轉載自[Gate.io 學習團隊將迅速處理。
  2. 免責聲明:本文中表達的觀點和意見僅代表作者的觀點和意見,不構成任何投資建議。
  3. 將文章翻譯成其他語言的工作由Gate.io的學習團隊完成。除非另有說明,禁止複製、分發或抄襲已翻譯的文章。

揭開挖礦的神秘面紗

新手Jul 15, 2024
本文詳細介紹了區塊鏈中“挖礦”過程。通過將其類比於傳統的礦業活動,它解釋了數字挖礦的基本概念,這涉及使用計算資源來解決數學問題,用於交易驗證和新貨幣發行。
揭開挖礦的神秘面紗

轉發原標題‘白話區塊鏈三:揭開挖礦神秘的面紗——挖礦是什麼?為什麼要挖礦?誰是我們買不起顯卡的罪魁禍首?’

對於大多數人來說,與區塊鏈相關的最熟悉概念之一可能是挖礦。許多人可能已經聽過很多次挖礦,但不太確定它實際上包含了什麼。在本節中,我們將打斷我們的常規程序,首先介紹“挖礦”。

快速回顧來自「普通區塊鏈1:比特幣簡介(區塊鏈革命的先驅和主權貨幣的挑戰者)」的內容,其中中本聰設計了比特幣貨幣系統,將簿記的獎勵與貨幣發行聯繫起來。這種方法通過簿記過程實現貨幣發行的自動化,解決了貨幣發行問題,同時也鼓勵簿記者積極參與。

1. 什麼是挖礦?

在現實世界中,挖礦包括礦工使用各種工具從礦坑中挖掘出藏在岩石中的貴金屬。礦工通過體力勞動從大自然中藏匿的這些稀有金屬中提取價值。

對於具有記賬獎勵的區塊鏈項目(通常是數字貨幣項目),網絡節點耗費計算資源來解決問題。一旦他們找到解決方案,他們將區塊打包並以新發行的貨幣形式獲得獎勵。這個過程類似於從礦石中提取金等貴金屬,因此通常被稱為“挖礦”。在這裡,記賬者是礦工,他們競爭使用硬體和電力打包區塊,從而創造新的貨幣。

2. 為什麼挖礦是必要的?

挖礦有兩個主要目的:將最近的交易打包成區塊,並將它們連接到區塊鏈上進行驗證,以及通過獎勵簿記員發行新貨幣。以下是挖礦的詳細功能:

  1. 選書記的選擇:需要一種策略來從眾多候選人中選擇實際的書記。 挖礦結果被用作此選擇的基礎,確保每筆交易都得到所有參與者的認可,實現網絡範圍內的共識。
  2. 交易驗證:每筆比特幣交易都需要在網絡中由礦工進行驗證。該過程確認了交易的有效性,包括:
    • 確保交易格式和大小符合規格。
    • 驗證每筆交易簽名的有效性,以確保它是由擁有相關私鑰的用戶發起的。
    • 檢查輸入金額是否超過輸出金額(其中部分金額作為手續費),確保用於付款的代幣未被重複使用。
    • 確認該交易在以前的區塊中未被包含。
  3. 新貨幣的發行:挖礦也是比特幣進入流通的方式。當礦工成功挖掘出一個新區塊時,他們將獲得一定數量的比特幣作為獎勵。這種獎勵機制不僅激勵人們參與挖礦,還作為比特幣發行的一種方法。這種貨幣發行方式確保了貨幣流通的穩定和可控增加,有助於管理通脹。
  4. 鼓勵參與:獎勵機制激勵更多人參與維護貨幣系統,促進其持續和健壯的發展。
  5. 增強網絡安全和去中心化:從挖礦中獲得的獎勵導致了大量的礦工,進而形成了分散的計算能力。這種去中心化確保沒有任何單一實體能夠控制50%的計算能力,從而增強了系統的透明度和安全性。遵循最長鏈原則進一步提高了系統的安全性。

3. 為什麼礦工願意參與挖礦?

礦工參與挖礦是因為他們成功將區塊打包到區塊鏈上,因此獲得了豐厚的獎勵。這些獎勵來自兩個主要來源:

  • 區塊獎勵(新發行的貨幣):貨幣系統自動發行新貨幣,完全歸礦工所有。例如,在比特幣系統中,目前,礦工每打包一個區塊就會收到3.125個比特幣。鑒於每個比特幣的價值約為 65,000 美元,打包一個區塊可以產生超過 200,000 美元,約合 147 萬元人民幣。
  • 用戶支付的交易費用:由於區塊的容量有限,無法容納所有交易記錄,一些用戶支付交易費用來激勵礦工優先處理他們的交易,以加快確認速度。在從交易池中選擇要包含在區塊中的交易時,礦工傾向於選擇那些具有較高費用的交易。一個區塊可以包含數千筆交易,而這些交易的所有費用都歸礦工所有,代表另一個重要的收入來源。隨著越來越多人使用比特幣進行交易,競爭入塊的激烈程度不斷加劇,導致用戶願意支付的費用也越來越高。

隨著時間的推移,區塊獎勵將會減少(例如,比特幣的減半機制,每四年左右獎勵就會減半)。最終,在所有2100萬比特幣挖掘完畢後,預計在2141年左右,自動區塊獎勵將停止存在,交易手續費將成為礦工的主要收入來源。

技巧

比特幣大約每10分鐘生成一個新的區塊。最初,每個新區塊產生50比特幣的獎勵。這個獎勵每4年減半一次,到目前為止,已經有四次這樣的減半事件。目前,每個區塊產生3.125比特幣,最近的減半事件發生在2024年4月。預計下一次減半事件將在2028年左右發生。到2141年左右,比特幣將達到其發行上限。

交易費用不僅受供需影響,還受交易大小影響,因為費用與交易在區塊中佔用的空間成比例。

4. 如何參與挖礦

對於礦工來說,參與挖礦是很簡單的。下載一個數字貨幣錢包客戶端,在客戶端中點擊挖礦按鈕開始挖礦。

對於有區塊獎勵的區塊鏈項目,挖礦算法通常被寫入集成到錢包中的腳本中。礦工只需點擊一個按鈕即可啟動腳本。

挖礦算法是確定性的,這意味著只要礦工持續運行算法,他們最終會得到一個結果。然而,由於計算資源不同,不同礦工計算這個結果所需的時間可能不同。一旦節點計算出目標值,其他礦工在那段時間內的努力將變得徒勞,因為耗費的物理資源導致負面回報。

為了避免浪費努力,礦工們通常通過加入挖礦池節點來共享他們的計算資源。這個節點像其他節點一樣運作,但具有顯著更多的計算能力。當挖礦池成功挖掘出一個區塊時,獎勵會根據參與礦工的計算資源分配。需要注意的是,在區塊鏈上,打包該區塊的礦工是挖礦池節點,而個人礦工獲得的獎勵是由挖礦池分配的,而非直接來自貨幣系統。

生产专业高效挖掘芯片的公司比特大陆,已巩固了挖矿池的角色,有助于中央化记账权力的贡献。

5. 挖礦謎題的具體細節

不同的區塊鏈項目可能有不同的挖礦謎題和難度水平。在這裡,我們以比特幣為例。比特幣使用的挖礦算法被稱為工作量證明(PoW)。這個算法的本質是,要獲得一個結果,必須付出一定量的工作來證明它。

挖礦難題並非傳統的數學問題,而是涉及尋找一個稱為 nonce 的隨機數。這個 nonce 與區塊中的數據結合後,通過哈希函數處理,必須產生滿足特定條件的哈希值。通常,這個條件要求哈希值小於目標值(或者等價地,哈希值的前 n 位為零)。方程式如下:hash(nonce+block_data)≤target\text{hash}(\text{nonce} + \text{block_data}) \leq \text{target}hash(nonce+block_data)≤target

比特幣使用sha-256哈希函數,將任何長度的輸入轉換為256位的固定輸出(相當於64個十六進制數字或32字節)。輸出幾乎是隨機的,但對於相同的輸入保證是相同的。挖礦涉及不斷更改nonce,並使用sha-256對塊頭數據進行哈希,直到找到滿足目標條件的哈希值為止。

例如,帶有前30位為零的SHA-256哈希值:000000000000000000000000000000111111010000011011000100100110111011000110100010011011000110100010110110101010011101011010100100011011010001111101001111110101001101111101011110011100011110011110000111000100110000001011011010001110011100110010111010010010010001101010110010110000000000000000000000000000000111111010000011011000100100110111011000110100010011011000110100010110110101010011101011010100100011011010001111101001111110101001101111101011110011100011110011110000111000100110000001011011010001110011100110010111010010010010001101010110010110

將此轉換為十六進制,結果值以七個零開頭:00000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac9000000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac9000000003f41b126ec689b1a2da9d5d46d13d0fd1bece47983d59c5d32eb4ac90

簡單來說,找到一個哈希值,其前n位為0的概率為12n\frac{1}{2^n}2n1​。n越大,前綴0的位數越多,概率越低。

  • n = 10n = 10n = 10: 1 in 1,024
  • n=20n = 20n=20: 1 in 1,048,576
  • n=30n = 30n=30: 1 in 1,073,741,824
  • n = 40:1 在 1,099,511,627,776 中的機會
  • n=50n = 50n=50: 1 in 1,125,899,906,842,624

對於n最大為256的情況,以目前人類計算能力(不包括量子計算機)來找到這樣一個哈希值幾乎是不可能的,除非地球停止存在。

由於SHA-256的特性,唯一的方法是暴力攻擊,這涉及不斷嘗試不同的nonce直到條件滿足。這種對高性能計算設備的需求是採礦需要這樣的設備的原因。

因為您無法預測將nonce添加到區塊數據並通過sha-256運算所生成的哈希值,所以這個過程完全是隨機的。例如,如果目標哈希值為10,000,您無法知道哪個nonce與區塊數據相結合會產生小於10,000的哈希值。這種不可預測和隨機的特性意味著挖礦者必須不斷列舉可能性直到滿足條件。如果有多個值滿足條件,則選擇最小的哈希值,因為較小的哈希值表示更高的難度和更低的發生概率。

驗證生成的哈希值是否符合要求很容易,只需要一次比較操作。然而,找到小於或等於目標值的哈希值只能通過蠻力枚舉來實現。這種特徵,即驗證結果容易但找到結果困難,被稱為計算不對稱性。

6. 挖礦算法的代碼模擬

以下代碼模擬了挖礦過程。它以一個區塊頭數據字符串“geekbang”開始,從一個nonce值為10,000開始增量搜索,直到找到符合指定條件的nonce。

這裡有一個展示挖礦過程的Python腳本:

import hashlib
def main():
    base_string = "geekbang"
    nonce = 10000
    count = 0
    while true:
        target_string = base_string + str(nonce)
        pow_hash = hashlib.sha256(target_string.encode()).hexdigest()
        count += 1
        if pow_hash.startswith("0000"):  # first 4 hex digits are 0, equivalent to the first 16 bits being 0
            print("hash:", pow_hash)
            print("nonce:", nonce, "scan times:", count)
            break
        nonce += 1
if __name__ == '__main__':
    main()

當需求是哈希結果的前4個十六進制數字為零(相當於前16位為零)時,計算次數約為58,000。如果要求增加到前5位數為零,計算次數增加到1.23百萬。當需求是前7位數為零時,計算次數達到1.6億。這說明哈希前綴中每增加一個零,計算量大約增加16倍。

這裡是不同目標條件的結果:

前4位十六進位數為零(16位元):

import hashlib

def main():

base_string = “geekbang”nonce = 10000count = 0而 true: target_string = base_string + str(nonce) pow_hash = hashlib.sha256(target_string).hexdigest() count = count + 1 if pow_hash.startswith(“0000”): # 前4個16進位是0,相當於前16個比特位是0 列印 pow_hash 列印 “nonce: https://s3.ap-northeast-1.amazonaws.com/gimg.gateimg.com/learn/51d786353cf4ac886dbb869fc7abf883dac67ceb.png” 掃描次數: https://s3.ap-northeast-1.amazonaws.com/gimg.gateimg.com/learn/4ebdb22f10c27f8797a1c2ae7bbbd78f40220ed4.png“” %(隨機數,計數)中斷隨機數 = 隨機數 + 1

如果名字=='主要‘:

main()

正如所见,增加散列中所需的前导零的数量显著增加了所需的尝试次数,呈指数增长的趋势。这证明了挖礦的计算困难性和资源需求,强调了在挖礦过程中需要高性能计算设备的必要性。

7. 動態難度調整

為了確保每10分鐘產生一個區塊,比特幣系統通過改變散列值中所需的前導零的數量來調整挖礦難度。這種難度調整機制是比特幣系統的重要組成部分。它評估了生成最後2016個區塊所需的時間,這個時間理想上應該是大約兩周。如果這些區塊在兩周內挖出,難度會增加,即增加更多的前導零(降低目標值)。相反,如果花費的時間超過兩週,難度會降低,即減少前導零的數量(提高目標值)。這個機制確保了生成一個區塊的時間大約在10分鐘左右,即使網絡的總哈希率波動。

這個由比特幣的創造者中本聰設計的難度調整機制從一開始就計劃自動適應網絡的總計算能力。 它保持穩定的挖礦速度,防止貨幣過於快速發行,可能擾亂市場經濟。

8. 挖礦算法的執行過程

不同的區塊鏈項目可能有不同的挖礦算法。在這裡,我們描述了最著名的一個:比特幣挖礦算法。

比特幣底層挖礦算法的執行過程如下:

  1. 選擇交易:從記憶池中選擇多筆交易(通常優先考慮那些具有較高手續費的交易)。自動生成一筆特殊交易(通常稱為coinbase交易),其中接收者為礦工,交易金額為區塊獎勵加上所有選定交易的手續費。將這筆特殊交易置於所選交易的開頭,形成區塊打包的交易集合。
  2. 構建默克爾樹:從交易集合中構建默克爾哈希樹。默克爾樹是一棵二叉樹,其中每個葉節點存儲著一個交易的哈希值,為其獨特識別和索引。每個上層節點存儲其子節點的結合哈希值,最終匯聚於根節點。根節點為默克爾樹獨特識別,並且通過擴展,識別所有交易。
  3. 構建區塊標頭:從默克爾根值、一個 nonce、區塊版本、上一個區塊的哈希、時間戳、難度目標和 nonce 中組合區塊標頭。區塊標頭大小為 80 字節。
  4. 對區塊標頭進行哈希運算:不斷更改區塊標頭中的nonce值,並對區塊標頭內容執行雙重sha-256哈希運算(即sha256(sha256(block_header)))。將結果哈希與網絡的當前目標值進行比較。如果結果小於目標值(表示前n位為零),則謎題已解決,工作證明完成。
  5. 廣播區塊:將新挖掘的區塊發送到相鄰節點,通知它們區塊已成功挖掘。
  6. 驗證和傳播:當接收到新的區塊時,其他節點對區塊標頭進行雙重哈希以獲取區塊哈希。他們驗證區塊哈希的前n位是否為零,確認區塊,停止對此區塊的計算,並將其傳播到其相鄰節點。

區塊標頭中每個字段的大小如下:

https://time.geekbang.org/column/article/5963

alt="">

Merkle樹結構如下:

大后端私房菜]. alt="">

9. 挖礦中的爭議

挖礦所涉及的主要爭議涉及比特幣及其衍生品使用的工作量證明(PoW)算法。這些算法要求礦工投入大量的計算資源來解決網絡上達成一致的問題。許多人同時進行這些計算,但只有第一個解決問題的人獲得獎勵。其他參與者的計算和電力資源被浪費了,並沒有產生額外的價值。

優化這種資源浪費的兩個主要途徑:

  1. 切換到更少資源密集型的演算法:例如,以太坊已從工作量證明(PoW)演算法轉換為股權證明(PoS)演算法,大大減少資源浪費。
  2. 利用閒置的電力資源:挖礦節點正在嘗試使用可再生能源,如風能,進行挖礦操作。另一個重要的發展是利用原本浪費的天然氣。此外,一些機構正在探索回收比特幣挖礦產生的多餘熱能的方法。

10. 问题

挖礦的價值是什麼?這似乎是對資源的浪費和對社會毫無意義。

重新訪問本文中「挖礦為何必要?」一節,挖礦的直接意義是支持數字貨幣的發行。挖礦獎勵鼓勵更多人參與維護數字貨幣,使其更加穩定。此外,挖礦算法維護數字貨幣系統的交易一致性,使其更加強大,更不易受到內部和外部攻擊的影響。

挖礦的間接意義源於數字貨幣本身。數字貨幣創造了一個全球的、無需信任的貨幣系統,在無需中央機構的情況下進行安全交易,避免了中央集權的缺點。它們的全球特性還能實現高效和低成本的跨境交易。

挖礦回報會下降到低於成本,導致礦工停止挖礦和交易停止嗎?

挖礦回報完全依賴系統獎勵,而這些獎勵隨著時間的推移而減少,這是一個常見的問題。然而,挖礦還會從交易費中產生顯著的收入。隨著數字貨幣的普及,數字貨幣交易市場將會擴大。這增加的交易量將加劇區塊包含的競爭,推高用戶為了優先處理其交易而願意支付的費用。因此,礦工可以繼續賺取可觀的交易費,確保交易處理的持續性。

如果挖礦成本超過區塊鏈費用,是否可以繼續挖礦?

交易手續費是否能夠補償挖礦成本?

是的,交易费用可以帮助补偿挖矿的成本。随着区块奖励逐渐减少,交易费用成为矿工的重要收入来源。这确保即使电费很高,矿工仍然可以通过用户支付的交易处理费用来维持他们的运营。

如果多個礦工同時解決了這個謎題,會發生什麼情況?

多個礦工同時廣播新塊時,他們會分擔挖礦獎勵嗎?

不,如果多個礦工同時解決問題並廣播其新區塊,將在區塊鏈中創建一個暫時性分叉。這是它的運作方式:

  1. 暫時分叉:當一些節點接收到相同高度的兩個有效區塊時,它們暫時存儲兩個區塊,從而在區塊鏈中造成暫時的分叉。
  2. 解決分叉:隨著新區塊的挖礦,節點將繼續在最長的鏈上進行構建。網絡最終會收斂到單一的鏈上,丟棄較短的鏈。
  3. 選擇主鏈:節點會遵循最長的鏈(即具有最多累積工作證明的鏈)。最終在最長的鏈上的礦工將收到獎勵,而其他區塊則成為“孤立”區塊。

範例:

  • 礦工 A 和礦工 B 都在相同的高度挖掘一個區塊並廣播它。
  • 一些節點首先接收到礦工A的區塊,而其他節點則接收到礦工B的區塊。
  • 兩條鏈都是暫時存在的。
  • 當下一個區塊被挖掘出來時,如果它被添加到礦工A的鏈上,那麼該鏈將成為最長的鏈,節點將採用它作為主鏈。
  • 礦工A收到獎勵,礦工B的區塊被丟棄。

為什麼擁有50%以上哈希算力的節點不作弊?

什麼是 51% 攻擊,為什麼超級節點不作弊?

當單一實體或團體控制網絡超過50%的計算能力時,將發生51%攻擊。這就是為什麼超級節點通常不會作弊的原因:

  1. 實際上是不可能的:由於像比特幣這樣的主要加密貨幣規模巨大且分散,擁有總網絡算力的51%是非常不可能的。
  2. 網路驗證:即使超級節點試圖作弊,所有節點也會獨立驗證每個區塊。無效交易或雙花嘗試被網路拒絕,使超級節點的努力徒勞無功。
  3. 聲譽和經濟激勵: 超級節點從維護區塊鏈的完整性中獲益更多,而不是從攻擊它中獲益。成功的攻擊可能會貶值加密貨幣,損害攻擊者的投資。
  4. 攻擊類型:
    • 雙重支付:企圖兩次花費相同的錢幣。
    • 交易阻塞:阻止某些交易被包含在区块中。
    • 自私挖礦:試圖通過有選擇地披露區塊來獲得更多挖礦獎勵。
    • 時間戳記操作:更改區塊時間戳記以獲得挖礦優勢。
    • 空區塊攻擊:在沒有交易的情況下挖掘區塊以減慢網路速度。

為什麼區塊鏈假設沒有固定的簿記人員來防止欺詐交易

區塊鏈如何防止故意干擾和欺詐交易?

  1. 鄰近節點的驗證:當一個區塊被分發給鄰近節點時,這些節點將檢查區塊內的交易。如果他們發現任何無效的交易,他們將拒絕該區塊並不再傳播。
  2. 共識機制:比特幣的共識機制依賴於最長鏈的原理。所有網路節點都嘗試擴展最長的有效鏈。如果有人試圖更改歷史記錄(例如,刪除交易),他們必須修改連結到被篡改區塊的所有後續區塊,並確保修改後的鏈比當前主鏈長。這需要大量的計算資源,實際上是不可能的。

阻止礦工分發不一致的區塊

  1. 區塊分配的一致性:礦工無法在短時間內找到多個有效的隨機數值,從而阻止他們同時將不同的合法區塊分配給不同的節點。任何非法區塊都會被相鄰節點丟棄。

交易池(記憶池)是什麼?

定義和功能:在區塊鏈網絡中,所有尚未被納入區塊的廣播交易暫時存儲在網絡節點的內存池(mempool)中。礦工監視其內存池以選擇交易以構建新區塊。

交易選擇策略:礦工可以根據自己的策略從內存池中選擇交易。通常,他們會優先處理手續費較高的交易,但有些礦工也會考慮其他因素,比如交易的年齡(它在內存池中停留的時間)。

比特幣系統中的收入來源

參與者和他們的收入方式:除了用戶外,比特幣系統中的三個主要參與者是挖礦者、開發者和節點運營商。

  1. 挖礦者:通過挖礦獲取獎勵和交易手續費。
  2. 開發人員和節點運營商:通常不直接從比特幣系統中獲得收益。他們的貢獻往往是理想主義的,旨在維護系統的完整性。他們可能通過其他方式獲得收入,如捐贈和贊助。他們參與挖礦取決於個人偏好。

為什麼 GPU 價格上漲?為什麼挖礦 GPU 是不可取的?

GPU 價格上漲:礦工出於採礦目的對 GPU 的高需求導致供應短缺,導致價格上漲。

挖礦GPU:挖礦GPU是以前用於加密貨幣挖礦的GPU。這些GPU經歷了大量的計算,導致了顯著的磨損。由於性能下降,大多數人不願購買使用過的挖礦GPU。

礦工需要儲存完整的分散式帳本數據嗎?

完全冗餘存儲要求:是的,礦工需要存儲整個區塊鏈帳本,以驗證令牌之前是否被花費過,並確保帳本的安全性和完整性。然而,對於非常早期的區塊,礦工只需要存儲區塊頭,而不是完整的區塊內容。這有助於保持區塊鏈的效率,同時保持其安全性。

當比特幣的供應限制達到時會發生什麼?

21百萬比特幣之後就沒有自動獎勵:一旦比特幣的總供應量達到了2100萬的上限,系統將不再發行新的比特幣作為挖礦者的獎勵。如果用戶也不願意支付交易費用,理論上,交易系統可能面臨運營挑戰。然而,用戶可能會願意支付交易費用來處理他們的交易,確保系統的繼續運作。

區塊高度將繼續增加:即使在達到 2100 萬枚比特幣的最大供應後,只要礦工願意挖礦並將交易打包到新區塊中,區塊高度(區塊總數)將繼續增加。區塊高度不受比特幣供應上限的限制。

共識變更的潛力:社區可以提出共識規則的更改,例如增加比特幣的總供應量,以便按需生成新的幣種。

礦工如何獲得獎勵?

coinbase交易:在比特幣區塊鏈中,礦工獎勵通過一個特殊的交易進行分配,該交易被稱為“coinbase交易”或“區塊獎勵”。這筆交易具有獨特的特點:

  1. 無需廣播:coinbase交易是每個區塊中的第一筆交易,由挖礦演算法自動創建,無需廣播給其他節點。
  2. 沒有輸入:與常規比特幣交易不同,coinbase交易沒有輸入(沒有發件人)。它生成新的比特幣,獎勵給礦工。
  3. 輸出: coinbase交易將獎勵輸出到礦工的錢包地址,其中包括新鑄造的比特幣和包含在塊中的所有交易費用。

礦工收入是如何計算的?

每個區塊的收入計算:礦工的收入是在每個區塊成功挖掘並得到網絡共識機制確認時計算的。挖掘該區塊的礦工(或礦池)將獲得區塊獎勵和該區塊中所有交易的累計手續費。

獲得獎勵的過程:一旦礦工或礦池成功挖掘一個區塊並經由網路確認後,他們會獲得該區塊的獎勵和交易手續費。這是通過coinbase交易來執行的,該交易將手續費和獎勵轉換為未花費的交易輸出(UTXO),並記入礦工的帳戶。

塊是按順序創建的還是並行創建的?

順序創建:區塊在區塊鏈中按順序創建。只有在前一個區塊成功挖礦並添加到鏈中後,才能創建新的區塊。

打包交易

每個區塊多個交易:區塊通常包含多個交易。礦工包括盡可能多的交易,以最大化他們的交易費用收入,而不是單獨打包交易。

區塊空間的利用

部分填充的塊:大多數塊未充分利用。礦工一旦找到滿足難度要求的有效哈希值,就會開始處理下一個區塊,無論該區塊是否已滿。

不帶交易的挖礦

空塊:即使沒有交易可以包含,也可以挖掘區塊。這些稱為空塊的區塊仍然向礦工提供系統獎勵。

處理區塊鏈分叉

最長鏈規則:當出現分叉時,網絡將遵循具有最多累積工作量證明的鏈,通常是最長的鏈。一旦明確哪一條鏈的工作量更大,節點會切換到較長的鏈。

防止雙重花費

雙重花費解決:

  • 如果一個區塊包含衝突的交易(雙重支付),則只有第一個被包括在區塊中的有效交易被視為有效。其他衝突的交易將被丟棄。
  • 如果兩個衝突的交易包含在不同的區塊中,首先得到確認的區塊中的交易被認為是有效的。

詳細的雙重支付處理

驗證過程:

  • 區塊之間: 如果兩筆嘗試花費同一個硬幣的交易被包含在不同的區塊中,首先被確認的區塊中的交易將被視為有效。包含衝突交易的區塊將被拒絕。
  • 在同一個區塊內:如果同一個區塊中包含了兩筆衝突的交易,礦工將只包含其中一筆。礦工通常是根據交易手續費(較高手續費優先)或交易的時間(較早的交易優先)來做選擇。

用戶如何控制他們支付的交易費用?

交易手續費計算:用戶可以控制交易手續費以加快交易確認速度。手續費根據以下公式計算:

交易費用=總投入-總產出-變更

使用者透過調整輸入金額、輸出金額和找零金額來設定交易手續費。

數字貨幣挖礦過程

  1. 準備挖礦設備:配置挖礦硬件或高性能計算設備。
  2. 確保網絡連接:將挖礦設備連接到互聯網。
  3. 下載數字錢包:獲取一個數字錢包,並生成您的私鑰和公鑰。
  4. 開始挖礦:在錢包中點擊挖礦按鈕開始挖礦。

在矿池挖礦

收益分配:在矿池挖矿时,矿池节点接收区块奖励,然后根据其贡献的计算能力将收益分配给其成员。该分配通过向矿工的钱包进行转账来执行。

什麼是自私挖礦?

自私挖礦:自私挖礦是一種策略,其中一個礦工(或礦池)找到一個新的區塊,但不立即廣播。相反,他們繼續在他們的鏈(隱藏鏈)上私下挖礦。一旦他們找到其他區塊,他們一次性廣播所有區塊。這可能使其他礦工的工作無效,並將計算能力和獎勵傾向於自私挖礦者。比特幣可以通過改進廣播協議來減輕自私挖礦的影響。

接收交易和區塊時節點驗證

交易驗證:當一筆交易被廣播到節點時,它會經過幾個檢查來確定是否應該被添加到記憶池:

  1. 交易格式:驗證交易數據結構的正確性。
  2. 交易簽名:驗證交易簽名的真實性。
  3. 雙重支出:確保輸入之前沒有在記憶體池或區塊鏈中花費過。
  4. 輸入和輸出:確認總輸入金額大於或等於總輸出金額。
  5. 交易腳本: 執行和驗證腳本(主要用於智能合約)。
  6. 鎖定時間:檢查是否滿足鎖定時間條件(區塊高度或時間)。
  7. 交易規模和費用:確保交易規模和費用充足。

區塊驗證:當礦工節點收到一個新的區塊時,它會對該區塊及其交易進行廣泛的檢查:

  1. 交易有效性:驗證區塊中的每個交易(與交易驗證相同的檢查)。
  2. 區塊特定檢查:
    • 區塊大小:確保區塊大小在允許的範圍內。
    • 區塊獎勵:驗證區塊獎勵(新鑄造的比特幣和交易費用)是否正確。
    • 默克爾根:計算並驗證區塊的默克爾根。
    • 時間戳:確認區塊的時間戳在合理範圍內。
    • 難度目標:檢查該區塊是否符合當前的難度目標。

11. 參考資料

[1] 課程12 | 深入挖礦技術(4):pow 共識-區塊鏈深度解析-geek 時間:免責聲明:

  1. 這篇文章是轉載自[Gate.io 學習團隊將迅速處理。
  2. 免責聲明:本文中表達的觀點和意見僅代表作者的觀點和意見,不構成任何投資建議。
  3. 將文章翻譯成其他語言的工作由Gate.io的學習團隊完成。除非另有說明,禁止複製、分發或抄襲已翻譯的文章。
即刻開始交易
註冊並交易即可獲得
$100
和價值
$5500
理財體驗金獎勵!