時(shí)間:2023-07-09|瀏覽:253
以比特幣為例,我們知道比特幣網(wǎng)絡(luò)里設(shè)計(jì)挖礦的目的是打包交易,維護(hù)比特幣網(wǎng)絡(luò),那么交易其實(shí)就是跟挖礦息息相關(guān)的第一個(gè)環(huán)節(jié)。在比特幣網(wǎng)絡(luò)中交易的過(guò)程使用了非對(duì)稱加密技術(shù),數(shù)字摘要技術(shù),區(qū)塊鏈技術(shù)等,其中的技術(shù)實(shí)現(xiàn),已經(jīng)有眾多大神珠玉在前,博主就不獻(xiàn)丑了。這篇文章的主要目的是將比特幣的交易過(guò)程用較為淺顯的語(yǔ)言展示出來(lái),讓更多跟筆者一樣的技術(shù)門(mén)外漢了解比特幣。
在展開(kāi)說(shuō)明之前,需要先安利幾個(gè)概念:非對(duì)稱加密,也叫公開(kāi)密鑰加密,用于保證信息傳輸?shù)陌踩裕还K惴ǎ糜谟?jì)算大數(shù)據(jù)量的數(shù)字摘要;比特幣里的公鑰和私鑰,用來(lái)確定比特幣歸屬的一對(duì)對(duì)公鑰和私鑰;UTXO,即未花費(fèi)的交易輸出,是比特幣世界里的抽象貨幣,每個(gè)UTXO都被公鑰鎖定,只有持有對(duì)應(yīng)私鑰的人可以使用。
拋開(kāi)代碼,我們接下來(lái)看看比特幣的交易是怎樣的一個(gè)過(guò)程。圖中有甲、乙、丙、丁四個(gè)人,他們都有比特幣錢(qián)包,錢(qián)包私鑰自己持有,錢(qián)包地址在比特幣網(wǎng)絡(luò)公開(kāi),用于UTXO的鎖定和驗(yàn)證。 起始,甲給丙0.7BTC,在比特幣網(wǎng)絡(luò)里的記錄是UTXO(1):甲給丙0.7BTC;乙給丙0.5BTC,在比特幣網(wǎng)絡(luò)里的記錄是UTXO(2):乙給丙0.5BTC。此時(shí),丙的比特幣錢(qián)包的賬戶余額為這兩個(gè)UTXO之和,丙的比特幣總數(shù)=UTXO(1)+UTXO(2)=1.2BTC。
這天,丙向丁買(mǎi)了一批貨物,需要向丁支付0.8BTC。丙通過(guò)比特幣網(wǎng)絡(luò)向丁轉(zhuǎn)賬,但丙現(xiàn)有的兩個(gè)UTXO均不足0.8BTC,需要將兩個(gè)UTXO一起使用,類似現(xiàn)金交易:給丁支付1.2BTC,丁找給丙0.4BTC。但在比特幣網(wǎng)絡(luò)中,這個(gè)找零的工作是由丙自己發(fā)起的。
整個(gè)交易的流程如下: 1. 丙通過(guò)比特幣錢(qián)包準(zhǔn)備交易信息,交易信息包括輸入和輸出兩個(gè)部分,輸入是UTXO(1)和UTXO(2),以及丙的錢(qián)包私鑰簽名。 2. 交易的輸出是未確認(rèn)的UTXO(3):丙給丁0.8BTC,待交易確認(rèn)后,將被丁的錢(qián)包公鑰鎖定。 3. 還需輸出一個(gè)未確認(rèn)的UTXO(4):丙給丙0.3999BTC,待交易確認(rèn)后,將被丙的錢(qián)包公鑰鎖定。 4. 交易信息準(zhǔn)備完畢后,經(jīng)過(guò)丙的錢(qián)包驗(yàn)證交易合法后,將交易廣播到比特幣網(wǎng)絡(luò)中,由挖礦節(jié)點(diǎn)驗(yàn)證交易后,打包交易并向比特幣網(wǎng)絡(luò)廣播,交易完成。 5. 舊的UTXO被消耗,新的UTXO開(kāi)始生效,此時(shí)丁的錢(qián)包里有一個(gè)未使用的UTXO(3):丙給丁0.8BTC,丙的錢(qián)包里有一個(gè)未使用的UTXO(4):丙給丙0.3999BTC。
以上是較為抽象的比特幣交易的過(guò)程。從這個(gè)抽象的交易過(guò)程,我們可以發(fā)現(xiàn),比特幣的交易實(shí)質(zhì)上是一堆UTXO的輸入和輸出的過(guò)程,伴隨舊的UTXO被消耗,新的UTXO產(chǎn)生,完成了一次又一次的比特幣交易。交易的過(guò)程由非對(duì)稱加密和哈希算法進(jìn)行雙重保護(hù),比特幣持有者可以放心完成交易而不必?fù)?dān)心身份被泄露,交易過(guò)程中也消耗了一部分比特幣,用于獎(jiǎng)勵(lì)打包交易的礦工,使礦工樂(lè)于完成自己維護(hù)比特幣網(wǎng)絡(luò)的任務(wù)。