前往
大廳
主題 達人專欄

科普新知,比特幣挖礦是在做什麼?

Amory | 2025-01-01 00:00:49 | 巴幣 2 | 人氣 470






  各位同仁,下一任美國總統川普即將於2025年1月20日正式上任。儘管川普的行事作風讓全世界嚴陣以待,但川普堪稱有史以來對加密貨幣最友好的美國總統,全體幣圈人皆引頸期盼川普能帶來什麼樣的利好政策。這幾個月來即便是未接觸過加密貨幣的普羅百姓,相信也常在新聞媒體上看見越來越多有關比特幣的報導。不同於過去提到比特幣肯定沒半點好事,近月來屬於正面的報導也在持續上升。

  眾所皆知,比特幣於亞洲時間2024年12月5日價格正式突破10萬美元,儘管之後一直在9萬至11萬美元間震盪,但已足夠再次吸引一般散戶的目光。本人是在2024年3月左右接觸幣圈,當時正逢比特幣突破7萬3000美元達到歷史新高。跟老幣圈人相比本人似乎還顯年輕,但若跟十一月才接觸幣圈的人相比我似乎又稍微有點經驗。於是在近期的熱潮中,同事問起了一個很多人都會問的問題:比特幣挖礦到底是在做什麼?

  對於幣圈人而言,比特幣挖礦應算是入門基本常識,但若要以淺顯易懂的方式解釋給其他人聽,這似乎又不是件容易的事情。因此我決定來寫這篇科普新知,以解答普羅大眾困惑。雖然比特幣挖礦的相關知識網路上都查的到,完全不需要我再寫一篇,但寫這篇文章也能幫助我自身來歸納我的理解。

  比特幣挖礦到底是在做什麼?

  以最淺顯易懂的方式來說明,那就是礦工是在替比特幣網路上的交易驗證正確性,最先驗證成功的礦工就能獲得系統所頒發的比特幣作為獎勵。礦工的目的就是以更低的成本獲得這些獎勵,這將比直接在交易所購買比特幣所費金額還要低。儘管比特幣價格具高波動性,但以長期趨勢來看比特幣價格皆為上漲,只要比特幣價格比礦工挖礦所費電力與維護機器的成本還高,那麼礦工就能盈利。

  為了要詳加說明比特幣網路運作原理,我們就要先來介紹一下比特幣的背景知識。


  比特幣(Bitcoin)是2008年10月31日由一位名為中本聰(Satoshi Nakamoto)的神秘人物於論文《Bitcoin: A Peer-to-Peer Electronic Cash System》中所提出的點對點電子現金系統,並於2009年1月3日的「創世區塊(Genesis block)」中正式上線。中本聰這個名字雖然看起來像日本人名,但沒有任何證據顯示他真的是日本人。中本聰將所有開發工作全部完成後,自2014年以來便銷聲匿跡,沒有人知道他到底是誰,亦有人認為中本聰其實是一個團隊名稱而非單獨個體。

  促成中本聰創造比特幣與其所運行的區塊鏈的背景,應為他所處的年代正逢2008年金融海嘯,傳統金融系統過度依賴銀行與政府作為中介機構,造成了擴及全世界的重大經濟危機。在這種情況下,比特幣設計理念特別注重去中心化的精神。

  什麼是去中心化?一般我們將錢存在銀行裡,銀行掌控了我們資產的生殺大權,銀行就是所謂的中心化機構。平常沒事的時候錢放在銀行很安全,然而一旦銀行倒閉或以各種理由凍結我們的帳戶,我們可能會拿不回我們的錢。去中心化的精神便是沒有任何大型機構能夠掌控我們的資產,資產是儲存於區塊鏈上,只有擁有密碼的人(不論是否為本人)才能存取資產。

  你可能會說……沒有任何機構來管控我的資產,不就代表一旦詐騙集團騙走我的錢,我完全沒辦法追回被騙走的錢嗎?這也確實是去中心化的另一個反面思維,但這並不代表區塊鏈就只能成為犯罪份子的窩藏之地。事實上在區塊鏈,所有金流皆完全透明,你可以在區塊鏈瀏覽器上查詢到每一筆交易的時間、來源與目的等資訊,這意謂著想做壞事的人無論把錢匯到哪裡皆有跡可循,這是傳統金融完全沒有提供的服務。

  比特幣還具備抗通貨膨脹的特性。比特幣自問世以來最大數量只有2100萬枚,只要程式沒發生Bug就不會再增發。這跟能夠無限印鈔票導致通貨膨脹持續增長的法定貨幣不同,比特幣因為數量固定,在這個數位時代理論上是比起雖稱為稀缺金屬但數量不算是固定的黃金,更能抵抗通貨膨脹。

  比特幣亦具備足夠高的安全性。任何法定貨幣會受到該國家經濟情況影響而升值或貶值,但比特幣的網路節點截至目前為止約莫2萬個已遍佈全世界,這意謂著除非地球毀滅,否則沒有任何一個國家有辦法把比特幣網路直接關掉或干涉上面的運作,就連創始者中本聰本人也是如此。

  儘管近日Google宣稱他們所研發的晶片在量子計算上有突破性的發展,引起大眾開始討論量子運算可能破解比特幣網路所使用的SHA256加密演算法,但專家表示:量子運算要能威脅到比特幣還早得很

  因此,為了實現比特幣網路去中心化的精神與其安全性,比特幣網路導入了一種以礦工算力作為擔保的共識機制-工作量證明(Proof of Work)

區塊鏈的架構。每個區塊皆記載著自己的Hash與前一個區塊Hash,已確保彼此緊密關聯。

  在說明工作量證明之前,我們需先來說明一下區塊鏈的架構。

  區塊鏈(Blockchain),這個名詞雖然聽起來很深奧,其實它就是另一種網際網路,不同於傳統網路純粹是客戶端與伺服端互相交換資料,區塊鏈的架構為相同資料皆會佈署到所有節點上,也就是同一筆交易由所有節點共同記帳,這種方式稱之為「分散式帳本」。由於所有資料皆由所有節點共同儲存,這代表著所有歷史資料將被永久保存,無法輕易被變更或刪除。

  區塊鏈的「區塊」並不等於網路節點,並非一個區塊就是一台伺服器,它其實比較貼近一種「物件」,我們可將它理解為學C語言時都會教到的Linked List,只是區塊鏈更為複雜。在區塊鏈中,所有區塊皆按時間順序串接而成,亦即當一筆新的資料進入區塊鏈網路時,會被包裝成區塊的形式串接在前一個區塊後面。為了確保這個新的區塊安全無虞且合乎規則,整個網路便需要一個能快速辨認新的區塊安全性的共識機制,讓所有節點能信任新的區塊不是駭客放進來的假資料。

幣安交易所發送BTC的畫面。

  假設我想從幣安交易所傳送0.1枚比特幣至OKX交易所,我除了需輸入接收端地址、傳送網路與傳送金額外,我還得支付一定的手續費。你可能會說:X的,我在網路上做任何事情都不需付錢,為何在區塊鏈的世界隨便一個動作都要跟我收手續費?這是因為如同上面所述,區塊鏈的資料需佈署到所有節點,推動區塊鏈運作的功臣就是這些礦工,我們必須支付一點薪水給這些礦工。

  當交易所方確認交易安全無虞、沒有詐騙風險後,便會將這筆交易打入區塊鏈中。比特幣網路上的驗證節點確認交易內容格式正確,便會將交易放入暫存區Mempool中。Mempool的內容,包含所有待處理交易與網路擁塞程度,皆可在以下這個網站查詢到。



  比特幣網路每10分鐘會產生一個區塊,也就是系統設計為礦工必須花費約10分鐘的時間才能驗證完一個區塊的交易。由於待處理的交易繁多,這時誰付的手續費高便擁有高優先權。當一個區塊可容納的交易量滿了就得等待下一班車,以此類推。

  我們可以從Mempool網站上看見以下的圖表-Mempool Goggles™


  比較大的方塊代表手續費付比較高的交易。以常人的目光來看,相信不用解釋也知道挑選哪種類型的交易最划算。但礦工並非真的用肉眼來手動挑選交易,事實上每筆交易皆可依其參數計算出權重,礦工的程式是根據自己的篩選規則來自動挑選出符合條件的交易。

  礦工挑選完交易後,會將交易放到自己的候選區塊中。平均一個區塊能容納的交易量約莫1500~3000筆左右。不同礦工可自由挑選自己喜歡的交易放入自己的候選區塊中,即使挑到跟別人重複的也沒關係,因為只有最後挖礦完成贏家出爐才會決定要採用哪一位礦工的版本。

  礦工在候選區塊中,需準備好以下基本資訊(Block Header):

  Version: 0x20400000
  Previous Block Hash: 000000000000000000059b7602f9ad60bc1e599cdd0a6fa3c6c3d140cfd27e28
  Merkle Root: e7f5bf22bc5cb8cb5b63771dcff517f78ccff40e04a11d4d4c5ae09353b4da8b
  Timestamp: 1718783900
  nBits: 386930168 (0x1716e92b)
  Nonce: 0

  這些參數分別代表著以下涵義:

參數名稱 長度 資料型態 說明
Version 4 bytes int 區塊版本編號。
Previous Block Hash 32 bytes char 當前區塊的前一區塊雜湊編碼。
Merkle Root 32 bytes char 梅克爾樹根。
Timestamp 4 bytes uint 時間戳。
nBits 4 bytes uint 挖礦難度目標值,由系統給定。
Nonce 4 bytes uint 每個數字只能使用一次的隨機常數,初始值為0。

  這其中較為難以理解的就是梅克爾樹根(Merkle Root)。

  什麼是梅克爾樹根?這要說明一下比特幣網路的交易模型。不同於傳統金融,比特幣網路是採用UTXO(Unspent Transaction Outputs,未花費的交易輸出)模型來記帳。在傳統銀行中,若今天帳戶A要轉帳給帳戶B,那麼銀行會在帳戶A扣掉需匯出的款項,在帳戶B增加匯來的款項。但UTXO模型可就不一樣了,它考量的是交易間的關聯性。

  假設今天我的帳戶內有10塊錢,這個10塊錢肯定不是無中生有,而是從別的地方轉過來;而別的帳戶又是從另外一個帳戶轉進來,以此類推。這些彼此的交易就能構成一個樹狀結構。

  比特幣網路是用這些交易的關聯性來算出每個帳戶的餘額,而非直接就在帳戶記錄一個餘額的數字。同時,發生交易時也是透過歷史交易的關聯性算出交易後的結果。你可以從Mempool的交易明細頁面中看見很多的input對到很多的output,那正是呈現與這筆交易關聯的歷史交易間的資金流向。

  你可能會問,為何要用這麼麻煩的方式記帳呢?就不能直接在帳戶寫個數字,然後加減就好?這是因為採用UTXO模型的交易彼此緊密關聯,這表示駭客沒有辦法那麼容易竄改它,沒辦法直接修改你的帳戶餘額就讓你變成百萬富翁,其安全性也就越高。

  一個候選區塊內會有約1500~3000筆交易,每筆交易彼此毫無關聯,可是它們的歷史交易勢必都有個共同的根源。這個共同的根源就是梅克爾樹根。

  礦工需要將上述所提的候選區塊基本資訊透過雙重SHA256加密演算法轉換成一串雜湊編碼。

  Block Header = [Version] + [Previous Block Hash] + [Merkle Root] + [Timestamp] + [Bits] + [Nonce]
  Hash = SHA256(SHA256(Block Header))

  轉換成雜湊編碼後,它的外觀就會類似以下這個樣子:

  f1a5678cc3d9d9b6743a1d25cfb78b6a7df1a6123456789abcde123456789012

  這是一個16進位的字串,每個字母的變化範圍為0~f。

  這時,系統會給予一個挖礦難度目標值。就像這樣:

  00000000000000000001364ef5b0c5c287f2eb0ed882233dd16f349e94860682

  並要求礦工必須算出比目標值還要小的雜湊編碼,才算通過。

  因此礦工為了滿足目標,它必須重新將候選區塊的基本資訊拿出來,稍微更改最後面的Nonce數值,重新生成雜湊編碼。Nonce初始值為0,他們會循序加1,以確認生成的雜湊編碼是否小於目標值編碼。

  相信用文字敘述你會看不懂我在寫什麼,我們就來實際演練一次。

  Nonce = 0
  Hash = f1a5678cc3d9d9b6743a1d25cfb78b6a7df1a6123456789abcde123456789012

  當Nonce等於0時,生成的雜湊編碼未小於目標值,所以礦工需再將Nonce的值加1。

  Nonce = 1
  Hash = b2c5678ac23d7f9e123ab4a7c2a789f6b1d8e45f6781234acdef789012345678

  Nonce等於1時,生成的雜湊編碼還是未達標準,所以再將Nonce加1變成2繼續努力。

  Nonce = 2
  Hash = ..........
  Nonce = 3
  Hash = ..........
  Nonce = 4
  Hash = ..........

  .
  .
  .

  Nonce = 435792541
  Hash = 00000000000000000001364ef5b0c5c287f2eb0ed882233dd16f349e94860682

  試到Nonce的值等於435792541時,生成的雜湊編碼終於小於目標值,達成標準,可喜可賀!

  系統隨即將礦工找到的答案廣播給所有節點要求驗證。假如這位礦工是在這10分鐘內最快找到答案的贏家,那麼這位礦工的候選區塊就能被認可為正式區塊,並獲得比特幣獎勵。

  正因如此,成千上萬的礦工必須擁有算力強大的機器,才能搶在別人前算出系統所要的答案,拿到區塊獎勵。礦機的算力單位為Hash Rate,亦即每秒能夠算出幾個雜湊編碼,100TH即代表每秒可算出100兆個雜湊編碼。

  有時你可能會在新聞上看到「比特幣挖礦難度上調XXX,達到歷史新高」這樣的標題。系統為確保一個區塊產生的時間固定在10分鐘,會適當調整挖礦難度目標值,調整時機約莫2週一次。

  當礦工很多,全網算力很高,表示系統要求的答案礦工會在更短的時間內找出來,這時系統會將挖礦難度目標值調的更難,讓礦工沒那麼容易找出答案。相反地,礦工較少時,解題時間變長,系統就會將目標值調簡單讓礦工解題較為容易。這種機制就是要確保一個區塊的挖礦時間維持在10分鐘。

  礦工在贏得一個區塊獎勵時,獎勵其實分為兩種類型:系統頒發的獎勵與交易者所支付的交易費。
  你可能聽說過2024年4月有個比特幣的重大事件-比特幣第四次獎勵減半。比特幣網路為了抑制通貨膨脹,每當區塊數量達到210000個時,系統所頒發的挖礦獎勵就會減半。最初獎勵是50枚,接著變成25枚、12.5枚、6.25枚、3.125枚……以此類推,如下圖所示。


  而以每10分鐘一個區塊的時間來計算,達到210000個就需花費4年。這4年的週期正好與美國總統選舉的年份重疊,也因此比特幣獎勵減半通常被視為牛市開始的信號

  全部的比特幣推估會在2140年被挖掘完畢,屆時區塊獎勵將會只剩下交易手續費。但是不用擔心比特幣全部出土後會發生什麼事,除了那已是100年後的事情,如果比特幣生態圈足夠蓬勃發展且價格已高到天文數字,那麼交易手續費也足夠讓礦工盈利了。

  以上即為整個比特幣挖礦流程說明。相信看到這裡,即便我覺得我已經寫得很白話了,你可能還是覺得我在寫什麼無字天書。確實,當我在閱讀比特幣的挖礦原理,我也是看了很久才稍微看懂它的運作方式。我們可以來總結一下,整體挖礦流程大致如下:

  1.礦工從Mempool挑選交易,加入候選區塊中。
  2.礦工將候選區塊基本資訊進行雙重SHA256加密算出雜湊編碼。
  3.礦工將雜湊編碼與系統給予的目標值進行比對,若小於目標值則為正確答案。若大於目標值,則調整候選區塊基本資訊的Nonce值,重新生成雜湊編碼,繼續比對。
  4.礦工找到正確答案後回報系統,10分鐘內最快找到答案的人即為此區塊的優勝者。該礦工的候選區塊將被認可為正式區塊,並獲得比特幣獎勵。

  在稍微了解挖礦流程後,我們可以打開區塊鏈瀏覽器
  以下為區塊#840000的基本資訊。相信有了一些基本知識,以下資訊你就能看懂一點:


  從上圖可看出,Hash即為挖掘此區塊的礦工最終找到的雜湊編碼。認可時間為亞洲時間2024年4月20日08:09:27。交易量為3050筆。礦工找到的Nonce為3,932,395,645,當時的挖礦難度為86,388,558,925,171.02。交易手續費有37.63 BTC,系統提供的獎勵為3.13 BTC,加起來便是40.75 BTC。

  你可能會有疑惑,這些工作為何比特幣網路的伺服器不能自己把它完成,非得要礦工來參與呢?這是因為比特幣網路講究的是去中心化的精神,如果所有工作都是項目方自己把它完成,等同項目方依舊掌控整個生態圈的生殺大權,依舊過於中心化。挖礦的目的就是讓所有礦工都能以自己的機器公平參與區塊交易驗證工作,讓這個網路是由全體礦工共同支撐,而非項目方單獨在支撐。同時,多名礦工參與交易驗證,就表示駭客沒辦法只把網路節點攻陷就能癱瘓網路,他還得對付成千上萬的礦工的加密成果,大大提昇了攻陷網路所費成本。

  當然,這樣的機制也不是沒有缺點。儘管這個機制讓所有礦工都能用自己的機器參與挖礦,但只要有錢有勢買了算力超強的機器,就能將獎勵全部搶走,造成資源分配過度集中。這正是為何早期你可以用一般電腦來挖礦,過了幾年你可以用GPU來挖礦,但現在如果不是用特製的ASIC機來挖礦是贏不過別人的,因為這個產業已經被大型採礦公司所壟斷。但在這種情況下一般散戶也不是毫無機會,在極低的機率下散戶也是有可能用爛機器不小心矇中答案,這一切都是靠運氣。如果是抽獎總是輸人的非洲人,那麼最穩當的方法就是加入由大機構開設的礦池(Pool),多人來一起挖礦,這麼一來當獲得區塊獎勵時是依據團隊成員貢獻度來分配獎勵,至少比完全沒有還好。

  你又有可能常聽到懷疑論者指責比特幣挖礦耗用能源,因為機器只要運轉就需要電力。但你有所不知,礦工因相當計較電力成本與挖礦收益間的平衡,更會努力去尋找乾淨能源來使用。所以礦工實際上比一般人更具備環保意識。根據統計,比特幣挖礦的乾淨能源使用率已超過56%。當你很高興的使用ChatGPT時,實際上OpenAI的伺服器也耗用了相當多的能源,因此科技的進展都是需要能源作為支撐,這是人類無法迴避的問題。

  第二大加密貨幣以太坊(Ethereum)深知比特幣「工作量證明」的壞處。最早以太坊剛誕生時也是採用「工作量證明」,但在2022年已轉為不需耗用那麼多能源、將以太幣質押於鏈上的共識機制「權益證明(Proof of Stake)」。那又是另一個故事。


創作回應

自由之子-霧散步
完全看不懂~所以建議是不要碰?
2025-01-03 23:41:20
Amory
一般人應該直接去買幣就好了
2025-01-04 07:31:52
Xlaws
所以怎麼證明比特弊真的只有2100萬枚跟沒人有特殊算法更快拿到比特弊?
2025-01-04 08:34:31
Amory
在假設程式皆正常運作情況下,比特幣只能由挖礦取得,挖礦難度限制一個區塊10分鐘誕生,沒有人能夠加速取得比特幣。假如有人想要破解現有規則,那麼他可能需先攻陷一半以上的網路節點才有辦法做到。
2025-01-04 09:47:40
Xlaws
所以<中本聰>完全是可以搞鬼的
2025-01-04 12:21:38
追蹤 創作集

作者相關創作

相關創作

更多創作