经过近四年的工作,昨天标志着即将到达终点线。 假设utxo 是 合并到比特币核心主控中 昨天安德鲁·周(Andrew Chow)的分店。 这是相当长一段时间以来对比特币参考实现的第一次重大非共识更新,并且将对用户引导节点产生很多有趣的影响。
为了提供有关该功能的一些背景信息,我认为提供一些历史课会很有用。 当比特币核心节点首次打开并开始同步区块链时,它实际上并没有验证整个历史链。 它可以,但默认情况下不会,原因是在引导时节省时间和资源。 它验证整个区块链标头集以确保工作证明有效,但它实际上并不验证真正旧块的签名或其他见证数据。 其逻辑是,对于真正老的区块,比如五年前的区块,实际验证和运行这些区块的签名和其他见证检查是多余的。 如果有人在五年前能够在没有有效签名的情况下花费硬币来挖掘无效区块,那么比特币基本上就被破坏了。
比特币核心过去常常通过硬编码检查点跳过对这些旧区块的验证,即开发人员实际上只是将过去已知有效区块的区块哈希直接包含在验证代码中,而核心不会检查在此之前的任何见证数据。 这是一个非常hacky的解决方案,用户不可能在不亲自修改客户端源代码的情况下更改此行为。 2017年 Greg Maxwell 介绍了假设有效函数 来处理这些问题。 假设有效不是源代码中的硬编码值,而是一个可以在启动时修改的设置,用户可以自己手动传递区块哈希并决定从哪个区块开始验证见证数据。 核心仍然为此功能硬编码默认块,但关键区别是现在用户可以轻松覆盖该功能,而无需修改源代码。 只需运行“bitcoind –assumevalid=[theblockhash] 用户可以自己决定验证或不验证什么。 您可以使用假设有效 = 0 来运行它来验证自创世纪以来的每个区块。
假设utxo 带来了与处理 UTXO 集非常相似的功能。 您的节点为验证历史区块链所做的一切都是为了构建 UTXO 集。 除非您知道该币之前是否已被花费,否则您无法真正知道交易是否有效,而 UTXO 集是节点为跟踪所有尚未花费的币而建立的缓存。 在过去的几年里,用户已经组合了许多 hacky 工具,可以简单地跳过并从某个时间点开始从已知的良好 UTXO 集开始,大多数 尤其是 BTCPay 服务器。 这些都是非常丑陋的黑客行为,但本质上归结为复制和粘贴保存 UTXO 集的文件目录。 现在,比特币核心将支持该功能。
James O’Beirne 整合的实现已经实现了导入和开始使用 UTXO 快照的所有逻辑,以及首先创建 UTXO 快照的工具。 与假设有效非常相似,假设utxo 将简单地接受现有快照文件作为参数并将其加载到用户的节点中并从那里开始运行。 这将为最终用户和企业的节点运营商增加巨大的灵活性。
用户可以创建当前 UTXO 集的快照并将其存储在某个地方; 如果他们的节点崩溃或任何数据库损坏,他们可以简单地获取 UTXO 快照并从该块高度重新启动其节点,而不必从创世块重新启动。 彼此具有信任关系的用户可以简单地帮助彼此从现在的情况启动一个节点。 根本不再需要区块链同步。 如果您信任我,我可以为您提供我的节点中当前的 UTXO 集,并且在几个小时的区块内,您可以立即启动并运行节点。 由于不同原因必须运行多个节点的企业可以通过 UTXO 快照更快、更轻松地启动它们。
现在,这还没有准备好在下一个比特币核心版本中上线,但是 正如詹姆斯在推特上所说的那样 达到这一点需要跨越的障碍实际上是五行代码。 所有核心逻辑和实现都已合并,所需要做的就是更改一些标志,以便 Core 将允许用户在主网上运行节点时使用 Shouldutxo。
所以,恭喜詹姆斯合并。 许多比特币爱好者期待对自己的节点有更大的灵活性和控制权。