区块链研习社区块链大学区块链

《锋哥论道区块链》之五区块链2.0之以太坊--世界状态(worl

2019-04-29  本文已影响8人  7dfc697cf7a9

在比特币网络中,并没有“账户余额”的概念。所谓的账户的余额,其实是所有UTXO的相加。在任何一笔花费中,不是从账户余额花出去的,而是花费的UTXO;并且UTXO是不可分割的,1个UTXO有且仅可能被花费1次。但是以太坊中并没有这个概念,以太坊中引入了世界状态(world state)概念。
3.1.1世界状态(world state)
在以太坊系统中,世界状态(world state)是由账户(account)和状态转换(state transition)构成。世界状态(world state)就是整个以太坊系统中所有账户当前状态,一个{(key1,value1),(key2,value3)……(keyn,valuen)}集合,key对应着账户20byte的地址;value对应着账户中的(nonce,balance,codehash,storageroot).在以太坊区块头中stateroot字段就是指向世界状态(world state),stateroot字段是一个以MPT方式组织的根哈希值,在MPT中每一个叶子都对应着一组上述(key,value)。
3.1.2账户(account)
(1)以太坊两类账号:外部拥有账户和合约账户
在以太坊中,每一个账户(account)都有一个20byte的地址。以太坊账户通常分为两种类型:外部拥有账户(EOA)和合约账户(CA)。外部拥有账户由私钥控制且没有任何代码;合约账户由合约代码控制。

外部拥有账户 VS 合约账户
1)外部拥有账户可以创建和签名一笔交易,并发送消息给另一个外部拥有账户或合约账户。
2)在两个外部拥有账户之间传送的消息只是一个简单的价值转移。但是从外部拥有账户到合约账户的消息会激活合约账户的代码,允许它执行各种动作。(比如转移代币,写入内部存储,挖出一个新代币,执行一些运算,创建一个新的合约等等)。
3)不像外部拥有账户,合约账户不可以自己发起一个交易。相反,合约账户只有在接收到一个交易之后(从一个外部拥有账户或另一个合约账户接),为了响应此交易而触发一个交易。
因此,在以太坊上任何的动作,总是被外部拥有账户触发的交易所发动的。

(2)账户(account)组成
以太坊账户由四个组成部分,不论账户类型是什么,都存在这四个组成部分:
1)nonce:是一个计数器,用于确保每一笔交易仅能被处理一次。如果账户是一个外部拥有账户,nonce代表从此账户地址发送的交易序号。如果账户是一个合约账户,nonce代表此账户创建的合约序号
2)balance: 账户目前拥有的以太币余额。1Ether=10^18Wei。
3)codeHash:此账户EVM(以太坊虚拟机,后面细说)代码的hash值。对于合约账户,合约代码被hash后的哈希值作为codeHash保存。对于外部拥有账户,因为不包含代码,所以codeHash域是一个空字符串的Hash值
4)storageRoot: Merkle Patricia tries(MPT)的根节点Hash值。Merkle Patricia tries(MPT)会将此账户存储内容的Hash值进行编码,默认是空值

3.1.3状态转换(state transition)
账户之间转移价值和信息的状态转换

上一篇下一篇

猜你喜欢

热点阅读