儘管大家都有帳本存取權,並不是人人都能隨意更改帳本。在比特幣中,每批交易只能有一個人負責記帳,為了獲得記帳權,共同維護帳本的人或電腦(又稱節點)必須比賽解出一個複雜的運算問題,最先解出的人就能獲得記帳權,這個過程也被稱作「挖礦」,而參與搶答的人就叫「礦工」。在記帳前,礦工會檢查這筆交易的發起人是否合法,也就是如果交易內容是從A帳戶轉100元到B帳戶,那必須先確認該筆交易是否由A發起。同時,礦工也會確認這筆資金過去是否沒被花過,避免重複花費。由於挖礦程式也是公開透明的,大家都認同並遵守這套遊戲規則,因此不會懷疑由此新增的交易資料。
在區塊鏈的架構裡,每批交易資訊都會被打包成「區塊」儲存在網路中,每個區塊會按照新增的時間順序串連起來,形成一條「鏈」。照理說,每個區塊後面只會接一個區塊,但如果一個區塊後面接了兩個區塊,就會「分叉」成兩條鏈,正常情況下,比較長的那條鏈會被保留,否則就會出現好幾種不同版本的帳本。
再談細一點,礦工挖礦時必須面對的那些運算,其實是出自密碼學的雜湊函數。教導密碼學和區塊鏈的台灣大學數學系兼任助理教授陳君明解釋,雜湊函數會把餵給它的東西打亂,很難預測結果,無論丟進去什麼內容,最後只會算出一個長度固定的雜湊值(hash)。
以比特幣為例,礦工把整包區塊內容丟進雜湊函數後,會算出256位元的雜湊值。其中,每個區塊有好幾個欄位,包含上個區塊的雜湊值、交易內容,唯一可以動的欄位稱作「隨機數」(nonce)。而礦工的工作就是不斷調整隨機數、放到雜湊函數中,直到算出的數字符合條件,才能把區塊接到鏈上,完成記帳。在比特幣的世界裡每十分鐘只能新增一個區塊,所以挖礦的人越多,計算難度也會越高。
不過挖礦需要耗費大量運算資源,大家為什麼願意投入?為了鼓勵更多人挖礦,比特幣結合激勵機制,成功挖到礦的人可獲得一筆固定的挖礦獎勵,和交易發起人提供的交易手續費。比特幣的挖礦獎勵每四年減半,從2009年的50顆,到現在只剩12.5顆,不過隨著交易量變大,礦工可獲得的交易手續費也變多。
除了挖礦,雜湊函數也被用來產生每筆交易的ID──相當於數位指紋,而這些ID又會和上個區塊的雜湊值合起來成為新區塊的雜湊值。由於只要內容稍有更動,算出來的雜湊值就會截然不同,其他礦工也會發現哪筆交易被篡改,並捨棄掉該交易。可以說是雜湊函數,造就了比特幣交易不可抹滅的特性。