比特币、以太坊地址类型及其生成机制全解析
1、前言
我们将推出名为“Foundations”(基础)的新系列。这个新系列将以浅显易懂的方式介绍区块链技术的各“技术”维度。本文,我们会从地址概念出发。首先我们将进行地址的基本介绍,然后深入研究以太坊和比特币地址的详细内容。公钥--私钥、EOA、智能合约,以及“not your keys, not your crypto”(不是你的私钥,也不是你的加密货币)都将在本文得到详尽解释。像往常一样,我们将使用链上数据来突出关键概念,并提供重要背景帮助你更好理解。
2、加密货币地址
地址的概念可能是加密货币世界最基本的概念。不管是哪个区块链,地址都是区块链上的“身份”单位,所有的交互都以地址开始,以地址结束。无论是执行简单的转账还是使用DeFi协议进行复杂的交易,地址都是至关重要的。虽然不同链之间的地址存在着细微差异,但它们都可以用于链上资产唯一标识和分组。
接下来,我们将详细讨论以太坊地址。以太坊地址有哪些不同的类型,它们是如何生成的,如何使用的。然后我们将阐述比特币地址和比特币网络上最重要的四种地址类型。
但首先要搞清楚,“拥有”地址的是谁?
我们先来澄清一些模糊的认知:单个地址并不一定意味着单个用户。一个地址背后可能有一群人,一个人也可能有多个地址。一个地址甚至可以是一个智能合约,不被任何单个用户“拥有”。然而,地址是区块链中身份的原子单位,与地址所有者或操作者无关。但我们很快就会知道,真正的所有权属于地址私钥的管理者。
3、以太坊地址
以太坊地址是一个20字节的唯一序列,1字节为8 bit,所以以太坊有28*20 = 2160种可能的地址。虽然地址长度只有20个字节,但以太坊的地址空间比IPv6 2128大得多,当然,“猜测”某个现有账户的私钥的成功概率是非常小的。通常,地址显示为以“0x”开头的字符串,后面是40个十六进制字符(0-9,A-F)。在以太坊系统中,每个地址都对应着相关的原生加密货币(ETHer或ETH)余额。余额多少不等,从略高于0 ETH到最大超过1900万ETH(信标链质押合约)。然而,除了最大的地址余额之外,ETH分布在数百万个地址上,如下所示。在下图,我们可以看到,在总共1.2亿个ETH中,有近1亿个被余额至少为100 ETH的地址所持有。
以太坊地址有两类:外部拥有账户(EOA)和智能合约账户。二者区别在于EOA关联私钥,而智能合约则关联合约代码。这意味着只有EOA可以签署交易并在以太坊系统内启动计算,而智能合约必须由源自EOA的交易“激活”。
例如,0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045是V神的已知个人EOA账户,而0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48是稳定币USDC的智能合约地址。对于像V神这样的EOA账户来说,私钥通常由商业化“钱包”管理,如MetaMask。但也可以使用其他方法进行管理,比如Python脚本或硬件钱包等。
以太坊地址从何而来?
外部拥有账户(EOA)地址和智能合约地址都有不同的生成方式,涉及到一系列加密操作。事实上,这就是加密货币之所以叫做“加密货币”的一个关键原因。
(1)EOA地址
帐户生成过程首先是生成私钥,这是一组256 bit(32字节)的随机数。这组随机数必须保密,因为仅私钥自身就可以完全控制地址了。这个随机数就是“not your keys, not your crypto”这句话的根源。因为如果没有这组随机数,或者如果其他人得到了这组随机数,他们就可以访问你的地址,获取与你的地址绑定的身份信息,甚至窃取你留在那里的全部的钱和藏品。
接下来,私钥(实际上只是一组数字)用于椭圆曲线数字签名算法(简称ECDSA)的输入。顾名思义,该算法使用椭圆曲线生成另一组长度为512 bit(64字节)的数字,称为公钥。这两组数字统称为公钥/私钥对。
最后,使用Keccak256函数计算公钥的哈希值,产生另一个256 bit序列(32字节)。然后截取保留该序列的最后20字节或160 bit,这就是以太坊使用的地址。下图图解了这个过程。
这个过程可以通过多种方式完成,但是,大多数用户选择广泛适用的“钱包软件”(如MetaMask)或开源软件(如web3.py)来生成和管理他们的私钥。从技术上讲,除了生成和管理私钥和地址之外,EOA通常由一个人、一群人或具有关联私钥访问权限的专业保管人控制。该私钥用于签署交易,这是将ETH发送到另一个EOA账户或智能合约的关键步骤,私钥必须保密并进行高度安全的妥善保管。我们在下文讲到冷钱包时会进行更多相关探讨。
(2)智能合约地址
EOA是在以太坊上使用区块链的第一步,无论是在简单的转账交易中发送ETH,还是与智能合约进行交互。然而,EOA还执行一个特殊功能,那就是智能合约部署。在智能合约的部署过程中,产生了第二种以太坊地址类型。
该过程首先将一些编译后的EVM兼容字节码插入到一个交易中,该交易被发送到“特殊”部署地址0x0。然后,以太坊协议本身使用一种结合EOA部署公钥及其nonce(即地址在其生命周期内发送的交易总数)的算法。
更具体地说,将地址(20字节)和nonce(64字节)连接起来,然后将递归长度前缀(RLP)序列化。生成的字节序列再通过Keccak256计算得出哈希值,取最后的20个字节作为智能合约地址。
智能合约地址是非常重要的信息,因为它们是交易与合约交互的入口。例如,如果想要在UniswapV2上进行代币互换,那么工厂合约(Factory Contract)地址将非常重要,0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f。
量化以太坊地址
如上所述,以太坊有2160种可能的地址总数,下图显示了这些地址中目前链上所见数量。图中,地址按类型分组,显示了近1亿个EOA账户的ETH余额非零,智能合约账户超过3000万个。虽然这些都是相当大的数字,但与可能的总数相比,是微不足道的,这对以太坊用户来说是个好消息,可以放心,我们离耗尽地址还远着呢。
4、比特币地址
相较以太坊,比特币地址有更多的细节需要解决。首先来看地址类型,比特地地址类型其实主要有四种:Legacy、Pay-to-Script-Hash、Segwit和Taproot。尽管比特币使用不同的会计方法——未消费交易输出(UTXO)模型——来跟踪链上的加密货币,但我们将重点关注下面几种不同的地址类型。
(1)Legacy(P2PKH)地址
这些地址包括比特币系统原始部署中使用的地址,并且很容易识别,这些地址是以“1”开头的。它们的生成方式与以太坊地址的生成方式非常相似,从公钥/私钥对的生成开始。
然后像以太坊一样,计算公钥的哈希值,但使用的是SHA-256算法。所得的256 bit序列随后使用RACE原始完整性校验消息摘要(RIPEMD-160)再次计算哈希值,得到20字节(160 bit)的序列。回过头看,这个过程与以太坊非常相似,但是,显示为文本形式时,比特币通常使用的是Base58CheckEncoding。这意味着20字节序列使用58个字符(1-9,A-H,J-N,P-Z,a-k,m-z)编码,而非十六进制编码中使用的16个字符。基本上,存储在计算机内存中的相同的160 bit的0、1序列会通过一组16字符或58字符呈现到屏幕上。当然还有很多其他编码,但这是特别为比特币选择的编码。
(2)Pay-to-Script-Hash(P2SH)地址
P2SH地址以“3”开头,从技术上来说属于脚本,可用于要求多重签名的转账事宜等。比特币的“Pay-to-Script-Hash”的真实性质超出了我们的探讨范围,但简单来说,P2SH地址是使用Base58Check对脚本代码哈希进行编码。因此,可以将P2SH地址概念化为脚本的20个字节哈希的编码,类似于公钥的20个字节哈希的编码。
(3)SegWit和Taproot 地址
为了提高区块空间的效率并改善费用,SegWit在地址的构造方式上引入了一些变化。具体的算法细节计较乏味,因此我们在这里跳过细节,但是人们可以轻松地一眼看到这些以“bc1”开头的新地址。除了SegWit之外,以“bc1p”开头的Taproot地址进一步提高了交易效率,并提供了更好的隐私性。
与以太坊类似,下图显示了按地址的总余额大小汇总的比特币总余额。与以太坊类似,绝大多数比特币由价值最高的那些地址持有。然而,仔细检查数据以更好地理解分布结构是非常重要的。
5、关于加密地址的更多内容
除了地址生成机制外,还有一些关于地址的其他概念我们应该理解,包括:热/冷钱包,以及Vanity Address和ENS。
(1)热钱包和冷钱包
加密货币资产“存活”在区块链本身上,或被存储为原生第一层货币(例如ETH或比特币),或被存储于智能合约余额账本(例如USDC、Dai、WETH)。区块链本身可以被视为存储在各自网络节点中的分布式数据库。这意味着用户并不托管加密货币,而是托管与各个区块链上各自地址关联的私钥。因此,真正的私有信息必须保证安全,因为这些私有信息就是与地址相对应的私钥。
在加密世界中,存储私钥的方法主要有两种:热钱包和冷钱包。二者很容易区别:热钱包是连接互联网的私钥存储系统,而冷钱包是没有连接互联网的系统。完全断开与互联网的连接使私钥得到更安全的保护。想要获取私钥,必须先获取冷钱包设备。总而言之,存储在钱包中的不是加密货币本身,而是与区块链上余额地址相关联的私钥。私钥管理越来越复杂,现在越来越流行一种数字资产安全方法,那就是多方计算(MPC),多方计算将私钥分解为加密共享数据分配给多个参与者。
(2)Vanity Address和ENS
Vanity Address和其他地址一样,但是,该地址的某部分将超出意料中的随机性。前几个字符可能会拼出一个英文单词、短语或名称,比如Legacy比特币地址:1googLemzFVj8ALj6mfBsbifRoD4miY36v。这些地址可用于更轻松地识别交易对手方,并可用于品牌宣传和营销。这些地址的生成过程得到了几个开源项目的支持,例如Vanitygen。然而,应该注意的是,这个过程可能需要非常密集的计算资源,因为它需要一个“guess-and-check”(猜测和检查)类型的算法。谨慎的做法是,不要轻信在线工具去获取vanity address,因为它们也会获取你的私钥副本,正如那句话所说的,“Not your keys, not your crypto.”。事实上,去年在“Profanity”以太坊vanity address地址生成器中就有一个漏洞被利用了。
作为一个正式的系统,为了不必须生成容易记忆的vanity address,以太坊有一个叫做以太坊域名服务(ENS)的应用程序,就像域名系统(DNS)简化了传统互联网的访问一样。与URL非常相似,用户可以购买以“.eth”结尾的自定义名称,智能合约创建这些标签的记录,这些记录在链上公开可用。借用上文提到的V神的例子,我们可以看到他的ENS名称是vtalik .eth。ENS名称,就像URL一样,让以太坊区块链更加用户友好,因为字母数字组合比20字节序列更容易记住,这增强了网络的便利性和安全性。
微信扫描关注公众号,及时掌握新动向
2.本文版权归属原作所有,仅代表作者本人观点,不代表比特范的观点或立场
2.本文版权归属原作所有,仅代表作者本人观点,不代表比特范的观点或立场