• 【区块链整理】四、区块链数据结构


    哈希指针

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

    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----------------------------------------
  • 相关阅读:
    iphone中button按钮显示为圆形解决
    获得URL含有中文出现乱码解决
    shell脚本检测监控mysql的CPU占用率
    centos6.x硬件信息统计脚本
    Linux下模拟多线程的并发并发shell脚本
    CentOS目录结构超详细版
    Centos 下搭建FTP上传下载服务器
    CentOS下输入输出重定向
    Centos时间查看修改命令date详解
    Shell脚本之awk详解
  • 原文地址:https://www.cnblogs.com/xsmile/p/14759278.html
Copyright © 2020-2023  润新知