-
BTC和ETH的账户模型:
- BTC系统是基于交易
transaction-based
的账本,系统中未显式记录账户有多少钱,只能通过UTXO进⾏推算:- A转给B钱,需要说明币的来源
- 账户中的钱在花的时候,必须⼀次性全部花出去
- 为了避免交易时将过多交易费交给矿工,往往需要将交易的余额转移另⼀账户(即打一枪换一地,这有利于安全性,但和直觉不合)
- ETH系统采⽤了基于账户的模型,与现实中银⾏账户相似:
- 系统中显式记录每个账户以太币的剩余数量,不需要每次全部转账
- 转账是否合法只需要查看转账者账户中以太币是否⾜够即可,天然防范双花攻击
double spending
- 方便智能合约的实行(因为合约的参与者需要一个稳定的身份)
- 为避免重放攻击
replay attack
,需要添加一个计数器nonce
- BTC系统是基于交易
-
以太坊系统中存在两类账户:
- 外部账户
external owned account
- 类似于BTC系统中公私钥对
- 包含域:
- 账户余额balance
- 计数器nonce
- 合约账户
smart contract account
- 不通过公私钥对控制
- 不能主动发起交易
- 只能接收外部账户调⽤,之后才能发起交易或调⽤其它合约账户
- 包含code(代码)、storage(相关状态的存储)
- 创建合约会返回⼀个地址,通过地址就可以对其调⽤
- 调⽤过程中,代码不变但状态会发⽣变化
- 外部账户
-
为什么ETH设计了基于账户的模型⽽不是沿袭BTC系统?
- 以太坊⽀持智能合约,对于合约来说,要求参与者有⽐较稳定的身份
- 有⼈提出使⽤合约实现⼀些⾦融衍⽣品 (
financial derivative
),例如往合约⾥投钱,预测期货未来价格⾛势,如果预测准确则返钱,如果投完钱账户地址变了,就没法返利了