1. 程式人生 > >從打麻將學習區塊鏈的“挖礦”原理

從打麻將學習區塊鏈的“挖礦”原理

崔哥最近五一節回老家了一趟,看望九十多歲的老外婆。老人家依然精神矍鑠、耳聰目明,她口授的長壽之道是:一、終身勤勞,到現在還每天四點起床,忙家務農活到晚上七點睡覺;二、保持樂觀心態,想得開,放得下,煩惱不過夜。無論是開發還是投資,大家都要注意身體,少了健康這個1,最大的成就也都是0。這是一點題外話。

言歸正傳,在之前的三分鐘系列裡面,我們介紹了1. 區塊鏈的來源;2. 區塊鏈的特點;3. 什麼是“去中心化”。今天,我們接著講區塊鏈上的財富是怎麼來的。就像上面提到的乒乓球比賽一樣,雖然小白球你來我往,類似於進行交易,但是交易本身只是一筆筆財富轉移的記錄,並不會創造財富。那麼,“真金白銀” 的比特幣到底是從哪裡來的呢? 這就涉及到了 “挖礦”。也就是說,每個比特幣,都是通過挖礦這種活動所產生的。

在一個區塊鏈網路中,存在著成千上萬的網路節點。為了保證節點之間的同步,新區塊的新增速度不能太快。試想一下,你剛剛同步了一個區塊,但這時別的節點又有新區塊生成,你不得不放棄手上的工作,再次去同步,最後變得筋疲力盡。

所以,中本聰又想出了一個絕妙的點子:故意讓新增新區塊變得很困難。他的設計是,平均每 10 分鐘,全網才能生成一個新區塊,一小時也就六個。這種產出速度不是通過命令達成的,而是故意設定了海量的計算。也就是說,只有通過極其大量的計算,求解一個數學題,才能把新區塊新增到區塊鏈。由於計算量太大,所以快不起來。這個過程就叫做挖礦,因為解題的難度,就好像在全世界的沙子裡面,找到一粒符合條件的沙子。求解的機器就叫做 “礦機”,操作礦機的人就叫做 “礦工”。這個計算過程,就是著名的工作量證明(Proof of Work)演算法。按照中本聰的最初設定,礦機每“挖”出一個區塊,就可以獎勵50個比特幣。每達到21萬個區塊,獎勵就減半,現在已經減少到了12.5個比特幣。這,就是現在市場中所有比特幣的來源。

通過這種巧妙的方式,全世界成千上網“礦機”們都在不眠不休地計算中本聰出的數學題,為獲得獎勵的比特幣而“廢寢忘食”。

   這樣的“礦場”彙集了大量的礦機,用於求解中本聰出的數學題

我知道很多讀者看到這裡可能已經有點犯困了,那麼可以結合生活中最常見的一個例子來說明。

簡單來說,“挖礦” 的過程其實類似於打麻將, 四方最後有一方湊出了胡牌的牌型,就當與生成了接出了一道數學題,達到了滿意的結果,胡牌的人就成了 “礦工”,得到相應的獎賞 (若干個比特幣)。 胡完一牌,就是一個區塊生成,所以當前交易記錄在內。然後大家接著下一局,繼續湊胡牌牌型。

如果一句沒有人胡牌,也就是大家花了時間,但是沒有生成區塊,就重新開局。如果投入的時間 / 資源小於獲得的獎賞,這個礦工就虧了。但是, 如果有人摸了兩把就胡牌了,相當於很快就解題成功, 這個礦工就大賺了。

東西方的智慧,在一點上碰撞出了神奇的火花。

另外一個可以拿麻將來舉例的應用是:現在除了比特幣以外,還有瑞波幣、小蟻幣、以太坊等等各種加密貨幣。為了便於理解,可以把它們想象為,在麻將規則基礎上衍生出來的各種地方打法,譬如血戰到底的四川麻將、講求技巧的上海麻將等等,雖然各有特點,但是百變不離其宗。

崔哥最近在Gitchat上開了一門課,叫做“從零開始幫助您用 Python 打造自己的區塊鏈”, 如果你想要更快地掌握區塊鏈的核心演算法,歡迎掃描下方二維碼,關注本課程。


也歡迎隨時使用Chat快問,向我提問: