Taproot于2020年10月合并到Bitcoin Core中,仅保留了这一备受期待的协议升级的激活方法,该方法专注于为比特币增加智能合约灵活性和更多交易隐私.
上周,比特币开发社区通过Internet中继聊天(IRC)聚集在一起,讨论了Taproot激活的参数以及BIP 8信令机制的两个代码提取请求(PR).
“为了更接近终点线,我们将在2月2日(星期二)世界标准时间19:00在IRC的## taproot激活频道上组织一次会议,”比特币开发组织者Michael Folkson 通过bitcoin-dev邮件列表宣布. “主要目标将是最终确定修订后的BIP 8激活方法……”
最终,该会议提供了更多关于自SegWit可能向前发展以来比特币最重要的协议变化的见解。.
编者注:为清晰起见,对下面IRC中复制的语句进行了稍微编辑,但在编写时以其他方式显示.
修改提案
比特币开发商 安东尼·汤斯 已经编译了 提案和可能的方案 用于激活Taproot. 在2月2日的会议上, 似乎获得最多支持的是“ BIP 8(false,1y)”和“ BIP 8(true,1y)”。但是,没有进行表决,只是讨论了每种替代激活方法。.
但是,这是什么意思? BIP 8是一种允许通过软叉(特别是矿工激活的软叉或MASF)升级比特币网络中共识的机制,可以选择在一段时间后添加用户激活的软叉(UASF)。在最新的共识更新(SegWit)中,除了BIP 9的MASF外,还使用了用户激活的软叉(UASF)。但是,Taproot对于矿工似乎没有争议,因此这次不太可能需要使用UASF.
回到提案中,参数为“ lockinontimeout”和“ timeout”,其中lockinontimeout基本上表示是否将强制激活,而“ timeout”表示将在其中激活窗口。另一个没有引起足够讨论的相关参数是“ startheight”.
如果lockinontimeout为false,并且更新没有足够的支持,则会取消更新并定义新的投标。 (比特币开发者 卢克(Luke Dashjr) 将lockintimeout = false描述为为矿工提供了他们原本不希望拥有的额外权力),
“如果您以(timeout = T,lockinontimeout = false)开始,则在碰到T时有三种可能性:激活失败,您尝试重新激活(例如timeout = T + 1year,lockinontimeout = true);在此之前,您告诉所有人将其软件切换为(timeout = T,lockinontimeout = true),此时您已将MASF升级为UASF,” Towns在IRC上写道。 “也有可能让所有人升级到指定(超时= T-6个月,lockinontimeout = true)的软件,在这种情况下,升级人员将在T-6个月开始拒绝封锁,并且如果激活了最长的链到那时,新旧软件都将激活软叉。”
但是,Dashjr在lockinontimeout = false上不同意:
“……我们通常对lockingtimeout = false满意吗?”,比特币开发人员 马克西姆·奥尔洛夫斯基(Maxim Orlovsky) 问.
“是的”,闪电开发商 生锈的罗素 回应。 “如果需要的话,我们有一个UASF锤子,但是最好不要使用它。”
Dashjr写道:“ lot = true并不意味着我们使用它,lot = false意味着旨在让矿工们做出决定。” “ BIP8(false)是一种回归。”
但是拉塞尔反对他认为对开发人员的强制要求:“我觉得避免在协议上出现开发人员授权很重要,而且我也喜欢在激活之前发现问题时使用逃生口”。 “因此,我更喜欢从lockin = false开始,如果尚未激活,请在6个月后重新访问。”
Dashjr回应说:“没有开发人员的强制性……在相同的1y周期内执行1y,false然后1y,true是更有意义的。”.
但是罗素似乎并没有动摇:
“我不同意,”他写道。 “矿工具有协调能力,因为我们可以以分散的方式可靠地对其进行衡量,这与其他组织不同。这意味着可以*不*协调,是的。但是我们也有一个计划,因为BIP-8使UASF造成分裂的可能性大大降低。那就是我们所能做的。”
Dashjr在回应中写道:“很多IS都在为此计划,这并没有阻止矿工从事MASF。”
聊天中的其他人建议将lockinontimeout = false设为可选,但默认设置为:
CoinSwap开发人员写道:“ lot = false比lot = true更安全,因此首先值得做lot = false,因为我们知道哈希功率已经接近90%都是亲taproot的。” 克里斯·贝尔彻(Chris Belcher).
如果用户可以在某个时候轻松地将lot = false更改为lot = true,而又不需要新的核心版本,那么我支持将lot = false保留为默认值,” 凯根·麦克莱兰(Keagan McClelland) 写.
UASF锤
澄清:
具有LockinOnTimeout的BIP8是具有UASF后备功能的MASF.
只要矿工激活,就不会发生UASF.
预先计划的UASF还可以确保MASF发生:
它避免赋予矿工否决权,并创造适当的动机以确保发生MASF.#比特币 #直根
-卢克·达什(@LukeDashjr) 2021年2月2日
Dashjr希望使用UASF后备系统“ BIP 8(true)”作为一种博弈论设备,以确保矿工将激活Taproot,并且不给他们任何“否决”权力的选择,就像SegWit所发生的那样.
“考虑到信号的要求,如果矿池重视失速的主根,会达到哪种失速或悲伤攻击?” 2月2日,一个名叫“手套”的用户在IRC中问道。“例如滥用激活所需的边际哈希率。”
提醒一下,信号传递是关于降低分叉风险,与政治支持或投票无关.
Dashjr写道:“ MASF是首选路径,如果矿工未能发出信号,UASF将作为后备。” “如果很明显有人在拖延UASF,社区可以提前移开它。”
PR 1020和1021
为了使BIP 8正常运行,必须对其进行修改。这意味着信令机制发生了变化,这些是旨在实现此目的的代码PR:
- 1020:将在LOCKED_IN阶段之后使矿工信令不再必要,因为到此阶段,肯定已经激活了软分叉.
- 1021:允许某些MUST_SIGNAL块不发信号.
1020已在2月2日的会议上获得认可,最初认为1021没有必要.
“好吧,所以1021仅在矿工尚未激活叉子的情况下才有意义,” Dashjr写道。 “ 1021仅在UASF方案中……它允许多达5%的块丢失所需的信号……IMO这是没有意义的,只会增加复杂性。”
但后来在交流中,Blockstream研究人员 尼克·乔纳斯(Nick Jonas) 指出1021可能是必要的.
“关于#1021,如果您决定在大多数节点仍在运行bip8(false)的情况下运行bip8(true),则您实际上不会运行未实现#1021的代码,因为否则您可能会走在错误的链上,”乔纳斯写道.
“尼克有一个优势,”达什希尔随后在IRC中回应道。 “如果没有1021,您可能会运行LOT = true并且无法遵循Taproot激活的链!”
在与这些PR相关的另一次交流中,汤斯(Towns)指出了这些PR如何与不良行为者的潜力相关.
“(1)这里的论点是,在UASF期间,要求发出信号会造成链条分裂的风险—如果一个区块未发出信号,则非UASF矿工将以此为基础,但是每个人都知道两个区块都会被拒绝,因此这是攻击者加倍花费的机会。接受尽可能多的非信号阻止(即最高5%)限制了该攻击,”汤斯写道。 “(2)另一个考虑因素是,如果您从更长的超时时间开始(超时= 2年,lockinontimeout = true / false),然后又想加快激活速度,因为每个人都升级了,市场说他们想要它,并且有6%试图说服每个人比特币都糟透了的矿工,我们应该转到另一个连锁店,然后我们可以进行设置(超时= 1年,lockinontimeout = true)。”
“但是一旦我们达到5%,这些矿工就会制造问题,对吗?”达什耶尔问.
“一旦达到5%,就创造一个问题”-是的,”汤斯回答道,“ >门槛矿工可能造成问题;如果只有2%左右,那么如果我们使用lockinontimeout = true进行更短的超时,则可以避免出现问题,然后如果我们达到了超时并获得98%的块信号,但不是100%,这可以确保每个人都保持共识,即使是98%的链以最长的重量持续下去,使用bip148式快速UASF的人也不必降级他们的软件。”
“鉴于1021是UASF场景,是否仅需要将其合并到需要的可能性不大的程度?”福克森问.
ghost43回答:“是的,只有’旧’节点运行此代码才有意义。”.
最后,两个PR合并了.
总之
BIP 8(是BIP 9的变体)似乎是目前最严重的激活机制。但是,关于激活是否应该坚定,即使存在UASF风险,仍存在争议,否认了矿工的否决权。在信号不足的情况下安全地进行操作,并有可能延迟激活;或将false设置为默认值,并在必要时激活true。第一种选择的支持者认为,矿工应该不必破坏社区流程,而第二种选择的支持者则认为,UASF的回退是不必要的,并且由于矿工已经显示出接受Taproot而表现出不合理的态度.
PR 1021是BIP 8的更安全的常规错误修复程序,因为它在某些情况下(超过95%但少于100%的所有哈希值支持软分叉)可防止链条分裂.
下一次Taproot激活会议(2月16日,星期二,世界标准时间)将集中在代码审查上,随后将召开另一次会议来讨论参数。随着讨论的继续,比特币将接近其多年来最重要的协议升级.