区块链的数据结构(一)——区块、链

这篇具有很好参考价值的文章主要介绍了区块链的数据结构(一)——区块、链。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

区块

        区块(block)由区块头(block header)和交易列表(transaction list,tx list)组成,block之间通过block header的hash连接成了一个链表结构。但这个链表不同于普通链表。

1. block header

比特币的block header:

int32_t nVersion;
uint256 hashPrevBlock;
uint256 hashMerkleRoot;
uint32_t nTime;
uint32_t nBits;
uint32_t nNonce;

以太坊的block header:

ParentHash  common.Hash    `json:"parentHash"       gencodec:"required"`
UncleHash   common.Hash    `json:"sha3Uncles"       gencodec:"required"`
Coinbase    common.Address `json:"miner"            gencodec:"required"`
Root        common.Hash    `json:"stateRoot"        gencodec:"required"`
TxHash      common.Hash    `json:"transactionsRoot" gencodec:"required"`
ReceiptHash common.Hash    `json:"receiptsRoot"     gencodec:"required"`
Bloom       Bloom          `json:"logsBloom"        gencodec:"required"`
Difficulty  *big.Int       `json:"difficulty"       gencodec:"required"`
Number      *big.Int       `json:"number"           gencodec:"required"`
GasLimit    uint64         `json:"gasLimit"         gencodec:"required"`
GasUsed     uint64         `json:"gasUsed"          gencodec:"required"`
Time        uint64         `json:"timestamp"        gencodec:"required"`
Extra       []byte         `json:"extraData"        gencodec:"required"`
MixDigest   common.Hash    `json:"mixHash"`
Nonce       BlockNonce     `json:"nonce"`


// BaseFee was added by EIP-1559 and is ignored in legacy headers.
BaseFee *big.Int `json:"baseFeePerGas" rlp:"optional"`
  • hashPrevBlock /ParentHash,上一个block header的hash
  • hashMerkleRoot/TxHash,交易list的hash

TxHash和ParentHash相结合,赋予了区块链不可篡改的特性。

2. block body

区块链 链式数据结构,区块链技术,区块链

  • block body就是交易list,block header通过TxHash指向唯一的交易list
  • 从tx hash list得到TxHash的hash算法叫做默克尔树(Merkle tree),相比其他的hash算法有特殊的性质(可以简洁地证明tx存在其中)

        block header通过ParentHash指向唯一的上个block header,并最终形成一条链。

        例如:一个结构体B里面如果包括了一个指针pa,那这个结构体就可以指向另一个结构体A。一个结构体C里面如果包括了一个指针pb,那这个结构体就可以指向另一个结构体B。以此类推,通过指针,结构体就可以连起来。

区块链 链式数据结构,区块链技术,区块链

        

        而区块链是用哈希指针(hash pointers)代替了普通指针。哈希指针是一个可以指向数据存储位置及位置的数据的哈希值的指针。  

        哈希指针:不仅要存放地址,还要存放这个结构体的哈希值,一般用H表示一个哈希指针。

区块链 链式数据结构,区块链技术,区块链

       这样做的好处是:我们不光可以找到这个结构体的位置,同时还能够检测出这个结构体的内容有没有被篡改,因为我们保存了他的哈希值。

区块链 链式数据结构,区块链技术,区块链

        最前面的区块是系统中产生的第一个区块,叫做创世纪块(genesis block),顺便说一句,比特币的创世区块里,中本聪写了一句话“The Times 03/Jan/2009 Chancellor on brink of second bailout forbanks.”

区块链 链式数据结构,区块链技术,区块链

        最后一个区块是最近产生的区块,每个区块都包含指向前一个区块的哈希指针,最后一个区块也有一个指向它的哈希指针H()保存在系统里。文章来源地址https://www.toymoban.com/news/detail-648283.html

到了这里,关于区块链的数据结构(一)——区块、链的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构】二叉树——链式结构

    目录  一、前置声明 二、二叉树的遍历 2.1 前序、中序以及后序遍历 2.2 层序遍历 三、节点个数以及高度 3.1 节点个数 3.2 叶子节点个数 3.3 第k层节点个数 3.4 二叉树的高度/深度 3.5 查找值为x的节点 四、二叉树的创建和销毁 4.1 构建二叉树 4.2 二叉树销毁 4.3 判断二叉树

    2024年02月16日
    浏览(44)
  • 《区块链原理与技术》学习笔记(五) ——以太坊的交易、共识机制和数据结构

    《区块链原理与技术》学习笔记 第五部分 5. 以太坊交易 5.1 交易内容 5.2 交易费用 5.3 交易的周期 5.4 交易的执行类型 6. 以太坊的共识机制 6.1 解决以太坊分叉:Ghost协议 6.2 新的共识机制:PoS 7. 以太坊挖矿难度调整 7.1 自适应难度调整 7.2 难度炸弹 8. 数据结构与存储 8.1 区块和

    2024年02月12日
    浏览(41)
  • 【数据结构】二叉树链式结构

    🚀write in front🚀 📜所属专栏:初阶数据结构 🛰️博客主页:睿睿的博客主页 🛰️代码仓库:🎉VS2022_C语言仓库 🎡您的点赞、关注、收藏、评论,是对我最大的激励和支持!!! 关注我,关注我,关注我 , 你们将会看到更多的优质内容!!   在之前的二叉树的顺序结

    2024年02月03日
    浏览(39)
  • 数据结构(顺序结构、链式结构、索引结构、散列结构)

    数据结构,就是一种程序设计优化的方法论,研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算, 目的是加快程序的执行速度、减少内存占用的空间 。 数据的逻辑结构指反映数据元素之间的逻辑关系,而与数据的存储无关,是独立于计算

    2024年02月03日
    浏览(80)
  • 【数据结构】二叉树的链式结构

    学习链式二叉树要知道三种遍历方式,便于对二叉树的节点以及左子树和右子树进行操作。 前序遍历:根、左子树、右子树 中序遍历:左子树、根、右子树 后序遍历:左子树、右子树、根 以下图为例: 得到的结果: 前序遍历:1 2 3 4 5 6 中序遍历:3 2 1 5 4 6 后序遍历:3 2

    2024年02月08日
    浏览(52)
  • 数据结构:二叉树的链式结构

    朋友们、伙计们,我们又见面了,本期来给大家解读一下链式二叉树的相关知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! 数据结构与算法专栏 :数据结构与算法 个  人  主  页 :stackY、 C 语 言 专 栏 :C语言:从入门到精通 目录 前言

    2024年02月07日
    浏览(56)
  • 数据结构——二叉树的链式结构

      个人主页 : 日刷百题 系列专栏 : 〖C语言小游戏〗〖Linux〗〖数据结构〗  〖C语言〗 🌎 欢迎各位 → 点赞 👍+ 收藏 ⭐️+ 留言 📝  ​ 这里我们使用先序遍历的思想来创建二叉树,这里的内容对于刚接触二叉树的朋友可能有些难理解,不妨先看完下面的二叉树各种遍历

    2024年02月05日
    浏览(43)
  • 【数据结构】二叉树之链式结构

    🔥 博客主页 : 小羊失眠啦. 🎥 系列专栏 : 《C语言》 《数据结构》 《Linux》 《Cpolar》 ❤️ 感谢大家点赞👍收藏⭐评论✍️ 在学习二叉树各种各样的操作前,我们先来回顾一下二叉树的概念: 二叉树是度不超过2的树,由根结点和左右2个子树组成,每个子树也可以看作

    2024年02月04日
    浏览(43)
  • 十、数据结构——链式队列

    一、链式队列的定义 二、链式队列的实现 三、链式队列的基本操作 ①初始化 ②判空 ③入队 ④出队 ⑤获取长度 ⑥打印 四、循环队列的应用 五、总结 六、全部代码 七、结果 在数据结构中,队列(Queue)是一种常见的线性数据结构,遵循先进先出(First In First Out,FIFO)的原

    2024年02月07日
    浏览(31)
  • 数据结构:链式栈

    stack.h stack.c mian.c 结果

    2024年01月19日
    浏览(15)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包