在以太坊生态系统中,地址(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)。
  • 来源:ENS是以太坊上的一个去中心化命名系统,它允许用户将复杂的0x地址映射到一个易于记忆的域名上。
  • 工作原理:当你向vitalik.eth发送资产时,ENS系统会通过一个解析过程,将这个域名反向解析回其背后绑定的标准0x地址,然后交易在区块链上实际执行。随机配图