钱包开发基础 - 区块链的基础及链的基本结构
什么是区块链
要想开发一个钱包项目,首先要理解一些区块链的基本概念。
简单来说,区块链就是一个以链式结构组织而成的去中心化的账本。其最本质的作用是用于记账,区块链上面任何项目都是基于记账这个概念衍生而来的。
区块链的结构
区块链的结构是怎样的?
区块链的结构从宏观来看,非常简单,就是链表的结构。其区块内有两个最核心的属性 Hash 和 Parent Hash,其中 Hash 可以理解为这个区块的唯一标识,Parent Hash
记录了上一个区块的 Hash
。正是因为每个区块都记录了上一个区块的 Hash
,从而使得每个区块都是以链式的结构组织起来。
账本中的账,记录在哪里?
既然区块链是一个账本,那他的账单,记录在哪里?毫无疑问,账肯定记录在每一个区块中。它是以一个二叉默克尔树的树状结构组织起来的。(默克尔树是什么,见默克尔树详解跳转链接)我们以区块 2
为例,拆解下交易的组织结构:
从上图,我们可看出,区块链中的交易账单,记录树状结构的最外层。在默克尔树中,叶子节点记录了交易的
Hash
,非叶子结构记录了它的两个叶子节点的二次 hash
( father = H(son1, son2)
)。一直追溯到最顶层的 hash
,就作为区块的 hash
。这样的结构,保证了一个区块出现后,其交易账单的不可变性。因为哪怕有一个交易被篡改了,最顶层的 hash
都不可能正确。
Hash 函数
Hash
函数成为单向散列函数。简单理解就是,随便给定一个输入,得到一个不可倒推的固定输出。其有几种特性:
- 单向不可逆:只能从输入推导到输出,输出不能逆推输入。
- 抗
hash
碰撞:hash 碰撞指的是,不同输入得到相同的输出。有这个可能,但很难找到不同的输入得出相同的输出,可以理解为近似于不可能。
在比特币中的默克尔树构建,正是使用了Sha-256
这个 Hash
函数来构建。比特币中为了更安全,使用的是双重 hash
,即:H1 = SHA256(SHA256(tx1))
。
创建的 Hash 算法有:
- SHA1、MD4、MD5:已被破解,不用于安全场景,但可用于简单消息摘要。
- SHA256: 安全,比特币中构建默克尔树使用。
- Keccak256: 安全,以太坊中默认使用到
hash
算法。 - Blake2、Blake3:安全,输出可变长,高性能,新一代的
hash
函数。
共识算法
了解共识算法之前,我们先来看区块链中一笔交易的大致生命周期。
- 交易创建:用户创建一笔交易,包含发送目标、金额、手续费等。
- 交易广播:将交易发送给
RPC
节点,RPC
节点收到后会把交易广播出去。 - 进入内存池:所有收到交易消息的节点会将合法交易放入自己的内存池,等待打包。
- 打包交易:矿工(验证者)将交易打包起来,进行出块,发送到区块链。
共识算法正是作用在这一阶段
。 - 确认:交易已上链(交易完成。有些链有最终态,则可认为交易完成)
有了上述概念,我们可以得知:共识算法是决定谁能打包交易进行出块的一种算法,用于决定哪个矿工节点获得出块权利。
没有共识算法,会有什么问题?
如果没有共识算法,那么交易谁都能进行打包出块,那便破坏了区块链的 “链” 的结构了(链只能单向下去,不会分叉成树,哪怕有短期分叉,最终也会选取最长的一条路径走下去)。 并且,如果没有共识算法,有两个矿工同时出块,某笔交易会出现被打包两次(或更多次)的情况。那一笔资金就会被消耗两次(双花攻击),这显然是不可容忍的。
下面我们来看两种最常见的共识算法:
PoW:工作量证明
PoW
是比特币采用的共识算法,工作量证明的核心是,通过 CPU
的计算一个数学上的难题,谁先算出来谁就能记账出块。 其核心由一个公式组成: Hash(nonce + data) <= target
data
是固定的,target
为计算的难度,可以调整。比特币节点正是通过计算在这个范围内的 nonce
来获取出块的权利,谁先算出来,谁就有用这个出块记账的权利。
PoS:质押证明
PoS
是以太坊2.0采用的共识算法,它的核心思想是:通过质押代币而非消耗算力去决定记账权。它的运作流程是:
- 节点需要质押
ETH
来成为验证者(矿工)节点 - 出块权利通过系统筛选(随机+权重)来确定谁可以出块
- 出块后通过进行共识委员会验证区块内交易可靠性,投票决定区块是否最终成功。
- 成功出块获得奖励,作恶会被罚没
ETH
。
好了,区块链的基础核心我们暂时先讲到这,下一章我们将会来讨论区块链中使用到的一些加密、签名算法。
版权声明
本文仅代表作者观点,不代表区块链技术网立场。
本文系作者授权本站发表,未经许可,不得转载。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。