ETH-账户
约 1041 字大约 3 分钟
2021-10-06
相关术语
tansaction-based ledger 基于交易的账本
account-based ledger 基于账户的账本
double spending attack 双花攻击
replay attck 重放攻击
externally owned account 外部账户
smart contract account 合约账户
比特币中用的是基于交易的账本tansaction-based ledger
,这种模式下系统中并没有显示的记录每个账户有多少钱,只能基于交易推算,这种模式的好处隐私保护比较好,你有多少钱,可能自己都搞不清楚,使用时比较别扭,跟日常体验不太一样。
B转给C的3个比特币的交易,如果不进行转给B`的操作,另外的3个比特币就会变成交易费给到矿工了,现在的钱包很多都带有自动转余额到新转换的功能。
以太坊采用的是基于账户的账本account-based ledger
,这种模式跟日常银行的使用场景比较相似的。系统中会显示的记录每个账户上有多少以太币。
以太坊的交易就比较简单,不用说明币的来源,只需要检查账户上是否足够。也不需要把余额转出到新账户,不用管就行。
这样做就感觉比较自然。之前提到过比特币面临的主要挑战就是避免double spending attack
,而以太坊对于double spending
有天然的防御作用,因为反正不需要关注币的来源,每花一次钱就从账户余额上扣掉,要花两次就扣俩次就行了。
虽然以太坊对double spending attack
有天然的防御,但是与之对应的有replay attck
重放攻击。
比如说,A给B转账,一个成功的交易已经加入到了区块链。但是B节点是有恶意的,过了段时间B又把这个交易重新发布了一遍。就是replay attack
。
这两个是对称的,double spending attack
,是花钱的人不诚实,以前花过的钱想要再花一遍;而replay attack
是收钱的人不诚实,别人已经给他转过钱了,他想让别人再转一遍。
以太坊是怎么防范replay attack
呢,其实很简单,加了一个计数器,交易次数,记录一下这个账户有史以来一共发布过多少个交易,然后转账的时候,这个交易次数要成为交易的一部分一起包含进去,都是受到私钥签名保护的。nonce
每次交易是累加的,全节点是要维护的。
以太坊中有俩类账户,外部账户externally owned account
,类似于比特币中的账户,用公私钥控制的,本地产生一个公钥私钥对,谁有这个私钥就掌握了这个账户的控制权,有时候也管它叫普通账户。外部账户的状态有balance
账户余额、nonce
(这里其实不是随机数);
第二个是合约账户smart contract account
,不是由公私钥对控制的,除了balance
和nonce
之外,因为一个合约可以调用另外一个合约,也需要nonce来记录调用次数,但是合约账户不能主动发起一个交易。这是以太坊的规定,所有的交易只能由外部账户发起。外部账户发起一个交易如果调用一个合约账户,这个合约可以发送一个message
调用另外一个合约。合约账户还有code
、storage
。
为什么要设计一个新的模型以太坊呢?他是由Vitalik设计的,一个19岁的人。当时创造以太坊的时候,比特币已经很成熟了,有代码可以参考,为什么不用那一套模式呢? 因为智能合约为主的模式,以太坊是希望比较稳定的账户的。希望你也可以自己的加密货币。