一,为什么要做 BTC Layer2?
1. 有需求:Bitcoin 网络满足了资产登记的需求,但仍有大量的资产需要进行链上结算(Layer2)
当前 ETH 的 Layer2 都只是 ETH Layer1 的 Copy,没有解决什么 Layer1 解决不了,非得 Layer2 去解决的实际业务问题。
非得说 ETH Layer2 解决了 ETH Layer1 的问题是:Layer2 解决了 Layer1 Gas 费用贵的问题。也正因为这一需求,成就了 ETH 第一大 Layer2 Arbitrum 上的衍生品应用,如 GMX。
而 BTC 的 Layer2 不想 ETH Layer2 一样无关紧要。
因为 BTC 非图灵完备的链上虚拟机只能给资产做登记,而不能做结算,所以 BTC Layer1 必须需要图灵完备的 BTC Layer2 来做 BTC Layer1 发行的资产的结算问题。
2. 有能力:BTC 能够做成完全去中心化的 Layer2
在 2021 年 BTC Taproot 升级前,能够做到完全去中心化的 BTC Layer2 是不可能的。但是在这次升级后,BTC 门限签名算法可以让 BTC 支持完全去中心化的 Layer2 计算层。
二,如何实现去中心化的 BTC L2?
比特币改进提案(BIPs)是为比特币引入新功能和信息的设计文档,而 taproot 升级则是三个 BIPs 的汇编,这三个 BIPs 分别是 Schnorr 签名(BIP 340)、Taproot(BIP 341)和 Tapscript(BIP 342),这三个升级统称为 BIP Taproot。
它将为比特币带来更高效、更灵活、更私密的传输方式,其核心在于使用了 Schnorr 签名和 Merkel 抽象语法树。
Schnorr 签名是一种以其简单性和安全性而闻名的数字签名方案。Schnoor 签名在计算效率、存储和隐私方面具有多项优势。

图 1:Schnorr 聚合签名的交互流程
用户通过公钥确认签名者身份,通过数据确认契约内容,从而来认证数字契约的有效性。
Schnorr 聚合签名可以将多个签名数据压缩合并成单个聚合签名。
验证者通过所有签名的相关数据和公钥组成的列表对单个聚合签名进行验证,若验证通过,其效果等同于对所有相关签名进行独立验证且全部通过。

图 2:ECDSA 多签算法
当前大多数区块链都是采用 ECDSA 多签算法,针对区块数据,每个节点用自身私钥生成独立的数字签名,并广播给其他节点。其他节点会验证该签名,并将其写入下一区块数据中。
使用这种方式,当共识节点数较多时,会导致每轮共识区块存储的签名数据不断增加,占用存储空间。
每当新节点加入网络,需要同步历史区块时,大量签名数据会对网络带宽造成很大的挑战。
使用聚合签名技术后,每个节点会收集其他节点广播的聚合签名名片,然后将签名分片聚合保存,如图 2.
这样,当新节点加入时,同步历史区块只需下载聚合后的签名数据,大大减少对网络带宽的占用,同时减少交易费用的支出。
此外,密钥聚合还使所有的 Taproot 输出看起来类似。无论是多重签名输出、单签名输出或者其他复杂智能合约在区块链上看起来都长得一样,所以许多区块链分析将不可用,从而为所有 Taproot 用户保留隐私。

图 3:MAST 结构图
MAST(Merkle Abstract Syntax Tree)是使用默克尔树来加密复杂的锁定脚本,其叶子是一席勒相互不重叠的脚本(比如,多重签名或时间锁)。
支出时,只需披露相关脚本以及从该脚本通向默克树根的路径。如图 3,要使用 script1,只需披露 script1、script2 以及 hash3 即可。
MAST 的主要优点包括:
- 支持复杂的支出条件
- 不用披露未被执行的脚本或未被触发的支出条件,提供更好的隐私保护
- 压缩交易大小:随着脚本数量的增加,非 MAST 交易大小是线性增长,而 MAST 交易大小是对数增长。
然而,在 Taproot 升级中有一个问题,那就是 P2SH 与常见的支付到公钥的哈希(Pay-to-Public-Key-Hash,P2PKH)在表现上不一样,仍然有隐私保护问题。
有没有可能让 P2SH 和 P2PKH 在链上看起来一样?
为此,Taproot 提出了一套解决方案,对于有限数量签名者的脚本,可以分解成两部分:
第一部分是多重签名,所有签名者都同意某一支出结果,称为「协作式支出」。
第二部分称为「非协作式支出」,可以有非常复杂的脚本结构。
这两部分是「或」的关系。
如图 3,Script3 是一个 2-of-2 型多重签名,需要 Alice 和 Bob 两人都签名才有效,是「协作式支出」,Script1 和 2 是「非协作式支出」。
「协作式支出」和「非协作式支出」,都能够花费这笔输出,其中:
- 对「非协作式支出」脚本,采取上述 MAST 的方式,用 MerkleRoot 表示默克树根。
- 对「协作式支出」脚本,采取基于 Schnoor 签名的多重签名算法。用 Pa 和 Pb 分别表示 Alice 和 Bob 的公钥,用 Da 和 Db 分别表示 Alice 和 Bob 的私钥。因此,聚合公钥是 P=Pa+Pb,对应的私钥是 Da+Db。
- 将「协作式支出」与「非协作式支出」合在一起表示成 P2PKH 形式,其公钥是:PP+H(PMerkleRoot)G;对应的私钥是 Da+Db+H(PMerkleRoot)。
- 当 Alice 和 Bob 同意「协作式支出」,他们用 Da+Db+H(PMerkleRoot) 只需他们中的一个人在自己的私钥上加上 H(PMerkleRoot)即可。
在链上,这表现得如同 P2PKH 交易一样,有一个公钥和对应的私钥,而不需要披露底层的 MAST。