BTCStudy 精选

2024年09月11日更新 63 人订阅
专栏简介 理解 Taproot Assets 协议 多方共享的 UTXO:形式与特性 影响 0.21.0 以前版本 Bitcoin Core 软件的漏洞披露 Taproot Assets:协议、闪电网络兼容性 从 Lamport 签名中获得脚本状态 在 ECDSA 之上使用 Lamport Signature 签名比特币交易 别再管这叫 MEV 了 探明道路:深入 LND 的寻路机制 闪电网络中的洋葱路由:Sphinx 包裹的构造 BitVM 2:比特币上的免许可验证 Swaproot:更便宜、更隐私的链上入账体验 闪电网络:技术与用户体验(六):只有一种比特币 闪电网络:技术与用户体验(五):流动性获取 闪电网络:技术与用户体验(四):收款码 闪电网络:技术与用户体验(三):路由 闪电网络:技术与用户体验(二):通道与支付 离线支付的过去、现在与未来 闪电网络:技术与用户体验(一):用户体验的基本元素 什么是 “JIT 通道”? 见证数据的折扣:为什么有些字节比别的字节 “更轻” 运行 v0.7 及更早版本的 Bitcoin Core 闪电网络的未来:LSP 规范与互通性 闪电网络中的 “多路径支付” 在闪电通道内使用限制条款聚合 HTLC 输出 Payjoin 与更好的比特币 为什么比特币钱包需要区块过滤器? 闪电通道 “拼接” 的原理 比特币钱包找回指南 什么是 “替代交易循环攻击”? BitVM:任意计算都可以在比特币上验证 闪电节点的备份形式简介 闪电网络上的暂缓支付发票 展望未来:2025 年的闪电支付 假通道 DoS 攻击 何以我们需要 “Vlidating Lightning Signer”? 交易包的交易池把关规则 交易包转发提议 针对闪电通道的攻击与交易包转发提议 等待确认(九):交易池规则新提议 等待确认(八):交易池规则是个接口 BTC 交易池 - 等待确认(七):网络资源 比特币中的限制条款:用于评审的分类学 等待确认(六):规则一致性 BTC 交易池-等待确认(五):用于保护节点资源的规则 扩展公钥与扩展私钥 BIP 158 致密区块过滤器详解 使用适配器签名实现闪电网络异步支付 如何利用 RGB 在闪电网络上转移另类资产 什么是 “闪电网络服务商”? 比特币钱包备份方案简史 基于 Taproot 的闪电通道 闪电网络常见疑问与解答 什么是 “闪电网络 offer(BOLT12)”? 闪电网络中的 “洋葱路由” 及其工作原理 闪电网络深入解读(下):HTLC 与支付路由 闪电网络深入解读(上):支付通道 理解闪电网络,Part-3:结算并关闭支付通道 理解闪电网络,Part-2:构建网络 理解闪电网络,Part-1:构建比特币的双向支付通道 有趣的比特币脚本(五):闪电通道与闪电网络 有趣的比特币脚本(四):哈希锁 有趣的比特币脚本(三):时间锁 有趣的比特币脚本(二):多签名 有趣的比特币脚本(一):基本介绍

BTC 交易池-等待确认(五):用于保护节点资源的规则

  • BTCStudy
  • 发布于 2023-07-05 18:35
  • 阅读 2945

“交易池”系列周刊的第五篇 - 用于保护节点资源的规则

作者:Gloria Zhao

来源:<https://bitcoinops.org/zh/newsletters/2023/06/14/>

译者:Primitives Lane

本文为 Gloria Zhao 在 Optech Newsletter 上编写的 “交易池” 系列周刊的第五篇。

前篇见此处

在本系列文章的开篇,我们提到,比特币的隐私和抗审查特性,都来自于网络的去中心化。用户运行自己的节点的习惯,减少了单点故障、监视和审查。这又来自于比特币节点软件的首要设计目标:运行节点是非常轻松的。如果每个比特币用户都需要购买昂贵的硬件、使用特定的操作系统、每个月支出数百美元的运营成本,那网络中的节点数量可能会大大减少。

此外,比特币网络中的节点就是一台计算机,它使用互联网跟陌生人的节点相互连接;这些陌生人可能会对这个节点发送 “拒绝服务式(DoS)” 攻击:发送会导致这个节点耗尽内存然后宕机的信息、使用无意义的数据耗费这个节点的运算资源和带宽从而使之不能接收新区块。因为这些陌生人都是匿名的(系统本身就是这样设计的),节点无法在连接之前预先断定哪个对等节点是诚实的、恶意的;而且在观察到攻击之后也无法有效地绝交。所以,实现保护节点免受 DoS 攻击的交易池规则,不仅是一种理想,更是一种现实需要。

节点实现中内置了通用的 DoS 保护措施,以阻止资源耗尽。举例来说,如果一个 Bitcoin Core 节点从单个对等节点处收到许多消息,那么它会仅处理第一条收到的消息、将其余的消息放到一个待处理队列中,等其他对等节点的消息到达之后再处理。类似地,节点一般会先下载一个区块头,待验证完这个区块头的 “工作量证明(PoW)” 之后,才下载和验证完整的区块。因此,任何希望通过区块转发来耗尽这个节点的资源的攻击者,都必须先花费不成比例的大量资源计算出一个有效的 PoW ,然后才能施行攻击。PoW 的高昂计算成本和微不足道的验证成本,提供了一种应对区块转发 DoS 的天然方法。但这种特性无法延伸到 未确认的 交易的转发中。

通用的 DoS 保护措施并不能提供足够多的抗性,让一个节点的共识引擎可以放心地暴露在点对点网络中接收输入。攻击者可以尝试制作一个计算任务极为繁重、但在共识上有效的交易,就像区块 #364292 处出现的这笔 1MB 的 “巨型交易” 一样,因为签名验证中的哈希运算量呈平方级膨胀的问题,它需要反常的长时间来验证。攻击者也可以制作一个只有最后一个签名无效的交易,让节点在这笔交易的验证上花费大量的时间,直到最后才发现它是个垃圾。在这样浪费时间的时候,节点会推迟处理新的区块。你可以想象,某个矿工可以针对自己的对手发起这样的攻击,从而在下一个区块的挖掘中获得 “起跑优势”。

为避免处理计算量非常繁重的交易,Bitcoin Core 节点为每一笔交易施加了一个体积限制和签名操作(“sigop”)数量限制,这个限制比共识规则在区块层面实施的限制更为严格。Bitcoin Core 节点也对祖先交易包和后代交易包的体积施加限制、让区块模板的生产和驱逐算法更加高效,同时还会约束交易池插入和删除操作的计算复杂度(更新一笔交易的祖先和后代集合就涉及这样的操作)。虽然这意味着一些合法的交易可能不会被接受和转发,但预计这样的交易是罕见的。

这里规则都是 “交易转发规则” 的案例 —— 节点在共识规则要求之上,对未确认的交易施加的额外验证规则。

默认情况下,Bitcoin Core 节点不会接受手续费率低于 1 聪/vb 的交易(“minrelaytxfee”),也不会在检查完这个要求之前验证任何签名,也不会在交易池接受一笔交易之前转发这笔交易。从某种意义上说,这个手续费率的规则,是在为网络验证和转发的工作设置一个 “价格” 的下限。不挖矿的节点不能收到手续费 —— 交易只会给确认它的矿工支付手续费。但是,手续费代表了攻击者的成本。如果有人要通过发送大量的交易来 “浪费” 网络的资源,那么 TA 最终将因为手续费而耗尽资金。

Bitcoin Core 所实现的 “手续费替换(Replace by Fee)” 规则要求替换交易支付比跟它直接冲突的任一笔交易更高的手续费率,同时还要求它所支付的手续费总额也要比任一笔竞争交易更高。而且,额外支付的手续费除以替代交易的虚拟体积,必须至少是 1 聪/vb 。换句话说,无论原本交易和替代交易的手续费率的绝对水平如何,新交易都必须为自身所耗费的网络带宽支付至少 1 聪/vb 的 “新” 手续费。这个手续费规则的首要顾虑不是激励兼容性。相反,它是为重复的交易替换施加一个成本下限,以阻止浪费带宽的攻击,比如,每笔替换交易只多付 1 聪手续费的攻击。

完全验证区块和交易的节点,需要包括内存、运算力、网络带宽在内的资源。我们必须保证资源要求处于较低水平,从而让节点容易运行,并保护节点免受轰炸。通用的 DoS 保护措施是不够的,所以节点需要在验证未确认交易时,在共识规则之外应用交易转发规则。但是,因为这样的规则不是共识的一部分,两个节点可能会使用完全不同的规则,但依然能对链的最新状态达成共识。下周,我们会讨论作为个人选择的交易池规则。

后篇见此处

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论