以太坊和比特币在账户实现方式上的区别
阿牛哥 Lv4

《到底什么是UTXO?》里,阿牛哥讲解了比特币的账户实现方式——UTXO。作为仅次于比特币的第二大数字货币,以太坊没有采用UTXO模式,而是使用了传统的账户模式。

比特币和以太坊各自选择了不同的账户实现方式。为什么会有这个差异呢?都用账户或者都用UTXO不行吗?本文将做一个简单的分析。

以太坊账户

以太坊记录用户资产的方式和银行的记账方式类似。对于每一个账户地址,区块链中都有记录相应的余额,很直观。

以太坊的账户分两种,分别是

  1. Externally Owned Accounts

即“外部账户”,也可以称为普通账户,对于我们普通的持币者来说,ETH就是存放在普通账户里的,比如这样的地址:0x6f24948722499d12C38CD1f720fd77De97aC3b97。

在各种PC端和手机端app以及交易所钱包中的账户都是普通账户。作为例子,可以参考用官方的geth离线创建账户

  1. Contract Accounts

合约账户,即智能合约所在的账户。

没错,在以太坊中,智能合约也被抽象成了账户。所谓智能合约是以太坊网络上的自动化程序,智能合约发布后,会获得一个跟普通账户地址相仿的0x开头的地址。

与普通账户不同的是:合约账户中除了包含余额外还有可执行的代码,一旦合约被触发,将会自动执行,无法反悔,可以类比成在现实世界中的履约操作,“智能合约”也因此得名。

以太坊账户模式和比特币UTXO模式的区别

在UTXO模式下,账户余额不是直接存储在区块链中的,为了获得一个账户的余额,客户端需要从历史交易数据中计算出某个地址所拥有的比特币的数量。

而以太坊的记账方式跟银行相似,户头里是直接记录着余额的,不需要从历史中获取。

账户模式和UTXO模式的优缺点

  • UTXO中的地址会变化,而以太坊的账户地址是固定的,一旦生成则无法改变,而比特币每次交易地址都可以不同,因此UTXO有更好的隐私性。

  • 以太坊支持智能合约,如果智能合约中要处理的地址像比特币那样变来变去的话,无疑会增加开发智能合约的复杂性,对Dapp应用开发而言,固定地址更加友好。

  • 以太坊交易执行更加高效,执行转账时,UTXO需要从历史中导出余额,而以太坊的账户数据里直接存储着余额。

  • 安全性方面:账户模式天然避免了双花攻击,但是可能面临重放攻击,为了防止重放攻击,在ETH转账时需要指定一个序号,这就是nonce参数的来历。

  • 账户模式天然不适合做多对多交易,以太坊至今的交易只能从一个地址转到另一个地址,而UTXO则可以实现多个地址到多个地址的交易。