---
# System prepended metadata

title: 區塊鏈介紹 (讀書心得)

---

# 區塊鏈介紹 (讀書心得)
- The Bitcoin Standard & The Basic of Bitcoin and Blockchain


## The Bitcoin Standard 比特幣標準
本書寫自 2018 年，作者 Saifedean Amnous 是一位經濟學家，將以貨幣的歷史、發展討論比特幣的作為貨幣的可能。同時作者也是凱因斯學派的仇人，不斷抨擊政府濫發貨幣的行為。本書只會簡單提及區塊鏈的運作情形，以經濟的角度討論其意涵。

### 金錢
貨幣本身是沒有價值的，只是做為交易的媒介存在。當我們共同相信，這些貨幣，可以換取想要的物品，貨幣的價值由此產生。由此可知，貨幣的本質是購買力，而非數量。

我們以貨幣供給的速度區分，將貨幣分為硬通貨和軟通貨。硬通貨代表供給難以增加，反之，軟通貨則相反。而庫存流量比 (Stock-to-Flow ratio) 用來衡量貨幣的硬度，定義為貨幣現有的存貨除以生產量。可想而知，庫存流量比越高的貨幣越容易保值，因為新生產出來的貨幣不容易稀釋原來貨幣購買力。

### 原始貨幣
最早期，有些社會使用石頭、珠子、貝殼等天然物作為貨幣，這些貨幣都是當地開採數量有限的物品，代表地域性的高庫存流量比。但隨著歐洲移民者用其他地方開採的天然物搜刮當地的物資時，直接破壞了當地經濟，讓原有的貨幣變得毫無價值。

### 貨幣金屬
隨後大家便以金屬作為貨幣使用。常見的有金銀銅三種金屬。統治者會把金屬製作成固定大小的錢幣，並標記重量作為交易使用。在工業使用上，金是最沒有工業價值的，而銀和銅都有。金也是開採難易度最高的，因此黃金製成的貨幣有最高的價值，銀銅次之，適合用於小額交易，但隨著政府開始儲備黃金發行紙鈔之後，銀銅的小額交易功能變被取代，退出貨幣的舞台。

同時，對於使用任何原物料作為貨幣的情況，最後都是貨幣生產者獲得最終利益而掠奪投資者的資產。一般金屬有工業需求，所以金屬存量大約和需求維持固定比例。若我們把該金屬作為新的貨幣使用，新需求會推升金屬的價格，導致生產者大量開採，直到價格回到原來水準。

但作為貨幣的使用者，必然會開始用新貨幣購買物品，而這又會降低貨幣價格，讓當初新貨幣的投資者虧損。

### 法定貨幣
19 世紀開始之後，歐洲各國使用黃金支持的紙鈔，而各國的匯率就是兩國銀行的黃金庫存比。但是在一次世界大戰之後，這樣的制度開始崩潰。
政府承擔儲備黃金並發行貨幣的責任，在戰爭期間，政府消耗大量財源，但無法透過徵稅的方式補足缺口，最好的辦法便是發行更多貨幣，這也直接導致貨幣貶值。在一戰期間美英等國貶值3–6%，但德國卻貶值將近五成。
1922 年的熱那亞條約，使得各國政府允許將美元和英鎊視為同等黃金的儲備資產，便推升的美元的霸權地位。

### 商業週期與金融危機
而在 1930 年代的全球經濟大衰退，就有海耶克和凱因斯兩位經濟學家分別對此問題提出經濟解方。

[Youtube](https://www.youtube.com/watch?v=GTQnarzmTOc)

而凱因斯認為經濟衰退的原因是來自總支出水平下降，同時將支出下降的原因歸咎於動物精神，這等於沒有說明。在經濟衰退時，失業率上升，代表著支出水準降低，所以由政府發行貨幣並增加財政支出可以走出經濟衰退。而只有在支出太高的時候才會發生通貨膨脹，因此在失業率還沒下降的當下，不會有通貨膨脹的問題。然而 1970 年代的停滯性通膨發生，推翻了凱因斯原來的觀點。

海耶克認為儲蓄與時間偏好有關，儲蓄是為了在未來累積更多的資金和消費，並投資增加生產效率的企業。書中舉了一個例子，琳達原本每天花 8 個小時捕魚，但現在改成花 6 個小時捕魚，2 個小時製作釣竿。一開始會少吃很多魚，等到釣竿製作完成之後，琳達就可以讓捕魚的效率提升 2 倍，從而有更多的時間製作更好的工具。這個例子想說明的是，現在的資本累積是為了日後生產效率的提高，而其中的關鍵就是低時間偏好，願意忍受一段時間的捱餓。

他代表的奧地利經濟學派認為，利率只是反映儲蓄和投資需求的關係。當經濟衰退時，消費降低儲蓄增加。只要儲蓄累積到一定程度時，必然會有新的投資需求，而經濟也將再度復甦。經濟衰退只是對扭曲的結構適時的調整。

政府試圖控制利率並發行更多貨幣時，鼓勵企業舉債投入生產，但實際儲蓄資本並沒有增加。而超額的資金去競爭有限的資本時，自然抬高資本的價格，使得企業最終無利可圖，導致當初的投資失敗。這些錯誤投資造成不必要的資金浪費，而過度擴張的企業投資失敗造成失業率上升，導致新的經濟衰退。

回到一開始講的，貨幣需要具備保存價值的功能。Mises 認為人們關注的是貨幣的購買力而非數量，因為貨幣可以無限拆分，升值貨幣可以更小的單位購買相同數量的物品。只有隨著時間不斷增值的健全貨幣，才能讓人們願意儲蓄累積資本，並投資促進經濟成長。而凱因斯體制下的不穩定貨幣，低利率讓人們不斷追求高風險的回報，從而彌補貨幣貶值帶來的損失。數據顯示，從1970年代開始，各國的儲蓄率就不斷下降，只有維持黃金儲備的瑞士仍有著 15% 左右的儲蓄率。

總結來說，凱因斯認為債務是刺激經濟的手段，但奧地利經濟學派認為債務是在消耗未來的資本，當信用擴張時看似一片繁榮，但緊縮之後將會導致經濟衰退，就像前面說的，最後還是貨幣的生產者獲利，也就是不斷印鈔的美國，因為其他國家還是將美元當作儲備資產。

最終，羅斯福總統選擇出手救市，大幅提高政府支出、刺激經濟。可以說凱因斯學派的成長很大部分受到政府的支持，因為沒有政治人物願意在經濟衰退的時候選擇不干預，放任市場找出新的平衡。並且，沒有人可以拒絕這樣的權利。

### 比特幣
比特幣來自於中本聰在 2008 年時的一篇文章，試圖以區塊鏈的技術去除第三方中介的存在。

一般交易時分為現金支付和中介支付，銀行轉帳、信用卡等方式都屬於中介支付。中介是為了驗證數位交易時的重複支付問題 (double spending)，因為在交易時，你無法確認收到的數額是否被同時發給另外一個人 ( 這裡指的是背後的現金擔保)，這時就需要中介負責確認。而中本聰想在免去中介存在的情況下解決這個問題。

區塊鏈是一個公開的儲存結構，紀錄從古至今的每筆交易。每個區塊彼此相連，因此可以不斷往前追溯。因此，你所擁有的每一顆比特幣的來源都可以完全被追溯，意及被驗證。

每次交易時，需要請節點幫忙將交易紀錄上傳至區塊鏈網路，節點蒐集好一包交易並上傳到區塊鏈上。區塊鏈有非常多個節點負責這樣的工作，而他們必須計算交易的 hash 值來爭奪上傳區塊的權利，以此獲得區塊獎勵。計算hash 是一個將交易紀錄轉成未知隨機數字的過程，只有隨機數字在臨界值的節點才能上傳區塊。計算 hash 本身沒有意義，只為了獲得上傳區塊的獎勵，但是競爭為區塊鏈提供安全性，因為計算 hash 需要耗費時間，而節點不會想因為無效交易而無法獲得獎勵，因此會乖乖上傳有效的交易紀錄。

開始時，比特幣每十分鐘產生一個區塊，每個區塊有 50 顆比特幣的區塊獎勵，每個區塊可以容納 1 MB 的交易紀錄，約等同於 3000 筆交易，實際上 VISA 一秒內就能處理完這些交易了。雖說比特幣區塊每十分鐘產生一次，當節點便多時，隨機數字低於臨界值的機率便會增加，使得區塊產生時間降低。因此系統會新區塊鏈的上傳時間，調整臨界值的大小。

這麼複雜的設計只為了一件事情，在沒有第三方中介的情況下解決 Double Spending (重複支付) 的問題。如果沒有這個需求，一切都會簡單許多，那麼比特幣為甚麼那麼重要呢 ?

比特幣是對政府濫發貨幣的抵抗，同時也是取代黃金儲備的最好方式。比特幣的總供應是有上限的，每個區塊 50 顆比特幣，並且階段性減少至 0 ，最後總計發出 2100 萬枚比特幣。如果真的越來越多人想擁有比特幣，就會推升比特幣價格成長，而比特幣可以被切分成 100,000,000 個聰 (Satoshis)， 因而更適合做為價值儲存。儲蓄是因為預期未來購買力增加，比特幣在總供應量不變的情形是最完美的價值儲存媒介。黃金等原物料雖然開採不易，但隨著技術增加，原物料的開採量實際上逐年增加，與之相比，比特幣是唯一無法繼續增加供應的物品。

另一方面，比特幣比黃金有更方便的結算系統，因為比特幣不需要搬運，幣且轉移不須額外審核，完全由區塊鏈進行驗證。這裡作者其實並沒有把比特幣當作數位現金，因為那成本太高，而是想像各國央行儲備比特幣並以此發行國家貨幣，等於重新回到金本位的時代，拔除美元的經濟霸權。

### 結語
回過頭來，比特幣在 2018 年作為數位黃金的呼聲真的很高，可想而知，這是一件很難的事情，要抵抗的是這一百年來的壟斷事業。現在更是把比特幣看做離岸美元信用擴張下的風險資產，也跟當初的設計想法背道而馳。並不是設計不好，而是時代演進，由黃金、貨幣、證券的信用擴張體系並不是一夕之間就可以達成的。

## The Basic of Bitcoin and Blockchain
這本書很適合對於比特幣原理有興趣的人，包括當初怎麼設計的、為甚麼這樣設計，還有以太幣的出現，都有很清楚的解釋。

### DIGITAL MONEY
比特幣的起源來自 2008 年中本聰 (Satoshi Nakamoto) 在密碼學網站的一篇文章 <Bitcoin: A Peer-to-Peer Electronic Cash System>。望文生義，這是一個關於電子支付的系統，而 Peer-to-Peer 是指這個系統不須要任何中介的存在。
在此之前，我們先理解電子支付是怎麼發生的。電子支付與現金支付最大的不同是，貨幣只是電腦上的一個數字，要怎麼確認對方真的有付你這筆錢，或是其實他已經把這筆錢給過另外一個人了。這個問題稱為 Double Spending 問題，因為數位資產的複製容易，同一筆數位資產很容易可以被用作支付兩次。

一般情況下，會有一個我們信任的 third party 處理這個問題。
![](https://i.imgur.com/Lpa78mD.png)

舉例來說，Alice 和 Bob 都在同一個銀行內有開戶，交易時只要把 Alice 的餘額減 10，然後 Bob 的餘額加 10 就好。

如果 Alice 和 Bob 的戶頭分別在兩個不同的銀行，事情就會有點麻煩。
![](https://i.imgur.com/icSG60T.png)


對銀行來說， Alice 和 Bob 的錢都是一種負債，因為日後需要償還給他們。而銀行也獲得他們存入的紙鈔 (Banknote)。但轉帳時，真的轉移紙鈔給對手銀行還是太麻煩了，因此實際上銀行會在對手銀行中開設自己的銀行帳戶。
![](https://i.imgur.com/fbCwRms.png)


照這樣如果有 1000 間銀行，就都必須在另外 999 間銀行都設立戶頭，有點太麻煩了。

### 區塊鏈
比特幣是一個基於區塊鏈的記帳系統。因為區塊鏈基於密碼學和共釋機制等技術建立，又稱為加密貨幣。應用密碼學可以確保每個人的交易紀錄不被偽造，而省去驗證個人身份的問題。

首先，每個人都需要擁有一個帳戶，創建帳戶的方法是利用 ECDSA 橢圓曲線產生兩個點作為公鑰 (Public Key) 和私鑰 (Secret Key)。私鑰是擁有錢包帳戶的證明，公鑰是錢包帳戶。私鑰的長度為 2²⁵⁶ bit。如果被別人知道，他就能隨意使用你的錢包地址。

有沒有可能別人猜到你的私鑰呢? 在機率上微乎其微，因為 2²⁵⁶ = 1.15 * 10⁷⁷，就算地球上 70 億人口，每一秒換一次鑰匙，也只有 2.2* 10^17，還是很難猜的到。

### 雜湊函數 Hashes
Hashes 是一個固定規則的函數，確保值域的不可預測性，讓人無法從輸出的任何資訊推斷出輸入的範圍。就連相鄰的兩個輸入也有非常不同的結果。而且概率上，不同的兩個輸入會有不同的輸出。我說概率是因為這確實發生過。
[news](https://kknews.cc/zh-tw/tech/85emvxq.html)

加密貨幣中我們使用的是 SHA256。
![](https://i.imgur.com/xrxLdxM.png)

Hashes 在加密貨幣中，主要用在挖礦、交易識別、和區塊識別上。

### DIGITAL SIGNATURES
Digital signature (數位簽章) 和 electronic signature (電子簽章) 最大的差別是 數位簽章和內文有關，電子簽章則無關，很可能發生偽造內文訊息，或中途被攔截修改。
![](https://i.imgur.com/7Iy3uYb.png)

只要是被私鑰簽過名的交易，我們都可以驗證是否來自該帳戶地址。如果驗證不通過，就可以杜絕偽造交易的情形。
![](https://i.imgur.com/WozYpv9.png)

而為了控制簽名大小，我們是對交易訊息的 hash 值做簽名而不是訊息本身，保證每個簽名的大小固定。

### Cryptocurrencies 加密貨幣
許多人常被貨幣的名詞誤導，而關注於儲備貨幣和利率，但 Digital Token 是比較好的解釋。

比特幣是由許多電腦共同維護的分類帳本。這些電腦被稱為節點。節點負責驗證交易，有些特殊的節點則是將交易捆在成為一個新的區塊。

所有比特幣的交易都被記錄在區塊鏈上。

在傳統金融裡面，需要對應每個人的ID和帳號。
![](https://i.imgur.com/KIGQIXG.png)


由管理者負責確保雙重支付不會發生。
如果要去除管理者，第一步是免除建立帳號的過程，任何人都可以輕易地建立自己的帳戶。
![](https://i.imgur.com/3t0sMwi.png)

你也不需要密碼，因為你有私鑰。

第二步，把只有管理者才能擁有的帳本分散給所有人看到。每個人都有檢驗和新增帳本的權利。你只要把新增交易紀錄的帳本傳送給附近的節點就可以了。

但這樣會有交易紀錄混亂的問題。每個人都按照自己的意願新增帳本，如此便沒有一致性，如何知道以誰的帳本為準呢?
![](https://i.imgur.com/VPlXl3x.png)

Block 是一包的交易紀錄，大家蒐集好交易紀錄後批次上傳。交易更新的速度開始慢了下來，而在你的 block 之後，有人又上傳了新的 block，我們會說你的 block 被 confirm 了一次。為了保持一致性，必須犧牲帳本更新的速度。

每個節點任意更新區塊似乎還是有點混亂，那我們在更進一步約束更新的時間。同時我們也不相信節點會乖乖依照約定的時間更新區塊，因此我們賦予每次更新前一個難題。

### Proof of Work

這個難題有點像連續投到 100 個 6 的節點獲勝。節點把交易資料 hash 成一個隨機數字，我們要求結果必須小於一個臨界值，例如: 1000。如果失敗，這個 block 就無法上傳，只能嘗試調換交易的順序、或是更換交易資料。但這樣有點麻煩。

因此我們選擇讓節點在 block 內添加任意的數字 nonce，便可以不斷嘗試不同的 nonce 直到成功達成條件。這個難題成立的因素就是，無法控制 hash 的結果，除非真的算過一遍。
到這裡為止，整個區塊鏈的世界就慢了下來。

### Transaction Fees
為了讓節點願意幫忙更新帳本，每筆交易都需要提供手續費，並且更新區塊會獲得區塊獎勵，也就是比特幣。

礦工可以選擇手續費較高的交易優先處理。

每個區塊的大小是 1MB ，塞車時容易手續費飆高。

每個區塊會頻空生出一些比特幣給礦工，但不會無限增生下去，區塊獎勵會慢慢遞減至 2140 ，總計 21 M 。

如果參與挖礦的節點太多，有可能讓更新速度太快，網路會隨時調整難度，更新太快時將臨界值降低到 100 。

區塊之間靠著 hash 值彼此相連，每個區塊紀錄上一個區塊的 hash 值。這也避免有人偷跑，預挖 100 個區塊之後的 hash。
![](https://i.imgur.com/9J9qku9.png)

### Double Spending
我們非常害怕一種情況，就是 Alice 用 1 顆比特幣和 Bob 買商品，Bob 看到交易上區塊後將物品交給 Alice。但 Alice 隨即在別的區塊上傳一樣的交易，但對象是給 Alice 自己，最後要怎麼認證這筆交易呢?
![](https://i.imgur.com/GK7NSoK.png)

這個概念涉及最長鏈規則，就是我們只默認最長的那條區塊鏈當作真正的交易。在這基礎下，我們把經過 6 個 confirm 的區塊視為安全的區塊，5個 confirm 以下的則是還有可能改變的區塊。

我們說每一筆交易都是可以被追溯的。
![](https://i.imgur.com/cns9SJo.png)

你帳戶裡的兩顆比特幣可能來自 Alice，此時你要轉 0.5 顆比特幣給 Bob。交易紀錄會看來像 0.5 給 Bob，1.5 給自己。

比特幣有可能被攻擊嗎，如果有人掌握 51% 以上的算力就可以，那你的比特幣有可能這樣被移走嗎，實際上不可能，攻擊者沒有私鑰還是無法偽造你的交易紀錄。攻擊者能做的只有:

特意加入或移除區塊裡的某些交易、製造 double spending 騙取你的商品。這樣的收益其實很低，還不如乖乖挖礦賺取區塊獎勵。

### 
![](https://i.imgur.com/XLOwz1i.png)

![](https://i.imgur.com/MuhnahB.png)


### Ethereum
Ethereum 是和比特幣相仿，是一個 PoW 的區塊鏈。Ethereum 上面的代幣是 ETH，而比特幣是 BTC。 Ethereum 特別的地方是不只能執行一般交易，還允許智能合約運作。智能合約是在 Ethereum Virtual Machine 環境裡執行的程式，由以太坊基金會負責開發，可以執行許多複雜的金融操作。

同樣地，Ethereum 也需要 ETH 作為手續費，但 Ethereum 的區塊獎勵是每有上限的，不會有發完的一天。因為有智能合約的關係，Ethereum 的每一筆交易複雜度都不盡相同，需要的手續費的也不同。
![](https://i.imgur.com/jOMYYUb.png)

最基礎的 ETH 轉帳需要 21000 gas，在此之上，還需要提交使用者願意為每個 gas 之後多少 price，才是實際的 gas fee。 Gas Price 的單位是 gwei (1e-9 ETH)。 Gas Limit 是這筆交易最多願意消費多少 gas，以免誤入過度複雜的合約。

Ethereum 的出塊時間比 Bitcoin 少很多，每 15 秒出塊一次，區塊衝突的機率高出很多，也就是不同節點帳本不一致的情形。這些非主鏈的分支稱為 Uncles 叔塊。為了確保叔塊也有節點願意繼續挖礦，叔塊也會有些許獎勵，但比特幣沒有。因此 ETH 不是每個 block 都有獎勵，而是每五個 block 分發獎勵。

智能合約被發布之後，需要支付礦工手續費，請礦工執行智能合約，跟投幣機一樣。智能合約使用的程式語言是 solidity， solidity 是圖靈完備，亦即可以完成任何其他程式語言的功能。

以太坊早期預挖 75 萬顆 ETH 並以 BTC 賣給投資人，供給日後基金會運作。而早期最大的詬病就是 The Dao 事件。 The Dao 是以太上的智能合約項目，讓投資人存入 ETH 到合約中，並由投資人投票將 ETH 轉移給有潛力的項目地址。但 The Dao 的智能合約發生漏洞，被駭客拿走了 3.6 M 顆 ETH。這對 ETH 的發展大受打擊，但日後被 創辦人 Vitalik 發布社群提案，使交易回滾到被駭客之前。這完全違背當初去中心化的理念。因此反抗者選擇不同意回滾保留原本的交易，變成日後的 ETH Classic，這個操作我們稱為分叉，Fork。

### Fork
理解 Fork 的概念有點像基督教的新教舊教，共享過去的歷史，但在某個時間點發生分歧。區塊鏈認得是帳本歷史，ETH Classic 和 ETH 有共同的歷史，直到 The Dao 事件之後，兩邊帳本才發生不同。

Fork 通常只兩種，一種是 fork 程式碼，一種是 fork 現有的區塊鏈。第一種情況，我們去修改比特幣軟體的參數，自己找幾台電腦開始從頭挖一條比特幣區塊鏈，的確會有和真實比特幣網路相似，但實際上的帳本卻不相同，這樣也不會被認同。

第二種，一樣也是修改參數，但是從某個區塊高度開始挖新的區塊，而不是在現有最高的區塊上疊加，也是一種 Fork。就如同 ETH Classic 和 ETH 的情況一樣，而會被認同的原因是有享有一樣的交易紀錄。

事實上，比特幣也發生過 Fork 的經歷，有一群人為了增加每一個區塊容納的交易量，Fork 出了一條新的區塊鏈 Bitcoin Cash。

### 難度炸彈
我們可以看出，Fork 要被認同需要集體共識決定，而在遇到重大升級時，需要有人集結大家一起往新的區塊上面挖礦。如果大家發生分歧，就很容易失敗，或是分裂出兩三條不同的區塊鏈。

ETH 一開始設計時就有規劃從 PoW 往 PoS 方向發展，但是 PoS 其實有違礦工的利益，因此 ETH 設計難度炸彈。難度炸彈是指區塊難度超過一個臨界的區塊高度之後開始指數型上漲，讓出塊時間變得異常緩慢，降低礦工的收入。而這時礦工變遵守以太坊基金會的帶領往 PoS 升級。

礦工們會不敢進行分叉，因為繼續留在主鏈上挖礦的礦工會大幅增加產出，遠超難度炸彈的損失，因此沒有人敢帶頭分叉，選擇乖乖留在主鏈上挖礦。

難度炸彈將在今年 6 月到來。如果沒有再被延期，以太坊就會再年底左右完成升級，升級最大的好處就是與 Beacon Chain 的合併，以及 Sharding 的擴容。讓以太的共識機制轉為 PoS 並且每秒可處理交易次數從 15 提升至數千筆。