比特币 - bips/bip-0030.mediawiki,位于ajtowns/bips的bip-anyprevout

  • ajtowns
  • 发布于 2025-03-19 20:18
  • 阅读 12

BIP30 提案旨在解决比特币区块链中重复交易的问题。通过引入一项网络规则,禁止区块包含与同一链中较早的未完全花费的交易具有相同标识符的交易,从而避免潜在的攻击和区块链分叉。该规则最初应用于2012年3月15日之后的时间戳的区块,后来扩展到所有区块,除了主链上的两个历史违规区块。

跳至内容

ajtowns/ bips Public

forked from bitcoin/bips

折叠文件树

文件

bip-anyprevout

搜索此仓库

/

bip-0030.mediawiki

复制路径

Blame更多文件操作

Blame更多文件操作

最新提交

kn0rhaankn0rhaan

修复了小的拼写错误

2017年7月21日

28d6d03 · 2017年7月21日

历史

历史

打开提交详情

查看此文件的提交历史。

55 行 (41 loc) · 4.26 KB

/

bip-0030.mediawiki

顶部

文件元数据和控件

  • 预览

  • 代码

  • Blame

55 行 (41 loc) · 4.26 KB

Raw

复制原始文件

下载原始文件

Outline

编辑和 raw 操作

  BIP: 30
  Layer: Consensus (soft fork)
  Title: Duplicate transactions
  Author: Pieter Wuille <pieter.wuille@gmail.com>
  Comments-Summary: No comments yet.
  Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0030
  Status: Final
  Type: Standards Track
  Created: 2012-02-22
  License: BSD-2-Clause
## 目录<br>Permalink: 目录<br>- 摘要<br>- 版权<br>- 动机<br>- 规范<br>- 原理<br>- 向后兼容性<br>- 实现<br>- 致谢

摘要

Permalink: 摘要

本文档给出了处理区块链中重复交易的规范,旨在解决参考实现中存在的某些问题。

版权

Permalink: 版权

此 BIP 在 2-clause BSD 许可下获得许可。

动机

Permalink: 动机

到目前为止,比特币参考实现始终假设不存在重复交易(具有相同标识符的交易)。 事实并非如此; 特别是,coinbase 很容易被复制,并且通过构建在重复的 coinbase 之上,也可以实现重复的普通交易。 最近,描述并演示了一种利用参考实现处理重复交易的攻击。 它允许将完全确认的交易恢复为单次确认,使其容易受到完全无法支出的影响。 另一种攻击可能会导致网络子集的区块链分叉。

规范

Permalink: 规范

为了解决这个问题,引入了以下网络规则:

  • 不允许区块包含其标识符与同一链中较早的、未完全支出的交易的标识符匹配的交易。

该规则最初适用于所有时间戳在 2012 年 3 月 15 日 00:00 UTC 之后的区块(测试网:2012 年 2 月 20 日 00:00 UTC)。 后来,Commit Apply BIP30 checks to all blocks except the two historic violations. 进行了扩展,以适用于所有区块,除了主链上高度为 91842 和 91880 的两个必须被祖父化的历史区块。

原理

Permalink: 原理

无论使用什么解决方案,都必须遵守以下规则才能保证合理的行为:可用交易输出的集合不得通过向链中添加区块并再次删除它们来修改。 这发生在重组期间,并且在临时添加的区块包含重复交易的情况下,当前的比特币参考实现不遵守此规则。

对此问题有几种潜在的解决方案:

  1. 保证所有 coinbase 都是唯一的,从而使创建重复交易变得非常困难。
  2. 记住给定交易标识符的先前剩余输出,以防添加具有相同标识符的新交易。
  3. 仅允许在交易的先前实例没有剩余可支出输出的情况下进行重复交易。 然后,从链中删除区块可以安全地将已删除交易的输出重置为无。

第一个选项可能是最完整的,因为它也保证了交易标识符的唯一性。 但是,实施它需要进行多项更改,这些更改需要在整个网络中被接受。 此外,它不能阻止基于早期重复的 coinbase 的重复交易。 第二个选项无法以向前兼容的方式实现,因为它可能会使当前无效的区块有效。 在本文档中,我们选择第三个选项,因为它只需要进行简单的更改。

允许复制完全支出的交易,以便在将来某个时候不妨碍修剪。 不允许复制任何交易将需要为每次进行的交易保留证据。

向后兼容性

Permalink: 向后兼容性

此规则的添加只会使一些先前有效的区块无效。 这意味着,如果该规则由绝大多数矿工实施,则在新规则与没有新规则的节点之间,不可能以永久的方式分叉区块链。

实现

Permalink: 实现

可以在 https://github.com/sipa/bitcoin/tree/nooverwritetx 上找到参考客户端的补丁。

此 BIP 在 Commit Do not allow overwriting unspent transactions (BIP 30) 中实现 还有其他提交来完善此 BIP 的实现。

致谢

Permalink: 致谢

感谢 Russell O'Connor 发现并演示了此问题,并帮助测试了该补丁。

  • 原文链接: github.com/ajtowns/bips/...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
ajtowns
ajtowns
江湖只有他的大名,没有他的介绍。