區塊鏈基礎知識篇——《精通比特幣》第二章“比特幣的原理”解讀

通過本章的學習,你會對比特幣交易的整個過程和基礎原理有通俗的理解,本章可以幫助你建立比特幣系統的大框。

閱讀時長:5分鐘左右

2.1 比特幣交易

比特幣的交易類似複式記賬法賬簿中的行,每一筆交易包含一個或多個“輸入”,這筆交易發生時,會產生一個或多個“輸出”,這些輸入和輸出的總額,不需要相等,兩者之間的差額即支付給礦工的“礦工費”。

比如A一共有0.2個比特幣,這0.2個比特幣來源於之前2次其他人贈送,假設A使用0.12個比特幣在咖啡店購買一杯咖啡,那麼這筆交易的輸入和輸出如下圖所示:

輸入

輸出

第一人贈送 0.1 BTC

第二人贈送 0.1 BTC

輸出1 0.12 BTC

輸出2 0.03 BTC

總輸入: 0.2 BTC

總輸出: 0.15 BTC

從上圖可看出,雖然只需支付給咖啡店0.12個BTC,A需要通過錢包客戶端將之前2筆交易收到的比特幣整合成0.2BTC,以購買咖啡,整合後的數額大於了咖啡的金額,所以產生了一個找零的輸出2。總輸入和總輸出之間的差額0.05個BTC,是該筆交易的“礦工費”。

2.2 交易的構建

比特幣錢包應用會自動選擇合適的輸入和輸出來建立用戶希望的交易,用戶只需要指定接收地址和金額。比特幣交易建立和簽名時不用連接比特幣網絡,只有在執行交易時才需要將交易發送到比特幣網絡。

2.2.1 獲取正確的輸入

錢包應用本地會維護一個由用戶本人的密鑰鎖定的“未消費交易輸出”小型數據庫,每次在創建新的交易時,會從“未消費交易輸出”數據中索引到合適的地址,來作為下一筆交易的輸入。

2.2.2 創建交易輸出

用戶創建的交易輸出會包含一個腳本,這個腳本的大意是“誰能拿出一個私鑰簽名和收款地址的匹配上,就支付給誰。”由於在創建地址時,就生成了該地址對應的私鑰和公鑰,所以私鑰落在了誰手上,誰就能控制這個地址上的比特幣

這個交易還會包含第2個輸出,即找零。如果從未消費輸出中獲取到的地址中包含的比特幣之和大於本次交易數額,在本次交易中,還會包含有一個找零的輸出,找零輸出的收款地址為發起人的原地址。

為了讓這筆交易儘快被網絡處理,交易的發起方還需支付一筆礦工費,礦工費會進入首次確認該筆交易的礦工收款地址。

2.2.3 將交易放入總賬簿

用戶使用錢包創建的交易,包含該金額未來所屬需要的全部信息,現在,這個交易必須要被傳送到比特幣網絡中,以成為分佈式賬簿(區塊鏈)的一部分。

比特幣網絡是由參與的客戶端鏈聯接其他比特幣客戶端組成的P2P網絡。比特幣網絡的目的是將交易和區塊傳播到所有的參與者。

比特幣錢包應用會將新建立的交易發送給其他任何一個已連接到互聯網的其他客戶端,任何比特幣網絡節點收到一個之前未見過的有效交易時,會立刻將它轉發給聯接到自身的其他節點

收款方的錢包應用收到付款方的交易時,因為它包含能用收款方私鑰兌換的輸出,收款方能立即確認這筆交易是正確構建的,同時有足夠的手續費確保會被下一個區塊包含進去,所以收款方此時只需等待該筆交易被區塊確認。如果一個商家免確認接受比特幣小額支付,那麼也沒必要等待6次確認那麼長時間。

2.3 比特幣挖礦

挖礦在比特幣系統中的作用有兩個:

挖礦在構建區塊時會構建新的比特幣,就像中央銀行印發新的紙幣併發行一樣。每個區塊創造的比特幣的數量是固定的,每四年減半。

挖礦創建信任。只有通過挖礦的過程驗證並將交易包含在區塊中之後,這些交易才能成為分佈式賬簿的一部分。

挖礦的難度是動態調整的,以確保每10分鐘產生一個新的區塊。可以將挖礦類比於一個巨大的多人數獨謎題遊戲,想象這個數獨有幾千行幾千列,其中只有幾個單元格有值而其他單元格都為空的話,就需要花費很長時間來解決,而解題的難度可以通過增加或減少行、列的數量來動態調整,即便它解題困難但是驗證起來是很容易。這和比特幣的挖礦是很類似的。

2.4 區塊中的挖礦交易記錄

當新交易進入比特幣網絡,比特幣網絡上的節點看到這些交易時,會先講他們放到節點維護的一個臨時的未經驗證的交易池中,當礦工構建一個新區塊時,會將交易從交易池中拿出放到新區塊中,然後通過挖礦以證明這個新區塊的合法性

礦工一旦從網絡上收到一個新區塊時,意味著在這個區塊上的解題競賽已經結束了,會馬上開始下一個新區塊的挖掘工作。他會立刻基於這個新區塊和一些交易構建下一個新區塊。

2.5 消費這筆交易

當一筆交易成為區塊的一部分,被嵌入到整個分佈式賬簿(即區塊鏈)的一部分時,每個比特幣客戶端都能獨立的驗證這筆交易是有效且可消費的。輕量級客戶端可通過確認一個交易在區塊鏈中且它後面有幾個新區塊來確認這確認這筆交易的合法性

用戶可以通過比特幣客戶端,用收到的這筆交易和之前已完成的交易作為輸入,創建新的交易輸出,這樣就實現了消費。


分享到:


相關文章: