綜述
不需要改變?nèi)魏维F(xiàn)存的共識(shí)規(guī)則,來增大比特幣的交易吞吐量急凰。
動(dòng)機(jī)
比特幣網(wǎng)絡(luò)的吞吐量與它重新定向和拒絕服務(wù)限制的共識(shí)規(guī)則相關(guān)药蜻。
比特幣的重新定向規(guī)則確保出塊時(shí)間大致在10分鐘喳瓣,該規(guī)則不可改變。關(guān)于其它大大提高交易吞吐量的方法一直存在爭(zhēng)議绢片,因?yàn)檫@些方法沒有證明它們自己是特別安全的共識(shí)層解決方案滤馍。
歷史
輔助塊,第一次被Johnson Lau
在2013年提議底循。概述了使用特殊操作碼使資金進(jìn)入和退出附加塊的方法巢株。
拓展塊是最近的提案,也是Johnson Lau
在2017年提出的熙涤,
它修訂了大量原始提案的想法阁苞。
規(guī)則
拓展塊在原始比特幣的區(qū)塊上設(shè)計(jì)了一個(gè)二層結(jié)構(gòu),在該拓展塊中灭袁,礦工將保證額外交易區(qū)塊的merkle根猬错。
拓展塊在opt-in
,序列化,驗(yàn)證和網(wǎng)絡(luò)服務(wù)方面利用了BIP141茸歧, BIP143和BIP144的一些功能倦炒。拓展塊的規(guī)則可以認(rèn)為是這些BIP的拓展和修訂。拓展塊在當(dāng)前交易格式下不兼容BIP141软瞎,它需要一些小的附加規(guī)則逢唤。
拓展塊維護(hù)自己的UTXO集合,以免影響未升級(jí)節(jié)點(diǎn)中已存在的UTXO集合涤浇。這是一個(gè)棘手的問題鳖藕,它要求在當(dāng)前每個(gè)標(biāo)準(zhǔn)區(qū)塊的結(jié)尾都有一個(gè)決議交易。
本規(guī)則規(guī)定了一種欺騙未升級(jí)節(jié)點(diǎn)的方法只锭,使它們相信已存在的UTXO集合仍然以以前的規(guī)則在運(yùn)行著恩。不幸的是,這需要在升級(jí)后的節(jié)點(diǎn)上額外的記錄一些內(nèi)容。
承諾結(jié)構(gòu)
愿意包含拓展塊的升級(jí)節(jié)點(diǎn)的礦工將包含一個(gè)額外的輸出值為0的coinbase數(shù)據(jù)喉誊,輸出腳本如下:OP_RETURN 0x24 0xaa21a9ef[32-byte-merkle-root]
承諾結(jié)構(gòu)的序列化和發(fā)現(xiàn)規(guī)則遵循在BIP141中的規(guī)則定義邀摆。
merkle root是由merkle tree計(jì)算出來的,該樹由所有拓展塊和標(biāo)準(zhǔn)塊的普通交易和SW交易作為葉子伍茄。
任何包含拓展塊的區(qū)塊必須包含一個(gè)拓展的承諾輸出栋盹。
拓展塊的 opt-in
交易輸出可以通過使用SW程序腳本的信號(hào)進(jìn)入拓展塊(在BIP141規(guī)定),如果包含的腳本是最小編碼的P2PKH或P2SH腳本敷矫,則可以作為交易輸出用來退出拓展塊的信號(hào)例获。
拓展塊的輸出腳本的代碼中只包含SW程序,P2PKH和P2SH在拓展塊中被認(rèn)為是無效的曹仗。
決議解決
決議交易是一種記錄機(jī)制榨汤,用來維護(hù)拓展塊的UTXO集合的總價(jià)值。這些決議交易作為一個(gè)連續(xù)的OP_TRUE輸出贖回腳本整葡,它們處理拓展塊的入口和出口的UTXO集合件余。
每個(gè)區(qū)塊包含的進(jìn)入或退出拓展塊的輸出,必須包含一個(gè)最終的決議交易遭居。該決議交易花費(fèi)所有的試圖進(jìn)入拓展塊的輸出。這個(gè)決議交易必須作為標(biāo)準(zhǔn)塊的最后一個(gè)交易出現(xiàn)(以便正確掃描所有新創(chuàng)建的輸出)旬渠。這些資金將被發(fā)送到一個(gè)任何人都可以花費(fèi)的輸出(OP_TRUE)俱萍。除了另一個(gè)決議交易,任何花費(fèi)這種輸出的交易都會(huì)被共識(shí)規(guī)則禁止告丢。
這個(gè)決議交易的輸出必須包含額外的用于試圖退出拓展塊的輸出枪蘑。
coinbase輸出不能包含隔離見證數(shù)據(jù),由于先前存在的共識(shí)規(guī)則岖免,他們不能被決議交易所處理岳颇。
一個(gè)決議交易的第一個(gè)輸入必須引用以前的決議交易的首個(gè)輸出。
費(fèi)用是從拓展塊傳播進(jìn)決議交易颅湘,換句話說话侧,決議交易的金額一定要等于拓展塊的總的金額。
引導(dǎo)
為了引導(dǎo)拓展塊的激活闯参,一個(gè)創(chuàng)世的決議交易必須在首個(gè)激活的塊中被挖掘瞻鹏,用來包含一個(gè)拓展塊的承諾結(jié)構(gòu)以及輸入輸出,這個(gè)決議交易是唯一一個(gè)存在的不需要引用以前的決議交易鹿寨。
這個(gè)創(chuàng)世決議交易的首個(gè)輸入可以包含一個(gè)1-100個(gè)字節(jié)的腳本新博,包含一個(gè)單一的push操作碼,這使得挖掘創(chuàng)世決議交易的礦工可以添加一個(gè)特殊的信息脚草。這個(gè)輸入腳本必須執(zhí)行成功(沒有格式錯(cuò)誤的push數(shù)據(jù)赫悄,沒有OP_RESERVED 操作碼).
決議交易的規(guī)則:
決議交易的首個(gè)輸出必須含有個(gè)一個(gè)值等于:(previous-resolution-value + entering-value - exiting-value) - ext-block-fees
.
接下來的輸出腳本和值必須精確的復(fù)制拓展塊的退出輸出(以在拓展塊中出現(xiàn)的相同的順序)。
決議交易的版本必須被設(shè)置為uint32的最大值(2^32 -1).規(guī)則激活后,這個(gè)版本號(hào)被共識(shí)規(guī)則禁止與任何在標(biāo)準(zhǔn)鏈或拓展鏈上的交易一起使用埂淮,這是對(duì)于決議交易簡(jiǎn)單的非上下文識(shí)別所必須的嚼贡。
進(jìn)入拓展區(qū)塊:
任何隔離見證程序的輸出都被視為一個(gè)opt-in,用來將資金發(fā)送至拓展塊的UTXO集合的公鑰哈贤耄或者腳本哈希上粤策。
示例:
Transaction #1 (coinbase):
Output #0:
- Script: P2PKH
- Value: 12.5
Output #1:
- Script: OP_RETURN 0xaa21a9ef[merkle-root]
- Value: 0
-------------------------------
Transaction #2 (extension block funding transaction):
Output #0:
- Script: P2WPKH (will enter the extension utxo set)
- Value: 5.0
Output #1:
- Script: P2PKH (stays in the canonical utxo set)
- Value: 2.5
-------------------------------
- 該決議交易可以贖回任何隔離驗(yàn)證的輸出;
Transaction #3 (resolution transaction):
Input #0:
- Outpoint:
- Hash: previous-resolution-txid
- Index: 0
Input #1:
- Outpoint:
- Hash: Transaction #2 TXID
- Index: 0
Output #0:
- Script: OP_TRUE
- Value: 5.0
- 在這個(gè)例子中误窖,一個(gè)花費(fèi)者要贖回tx2的0號(hào)輸出叮盘,對(duì)應(yīng)的拓展塊的存在形式可能如下:
Transaction #4 (redeemer of transaction #2):
Input #0:
- Outpoint:
- Hash: Transaction #2 TXID
- Index: 0
Output #0:
- Script: P2WPKH (this output remains in the ext. block)
- Value: 5.0
退出拓展塊
為了確保在拓展鏈和拓展區(qū)塊上的一對(duì)一交換霹俺,必須拓展區(qū)塊上存在的輸出提供出口。
在隨后的交易中愈魏,tx2的輸出的花費(fèi)者希望獲得一個(gè)輸出出口來獲得他們的金額。
Transaction #5 (coinbase):
Output #0:
- Script: P2PKH
- Value: 12.5
Output #1:
- Script: OP_RETURN 0xaa21a9ef[merkle-root]
- Value: 0
----------------------------
Transaction #6 (resolution transaction):
Input #0:
- Outpoint:
- Hash: previous-resolution-txid
- Index: 0
Output #0:
- Script: OP_TRUE
- Value: 2.5
Output #1:
- Script: P2PKH (duplicated from the exited output below)
- Value: 2.5
--------------------------------
- 拓展區(qū)塊
Transaction #7:
Input #0:
- Outpoint:
- Hash: Transaction #4 TXID
- Index: 0
Output #0:
- Script: P2WPKH (this output will remain in the ext. block)
- Value: 2.5
Output #1:
- Script: P2PKH (note that this causes an exit!)
- Value: 2.5
退出贖回交易
如上所述想际,交易輸出通過決議交易從拓展塊回到主鏈上培漏。在拓展塊上創(chuàng)建的輸出不得在任何鏈上花費(fèi)胡本,而退出輸出必須從決議交易創(chuàng)建的端點(diǎn)來花費(fèi)。
退出的成熟度要求
類似于coinbase交易侧甫,在鏈重組的情況下珊佣,決議交易也可以被永久的取消。這可能使所欲退出輸出所包含的花費(fèi)無效披粟,同時(shí)導(dǎo)致該花費(fèi)交易不可再被傳播,不可再在主鏈上被挖掘惑艇。由于這個(gè)原因胸梆,需要退出的成熟度。
金額
從拓展塊收集的金額傳播到對(duì)應(yīng)的決議交易上碰镜,決議交易的金額必須與拓展塊上收集的金額相等。
在共識(shí)層秽荤,交易費(fèi)通過交易成本以及由于進(jìn)入或退出輸出而添加到標(biāo)準(zhǔn)區(qū)塊的 額外的字節(jié)來計(jì)算(size/legacy-sigops).
在前面的例子中,tx2的花費(fèi)者的輸出應(yīng)該添加一點(diǎn)費(fèi)用窃款。
Transaction #5 (coinbase):
Output #0:
- Script: P2PKH
- Value: 12.501 (reward + fee)
Output #1:
- Script: OP_RETURN 0xaa21a9ef[merkle-root]
- Value: 0
---------------------------
Transaction #6 (resolution transaction):
Input #0:
- Outpoint:
- Hash: previous-resolution-txid
- Index: 0
Output #0:
- Script: OP_TRUE
- Value: 2.499 (fee is subtracted)
Output #1:
- Script: P2PKH (from the exited output below)
- Value: 2.5
- 拓展塊
Transaction #7:
Input #0:
- Outpoint:
- Hash: Transaction #4 TXID
- Index: 0
Output #0:
- Script: P2WPKH (this output will remain in the ext. block)
- Value: 2.499 (fee is subtracted, this propagates up)
Output #1:
- Script: P2PKH (note that this causes an exit!)
- Value: 2.5
驗(yàn)證
驗(yàn)證拓展塊的交易晨继,應(yīng)當(dāng)強(qiáng)制執(zhí)行所有目前部署的軟分叉規(guī)則,以及額外的類似BIP141的規(guī)則集合紊扬。
拓展塊中的交易集合可以包含一個(gè)使用BIP141規(guī)則序列化后的隔離驗(yàn)證交易集合。
應(yīng)該使用VERIFY_WITNESS規(guī)則對(duì)拓展交易執(zhí)行驗(yàn)證檀葛。
拓展交易一定不可以訪問任何標(biāo)準(zhǔn)區(qū)塊的UTXO集合腹缩。
如果一個(gè)拓展區(qū)塊的共識(shí)檢查失敗,則升級(jí)的節(jié)點(diǎn)必須認(rèn)為整個(gè)區(qū)塊是無效的润讥。
BIP141規(guī)則變化
- 除了決議交易之外伙判,隔離驗(yàn)證的輸出只可以從一個(gè)拓展區(qū)塊贖回。
- 隔離驗(yàn)證的交易只能包含隔離驗(yàn)證的輸入宴抚。
- BIP141嵌套P2SH的功能不再可用菇曲,并且不再是共識(shí)規(guī)則。
-
block weight
和transaction weight
的概念將被移除常潮。 -
sigops cost
的概念繼續(xù)存在,用于將來的軟分叉和可升級(jí)的DoS限制.
DoS Limits
DoS限制應(yīng)該通過拓展塊的字節(jié)大小以及新定義的交易輸入和輸出的規(guī)則來執(zhí)行楷力,拓展塊的退出輸出會(huì)影響標(biāo)準(zhǔn)塊的DoS限制喊式,因?yàn)橥卣箟K增大了字節(jié)大小和標(biāo)準(zhǔn)的操作碼萧朝。
MAX_BLOCK_SIZE: 1000000 (unchanged)
MAX_BLOCK_SIGOPS: 20000 (unchanged)
MAX_EXTENSION_SIZE: TBD
MAX_EXTENSION_COST: TBD
拓展塊的最大字節(jié)應(yīng)該是提高的。區(qū)塊的平均情況是真正受到輸入輸出成本的限制献联。
未來的字節(jié)大小和計(jì)算的可擴(kuò)展性可以通過軟分叉來添加新的隔離見證程序來實(shí)現(xiàn)。在未升級(jí)的節(jié)點(diǎn)里逆,未知的隔離見證程序作為一個(gè)交易輸入和輸出來計(jì)算。新的隔離見證程序含有較低的實(shí)現(xiàn)成本胁镐,以便允許未來通過軟分叉來改變DoS的限制诸衔。
拓展交易的成本
拓展塊利用BIP141的可升級(jí)腳本行為來實(shí)現(xiàn)可升級(jí)的DoS限制。
計(jì)算交易輸入的成本
隔離見證的key哈希的v0等于1宠能,乘以系數(shù)8.
隔離見證的script哈希v0等于贖回腳本中準(zhǔn)確計(jì)算的操作碼個(gè)數(shù)磁餐,乘以系數(shù)8.
未知的隔離見證程序等于1,乘以系數(shù)1.
為了減少贖回腳本中加入垃圾數(shù)據(jù)的機(jī)會(huì)羞延,只允許垃圾數(shù)據(jù)在隔離見證交易中存在脾还,序列化后的每73個(gè)字節(jié)隔離見證的交易等于增加一個(gè)額外的點(diǎn).
為以后7次軟分叉升級(jí)留出了余地,以減輕DoS限制嗤谚。
計(jì)算輸出成本
當(dāng)前定義的v0版本的隔離見證程序每個(gè)都等于8點(diǎn)怔蚌。未知的隔離見證程序輸出等于1點(diǎn),任何退出輸出也一直等于8點(diǎn)椅野。
為以后7次軟分叉升級(jí)留出了余地籍胯,以減輕DoS限制。
灰塵閾值
現(xiàn)在在拓展塊內(nèi)強(qiáng)制執(zhí)行灰塵共識(shí)閾值炼蛤。
拓展塊中交易輸出值小于500聰是無效的本刽。這包括輸入和輸出赠涮,但是不包括退出輸出暗挑。
額外的閃電網(wǎng)絡(luò)的安全規(guī)則
閃電網(wǎng)絡(luò)面臨者當(dāng)前某些系統(tǒng)性的攻擊(在閃電網(wǎng)絡(luò)白皮書中有定義)。
如果在拓展塊中交易的版本號(hào)第30bit被設(shè)置為1垃它,在區(qū)塊中的交易空間額外的700字節(jié)被保留烹看。【注意:交易空間和操作數(shù)的花費(fèi)尚未定義】
交易空間可以被預(yù)先申請(qǐng)酱吝,并且被在相同區(qū)塊中的兩筆交易所使用(每個(gè)交易的最大字節(jié)為350)土思,它們滿足以下定義的特殊約束條件。
第一個(gè)分配只能由崎岂,直接花費(fèi) 版本號(hào)30bit被設(shè)置的交易的首個(gè)交易輸出的交易來花費(fèi)闪湾。
第二個(gè)分配只能由這些交易的首個(gè)輸出來花費(fèi),該交易屬于存在于過去2016個(gè)區(qū)塊江醇,并且版本號(hào)30bit被設(shè)置何暇。
如果分配未被其它交易使用,該交易將消耗額外的空間,并且減少區(qū)塊的可用空間多達(dá)700字節(jié)辐烂。
這是拓展區(qū)塊的共識(shí)規(guī)則,并且不適用于標(biāo)準(zhǔn)區(qū)塊胳嘲。
這個(gè)提案的目的是確保在沒有礦工的協(xié)調(diào)下扣草,對(duì)于系統(tǒng)的攻擊成本將會(huì)異常高颜屠。因?yàn)閴K的空間是預(yù)先分配給礦工的甫窟,用來包含懲罰閃電網(wǎng)絡(luò)交易蛙婴,并且由于雙方必須同意閃電網(wǎng)絡(luò)中的承諾交易的版本位,所以該規(guī)則被強(qiáng)制執(zhí)行浇衬。這是閃電網(wǎng)絡(luò)中的一個(gè)opt-in 功能餐济,交易費(fèi)用更高,從而提高了罰款的可用性醉冤。架設(shè)在大部分不正確的廣播情況下滚朵,懲罰將通過第二次分配包含在同一個(gè)塊中,并為第一次分配中的其它交易留出空間辕近。
遷移和采用的點(diǎn)
大多數(shù)的比特幣系統(tǒng)移宅,當(dāng)前都可以很好的處理BIP141升級(jí)后的規(guī)則。
對(duì)于目前支持BIP141的錢包漏峰,遷移應(yīng)當(dāng)是不重要的浅乔。
對(duì)于全節(jié)點(diǎn)的服務(wù),API可能會(huì)變靖苇,以便將拓展塊的交易透明的提供給客戶端贤壁,就好像它們出現(xiàn)在標(biāo)準(zhǔn)塊中一樣。當(dāng)然脾拆,這不包含任何礦工API。
錢包的關(guān)注點(diǎn)和遷移
當(dāng)前支持BIP141的錢包必須修改一點(diǎn)關(guān)鍵的地方绰上,以便實(shí)現(xiàn)兼容拓展區(qū)塊。
- 當(dāng)創(chuàng)建交易時(shí)运吓,錢包必須選擇一條鏈去花費(fèi)(無論是標(biāo)準(zhǔn)鏈還是拓展鏈疯趟,但不能同時(shí)選擇兩條鏈)信峻。換句話說,交易必須含有所有的隔離見證輸入盹舞,或者非隔離見證輸入。對(duì)于支持兩條鏈的錢包癣亚,如果用戶沒有明確指定获印,幣值選擇器可以自動(dòng)的選擇使用哪條鏈。
- 支持拓展區(qū)塊的錢包必須忽略決議交易的輸入玻孟△⒄鳎可以通過簡(jiǎn)單的檢查交易的版本號(hào),類似于錢包已經(jīng)忽略的coinbase交易輸入匣掸。這是阻止錢包錯(cuò)誤的看到雙花的必要條件氮双。
- 支持標(biāo)準(zhǔn)區(qū)塊和拓展區(qū)塊資金的錢包必須忽略拓展區(qū)塊中的退出輸出。這是阻止錢包錯(cuò)誤的多次索引相同輸出的必要條件。
后兩條僅適用于直接監(jiān)控區(qū)塊鏈的錢包(即類似于官方bitcoind自帶的錢包)造挽,監(jiān)測(cè)錢包通常觀察區(qū)塊鏈并為它們的交易和輸出建立索引。
交易池的關(guān)注點(diǎn)
交易池的變化是最小的嵌器。盡管實(shí)現(xiàn)的細(xì)節(jié)可能有所不同谐丢,但一個(gè)合格的交易池必須禁止兩條鏈的交叉(兩條鏈的混合輸入),以及跟蹤退出輸出的交易讥珍。這些輸出不可以被花費(fèi)在交易池中(它們必須從下個(gè)決議交易贖回窄瘟。)
礦工的關(guān)注點(diǎn)
額外的字節(jié)和操作數(shù)計(jì)算
注意:當(dāng)內(nèi)部創(chuàng)建塊模板,并為標(biāo)準(zhǔn)區(qū)塊分配大小時(shí)氏义,節(jié)點(diǎn)必須考慮進(jìn)入拓展塊的交易和退出拓展塊的輸出交易图云。一個(gè)攜帶進(jìn)入輸出或退出輸出拓展塊的交易為標(biāo)準(zhǔn)區(qū)塊添加了字節(jié)數(shù)。
在決議交易中克婶,進(jìn)入拓展塊的輸出以交易輸入的形式添加字節(jié)帕翻。(此處翻譯有些問題)
在決議交易中,退出拓展塊的輸出以復(fù)制輸出的形式添加字節(jié)和原始操作碼紫岩。
交易排序和選擇算法必須考慮這些內(nèi)容睬塌。
拓展 getblocktemplate(BIP22)
除了傳統(tǒng)交易的數(shù)組之外,合格的實(shí)現(xiàn)必須包含一個(gè)拓展交易的數(shù)組勋陪。該拓展數(shù)組包含BIP22中定義的交易硫兰,以及BIP145對(duì)getblocktemplate
的拓展。
合格的實(shí)現(xiàn)违孝,必須將決議交易做為普通交易數(shù)組的一部分。該決議交易必須含有一個(gè)額外的屬性叫resolution
,它是一個(gè)bool值喇喉,被設(shè)置為true校坑。直接在傳統(tǒng)交易數(shù)組中包含決議交易是為了與現(xiàn)有的挖礦客戶端進(jìn)行向后兼容。
default_witness_commitment
已被重命名為default_extension_commitment
,并被包含在拓展區(qū)塊的承諾腳本中膏斤。
一個(gè)額外的mutable
字段在resolution
中被定義制妄。如果傳統(tǒng)交易在可變數(shù)組中耕捞,resolution
允許拓展塊可變,前提是客戶端能正確的更新決議交易俺抽。
除了resolution
的可變字段磷斧,還定義了resolution capabilities
字段,以便客戶端聲明它可以更新決議交易冕末。
對(duì)于處理過期挖礦客戶端的節(jié)點(diǎn)侣颂,將拓展塊本地存儲(chǔ)在commitment-hash->ext
map結(jié)構(gòu)中,此處區(qū)塊數(shù)據(jù)可能是必須的(除了調(diào)用submitblock期間的一個(gè)重新序列化)
數(shù)據(jù)遷移的關(guān)注點(diǎn)
為了標(biāo)識(shí)該UTXO屬于哪條鏈,該功能的實(shí)現(xiàn)可能需要在每個(gè)存儲(chǔ)的UTXO上添加一個(gè)額外的位藻肄。依據(jù)實(shí)現(xiàn)的UTXO序列化和壓縮格式,這可能需要數(shù)據(jù)遷移嘹屯。
激活
- 版本位:2
- 部署名字:
extblk
(在GBT作為非extblk出現(xiàn)) - 開始時(shí)間:TBD
- 超時(shí)時(shí)間:TBD
作用
礦工可以通過第28bit(BIP9 軟分叉位)來對(duì)拓展塊的功能作用進(jìn)行投票从撼。功能部署的開始時(shí)間在拓展塊開始3年以后,且礦工激活閾值達(dá)95%呆馁。最小的鎖定時(shí)間必須至少為每年26次。
到此為止,未來的拓展塊規(guī)則集貌似已開發(fā)完畢气堕,這在功能集合和拓展性方面是優(yōu)越的。這使以最小技術(shù)包袱進(jìn)行長(zhǎng)期可擴(kuò)展解決方案揖膜,來支持功能鏈成為可能梅桩。
功能激活后宿百,社區(qū)期望仍然可以從拓展區(qū)塊退出,并且根據(jù)尚未設(shè)計(jì)的軟分叉條款來確保安全垦页,但是在拓展區(qū)塊內(nèi)的資金的進(jìn)入和轉(zhuǎn)移將不再被允許痊焊。
提出了兩種可能的功能激活方案,將在本文件的最終版本中選擇一種辕羽。
方案1
在第28bit被激活時(shí)垄惧,這個(gè)決議交易的輸出在當(dāng)天將作為一個(gè)任何人都可以花費(fèi)的輸出被返回。BIP9的第28 bit(或另一個(gè)BIP9位)可以被重載用來啟用軟分叉酌毡,以防止該交易在未來實(shí)際上成為任何人都可以花費(fèi)的交易蕾管,該功能允許不需要使用硬分叉代碼來啟用未來的拓展塊功能。
按照社會(huì)契約的理解旭蠕,拓展塊中的資金在下面的去激活設(shè)計(jì)中仍然是可用和可贖回的。如果在條款中沒有正確的激活和安全的取款操作佑稠,用戶和交易所可以使用bit位設(shè)置軟分叉來拒絕該區(qū)塊旗芬。
可以通過使用在BIP9第28bit激活的相同的輸出結(jié)合另一bit位的新規(guī)則來直接升級(jí)拓展區(qū)塊(例如:第27bit在第28bit被激活的情況下有條件的激活新的鏈,來創(chuàng)建一個(gè)直接遷移到新的拓展塊而不需要在主鏈上進(jìn)行新的交易)幔嫂。
可以被理解為誊薄,這個(gè)軟分叉可以重載取款或贖回資金的強(qiáng)制限制呢蔫,以便在取款時(shí)可以解析腳本的條款。
方案2
在第28bit被激活時(shí)绽昏,拓展區(qū)塊內(nèi)不允許進(jìn)一步的交易處理定鸟,只允許通過merkle協(xié)議退出主鏈。
這就要求merkle協(xié)議的退出代碼和規(guī)范必須在當(dāng)天被規(guī)范和激活啼县。
通過merkle樹協(xié)議的取消激活
從舊的拓展塊到主鏈和新的拓展塊的贖回沸久,可以通過未來設(shè)計(jì)的merkle協(xié)議來進(jìn)行移植。通過對(duì)UTXO merkle根進(jìn)行硬編碼作為一個(gè)共識(shí)規(guī)則來使資金導(dǎo)入至新的拓展塊子刮,并通過merkle路徑來驗(yàn)證導(dǎo)入的資金窑睁。
要啟用導(dǎo)入担钮,節(jié)點(diǎn)只需要當(dāng)前拓展塊的32字節(jié)的merkle root的拷貝。
這移除了全節(jié)點(diǎn)存儲(chǔ)所有UTXO集合拷貝在硬盤上的必要性箫津,并且可以在未來贖回時(shí)進(jìn)行較大的鏈上交易。另一種是使所有的客戶端保持UTXO集合的記錄饼拍,并且在內(nèi)存中保持所有的位域师抄。
由于UTXO設(shè)置是靜態(tài)的(僅僅是未花費(fèi)或花費(fèi)的改變),因?yàn)樗菑男碌妮敵鲋衼砑せ畹模@比當(dāng)前提出的用于改變UTXO的設(shè)計(jì)更簡(jiǎn)單叨吮。
動(dòng)機(jī)
雖然作用看起來有些缺點(diǎn)挤安,但本規(guī)范的主要優(yōu)點(diǎn)是不帶有BIP141規(guī)則集的拓展塊丧鸯。相反,該體系將為處理拓展塊奠定基礎(chǔ)围肥。使未來的比特幣協(xié)議可以包含使用不同規(guī)則集的多種不同的拓展塊蜂怎。
引用實(shí)現(xiàn)
https://github.com/bcoin-org/bcoin-extension-blocks
引用
原文地址:https://github.com/tothemoon-org/extension-blocks/blob/master/spec.md
本文由 Copernicus團(tuán)隊(duì) 姚永芯
翻譯杠步,轉(zhuǎn)載無需授權(quán)。