第二章 區塊鏈簡介—最成功的應用:比特幣
第三節 區塊鏈的特性
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
能夠取信於別人。但公開透明的特性卻不利於商業上的應用,企 業為了維護自身利益,不可能將所有資訊全都放上區塊鏈共享給 每個人,造成不必要的損失。因此在應用上,企業仍然傾向於不 公開區塊鏈上的內容。
‧
目前比特幣區塊鏈使用的哈希函數 SHA-256,還沒有被破解,
仍然找不到不同的資料卻得到相同哈希值的情況。
(4) 雪崩效應:輸入的資料產生細微的變化時,相對應產生的哈希值 會劇烈的變化(超過一半的位元改變)。因此,想要利用資料與哈 希值之間的關聯性反推原始資料的難度大幅提高,有效降低資料 與其哈希值間的關聯性。例子如下:
‧
Hash(0)=5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9 Hash(00)=f1534392279bddbf9d43dde8701cb5be14b82f76ec6607bf8d6ad557f60f304e Hash(apple)=3A7BD3E2360A3D29EEA436FCFB7E44C735D117C42D1C1835420B6B9942DD4F1B Hash(apples)=F5903F51E341A783E69FFC2D9B335048716F5F040A782A2764CD4E728B0F74D9
在比特幣的區塊鏈系統中,使用的哈希函數式是 SHA-256,SHA-256 會將 資料對應到 [0,2256] 的區間中,產生出一組 256 位元的哈希值。由於上述哈希
這些收到的比特在還沒有被花費之前稱為「未使用的交易輸出」(Unspent Transaction Output, UTXO)。舉例來說,如果乙付給甲 10 比特幣,丙也也付給 甲 20 比特幣,甲的錢包不會總計 30 比特幣,而是紀錄一筆 10 比特幣的款項和 一筆 20 比特幣的款項,分別來自付款者乙以及丙,且是未使用的交易輸出,這 樣紀錄比特幣的方式是為了讓區塊鏈上的記帳更清楚、更容易驗證與追蹤。比特 幣的交易紀錄中包含輸入(Input)與輸出(Output),每筆未被使用的交易輸出
(UTXO)會是下一筆交易的輸入(Input)。
每一筆交易可能包含若干個輸入(Input)和輸出(Output),上述的例子中,
如下圖三,甲分別從乙和丙拿到 10 比特幣和 20 比特幣,若甲欲支付 25 比特幣 給丁,就必須把 20 比特幣和 10 比特幣合在一起支付,所以交易的輸入(Input)
就有兩筆合計 30 比特幣,把 25 比特幣給丁,再把剩下的 4.9 比特幣還給自己,
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
易手續費(Implied transaction fee)。
圖 三 比特幣記帳方式
另一個例子如下圖四,第一筆交易中(第一層)Alice 從 Joe 那邊獲得 0.1 比特幣(Output);第二筆交易中,Alice 要付給 Bob 0.015 比特幣,Alice 在第 一筆交易中得到的 0.1 比特幣成為第二筆交易的輸入(Input),同時也被標記為
「已花費的交易輸出」(Spent Transaction Output)。而交易的輸出為兩筆,第 一筆給 Bob 0.015 比特幣,第二筆將剩下的比特幣 0.0845 還給自己(這兩筆在還 沒有花費之前會被視為未被使用的交易輸出),輸入和輸出的差額 0.0005 比特 幣會被默認為支付給節點的交易手續費。
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
圖 四 比特幣的交易紀錄方式
同樣的,當 Bob 要支付給 Gopesh 時,使用到第二筆交易中從 Alice 那邊得 到的 0.015,此時這筆比特幣從未被花費的(unspent)變為已花費(spent),並 成為第三筆交易的輸入(Input)。
上述為比特幣區塊鏈紀錄交易的方式,使用這樣的方式是有原因的,可以讓 交易的驗證更容易,以下會詳細說明比特幣驗證交易的過程。
二、交易的驗證
比特幣交易的紀錄方式讓驗證的過程非常有效率,保留每筆不同來源的比特 幣就是為了方便驗證。以上圖第二筆交易為例,Alice 要使用他在第一筆交易獲 得的 0.1 比特幣時,這 0.1 比特幣成為第二筆交易的輸入(Input),並且包含第 一筆交易的哈希值
(7957a35fe64f80d234d76d83a2a8f1a0d81de548f0a65a8a999f6f18),節點不用回溯 整個區塊鏈一筆一筆的找,只要沿著哈希值找到第一筆交易,就可以確認這筆比 特幣是否被花費過。除了確認比特幣是否被花費過之外,更重要的是確認比特幣 的所有權,節點需要確認在第一筆交易中,Joe 真的把比特幣的所有權轉移給 Alice,且 Alice 有能夠使用這筆比特幣的權利。確認所有權轉移的過程需要使用 到數位簽章的概念,利用密碼學中的非對稱加密技術,達成交易的驗證。
‧
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
圖 五 比特幣的區塊3
(1) Height:代表這個區塊在主鏈上的位置,其為第 464369 個區塊。
(2) Difficulty:代表計算工作量證明的難度。
(3) Size:比特幣區塊鏈系統中,每個區塊的大小約為 1MB,實際上可能 或大或小,由節點搜集的交易數量而定。
(4) Nonce:在區塊未形成之前(計算出工作量證明前),這是個待定的 數字,節點反覆的猜測這個數字使得區塊的哈希值小於某個事先約定 的目標,猜中這個數字的節點完成工作量證明,可以將區塊放上區塊 鏈,並獲得報酬。(工作量證明詳見第四節)
(5) Block Reward:圖中的區塊報酬為 12.5 個比特幣。Block Reward 記錄 著節點能夠獲得多少的比特幣報酬。比特幣的系統中,計算工作量證 明是唯一產生比特幣的方式,一開始的發行量是每個區塊產生 50 個 比特幣,大約每四年半會減半一次,發行的總數不會超過 2100 萬個。
(6) Merkle root:如下圖所示,假設一個區塊有 A 到 P 共 16 筆交易,將 每筆交易放入哈希函數產生相對應的 16 個哈希值 #A 到 #P,再將哈 希值兩兩再放入哈希函數,產生八個哈希值 #AB、#CD、#EF…、#OP,
再兩兩以重複相同的方式計算哈希值,最終會產生一個 Merkle root。
3資料來源:blockchain.info(網站)
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
Merkle root 可以方便節點驗證交易,簡化驗證交易所需的資料,提高 效率。以交易 #K 為例,節點想要驗證這筆交易的話,只需要保留 哈希值 #L、#IJ、#MNOP、#ABCDEFGH,再比對 Merkle root 即可。
(如圖六)
除了提高驗證效率外,Merkle tree 的架構還可以減少需要儲存的資 料量,如果這個區塊只剩 K 交易產生的輸出(Output)還未被花費掉,
則除了上述驗證需要用到的哈希值外,其他交易的哈希值都可以從硬 碟中清除。如圖七所需儲存的資料量少於圖六。
圖 六 Merkle tree 示意圖
圖 七 Merkle tree 的簡化圖
‧
第一節所討論)、前一個區塊的哈希值(previous hash)與 Nonce,此區塊的哈 希值必須小於某個設定的門檻(target)(例如:哈希值的前 10 個位數為零)。由於交易的內容與前一個區塊的哈希值都是固定的,只有不斷的改變 Nonce 並 找出滿足上述條件的哈希值,才算完成工作量證明。而當一個節點 A 向網絡廣 播自己完成工作量證明之後,其他節點認同這個區塊的合法性(透過重新運算哈
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
希函數得知,哈希函數易於檢驗的性質使得驗證很容易),承認節點 A 所做的 工作量證明,會將節點 A 所廣播的區塊當作前一個,並接在這個區塊之後計算,
也就是計算上式的時候將節點 A 所廣播的區塊哈希值當作 previous hash 代入。
因此區塊鏈中的每個內容透過哈希值與工作量證明的機制環環相扣,如果有 惡意的節點想要竄改區塊鏈中的內容,則必須重新計算所有的工作量證明,使得 每個區塊的哈希值符合小於某個門檻,當區塊鏈的長度愈大的時候,要成功竄改 資料的可能性會愈小,與其竄改交易紀錄將比特幣轉入自己的錢包,並重新計算 所有的工作量證明,不如直接計算工作量證明並獲得應有的報酬,任何人權衡後 都不會有誘因去竄改資料,所以區塊鏈才能產生無法任意篡改的特性。
二、誘因
節點為什麼要花費自己的電腦運算資源來計算工作量證明呢?在完成工作 量證明之後,節點還需要驗證區塊之中的所有交易,確認交易無誤之後,才能將 這個區塊是為合法的,所以節點在區塊鏈中是負責維護運行的角色。每次完成工 作量證明的節點都會得到一筆報酬,是節點願意犧牲電腦運算資源,並維護區塊 鏈運行的誘因。提供誘因是目前比特幣能夠成功運行的關鍵,除了節點間相互競 爭能夠確保系統的穩定之外,也有效遏止惡意節點篡改區塊鏈內而從中竊取比特 幣的企圖,與其消耗資源竄改內容全部重新計算工作量證明,還不如當個老實的 節點,正當的獲取維護區塊鏈的報酬。
‧
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
圖 八 區塊鏈分岔示意圖
上一章所提到的雙重花費問題在這裡獲得解決。區塊鏈上的每個參與者都只 認同最長的那條鏈,這就是區塊鏈的「共識」。以下有兩種雙重花費的情境:
1. 不同時間點重複使用同一筆比特幣
這是相對單純的情況,如果有人想要重複使用比特幣的話,節點在驗證 交易時馬上就能知道這些比特幣已經被花費掉,是已花費的交易輸出(spent transaction output)。
2. 相同時間使用同一筆比特幣
如果幾乎在相同時間花費同一筆比特幣,而且又剛好被不同的節點在相 同的時間點放上區塊鏈,如上一段所描述的情況,區塊鏈會產生分岔,但最 終只有其中一筆比特幣交易會被保留在最長的主鏈上,另一筆交易會回到交 易暫存池中,等待成為下一個區塊內的交易。如此一來,當雙重花費的另一 筆交易再度被放上區塊鏈時,就與第一個情境相同,節點能立即發現這筆比 特幣已經被花費過了。
因此,使用比特幣交易的時候,為了避免雙重花費的情況,在接收比特幣的 時候最好等待六個確認(confirmations),也就是在自己的交易被放上區塊鏈之
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
後,後面還有接續的六個區塊產生,這樣幾乎可以保證交易永遠被保留在區塊鏈 上,不會再回到交易暫存池中。
圖 九 區塊鏈分岔及確認(confirmations)示意圖
點對點網絡與交易驗證的方式,做到了完全去中心的目的,在這個價值交換 的網絡當中,利用節點之間的共識與數位簽章的驗證機制,取代傳統授權中心機 構的功能,交易雙方不需要信任的第三方便可達到轉帳目的,只要信任這個區塊 鏈系統,信任這個機制能夠很安全的幫助他們達到價值交換的目的即可,因此區 塊鏈又被經濟學人雜誌稱為「信任機器(The Trust Machine)」。
過去,網路之中的虛擬化商品所面臨的問題是,數位化的任何東西都很容易 被複製,以虛擬貨幣為例,在比特幣出現之前,虛擬貨幣之所以無法順利運行的
過去,網路之中的虛擬化商品所面臨的問題是,數位化的任何東西都很容易 被複製,以虛擬貨幣為例,在比特幣出現之前,虛擬貨幣之所以無法順利運行的