科普:比特幣的交易過程
最近這段時間,博主在整理一份通俗易懂的挖礦科普專輯,希望從最初加密貨幣交易的發生到挖礦確認交易的各個環節,全面地介紹挖礦過程中,到底發生了什麼,哪些環節產生了挖礦收益,而我們常說的算力又指的是什麼,挖礦收益為何要這樣分配等等。
以比特幣為例,我們知道比特幣網絡裡設計挖礦的目的是打包交易,維護比特幣網絡,那麼交易其實就是跟挖礦息息相關的第一個環節。在比特幣網絡中交易的過程使用了非對稱加密技術,數字摘要技術,區塊鏈技術等,其中的技術實現,已經有眾多大神珠玉在前,博主就不獻醜了。這篇文章的主要目的是二級標題二級標題
在展開說明之前,需要先安利幾個概念
非對稱加密:也叫公開密鑰加密,它是通過密碼學的算法生成一對公私鑰,公鑰對外公開,私鑰由本人保管。它有數據數據數據用公開的公鑰加密後傳輸給公鑰持有人,公鑰持有人使用對應的私鑰將數據解密,讀取信息,通過這種方式,可以保證信息傳輸的安全性;二,公鑰持有人可以使用私鑰對信息簽名(簽名過程類似加密過程),然後將信息和簽名一起發送給他人,他人可以通過公鑰對信息簽名進行驗證(驗證過程類似解密過程),驗證簽名信息與發送信息一致,則證明信息是由公鑰持有人發出,可以在不暴露公鑰持有人身份和私鑰的情況下,確保信息來源的可靠性哈希算法https://en.wikipedia.org/wiki/Public-key_cryptography)
哈希算法:也叫散列函數,可以通過它將數據量較大的消息或者數據計算出一個格式固定,數據量較小的,也叫,也叫哈希,散列值哈希哈希不可逆的不可逆的敏感的敏感的(原來數據中任何一個微小的改動,都會使數字摘要發生巨大變化),防衝突的(很難找到兩個不同的信息,它們的數字摘要相同)。 (參考鏈接:https://en.wikipedia.org/wiki/Hash_function)
比特幣裡的公鑰和私鑰:比特幣世界裡,用來確定比特幣歸屬的是按照比特幣協議生成的一對對公鑰和私鑰,它們通過非對稱加密算法(橢圓曲線算法)生成,哈希哈希哈希算法(SHA256)運算得到一個散列值(也叫做哈希),再生成生成了我們常見到的比特幣的錢包地址。所以錢包地址經過解碼後,就可以得到對應公鑰的哈希,可以用於驗證私鑰簽名,加密數據等等。
UTXO:Unspent transaction output,未花費的交易輸出,它是比特幣世界裡的抽象貨幣,每個UTXO都被一個公鑰(錢包地址)鎖定,只有持有該公鑰對應私鑰的人,可以通過私鑰簽名(解鎖)並使用該UTXO。可以把UTXO理解為二級標題二級標題https://en.wikipedia.org/wiki/Unspent_transaction_output)
拋開代碼,我們接下來看看比特幣的交易是怎樣的一個過程
如下圖,有甲、乙、丙、丁四個人,他們都有比特幣錢包,錢包私鑰自己持有,錢包地址(由各自錢包公鑰生成)在比特幣網絡公開,用於UTXO的鎖定和驗證。

起始,甲給丙0.7BTC,在比特幣網絡裡的記錄是UTXO(1):甲給丙0.7BTC;乙給丙0.5BTC,在比特幣網絡裡的記錄是UTXO(2):乙給丙0.5BTC。此時,丙的比特幣錢包的賬戶餘額為這兩個UTXO之和,丙的比特幣總數=UTXO(1)+UTXO(2)=1.2BTC。如下圖:

這天,丙向丁買了一批貨物,需要向丁支付0.8BTC。丙通過比特幣網絡向丁轉賬,但丙現有的兩個UTXO均不足0.8BTC,需要將兩個UTXO一起使用,類似現金交易:給丁支付1.2BTC,丁找給丙0.4BTC。但在比特幣網絡中,這個找零的工作是由丙自己發起的。
整個交易的流程如下:
丙通過比特幣錢包準備交易信息,交易信息包括輸入和輸出兩個部分,輸入是UTXO(1)和UTXO(2),以及丙的錢包私鑰簽名(因為UTXO(1)和UTXO(2)均被丙的錢包公鑰鎖定,需要通過丙的私鑰簽名來解鎖後,進行使用)
交易的輸出是未確認的UTXO(3):丙給丁0.8BTC,這個新的UTXO指向丁的錢包公鑰,待交易確認後,將被丁的錢包公鑰鎖定。
此時還有0.4BTC需要找零給丙,因此還需要輸出一個未確認的UTXO(4): 丙給丙0.3999BTC,這個新的UTXO指向丙的錢包公鑰,待交易確認後,將被丙的錢包公鑰鎖定。
為什麼找零的數額不是0.4BTC呢?因為比特幣網絡要求,交易轉賬,需要向比特幣網絡支付交易手續費。剩餘0.0001BTC未指向任何錢包公鑰,將作為轉賬手續費支付給打包這筆交易的礦工(如果未找零,剩餘所有未指定的比特幣將全部作為手續費給打包交易的礦工,不過目前找零工作都由錢包自動完成,不用擔心)。
交易信息準備完畢後,經過丙的錢包驗證交易合法(UTXO合法,簽名有效,輸入輸出金額有效等等)後,將交易廣播到比特幣網絡中,由挖礦節點驗證交易後,打包交易(將交易記入比特幣區塊中),並向比特幣網絡廣播,交易完成。
舊的UTXO被消耗,新的UTXO開始生效,此時丁的錢包裡有一個未使用的UTXO(3): 丙給丁0.8BTC,丙的錢包裡有一個未使用的UTXO(4): 丙給丙0.3999BTC。

以上是較為抽象的比特幣交易的過程,有關比特幣交易的構造,簽名驗證,節點驗證,交易廣播,加入挖礦節點mempool,礦工構造預備區塊,以及最終的出塊確認的過程,後續會分別介紹,本篇不做展開。
從這個抽象的交易過程,我們可以發現,比特幣的交易實質上是一堆UTXO的輸入和輸出的過程,伴隨舊的UTXO被消耗,新的UTXO產生,完成了一次又一次的比特幣交易。交易的過程由非對稱加密和哈希算法進行雙重保護,比特幣持有者可以放心完成交易而不必擔心身份被洩露,交易過程中也消耗了一部分比特幣,用於獎勵打包交易的礦工,使礦工樂於完成自己維護比特幣網絡的任務。


