比特币Taproot 升级
2021年11/14日,比特币进行了近几年最大的一次升级:Taproot。就想着自己研究一下。
我了解完taproot之后,发现Taproot最大的改进就是,提高了多重签名钱包(multi signature wallet)的隐私性和效率。Bip341进行了详细的介绍。
为了更好地了解改进,首先我们要知道,在taproot升级之前,多重签名钱包在比特币中是如何工作的。升级之前,通过比特币转账,可以有两种收款地址。一种是普通地址(也就是一个钱包的公钥),以1开头,比如1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2。另一种是脚本地址(类似以太坊智能合约地址),以3开头,比如3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy。
脚本地址最常见的应用就是多重签名钱包。比如现在很火的constitutiondao,就在以太坊上用多重签名钱包。多重签名钱包的机制可以防止一个人卷钱跑路。
对于比特币,要从普通地址取钱,需要你的私钥来解密。升级之前,要从脚本地址取钱,稍微复杂一些。需要:一,把脚本上传到公链上;二,用脚本用到的所有私钥来解密。
更细节的来说,用户需要用多个公钥和用一个脚本生成一个哈希值(脚本地址)。转账的时候,转账方只需要把钱打到这个脚本地址。当接收方需要取钱的时候,需要把脚本上传到公链,并提供私钥,公链会验证是不是满足取款条件。
因为需要把整个脚本都上传,就会引起两个问题:一,占用更大的空间,从而让费用更高。二,所有人都可以看到公链上脚本的内容,没有隐私。比如有哪些人控制这个钱包等等。
这次taproot的更新,比特币不再区分脚本地址和普通地址。
因此,在取款的时候,收款方不再需要上传整个脚本。收款方的公钥和脚本就不需要被公布。这是通过Schnorr和Merkel tree的技术实现的。把脚本和公钥的计算搬到线下来做。Schnorr加密算法可以把多个秘钥组合成一个秘钥来加密。Merkel tree可以把脚本中多个取款条件,合成为一个哈希值。
总结一下,通过Schnorr和Merkel tree的技术,Taproot让多秘钥钱包的效率和隐私大大的提高了,但是并没有让比特币的编程更容易,因为比特币没有想成为一个通用的编程平台。