在区块链的浩瀚星海中,比特币和以太坊无疑是最耀眼的两颗双子星,它们共同开创了去中心化应用的时代,在它们的核心深处,却潜藏着两种截然不同的世界观——这主要体现在它们对账户和资产所有权的认知上,理解以太坊的“账户模型”与比特币的“UTxo模型”之间的差异,是深入把握这两个区块链系统设计哲学的关键。
UTxo模型:比特币的“未花费交易输出”哲学
要理解以太坊,我们首先要了解它的参照系——UTxo(Unspent Transaction Output)模型,UTxo是比特币(以及许多其他加密货币)的基石。
UTxo模型将用户的每一笔资金都视为一系列独立的、不可分割的“硬币”或“代币包”,这些“硬币”来自于之前的交易输出,当您想发起一笔新的交易时,您并不是在“移动”您的比特币,而是在“花费”这些未花费的输出,并生成新的输出。
UTxo模型的工作流程可以想象成一个“找零”系统:
- 积累输入: 您的钱包会扫描所有属于您的UTxo,就像您从口袋里掏出各种面值的硬币一样,假设您有两个UTxo:一个是价值0.5 BTC的,另一个是价值0.3 BTC的。
- 创建输出: 您现在想支付0.7 BTC给商家,您需要花费这两个UTxo作为“输入”,总共花费0.8 BTC。
- 找零: 交易系统会创建两个新的“输出”:一个是支付给商家的0.7 BTC,另一个是找零给您自己的0.1 BTC,这个0.1 BTC就是一笔新的UTxo,等待您在未来的交易中花费。
UTxo模型的核心特点:
- 匿名性: 交易只与UTxo相关联,而不是与某个固定的身份绑定,您的地址只是接收UTxo的容器,每次交易都可以使用新的地址,增强隐私。
- 并行处理潜力: 由于交易之间只依赖于UTxo的集合,而不依赖于账户状态的连续性,理论上可以更容易地进行并行计算,提高网络效率。
- 不可分割性: 您不能只花费一个UTxo中的一部分,如果一个UTxo价值1 BTC,而您只想花0.1 BTC,您必须将其全部花费,然后获得一个0.1 BTC的输出和一个0.9 BTC的找零输出。
账户模型:以太坊的“银行账户”哲学
与比特币的“一堆硬币”不同,以太坊采用了更接近传统银行系统的账户模型,在这个模型中,每个用户都拥有一个或多个账户,每个账户都有一个固定的地址,并维护着一个内部状态。
账户模型的核心是“状态”的改变:
- 账户类型: 以太坊主要有两种账户:
- 外部账户: 由用户通过私钥控制,这是我们最常说的“钱包地址”,它没有关联的代码,只能发起交易。
- 合约账户: 由代码控制,其行为由外部账户发起的交易触发,智能合约就部署在合约账户中。
- 账户状态: 每个账户都存储着一个状态,包括:
- 余额: 账户中持有的以太币数量。
- Nonce: 一个递增的数字,用于防止“重放攻击”,确保交易的顺序性。
- 合约代码(仅合约账户): 控制该账户行为的代码。
- 存储(仅合约账户): 合约可以持久化存储的数据。
- 交易的本质: 在以太坊上发起交易,本质上就是修改一个或多个账户的状态,当您从地址A向地址B发送1 ETH时,这笔交易会直接修改以太坊世界状态中两个账户的余额:地址A的余额减少1 ETH,地址B的余额增加1 ETH。
账户模型的核心特点:
- 状态驱动: 以太坊是一个“状态机”,整个网络的状态就是所有账户状态的集合,交易就是驱动状态机转换的指令。
