Blockchain 101 (下集) — 從區塊鏈瀏覽器一窺比特幣『公開式帳本』& UTXO 記帳模式

集我們透過 Bob & Laura 的比特幣交易過程,讓大家對區塊鏈及比特幣都有了初步的認識。( 還沒讀過嗎? ☞ Blockchain 101 (上集) — 最白話的區塊鏈懶人包 ) 這次要帶大家目睹『公開式帳本』究竟長什麼樣子以及他的記帳模式。

很多人說過一句話:要真正了解區塊鏈跟加密貨幣,先去買個比特幣吧!今天我們不用買幣,直接來看看別人的比特幣交易背後到底怎麼運作的。

 

區塊鏈瀏覽器 Blockchain Explorer

市面上有很多區塊鏈瀏覽器,基本上看到的資訊大同小異,我們來看看 Bob & Laura 交易成功後的比特幣公開帳本上,可以看到什麼資訊。

blockchain.com 為例:左邊可以選擇你想看到的比特幣鏈上所有區塊、交易紀錄等資訊。

Blockchain.com

區塊資訊 Block

Blockchain.com

上集有提到,所有鏈上的交易都需要礦工幫我們打包成區塊,交易被確認後礦工也從中獲取獎勵。

左圖第一行是區塊的 Hash 值,我們能透過 Hash 值唯一且準確地定義一個區塊,區塊鏈中每個區塊的 Hash 值都可以被驗算,計算出的 Hash 沒有變化也就意味著區塊中的信息沒有被篡改。

而瀏覽器上區塊的重要資訊包含:

  1. Number of Transactions 總交易數量:一個區塊可以乘載 1MB 的交易內容,大約每十分鐘不等的時間就會再產生一個新的區塊來記錄交易(見上圖藍框處),如同帳本寫滿就要換頁的概念。
  2. Height 區塊高度:第一個創始區塊以來的序號。
  3. Block Reward 區塊獎勵:礦工的獎勵金額。
  4. Timestamp 時間戳:讓區塊鏈上每一筆資料都具有時間標記,並表示這是一份完整的可驗證資料。
  5. Miner 負責的礦工:礦工的身份有可能是個人、公司或甚至是政府。上集也有提到,挖礦需要越大的算力來增加得到獎勵的機率,因此通常都是由大型『礦池』聚集礦工一起挖礦,礦池的算力占比大,挖到比特幣的總收益會更高。上圖綠框處是 2019 年 11 月 18 日當下抓取的區塊資料,可以看到 AntPool、F2Pool、BTC.com、SluchPool 即是世界前幾大礦池。
  6. Merkle Root :這個區塊所有交易的 Hash 值。用一張圖讓大家了解區塊內的交易資料如何受到保護。

 

中本聰的「簡化支付驗證」(Simplified Payment Verification)概念

KryptoGO

Merkle Root 作用:讓區塊內的交易紀錄一環接一環串在一起而難以被竄改。假設有個人偷偷的把 L2 的內容改變了,那麼 Hash (L2) 的值會跟著變動。而這個變動一路往上傳,讓頂樓的 Top Hash 也產生改變,那就會被抓包了。

如果要驗證 L2 的交易內容有沒有被竄改過,我們只需要:

  1. 先找到 L2 的所在區塊
  2. 重新算一遍 Merkle Root,看看 L2 算出來的 Merkle Root 值跟頂樓的 Top Hash 是不是相同,相同就代表 L2 的內容沒被竄改過。

 

交易紀錄 Transaction

區塊鏈上的資訊是公開但匿名的,我們翻開剛剛區塊內的所有交易,看得到每一筆交易比特幣的輸入 (Input) 與輸出 (Output) 的紀錄,也就是付款地址、收款地址,但並無法從地址知道轉帳對象。而比特幣的記帳方式就是透過 UTXO 帳本模型。

UTXO 帳本模型:

在比特幣的世界裡,並沒有一個紀錄所有帳戶『餘額』的帳本。在比特幣公開帳本裡,我們只看得到『交易紀錄』,餘額則是根據交易紀錄算出來的。

  • Input - Fee = Output

實際上 Input、Output 可以分別是很多的地址,可以把它想像成『錢堆』而不是帳戶。你可以把好幾堆別人給你的錢 (Input) 拆成一堆一堆再分給其他人 (Output)。我們直接來看圖中第二筆最簡單的交易:

Input: Bob 從別人給他的 18.8729 個比特幣錢堆中

Output 1:轉給了 Laura 5.2014 個比特幣

Output 2 :錢堆裡還有 13.6708 個比特幣則挪給自己

Fee:跟銀行轉帳相同概念的是,由轉帳方扣除下面的 Fee 手續費

而 Output 在尚未轉帳出去之前都是 Unspent Output — 未花費的輸出。

→ 現在 Laura 的地址有了 Unspent Output,可以當作她未來轉錢給別人的 Input。所以這 5.2014 個比特幣並不是帳戶餘額,比較像是 Laura 的地址未來可以轉帳出去的『未花費比特幣的紀錄』。

KryptoGO

雙花問題 Double Spending:

試想這樣的紀錄方式會出現什麼問題? — 如果 Laura 同時將這筆 5.2014 Unspent Output 雙重花費 (Double Spending) 轉給兩個地址呢?

這時礦工就派上用場啦!礦工在打包區塊時,要驗證的就是『未花費 Output 』是不是有在其他的區塊已經被使用過。爲了防止雙花現象 (Double Spending) 的發生,前面提到的時間戳也是用來判別的工具,假設 Laura 把剛剛收到的 5.2014 個比特幣重複轉帳,兩筆交易僅有一筆會成功被驗證,因爲礦工會記錄優先接收到或是手續費更高的那筆交易,第二筆交易則不會受到驗證。當然比特幣區塊鏈中也不是絕對不可能出現雙花現象的,比如遭受『 51%算力攻擊 』的時候。這部分的細節有興趣的人可以參考:『 什麼是 51% 的攻擊? 』

小結

比特幣的 UTXO 記帳方式與我們熟悉的『帳戶餘額』大不相同,但這樣的方式省去繁雜的餘額紀錄,讓帳本變得更輕盈。而它透過『鏈結』的方式組織所有交易的 Input & Output ,保證每筆寫入的交易都不可竄改,交易即清算且同時解決雙花問題。

當然,除了比特幣以外,以太幣採用的反而是我們熟悉的帳戶餘額模型,有機會再跟大家做介紹啦~

About KryptoGO

KryptoGO is a blockchain search engine. It organizes all cross-chain information for usability and readability to make blockchain more accessible to everyone. For more information visit KryptoGO or follow us on Facebook @kryptogo

KryptoGO 是最先進的區塊鏈資料分析平台與搜尋引擎,分析鏈上資料結合鏈下情報,鏈接虛實身份,協助中小型的區塊鏈公司與金融機構以有效率的方式符合最新虛擬貨幣的監管規範。KryptoGO 為各行各業提供完整的區塊鏈監管服務,如:KYC/AML、自動風控 API、監控、交易可視化,協助政府執法單位打擊金融犯罪、稅務機關查稅、發行符合規範的證券型代幣。