一次搞懂「區塊鏈架構」

Published: Sep 24, 2019 by Cypherpunks Core

轉自Pelith Medium, 作者Lai Jack 賴彥廷 Sep 24 · 8 min read

收看本系列文章的讀者,應該都對於區塊鏈的基本原理和架構有些概念,如果沒有,推薦您先去 Google 搜尋  區塊鏈、比特幣、以太坊 這些關鍵字了解一下。我們將在這些基礎概念之上,來談區塊鏈的技術知識。本系列文章並不會談到太深的技術鑽研,而是希望以 深入淺出 的方式讓每一個想要搞懂區塊鏈技術的人都能在讀完後說出: 原來如此! 本系列文章由區塊鏈技術解決方案開發公司: Pelith  編撰。內容皆經過諸位區塊鏈資深研究員及開發者 校對與驗證 ,盡可能確保 內容正確無誤 ,讓讀者能安心吸收 正確的區塊鏈技術知識

上一節  中,我們在介紹以太坊交易打包規則時帶大家大致了解區塊鏈運作的架構,不過有些技術細節我們沒有完整地交代清楚,本篇及未來數篇文我們將更深入且完整地介紹區塊鏈技術架構,並且帶大家認識目前區塊鏈遇到的各種問題及許多專案在嘗試解決的部分!

廢話不多說,我們先從中本聰設計的初代區塊鏈  比特幣 Bitcoin  來談起:

How Bitcoin Blockchain Work

如果前面幾節大家有認真看的話,應該還記得比特幣是採用  UTXO 架構

我們從比特幣一筆交易的一生帶大家來一探究竟區塊鏈是如何運作的:

比特幣交易流程示意圖 :

比特幣交易的一生

  1. 一個使用者欲發起一筆交易。
  2. 透過 錢包 (管理私鑰的工具)輸入交易資訊 (To, Amount, 手續費, OP_Return …)。
  3. 私鑰 簽署交易。
  4. 廣播 「加上簽名的交易封包」 至鄰近的比特幣節點們。
  5. 節點接收到新交易時,會先至 UTXO Pool  檢查交易發起地址是否能動用足額 UTXO ,若無則該交易會即刻被丟棄。 *註:圖中以一個 Balance 值來做標註,但其實這個 Balance 可能是多個 UTXO 的集合,Steve 的 18 可能其實是 0.25+10.75+2+5 四個  錢堆
  6. 若檢查後確認有足額,則該交易會被放入到  Tx Pool  中。 (按造 手續費給的多寡 由高至低排序)
  7. 等待出塊的同時,各節點會 A. 廣播接收到的交易 B. 接收未在 Tx Pool 內的交易
  8. 礦工節點們(有在用電腦算力找 nonce 值,拼出塊獎勵的節點)會 撈取手續費較高的交易們來運算並打包成新區塊 , 用電腦算力計算 nonce 值。 *註:這邊的  nonce 值  跟前面介紹過的  以太坊地址的 nonce 值  不同(以太坊有兩個 nonce:一個是挖礦的;一個是地址的交易 序次 。)
  9. 成功找到找到 nonce 值,出塊的礦工會獲得 出塊獎勵 及該區塊所有打包交易給的 手續費
  10. 該礦工節點將新的區塊廣播至全世界的其他節點們。
  11. 其他節點 同步  <595266 區塊高度(最新的區塊)>、 資料,繼續 **廣播與接收新交易** 。
  12. 礦工節點再從 Tx Pool 中撈取未出塊的交易們(生成 Merkle Root )運算並打包成新的區塊。

以上,便是區塊鏈運作的方式。

不過由於全世界可能每時每刻都有人在發起新的交易,所以以上這些過程都是 24/7/365.25 不斷在  動態運作中  的。

光憑上述 12 點其實很難清楚交代許多的技術細節,所以我們將針對幾點再做更進一步的介紹:

(3) 私鑰簽署數位簽名 Digital Signature

數位簽名與驗證示意圖(https://zhaohuabing.com/2018/05/12/cryptocurrency_week1_digital_signature/)

為什麼發送交易需要使用私鑰進行簽名?

試想一下,若是沒有這樣的機制, 就無法知道交易是不是由地址的主人發出的。 因此當我發送交易時,必須有機制能證明這個交易是由我本人來發出。我們先來看一段《精通比特幣》的論述:

《 精通比特幣(Mastering Bitcoin)第四章 》 私鑰可用於為交易生成指紋(數位簽名)。這個簽名只能由知道私鑰的人制作。但是, 任何有權訪問公鑰和交易指紋的人都可以使用它們來驗證簽名確實是私鑰的擁有者生成的。 非對稱加密的這一有用特性使任何人都可以驗證每筆交易的每個簽名,同時確保 只有私鑰所有者才能生成有效的簽名。

因此,能唯一證明的機制便是:用我的私鑰生成一個 「數位簽名」 後,連同交易內容一起送出。節點接收到這筆加上簽名的交易時,可以用 我的公鑰 來驗證這個簽名是由 我的私鑰 所簽署的。如此來證明這個交易是由我送出的。

(5) UTXO Pool

接著,我們來介紹 UTXO Pool:所謂的區塊鏈其實就是自主網上線以來的所有歷史區塊,區塊內包含零至數筆的交易資料。而比特幣至 2019/9 為止的近 60 萬個區塊 資料大小約為 250 GB。

上方第 (5) 點,節點接收交易要檢查時,照理來說應該是要把近 60 萬個區塊資料都爬過一遍才能確認該地址可動用的餘額。然而,這麼做曠日費時,當區塊越來越多,且每一筆交易接收時都要整個掃描一遍時,會因掃描時間過長導致節點之間的同步出現問題。

因此,UTXO Pool 便出現了。作法是: 用資料庫記錄一個掃描過後的最終狀態 ,並在這之上再依據後續區塊做更新變動。亦即 把已花費的 Output 紀錄都丟棄掉,只保留最後 Unspent 的 Tx Output。 如此便不用每筆交易接收時都要掃描整條區塊鏈,只要掃描去蕪存菁的 UTXO Pool 就可以了。

(10) 節點 Node

了解 UTXO Pool 後,接著來進一步介紹節點。節點是維持區塊鏈網路運作的根基,區塊鏈之所以能做到去中心化,便是因為在全世界有無數的節點在同步與備份所有的區塊資料(全交易歷史紀錄)。

(11) 節點同步(不斷刷新推算)

當我接收到一筆新的交易並驗證後,放進我的 Tx Pool 中,我會同時把這筆交易廣播給鄰近的節點們。鄰近的節點們驗證、接收並同步後也會再廣播給他們鄰近的節點們,如此將資訊以網狀廣播出去,讓各個節點之間維持一個 「動態同步」 的狀態。

(12) 節點不一定等於礦工

節點可以選擇 要不要進行挖礦 ,也就是說:我可以 單純的接收、同步與廣播 「Block、UTXO Pool、Tx Pool」資料,只做帳本更新動作,當個稱職的傳聲筒為去中心化世界做貢獻,不花算力去打包交易、計算 nonce 拼出塊獎勵。

而這些 節點們 便是所謂的  Peer to Peer(P2P)Network   「點對點網路」

以上便是核心版的區塊鏈架構,中間有許多的技術細節我們先不深入著墨。因為這是一個由淺入深的系列文,未來會逐一介紹到的!

Blockchain Demo

最後,如果想更了解區塊鏈如何運作的朋友,可以到下方這個網站去逛逛,實際體驗、操作看看區塊鏈是如何運作的!

Blockchain Demo

https://anders.com/blockchain/

此外,也跟大家預告一下精彩可期的未來數篇文章:

<7> 以太坊區塊鏈架構 How Ethereum Blockchain Work

我們將接續本篇文章,介紹  區塊鏈 2.0-  Vitalik 如何在中本聰設計的比特幣架構上進行升級與改動,同時也將首度揭曉 「以太坊區塊鏈架構圖」

<8> 區塊鏈技術地圖 Blockchain Technical Roadmap

比特幣資深研究員「陳伯韋」五年多來的研究結晶完全公開! 我們將依區塊鏈架構清楚剖析目前區塊鏈遇到的各項問題( 隱私問題、儲存問題、速度問題  等),並 摘要介紹目前各個 項目/團隊 針對各項問題提出的解決方案

<9> 去中心化金融技術解析 How Decentralized Finance (DeFi) Work

DeFi 正夯,到底在紅什麼呢?DeFi 如何解決傳統金融遇到的界線與問題呢?透過本篇文章將(盡可能)解答您心中的疑問!

Latest Posts

Grin 的貨幣政策
Grin 的貨幣政策

本篇文章是翻譯自Grin的Gitgub的內容,在說明Grin為什麼採取當前的發行政策,以前其背後對於比特幣等加密貨幣的思想,以及如何將自己的理解變為Grin中的發行政策。譯者認為加密貨幣的發行政策一直是大家鮮少注意到,卻極為重要的一塊,因此翻譯了這篇文章,簡單而言,Grin的核心貢獻者認為貨幣能有價值不在於有沒有硬頂,而是能不能有透明的發行政策。 by Williams Lai

Cypherpunks Taiwan (8) -如何使用github & 衛星計畫進度
Cypherpunks Taiwan (8) -如何使用github & 衛星計畫進度

活動影片:

Cypherpunks GitHub 教學演講
Cypherpunks GitHub 教學演講

GitHub 可以說是現今時代中工程師的一種社交網路, 當你發現原始作者有一些感興趣的專案時,你想為此專案作貢獻,加入原作者專案 Contributor 的行列時。就可以參考本文件一步一步操作。