北京大学肖臻老师《区块链技术与应用》ETH笔记 - 2.0 ETH账户篇

2.0 ETH账户篇

BTC系统是基于交易的账本,系统中并未显示记录账户有多少钱,只能通过UTXO进行推算。这种方式的好处是隐私保护比较好,你有多少钱,自己可能都说不清,别人就更不知道了。但实际中,使用起来较为别扭。

A转给B钱的时候,需要说明币的来源。实际中只需要存钱说明来源,花钱则不用。此外,账户中的钱在花的时候,必须一次性全部花出去。

如图1,B收到A的10个BTC,他想要给C3个BTC,如果按照1中方式,其余7个比特币会以交易费的形式给挖出区块的矿工。

因此,为了避免这种情况,所以采用2中方式,将3个BTC转给C,将剩余7个BTC转到B的另一账户D上面。很多比特币钱包就采用这种方式,每次转账就生成一个自己的新的地址,有利于隐私保护。

以太坊系统则采用了基于账户的模型,与现实中银行账户相似。系统中显示记录每个账户以太币的数量,转账是否合法只需要查看转账者账户中以太币是否足够即可,同时也不需要每次全部转账。同时,这也也天然地防范了双花攻击。因为花钱的时候不需要像比特币一样说明币的来源,如果你花两次就扣两次钱就好了。

当然,以太坊发这种模式也存在缺点,这种模式存在重放攻击(reply attack)的缺陷。A向B转账,过一段时间,B将A的交易重新发布,从而导致A账户被扣钱两次。双花攻击和重放攻击是对称的,双花攻击说的是花钱的人不诚实,花过的钱继续花一次,重放攻击说的是收钱的人不诚实,收到过的钱再继续收一次。在比特币中会有重放攻击吗,不会,因为收到过的交易信息再广播一次是很显然的double spending。

为了防范重放攻击,给账户交易添加计数器记录该账户有史以来一共发布过多少个交易,转账时候将转账次数(nonce)成为交易内容的一部分,一起包含进去都是受到发布交易者的签名保护的。 系统中全节点维护账户余额和该计数器的交易数,从而防止本地篡改余额或进行重放攻击。如果要进行重放攻击,B把A的第221笔交易再广播出去,那全节点对比维护的nonce值发现221笔交易已经完成过了,就不会再执行这笔交易。

以太坊系统中存在两类账户:外部账户合约账户

  1. 外部账户:类似于BTC系统中公私钥对。掌握某个私钥就拥有账户控制权。存在账户余额balance和计数器nonce。

  2. 合约账户:并非通过公私钥对控制。(不能主动发起交易,只能接收到外部账户调用后才能发起交易或调用其他合约账户)其除了balance和nonce之外还有code(代码)、storage(相关状态-存储)、每个变量的取值。

创建合约时候会返回一个地址,就可以对其调用。调用过程中,代码不变但状态会发生改变。

为什么要做以太坊,更换为基于账户的模型而不是沿袭BTC系统?

比特币基于交易的模型隐私保护比较好,每次交易支持更换账户,但以太坊是为了支持智能合约,对于合约来说,要求参与方的身份较为稳定。比如,智能合约用于金融衍生品期货,那对于账户来说,不能身份突然变掉了吧,对于合约账户来说,如果地址变了,那投入到原来合约的钱也就找没用了。

猜你喜欢

转载自blog.csdn.net/qq_40503872/article/details/124198597