主页 > imtoken百度 > 中国区块链商学院:区块链基础知识

中国区块链商学院:区块链基础知识

imtoken百度 2023-12-28 05:11:47

Blockchain是block和chain的直译,其数据结构如图1所示,即每个block保存指定时间段内的数据记录,并通过密码学习构建安全可信的方式链形成一个不可篡改的分布式账本,由所有成员共享。

比特币区块分为两部分:区块头和区块体。区块头的大小为 80 字节,包括 4 字节的版本号、前一个区块的 32 字节(256 位)哈希、32 字节的 Merkle 根节点、4 字节的时间戳和 4 -byte 该部分的难度值和一个 4 字节的随机数。区块体包含10分钟内选择的交易记录,第一笔交易(coinbase交易)是用于奖励矿工比特币的特殊交易,由矿工自己添加到区块中。

中国区块链商学院:区块链基础知识

图1 区块链数据结构示意图

基本概念

区块链是一种技术交叉融合在一起的集成创新。因此,要了解区块链,首先要了解区块链中集成了哪些技术。

P2P 网络

如图2所示,P2P(Peer-to-Peer)网络是端到端的网络。 P2P 网络分为结构化(例如基于 Chord 的 P2P 网络)和非结构化 P2P 网络(例如 Gnutella)。比特币的区块链使用非结构化的 P2P 网络。整个网络没有集中的硬件或管理机构。任何节点既是服务器又是客户端。任何节点只要安装相应的客户端软件,即可接入P2P网络(如BT软件),参与区块链的记录和验证,不超过1/3的节点损坏、退出甚至植入恶意代码。会影响整个系统的运行。

中国区块链商学院:区块链基础知识

交易区块哈希值如何生成

图2 传统中心化系统与P2P网络拓扑对比

加密算法和数字签名

加密技术分为对称、非对称和散列(Hash)加密。对称加密是指使用相同的密钥进行加密和解密,非对称加密是指使用一个密钥对进行加密和解密,而散列加密主要是通过对数据进行散列处理得到一个固定的散列结果。该值验证信息是否被篡改。

非对称加密

在非对称加密技术中,向外界公开和分发的密钥称为公钥,不能自己公开和保存的密钥称为私钥。如果公钥被加密,对应的私钥可以解密。反之亦然。如图3所示。

中国区块链商学院:区块链基础知识

图3 非对称加密RSA算法的简化示例

非对称加密算法包括 RSA、DSA 和 ECC。区块链采用基于椭圆曲线加密技术的数字签名(ECDSA),具体实现为secp256k1。 ECDSA相当于DSA和非对称加密ECC的结合。与RSA算法相比,ECDSA具有计算量少、存储空间小、带宽要求低等特点。

数字签名

交易区块哈希值如何生成

基于数字签名的通信机制的工作原理,如图4所示,发送消息时,发送者使用哈希函数从消息文本中生成一个文件摘要,用自己的私钥加密,加密后的摘要将作为消息的数字签名与消息一起发送给接收方。接收方首先使用与发送方相同的散列函数从收到的原始消息中计算出消息摘要,然后使用发送方的公钥解密附加在消息上的数字签名。如果得到的明文相同,则接收方可以确认传输的文件没有被篡改,安全可靠。

中国区块链商学院:区块链基础知识

图4数字签名流程图

哈希加密

Secure Hash Algorithm Algorithm,SHA)是由美国国家安全局开发并由美国国家标准与技术研究院(NIST)发布的一系列加密哈希函数,包括SHA-0、SHA-1、SHA-2 和 SHA-3 系列。比特币的区块链使用SHA-256哈希加密算法,该算法于2001年发布,属于SHA-2分叉。由于 SHA256 的伪随机性,只要输入相同的数据,就会得到相同的结果。如果输入数据稍有变化,就会得到截然不同的结果,如图5所示。SHA256也是一种单向不可逆算法,即很容易根据一个输入数计算出SHA256的结果,但是根据 SHA256 的结果计算输入数几乎是不可能的。除此之外,比特币还使用ripemd160算法生成比特币钱包地址。

中国区块链商学院:区块链基础知识

图5哈希加密示意图

默克尔树

默克尔(Merkle)树是区块链的基本构建块。区块链可以在没有 Merkle 树的情况下工作,但在可扩展性方面存在很大的挑战,以将所有交易记录包含在块头中。如图 6 所示,区块链中的每个区块都由区块头和区块体组成。区块头包含一个 Merkle 根节点的字段。通过记录块体中的所有交易记录,以二叉树的形式,两两迭代拼接和散列,可以得到最终的散列值,我们称之为默克尔根散列。 Merkle 根哈希相当于区块中所有交易记录的快照。通过比较 Merkle 根哈希,可以轻松检测到块中交易记录的任何更改。 Merkle 根哈希主要用于简单支付验证(SPV),在验证交易是否在区块中时也可以大大降低网络传输成本。

交易区块哈希值如何生成

中国区块链商学院:区块链基础知识

图6 Merkle树图

工作证明机制

工作量证明机制,简单来说,就是一种共识机制,用来确认你是否做了一定量的工作量证明。比特币的区块链主要依靠计算数学难题来衡量工作量。对于每个区块,选择一定数量的交易记录后,填充版本号、时间戳和难度值,生成对应的 Merkle 根哈希。不难看出,这些值是在交易记录被选中后确定的,唯一可以改变的是随机数(Nonce)的值。如图 7 所示,系统需要两种 SHA256 算法根据难度值计算整个区块头,得到的哈希结果小于某个阈值。根据上述SHA256算法的伪随机性,只有通过不断的尝试和枚举,才能找到对应的随机数,证明其工作量。

中国区块链商学院:区块链基础知识

图7 工作量证明机制示意图

除了工作量证明(PoW)等共识机制,还有权益证明(PoS)、委托权益证明(DPoS)、拜占庭容错(BFT)、实用拜占庭容错( PBFT) 不可信环境中的共识机制和需要可信环境的共识机制,例如 PaxOS 和 Raft。表 1 是一个简单的比较。

中国区块链商学院:区块链基础知识

表1 共识机制简单对比表

交易区块哈希值如何生成

入网及验证运行机制

节点通过安装适当的软件(如比特币核心)来访问区块链。节点启动后,主要在 P2P 网络上发现邻居节点、链接邻居节点、传输 P2P 消息和下载区块链验证。节点可以选择下载完整的区块链进行验证,也可以只下载区块头并通过 Merkle 树节点进行简单支付验证(SPV)。

钱包软件可分为手机钱包、桌面钱包、网络钱包和纸质钱包,均支持保存用户私钥。非确定性钱包交易区块哈希值如何生成,关键区别在于私钥的备份和恢复方便。

区块链存储和接受

比特币的区块链使用Berkeley DB(文件数据库)作为钱包数据库,使用LevelDB(键值数据库)存储区块的索引和UTXO(未使用的交易输出,未使用的比特币交易输出)。当节点启动时,它会将整个区块链的索引从 LevelDB 加载到内存中。当收到一个新区块时,节点会检查新区块中的所有交易,以验证交易格式、交易大小、交易签名、UTXO匹配、交易签名、脚本合规性等。

如果验证成功,检查前一个区块头的哈希值是否与链头的区块哈希值一致。如果一致,更新UTXO数据库和回滚事务数据库。如果没有交易区块哈希值如何生成,则将该块放入孤立块池中。当一个节点发现网络中有另一个更长的区块链时,它需要断开现有的区块并重新组织区块链。如果验证不成功,该区块将被丢弃,并继续等待新区块的到来(矿工将继续计算新区块的数学难题)。

区块链的工作量证明计算机制

扮演“矿工”角色的节点一直在收集网络中广播的交易记录,并致力于计算新区块的数学难题,即工作量证明。如果其他节点发送的新区块验证成功,除了更新UTXO数据库和回滚交易数据库外,节点会立即开始计算下一个新区块。新区块的构建优先考虑事务内存池中优先级高的事务记录。优先级计算如下:

如果自己的工作量证明计算成功,节点会第一时间将区块广播到全网,其他节点会收到新的区块。如上所述,会进行相应的验证和存储。

交易区块哈希值如何生成

整个区块链的运行机制如图8所示。

中国区块链商学院:区块链基础知识

图8 区块链运行机制示意图

其他相关脚本语言

区块链采用的脚本语言不是图灵完备的语言,不支持循环,只能进行栈操作。这种脚本语言的优点是不允许矿工提交死循环脚本,更注重安全性考虑,但扩展性有限。以以太坊为首的区块链编程平台支持图灵完备的编程语言,引领区块链进入2.0时代。由于对循环等复杂操作的支持,以太坊使用Gas(燃料)机制来防止无限循环的出现,保证系统的安全性。

消息队列

比特币区块链使用零 MQ (ZMQ) 作为消息分发和消息队列管理工具。与很多人熟悉的RabbitMQ相比,ZMQ不像传统意义上的消息服务器,更像是一个底层网络通信库,在多线程、多核和主机箱之间弹性伸缩,连接网络通信,进程通信和线程通信被抽象成统一的API接口。

挖矿设备及算法演进

挖矿设备从支持复杂指令(CISC)并适合串行计算的CPU矿机时代,经过多核系统,适合并行简单计算GPU挖矿和低功耗但昂贵的FPGA挖矿正在逐步向集约型高速 ASIC 矿机和规模效益矿池演进。