zoukankan      html  css  js  c++  java
  • 【区块链整理】四、区块链数据结构

    哈希指针

    对前一个区块做哈希计算得到的哈希值,包含在当前区块当中作为引用。

    Merkle Tree 和 Merkle Patricia Tree 

    Merkle Tree 中,叶子节点为保存的数据值。形成过程如下:

    1. 叶子节点经过哈希计算得到哈希值。
    2. 将哈希值两两结合计算哈希值。
    3. 重复步骤2,直到得到 Root 节点。

    了解 Merkle Patricia Tree 之前,除了了解 Merkle Tree 以外,还需要知道 Trie (字典树、前缀树)以及 Patricia Tree 相关知识。

    Merkle Patricia Tree 中包含三种节点:扩展节点、分支节点、叶节点。官方示意图如下:

    Merkle Tree 应用场景

    Merkle Tree 应用最多的地方是数据的比对和完整性校验。如 TX4 值发生了改变:

    1. 首先对根节点 Root 进行对比,不一致即表示数据发生篡改行为。

    2. 分别对 H12、H34 进行比较,此时 H34 不一致。

    3. 分别对 H3、H4 进行对比,最终发现 H4 哈希值不一致。

    简略的区块链结构示意图

    区块头包含的内容及意义

    Previous Hash:前一区块头哈希值。

    Version:当前区块版本。

    Target:挖矿难度。

    Nounce:比特币中为随机数,用来不断尝试进而得到满足挖矿难度的哈希值;以太坊中存在不同的结构上,包含 nounce 含义不同。状态数中外部账户情况下代表为此账户地址发送的交易序号,合约账户表示为此账户创建的合约序号;交易树中代表交易者发送交易数的计数;

    以太坊中包含的三种 MPT 结构树

    1. 状态树

    存储整个区块链当前所有账户的状态数据

    2. 交易树

    存储在本区块中发生的所有交易的数据。

    3. 收据树

    存储在本区块中发生的所有收据的信息。包括:区块序号、区块哈希值、交易哈希值、当前交易使用的 Gas、当前交易执行完当前区块使用的累计 Gas、执行交易创建的日志等。

    以太坊账户状态包括哪些内容

    nounce:外部账户情况下代表为此账户地址发送的交易序号,合约账户表示为此账户创建的合约序号。

    balance:此地址拥有的以太币数量。

    storageRoot:Merkle Tree 根节点哈希值。默认值为空。

    codeHash:此账户以太坊虚拟机代码的哈希值。对于合约账户,就是被哈希的代码作为 codeHash 保存。外部账户来说,是空字符串的哈希值。

    比特币交易过程

    参考 【区块链整理】二、比特币交易脚本 中 脚本执行步骤 内容。

    参考资料:

    《区块链原理及技术应用》——赵其刚

    ----------------------------------------声明----------------------------------------
    作者:xsmile
    仅自己学习过程技术总结,如有哪里有误的地方,欢迎指正。
    原创不易,如需转载,请注明出处及地址 www.cnblogs.com/xsmile
    ----------------------------------------end----------------------------------------
  • 相关阅读:
    python中enumerate用法
    python中实现列表元素的永久反转和临时反转
    python中利用循环结构求最大值、最小值、统计元素次数
    python中实现列表中指定元素保留唯一
    c语言中if嵌套
    python中判断列表是否为空
    c语言中避免else悬挂
    python中if条件分支
    ????
    面向对象编程:Java中的抽象数据类型
  • 原文地址:https://www.cnblogs.com/xsmile/p/14759278.html
Copyright © 2011-2022 走看看