主页 > imtoken钱包官方 > 比特币计量单位 隔离见证的成本和风险

比特币计量单位 隔离见证的成本和风险

imtoken钱包官方 2023-08-15 05:13:17

最初发布于 2016 年 10 月 28 日。

介绍

本文是对之前博文《隔离见证的好处》的补充,该文概述了通过BIP141激活的隔离见证(segregated witness)方案可能产生的技术成本和风险。

目的

出于本文的目的,我们使用术语“成本”来表示如果部署和激活 SegWit 必须发生的负面后果,并使用“风险”来表示可能的负面后果,有些并非所有人都同意。 对于负面变化。

我们在分析风险的时候,也会考虑能够规避风险的措施(即尽可能降低风险发生的概率),以及能够减轻风险的措施(如果风险确实发生,降低其影响) .

本文无意就隔离见证的利大于弊、是否应该激活隔离见证下结论; 相反比特币计量单位,本文旨在提供背景知识,以帮助利益相关者做出明智的决策。

序列化成本

交易和区块信息需要序列化主要有以下三个原因:

在点对点网络中传播; 将区块链存储在硬盘上; 并计算块资源限制。

隔离见证以两种方式影响序列化:

序列化后,Segregated Witness 数据格式(参见 参考资料)具有以下效果:

上述比率是根据 180 字节交易(一个输入和一个输出)计算的。 如果输入/输出的数量按比例增加,则上述比例将大致准确; 但如果使用更复杂的交易脚本(例如多重签名),它会减少。

设计理念

交易量的开销变化源于两个因素:

对 P2WSH 使用 256 位哈希而不是像 P2SH 那样的 160 位哈希; 并通过 P2SH 进行编码,以便不支持隔离见证的旧钱包也可以构建为使用隔离见证资金进行消费,以便接收者可以从隔离见证中获益。

比特币计量单位_比特币价值比特币最新_比特币作为记账单位

没有这两个因素,开销可以忽略不计:P2WPKH 将少使用 3 个字节; P2WSH 会多使用 1 个字节。

第一个因素背后的动机在文章“。

第二个因素是个人用户在公开接收地址时可以权衡的选项。 如果您选择 P2WPKH/P2SH 或 P2WSH/P2SH,您将根据费用的增加按比例支付更高的费用。 从长远来看,这自然会限制这种开销增加的影响。

进一步削减

大部分开销可以通过改变网络和存储的序列化格式来消除:完整的序列化格式可以通过使用一个简单的标签(指示使用什么格式,P2PKH、P2WPKH、P2WPKH/P2SH 等)和实际的要覆盖的数据(公钥和签名)(例如,compacted_txn.txt)。

块验证开销

SegWit 在验证块时引入了额外的开销,既用于检查见证 Merkle 树,也用于处理 P2SH 编码的 SegWit 交易。 每笔交易需要 5 次额外的 SHA256 操作,每个 P2SH 编码的 P2WSH 输入需要 1 次额外的 SHA256 操作,每个 P2SH 编码的 P2WPKH 输出需要额外的 HASH160 操作。 但是,这相当于对最多 4 MB 的数据运行 6 次 SHA256 运算,或大约 24MB 的 SHA256 总哈希值; 这意味着在 Raspberry Pi v1 上每个块的额外成本为 15 秒的处理时间,而在更强大的硬件上则不到 1/10 秒。

引入错误的风险

Segregated Witness 补丁是比特币的重大变化,已在 Bitcoin Core 0.13.0 中发布,但尚未在比特币主网上激活。 任何此类重大变更都会带来多种类型的风险,包括:

规避

为了降低隔离见证激活时出现这些风险的概率,我们采取了以下措施:

技术审查报告包括:

测试:如《》所述,Segregated Witness,对共识规则和P2P网络的全面改变,新增和修改共计1486行代码。 Segregated Witness 补丁还在单元测试和完整性测试中添加和更改了总共 1486 行代码。 3338 行代码确保隔离见证在每个完全编译的比特币核心软件中都按预期工作。”

测试网:在开发过程中,Segregated Witness 已部署到多个测试网,允许诊断代码和来自更广泛生态系统(例如区块浏览器和钱包)的开发人员,以确保他们的软件与 Witness 技术正确交互。 这些测试网络包括:

备选实施方案:隔离见证相关的比特币升级提案已经由 btcd(go 语言的比特币客户端)和 Bcoin(Javascript 语言的比特币客户端)以及各种钱包和代码库实施。 单独的重新实现可以帮助识别未明确说明的假设、设计中的歧义,并避免可能由此产生的错误。

减轻

比特币作为记账单位_比特币计量单位_比特币价值比特币最新

减轻所有错误影响的一个重要方法是将隔离见证作为软分叉实施。 这意味着:

除此之外,为“脚本”语言设置版本控制的能力开启了修复比特币脚本语言错误的可能性,既包括先前存在的错误,也包括隔离见证新错误可能引入的任何潜在错误。

与复杂性和技术债务相关的风险

“技术债”是指现在采取的权宜之计,将来可能会造成更多的困难和问题; 所以现在花更多的时间和精力反而会更经济。

在比特币的背景下,有两种类型的技术债务:

规避

如上所述,隔离见证代码已经过全面审查,这有助于减少代码和设计方面的技术债务。

同样如上所述,隔离见证有多个独立的重新实现,这可以帮助发现任何不必要的复杂性和技术债务,同时仍有回溯的方法。

为了支持现有的通过重构和升级比特币代码库来偿还技术债务的努力,隔离见证作为一个纯代码更新被合并到为 0.13.0 中间版本积累的工作中。

减轻

比特币已经背负了很多重大的设计债务,而隔离见证是专门为减少部分债务而设计的——特别是交易延展性注),签名散列的二次缩放(quadratic scaling of signature hashing,指的是增加签名散列的数量)交易输入会导致签名验证时哈希运算次数的二次方增长,译者注),并且签名没有覆盖输入值的问题(non-signing of input values)。

Segregated Witness 提供的脚本版本控制方法为未来的软分叉升级提供了一种优雅的方式来进一步减少设计债务,包括修复现有操作码中的错误(例如 CHECKMULTISIG),重新启用以前禁用的操作码(例如 CAT),以及切换到更好的验证方法(例如 Schnorr 签名或聚合签名)。

一般来说,Bitcoin Script 中的设计债务无法完全偿还,因为永远不能排除一些未花费的交易是使用“丑陋”的功能支付给 P2SH 地址的。 禁用这些功能将使这些交易无法花费,无异于窃取用户的财产。 脚本的版本控制降低了这些设计债务的“成本”,因为这些“丑陋”的特性将仅适用于“旧版本”脚本,新开发可以在很大程度上忽略旧代码。

与软分叉相关的风险

软分叉是指共识规则的改变,使得一些之前有效的交易变得无效。 处理不当的软分叉会在比特币生态系统中造成许多问题,而且由于隔离见证使额外的见证数据对建立比特币的分布式共识至关重要,处理不当的升级会增加系统出错的方式。 主要失效模式包括:

一些比特币持有者不能再花自己的钱,导致老节点和升级节点对未确认的交易是否有效、是否有可能被挖出意见不一,从而导致矿工误挖新的无效区块规则下被激活并有一些实际用途,然后就没人关心它们,允许更大规模的区块链分叉发生,因为旧节点无法转发见证数据,旧节点形成的网络本质上是 Disconnection Avoidance Measures

比特币价值比特币最新_比特币计量单位_比特币作为记账单位

比特币上已经激活了很多软分叉(包括BIP 16、34、65、66、68、112、113),这些经验已经编纂在BIP9中,写成激活软分叉。 BIP9 中描述的过程用于部署 CSV 软分叉(BIP 68、112、113),结果是共识规则的快速升级而没有失败。

Segregated Witness的设计和BIP9的部署流程避免了上述问题,具有以下特点:

隔离见证施加的新限制仅影响当前未使用的交易,因为:

老节点会认为花费Segregated Witness输出的交易是不规范的,因为它们明显违反了BIP62的CLEANSTACK规则,所以不会被纳入老节点的交易池。 类似地,由于存在新的输出类型(但不是使用 P2SH 包装器的 P2WPKH/P2WSH),具有 P2WPKH 或 P2WSH 输出的交易将被视为非标准交易。

因此,您不能通过将一笔交易转发到旧节点并将另一笔交易转发到新节点来重复使用相同的 SegWit 输出。

但是这个差异仍然可以用在双花方案中,比如在一个交易中放入一个非segwit输出和一个segwit输出(那么这个交易只会被升级后的交易转发),然后尝试发起费用较高且只使用非隔离见证人输出的双花交易,后一笔交易可能会被旧节点成功转发。

这些担忧只影响交易池中未确认的交易; 一旦交易被区块确认,双花就不可能发生。 只要检测工具可以跟踪隔离见证的支出行为,现有的检测双重支出的方法仍然有效。

确保矿工只开采有效区块显然是每个参与者的最高优先级,并且已经在隔离见证中投入了大量工作来确保这一点。 既有直接的工作,如BIP145; 和间接工作,例如“密集区块(BIP152)”。

如果 SegWit 软分叉被激活然后回滚,发起 SegWit 交易的人可能会蒙受损失——例如,恶意矿工可能会在没有启用 SegWit 的链上重播交易。 交易,而这个时候,这个交易是任何人都可以消费的,然后矿工自己就可以消费(偷)了。 有两种可能,激活软分叉后Segregated Witness会被回滚,启用Segregated Witness的交易会被窃取:

因此,这两种可能性都不太可能。

为了确保支持隔离见证的对等节点形成一个完全互连的比特币 p2p 网络,已经进行了大量工作,包括为支持隔离见证的节点使用专用服务信号,并优先连接到这些节点。

与大区块相关的风险

隔离见证将 1MB 的块大小限制更改为 400 万个单位的“重量”限制; 计重时,序列化的witness data(1byte)算1个unit,核心Block data(1byte)算4个unit。 随着使用 segwit 的交易数量的增加,此更改将允许单个块包含更多数据(如果块中的所有交易都使用 segwit 功能,则每个块的大小预计为 2MB,但是,在最坏的情况下,单个块块可能达到 4MB)。 只要允许更多的交易放在一个区块中,UTXO 数据库的增长速度可以预期变得更快(假设所有交易使用 Witness 是软分叉,在最坏的情况下,UTXO 数据库的增长速度会变快) UTXO 集合不会改变)。

这些结果可能是积极的(例如,更多的交易量意味着可以容纳更多的用户),但也可能产生重大的负面影响:

规避

较大块的负面影响受到以下因素的限制:

比特币作为记账单位_比特币价值比特币最新_比特币计量单位

UTXO 集合通胀率的恶化受到以下因素的限制:

与低费用相关的风险缓解措施

比特币区块链的安全性是由算力提供的,而算力来自于固定的区块奖励和浮动的交易手续费。 因此,手续费收入的下降可能会降低比特币区块链的算力,从而降低比特币区块链的安全性。

因为单笔交易的费用是由市场压力(供需)决定的,隔离见证引入的变化可能会增加供应并降低价格(假设需求不变,要么是由于隔离见证的部署,要么至少会同时发生随着隔离见证的部署),降低单笔交易的价格(手续费水平)可能会导致整体挖矿收益下降(如果此时需求的价格弹性刚好处于无弹性阶段)。

此外,隔离见证带来的变化可能会让“layer 2”解决方案(如闪电网络)更具吸引力。 如果这导致用户将第 2 层解决方案视为链上交易的替代品比特币计量单位,那可能会显着减少对链上交易的需求,从而对交易费用水平造成额外的下行压力。

规避

目前的手续费水平大致为每个区块 0.5 BTC,固定区块收益为 12.5 BTC,约占矿工收益的 4%,因此短期内对矿工收益(和网络安全)的潜在影响并不大。

此外,在过去 12 个月里,BTC 的费用一直在上涨(从每块 0.2 BTC 到现在的水平),并且按实际价格计算(一年前 1 BTC 是 300 BTC)。 美元,现在是 600 美元),因此费用水平的下降可能只相当于回到 12 个月前的水平,这不会产生太大影响。

减轻

矿工可以单方面或集体限制供应。 他们可以单方面对他们挖出的块的最大重量设置一个软限制(即“blockmaxweight”参数,默认为300万),或者他们可以集体使用软分叉来隔离高于某个重量实际上较低的块限制。 这种方式可能会阻止任何因供应量增加而导致的价格下跌(本质上是通过减少供应量来增加单笔交易的手续费,但总收益不一定会增加),但无法阻止替代效应(例如,由于采用二层网络,手续费收入下降)。

虽然第 2 层网络可能是链上交易的替代方案,但它们不能完全消除链上交易。 而且,开启隔离见证后,在某些场景下,即使是比较少的链上交易也很容易占据链上的吞吐量。 即使只能通过链上交易费用获取这些网络价值的一小部分,也有可能大大超过当前的费用价值。

与长期扩展相关的风险

如前所述,所有交易均采用隔离见证特性,这将使链上的吞吐量翻倍。 这会在短期和中期显着提高吞吐量,具体取决于采用速度。 此外,通过增加一些特性来支持二层网络,也可以部分实现中长期额外扩展的效果。 隔离见证还通过修复 sighash 的平方级膨胀错误来减少进一步提高吞吐量的负面影响。

然而,除了一次性倍增效应外,隔离见证并没有提供任何即时机制来进一步扩大链上交易吞吐量。

这产生了长期扩展可能受阻或延迟的风险:利益相关者可能认为隔离见证“足够”并拒绝开发和支持进一步的扩展工作。

规避

比特币计量单位_比特币作为记账单位_比特币价值比特币最新

目前,避免这种风险的努力包括:

此外,努力提高 SegWit 的吞吐量(例如 libsecp256k1 和压缩块)显然会使进一步扩展更容易实现。

减轻

在任何技术层面上,隔离见证都不会使进一步扩展变得更加困难——这里的风险纯粹是社会性的。 因此,最有效的缓解措施自然也可能是社会性的:例如,让支持长期扩展的公司提供开发资源来帮助实现它。

隔离见证让交易吞吐量翻倍,也提供了验证扩容实际影响的机会——比如节点性能、去中心化、交易需求、生态升级速度等。 这些数据可以被合理收集并用于支持未来的扩展措施。 无论是证明某些令人担忧的结果的可能性低于预期,还是证实某些担忧是正确的,未来的工作都可以更有针对性。

其他方法

本节简要比较了可以实现隔离见证的部分或全部好处的其他方法,并解释了这些方法如何改变相关成本和风险。

硬分叉隔离见证

隔离见证的任何硬分叉实施都会增加显着的成本和风险,因为所有节点都必须在激活前升级以了解新规则,这会增加链分裂为“旧比特币”和“新比特币”的风险。 风险并导致混乱和价值损失。 也因为比特币社区缺乏硬分叉的经验,也可能会出现意想不到的风险和成本,但它们本身就很难分析。

硬分叉的隔离见证可以通过两种方式实现:

SPV 是不可见的:如果将见证承​​诺从 coinbase 转移到区块交易的 Merkle 树中,大部分不参与验证的节点和钱包可以继续工作而无需升级。 这为 coinbase 交易节省了 38~47 字节,但没有提供其他好处。 SPV 可见:如果交易哈希的计算被更改为排除签名脚本,这可能允许更简单的实现并减少交易单体的开销; 然而,这将需要升级所有比特币软件来处理此类交易。 此外,用于管理旧类型交易的专用代码路径将需要持续维护,从而增加代码复杂性和出错几率。 BIP 134(灵活交易格式)是通过 SPV 可见硬分叉获得隔离见证的一些好处的另一种方式。

无论哪种方式,硬分叉都可以同时彻底改变共识块大小限制。

简化的隔离见证

从逻辑上讲,隔离见证的大部分好处都可以分成独立的更改,可以单独评估和部署。 但是,许多功能的实现要求是密切相关的:

通过处理在不同时间激活的不同功能,逐一解决这些问题会增加比特币代码库的复杂性; 同时部署它们可以消除这种复杂性。

由于当前的 CHEKCSIG 和 CHECKMULTISIG 操作码受到 sighash 操作的二次增长的影响,增加吞吐量是危险的,并且必须对这些操作进行限制。 由于隔离见证仅允许通过升级的操作码使用优化的签名操作,旧的操作码将保留其自然限制。 因此,如果吞吐量增加是专门部署的,则需要实施额外的约束以确保这种增加是安全的,并且还可能增加挖矿和费用估算的复杂性。

(结束)