Web3新手系列: 探究比特币为何有多种地址?

By admin 5 月 26, 2024
Web3新手系列: 探究比特币为何有多种地址?Web3新手系列: 探究比特币为何有多种地址?

可能有很多新手朋友和笔者一样,第一次使用WEB3钱包时,兴高采烈地打开比特币钱包,准备复制地址的时候,突然发现自己创建的一个钱包居然有多个不同的地址。就像走到一个陌生的十字路口一样,一脸茫然。

为什么会有不同的地址?这几个地址到底该用哪个呢?

OKX钱包的多个Bitcoin地址

这些地址分别是什么?

Bitcoin社区是一个不断发展的技术社区,技术的发展带来了新的内容。不同的地址格式可以看作是新技术应用的结果。接下来我们来探索一下不同地址格式的区别是什么。

Legacy地址(P2PKH)

这种格式是在2009年比特币刚刚推出时采用的格式,所以被称为Legacy格式。由于当时比特币的地址是从公钥/私钥对创建的,所以也被称为支付公钥哈希(P2PKH)地址。

目前来看,Legacy类型的地址在交易中会占用更多的空间,导致交易手续费更高。目前只有在使用一些与新地址不兼容的旧钱包时才会使用这种类型的地址。

可以发现Legacy地址有一个特点,地址都是以”1″开头的。这是因为在生成地址时,会根据不同情况(比如:测试网/主网)在生成的公钥前添加前缀,添加了前缀的公钥经过哈希计算后,地址最终会以”1″开头。

Nested SegWit地址(P2SH-P2WPKH)

与传统的Legacy地址相比,P2SH地址采用的不是公钥的哈希,而是赎回脚本(redeem-script)的哈希。简单来说,P2PKH是向公钥的哈希进行支付,而P2SH是向赎回脚本进行支付,只有接收者满足赎回脚本的转出条件之后,才可以使用其中的资金。

由于支付对象从公钥转变为脚本,大大增加了灵活性,可以自定义赎回脚本的执行逻辑。典型的应用包括实现多重签名的交易。

在P2SH的基础上,如果嵌入了隔离见证技术,那么这种地址的格式就是隔离见证兼容地址(Nested SegWit)。关于隔离见证相关的内容可以在介绍隔离见证地址的时候了解到。引入了隔离见证技术之后,可以减少交易的大小,从而减少交易的手续费用。

可以看到P2SH地址以”3″开头。

隔离见证地址(Native SegWit)地址

在介绍这种地址之前,需要介绍其中的关键技术——隔离见证(SegWit)。顾名思义,隔离见证就是将见证数据(witness)单独隔离出来进行处理。

这样做的一个显著优势是减少交易信息的大小,从而减少交易的手续费。另外,体积减少带来的另一个好处是提高了比特币区块交易的大小上限,从1MB的容量大小增加到了4MB。

隔离见证地址的特点是地址以”bc1″开头。

主根地址(Taproot)

Taproot地址的优势在于隐私性和在复杂交易场景下的效率。与Native SegWit相比,它使用Schnorr算法��代了椭圆曲线数字签名算法,前者在批量交易的场景下效率更高,并提高了多重签名钱包的隐私性。

主根地址的特点是地址一般以”bc1q”开头。

我应该选择哪种地址格式?

目前主流钱包如OKX、Unisat等都支持以上四种地址,因此为了减少交易费用,采用Native SegWit和Taproot格式的地址是比较合理的。

另外,如果你对比特币的隐私等方面感兴趣,那么这两种地址是你的首选。大多数钱包都对这两种地址的隐私做了额外处理,可以保护你的特殊UTXO在交易中不会被错误转移。请确保选择以”bc1″开头的钱包地址!

当然,不同地址格式的钱包之间可以进行资金交易,无需担心。

如果想查看比特币的余额或区块信息,欢迎使用ZAN的节点服务,我们提供了丰富的API供开发者使用。API文档详情请参考:https://docs.zan.top/reference/zan_getbalance-enhance

更深入一点——关键技术介绍

通过上述介绍,大家对钱包有了初步的了解,对于钱包中的一些技术获取也许会很感兴趣,那么一起来了解一下其中神秘的技术吧。

赎回脚本(Redeem Script)

在介绍P2SH时,我们了解到这是一种面向赎回脚本交易的技术,那么什么是赎回脚本?它在比特币生态系统中的作用是什么?

在介绍赎回脚本之前,我们需要介绍一下比特币交易的基本结构。

下面是一个典型的P2PK类型的交易,其中以04ae开头的地址想要将10个BTC转给以15kD开头的地址。04ae地址的账户需要向链上的其他人证明自己确实拥有该账户的使用权(拥有私钥),因此在这个交易中,需要提供一个签名(ScriptSig)来证明自己的身份。

验证者除了需要获取该签名之外,还需要查找上一个交易对应的UTXO的输出脚本。这两个脚本拼接在一起就是赎回脚本。赎回脚本的作用是用来证明交易的合法性。

在这个交易中,可以看到签名和输出脚本都是一段计算机指令。”OP_PUSHBYTES”表示向栈中推送一段数据,首先在ScriptSig中,04ae使用自己的私钥对整个交易进行签名,该签名会被压入栈中。之后再压入公钥,最后在”OP_CHECKSIG”中,使用公钥对签名进行解密,验证交易是否一致。如果一致,则表明身份有效。

除了P2PK的方式,赎回脚本还可以实现P2PKH、P2SH等不同的身份验证方式。

隔离见证(SegWit)

从上面的介绍可以了解到,目前较新的钱包格式都采用了隔离见证技术,那么什么是见证(Witness)?它是如何进行隔离的呢?

这里的Witness可以认为是比特币基本结构中的脚本签名(ScriptSig)信息,隔离见证将其从基本结构中分离出来,放在一个新的数据结构中。

在上图中可以看到,交易中只剩下了交易来源的信息和交易输出的信息,交易的大小被减少了。由于黄色部分(交易的总大小)有大小限制,因此将交易的签名分离出来进行传输,可以让一个区块容纳更多的交易。另外,由于计算交易的签名时,签名部分的内容不被计算在内,因此可以有效解决交易延展性的问题。

下面是一个P2TR交易,可以看到这个交易多了一个Witness部分。它的作用是用来验证交易的合法性。使用Witness代替ScriptSig之后,验证合法性的方式还是一致的,即通过使用公钥来解密Witness的签名,验证交易的内容是否一致。只有节点需要验证交易合法性的时候才会去请求Witness的信息。现在可以免费使用ZAN Node服务(访问ZAN.TOP),可以稳定、高速地连接到BTC网络。

总结一下,隔离见证就是将原本一个交易中的交易签名部分的内容和其余部分内容分开传输,从而减少了单个交易的大小,提升了整个区块的容量。另外,由于签名部分的内容在计算交易的哈希值时不被计算在内,因此可以有效解决交易延展性的问题。

本文由ZAN Team(X账号@zan_team)的Yeezo(X账号@GaoYeezo 75065)撰写。

By admin

Related Post

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注