【区块链笔记】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