【区块链笔记】ETH_账户(01)

Page content

这篇文章简单的整理了以太坊账户相关的内容。

1.ETH账户

比特币是基于交易的账本transaction-based ledger,
而以太坊是基于账户的账本account-based ledger。
计算余额的时候,比特币是需要通过UTXO算出来的。
而以太坊是直接查询账户余额即可。

重放攻击(replay attack)

比特币是需要防止双花攻击double spending attack。 是花钱方恶意的攻击。
而以太坊的重放攻击是收钱方恶意的想重复的收钱的攻击。
想防止这种攻击也不难,给每个账户添加nonce,给每次交易的次数即可。

A -> B  
nonce = 21
signed by A

2.账户类型

外部账户:类似于BTC系统中公私钥对。存在账户余额balance和计数器nonce 合约账户:并非通过公私钥对控制,指智能合约的账户地址。(不能主动发起交易,只能接收到外部账户调用后才能发起交易或调用其他合约账户)
其除了balance和nonce之外还有code(代码)、storage(相关状态-存储)

在以太坊账户中,我们维护以下几个状态:

nonce:外部账户为交易次数,合约账户为创建的合约序号。
balance:此地址的以太币余额。
storageRoot:账户存储内容组成的默克尔树根的哈希值。
codeHash:账户EVM代码的hash值。合约账户即为合约代码的哈希值,外部账户为空字符串的哈希值。

3.账户模型的有点

UTXO优点

  • 私密性比较强,理论上可以为每一笔输出设置一个地址。
  • 无需维护余额等状态值。
  • UTXO是独立数据记录,可以通过并行极大的提升区块链交易验证速度。
  • 无需关心事务问题,只需要关心输出脚本即可。
  • UTXO无法分割,每次交易都需要多个输出,分别为支出与找零。

账户模型优点

  • 可以快速获取账户的余额,而比特币需要将指定地址所拥有的所有UTXO中的未花费交易总值整合。
  • 节省空间,因为每笔交易只有一个输入一个输出。
  • 可以较容易的实现图灵完备的智能合约。

欢迎大家的意见和交流

email: li_mingxie@163.com