bitcoin-02-比特币技术体系

2023-10-23 08:46:16 浏览数 (2)

学习区块链技术,首先应该了解最经典的 比特币。比特币做为最早的分布式去中心化的区块链应用,其经典设计值得学习。

比特币架构

比特币通过将各项技术进行结合,创造出来的这个产品,其本质的功能是记账,副做用是炒。 比特币的设计是为了保证所有数据是分布式的、去中心化的保存数据,防止数据在中心的节点中保存。

自上而下,共分6层

  1. 应用层
  2. RPC 层
  3. 网络层
  4. 共识层
  5. 数据层
  6. 存储层

1.应用层

包括比特币钱包、客户端等种上层的应用,一般是比特币程序本身的外部应用。 以比特币钱包为例,比特币钱包有很多种,可以上官网上下载不同钱包,比如最简单的钱包,早期这个钱包还保留有CPU挖矿功能。现在版本已不支持,可以参考官方 Github 文档:

https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.13.0.md

2.RPC 层

RPC 层的作用是进行RPC 通信。测试可以使用 BitCore 这个工具来进行测试。

测试一个 RPC 命令,查看区块信息: getblockchaininfo 命令行

代码语言:javascript复制
{
  "chain": "main",
  "blocks": 680816,
  "headers": 680816,
  "bestblockhash": "0000000000000000000133b07fdf287ddca3cca80162b4a06a05d6904190cd37",
  "difficulty": 23581981443663.85,
  "mediantime": 1619518237,
  "verificationprogress": 0.999995596389184,
  "initialblockdownload": false,
  "chainwork": "00000000000000000000000000000000000000001c943902d1cf6cdd1387c75c",
  "size_on_disk": 1904190175,
  "pruned": true,
  "pruneheight": 679647,
  "automatic_pruning": true,
  "prune_target_size": 1999634432,
  "softforks": {
    "bip34": {
      "type": "buried",
      "active": true,
      "height": 227931
    },
    "bip66": {
      "type": "buried",
      "active": true,
      "height": 363725
    },
    "bip65": {
      "type": "buried",
      "active": true,
      "height": 388381
    },
    "csv": {
      "type": "buried",
      "active": true,
      "height": 419328
    },
    "segwit": {
      "type": "buried",
      "active": true,
      "height": 481824
    }
  },
  "warnings": ""
}

3.网络层

网络层使用 Peer-to-Peer,即点对点通信。每个BTC网络当中的节点中的通信,没有中心化的节点进行转发,需要通过节点发现,进行通信。 这也体现出BTC网络中当,每个节点都是平等的节点,没有哪个节点可以控制其他节点。

这种去中心化的好处就是可以做到节点之间的平等,但是也存在几个问题。

  1. 网络延迟
  2. 联合作敝

3.1 网络延迟很好理解,由于节点之间是平等的,每个节点都会呈现为网状的连接,当一个区块被生产出来后,会同步到相邻的网络节点当中,进行相邻转发。并不是通过中心节点订阅或转发的,一个区块到达所有的节点会有网络延迟。

3.2 联合作敝,去中心化的通信,节点间的数据只能依赖于依赖于各个节点间的验证,那就给做敝留下了空间。

4.共识层

什么是共识,这个非常重要,非常重要。 因为在平等的网络当中,每个节点都是分散的,该如何保证每个节点的验证、转发是一致? 这就需要每个节点与节点之间达成共识。以此来保证所有节点的行为一致。

什么是共识 共识就是,共识即认可,比特币中有很多节点,要让这些节点达成一致性,比特币采用的是:POW 工作量证明。 比特币共识:说白点就是大家通过计算一个随机生成的Hash值的方式,来决定谁先打包。是不是感觉没什么,计算这个Hash并不是一件马上就可以算出来的事情。 大概流程:

  1. 所有比特币中的交易会向所有节点广播,所有节点接收到交易后,放于交易队列当中
  2. 全世界所有节点通过计算 Hash 来决定谁交这些交易打包,先算出者,打包交易成一个区块并广播区块
  3. 打包者,将一个随机数加处块头中,使得计算的哈希结果小于或等于块头中目标值
  4. 其他节点收到区块后,验证区块和区块内的交易,验证正确保留该区块

为什么要给一个随机Hash数来给节点计算 为了证明这个块的正确性。比特币的区块链当中,第一个节点产生的第一个块叫做:创世块,这个块是比特币运行时产生的第一个块,这个块会产生一个随机Hash数,打包进第一个块的块头中,然后广播。 其他节点收到区块后,对这个创世块进行验证。先验出者,证明了这个块是正确的,然后根据这个创建块,将收到的交易进行打包,并链接到这个创世块后面,就成了第二个块,并且这个节点也根据收到的交易产生了个随机Hash,广播给其它节点。 其他节点收到后,重复这个流程,证明这个块的正确性,并进行上链。这个就是 POW 的义意。

5.数据层

数据层是指比特币的数据结构。比特币的数据结构比较典型,很多后来的区块链都借鉴这些数据模型。

  1. 区块
  2. 区块链
  3. Merkle树,也称,默克尔树
  4. Hash
  5. 时间戳
区块

是指将交易进行打构的区块数据结构,包含:区块头、区块体、哈希、时间戳 等。

区块链

是指由区块构成的链条,就是指区块链,比较直白。

Merkle树,也称,默克尔树

Merkle树的作用:防窜改。 这里仅需要知道即可,这些点每一个展开都是一个大点,后续会做很详细的讲解。 Merkle树的构成是通过将每一笔交易的哈希,自上而下,相邻两个节点向上构建出一个新的父哈希值,由此来构建一棵哈希树。

6.存储层

存储主要使用的是 LevelDB,进行存储,LevelDB 是基于 SSTable 进行设计实现的一个数据引擎。很多数据库都是基 LevelDB 进开发。 LevelDB 本身具体高性能读写,通过在内存缓存 和 多层级文件存储而取名 LevelDB。

0 人点赞