Angelina H. Huang
Nov 26, 2018 · 11 min read

上次故事說到由區塊與鏈組成的區塊鏈,這次要來聊聊執行這浩大工程背後辛苦揮汗(繳電費)的礦工們。

區塊鏈技術博大精深,本文會盡量以深入淺出的方式,帶領大家逐步認識區塊鏈技術從淺到深的原理。

礦工聯盟 (本圖片係以創用CC 姓名標示 4.0 國際 授權條款 授權。)

礦工究竟是誰?其實礦工就存在你我之中!還記得區塊鏈是將資料存在分散的節點上嗎?每個節點可代表一台電腦或伺服器,而這電腦前都有一個宅宅…不!是志向偉大的網民在操作,這些網民就是我們的礦工!礦工的主要任務有三項:(1) 打包交易紀錄造區塊、(2) 將區塊傳給其他節點驗證、(3) 節點們確認該區塊無誤,將區塊上鏈。

上篇故事已經說明打包交易紀錄造區塊的步驟,但在繼續解釋礦工的任務前,我們需要先了解造區塊之前發生的事,才能解釋為何礦工在區塊鏈扮演這麼重要的角色。

甘道夫(左)的電子帳戶地址A要匯1000枚比特幣給勒苟拉斯(右)的電子帳戶地址B (本圖片係以創用CC 姓名標示 4.0 國際 授權條款 授權。)

當灰袍巫師甘道夫要匯1000枚比特幣給精靈勒苟拉斯時,他在電子帳戶地址(由數字與英文字母組成的一組隨機序號)輸入這筆交易,電子帳戶地址會產生一對公鑰(Public Key)和私鑰(Private Key),公鑰如同你的Email帳號,大家都可以在公開網路找到你的Email,但私鑰就是你的Email登入密碼,只能自己知道。私鑰的功能就像幫這筆交易上鎖和簽上專屬的數位簽章,公鑰則是解鎖。甘道夫把他匯錢的交易用私鑰上鎖並封上自己的數位簽章,接著在區塊鏈上廣播這個交易的消息,此時,該筆交易會先進入區塊鏈上的「待確認交易區」,等待礦工取走驗證。通常附上的手續費越高,越快被礦工挑走打包。

換個角度看,私鑰代表資產的「支配」權,而公鑰則是資產所有權的「確認」。擁有私鑰的主人可以支配這個帳戶下的錢要轉去哪裡,公鑰則無法,只能確認這個帳戶的主人是誰,但是區塊鏈只認私鑰不認人,因此私鑰務必保管好!(本圖片係以創用CC 姓名標示 4.0 國際 授權條款 授權。)

礦工通常會希望一個區塊裝進越多筆交易越好,因為打造一塊區塊和上鏈要價不斐,耗時又耗電,不過在比特幣區塊鏈上,一個區塊的容量上限是1MB,而且礦工不是每筆都會挑進他的區塊,會優先挑出手續費較高的交易,因為可以賺進比較多錢。礦工也有自己的挑選程式來找尋報酬率較高的交易,但挑選交易並不是先搶先贏,每位礦工都可以挑同一筆交易進他的區塊,真正先搶先贏的時機在後面上鏈的時候。

假設礦工矮人金靂挑了甘道夫這筆交易,他會用甘道夫的公鑰去核對交易,驗證是否真的來自甘道夫本人的指令,而不是駭客半獸人的假訊息。私鑰上鎖加密的交易內容,可用公鑰來還原,但你可能會有疑問,如果我交易內容都被人看光光了,不就沒有隱匿性?這就要提到區塊鏈的特性之一:匿名性,後來也成為監管機構擔憂之處。在比特幣區塊鏈上的交易都是匿名的,有的只有匯出的電子帳戶位址A和匯入的電子帳戶位址B,所以甘道夫與勒苟拉斯的交易在區塊鏈上只看的到A轉帳給B,A和B背後的藏鏡人是誰,除了本人以外,大家都不會知道。

駭客半獸人的攻擊 (本圖片係以創用CC 姓名標示 4.0 國際 授權條款 授權。)

由於一對私鑰和公鑰是由數學式算出相對應的鑰匙,公鑰A只能打開私鑰A上鎖的文件,如此一來,礦工就可以確認這筆資料是來自電子帳戶A(甘道夫)。接著,礦工確認甘道夫過去的交易紀錄,他的帳戶結餘是否足夠支付要匯出的1000枚比特幣。

礦工收到交易廣播後會確認:

1. 該筆交易是否來自帳號A本人傳輸的

2. 帳號A的餘額是否有足夠的錢

礦工驗證該筆交易是否來自帳號A本人傳輸的,還是來自駭客半獸人的攻擊 (本圖片係以創用CC 姓名標示 4.0 國際 授權條款 授權。)

兩道步驟確認完後,礦工便把這筆交易放入準備打包的區塊內,下一步開始造區塊,也就是開始挖礦囉!挖礦過程類似解數學謎題,還記得上一篇區塊與鏈的故事裡,有一塊黑的令人看不透的Nonce和遊戲規則Difficulty嗎?就是Hash Function加密步驟,礦工拿區塊鏈上最後一個區塊的Hash值加上新交易資料,然後要猜Nonce是什麼,讓產生出來的新Hash值小於/等於Difficulty,因此所謂「挖礦」,就是挖出這個Nonce到底是多少的過程。

新Hash值(新區塊)5 = 前Hash值(上一個區塊)1 + 新交易資料2 + Nonce(加密)3 ≤ Difficulty(遊戲規則)4 (本圖片係以創用CC 姓名標示 4.0 國際 授權條款 授權。)

Nonce是一個不斷改變的隨機數,加入密碼學SHA-256運算,最後算出以0為開頭(又稱為前導零)的Hash值,如果這個Hash值符合Difficulty,就代表成功解出Nonce。如果不符合Difficulty要求,則通過遞增Nonce的值,重新運算。一個符合Difficulty的Hash值是由N個前導零構成的,而幾個零就取決於當時區塊鏈網絡中的Difficulty,前導零的數目越多,就代表越難。

根據 https://www.blockchain.com/explorer 的最新比特幣區塊顯示(截至2018–11–20 06:54:09),目前Hash值有18個前導零,理論上需要嘗試62的18次方次才能解出[註1],礦工需要投入大量的運算設備、電力,才能產生如此龐大的運算量來猜到這個Nonce。 (本圖片係以創用CC 姓名標示 4.0 國際 授權條款 授權。)

Difficulty的目的除了確保加密的安全性外,也為了控制新區塊產生的速度,目前比特幣區塊鏈是控制在每10分鐘產生一塊,如果新區塊生成速度變快,區塊鏈就會提高Difficulty,增加挖礦難度,讓速度趨緩,反之亦然。

這整個過程就是「工作量驗證」(Proof-of-work, POW),誰工作效率最好,誰就是贏家。在比特幣區塊鏈上,需要使用CPU的運算能力[註2],不斷的猜Nonce、不停的算Hash值,而算力非常依賴電力[註3]。大家可能聽過學生在學校宿舍偷挖礦,讓宿舍電費暴漲的新聞吧!根據數位貨幣網站「Digiconomist」資料,比特幣每筆交易使用的電力為944千瓦小時(KWh),相當於台灣小家庭三個月的用電量[註4]。

比特幣區塊鏈只有一條,如何決定誰可以接上下一塊區塊?此時來到緊張刺激的時刻了,要能夠上鏈,除了猜對Nonce外,還要比誰最快解出Nonce,因此可以說是誰的算力最強,誰越有機會最快解出Nonce!這個規則衍生出礦池、礦場,以及51%算力的雙花攻擊等議題,我們後續再一一述說。

看完以上Nonce和Difficulty的介紹有沒有覺得頭很暈?看不懂也沒關係,主要想讓讀者感受一下,挖礦真的是很耗能源的網路活動。

第一名的礦工成功解出Nonce後,假設是我們的礦工矮人金靂,他會把這個成功的區塊廣播給區塊鏈上其他節點的礦工檢查,確認該區塊是否真的是最快的,且符合Difficulty的規則。確認無誤後,多數礦工便同意和承認這個區塊可以上鏈,這個過程就是「共識決」(Consensus),並把這個消息再次廣播給其他節點,而金靂除了獲得手續費外,還可以得到比特幣區塊鏈的挖礦獎勵。

礦工賺什麼?

1. 交易的手續費:使用者付費,由交易發起人(甘道夫的帳號A)支付,預設是฿ 0.00001/KB,但可自行加價,如同急件要付比較貴的費用。

2. 區塊鏈的獎勵:現在每一筆成功上鏈的區塊可獲得12.5枚比特幣[註5]。

一「工」歡樂幾「工」愁,那沒搶贏上鏈的礦工怎麼辦?其實也不能怎麼辦,當其他也在挖礦的礦工們,收到礦工共識的新區塊廣播後,只能丟下原本的區塊,重新回到「待確認交易區」挑選新交易打包,繼續搶挖下一塊區塊。原本解密到一半所耗費的算力和衍生的電費也就這樣付之一炬了,其實真的滿浪費能源的。

最後我們再重整一下礦工在區塊鏈的任務運作:

打包交易-->打造密碼區塊-->區塊上鏈

礦工的任務看似可簡單分成三個階段,但每個階段消耗的算力/電力是肉眼看不到的(只有看到電費帳單的當下會有深刻的感觸),可是區塊鏈技術的應用不只如此,也不應只有如此,它的去中心化乃至分散式儲存的概念,反而有助於達到節省能源,將算力和儲存空間的存取發揮到最大價值,我們將在下一篇故事介紹區塊鏈文章中常被省略,因為也比較複雜,但其實很重要的默克爾樹(Merkle’s Tree),這棵樹也是未來取代HTTP的IPFS星際檔案系統中,很重要的底層技術之一。

51%的雙花攻擊故事也會在後面故事和大家分享!

是默克爾的樹,不是德國總理梅克爾的樹(照片出自:http://www.merkletrees.org/

註1: 可參考「區塊鏈 Blockchain — 共識機制之工作量證明 Proof-Of-Work」的公式( https://www.samsonhoi.com/360/blockchain_proof_of_work

註2: 隨著炒幣熱潮,礦工升級工具到GPU圖形處理器/顯卡、FPGA,速度更快、算力更強,更因應市場需求而有ASIC專業礦機的誕生,其組成的礦池可集結龐大的算力。比特幣區塊鏈中以中國的比特大陸(Bitmain)和澳洲的澳本聰為首,最近的幣圈大事,就是兩大礦主為了比特幣現金(BCH)的硬分叉正式掀起算力大戰。這樣算力集中的狀況,其實也違反了區塊鏈去中心化的精神,演變成誰的算力大、誰說話的局面。

註3: 一天挖一個比特幣需要 25,256 度電量,以非營業用電非夏天月份的費率計算,超出 1,001 度以上費率為 1 度電 4.83 元,因此電費約為 12 萬元。夏天的電費費率較高,超出 1,001 度以上費率為 1 度電 6.13 元,一天挖一個比特幣就要花費約 15 萬元。(資料參考出處:https://ccc.technews.tw/2018/03/05/bicoin-mining-in-taiwan/)

註4: 參考出處:「吃電巨獸!比特幣每筆交易耗電 台灣家庭可用3個月」(http://ec.ltn.com.tw/article/paper/1190674

註5: 比特幣總額限制為2,100萬個比特幣,每創造出21萬個區塊,礦工獲得的比特幣獎勵就會減半。最近一次減半發生於2016年7月,此後挖出一個區塊僅能獲得12.5枚比特幣獎勵。

(本圖片係以創用CC 姓名標示 4.0 國際 授權條款 授權。)

這是一個關於礦工挖礦的故事由Angelina H. Huang製作,以創用CC 姓名標示 4.0 國際 授權條款釋出。
此作品衍生自https://medium.com/flowchain-tw/%E9%80%99%E6%98%AF%E4%B8%80%E5%80%8B%E9%97%9C%E6%96%BC%E7%A4%A6%E5%B7%A5%E6%8C%96%E7%A4%A6%E7%9A%84%E6%95%85%E4%BA%8B-e1a155a53cad

歡迎轉載, 並請在每篇轉載文章、每張使用的照片/影音資料下,標明作者 “Angelina H. Huang, Flowchain Foundation”和文章出處連結。

Flowchain Taiwan

Flowchain is the distributed ledger technology that required by the IoT and AI dapps built upon peer-to-peer IoT networks and ensures real-time data transactions.

Angelina H. Huang

Written by

Flowchain Taiwan

Flowchain is the distributed ledger technology that required by the IoT and AI dapps built upon peer-to-peer IoT networks and ensures real-time data transactions.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade