磨链(mochain)社区分享

以太坊账户

2018-05-07  本文已影响55人  磨链社区

以太坊本质

作者-磨链社区出品

以太坊的本质就是一个基于交易的状态机(transaction-based state machine)。在计算机科学中,状态机是指可以读取一系列的输入,然后根据这些输入,会转换成一个新的状态出来的东西。

以太坊账户

以太坊的全局“共享状态”是有很多小对象(账户)来组成的,这些账户可以通过消息传递架构来与对方进行交互。

每个账户都有一个与之关联的状态(state)和一个20字节的地址(address)。

以太坊有两种类型的账户:

外部账户

外部账户没有代码,可以通过创建和签名一笔交易从一个外部账户发送消息。

合约账户

与外部拥有的账户不同,合约账户不能自行发起新的交易,合约帐户只能触发交易以响应其他交易。每当合约账户收到一条消息,合约内部的代码就会被激活,允许它对内部存储进行读取和写入,和发送其它消息或者创建合约。

外部账户与合约账户的比较:

一个外部拥有账户可以通过创建和用自己的私钥来对交易进行签名,来发送消息给另一个外部拥有账户或合约账户。

在两个外部拥有账户之间传送的消息只是一个简单的价值转移。

从外部拥有账户到合约账户的消息会激活合约账户的代码,允许它执行各种动作。

不像外部拥有账户,合约账户不可以自己发起一个交易。相反,合约账户只有在接收到一个交易之后(从一个外部拥有账户或另一个合约账户接),为了响应此交易而触发一个交易。

因此,在以太坊上任何的动作,总是被外部控制账户触发的交易所发动的。

账户状态

以太坊的账户包含四个部分:

nonce:用于确定每笔交易只能被处理一次的随机数。如果账户是一个外部拥有账户,nonce代表从此账户地址发送的交易序号;如果账户是一个合约账户,nonce代表此账户创建的合约序号

balance:账户目前的以太币余额

storageRoot:Merkle树的根节点Hash值。Merkle 树会将此账户存储内容的Hash值进行编码,默认是空值

codeHash:此账户EVM代码的hash值,对于合约账户,就是被Hash的代码并作为codeHash保存;对于外部拥有账户,codeHash域是一个空字符串的Hash值

世界状态

以太坊的全局状态由账户地址和账户状态的映射组成,这个映射被保存在一个叫做Merkle Patricia树的数据结构中。

Merkle Patricia树由大量叶子节点、一系列中间节点、一个根节点组成。

树的底部包含了源数据的大量叶子节点

中间节点是两个子节点的Hash值

根节点同样是两个子节点的Hash值,代表着整棵树

这棵树要求存在里面的值(value)都有一个对应的key。从树的根节点开始,key会告诉你顺着哪个子节点可以获得对应的值,这个值存在叶子节点。在以太坊中,key/value是地址和与地址相关联的账户之间状态的映射。

关于磨链和相关合作

磨链”---取磨炼之意,旨在普及区块链技术,磨炼技术,更好投身区块链行业。有兴趣一块琢磨区块链技术,联系笔者微信(jackyjin09)。

磨链社区是一个纯粹的技术社区,欢迎相关技术合作,在不违反原则的前提下,积极参与合作。

你可以在这里找到我们:

磨链社区公众号:

上一篇 下一篇

猜你喜欢

热点阅读