轉發原標題‘白話區塊鏈三:揭開挖礦神秘的面紗——挖礦是什麼?為什麼要挖礦?誰是我們買不起顯卡的罪魁禍首?’
對於大多數人來說,與區塊鏈相關的最熟悉概念之一可能是挖礦。許多人可能已經聽過很多次挖礦,但不太確定它實際上包含了什麼。在本節中,我們將打斷我們的常規程序,首先介紹“挖礦”。
快速回顧來自「普通區塊鏈1:比特幣簡介(區塊鏈革命的先驅和主權貨幣的挑戰者)」的內容,其中中本聰設計了比特幣貨幣系統,將簿記的獎勵與貨幣發行聯繫起來。這種方法通過簿記過程實現貨幣發行的自動化,解決了貨幣發行問題,同時也鼓勵簿記者積極參與。
在現實世界中,挖礦包括礦工使用各種工具從礦坑中挖掘出藏在岩石中的貴金屬。礦工通過體力勞動從大自然中藏匿的這些稀有金屬中提取價值。
對於具有記賬獎勵的區塊鏈項目(通常是數字貨幣項目),網絡節點耗費計算資源來解決問題。一旦他們找到解決方案,他們將區塊打包並以新發行的貨幣形式獲得獎勵。這個過程類似於從礦石中提取金等貴金屬,因此通常被稱為“挖礦”。在這裡,記賬者是礦工,他們競爭使用硬體和電力打包區塊,從而創造新的貨幣。
挖礦有兩個主要目的:將最近的交易打包成區塊,並將它們連接到區塊鏈上進行驗證,以及通過獎勵簿記員發行新貨幣。以下是挖礦的詳細功能:
礦工參與挖礦是因為他們成功將區塊打包到區塊鏈上,因此獲得了豐厚的獎勵。這些獎勵來自兩個主要來源:
隨著時間的推移,區塊獎勵將會減少(例如,比特幣的減半機制,每四年左右獎勵就會減半)。最終,在所有2100萬比特幣挖掘完畢後,預計在2141年左右,自動區塊獎勵將停止存在,交易手續費將成為礦工的主要收入來源。
比特幣大約每10分鐘生成一個新的區塊。最初,每個新區塊產生50比特幣的獎勵。這個獎勵每4年減半一次,到目前為止,已經有四次這樣的減半事件。目前,每個區塊產生3.125比特幣,最近的減半事件發生在2024年4月。預計下一次減半事件將在2028年左右發生。到2141年左右,比特幣將達到其發行上限。
交易費用不僅受供需影響,還受交易大小影響,因為費用與交易在區塊中佔用的空間成比例。
對於礦工來說,參與挖礦是很簡單的。下載一個數字貨幣錢包客戶端,在客戶端中點擊挖礦按鈕開始挖礦。
對於有區塊獎勵的區塊鏈項目,挖礦算法通常被寫入集成到錢包中的腳本中。礦工只需點擊一個按鈕即可啟動腳本。
挖礦算法是確定性的,這意味著只要礦工持續運行算法,他們最終會得到一個結果。然而,由於計算資源不同,不同礦工計算這個結果所需的時間可能不同。一旦節點計算出目標值,其他礦工在那段時間內的努力將變得徒勞,因為耗費的物理資源導致負面回報。
為了避免浪費努力,礦工們通常通過加入挖礦池節點來共享他們的計算資源。這個節點像其他節點一樣運作,但具有顯著更多的計算能力。當挖礦池成功挖掘出一個區塊時,獎勵會根據參與礦工的計算資源分配。需要注意的是,在區塊鏈上,打包該區塊的礦工是挖礦池節點,而個人礦工獲得的獎勵是由挖礦池分配的,而非直接來自貨幣系統。
生产专业高效挖掘芯片的公司比特大陆,已巩固了挖矿池的角色,有助于中央化记账权力的贡献。
不同的區塊鏈項目可能有不同的挖礦謎題和難度水平。在這裡,我們以比特幣為例。比特幣使用的挖礦算法被稱為工作量證明(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最大為256的情況,以目前人類計算能力(不包括量子計算機)來找到這樣一個哈希值幾乎是不可能的,除非地球停止存在。
由於SHA-256的特性,唯一的方法是暴力攻擊,這涉及不斷嘗試不同的nonce直到條件滿足。這種對高性能計算設備的需求是採礦需要這樣的設備的原因。
因為您無法預測將nonce添加到區塊數據並通過sha-256運算所生成的哈希值,所以這個過程完全是隨機的。例如,如果目標哈希值為10,000,您無法知道哪個nonce與區塊數據相結合會產生小於10,000的哈希值。這種不可預測和隨機的特性意味著挖礦者必須不斷列舉可能性直到滿足條件。如果有多個值滿足條件,則選擇最小的哈希值,因為較小的哈希值表示更高的難度和更低的發生概率。
驗證生成的哈希值是否符合要求很容易,只需要一次比較操作。然而,找到小於或等於目標值的哈希值只能通過蠻力枚舉來實現。這種特徵,即驗證結果容易但找到結果困難,被稱為計算不對稱性。
以下代碼模擬了挖礦過程。它以一個區塊頭數據字符串“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()
正如所见,增加散列中所需的前导零的数量显著增加了所需的尝试次数,呈指数增长的趋势。这证明了挖礦的计算困难性和资源需求,强调了在挖礦过程中需要高性能计算设备的必要性。
為了確保每10分鐘產生一個區塊,比特幣系統通過改變散列值中所需的前導零的數量來調整挖礦難度。這種難度調整機制是比特幣系統的重要組成部分。它評估了生成最後2016個區塊所需的時間,這個時間理想上應該是大約兩周。如果這些區塊在兩周內挖出,難度會增加,即增加更多的前導零(降低目標值)。相反,如果花費的時間超過兩週,難度會降低,即減少前導零的數量(提高目標值)。這個機制確保了生成一個區塊的時間大約在10分鐘左右,即使網絡的總哈希率波動。
這個由比特幣的創造者中本聰設計的難度調整機制從一開始就計劃自動適應網絡的總計算能力。 它保持穩定的挖礦速度,防止貨幣過於快速發行,可能擾亂市場經濟。
不同的區塊鏈項目可能有不同的挖礦算法。在這裡,我們描述了最著名的一個:比特幣挖礦算法。
比特幣底層挖礦算法的執行過程如下:
區塊標頭中每個字段的大小如下:
https://time.geekbang.org/column/article/5963
alt="">Merkle樹結構如下:
大后端私房菜]. alt="">
挖礦所涉及的主要爭議涉及比特幣及其衍生品使用的工作量證明(PoW)算法。這些算法要求礦工投入大量的計算資源來解決網絡上達成一致的問題。許多人同時進行這些計算,但只有第一個解決問題的人獲得獎勵。其他參與者的計算和電力資源被浪費了,並沒有產生額外的價值。
優化這種資源浪費的兩個主要途徑:
挖礦的價值是什麼?這似乎是對資源的浪費和對社會毫無意義。
重新訪問本文中「挖礦為何必要?」一節,挖礦的直接意義是支持數字貨幣的發行。挖礦獎勵鼓勵更多人參與維護數字貨幣,使其更加穩定。此外,挖礦算法維護數字貨幣系統的交易一致性,使其更加強大,更不易受到內部和外部攻擊的影響。
挖礦的間接意義源於數字貨幣本身。數字貨幣創造了一個全球的、無需信任的貨幣系統,在無需中央機構的情況下進行安全交易,避免了中央集權的缺點。它們的全球特性還能實現高效和低成本的跨境交易。
挖礦回報會下降到低於成本,導致礦工停止挖礦和交易停止嗎?
挖礦回報完全依賴系統獎勵,而這些獎勵隨著時間的推移而減少,這是一個常見的問題。然而,挖礦還會從交易費中產生顯著的收入。隨著數字貨幣的普及,數字貨幣交易市場將會擴大。這增加的交易量將加劇區塊包含的競爭,推高用戶為了優先處理其交易而願意支付的費用。因此,礦工可以繼續賺取可觀的交易費,確保交易處理的持續性。
交易手續費是否能夠補償挖礦成本?
是的,交易费用可以帮助补偿挖矿的成本。随着区块奖励逐渐减少,交易费用成为矿工的重要收入来源。这确保即使电费很高,矿工仍然可以通过用户支付的交易处理费用来维持他们的运营。
多個礦工同時廣播新塊時,他們會分擔挖礦獎勵嗎?
不,如果多個礦工同時解決問題並廣播其新區塊,將在區塊鏈中創建一個暫時性分叉。這是它的運作方式:
範例:
什麼是 51% 攻擊,為什麼超級節點不作弊?
當單一實體或團體控制網絡超過50%的計算能力時,將發生51%攻擊。這就是為什麼超級節點通常不會作弊的原因:
區塊鏈如何防止故意干擾和欺詐交易?
阻止礦工分發不一致的區塊
定義和功能:在區塊鏈網絡中,所有尚未被納入區塊的廣播交易暫時存儲在網絡節點的內存池(mempool)中。礦工監視其內存池以選擇交易以構建新區塊。
交易選擇策略:礦工可以根據自己的策略從內存池中選擇交易。通常,他們會優先處理手續費較高的交易,但有些礦工也會考慮其他因素,比如交易的年齡(它在內存池中停留的時間)。
參與者和他們的收入方式:除了用戶外,比特幣系統中的三個主要參與者是挖礦者、開發者和節點運營商。
GPU 價格上漲:礦工出於採礦目的對 GPU 的高需求導致供應短缺,導致價格上漲。
挖礦GPU:挖礦GPU是以前用於加密貨幣挖礦的GPU。這些GPU經歷了大量的計算,導致了顯著的磨損。由於性能下降,大多數人不願購買使用過的挖礦GPU。
完全冗餘存儲要求:是的,礦工需要存儲整個區塊鏈帳本,以驗證令牌之前是否被花費過,並確保帳本的安全性和完整性。然而,對於非常早期的區塊,礦工只需要存儲區塊頭,而不是完整的區塊內容。這有助於保持區塊鏈的效率,同時保持其安全性。
21百萬比特幣之後就沒有自動獎勵:一旦比特幣的總供應量達到了2100萬的上限,系統將不再發行新的比特幣作為挖礦者的獎勵。如果用戶也不願意支付交易費用,理論上,交易系統可能面臨運營挑戰。然而,用戶可能會願意支付交易費用來處理他們的交易,確保系統的繼續運作。
區塊高度將繼續增加:即使在達到 2100 萬枚比特幣的最大供應後,只要礦工願意挖礦並將交易打包到新區塊中,區塊高度(區塊總數)將繼續增加。區塊高度不受比特幣供應上限的限制。
共識變更的潛力:社區可以提出共識規則的更改,例如增加比特幣的總供應量,以便按需生成新的幣種。
coinbase交易:在比特幣區塊鏈中,礦工獎勵通過一個特殊的交易進行分配,該交易被稱為“coinbase交易”或“區塊獎勵”。這筆交易具有獨特的特點:
每個區塊的收入計算:礦工的收入是在每個區塊成功挖掘並得到網絡共識機制確認時計算的。挖掘該區塊的礦工(或礦池)將獲得區塊獎勵和該區塊中所有交易的累計手續費。
獲得獎勵的過程:一旦礦工或礦池成功挖掘一個區塊並經由網路確認後,他們會獲得該區塊的獎勵和交易手續費。這是通過coinbase交易來執行的,該交易將手續費和獎勵轉換為未花費的交易輸出(UTXO),並記入礦工的帳戶。
順序創建:區塊在區塊鏈中按順序創建。只有在前一個區塊成功挖礦並添加到鏈中後,才能創建新的區塊。
每個區塊多個交易:區塊通常包含多個交易。礦工包括盡可能多的交易,以最大化他們的交易費用收入,而不是單獨打包交易。
部分填充的塊:大多數塊未充分利用。礦工一旦找到滿足難度要求的有效哈希值,就會開始處理下一個區塊,無論該區塊是否已滿。
空塊:即使沒有交易可以包含,也可以挖掘區塊。這些稱為空塊的區塊仍然向礦工提供系統獎勵。
最長鏈規則:當出現分叉時,網絡將遵循具有最多累積工作量證明的鏈,通常是最長的鏈。一旦明確哪一條鏈的工作量更大,節點會切換到較長的鏈。
雙重花費解決:
驗證過程:
交易手續費計算:用戶可以控制交易手續費以加快交易確認速度。手續費根據以下公式計算:
交易費用=總投入-總產出-變更
使用者透過調整輸入金額、輸出金額和找零金額來設定交易手續費。
收益分配:在矿池挖矿时,矿池节点接收区块奖励,然后根据其贡献的计算能力将收益分配给其成员。该分配通过向矿工的钱包进行转账来执行。
自私挖礦:自私挖礦是一種策略,其中一個礦工(或礦池)找到一個新的區塊,但不立即廣播。相反,他們繼續在他們的鏈(隱藏鏈)上私下挖礦。一旦他們找到其他區塊,他們一次性廣播所有區塊。這可能使其他礦工的工作無效,並將計算能力和獎勵傾向於自私挖礦者。比特幣可以通過改進廣播協議來減輕自私挖礦的影響。
交易驗證:當一筆交易被廣播到節點時,它會經過幾個檢查來確定是否應該被添加到記憶池:
區塊驗證:當礦工節點收到一個新的區塊時,它會對該區塊及其交易進行廣泛的檢查:
[1] 課程12 | 深入挖礦技術(4):pow 共識-區塊鏈深度解析-geek 時間:免責聲明:
轉發原標題‘白話區塊鏈三:揭開挖礦神秘的面紗——挖礦是什麼?為什麼要挖礦?誰是我們買不起顯卡的罪魁禍首?’
對於大多數人來說,與區塊鏈相關的最熟悉概念之一可能是挖礦。許多人可能已經聽過很多次挖礦,但不太確定它實際上包含了什麼。在本節中,我們將打斷我們的常規程序,首先介紹“挖礦”。
快速回顧來自「普通區塊鏈1:比特幣簡介(區塊鏈革命的先驅和主權貨幣的挑戰者)」的內容,其中中本聰設計了比特幣貨幣系統,將簿記的獎勵與貨幣發行聯繫起來。這種方法通過簿記過程實現貨幣發行的自動化,解決了貨幣發行問題,同時也鼓勵簿記者積極參與。
在現實世界中,挖礦包括礦工使用各種工具從礦坑中挖掘出藏在岩石中的貴金屬。礦工通過體力勞動從大自然中藏匿的這些稀有金屬中提取價值。
對於具有記賬獎勵的區塊鏈項目(通常是數字貨幣項目),網絡節點耗費計算資源來解決問題。一旦他們找到解決方案,他們將區塊打包並以新發行的貨幣形式獲得獎勵。這個過程類似於從礦石中提取金等貴金屬,因此通常被稱為“挖礦”。在這裡,記賬者是礦工,他們競爭使用硬體和電力打包區塊,從而創造新的貨幣。
挖礦有兩個主要目的:將最近的交易打包成區塊,並將它們連接到區塊鏈上進行驗證,以及通過獎勵簿記員發行新貨幣。以下是挖礦的詳細功能:
礦工參與挖礦是因為他們成功將區塊打包到區塊鏈上,因此獲得了豐厚的獎勵。這些獎勵來自兩個主要來源:
隨著時間的推移,區塊獎勵將會減少(例如,比特幣的減半機制,每四年左右獎勵就會減半)。最終,在所有2100萬比特幣挖掘完畢後,預計在2141年左右,自動區塊獎勵將停止存在,交易手續費將成為礦工的主要收入來源。
比特幣大約每10分鐘生成一個新的區塊。最初,每個新區塊產生50比特幣的獎勵。這個獎勵每4年減半一次,到目前為止,已經有四次這樣的減半事件。目前,每個區塊產生3.125比特幣,最近的減半事件發生在2024年4月。預計下一次減半事件將在2028年左右發生。到2141年左右,比特幣將達到其發行上限。
交易費用不僅受供需影響,還受交易大小影響,因為費用與交易在區塊中佔用的空間成比例。
對於礦工來說,參與挖礦是很簡單的。下載一個數字貨幣錢包客戶端,在客戶端中點擊挖礦按鈕開始挖礦。
對於有區塊獎勵的區塊鏈項目,挖礦算法通常被寫入集成到錢包中的腳本中。礦工只需點擊一個按鈕即可啟動腳本。
挖礦算法是確定性的,這意味著只要礦工持續運行算法,他們最終會得到一個結果。然而,由於計算資源不同,不同礦工計算這個結果所需的時間可能不同。一旦節點計算出目標值,其他礦工在那段時間內的努力將變得徒勞,因為耗費的物理資源導致負面回報。
為了避免浪費努力,礦工們通常通過加入挖礦池節點來共享他們的計算資源。這個節點像其他節點一樣運作,但具有顯著更多的計算能力。當挖礦池成功挖掘出一個區塊時,獎勵會根據參與礦工的計算資源分配。需要注意的是,在區塊鏈上,打包該區塊的礦工是挖礦池節點,而個人礦工獲得的獎勵是由挖礦池分配的,而非直接來自貨幣系統。
生产专业高效挖掘芯片的公司比特大陆,已巩固了挖矿池的角色,有助于中央化记账权力的贡献。
不同的區塊鏈項目可能有不同的挖礦謎題和難度水平。在這裡,我們以比特幣為例。比特幣使用的挖礦算法被稱為工作量證明(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最大為256的情況,以目前人類計算能力(不包括量子計算機)來找到這樣一個哈希值幾乎是不可能的,除非地球停止存在。
由於SHA-256的特性,唯一的方法是暴力攻擊,這涉及不斷嘗試不同的nonce直到條件滿足。這種對高性能計算設備的需求是採礦需要這樣的設備的原因。
因為您無法預測將nonce添加到區塊數據並通過sha-256運算所生成的哈希值,所以這個過程完全是隨機的。例如,如果目標哈希值為10,000,您無法知道哪個nonce與區塊數據相結合會產生小於10,000的哈希值。這種不可預測和隨機的特性意味著挖礦者必須不斷列舉可能性直到滿足條件。如果有多個值滿足條件,則選擇最小的哈希值,因為較小的哈希值表示更高的難度和更低的發生概率。
驗證生成的哈希值是否符合要求很容易,只需要一次比較操作。然而,找到小於或等於目標值的哈希值只能通過蠻力枚舉來實現。這種特徵,即驗證結果容易但找到結果困難,被稱為計算不對稱性。
以下代碼模擬了挖礦過程。它以一個區塊頭數據字符串“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()
正如所见,增加散列中所需的前导零的数量显著增加了所需的尝试次数,呈指数增长的趋势。这证明了挖礦的计算困难性和资源需求,强调了在挖礦过程中需要高性能计算设备的必要性。
為了確保每10分鐘產生一個區塊,比特幣系統通過改變散列值中所需的前導零的數量來調整挖礦難度。這種難度調整機制是比特幣系統的重要組成部分。它評估了生成最後2016個區塊所需的時間,這個時間理想上應該是大約兩周。如果這些區塊在兩周內挖出,難度會增加,即增加更多的前導零(降低目標值)。相反,如果花費的時間超過兩週,難度會降低,即減少前導零的數量(提高目標值)。這個機制確保了生成一個區塊的時間大約在10分鐘左右,即使網絡的總哈希率波動。
這個由比特幣的創造者中本聰設計的難度調整機制從一開始就計劃自動適應網絡的總計算能力。 它保持穩定的挖礦速度,防止貨幣過於快速發行,可能擾亂市場經濟。
不同的區塊鏈項目可能有不同的挖礦算法。在這裡,我們描述了最著名的一個:比特幣挖礦算法。
比特幣底層挖礦算法的執行過程如下:
區塊標頭中每個字段的大小如下:
https://time.geekbang.org/column/article/5963
alt="">Merkle樹結構如下:
大后端私房菜]. alt="">
挖礦所涉及的主要爭議涉及比特幣及其衍生品使用的工作量證明(PoW)算法。這些算法要求礦工投入大量的計算資源來解決網絡上達成一致的問題。許多人同時進行這些計算,但只有第一個解決問題的人獲得獎勵。其他參與者的計算和電力資源被浪費了,並沒有產生額外的價值。
優化這種資源浪費的兩個主要途徑:
挖礦的價值是什麼?這似乎是對資源的浪費和對社會毫無意義。
重新訪問本文中「挖礦為何必要?」一節,挖礦的直接意義是支持數字貨幣的發行。挖礦獎勵鼓勵更多人參與維護數字貨幣,使其更加穩定。此外,挖礦算法維護數字貨幣系統的交易一致性,使其更加強大,更不易受到內部和外部攻擊的影響。
挖礦的間接意義源於數字貨幣本身。數字貨幣創造了一個全球的、無需信任的貨幣系統,在無需中央機構的情況下進行安全交易,避免了中央集權的缺點。它們的全球特性還能實現高效和低成本的跨境交易。
挖礦回報會下降到低於成本,導致礦工停止挖礦和交易停止嗎?
挖礦回報完全依賴系統獎勵,而這些獎勵隨著時間的推移而減少,這是一個常見的問題。然而,挖礦還會從交易費中產生顯著的收入。隨著數字貨幣的普及,數字貨幣交易市場將會擴大。這增加的交易量將加劇區塊包含的競爭,推高用戶為了優先處理其交易而願意支付的費用。因此,礦工可以繼續賺取可觀的交易費,確保交易處理的持續性。
交易手續費是否能夠補償挖礦成本?
是的,交易费用可以帮助补偿挖矿的成本。随着区块奖励逐渐减少,交易费用成为矿工的重要收入来源。这确保即使电费很高,矿工仍然可以通过用户支付的交易处理费用来维持他们的运营。
多個礦工同時廣播新塊時,他們會分擔挖礦獎勵嗎?
不,如果多個礦工同時解決問題並廣播其新區塊,將在區塊鏈中創建一個暫時性分叉。這是它的運作方式:
範例:
什麼是 51% 攻擊,為什麼超級節點不作弊?
當單一實體或團體控制網絡超過50%的計算能力時,將發生51%攻擊。這就是為什麼超級節點通常不會作弊的原因:
區塊鏈如何防止故意干擾和欺詐交易?
阻止礦工分發不一致的區塊
定義和功能:在區塊鏈網絡中,所有尚未被納入區塊的廣播交易暫時存儲在網絡節點的內存池(mempool)中。礦工監視其內存池以選擇交易以構建新區塊。
交易選擇策略:礦工可以根據自己的策略從內存池中選擇交易。通常,他們會優先處理手續費較高的交易,但有些礦工也會考慮其他因素,比如交易的年齡(它在內存池中停留的時間)。
參與者和他們的收入方式:除了用戶外,比特幣系統中的三個主要參與者是挖礦者、開發者和節點運營商。
GPU 價格上漲:礦工出於採礦目的對 GPU 的高需求導致供應短缺,導致價格上漲。
挖礦GPU:挖礦GPU是以前用於加密貨幣挖礦的GPU。這些GPU經歷了大量的計算,導致了顯著的磨損。由於性能下降,大多數人不願購買使用過的挖礦GPU。
完全冗餘存儲要求:是的,礦工需要存儲整個區塊鏈帳本,以驗證令牌之前是否被花費過,並確保帳本的安全性和完整性。然而,對於非常早期的區塊,礦工只需要存儲區塊頭,而不是完整的區塊內容。這有助於保持區塊鏈的效率,同時保持其安全性。
21百萬比特幣之後就沒有自動獎勵:一旦比特幣的總供應量達到了2100萬的上限,系統將不再發行新的比特幣作為挖礦者的獎勵。如果用戶也不願意支付交易費用,理論上,交易系統可能面臨運營挑戰。然而,用戶可能會願意支付交易費用來處理他們的交易,確保系統的繼續運作。
區塊高度將繼續增加:即使在達到 2100 萬枚比特幣的最大供應後,只要礦工願意挖礦並將交易打包到新區塊中,區塊高度(區塊總數)將繼續增加。區塊高度不受比特幣供應上限的限制。
共識變更的潛力:社區可以提出共識規則的更改,例如增加比特幣的總供應量,以便按需生成新的幣種。
coinbase交易:在比特幣區塊鏈中,礦工獎勵通過一個特殊的交易進行分配,該交易被稱為“coinbase交易”或“區塊獎勵”。這筆交易具有獨特的特點:
每個區塊的收入計算:礦工的收入是在每個區塊成功挖掘並得到網絡共識機制確認時計算的。挖掘該區塊的礦工(或礦池)將獲得區塊獎勵和該區塊中所有交易的累計手續費。
獲得獎勵的過程:一旦礦工或礦池成功挖掘一個區塊並經由網路確認後,他們會獲得該區塊的獎勵和交易手續費。這是通過coinbase交易來執行的,該交易將手續費和獎勵轉換為未花費的交易輸出(UTXO),並記入礦工的帳戶。
順序創建:區塊在區塊鏈中按順序創建。只有在前一個區塊成功挖礦並添加到鏈中後,才能創建新的區塊。
每個區塊多個交易:區塊通常包含多個交易。礦工包括盡可能多的交易,以最大化他們的交易費用收入,而不是單獨打包交易。
部分填充的塊:大多數塊未充分利用。礦工一旦找到滿足難度要求的有效哈希值,就會開始處理下一個區塊,無論該區塊是否已滿。
空塊:即使沒有交易可以包含,也可以挖掘區塊。這些稱為空塊的區塊仍然向礦工提供系統獎勵。
最長鏈規則:當出現分叉時,網絡將遵循具有最多累積工作量證明的鏈,通常是最長的鏈。一旦明確哪一條鏈的工作量更大,節點會切換到較長的鏈。
雙重花費解決:
驗證過程:
交易手續費計算:用戶可以控制交易手續費以加快交易確認速度。手續費根據以下公式計算:
交易費用=總投入-總產出-變更
使用者透過調整輸入金額、輸出金額和找零金額來設定交易手續費。
收益分配:在矿池挖矿时,矿池节点接收区块奖励,然后根据其贡献的计算能力将收益分配给其成员。该分配通过向矿工的钱包进行转账来执行。
自私挖礦:自私挖礦是一種策略,其中一個礦工(或礦池)找到一個新的區塊,但不立即廣播。相反,他們繼續在他們的鏈(隱藏鏈)上私下挖礦。一旦他們找到其他區塊,他們一次性廣播所有區塊。這可能使其他礦工的工作無效,並將計算能力和獎勵傾向於自私挖礦者。比特幣可以通過改進廣播協議來減輕自私挖礦的影響。
交易驗證:當一筆交易被廣播到節點時,它會經過幾個檢查來確定是否應該被添加到記憶池:
區塊驗證:當礦工節點收到一個新的區塊時,它會對該區塊及其交易進行廣泛的檢查:
[1] 課程12 | 深入挖礦技術(4):pow 共識-區塊鏈深度解析-geek 時間:免責聲明: