綜述
本提案定義了一個新結(jié)構(gòu)“witness”提交到區(qū)塊中盆顾,與交易的merkle tree不同。該結(jié)構(gòu)包含檢查交易有效性所需的數(shù)據(jù)昌腰。此外,腳本和簽名移動到了這個新結(jié)構(gòu)膀跌。
為了確保BIP軟分叉的兼容性遭商,該結(jié)構(gòu)通過coinbase交易嵌套在區(qū)塊已存在的merkle root。未來的硬分叉可以給該樹分配一個自己的分支捅伤。
動機
整個交易的效果由引用的交易輸出和新創(chuàng)建的交易輸出決定劫流。其他的交易數(shù)據(jù),尤其是簽名,僅僅只在驗證塊鏈的狀態(tài)的時候需要祠汇,其他的時候并不需要它仍秤。
通過從交易結(jié)構(gòu)中移除這些數(shù)據(jù)座哩,提交給交易merkle tree屿良,幾個問題得到修正:
- 無意導(dǎo)致的交易延展性變的不可能 : 因為簽名數(shù)據(jù)不再是組成交易哈希數(shù)據(jù)的一部分喷橙,所以交易簽名的變化將不再影響到對應(yīng)交易的確定菠秒。作為一個交易延展性的解決方案,它比經(jīng)典的簽名編碼解決方案更好(BIP62)。
- 對于所有類型的腳本察藐,該方案阻止了無意導(dǎo)致的簽名延展性,只要所有的交易輸入被簽名(使用至少一個CHECKSIG或CHECKMULTISIG操作碼)别洪。
- 在m-of-n的CHECKMULTISIG的多重簽名腳本中痢毒,只有得到所有私鑰所有者的同意凭舶,該交易才可能被延展(而不是BIP62中僅一個私鑰的持有者).
- 防止未知的ECDSA簽名延展性造成的交易延展。
- 允許沒有風(fēng)險的創(chuàng)建未確認的交易依賴鏈帅霜,這是對于offchain協(xié)議一個重要的功能(例如:閃電網(wǎng)絡(luò))
- 傳輸簽名數(shù)據(jù)變得可選擇 : 簽名數(shù)據(jù)只有當一個對等節(jié)點準備驗證該交易有效性是才需要匆背,對于只檢查該交易是否存在,并不需要該交易的簽名數(shù)據(jù)义屏。這將減少SPV 節(jié)點證明的字節(jié)大小靠汁,提升SPV節(jié)點的隱私性,因為SPV節(jié)點可以使用相同的帶寬下載更多的交易闽铐,
- 一些限制可以通過軟分叉繞過 : 通過轉(zhuǎn)移交易的部分數(shù)據(jù)到當前協(xié)議未知的數(shù)據(jù)結(jié)構(gòu)中蝶怔,例如:
- 當計算區(qū)塊字節(jié)大小時,witness的字節(jié)可以被忽略或減少兄墅,一定程度上增大了區(qū)塊的字節(jié)踢星。
- 硬編碼常量,例如最大的push字節(jié)數(shù)或操作碼個數(shù)的限制可以被移除或重新評估隙咸。
- 新的腳本系統(tǒng)可以不受現(xiàn)有腳本語義的限制被引入沐悦。例如:對于交易的簽名驗證,一個新的交易摘要算法被引入(BIP143)
規(guī)范
交易ID
一個新的數(shù)據(jù)結(jié)構(gòu):witness被定義五督。每個交易有兩個ID藏否。
txid的定義未變;
[nVersion] [txins] [txouts] [nLockTime]
新的wtxid被定義:
[nVersion] [marker] [flag] [txins] [txouts] [witness] [nLockTime]
nVersion, txins, txouts, and nLockTime格式與傳統(tǒng)的序列化相同充包。
marker 必須是一個值為0的字節(jié)副签,0x00.
flag 必須是一個非0的字節(jié):當前遥椿,必須是0x01。
witness是每個交易所有witness數(shù)據(jù)的序列化淆储。每個txin關(guān)聯(lián)一個witness字段冠场。一個witness字段以var_int開始,標識txin棧中item的數(shù)量本砰,后面緊跟棧上的items碴裙,每個item以var_int開始,標識長度点额。witness數(shù)據(jù)不是腳本舔株。
一個非witness程序的txin必須關(guān)聯(lián)一個空的witness字段,由0x00表示咖楣。如果所有的txins都是非witness程序督笆,則交易的wtxid等于它的txid芦昔。
承諾結(jié)構(gòu)
一個新的區(qū)塊規(guī)則被添加诱贿,該規(guī)則要求wtxid的承諾結(jié)構(gòu)。coinbase交易的承諾結(jié)構(gòu)被假設(shè)為0x00...000.
witness root hash
由所有wtxid
做為葉子來計算咕缎,與塊頭的hashMerkleRoot
相同的方式珠十。
該承諾結(jié)構(gòu)被記錄在coinbase交易的scriptPubKey
字段。它必須含有至少38個字節(jié)凭豪,前6個字節(jié)是:0x6a24aa21a9ed
,
1-byte - OP_RETURN (0x6a)
1-byte - Push the following 36 bytes (0x24)
4-byte - Commitment header (0xaa21a9ed)
32-byte - Commitment hash: Double-SHA256(witness root hash|witness reserved value)
39th byte onwards: Optional data with no consensus meaning
并且coinbase的交易輸入必須含有一個32字節(jié)的數(shù)組焙蹭,做為witness reserved value
.
如果有多個scriptPubKey
匹配這個格式,則索引最大的輸出被認定為承諾結(jié)構(gòu)嫂伞。
如果區(qū)塊的所有交易都不含witness數(shù)據(jù)孔厉,此時這個承諾結(jié)構(gòu)就可有可無。
witness program
一個scriptPubKey
(或定義在BIP16/P2SH中的redeemScript
)由一個字節(jié)的push 操作碼帖努,后緊跟一個2-40字節(jié)的數(shù)據(jù)獲得一個新的特殊含義撰豺。第一個push的值叫做version byte
,接下來的push字節(jié)向量叫做witness program
.
有兩種情況下,witness的驗證邏輯被觸發(fā)拼余。每種情況都決定了witness version字節(jié)和程序的位置污桦,以及scriptSig
的格式。
- 由一個版本字節(jié)和witness program組成的scriptPubKey觸發(fā)匙监。則
scriptSig
必須恰好是空或驗證失敗("native witness program")凡橱。 - 被一個P2SH腳本的
scriptPubKey
觸發(fā),并且pushscriptSig
到redeemScript
正好是一個版本字節(jié)加一個witness program亭姥。這個scriptSig
必須恰好是一個push到BIP16的redeemScript
或驗證失敗("P2SH witness program")
如果版本字節(jié)是0稼钩,并且witness program是20字節(jié)
- 解釋為一個 pay-to-witness-public-key-hash (P2WPKH)程序。
- 這個witness必須正好包含兩個item,且每個item小于等于520字節(jié)达罗。第一個是簽名坝撑,第二個是公鑰。
- 公鑰的hash160必須匹配20個字節(jié)的witness program。
- 正常腳本評估后绍载,簽名和公鑰通過CHECKSIG操作驗證通過诡宗。驗證必須在棧上chanTRUE的輸出。
如果版本字節(jié)是0击儡,并且witness program是32字節(jié):
- 解釋為一個pay-to-witness-script-hash(P2SH)程序塔沃。
- witness必須包含一個輸入棧以供給腳本,然后是一個腳本的序列化(witnessScript).
-
witnessScript
被反序列阳谍,并在正常的腳本評估后使用剩余的witness棧繼續(xù)執(zhí)行(每個堆棧項小于等于520字節(jié)). - 腳本一定不能執(zhí)行失敗蛀柴,并在棧上產(chǎn)生一個TRUE。
如果版本字節(jié)是0矫夯,但是witness program既不是20字節(jié)鸽疾,也不是32字節(jié),這個腳本必須失敗1训貌。
如果版本字節(jié)是1到16制肮,且witness program 或witness 堆棧沒有進一步的解釋,并且對于witness 堆棧沒有字節(jié)限制递沪。這些版本號保留給未來的拓展2豺鼻。
其他的共識規(guī)則限制
Block Size
區(qū)塊當前被限制在1,000,000(1M)字節(jié)。如下這樣改變限制:
Block wight = Base size * 3 + Total size; 3.
Base size是不帶witness數(shù)據(jù)的交易序列化后的字節(jié)大小款慨,具體方式查看未升級節(jié)點儒飒。
Total Size 是BIP144中描述的交易序列化方式后的字節(jié)大小,包含基礎(chǔ)數(shù)據(jù)和witness數(shù)據(jù)檩奠。
新的規(guī)則是:block wight <= 4,000,000(4M)
Sigops
當前每個塊的操作碼被限制在20,000桩了。如下這樣改變限制:
在當前鎖定腳本,簽名腳本埠戳,P2SH檢查腳本井誉,操作碼被計數(shù)為先前值的4倍。操作碼的限制同樣翻了一番 <= 80,000.
每個P2WPKH的交易輸入被記為1個操作碼乞而。另外送悔,在P2WSHwitnessScript
中的操作碼被記為與以前P2SHredeemScript
中相同的個數(shù)。也就是說爪模,CHECKSIG被記為一個操作碼欠啤,CHECKMULTISIG根據(jù)參數(shù)被記為1到20個操作碼。這個規(guī)則適用于標準的witness program和P2SH witness program屋灌。
額外的定義
接下來的定義沒有用于共識限制洁段,但建議符合上述術(shù)語。
Transaction size calculations(交易字節(jié)計算)
Transaction weight = Base transaction size * 3 + Total
transaction size共郭。(例如:相同的方法計算block weight)
Virtual transaction size = Transaction weight / 4. (四舍五入至下一個整型)
Base transaction size = 不帶witness 數(shù)據(jù)的交易序列化后的大小祠丝。
Total transaction size = BIP144中描述的交易序列化后的字節(jié)大小疾呻,包含基礎(chǔ)數(shù)據(jù)和witness數(shù)據(jù)。
新的腳本語義
盡管P2WPKH和P2WSH腳本看起來非常類似于預(yù)先隔離驗證腳本写半,但還是有一些顯著的不同岸蜗。用戶不得假設(shè)在預(yù)先隔離見證中可花費的腳本在P2WPKH或P2WSH也可以花費。再生產(chǎn)網(wǎng)絡(luò)大規(guī)模部署之前叠蝇,開發(fā)者應(yīng)該在測試網(wǎng)絡(luò)上使用默認的中繼策略測試腳本璃岳,并且在BIP141在主網(wǎng)絡(luò)被激活后,使用較少的金額去測試悔捶。
共識級別的主要不同在BIP143中描述铃慷,在0號版本的witness program 為簽名驗證定義了一個新的交易摘要算法。
在參考實現(xiàn)版本0.13.1中蜕该,三個中繼策略和挖礦政策也被包含在第一版的隔離見證中犁柜。基于這些策略的軟分叉很可能在不久的將來提出堂淡。為了在軟分叉中造成避免無限期的延遲交易確認或永久性的資金丟失馋缅,用戶必須仔細查看新的腳本語義。
- 在P2WPKH和P2WSH中只接受壓縮公鑰.BIP143
- 在P2WSH中OP_IF/NOTIF的參數(shù)必須是最小的.
- 如果OP_CHECKSIG或OP_CHECKMULTISIG失敗淤齐,簽名必須是空的字節(jié)向量.(當前的segregated witness腳本和P2WSH股囊,請看BIP146)
示例
P2WPKH
接下來的例子是0號版本的P2WPKH
witness: <signature> <pubkey>
scriptSig: (empty)
scriptPubKey: 0 <20-byte-key-hash>
(0x0014{20-byte-key-hash})
'0'在鎖定腳本中標識接下來的push數(shù)據(jù)是一個版本位0的witness program袜匿。witness program的長度標識腳本是一個P2WPKH類型更啄。witness必須恰好包含2項,在witness中公鑰的hash160必須匹配witness program居灯。
簽名被如此驗證:<signature> <pubkey> CHECKSIG
與傳統(tǒng)的P2PKH輸出相比祭务,P2WPKH在scriptPubKey中占據(jù)少3個字節(jié),并且從簽名腳本中轉(zhuǎn)移簽名和公鑰至witness字段怪嫌。
P2WPKH 嵌套在 BIP16 P2SH中
witness: <signature> <pubkey>
scriptSig: <0 <20-byte-key-hash>>
(0x160014{20-byte-key-hash})
scriptPubKey: HASH160 <20-byte-script-hash> EQUAL
(0xA914{20-byte-script-hash}87)
在簽名腳本中僅包含Hash160义锥,與鎖定腳本中的20字節(jié)的腳本哈希進行比較,并被解釋為:0 <20-byte-key-hash>
.
與以前的例子比較岩灭,scriptPubKey 大1字節(jié)拌倍,并且簽名腳本大23字節(jié)。盡管一個嵌套的witness program是不太高效噪径,但它的支付地址是完全透明的柱恤,并且向后兼容比特幣0.6.0以后的所有版本。
P2WSH
接下來的示例是1-of-2的多重簽名找爱,版本號0
witness: 0 <signature1> <1 <pubkey1> <pubkey2> 2 CHECKMULTISIG>
scriptSig: (empty)
scriptPubKey: 0 <32-byte-hash>
(0x0020{32-byte-hash})
在scriptPubKey 中的'0'標識接下來的push操作是一個版本號為0的witness program梗顺。witness program的長度標識是P2WSH類型。在witness中最后一項被彈出车摄,并被SHA256后寺谤,與在scriptPubKey中的32字節(jié)進行比較仑鸥,和反序列化。1 <pubkey1> <pubkey2> 2 CHECKMULTISIG
腳本使用witness中其余的數(shù)據(jù)進行執(zhí)行变屁。
0 <signature1> 1 <pubkey1> <pubkey2> 2 CHECKMULTISIG
P2WSH 允許最大字節(jié)腳本字節(jié)為10,000眼俊,520字節(jié)的限制被繞過。
scriptPubKey 占據(jù)34字節(jié)粟关,而不是P2SH中的23字節(jié)泵琳。增加字節(jié)提升了可能的碰撞攻擊的安全性,因為2**80是不再可行誊役』窳校可花費的腳本與BIP16中的交易輸出相同,但被已到了witness字段中蛔垢。
P2WSH nested in BIP16 P2SH
接下來的示例是1-of-2的多重簽名击孩,版本號0,但被嵌套在BIP16的P2SH輸出中鹏漆。
witness: 0 <signature1> <1 <pubkey1> <pubkey2> 2 CHECKMULTISIG>
scriptSig: <0 <32-byte-hash>>
(0x220020{32-byte-hash})
scriptPubKey: HASH160 <20-byte-hash> EQUAL
(0xA914{20-byte-hash}87)
對簽名腳本中的唯一項進行HASH160,然后與鎖定腳本中的20字節(jié)進行比較巩梢,被解釋為 0 <32-byte-hash>
.
P2WSH的witnessScript接下來如上述示例繼續(xù)執(zhí)行。
與以前的示例比較艺玲,鎖定腳本是小11個字節(jié)(降低了安全)括蝠;但是,它在簽名腳本中要求了35字節(jié)的數(shù)據(jù)饭聚。
可拓展的承諾結(jié)構(gòu)(Extensible commitment structure)
在coinbase交易中新的承諾結(jié)構(gòu)是哈希witness root hash
和witness reserved value
忌警。witness reserved value
當前沒有共識含義,但是在未來的軟分叉中允許成為新的共識結(jié)構(gòu)秒梳。例如:如果在未來要求一個新的嚴格共識結(jié)構(gòu)法绵,在coinbase中的承諾結(jié)構(gòu)將變?yōu)椋?code>Double-SHA256(Witness root hash|Hash(new commitment|witness reserved value))
為了向后兼容,Hash(new commitment|witness reserved value)
將移動到coinbase的 witness字段酪碘,并且witness reserved value
將通過軟分叉被記錄在另一個地方朋譬。任何數(shù)量的新的共識結(jié)構(gòu)都可以通過這種方式添加。
任何對于比特幣不嚴格共識的承諾結(jié)構(gòu)兴垦,如合并挖礦徙赢,一定不能使用witness reserved value
字段來保留升級比特幣共識協(xié)議的能力。
無信任的未確認交易依賴鏈
Segregated witness 從根本上修正了交易延展性問題探越,以一種無信任的方式構(gòu)建未確認的交易依賴鏈狡赐。
兩個成員,Alice和Bob扶关,可能同意發(fā)送一定數(shù)量的比特幣到2-of-2的多重簽名輸出(資金交易)阴汇。不需要簽名這個資金交易,他們就可以創(chuàng)建另一個交易节槐,時間鎖定在未來搀庶,花費2-of-2的多重簽名輸出至第三方(花費交易)拐纱。ALice和Bob將簽署花費交易,并交換簽名哥倔。驗證通過簽名后寝蹈,他們將簽署并提交現(xiàn)金交易至塊鏈敢订。不需要進一步的操作,花費交易將在時間戳到達之后被確認,并根據(jù)原始合同釋放資金蕊爵。它也保留了在時間戳之間撤銷原始合同的靈活性泛粹,通過使用一個更短的時間戳的花費交易溶褪,但是這種情況只能在雙方達成共識的情況下發(fā)生入问。
BIP62 的設(shè)置不可能修復(fù)交易延展性,因為花費交易不可能在雙方?jīng)]有簽署資金交易的情況下創(chuàng)建蒂破。如果Alice比Bob早一步展示資金交易簽名馏谨,Bob可以無限期的鎖定資金,而無需簽署任何花費交易附迷。
未確認的交易依賴鏈是更復(fù)雜的支付網(wǎng)絡(luò)基本組成部分惧互,例如:全雙工微型支付通道和閃電網(wǎng)絡(luò),可能隱式的極大提升比特幣系統(tǒng)的可拓展性和效率喇伯。
未來的拓展
用于SPV節(jié)點的緊湊型欺詐證明
比特幣當前僅含有兩種安全模式喊儡。在系統(tǒng)中,用戶要么運行全節(jié)點使用所有的規(guī)則驗證每個區(qū)塊稻据,或一個SPV客戶端僅驗證頭部作為一些交易的發(fā)布證明艾猜。比特幣白皮書建議SPV客戶端可以接收來自全節(jié)點的警告,即當全節(jié)點檢測到一個無效的區(qū)塊攀甚,提示SPV節(jié)點去下載這個有問題的區(qū)塊和交易去驗證箩朴。然而,這種方法可能會成為DOS攻擊的載體秋度,因為可以幾乎沒有成本的產(chǎn)生警告。警告必須具有緊湊但確定性的欺詐證明钱床。
在當前的比特幣協(xié)議中荚斯,對于幾乎所有的規(guī)則,都能產(chǎn)生緊湊型欺詐證明查牌,除了特別少的一些例外:
- 當沒有展示整個區(qū)塊和它的所有交易輸入事期,則不可能證明礦工在coinbase交易輸出中引入了太多的比特幣。
- 當沒有展示整個區(qū)塊(和所有的交易輸入操作碼)纸颜,則不可能證明違反了塊的指定限制(例如:字節(jié)和操作碼數(shù)量限制)兽泣。
- 沒有展示塊鏈中的所有的交易ID顯示在創(chuàng)建的區(qū)塊中,則不能證明花費了不存在交易輸入胁孙。
可以提交額外的witness數(shù)據(jù)唠倦,以允許SPV節(jié)點可以快速驗證無效的區(qū)塊的簡短證明称鳞。
- 交易費的總和可以用來建立簡短的證明,證明礦工沒有在coinbase交易中添加額外的交易費稠鼻。類似于區(qū)塊的大小和操作碼計數(shù)限制冈止。
- 可以提供交易輸入所花費的輸出的反向鏈接。反向鏈接由塊的哈希和一個偏移量組成候齿,請客戶端可以非常容易的查詢和檢查驗證交易輸出的存在熙暴。
這些承諾結(jié)構(gòu)可以通過軟分叉被包含在可拓展的承諾結(jié)構(gòu)中,并且對于不理解新規(guī)則的節(jié)點將是透明的慌盯。
新的腳本系統(tǒng)
因為一個版本字節(jié)在witness program之前被push, 并且使用未知版本號的program被認為是anyone-can-spend腳本周霉,所有可以通過軟分叉引入任何新的腳本系統(tǒng)。witness結(jié)構(gòu)不會被任何已存在的腳本語義和限制所限制亚皂,特別是520字節(jié)的push限制诗眨,因此允許任意大的腳本和簽名。
例如:包含Schnorr簽名的新腳本系統(tǒng)將顯著減少多簽名交易的字節(jié)孕讳;包含Schnorr簽名的腳本是具有抗量子計算的匠楚,以及Merklized抽象語義樹允許在非常復(fù)雜的條件腳本上含有非常緊湊的witness數(shù)據(jù)。
每個輸入的鎖定時間和相對鎖定時間
在交易中僅含有一個nLockTime字段厂财,所有的交易輸入飛享相同的值芋簿。BIP68使用nSequence字段標識相對鎖定時間,然而璃饱,鎖定時間和和決議有限制与斤。
使用軟分叉,可以引入一個分離的witness結(jié)構(gòu)荚恶,允許每個交易輸入有自己的鎖定時間和相當鎖定時間撩穿,并且新的腳本系統(tǒng)可以簽名和操作新的數(shù)據(jù)(類似于BIP65和BIP112)。
向后兼容
作為一個軟分叉谒撼,舊版本的軟件將沒有任何變化的繼續(xù)執(zhí)行食寡。未升級的節(jié)點,將不能看到并驗證witness數(shù)據(jù)廓潜,并且認為所有的witness program都是anyone-can-spend腳本(除了一些邊緣的案例抵皱,witness program等于0,該腳本執(zhí)行肯定失敗)辩蛋。錢包應(yīng)當一直警惕anyone-can-spend腳本呻畸,并對他們持懷疑態(tài)度。所有未升級的節(jié)點強烈建議去升級悼院,以便可以采用新功能伤为。
未升級的錢包可以做什么:
- 從已升級和未升級的錢包接收比特幣
- 發(fā)送比特幣給未升級的錢包,并且升級傳統(tǒng)P2PKH地址的錢包(沒有隔離見證交易的好處)
- 使用P2SH地址發(fā)送比特幣給升級的錢包
- 通過BIP70 支付協(xié)議据途,使用本地隔離程序發(fā)送比特幣給升級的錢包
未升級的錢包不可以做什么:
- 驗證隔離見證交易绞愚。它假設(shè)這樣的一個交易是一直有效的叙甸。
部署
該BIP通過BIP9的版本字節(jié)和SegWit名稱,使用bit 1的位置進行部署爽醋。
主網(wǎng)絡(luò)的部署時間(都為BIP9的中位數(shù)時間):開始:2016.11.15; 結(jié)束:2017.11.15
測試網(wǎng)路的部署時間(都為BIP9的中位數(shù)時間): 開始:2016.05.01蚁署; 結(jié)束:2017.05.01
腳注:
案例: 攜帶OP_0以及40個非0字節(jié)PUSH數(shù)據(jù)的鎖定腳本,由于不正確的字節(jié)長度蚂四,將導(dǎo)致驗證失敗光戈。然而,攜帶OP_0以及41個非0字節(jié)的PUSH數(shù)據(jù)將通過遂赠,因為它不被認為是一個witness程序久妆。
為了向后兼容,對于從0到16的任何版本字節(jié)跷睦,如果這個witness程序的CastToBool的值為0筷弦,這個腳本必須失敗。然而抑诸,這樣的哈希是一次成功的對哈希函數(shù)的原項攻擊烂琴,并且風(fēng)險可以忽略。
合理使用單一復(fù)合約束蜕乡,替代兩個分開的限制:1M的基本數(shù)據(jù)和3M witness數(shù)據(jù)奸绷;使用兩個單獨的限制將使挖礦和交易費預(yù)估幾乎不可能。礦工將要解決一個復(fù)雜的非線性優(yōu)化問題:以找到一組符合兩者的最大交易費层玲,且錢包無法知道需要支付多少交易費号醉,因為此時的交易費依賴于當?shù)V工使用交易產(chǎn)生區(qū)塊時,這兩個條件哪個條件受到最高約束辛块。這種方法的另一個問題是freeloading畔派。一旦一組交易的基本數(shù)據(jù)達到1M限制,僅通過最小化增加費用就可以給witness字段添加額外高達3M的數(shù)據(jù)润绵。在這種情況下线椰,額外witness空間的邊際成本實際變?yōu)?.
引用實現(xiàn)
https://github.com/bitcoin/bitcoin/pull/8149
引用
原文地址 : https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki
BIP143 : https://github.com/bitcoin/bips/blob/master/bip-0143.mediawiki
BIP62 : https://github.com/bitcoin/bips/blob/master/bip-0062.mediawiki
BIP144 : https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki
BIP146 : https://github.com/bitcoin/bips/blob/master/bip-0146.mediawiki
本文由 Copernicus團隊 姚永芯
翻譯,轉(zhuǎn)載無需授權(quán)授药。