随着比特币第 709,632 个区块的 Taproot 软分叉激活日益临近,我们希望就 BitGo 热钱包和合格托管钱包对 Taproot 的支持分享更多详情。我们很自豪地宣布,BitGo 将 全面支持向 Taproot 地址发送和从 Taproot 地址接收的 API 功能。与比特币的新功能一贯的做法一样,Taproot 完全采用自愿参与模式。届时将有 比特币服务不会中断,也无需创建新钱包、升级旧币或迁移至新地址。
一旦我们为 BitGo 钱包启用 Taproot 功能,用户即可创建新的 Taproot 地址用于接收交易,且这些地址将与现有钱包无缝兼容。需要注意的是,比特币生态系统中的其他软件可能需要一段时间才能完成升级,在此之前,它们可能无法验证 Taproot 地址或向其发送交易。
请注意,目前我们仅在 API 层面提供对 Taproot 的全面支持。向 Taproot 地址发送交易的用户界面支持功能将在上线时提供,但创建新的 Taproot 地址以及在交易中消耗 Taproot 输入的功能暂不可用,这些功能将在日后启用。
升级时间表
随着我们在各项服务中逐步启用 Taproot,预计未来几天将出现以下情况:
11 月 12 日,约 15:00(太平洋标准时间) - 比特币测试网上的 BitGo 钱包将启用 Taproot 支持。
11 月 14 日,约太平洋标准时间 00:00 - 已挖出第 709,632 个区块,从而激活了新的 Taproot 共识规则。
11 月 14 日,约 17:00(太平洋标准时间) - 在对区块链进行监控,确保新的共识规则已成功激活且运行符合预期后,BitGo 热钱包将在比特币主网上启用 Taproot 支持。 BitGo 合格托管钱包将能够创建新的 Taproot 地址并接收发往这些地址的资金,但我们无法处理来自 Taproot 地址的提现请求,直至大约 11 月 17 日(星期三)。
11 月 17 日 - 已启用从符合条件的托管钱包中 Taproot 地址提取资金的功能。
请注意,这些时间仅供参考,可能会有变动,恕不另行通知。请联系 support@bitgo.com 或订阅 status.bitgo.com 以获取最新信息。
什么是 Taproot?
有很多 精彩的文章 解释什么 主根 是什么以及它 意为 面向比特币用户。总而言之,此次升级使比特币在定义支出条件方面具有更大的灵活性,同时引入了对 Schnorr 签名的支持--这是一种更简单、更灵活的数字签名类型。此外,Taproot 升级还包含 Bech32 地址类型的一种新变体--Bech32m。
支出条件的灵活性
Taproot 改变了用于锁定比特币的复杂脚本的表达方式。与创建一个包含许多互不关联的支出条件的单一大型脚本不同,Taproot 允许将这些条件分别单独表达。只需向网络披露实际使用的支出条件,从而提高了隐私性,并有可能降低手续费。
为了让这一切更具体一些,让我们来看看一个典型的 BitGo 多签名钱包。 我们的钱包使用三把密钥:由客户持有的"客户端密钥"、由我们持有的"BitGo 密钥",以及由第三方持有的"备份密钥"。针对特定钱包,任意两把密钥均可用于授权比特币交易。
在 Taproot 出现之前,我们需要使用 OP_CHECKMULTISIG 来表达这一消费条件,这要求我们公开全部三个公钥和两个签名。 我们被迫将一个额外的公钥写入区块链,尽管该公钥并没有对应的签名。如果我们只需披露那些与实际用于支出的签名相对应的公钥,那该多好啊?
借助 Taproot,只需满足这三个互不相交的支出条件中的任意一个即可:
客户签名和 BitGo 密钥
客户签名和备用密钥
来自 Backup 和 BitGo 密钥的签名
与其直接公开这三个公钥以及其中两个的签名,现在可以将这些情况拆分为三个独立的"2-of-2"多签脚本,并将其提交到默克尔树中。 这种脚本树被称为 TapTree,只需提供少量数据(即"包含证明")即可证明某个给定的支出脚本存在于其中。在支出 Taproot 输出时,只需披露将要使用的脚本、包含证明以及满足该特定脚本所需的两个签名,即可授权该笔支出。
当该设计中被锁定的 2-of-3 Taproot 输出被花费时, 由于需要编码 2-of-2 脚本的包含证明,因此与使用 OP_CHECKMULTISIG 花费原生 SegWit 输入相比,每次输入的成本会略高一些(107.5 vBytes 对比 104.5 vBytes)。那么,为什么还要使用 Taproot 呢?
隐私保护的改进
在使用 Taproot 时,观察区块链的人无法得知 TapTree 中还有哪些其他未被使用的支出条件。可能根本没有其他条件,也可能有数百个。在 Taproot 出现之前,这些支出条件都必须被公开,这不仅浪费了区块链上的空间,还会导致交易在海量交易中显得格外显眼。 通过使用 Taproot,需要写入公共区块链的信息量减少了,因此可用于识别交易特征的信息也相应减少,同时仍能 100%追溯交易的签名者身份。
施诺尔签名
在比特币历史上首次,除传统的椭圆曲线数字签名算法(ECDSA)签名外,还将新增一种数字签名算法。这种新签名被称为施诺尔签名(Schnorr signatures),其大小固定为 64 字节,且由于无需进行复杂的模逆运算,计算速度也更快。
特别值得注意的是,Schnorr 签名可以通过简单的加法运算进行聚合。这使得将某些常见的消费条件表示为单个密钥变得更加容易,只需一个签名即可。该 MuSig2 多签名方案将使参与者仅需少量额外通信,即可安全地计算聚合公钥和签名。使用此类聚合密钥解锁输入时,可节省惊人的 每个输入 47 v 字节 (57.5 v 字节 对比 104.5 v 字节)与原生 SegWit OP_CHECKMULTISIG 相比。
为了呼应比特币一贯的"长期偏好"理念,BitGo Taproot 从一开始创建的地址将拥有一个 MuSig2 聚合公钥。在上线之初,用户将无法使用该聚合公钥进行消费,因为截至 2021 年 7 月,相关细节仍在调整中,而且 参考实现 截至本文撰写之时,该功能尚未完全实现。不过,我们非常期待在不久的将来推出对 MuSig2 的支持,这将为拥有 Taproot UTXO 的现有钱包提供自动且无缝的升级。简而言之,在上线时收集 Taproot UTXO 将有助于降低未来的交易手续费。
如何将其与我的 BitGo 钱包配合使用?
一旦挖出第 709,632 个区块,Taproot 的新规则将在比特币主网上生效。随后不久,我们将允许 API 用户创建新的 Taproot 地址。要实现这一点,只需提供 链:30 BitGo API 的参数。
BitGo API 示例
如果您使用的是 BitGoJS SDK 或 BitGo Express,还需要提供 addressType: 'p2tr' 除了该参数之外,还有 链:30 Wallet 对象上 createAddress() 函数的参数。支持 Taproot 的最低版本为 13.1.0 用于 BitGoJS SDK 以及 9.10.1 适用于 BitGo Express。
BitGo Express 示例
BitGoJS SDK 示例
长期影响
我们预计 Taproot 的采用将是一个渐进的过程,各钱包将随着时间的推移逐步支持该功能,这与 SegWit 的采用模式非常相似。 作为一家仅提供多签名钱包服务的公司,BitGo 钱包所获得的优势更为显著。随着越来越多的客户转向使用 Taproot,以及我们启用对 MuSig2 的支持,预计与当前的多签名实现方案相比,长期手续费将大幅降低。
短期内,部分钱包可能无法向 Taproot 地址发送比特币,我们预计比特币生态系统中的软件需要数月时间才能完成更新,以全面支持这一新功能。 我们深知此次升级对所有 BitGo 钱包用户的重要性,并致力于让我们的客户能够使用比特币提供的最先进功能。
如果您认同我们关于打造全球最具可扩展性的比特币服务平台这一愿景, 点击此处申请加入 BitGo 的比特币团队。我们正在寻找经验丰富的工程师,他们热衷于推动比特币的普及,并愿意迎接我们路线图中那些技术含量极高的项目所带来的挑战。我们憧憬一个未来,届时所有人都能简单、安全地使用比特币。
关于 BitGo
BitGo 是一家数字资产基础设施公司,通过受监管的冷存储提供托管、钱包、质押、交易、融资和结算服务。自 2013 年成立以来,我们一直致力于加速金融体系向数字资产经济的转型。 凭借全球业务布局和多家受监管的实体,BitGo 为数千家机构提供服务,其中包括众多行业顶尖品牌、交易所和平台,以及全球数百万散户投资者。
