在以太坊生态系统中,地址(Address)是一个核心概念,它就像银行账户号码,用于接收、发送资产和与智能合约交互,与比特币通常使用单一类型的地址不同,以太坊的地址根据其生成方式、用途和所遵循的标准,主要分为三种基本类型:外部账户(EOA)、合约账户以及由不同编码方案区分的地址格式,理解这些区别对于安全地管理资产和使用以太坊应用至关重要。
按账户类型划分:外部账户与合约账户
从账户的本质和权限来源来看,以太坊的地址可以分为两大类:外部账户和合约账户。
外部账户(Externally Owned Account, EOA)
外部账户是由用户通过私钥控制的账户,这是我们通常所说的“钱包”地址。
- 控制权:完全由用户拥有,账户的私钥掌握在用户手中,谁拥有了私钥,谁就拥有了该地址的绝对控制权,可以自由地转移账户内的以太币(ETH)和代币。
- 特点:
- 由用户通过密码学算法(如椭圆曲线算法ECDSA)生成,包含公钥和地址。
- 它是发起交易的唯一主动方,可以主动发起一笔交易,例如向他人转账ETH、调用智能合约等。
- 它本身不包含代码,其状态(如账户余额)由交易来改变。
- 类比:可以将其想象成传统银行中的个人储蓄账户,账户由你用密码(私钥)控制,你可以主动发起转账。
合约账户(Contract Account)
合约账户是由智能代码部署在以太坊区块链上的账户,它没有私钥,其行为由预设在其中的代码决定。
- 控制权:由代码逻辑控制,合约账户的执行完全依赖于被触发时传入的参数和代码预设的规则,无人能直接用私钥控制它。
- 特点:
- 由智能合约的创建者部署生成,地址通常与创建者的地址和交易nonce值相关。
- 它是交易的被动接收方,虽然它也可以发起交易(当收到特定类型的转账时自动执行某个函数),但这个“发起”行为是由代码预设的,而不是由外部私钥主动驱动的。
- 它包含存储在区块链上的代码和数据(状态)。
- 类比:可以将其想象成一个自动售货机或一个信托基金,你向它投入特定条件(如投入硬币),它就会按照预设的程序(如掉出商品或执行转账),但它本身没有“主人”可以用私钥来随意改变其内部规则。
按地址编码格式划分:以“0x”开头的地址
除了上述账户类型的划分,我们日常接触到的以太坊地址字符串,其格式也有所不同,这主要取决于地址的编码方案,但都以“0x”开头,表明它是一个以太坊地址。
以太坊地址(标准格式)
这是最常见的地址格式,由40个十六进制字符组成,前面加上0x。
- 格式:
0x+ 40个十六进制字符(0x742d35Cc6634C0532925a3b844Bc9e7595f8e5a2)。 - 来源:这种地址格式是以太坊虚拟机的标准,它通常是通过对公钥进行Keccak-256哈希运算后,取最后40位得到的,我们之前讨论的外部账户地址就是这种格式。
- 用途:这是所有与以太坊生态交互的标准地址格式,用于钱包转账、DApp交互等。
以太坊名称服务地址(ENS地址)
这是一种更友好、更具可读性的地址表示形式。
- 格式:以
.eth结尾的人类可读名称(vitalik.eth)。 - 来源
