您好,登錄后才能下訂單哦!
這篇文章主要介紹“比特幣錢包隔離認(rèn)證開發(fā)知識(shí)點(diǎn)有哪些”,在日常操作中,相信很多人在比特幣錢包隔離認(rèn)證開發(fā)知識(shí)點(diǎn)有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”比特幣錢包隔離認(rèn)證開發(fā)知識(shí)點(diǎn)有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
錢包必須實(shí)現(xiàn)本節(jié)中的所有功能,以便在基本級(jí)別被視為segwit兼容:
兼容segwit的錢包必須支持pay-to-script-hash
(BIP16)及其地址格式(BIP13)。
對于付款,錢包必須能夠正確地將給定的P2SH地址轉(zhuǎn)換為scriptPubKey
,并創(chuàng)建一個(gè)交易。
為了接收付款,錢包必須能夠基于P2WPKH腳本(在下文中定義)創(chuàng)建P2SH地址,并且能夠識(shí)別對這些地址的支付。
這是強(qiáng)制性要求,即使錢包僅接受單簽名付款。
P2SH-P2WPKH地址與比特幣的原始單簽名P2PKH地址(前綴為1的地址)相當(dāng)。
與任何其他P2SH地址一樣,P2SH-P2WPKH地址的前綴為3。
在使用P2SH-P2WPKH UTXO并暴露redeemScript
之前,P2SH-P2WPKH地址與非segwit P2SH地址無法區(qū)分(例如非segwit多簽名地址)。
當(dāng)只有1個(gè)公鑰用于接收付款時(shí)(如P2PKH),應(yīng)使用P2SH-P2WPKH地址。
P2SH-P2WPKH使用與P2PKH相同的公鑰格式,但有一個(gè)非常重要的例外:P2SH-P2WPKH中使用的公鑰必須被壓縮,即大小為33字節(jié),并以0x02
或0x03
開頭。使用任何其他格式(如未壓縮的公鑰)可能會(huì)導(dǎo)致不可撤銷的資金損失。
創(chuàng)建P2SH-P2WPKH地址:
1.計(jì)算公鑰(keyhash
)的SHA256的RIPEMD160。盡管keyhash
公式與P2PKH相同,但應(yīng)避免重用keyhash
以獲得更好的隱私并防止意外使用未壓縮密鑰。
2.P2SH redeemScript
始終為22個(gè)字節(jié)。它以OP_0
開頭,然后是keyhash
的規(guī)范推送(如0x0014{20-byte keyhash}
)。
3.與其他P2SH相同,scriptPubKey
是OP_HASH160 hash260(redeemScript)OP_EQUAL
,地址是對應(yīng)的P2SH地址,前綴為3。
兼容segwit的錢包必須支持原始的交易格式,如nVersion|txins|txouts|nLockTime
。
兼容segwit的錢包也必須支持新的序列化格式,如nVersion|marker|flag|txins|txouts|witness|nLockTime
。
nVersion
,txins
,txouts
和nLockTime
的格式與原始格式相同。
marker
必須是0x00
。
flag
必須是0x01
。
witness
是交易的所有見證數(shù)據(jù)的序列化。
每個(gè)txin都與見證字段相關(guān)聯(lián)。作為結(jié)果,沒有表示顯示證據(jù)字段的數(shù)量,因?yàn)樗怯?code>txins的數(shù)量默認(rèn)的。
每個(gè)見證字段以compactSize integer開始,以指示相應(yīng)txin的堆棧項(xiàng)目數(shù)。然后是相應(yīng)txin的見證堆棧項(xiàng)目數(shù)(如果有的話)。
每個(gè)見證堆棧項(xiàng)都以compactSize integer
開頭,以指示該項(xiàng)的字節(jié)數(shù)。
如果txin
未與任何見證數(shù)據(jù)相關(guān)聯(lián),則其對應(yīng)的見證字段精確為0x00
,表示見證堆棧項(xiàng)的數(shù)量為零。
如果交易中的所有txins
都沒有與任何見證數(shù)據(jù)相關(guān)聯(lián),則交易必須以原始交易格式序列化,不包括marker
, flag
, witness
。例如,如果沒有txins
來自segwit UTXO,它必須以原始交易格式序列化。(coinbase交易例外)
可以在BIP143的示例部分找到交易序列化的示例。錢包開發(fā)人員可以使用這些示例來測試他們的實(shí)現(xiàn)是否正確解析了新的序列化格式。
在segwit下,每個(gè)交易將有2個(gè)ID。
txid
的定義保持不變:原始序列化格式的double SHA256。
定義了一個(gè)新的wtxid
,它是具有見證數(shù)據(jù)的新序列化格式的double SHA256。
如果交易沒有任何見證數(shù)據(jù),則其wtxid
與txid
相同。
txid
仍然是交易的主要標(biāo)識(shí)符:
當(dāng)引用先前的輸出時(shí),它必須在txin
中使用。
如果錢包或服務(wù)當(dāng)前正在使用txid
來識(shí)別交易,則預(yù)示著它將繼續(xù)使用segwit。
對于非segwit UTXO的消費(fèi),簽名生成算法不變。
對于P2SH-P2WPKH的消費(fèi): -scriptSig
必須只包含一個(gè)redeemScript
。
相應(yīng)的見證字段必須包含2個(gè)項(xiàng)目,簽名后跟公鑰。
BIP143(見文末)中描述了一種用于segwit腳本的新簽名生成算法。開發(fā)人員應(yīng)仔細(xì)遵循說明,并使用BIP143中的P2SH-P2WPKH示例,以確保它們能夠重現(xiàn)sighash
。
BIP143簽名生成算法涵蓋了所花費(fèi)的輸入值,簡化了air-gapped輕量錢包和硬件錢包的設(shè)計(jì)。
請注意,對于P2SH-P2WPKH,scriptCode
總是26個(gè)字節(jié),包括前導(dǎo)大小字節(jié),如0x1976a914{20-byte keyhash}88ac
,不是redeemScript
,也不是scriptPubKey
。
示例。
如果錢包通過對等網(wǎng)絡(luò)發(fā)送和接收交易,則需要網(wǎng)絡(luò)服務(wù)。
支持Segwit的節(jié)點(diǎn)將表示他們可以通過服務(wù)位提供見證:NODE_WITNESS=(1<<3)
。
沒有任何見證數(shù)據(jù)的交易(因此以原始格式序列化)可以發(fā)送到有或沒有NODE_WITNESS
支持的節(jié)點(diǎn)。
花費(fèi)segwit UTXO(因此以新格式序列化)的交易必須僅發(fā)送到具有NODE_WITNESS
支持的節(jié)點(diǎn)。
花費(fèi)segwit UTXO但剝離見證數(shù)據(jù)(因此以原始格式序列化)的交易可以發(fā)送到?jīng)]有NODE_WITNESS支持的節(jié)點(diǎn)。但是,這些交易在激活segwit后無效,并且在塊中不會(huì)被接受。
有關(guān)網(wǎng)絡(luò)服務(wù)的詳細(xì)信息,請參閱BIP144(見文末)。
在segwit交易很普遍之前,這種交易類型可以使比特幣跟蹤更容易。
使用P2SH-P2WPKH作為默認(rèn)變化時(shí)的輸出也可能會(huì)對隱私產(chǎn)生影響。
替代交易大小,定義了一個(gè)新的度量,稱為“virtual size”(vsize
)。
交易的vsize
等于原始序列化大小的3倍,加上新格式序列化的大小,將結(jié)果除以4并向上舍入到下一個(gè)整數(shù)。例如,如果一個(gè)交易是200字節(jié)的新格式序列化,并且變?yōu)?9字節(jié),刪除了marker
,flag
,witness
,則vsize
為(99*3+200)/4=125并向上舍入。
非segwit交易的vsize
只是它本身的大小。
交易費(fèi)應(yīng)通過比較vsize
與其他交易而不是大小來估算。
開發(fā)人員應(yīng)注意不要在費(fèi)用估算中犯off-by-4-times錯(cuò)誤。
從塊高度481824開始,所有SegWit就緒節(jié)點(diǎn)都開始執(zhí)行新的SegWit共識(shí)規(guī)則。
應(yīng)繼續(xù)支持發(fā)送和接收傳統(tǒng)的P2PKH支付(前綴為1的地址)。
如果錢包支持除單一簽名之外的腳本類型,例如多重簽名,則必須滿足以下基本要求:
#### 創(chuàng)建P2SH-P2WSH地址
P2SH-P2WSH地址與比特幣的原始P2SH地址相當(dāng),后者允許表示具有固定大小地址的任意復(fù)雜腳本。
與任何其他P2SH和P2SH-P2WPKH地址一樣,P2SH-P2WSH地址具有前綴3.在UTXO用完之前,它們無法區(qū)分。
要?jiǎng)?chuàng)建P2SH-P2WSH地址:
1.定義一個(gè)名為witnessScript
的腳本。
2.計(jì)算witnessScript
(scripthash
)的SHA256。請注意使用單個(gè)SHA256,而不是雙SHA256和RIPEMD160(SHA256)。
3.P2SH redeemScript
總是34個(gè)字節(jié)。它以OP_0
開頭,然后是scripthash
的規(guī)范推送(即0x0020{32-byte scripthash}
)。
4.與任何其他P2SH相同,scriptPubKey
是OP_HASH160 hash260(redeemScript) OP_EQUAL
,地址是對應(yīng)的P2SH地址,前綴為3。
腳本評(píng)測不能失敗,并且必須在評(píng)測后留下一個(gè)且只有一個(gè)TRUE堆棧項(xiàng)。否則,評(píng)估失敗。
P2SH-P2WSH腳本中的任何公鑰必須是壓縮密鑰,否則資金可能永久丟失。
如果使用OP_IF
或OP_NOTIF
,則其參數(shù)必須是空向量(對于false)或0x01
(對于true)。使用其他值可能導(dǎo)致永久性資金損失。(BIP草案)。
如果OP_CHECKSIG
或OP_CHECKMULTISIG
返回失敗,則所有簽名必須為空向量。否則,資金可能會(huì)永久丟失。(BIP146)。
witnessScript
的默認(rèn)策略限制為3600字節(jié)。除了witnessScript
,最多可以有100個(gè)見證堆棧項(xiàng),每個(gè)最多80個(gè)字節(jié)。超出這些限制的交易不得轉(zhuǎn)發(fā)或包含在一個(gè)區(qū)塊中。
許多原始腳本的共識(shí)限制,例如10000字節(jié)腳本大小,201 nOpCount
,仍然適用于P2SH-P2WSH。
P2SH的520字節(jié)腳本大小限制不適用于P2SH-P2WSH。它被3600字節(jié)的策略限制和10000字節(jié)的共識(shí)限制所取代。
對于P2SH-P2WSH的消費(fèi):
scriptSig
必須只包含一個(gè)redeemScript
。
相應(yīng)見證字段的最后一個(gè)見證項(xiàng)必須是witnessScript
。
新的BIP143簽名生成算法適用于:
在不使用任何OP_CODESEPARATOR
的情況下,scriptCode
是witnessScript
,前面是一個(gè)compactSize integer
,用于witnessScript
的大小。例如,如果腳本是OP_1
(0x51
),則序列化的scriptCode
是(0x0151
)。
對于包含OP_CODESEPARATOR
的任何異常腳本,請參閱BIP143以獲取確切的語義。
在witnessScript
之前的任何見證堆棧項(xiàng)目都用作腳本評(píng)測的輸入堆棧。輸入堆棧不會(huì)被解釋為腳本。例如,不需要使用0x4c
(OP_PUSHDATA1)來“push”大項(xiàng)。
要驗(yàn)證簽名生成和堆棧序列化的正確性,請始終根據(jù)BIP143中的示例進(jìn)行測試。
示例。
初始segwit支持不需要以下功能。
Native P2WPKH是一個(gè)22字節(jié)的scriptPubKey
。它以OP_0
開頭,然后是keyhash
的規(guī)范推送(即0x0014{20-byte keyhash}
)。
與P2SH-P2WPKH相同,keyhash
是壓縮公鑰的RIPEMD160(SHA256)。
當(dāng)使用原生P2WPKH時(shí),scriptSig
必須為空,見證堆棧格式和簽名生成規(guī)則與P2SH-P2WPKH相同(包括使用壓縮公鑰的要求)。
示例。
原生P2WSH是一個(gè)34字節(jié)的scriptPubKey
。它以OP_0
開頭,然后是scripthash
的規(guī)范推送(即0x0020{32-byte scripthash}
)。
與P2SH-P2WSH相同,scripthash
是witnessScript
的SHA256。
當(dāng)使用原生P2WSH時(shí),scriptSig
必須為空,見證堆棧格式和簽名生成規(guī)則與P2SH-P2WSH相同(包括使用壓縮公鑰的要求)。
示例。
BIP173為本機(jī)P2WPKH和P2WSH地址提出校驗(yàn)和base32格式(Bech42)。
比特幣核心v0.16.0中包含對Bech42地址的支持。
與P2SH版本相比,在大多數(shù)情況下,本機(jī)版本的交易vsize
較小,因此可能需要較少的費(fèi)用。
原生P2WPKH和P2WSH可以與原始scriptPubKey
協(xié)議一起使用,例如支付協(xié)議(BIP70)。但是,它可能會(huì)影響付款人和收件人的隱私(見下文)。
原生P2WPKH和P2WSH可用作默認(rèn)更改地址,但這可能允許其他人輕松識(shí)別更改(參見下文)。
在廣泛使用原生P2WPKH和P2WSH之前,這些地址類型可能會(huì)引起用戶之間的隱私問題。
不同見證交易類型和交易有效性檢查工具的示例
BIP141
BIP143
BIP144
BIP145
BIP173
腳本測試
有效的交易測試
無效的交易測試
到此,關(guān)于“比特幣錢包隔離認(rèn)證開發(fā)知識(shí)點(diǎn)有哪些”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。