钱包开发基础 - 区块链的基础及链的基本结构

简单来说,区块链就是一个以链式结构组织而成的去中心化的账本。其最本质的作用是用于记账,区块链上面任何项目都是基于记账这个概念衍生而来的。

什么是区块链

要想开发一个钱包项目,首先要理解一些区块链的基本概念。

简单来说,区块链就是一个以链式结构组织而成的去中心化的账本。其最本质的作用是用于记账,区块链上面任何项目都是基于记账这个概念衍生而来的。

区块链的结构

区块链的结构是怎样的?

区块链的结构从宏观来看,非常简单,就是链表的结构。其区块内有两个最核心的属性 Hash 和 Parent Hash,其中 Hash 可以理解为这个区块的唯一标识,Parent Hash 记录了上一个区块的 Hash。正是因为每个区块都记录了上一个区块的 Hash,从而使得每个区块都是以链式的结构组织起来。 image.png

账本中的账,记录在哪里?

既然区块链是一个账本,那他的账单,记录在哪里?毫无疑问,账肯定记录在每一个区块中。它是以一个二叉默克尔树的树状结构组织起来的。(默克尔树是什么,见默克尔树详解跳转链接)我们以区块 2 为例,拆解下交易的组织结构:

image.png 从上图,我们可看出,区块链中的交易账单,记录树状结构的最外层。在默克尔树中,叶子节点记录了交易的 Hash,非叶子结构记录了它的两个叶子节点的二次 hashfather = H(son1, son2) )。一直追溯到最顶层的 hash,就作为区块的 hash。这样的结构,保证了一个区块出现后,其交易账单的不可变性。因为哪怕有一个交易被篡改了,最顶层的 hash 都不可能正确。

Hash 函数

Hash 函数成为单向散列函数。简单理解就是,随便给定一个输入,得到一个不可倒推的固定输出。其有几种特性:

  • 单向不可逆:只能从输入推导到输出,输出不能逆推输入。
  • hash 碰撞:hash 碰撞指的是,不同输入得到相同的输出。有这个可能,但很难找到不同的输入得出相同的输出,可以理解为近似于不可能。

在比特币中的默克尔树构建,正是使用了Sha-256 这个 Hash 函数来构建。比特币中为了更安全,使用的是双重 hash,即:H1 = SHA256(SHA256(tx1))

创建的 Hash 算法有:

  1. SHA1、MD4、MD5:已被破解,不用于安全场景,但可用于简单消息摘要。
  2. SHA256: 安全,比特币中构建默克尔树使用。
  3. Keccak256: 安全,以太坊中默认使用到 hash 算法。
  4. Blake2、Blake3:安全,输出可变长,高性能,新一代的 hash 函数。

共识算法

了解共识算法之前,我们先来看区块链中一笔交易的大致生命周期。

  1. 交易创建:用户创建一笔交易,包含发送目标、金额、手续费等。
  2. 交易广播:将交易发送给 RPC 节点, RPC 节点收到后会把交易广播出去。
  3. 进入内存池:所有收到交易消息的节点会将合法交易放入自己的内存池,等待打包。
  4. 打包交易:矿工(验证者)将交易打包起来,进行出块,发送到区块链。共识算法正是作用在这一阶段
  5. 确认:交易已上链(交易完成。有些链有最终态,则可认为交易完成)

有了上述概念,我们可以得知:共识算法是决定谁能打包交易进行出块的一种算法,用于决定哪个矿工节点获得出块权利。

没有共识算法,会有什么问题?

如果没有共识算法,那么交易谁都能进行打包出块,那便破坏了区块链的 “链” 的结构了(链只能单向下去,不会分叉成树,哪怕有短期分叉,最终也会选取最长的一条路径走下去)。 并且,如果没有共识算法,有两个矿工同时出块,某笔交易会出现被打包两次(或更多次)的情况。那一笔资金就会被消耗两次(双花攻击),这显然是不可容忍的。

下面我们来看两种最常见的共识算法:

PoW:工作量证明

PoW 是比特币采用的共识算法,工作量证明的核心是,通过 CPU 的计算一个数学上的难题,谁先算出来谁就能记账出块。 其核心由一个公式组成: Hash(nonce + data) <= target data 是固定的,target 为计算的难度,可以调整。比特币节点正是通过计算在这个范围内的 nonce 来获取出块的权利,谁先算出来,谁就有用这个出块记账的权利。

PoS:质押证明

PoS 是以太坊2.0采用的共识算法,它的核心思想是:通过质押代币而非消耗算力去决定记账权。它的运作流程是:

  1. 节点需要质押 ETH 来成为验证者(矿工)节点
  2. 出块权利通过系统筛选(随机+权重)来确定谁可以出块
  3. 出块后通过进行共识委员会验证区块内交易可靠性,投票决定区块是否最终成功。
  4. 成功出块获得奖励,作恶会被罚没 ETH

好了,区块链的基础核心我们暂时先讲到这,下一章我们将会来讨论区块链中使用到的一些加密、签名算法。

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
shawn_shaw
shawn_shaw
web3潜水员、技术爱好者、web3钱包开发工程师、欢迎交流工作机会。欢迎闲聊、交流技术、交流工作:vx:cola_ocean