
地址、账户与钱包不是一回事
区块链地址通常是用于接收资产、识别交易对象的一种公开标识,但它不等同于账户、钱包或私钥。钱包是与区块链交互的软件或界面,能够帮助用户管理密钥、查看资产并发起交易;账户则是链上状态或控制关系的抽象;地址是用户在交易中提供给对方的公开信息。不同公链对“地址”的具体定义并不完全相同,因此不能看到一串字符就推断其背后的技术结构。
在以太坊的账户模型中,账户分为外部拥有账户和合约账户。外部拥有账户由密钥对控制,可以主动发起交易;合约账户由部署到链上的代码控制,通常在收到交易或消息调用后按照代码执行操作。两类账户都可以接收、持有或发送以太币和代币,也可以与已部署的智能合约交互。需要注意的是,合约账户没有对应的私钥,其行为取决于合约代码。

公钥、私钥与地址的关系
外部拥有账户依赖公钥和私钥构成的密码学关系。私钥用于对交易或消息进行签名,签名使网络参与者能够验证请求是否由相应控制者发出。公钥可以由私钥推导出来,但通常不能反向从公钥推导出私钥。因此,地址可以公开,私钥却必须严格保密。资产并不是以文件形式存放在钱包里,而是记录在区块链账本中;私钥证明了对相关控制权限的拥有。

在以太坊常见地址形成过程中,公钥经过哈希处理后取特定长度的结果,并加上地址前缀,形成十六进制表示的地址。这个过程说明地址通常是公钥相关信息的派生表示,而不是私钥本身。比特币常见的支付流程也使用私钥、公钥和签名,但地址可以理解为对公钥哈希或脚本条件的编码,编码中还可能包含版本信息和校验信息。因而,以太坊地址和比特币地址虽然都用于收款,却不能互相通用。
以太坊地址相关术语
以太坊账户状态包含若干字段。nonce 可以理解为与账户操作顺序有关的计数值:对外部拥有账户,它表示已发送交易的数量;在合约账户相关语境中,也可用于描述合约创建计数。nonce 参与交易排序和防止同一签名请求被重复执行。balance 表示地址持有的以太币数量,底层计量单位是 wei。
codeHash 用于关联账户在以太坊虚拟机中的代码哈希。外部拥有账户没有合约代码,因此该字段对应空代码的哈希;合约账户则有可执行代码。storageRoot 表示账户存储内容对应的根哈希,用于概括合约存储状态。普通使用者在转账时通常不会直接操作这些字段,但它们解释了区块浏览器为什么能区分普通账户与合约地址,并展示不同的链上状态。
合约地址通常在部署时确定。传统 CREATE 方式会结合创建者地址和相关 nonce 计算地址;CREATE2 则使用创建者地址、由创建者选择的 salt 以及创建代码哈希等信息,因此在满足条件时可以在部署前计算目标地址。这个结论只适用于相应的以太坊合约创建机制,不能直接套用于所有公链或所有合约平台。
比特币地址与交易输入输出
比特币采用 UTXO 模型描述可花费余额。一次交易至少包含输入和输出:输入引用过去交易中的某个输出,输出则规定一笔聪需要满足什么条件才能被花费。尚未被后续输入花费的输出称为 UTXO。钱包显示的余额,本质上可以理解为多个属于该钱包控制范围、且仍未花费的 UTXO 之和。
在典型的 P2PKH 支付中,接收方提供由公钥哈希编码而成的比特币地址。发送方据此创建输出脚本,规定只有能够提供匹配公钥并生成有效签名的一方,才能花费这笔输出。接收方未来花费时,输入会引用原交易的 txid 和输出索引,也就是常见的 vout,并提供签名及公钥等数据来满足原输出脚本的条件。
因此,比特币地址更适合被理解为一组支付条件的便捷表达,而不是一个像以太坊账户那样直接承载全部余额的容器。比较两者时,应先确认公链使用的是账户模型还是 UTXO 模型,再理解余额、交易顺序和签名验证等术语。
常见误区与适用范围
“有地址就有私钥”并不准确。外部拥有账户通常由私钥控制,但合约地址由代码逻辑控制;比特币地址也主要表达可花费条件,不能仅凭地址文本判断实际控制机制。相应地,公开地址通常用于收款和查询,私钥、助记词或其他签名材料则属于控制权限信息。
“钱包里存着币”也是一种便于理解但不够严谨的说法。更准确的表达是,钱包管理访问区块链资产所需的密钥或交互权限,资产状态由网络账本记录。转账是否成功,还要结合签名、余额或可花费输出、交易规则以及网络确认状态判断。
阅读公链地址时,建议先确认三点:地址属于哪条链,采用账户模型还是 UTXO 模型;地址对应普通账户、合约还是脚本条件;后续操作需要哪类签名或授权。这样可以避免把不同公链的地址格式、账户状态和交易结构混为一谈。