分享

區塊鏈如何運作?

 若浪出雲 2016-12-24

所以,什麼是比特幣?

一塊比特幣就是一個單位的電子比特貨幣 (BTC),並且就像真實的一塊錢貨幣一樣,本身是沒有價值的,只有在進行物品交易時才會產生價值。

在比特幣系統裡,有一本 帳本 (ledger),它是一個電子檔案記錄著所有的交易紀錄。

圖 1. 比特幣電子帳本

這帳本不是存放在一個中央機構,像是銀行,或是一個資料庫。它擁有無數份副本,散佈存放在區塊鍊網絡上的每一台電腦裡,而每台電腦我們稱為「節點 (node)」。

如果 David 想用比特幣轉帳給 Sandra,他就送一個訊息告訴網絡說:他的帳戶減 5 BTC,然後 Sandra 的帳戶加 5 BTC。在網絡中的每個節點都會收到訊息,並且將這筆交易記錄到自己的帳本裡,然後更新帳戶的餘額。

圖 2. 請求交易訊息

說到這裡,關於帳本是由一群電腦共同維護,而不是由一個類似銀行的中心機構來掌管,有三個啟發:

  • 在銀行系統中,我們只知道自己的交易紀錄和帳戶餘額,而在區塊鍊網絡裡,每個人可以知道任何人的交易紀錄。
  • 一般來說你信任你的銀行,而比特幣是分布式系統,運行在網路上,任何事情發生錯誤,是沒有客服人員可以幫你的。
  • 區塊鍊不是建構在信賴情感上,其安全性和可靠性是透過特殊的數學函數和程式碼達到的。

我們可以定義區塊鍊是一個系統,它讓一群互聯的電腦安全地共同維護一份帳本。

為了能在區塊鍊網絡裡進行交易,你需要一個 錢包 (wallet),它讓你可以存放和交易你的比特幣。只有你可以花費你的比特幣,所以每個錢包被特殊的加密法所保護著,使用一對獨特且配對的鑰匙:公鑰和私鑰,才能解鎖。

如果一個訊息被公鑰加密,只有配對的私鑰才能解密讀到訊息。反之,如果你用你的私鑰加密訊息,只有配對的公鑰可以解密。所以當 David 想要轉帳,他需要用他的私鑰將轉帳訊息加密後,送到網絡裡,然後每個節點使用 David 的公鑰將訊息解開,以確認是由 David 發送的。

在加密完成時會產生一個電子簽名,它會被節點們用來確認交易訊息的發送來源和真偽。電子簽名內容是一串文字,它是由交易訊息和私鑰所組成的,所以不能用在其他的交易訊息上。如果你更改交易訊息中任何一個字元,電子簽名也會跟著改變,所以駭客很難更改你的交易訊息或是得知交易金額。

圖 3. 電子簽名與加密交易

錢包的公鑰其實是網絡裡的一個位址 (send to address),所以當你轉比特幣給某人時,你其實是將比特幣轉公鑰的位址。而且你必須證明你是私鑰的所有人,才能進行轉帳。請注意,在網絡裡的交易訊息已經是被加密過的,你不用揭示你的私鑰。

每個節點都保有一份帳本,但節點是如何知道你的帳戶餘額?區塊鍊系統並沒有記錄每個人的帳戶餘額 (譯注:所以帳本實際上不是像圖 1 一樣),事實上,它只有紀錄網絡上每筆交易紀錄 (如圖 4)。為了得知你的帳戶餘額,你必須分析和驗證所有曾經跟你錢包產生交易的紀錄。

圖 4. 區塊鍊網絡的帳本

「帳戶餘額」的計算和驗證需要靠之前的交易紀錄。舉個例子,為了轉出 10 BTC 給 John,Mary 先發起一個交易訊息,它包入了之前部分的轉入交易紀錄,只要這些紀錄的轉入金額加總起來剛好或大於 10 BTC 即可發送訊息。這些包入的交易紀錄稱作輸入 (inputs),每個節點會驗證這些輸入的金額加總是等於或大於 10 BTC。這些計算和驗證會由錢包和節點自動完成,使用者不需要煩惱。

圖 5. 區塊鍊的交易訊息結構

至於,系統如何信任這些輸入?它去確認你的錢包在之前所有的轉入交易紀錄中是否真的有這些輸入。為了簡化和加速驗證的過程,每個節點會保留一份特殊的資料來達到目的,也因為這個驗證過程,錢不可能會無緣無故多出來。

持有比特幣代表的是,帳本上你還未變成輸入的交易紀錄。

在比特幣網絡上執行交易的程式碼都是開源的,這表示任何人只要有電腦和網路就可以進行交易。然而,程式的錯誤有可能導致你的比特幣會不見。還記得嗎?比特幣是分散式網絡,並沒有專屬的客服人員替你找回遺失的錢或錢包密碼。所以你想要用比特幣進行交易,建議使用正式的比特幣錢包軟體 (例如 Bitcoin Core),並且妥善保存你的錢包密碼或私鑰。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多