ETH-15账户

内容整理自 北京大学肖臻老师《区块链技术与应用》公开课 15-ETH-账户

以太坊和比特币账户模式的不同:

比特币采用基于交易的账本,该模式系统没有显式的记录每个账户有多少钱,想知道有多少钱根据UTXO中的信息推算。该模式隐私保护比较好,但是使用上与日常不一样:1.转账时需要说明币的来源  2.前面的交易中收到的币,在花的时候必须要一次性花出去,不能只花一部分,否则差额就会成为费用,所以剩下的币必须要转回给自己。

以太坊采用基于账户的模型,类似日常的银行账户,系统中显式记录每个账户有多少个以太币。验证交易是否合法只要验证账户中是否有足够的钱即可。 转账时不用说明币的来源。也不用把剩下的钱转回给自己。

好处:

对于double spending有天然的防御,不需要记录币的来源,每花一次钱都会从账户中扣掉,花两次就扣两次。

防范有人发布交易时篡改余额,发布交易的时候不需要说明自己的余额,余额是系统中全节点状态中要保存的,以太坊中重要的数据结构--状态树,就是所有账户的状态组成的一棵树,账户状态里包含的一个重要的域就是balance,这个balance没有办法篡改,如果想改必须是所有的全节点认为该余额是发生了变化,否则其他节点不会认,自己没有办法随便改。

防范replay attack,重放攻击,即收钱的人是恶意的,别人给你转过的钱你想再转一遍。比特币中不会出现该攻击,因为是明显的double spending。
以太坊中,加一个计数器nonce,用来记录交易次数,记录账户有史以来一共发布过多少个交易。转账的时候交易次数要成为交易内容的一部分,一起包含进去,
都是受到交易者签名的保护,因此nonce的值别人无法修改。系统其他节点维护发布者交易的状态,不仅要维护balance,还要维护nonce。

账户类别:

以太坊中有两类账户,一类叫作外部账户externally owned account,类似比特币中的账户,用公私钥控制。本地产生公私钥对,掌握私钥的人掌握账户的控制权,也叫作普通账户,状态有balance和nonce;一类叫作合约账户smart contract account,不是通过公私钥对来控制。除了balance和nonce之外,还有代码code以及相关状态storage,包括每个变量的取值,这些都属于合约账户的一部分。

合约账户也有nonce。一个合约可以调用另一个合约,所以合约账户同样需要nonce来记录调用次数。但是合约账户不能主动发起一个交易,所有交易只能由外部账户发起。外部账户的交易如果调用了合约账户,合约账户可以发送一个message,调用另外一个合约,这是可以的,但是不能自己发起交易。创建合约的时候会返回一个地址,知道该地址就可以调用合约账户,调用过程中storage会发生变化。

为什么要设计一种新的账户系统模型?

以太坊创始人Vitalik创建以太坊的时候,比特币已经有比较成熟的代码可以作为参考。
比特币基于交易的账户模型,对于隐私保护比较好,每次交易可以换一个新的账户。
但是以太坊要支持的是智能合约,合约要求参与者有比较稳定的身份。
这个与日常生活类似,比如生活中签合同,签合同时对方是一个身份,签完之后变了一个身份,找不到了;也可能突然出现一个人说自己是当时签合同的人,只是换了一个身份,都会给合同的执行带来一定的困难。
对于用智能合约实现的金融衍生品financial derivative,比如期权期货,如果投钱的账户投钱之后就变了,到时候没法把钱还回来。
如果自己有隐私保护的需要,也可以创建多个账户,针对不同情况使用不同账户进行不同交易。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章