前往
大廳
主題 達人專欄

比特幣的「挖礦」是怎麼回事?它是如何憑空出現的?

解凍豬腳 | 2021-02-25 19:45:01 | 巴幣 29352 | 人氣 11208

 
。前言

  隨著比特幣(BTC,Bitcoin)的價格最近半年從每顆 $10,000 漲到超過 $50,000(美金),身邊不少朋友都終於開始對這玩意感興趣了。其實很早之前就想要寫這篇文章,不過畢竟我也是個老愛挖了坑以後死都不去填完的人,這次總算有個好理由可以介紹一下,也作為讓我複習觀念的機會。



。比特幣簡史

  比特幣最早成形於 2008 年,而世界上的第一顆比特幣則是誕生於 2009 年初——對的,你沒有看錯,比特幣已經存在了至少 12 年!

  2008 年 10 月,一名自稱為 Satoshi Nakamoto(註 1)的網友在網路上發表了一篇論文《比特幣:一種點對點的電子現金系統》(註 2),內容記載了這樣的系統應該如何運作,也就是說這篇論文記載的是比特幣的設計原則而不是實際的程式碼。

  此後,其他網友就循著這樣的設計原則開發出能夠用來支付或接收比特幣的應用程式(以及用來「產生」比特幣的挖礦程式),比特幣的網路及社群也隨之逐漸成形。在這十幾年間,比特幣一路從當時看來毫無價值的電子數據變成每顆可達 $50,000 天價的「數位黃金」。

  註 1:Satoshi Nakamoto 在論文發表時並沒有給出漢字寫法,一般在中文媒體上習慣以日語音譯為中本聰,而在日文媒體則是直接以片假名サトシ・ナカモト來表示。

  註 2:原論文標題為《Bitcoin: A Peer-to-Peer Electronic Cash System》



。比特幣是如何發送和接收的?

  比特幣最早是作為「去中心化」的理念而生。在傳統的金融體系裡,我們通常信任銀行能夠幫你保存好你的金錢,也信任這些銀行能夠分毫不差地把匯款的任務完成。然而,這樣的做法導致了「所有人都依賴銀行及政府」的結果,我們的錢在某些極端情況下並不是真正意義上的安全——你的個人資料也在這些體系的掌控中,而政府可以凍結你的銀行帳戶,你的錢不是你的錢。

  比特幣的系統旨在解決這樣的問題,成為了讓所有人都能在不需依賴金融機構的狀況下自由互相匯款的重要發明。假設現在這些世界上有 A、B、C、D、E 五個人,每個人都持有 10 枚比特幣,於是大家在帳本上如此記載:



  所有人都可以經由簡單的計算得出每個人的帳戶餘額。

  這時,左手邊的禿頭男 A 因為和右手邊的妹子 D 有交易行為,A 付出 2 枚比特幣給 D,那麼 A 便告訴整個比特幣網路上的人:「A 剛才向 D 發送了 2 枚比特幣。」並且在這筆交易上面附上自己的親筆簽名,以證明「A 付錢給 D」這筆交易真的是由 A 送出(而不是其他人偽造):



  網路上的人首先經由手上的帳本確認 A 手上確實至少有 2 枚比特幣,同時確認這筆交易的簽名沒問題,選擇採信。於是,現在所有人都記錄下 A 先生曾經付錢給 D 小姐 2 枚比特幣的事情:



  那麼,我們就初步做到了「去中心化」的分散式帳本系統。大家只要互相記得誰給了誰多少錢,然後計算餘額,就成了不需要第三方機構的金融體系,僅僅信任這個規則就可以了。



。交易紀錄可能會被竄改嗎?比特幣要如何保障交易的安全?

  單單只是利用上述概念來運作的話,當我們使用這樣的分散式帳本系統,首先會遇到一個大問題:「你要如何確保每個人的交易紀錄順序都一樣呢?」

  試著想一下,如果今天持有 10 枚比特幣的 A 發送了三條交易訊息出去:
  1. A 發送了 2 枚比特幣給 D
  2. A 發送了 8 枚比特幣給 C
  3. A 發送了 3 枚比特幣給 B

  我們知道這三筆交易是分開來計算的,而且在複雜的網路系統之下,我們沒辦法保證網路上的 B、C、D、E 五個人都會剛剛好依序收到這三條交易的訊息,就好像先寄出的信不一定會先到——也許 B 首先收到了前面兩條交易,也許 E 首先收到了第一條和第三條交易,這樣就導致交易網路上出現了幾種結果:

  1. A 發送 8 枚比特幣給 C、發送 2 枚比特幣給 D,餘額為 0 BTC,所以接下來發送 3 枚比特幣給 B 的交易是無效的

  2. A 發送 2 枚比特幣給 D、發送 3 枚比特幣給 B,餘額為 5 BTC,所以接下來發送 8 枚比特幣給 C 的交易是無效的

  為了解決這樣的問題,比特幣使用了「工作量證明」(POW,proof of work)的機制。

  在解釋工作量證明之前,我們要先大致上知道雜湊函數是個什麼樣的東西。你可以想像一下,如果今天我寫了「一生信仰比特幣」七個字,然後我規定一個流程來處理這串字:

  1. 這七個字的筆畫總和是 49 個字
  2. 每個字的筆畫乘起來的結果是 151200
  3. 把 49 和 151200 相乘得到 7408800
  4. 把 7408800 除以 10000 得到餘數為 8800

  因此我可以用固定的流程從「一生信仰比特幣」得到「8800」。

  這樣的規則可以套用到所有的中文字上,讓每一串中文字固定轉換成 0~9999 之間的一個數,這個流程就稱為一種「雜湊」。我們可以經由計算,把一筆資料變成一串數字,像上述範例算出來的這個 8800 就是它的雜湊值。

  可是,如果想要反過來求:「有怎樣的七個中文字可以經由上面的流程得到 8800?」那就成為一個有點麻煩的問題了,因為通常結果是難以預測的,而且也不容易從「8800」反推出「一生信仰比特幣」七個字,畢竟這個流程是不可逆的。

  在這種情況下,我們就只能使用窮舉法,隨便挑七個中文字來一組一組嘗試,直到我們發現有一組的結果是 8800,那我們才找到符合需求的字串組合。

  知道了雜湊函數是什麼之後,我們就可以回頭來解釋工作量證明了。比特幣利用了雜湊函數的特性,首先規定大家要把網路上的交易紀錄組成一個個區塊(就好像你的帳本記錄了太多條之後要換頁一樣,每一頁都是一個區塊),每個區塊主要包含了三個部分:

  1. 上一個區塊的所有內容的雜湊值
  2. 交易的內容(可以包含很多筆)
  3. 一組符合條件的數字

  比特幣的「遊戲規則」規定,如果你能找到一串數字,這串數字和上面第一、第二部分搭配起來,計算出來的雜湊值剛好符合條件(這個條件通常會有點嚴苛,比如雜湊值的前 20 位都剛好是 0),那麼你就取得了這個區塊的宣告權。

  簡單來說,要想大家認可你的宣告,你就必須付出一定的努力,這便是「工作量證明」。

  之後,這個雜湊的結果也會被挪作下一個區塊的第一部分:



  從上圖左一的區塊,我們可以看到,爭奪宣告權的人必須找到一組數字,能夠和 455789 以及那八筆交易紀錄搭配起來雜湊的結果符合條件,於是他使用電腦來大量嘗試,最後發現 115793 這組數字和這兩個部分的雜湊值 154778 可以符合條件,接著他就可以把這個區塊廣播給使用比特幣網路的所有人,並且使得大家採信他的宣告,而這個 154778 接下來也會成為下一個區塊的「題目」的一部分。

  不只這樣,同時間宣告新區塊的人可能很多,所以這會導致這些區塊被分岔成很多條不同的鏈。為了解決這個問題,比特幣的系統提倡使用者選擇去相信已經完成的區塊最多(也就是最長)的那條鏈,如此一來久了大家都會去相信最長的那條鏈所規範的交易內容,而那些比較短的鏈就會被淘汰掉,世界上所有人手上的比特幣帳本就會趨於一致,這就稱為「最長鏈原則」:



  這樣的規則,使得每個區塊前後關聯,要是你想改變這些區塊的順序或內容來達到竄改餘額或偽造交易的目的,那在那之後所有接續的區塊,你都得重新計算(因為後面這些區塊的雜湊結果也全都跟著受到影響了)。為了使得大家採信你的鏈,你會需要耗費超級大量的計算能力來跟其他計算者抗衡,這就不符合經濟效益了。

  這些區塊組合起來,變得像是鏈條一樣環環相扣,「區塊鏈」一詞就是這麼來的。



。平常說的挖礦又是怎麼回事?比特幣要如何憑空出現?

  其實剛才提到的「計算雜湊值,爭奪區塊的宣告權」就是礦工在做的事。

  大量窮舉雜湊值來取得工作量證明,這樣的事情當然是需要耗費很多電力資源的,所以比特幣網路裡的使用者並不是每一個人都需要去做這樣的工作。一般發送、接收比特幣的使用者,他們只需要知道那些礦工已經打包好的區塊內容為何,然後去簡單驗證、相信最長的鏈,這樣就可以滿足他們使用的基本交易需求了。

  可是,誰來當礦工呢?世界上不會平白無故開著電腦幫比特幣網路上的人貢獻自己的電腦計算能力,畢竟電費那麼貴,沒有好處的事情是不會有多少人肯去做的。因此比特幣的其中一個規則就是:如果有人取得了該區塊的宣告權,那麼在這個「眾人都承認的遊戲規則」的允許之下,取得宣告權的這位礦工有權在帳本上給自己加上一條帳目,向大家表示:「各位,我完成了這個區塊的工作量證明!所以你們現在應該要承認我的帳戶持有更多的比特幣了。」

  簡單來說,取得該區塊宣告權的人就可以獲得一些比特幣,這正是所謂的「區塊獎勵」——世界上的所有比特幣都是從這個環節「誕生」出來的。

  是的,你當然也可以用你的電腦來和其他的礦工競爭——如果你幸運地「嘗試」到了這個區塊的工作量證明所需要的那組數字,那你就會得到這個區塊應有的獎勵。這樣的過程看起來就跟礦工進去礦洞裡面挖黃金沒有什麼兩樣,沒有人知道什麼時候會「挖」到比特幣,同時又在替整個比特幣世界探勘新領域,所以我們通常會稱這樣的行為是「挖礦」。

  一般而言,在家用電腦的領域可以使用 CPU 或是顯示卡來嘗試這些雜湊值。由於顯示卡有很多個處理單元,比 CPU 還要更利於平行計算、同時間嘗試大量的雜湊值,所以大部分情況下,想提升挖礦能力就必須挑選適合的顯示卡來挖礦。

  而最近半年的比特幣價格從一萬美金升到五萬美金,有許多專業的礦工大量買入顯示卡,這也是你近來很難買到顯示卡的原因了。

  慢著!先不要因為聽到比特幣一顆要五萬美金就急著去 Google 找比特幣的挖礦程式,現在用家用電腦來挖礦已經不是明智的方案。首先,目前世界上已經有大半的算力被專業的礦工團隊掌握;其二,這些礦工甚至在硬體方面特地設計出比顯示卡還要更有利於挖礦的計算晶片;其三,目前比特幣的區塊獎勵已經不如十年前豐厚,相當於要整間學校的學生去分享一包洋芋片那樣困窘。

  所以,如果你想要比特幣,就還是只能乖乖地去交易所,像買股票一樣買入它吧。



。要是大家都來挖礦,比特幣會不會通膨?

  續著說上一段。比特幣的區塊獎勵是會隨著時間慢慢減少的,這是由於比特幣在創立的時候便設立好規則:

  1. 工作量證明的條件嚴苛程度會在大家公認的規則下,隨著區塊產生的速度來自動調整,如果近期的新區塊產生得太快,難度就提高;區塊產生得太慢,難度就降低。

  2. 從第一個區塊算起,每個區塊的獎勵是 50 BTC,每隔 21 萬個區塊,之後的獎勵就會減半——也就是說,第 21 萬到第 42 萬個區塊,每個區塊的獎勵是 25 BTC;第 42 萬到第 63 萬個區塊,每個區塊的獎勵是 12.5 BTC

  在上面兩條規則的動態調整之下,比特幣的「發行」速率被穩定下來,大約每隔四年就會發生獎勵減半的情況。這個等比級數和,最後會在 2140 年的時候收斂到 2100 萬顆,此後將不再有新的比特幣產生,到那時候礦工就只能向比特幣網路裡面的使用者收取手續費了。注意,這裡的意思並不是指西元 2140 年以後才需要交易手續費,現在的比特幣交易一樣是需要付出手續費的。

  也就是說,全世界只會有 2100 萬顆比特幣,它會像股票或黃金一樣有漲有跌,但是絕對不會出現因為發行過多而產生通貨膨脹的狀況。也因此,這樣的稀缺性讓比特幣有了「數位黃金」這樣的稱號。

  即使是身為貨幣結算體系的核心的美金,它仍然受美國政府和聯準會影響(操控)甚鉅。在近年來美國想印鈔就印鈔的狀況下,大概也算是成了比特幣逐漸受到重視,並且使得價格推升的其中一個理由了。



。關於加密貨幣的投資

  由於這些程式碼都是公開流通的,所以只要把比特幣的程式碼拿來改一些細節,就誕生了新的加密貨幣協定,例如我可以去把比特幣的程式碼改一改,然後取名叫做豬腳幣,至於會不會有人覺得它有用,那當然又是另一回事了。目前市面上的加密貨幣有成千上百種,這些加密貨幣都是以比特幣的規則作為基礎而誕生的,俗稱山寨幣。

  也因此,我們在幣安、火幣網、BitoPro 等等的知名加密貨幣交易所裡,通常不會只有比特幣可以買賣,現在的加密貨幣交易所就像是股市一樣,有很多不同的幣種可以買賣。因為比特幣是幣圈裡最有代表性的始祖,所以才會常常被特別拿出來講。

  之前也有聽到有人來問:「比特幣一枚要好幾萬美元,那手上只有幾千塊的人是不是就沒辦法買了?」事實上這是錯誤的觀念。比特幣的最小單位是 0.00000001 BTC,也就是一億分之一枚比特幣,稱為 Satoshi(重音在第一個音節 sa)。

  這個最小單位只是大家的共識,如果將來比特幣的幣值大到需要再往下切分,只要讓大部分的人取得共識、同時修改比特幣的協定,那就可以辦到了。

  所以,比特幣價格在 $50,000 的時候,你當然有辦法用 $50 買入 0.001 顆比特幣,而不是說一定得一口氣花費 $50,000 來買入完整的一枚比特幣,就好像你可以在股市一次只買一股而不是一張(1,000 股)那樣。

  講到這裡,雖然我自己有實踐定期購入比特幣的投資策略,但我就不去慫恿大家買比特幣了,畢竟幣市的風險比起有政府監管的股市而言還要高出許多,去年臺灣也有買比特幣買到跑去跳樓的案例。如果有打算在幣圈裡投資,請先衡量自身的財務狀況以及你能夠承擔的風險,再三考慮過才開始吧。

  大概就這樣。關於區塊鏈技術近年的應用,以後有機會再來寫文分享給大家,感謝大家看到這裡。



。後記

  礙於篇幅,實在沒有辦法講太多比特幣的技術細節,只能先把「比特幣到底怎麼『挖』出來的」這些基本的原理交代完。如果深入去瞭解比特幣應用到的技術的話,就可以感受得到比特幣是多美的發明。

  時至今日,仍然沒有人知道 Satoshi Nakamoto 究竟是何方神聖,甚至連它是人還是團隊也不得而知。比特幣的系統設計精良得讓人覺得恐怖,每個環節都被完美地解決了。在算力的單向注入之下,世界上的財富也一點一點流進加密貨幣的虛擬世界……



插圖素材:いらすとや
延伸閱讀:But how does bitcoin actually work?
 

送禮物贊助創作者 !
50
留言

創作回應

疾風的噗尼噗尼彈
優質
2021-10-03 11:40:00
每個男生都該有姊姊
有些不懂的想問問
1.假如有一個區塊我們稱作A,那麼A區塊本身是只有第一部份以及第二部份嗎?而挖礦者的工作是用窮舉法找出第三部分?
2.每一個新的區塊會記載一段時間內全世界交易紀錄我的理解沒錯嗎?如果有很多分支區塊(A、B、C)的話甲交易給乙20元會寫入哪一個區塊?
2021-10-28 09:45:08
解凍豬腳
第一點沒有錯
每個完整的區塊都包含了三個部分:
A1. 上一個區塊三個部分一起算出來的雜湊值
A2. 這個區塊所記錄的交易內容
A3. 工作量證明
工作量證明所填的數字必須使得 hash(A1+A2+A3) 合乎規定

你所提到的第二點,可以這麼說沒錯,但是對一半
使用者在提出交易的時候通常會附上少許的手續費給礦工作為獎勵
這個手續費的多寡可以由使用者自己決定
依照市場的法則,礦工自然會選擇獎勵比較豐厚的交易來打包
比如說目前礦工選中了世界上其中 8 筆手續費給得比較多的待確認交易
然後礦工開始把它們打包,窮舉出合規的工作量證明

所以如果你提出交易的時候手續費給得太少
這筆交易可能就會比較慢才被礦工注意到,甚至完全被忽略
就好像公司提供一個低薪又累人的工作,很可能久久才招到一個應徵者

一般使用區塊鏈送出轉帳交易請求的時候
的確同一個區塊可能會剛好有多個礦工近乎同時找到合規的工作量證明
導致分叉成 A、B、C(甚至更多)個區塊

這種情況下,這些礦工可能會分別從 A、B、C 不同的分叉來延續下一個區塊
接下來大家會同時保留 A、B、C 區塊,等待下一個區塊產生
看誰先拿到,大家就遵循最長的那一個鏈,這就是最長鏈原則

如果你使用比特幣(或其他加密貨幣)轉帳
很可能會在交易介面注意到「需要等待 4 個確認後成功轉帳」之類的訊息
就是基於這種原因,並非「產生區塊的當下就等於轉帳完成」這麼簡單

由於最長鏈原則是一個大家從初期就開始使用的普遍共識
所以落後方就算繼續堅持他的那條分叉鏈,意義通常也不大
(而且產生區塊的速度也很難追得上最長鏈)
畢竟區塊鏈本身就是基於多數共識,沒被大家認同就等於無效

不過也有一些情況
比如軟體更新、鏈上的交易規則或共識的更新
又或者是某些開發團隊希望自行開發新功能而刻意為之
導致新規則和舊規則都有一定的用戶群體各自維持
這就是所謂的硬分叉
像是 BCH(比特現金)就是 BTC 的一個硬分叉鏈
2021-10-29 11:31:18
神秘贊助者向創作者進行贊助 ✦
有人默默贊助你,願創作能量隨時飽滿!
2021-11-10 23:28:25
解凍豬腳
感謝贊助~~~[e35]
2021-11-11 17:49:30
骨幹路由器
如果比特幣持有者死掉 那這些比特幣不就回不了交易體系裡循環了
2021-12-07 10:54:31
解凍豬腳
沒錯,所以目前世界上有很多比特幣已經永遠消失了
2021-12-07 11:08:45
畫貓的男孩
可是這東西不合理吧 去中心化是很好的概念 防止現實有人偷印錢導致金融混亂 但那個極耗電的運作方式本身就是一個問題。
再來 若是以貨幣來講 一個整天漲幅那麼大的東西怎麼能稱為貨幣?
好像我有一張100塊 今天可以買下一棟房子 到明天只能買碗陽春麵
每個人財產波動極大 那根本就只能算是股票了 一種投機行為 而不是真的能拿來交易的東西
2022-05-18 22:17:14

相關創作

更多創作