
先区分钱包与账户
数字钱包不等同于账户,也不等同于链上资产。钱包通常是应用、程序或设备,用来生成或管理密钥、展示账户信息、创建交易并在需要时完成签名。账户则是区块链账本中的身份或状态记录,资产余额和交易状态由网络账本记录。更准确地说,钱包是访问和操作账户的工具,私钥是证明控制权的重要凭据。
在以太坊语境中,钱包可以连接由私钥控制的外部拥有账户,也可以与智能合约账户交互。比特币资料则把钱包程序和钱包文件分开讨论:程序负责生成密钥、监测收款、创建和签名交易,钱包文件主要保存私钥及可能相关的交易信息。因此,不同区块链对“钱包”的具体实现可能不同,但“工具负责操作,账本负责记录”是有助于理解的基本框架。

公钥、私钥与地址
公钥和私钥是一对密码学密钥。私钥用于生成签名,签名可以让网络验证交易确实由相应控制者发起;公钥可以用于验证签名或推导出用于接收资产的地址。私钥不能被当作普通密码看待,因为掌握它通常意味着能够代表相应账户签署操作。公钥和地址适合公开使用,私钥则必须严格保密。

地址是面向使用者的标识,不是资产本身,也通常不是私钥的可逆形式。以太坊外部拥有账户的地址由公钥经过特定哈希处理得到;比特币则存在多种地址和脚本表达方式,部分场景下对外分发的是公钥哈希或脚本哈希。由此可见,地址格式、长度和编码规则属于具体协议的实现细节,不能简单套用到所有区块链。
以太坊的两类账户
以太坊资料将账户分为外部拥有账户和合约账户。外部拥有账户由密钥对控制,可以主动发起交易;合约账户由部署到网络中的代码控制,通常是在收到外部交易或消息调用后执行逻辑。两类账户都可以接收、持有和发送以太币及代币,也都可以与已部署的智能合约交互,但控制方式不同。
nonce、balance、codeHash 和 storageRoot 是理解以太坊账户状态时常见的术语。nonce 可理解为与账户操作顺序相关的计数值,有助于防止同一签名交易被重复执行;balance 表示账户记录的余额;codeHash 用于关联合约代码,外部拥有账户没有可执行的合约代码;storageRoot 则关联合约存储数据的状态摘要。普通使用者不必记住底层编码,但应知道这些字段描述的是链上账户状态,而不是钱包应用本身。
比特币钱包的工作分工
比特币钱包资料把钱包系统拆分为密钥或地址分发、交易签名和网络交互等功能。全功能钱包通常在一个程序中完成这些工作:生成密钥、提供收款标识、监测链上记录、创建交易、签名并广播。这样的组合便于使用,但私钥可能保存在联网设备上,设备遭到入侵时会增加密钥暴露风险。
签名专用钱包把签名工作放在较独立的环境中,联网程序负责获取链上信息和准备未签名交易,签名设备审核交易细节后再签名,联网程序随后广播已签名交易。离线钱包和硬件钱包都属于这一思路的常见形式,但它们的安全性取决于设备、软件、备份流程以及使用者是否认真核对交易内容,不能仅凭名称作绝对判断。
常见问题与适用范围
“资产是在钱包里吗?”通常不准确。资产状态由区块链账本记录,钱包主要保存或调用控制账户所需的密钥,并读取网络数据。丢失钱包应用不一定等于丢失账户,但如果私钥或恢复信息无法找回,控制权可能无法恢复。
“有地址就能花费资产吗?”不能。地址主要用于识别收款位置,花费或执行受控操作通常还需要满足协议规定的签名或脚本条件。不同链的交易模型和验证规则不同,不能把以太坊账户、比特币未花费输出以及其他网络的账户模型混为一谈。
“合约账户也有私钥吗?”在以太坊的基本账户模型中,合约账户由代码逻辑控制,并不以一组对应私钥作为控制方式。具体合约是否允许某些人执行操作,要看合约代码及其权限设计。阅读钱包或协议文档时,应先确认讨论的是哪条区块链、哪种账户模型和哪类签名流程。