纯干货|深度解析以太坊(2):以太坊账户

相关阅读

纯干货|深度解析以太坊(1):以太坊模型

以太坊的全球“共享状态”是由许多能够通过消息传递框架相互作用的小型对象(账户)组成的。每个帐户都有一个相关的状态和一个20字节的地址。以太坊的地址是一个160位的标识符,用于识别任何帐户。

有两种类型的帐户:

1.外部拥有的帐户,由私钥控制,并且没有与之相关的代码。

2.合约帐户,由合约代码控制,并有与之相关的代码。


外部拥有账户与合约账户

了解外部账户和合约账户之间的根本区别很重要。外部拥有的帐户可以通过使用其私钥创建和签署交易,将消息发送到其他外部拥有的帐户或其他合约帐户。两个外部拥有账户之间的消息只是一个价值转移。但是从外部拥有账户到合约账户的消息会激活合约账户的代码,允许它执行各种操作(例如转移Token,写入内部存储,创建新的Token,执行一些计算,创建新的合约等)。

与外部拥有的账户不同,合约账户不能自行发起新的交易。相反,合约帐户只能触发交易以响应其他交易(从外部拥有的帐户或其他合约帐户)。我们将在“ 交易和消息 ”部分中详细了解合约到合约的通信。

因此,以太坊区块链上发生的任何操作都始终由外部受控帐户触发的交易处理。


账户状态

不管账户的类型如何,账户状态由四个部分组成:

  • nonce:如果账户是一个外部拥有账户,nonce代表从此账户地址发送的交易序号。如果账户是一个合约账户,nonce代表此账户创建的合约序号

  • balance: 此地址拥有Wei的数量。1Ether=10^18Wei

  • storageRoot: Merkle Patricia树的根节点Hash值(我们后面在解释Merkle tree)。Merkle tree会将此账户存储内容的Hash值进行编码,默认是空值

  • codeHash:此账户EVM(以太坊虚拟机,后面细说)代码的hash值。对于合约账户,就是被Hash的代码并作为codeHash保存。对于外部拥有账户,codeHash域是一个空字符串的Hash值


  • 全局状态

    我们知道以太坊的全局状态由帐户地址和帐户状态之间的映射组成。这个映射存储在一个称为Merkle Patricia树的数据结构中。

    Merkle Tree(或者也被称为“Merkle trie”)是由一组节点组成一种二叉树,这些节点包括:

  • 包含底层数据的树底部的大量叶子节点;

  • 一组中间节点,其中每个节点是其两个子节点的散列;

  • 单个根节点,也是由其两个子节点的Hash形成的,代表树的顶部;

  • 树底部的数据是通过将我们想要存储的数据分成chunks块来生成的,然后将chunks分成buckets,然后取每个buckets的hash值并重复相同的过程,直到剩余的hash总数变为只有一个:根hash。

    树需要有一个存储在里面的每个值的键(key)。从树的根节点开始,关键字应该告诉你哪个子节点要获取相应的值,该值存储在叶节点中。在以太坊的情况下,状态树的键/值映射位于地址及其相关帐户之间,包括每个帐户的balance,nonce,codeHash和storageRoot(其中storageRoot本身就是树)。

    同样的树结构也用来存储交易和收据。更具体的说,每个块都有一个头(header),保存了三个不同Merkle trie结构的根节点的Hash,包括:

  • 状态树

  • 交易树

  • 收据树

  • 在Merkle tries中有效地存储所有信息的能力在以太坊我们称之为“轻客户端”或“轻节点”。请记住,区块链由一堆节点维护。一般来说,有两种类型的节点:全节点和轻节点。

    全节点通过下载整条链来进行同步,从创世纪块到当前块,执行包含在其中的所有交易。通常情况下,矿工存储全节点,因为他们在挖矿过程中需要全节点。也可以在不执行每个交易的情况下下载全节点。无论如何,一个全节点都包含整个链。

    但是,除非一个节点需要执行每个交易或者轻松查询历史数据,否则实际上不需要存储整个链。这是轻节点概念的来源。轻型节点不是下载并存储完整链并执行所有交易,而是仅从起始块到当前块的头,而不执行任何交易或检索任何关联的状态。由于轻节点可以访问块的头,而头中包含了3个tries的Hash,所有轻节点依然可以很容易生成和接收关于交易、事件、余额等可验证的答案。

    这样做的原因是因为Merkle tree中的hash向上传播 - 如果恶意用户试图将假交易交换到Merkle tree的底部,这种更改将导致上面节点的散列发生变化,这将改变以上的节点的散列,等等,直到它最终改变树的根。

    任何想要验证数据的节点都可以使用“Merkle证明”来实现。Merkle证明包括:

    1.要验证的数据块和散列

    2.树的根hash

    3.一个“分支”(从 chunk到根这个路径上所有的hash值)

    任何读取证明的人都可以验证该分支的hash在树中一直保持一致,因此给定的块实际上是在树中的那个位置。


    总之,使用Merkle Patricia树的好处是,这个结构的根节点在密码上依赖于存储在树中的数据,所以根节点的散列可以用作这个数据的安全身份。由于块头包含状态,交易和收据树的根hash,所以任何节点都可以验证以太坊状态的一小部分,而不需要存储整个状态,这个状态的大小可能是无限的。

    布尼区块链

    拥抱区块链未来

    打造最有价值的区块链学习&交流社群

    最后编辑于
    ©著作权归作者所有,转载或内容合作请联系作者
    • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
      沈念sama阅读 216,544评论 6 501
    • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
      沈念sama阅读 92,430评论 3 392
    • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
      开封第一讲书人阅读 162,764评论 0 353
    • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
      开封第一讲书人阅读 58,193评论 1 292
    • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
      茶点故事阅读 67,216评论 6 388
    • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
      开封第一讲书人阅读 51,182评论 1 299
    • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
      沈念sama阅读 40,063评论 3 418
    • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
      开封第一讲书人阅读 38,917评论 0 274
    • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
      沈念sama阅读 45,329评论 1 310
    • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
      茶点故事阅读 37,543评论 2 332
    • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
      茶点故事阅读 39,722评论 1 348
    • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
      沈念sama阅读 35,425评论 5 343
    • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
      茶点故事阅读 41,019评论 3 326
    • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
      开封第一讲书人阅读 31,671评论 0 22
    • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
      开封第一讲书人阅读 32,825评论 1 269
    • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
      沈念sama阅读 47,729评论 2 368
    • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
      茶点故事阅读 44,614评论 2 353

    推荐阅读更多精彩内容