前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >bitcoin-03-比特币区块结构

bitcoin-03-比特币区块结构

作者头像
潇洒
发布2023-10-23 08:45:24
4750
发布2023-10-23 08:45:24
举报
文章被收录于专栏:石头岛石头岛

区块结构

区块链开发之前,先了解比特币的区块结构,有利于了解后续比特币的各种数据结构的做用。

本文要介结几个重要概念:

  1. 区块结构
  2. 区块头
  3. 区块体
  4. 区块查看工具

区块

区块是比特币的核心。 当前比特币网络,每10分产一个块。 区块的作用: 比特币最核心的数据结构,包含了交易的重要标识,包括:区块头、区块体、区块大小等数据。

一个完整的区块结构

数据项

字节

字段

说明

Magic NO

4

魔数

常数0xD9B4BEF9

Blocksize

4

区块大小

用字节表示的该字段之后的区块大小

Blockheader

80

区块头

组成区块头的几个字段

Transaction counter

1-9

交易计数器

该区块包含的交易数量,包含coinbase交易

Transactions

不定

交易

记录在区块里的交易信息,使用原生的交易信息格式,并且交易在数据流中的位置必须与Merkle树的叶子节点顺序一致

区块
区块

这里最典型的要数 区块头区块体 了,因为它们通常在学习区块链的时候,比较能说明区块链的重要特性。

另外区块链不看不见摸不着的东西,人往往需要可视化的模型会更有助于理解抽象的概念。

这里介绍一个工具,区块链浏览器: https://blockchain.info/

通过这个浏览器,可以查看区块内的信息。 为什么这个站点可以查看区块信息? 因为区块链的服务,也就是个服务,提供了查询接口,机构或个人,只需要运行区块链服务,在本地运行就可以访问区块链信息,前提是要同步好区块数据。 之前的文章就强调过,鼓励大家运行区块链服务是区块链的特点,币是奖励,算是一种副产物,是被金融机构炒起来的。

区块头

查看区块信息

getblock 00000000000000000000bca6ccc2ef309fd814f80a55b3e08a4212326137d7d2

代码语言:javascript
复制
{
  "hash": "00000000000000000000bca6ccc2ef309fd814f80a55b3e08a4212326137d7d2",
  "confirmations": 30,
  "strippedsize": 884103,
  "size": 1345977,
  "weight": 3998286,
  "height": 681181,
  "version": 536870912,
  "versionHex": "20000000",
  "merkleroot": "574dfd1961a53bb1fd307d7345b2aff6a196cce29a824b9029d454e1f61cfb35",
  "tx": [
    "1a44cb6551af919652eac49d953c50ab2acb1ebdfe7d2b20ed3c1944bd37ac96",
    "3e06d35f7f550068a72991d62dd32281a13e1492867b1c8531a4aa12f591cff8",
    "9d66b3a4b6b683aa4d03d8186d31d33e41e73bd96692cbf33a152b99100b326a",
    "ae6fdde3a16e91d587a5d3c1500d5828a01e69c02b6832cde132111fd90c4760",
    "91a5aa20c0582695a90cfdf4dab5540406c9b78fba4a20f6cd6cb96445d31be5",
    "471ce26f56eb1c164315704b923a1095145256c0e43a77ccd72254265c950b0f",
    "fb56a184da1cff5e8c0cc65c13392c68517713754338f87047bef07c1a43b032",
    "8be8b938eff96313ee9e61c287fdffea2779c0537d2f0ccd7fc1e973693fd12b",
    "d12faee60ec1f46f2bdd6a490b1c92c2e804955786a014b56d8fb9e6d2a35eef",
    "819f0fb4a16a3f88079bf35f6f03c0b032879a75f56b412baedfe525e19708f4",
    "dcc9e980cd345e9a6e136d76a4cd36a36bb7e3217b3685ad9ca577acc8019bf8",
    "6a1a122610ff86d6037d46e57c49183960bcefad04ea233a387fc3d8a0db997b",
    "23dab800d04d100b2748b2addec5237b75ad6da992de80984f95d8decd546859"
    //省略部份交易
  ],
  "time": 1619758979,
  "mediantime": 1619755004,
  "nonce": 32721792,
  "bits": "170bef93",
  "difficulty": 23581981443663.85,
  "chainwork": "00000000000000000000000000000000000000001cb2cd894a35651ba07be168",
  "nTx": 2158,
  "previousblockhash": "00000000000000000004cabf7ba2626c0da40182c19324ea12c13b2aac8ade98",
  "nextblockhash": "000000000000000000058960a47748b02e4b659ba529a0e9c6fb9e1991158f6f"
}

包含以下数据:

字节长度

字段

说明

4

version

区块版本号

32

previousblockhash

前一个区块头的哈希值

32

merkleroot

Merkle根哈希,交易列表生成的默克尔树根哈希

4

time

时间戳,该区块产生的近似时间,精确到秒的UNIX时间戳

4

bits

难度目标,挖矿难度值

4

Nonce

挖矿过程中使用的随机值

区块头中的数据分成三不同的意义:

  1. 区块元数据
  2. 打包相关元数据
  3. 交易树据根
1.区块元数据
  1. 父哈希(前一个块)
  2. 版本号 即前区块的上一个区块,就是父区块(前一个块)的哈希值,父哈希值用来将该区块与它的前一区块相连接;
2.打包相关元数据
  1. 难度
  2. 时间戳
  3. Nonce(随机数)
3.交易树据根

这个根在区块头中就是根哈希值,即区块体中的默克尔树的根。

区块体

区块体包括当前区块经过验证的、 区块创建过程中生成的所有交易记录。这些记录通过默克尔(Merkle)树的哈希过程生成唯一的默克尔,根并记入区块头。 区块体,包含交易数据。 比特币中的交易比较简单,就是转账,A -> B 转账,这笔交易从比特币客户端发起后,就会进行广播。 比特币的节点收到交易后,会将交易存储到交易队列当中,直到进行打包时才会将交易队列中的交易,打包其实是构建一个数据结构,包括:

默克尔树 当前区块的交易集合而生成的一颗树,目的是通过每一笔交易,从下往上生成一树哈希树。 自下往上看:

默克尔树
默克尔树

区块链

就是字面意思,由一个个区块组成的链条。 创世块:比特币网络中的第一个块。几乎所有的区块链服务,都有创有块。 学习区块链,就必须了解区块的本质,区块链的是由一个一个区块组成的链条。

区块链是逻辑上的链条,每一个区块之间通过确认父哈希的形式,来确定自己的父块。

区块链结构
区块链结构

那么这样就会产生几个问题?

  1. 区块链网络中有很多的节点同时产块,该确认谁才是下一个节点?
  2. 如果 A 先产块,B 后产块,但是 A 的网速有延迟,传输比 B 后到达,其他节点怎么处理 A 的区块?
  3. 如何保证传输过来的块一定是合法块,不是一个恶意节点广播过来的块 或者 没有被恶意修过过的块?

比特币是如何解决上述这些问题的。

综上,比特币的区块头 和 区块体 是紧密相连的数据结构,缺一不可。

bitcore 区块链钱包

比特币的工具有很多,PC端常用的工具就是比特币钱包。钱包的种类也有不少,可以查看比特币官网,这里用的是 bitcore。 通过命令行窗口,可以执行一些命令来看查看比特币相关的数据。 查看区块信息

getblock 00000000000000000000bca6ccc2ef309fd814f80a55b3e08a4212326137d7d2

钱包工具
钱包工具
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 区块结构
  • 区块
    • 一个完整的区块结构
      • 区块头
        • 1.区块元数据
        • 2.打包相关元数据
        • 3.交易树据根
      • 区块体
      • 区块链
      • bitcore 区块链钱包
      相关产品与服务
      区块链
      云链聚未来,协同无边界。腾讯云区块链作为中国领先的区块链服务平台和技术提供商,致力于构建技术、数据、价值、产业互联互通的区块链基础设施,引领区块链底层技术及行业应用创新,助力传统产业转型升级,推动实体经济与数字经济深度融合。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档