前四章摘要:http://www.reibang.com/p/26368d2e1486
第五章 交易
比特幣交易是比特幣系統(tǒng)中最重要的部分幅狮。根據(jù)比特幣系統(tǒng)的設(shè)計(jì)原理晶乔,系統(tǒng)中任何其他的部分都是為了確保比特幣交易可以被生成涣易、能在比特幣網(wǎng)絡(luò)中得以傳播和通過驗(yàn)證壳炎,并最終添加入全球比特幣區(qū)塊鏈渠概。
我們將會(huì)剖析比特幣交易的多種形式马绝、所包含的信息、如何被創(chuàng)建束凑、如何被驗(yàn)證晒旅、如何被永久記錄。
5.1 比特幣交易的生命周期
創(chuàng)建---被一個(gè)或多個(gè)簽名加密--->廣播網(wǎng)絡(luò)中-->被大多數(shù)節(jié)點(diǎn)接受
5.1.1 創(chuàng)建比特幣交易
一筆交易本質(zhì)上就是一個(gè)以貨幣轉(zhuǎn)移為目的的工具湘今。
比特幣交易可以被任何人在線上或線下創(chuàng)建敢朱,即便創(chuàng)建這筆交易的人不是這個(gè)賬戶的授權(quán)簽字人。一旦一筆交易被創(chuàng)建摩瞎,而且是合法創(chuàng)建并簽名的,則這筆交易就是有效的孝常。
5.1.2 廣播交易至比特幣網(wǎng)絡(luò)
本質(zhì)上旗们,一筆比特幣交易只是300-400字節(jié)的數(shù)據(jù),而且必須被發(fā)送到任意一個(gè)比特幣節(jié)點(diǎn)构灸。由于這筆交易是經(jīng)過簽名的且不含任何機(jī)密信息上渴、私鑰和密碼,因此可以被任何潛在的便利網(wǎng)絡(luò)公開地傳播喜颁。
比特幣交易可以通過未加密網(wǎng)絡(luò)(WiFi 藍(lán)牙 條形碼 等)被發(fā)送到比特幣網(wǎng)絡(luò)稠氮。甚至可以通過無線電和衛(wèi)星等方式傳輸。
5.1.3 比特幣交易在比特幣網(wǎng)絡(luò)中的傳播
比特幣網(wǎng)絡(luò)是一個(gè)P2P網(wǎng)絡(luò)半开,意味著每一個(gè)節(jié)點(diǎn)都連接到一些其他節(jié)點(diǎn)上(其他節(jié)點(diǎn)是在啟動(dòng)點(diǎn)對(duì)點(diǎn)協(xié)議的時(shí)候被發(fā)現(xiàn)的)隔披。
一旦一筆交易被發(fā)送到任何一個(gè)節(jié)點(diǎn)上,就會(huì)被該節(jié)點(diǎn)驗(yàn)證寂拆。如果被驗(yàn)證有效奢米,這個(gè)節(jié)點(diǎn)就會(huì)傳播到這個(gè)節(jié)點(diǎn)所連接的其他節(jié)點(diǎn)。同時(shí)給予交易發(fā)起者以反饋纠永。一般而言鬓长,一筆有效的交易在幾秒鐘之內(nèi)可以傳播到所有節(jié)點(diǎn)。
5.2 交易結(jié)構(gòu)
一筆交易是一個(gè)含有輸入值和輸出值的數(shù)據(jù)結(jié)構(gòu)尝江,該數(shù)據(jù)結(jié)構(gòu)植入了將一筆資金從起始點(diǎn)轉(zhuǎn)移到目標(biāo)地址的代碼信息涉波。
大小 | 字段 | 描述 |
---|---|---|
4 字節(jié) | 版本 | 明確這筆交易參照的規(guī)則 |
1-9 字節(jié) | 輸入數(shù)量 | 被包含的輸入的數(shù)量 |
不定 | 輸入 | 一個(gè)或多個(gè)交易輸入 |
1-9 字節(jié) | 輸出數(shù)量 | 被包含的輸出的數(shù)量 |
不定 | 輸出 | 一個(gè)或多個(gè)輸出 |
4 字節(jié) | 時(shí)鐘時(shí)間 | 一個(gè) UNIX 時(shí)間戳或區(qū)塊號(hào) |
5.3 交易的輸出和輸入
比特幣交易的基本單位是 UTXO (Unspent Transaction Output)未經(jīng)使用的交易輸出。UTXO 是不能再分割、被所有者鎖住或記錄與區(qū)塊鏈中的并被整個(gè)網(wǎng)絡(luò)識(shí)別成貨幣單位的一定量的比特幣貨幣啤覆。
實(shí)際上苍日,并不存在存儲(chǔ)比特幣地址或賬戶余額的地點(diǎn),只有被所有者鎖住的城侧、分散的UTXO易遣。而比特幣錢包中的比特幣余額是通過掃描區(qū)塊鏈并聚合所有屬于該賬號(hào)的UTXO得到的。
一筆交易可以有任意數(shù)值嫌佑,但必須從用戶可用的UTXO中創(chuàng)建出來豆茫。所有這些復(fù)雜的、由可以支付的UTXO完成的組合屋摇,都是用戶的錢包完成的揩魂,用戶并不可知。
被消耗的UTXO被稱為交易輸入炮温,由交易創(chuàng)建的UTXO稱為交易輸出火脉。通過這種方式,一定量的btc價(jià)值在不同所有者之間轉(zhuǎn)移柒啤,在交易鏈中消耗和創(chuàng)建UTXO倦挂。通過使用所有者的簽名來解鎖UTXO,并通過使用新的所有者的比特幣地址來鎖定并創(chuàng)建UTXO担巩。
一個(gè)區(qū)塊里的首個(gè)交易比較特殊方援,叫 Coinbase 交易,是支付給礦工的涛癌。只有輸出犯戏,沒有輸入。
5.3.1 交易輸出
輸出被區(qū)塊鏈記錄下來拳话,UTXO 被每一個(gè)全節(jié)點(diǎn)比特幣客戶端在一個(gè)存儲(chǔ)于內(nèi)存中的數(shù)據(jù)庫(kù)所追蹤先匪,也稱為“UTXO集”
交易輸出包含兩個(gè)部分:
- 一定量的比特幣,聰 是最小的比特幣單位弃衍。
- 一個(gè)鎖定腳本呀非,提出支付輸出所必須被滿足的條件以“鎖住”這筆總額。
5.3.2 交易輸入
簡(jiǎn)單地說笨鸡,交易輸入是指向UTXO的指針姜钳。它們指向特定的UTXO,并被交易哈希和在區(qū)塊鏈中記錄UTXO的序列號(hào)作為參
考形耗。
若想支付UTXO哥桥,一個(gè)交易的輸入也需要包含一個(gè)解鎖腳本,用來滿足UTXO的支付條件激涤。解鎖腳本通常是一個(gè)簽名拟糕,用來證明對(duì)于在鎖定腳本中的比特幣地址擁有所有權(quán)判呕。
5.3.3 交易費(fèi)
大多數(shù)交易包含交易費(fèi),這是為了在網(wǎng)絡(luò)安全方面給礦工的補(bǔ)償送滞。
交易費(fèi)作為激勵(lì)機(jī)制侠草,被挖出這個(gè)區(qū)塊的礦工所得,并且記錄在區(qū)塊鏈中犁嗅,而交易費(fèi)基于交易的尺寸边涕,用千字節(jié)來計(jì)算,而不是比特幣的價(jià)值褂微。交易費(fèi)提高會(huì)提高處理優(yōu)先級(jí)功蜓。
5.3.4 把交易費(fèi)加到交易中
交易費(fèi) = 求和 (所有輸入) - 求和(所有輸出)
5.4 交易鏈條和孤立交易
目的:多方交易,保護(hù)隱私
如何處理:交易鏈被傳送時(shí)并不會(huì)按照相同的順序宠蚂,在節(jié)點(diǎn)收到一個(gè)子交易的時(shí)候式撼,不會(huì)立即拋棄,而是放到一個(gè)臨時(shí)池中求厕,等著接受父交易著隆。沒有父交易的交易池被稱為孤立交易池。一旦受到父交易呀癣,所有與這個(gè)父交易創(chuàng)建的UTXO有關(guān)的孤立塊會(huì)釋放出來美浦,遞歸地重新驗(yàn)證。
孤立交易數(shù)量(取決于MAX_ORPHAN_TRANSACTIONS)是有限制的项栏,這是為了防止拒絕服務(wù)攻擊抵代。(Dos)
5.5 比特幣交易腳本和腳本語言
腳本創(chuàng)建(鎖定與解鎖)
比特幣的交易驗(yàn)證引擎依賴于兩類腳本來驗(yàn)證比特幣交易:一個(gè)鎖定腳本和一個(gè)解鎖腳本。
鎖定腳本是一個(gè)放在一個(gè)輸入者的“障礙”忘嫉,明確了花費(fèi)這比輸出的條件。也叫腳本公鑰代碼案腺。
解鎖腳本是一個(gè)“解決”或滿足被鎖定腳本在一個(gè)輸出上設(shè)定的花費(fèi)條件的腳本庆冕,同時(shí)它被允許輸出被消費(fèi)。由于常常包含一個(gè)數(shù)字簽名劈榨,稱作scriptSig访递。
隨著堆棧的傳遞被分別執(zhí)行,首先同辣,執(zhí)行解鎖腳本拷姿,如果解鎖腳本在執(zhí)行過程中未報(bào)錯(cuò),主堆棧將被復(fù)制旱函,然后腳本將被執(zhí)行响巢。結(jié)果為真,代表該輸入是一個(gè)能使用該UTXO的有效授權(quán)棒妨。
比特幣腳本語言包含許多操作踪古,但都故意限定為一種重要的方式----沒有循環(huán)或者復(fù)雜流控制功能以外的其他條件的流控制,保證了腳本語言的圖靈非完備性,意味著腳本的復(fù)雜性有限伏穆,交易可執(zhí)行的次數(shù)也可預(yù)見拘泞。可以防止交易激活機(jī)制被當(dāng)作薄弱環(huán)節(jié)加以利用枕扫。
5.6 標(biāo)準(zhǔn)交易
5.6.1 P2PKH(pay-to-public-key-hash)
比特幣網(wǎng)絡(luò)上大多數(shù)交易是這種陪腌,含有一個(gè)鎖定腳本,該腳本由公鑰哈希實(shí)現(xiàn)組織輸出的功能烟瞧,公鑰哈希即為比特幣地址诗鸭。由P2PKH腳本鎖定的輸出可以通過鍵入公鑰和由相應(yīng)私鑰創(chuàng)設(shè)的數(shù)字簽名得以解鎖。
5.6.2 P2PK(pay-to-public-key)
與P2PKH相比燕刻,P2PK模式更為簡(jiǎn)單只泼。與P2PKH模式含有公鑰哈希的模式不同,在P2PK腳本模式中卵洗,公鑰本身已經(jīng)存儲(chǔ)在
鎖定腳本中请唱,而且代碼長(zhǎng)度也更短。在coinbase交易中最為常見过蹂。
5.5.3 多重簽名
M-N組合 多重簽名腳本:公鑰個(gè)數(shù)為N十绑,至少需要M個(gè)菜可以解鎖。
5.6.4 數(shù)據(jù)輸出(OP_RETURN操作符)
OP_Return 允許開發(fā)者在交易輸出上增加40字節(jié)的非交易數(shù)據(jù)酷勺。然后本橙,與偽交易型的UTXO不同,OP_Return 創(chuàng)造了?種明確的可復(fù)查的?交易型輸出脆诉,此類數(shù)據(jù)無需存儲(chǔ)于UTXO集甚亭。 OP_Return 輸出被記錄在區(qū)塊鏈上,它們會(huì)消耗磁盤空間击胜,也會(huì)導(dǎo)致區(qū)塊鏈規(guī)模的增加亏狰,但它們不存儲(chǔ)在UTXO集中,因此也不會(huì)使得UTXO內(nèi)存膨脹偶摔,更不會(huì)以消耗代價(jià)高昂的內(nèi)存為代價(jià)使全節(jié)點(diǎn)都不堪重負(fù)暇唾。
5.6.5 P2SH(pay-to-script-hash)(其實(shí)沒太看明白)
旨在使復(fù)雜腳本的運(yùn)用能與直接向比特幣地址支付一樣簡(jiǎn)單,復(fù)雜的鎖定腳本被電子指紋所代替辰斋,電子指紋為密碼學(xué)哈希策州。
將腳本哈希編譯為一個(gè)地址,P2SH地址是基于Base編碼的一個(gè)含有20個(gè)字節(jié)哈希的腳本宫仗,就像比特幣地址是基于base58編碼的一個(gè)含有20個(gè)字節(jié)的公鑰够挂。以5開頭,
優(yōu)點(diǎn):
代碼更短锰什,構(gòu)建腳本任務(wù)給接受者