主页 > imtoken安卓版 > 区块链技术指南(三):区块链运行的核心技术

区块链技术指南(三):区块链运行的核心技术

imtoken安卓版 2023-05-10 07:17:37

前言

学习区块链的时候,知识点很多。 作为读者,我们无法第一时间消化(也没有必要第一时间理解),有些方面的设计思路也是一知半解。 遇到这种情况,我一般都是把书看几遍,然后寻找各个知识点之间的关系,从而理解设计者的想法。 区块链的基础知识就像搭积木。 有了这些积木,您就有了建造房屋的材料。 至于如何搭建比特币的核心技术,就要了解它们之间的关系了。 前文的笔记是一些基本的概念,可以让我们了解区块链技术中包含的知识。 至于区块链是如何运作的,不涉及太多。 正如原书的写作思路,在介绍完基本概念后比特币的核心技术,再向读者介绍区块链运行的核心技术。 在学习过程中,会重复一些概念。 我的建议是不要跳过这些部分,即使是快速浏览一下也能加深印象。

区块链基础框架

将区块链基础设施分为三层。 它们是应用层、数据层和网络层。

应用层包括:可编程货币、可编程金融等。

数据层包括:公共账本、共识算法和密码学等。

网络层包括:P2P网络、TCP/IP协议等。

首先,在网络层,区块链是一个基于TCP/IP通信协议和点对点网络的分布式系统。 不同于传统的有中心的分布式系统,它不依赖于中心化的服务器节点转发消息,而是每个节点都参与消息转发。 因此,P2P网络比传统网络具有更高的安全性。 任何一个节点的攻击都不会影响整个网络,所有节点都保存着整个系统的状态信息。

其次,在数据层面,区块链是一个只能追加不能更改的分布式数据库系统,是一个分布式账本。 如果是开放的区块链,也就是公有链,那么这个账本任何人在任何地方都可以查询,完全公开透明。 在区块链网络中,节点通过共识算法维护网络中账本数据库的一致性。 同时采用密码学签名和哈希算法,保证数据库不可篡改、不可伪造、可追溯。 例如,在比特币系统中,只有控制了 50% 的网络算力时,才有较高的概率重组区块链来修改账本信息。 由于比特币系统的设计者中本聪在系统设计中巧妙地加入了具有经济激励的挖矿工作量证明(PoW)机制,使得即使拥有网络50%以上算力的人也不会伤害自己攻击网络以获取利润。 因此,比特币系统自上线以来连续正常运行了7年多,没有发生过因比特币系统本身的缺陷而导致的安全故障。

再次,在应用层面,我们可以用区块链来代替传统的登记清算系统。 国信证券分析报告指出,通过区块链点对点分布式时间戳服务器生成按时间排列记录的电子交易凭证,可以解决双重支付问题,从而带来零结算的可能费用。

在应用方面,区块链平台可以为用户编写智能合约提供编程环境。 通过智能合约,可以将业务规则转化为在区块链平台上自动执行的合约。 合约的执行不依赖可信任的第三方,也不受人为干预。 理论上,一旦部署,一旦满足合约执行条件就会自动执行。 执行结果也可以在区块链上公开查询,保证合约的公平性和透明度。 因此,智能合约可以降低中介机构参与合约建立、执行和仲裁的成本。 区块链的智能合约为未来可编程货币、可编程金融乃至可编程社会的建立奠定了基础。

区块链具有去中心化、数据库可靠、开源可编程、集体维护、安全可信、交易准匿名等特点。 如果一个系统不具备上述特征,则不能视为基于区块链技术的应用。

(1) 去中心化

区块链数据的存储、传输、验证等过程基于​​分布式系统结构,整个网络不依赖非中心化的硬件或管理机构。 作为区块链的一种部署方式,公链网络中的所有参与节点都可以享有平等的权利和义务。

(2) 可靠的数据库

区块链系统的数据库采用分布式存储,任何参与的节点都可以拥有数据库的完整副本。 除非能够控制系统中一半以上的算力,否则任何对节点上数据库的修改都将无效。 参与系统的节点越多,数据库就越安全。 并且区块链数据的存储也带有时间戳,为数据增加了时间维度,具有极高的可追溯性。

(3) 开源可编程

区块链系统通常是开源的,代码高度透明。 公链的数据和程序是对所有人开放的,任何人都可以通过接口查询系统中的数据。 并且区块链平台还提供灵活的脚本代码系统,支持用户创建高级智能合约、货币和去中心化应用。 例如,以太坊平台提供了图灵完备的脚本语言,供用户构建任何可以精确定义的智能合约或交易类型。

(四)集体维修

系统中的数据块由整个系统中所有具有记账功能的节点共同维护,任何一个节点的损坏或丢失都不会影响整个系统的运行。

(5) 安全可靠

区块链技术利用非对称密码学原理对交易进行签名,使交易无法伪造; 同时利用哈希算法保证交易数据不可轻易篡改,最终形成强大的算力来抵御破坏者的攻击,确保区块链中的区块和交易数据在区块不可篡改,不可伪造,具有极高的安全性。

(6) 准匿名

区块链系统使用与用户公钥挂钩的地址作为用户身份标识,不需要传统的基于PKI的第三方认证中心颁发数字证书来确认身份。 通过在全网节点上运行共识算法,建立网络中诚实节点对全网状态的共识,间接建立节点间的信任。 用户只需公开地址,无需公开真实身份,同一用户可连续更改地址。 因此,区块链上的交易不与用户的真实身份挂钩,而是与用户的地址挂钩,具有交易的准匿名性。

区块链技术的核心优势是去中心化,利用哈希算法、数字签名、时间戳、分布式共识和经济激励,可以在节点之间不需要相互信任的分布式系统中建立信用,实现点对点交易和协作,从而为中心化机构普遍存在的高成本、低效率和不安全的数字存储问题提供解决方案。

区块链运行的核心技术

1. 区块链连接

每个区块分为区块头和区块体(包括交易数据)两部分。 区块头包括用于实现区块链的前一个区块的哈希值(也称为散列值)和用于计算挖矿的随机数(nonce)。 前一个区块的哈希值实际上就是前一个区块头的哈希值,随机数计算规则决定了哪个矿工可以获得记录该区块的权力。 区块链的上链模型如下:

比特币交易技术_比特币技术分析软件_比特币的核心技术

2. 共识机制

区块链与比特币一起诞生,是比特币的基础技术架构。 区块链可以理解为基于互联网的去中心化记账系统。 像比特币这样的去中心化数字货币系统需要区块链来保证每个诚实节点在没有中心节点的情况下记账的一致性。 因此,区块链技术的核心是一种共识机制,在没有中央控制的信任基础上,个人之间就交易的合法性达成共识。

目前区块链共识机制主要有四种:PoW、PoS、DPoS和分布式共识算法。

PoW(工作量证明)

工作量证明也好比比特币的挖矿机制。 矿工将现有的尚未被记录在网络中的交易打包成一个区块,然后不断遍历并尝试寻找一个随机数,使得新的区块加上随机数的哈希值满足一定的难度条件比如前 10 位数字为零。 找到一个满足条件的随机数,就相当于确定了区块链的最新区块,也相当于获得了区块链的本轮记账权。 矿工在网络中广播满足挖矿难度条件的区块。 在验证区块满足挖矿难度条件,区块中的交易数据满足协议规范后,他们会将区块链接到自己版本的区块链上,从而形成全网对当前网络状态的共识。

优点:完全去中心化,节点自由进出,避免建立和维护中心化信用机构的成本。 只要网络破坏者的算力不超过全网总算力的50%,网络的交易状态就可以达成共识。

缺点:目前比特币挖矿造成了很大的资源浪费; 此外,挖矿的激励机制也造成矿池算力高度集中,背离了最初去中心化设计的初衷。 更大的问题是PoW机制的共识需要很长时间才能达成共识,每秒最多只能做7笔交易,不适合商业应用。

PoS(股权证明)

权益证明要求节点提供分布式共识机制,拥有一定数量的代币证书,以获得竞争区块链的记账权。 如果仅以代币余额来确定记账人,必然会诞生富豪,从而导致记账权的中心化,降低共识的公平性。 因此,不同的PoS机制在权益证明的基础上采用不同的方式增加记账。 权重随机化以避免中心化。 比如在点点币PoS机制中,链龄最长的比特币获得记账权的几率更大。 NXT 和 Blackcoin 使用一个公式来预测下一个记账节点。 您拥有的代币越多,被选为记账节点的概率就越高。 未来,以太坊也将从目前的 PoW 机制转向 PoS。 目前,以太坊的 PoS 机制会使用节点押注来押注下一个区块。 对赌获胜的人将获得额外的 Ether 奖励,对赌失败的人将被扣除 Ether,以达成下一个区块的共识。

优点:一定程度上缩短了达成共识的时间,减少了PoW机制的资源浪费。

缺点:破坏者进行网络攻击的成本较低,需要验证网络的安全性。 此外,拥有大量代币的节点有更大的机会获得记账权,这将使网络的共识被少数富裕​​账户所支配,从而失去公平性。

DPoS(共享授权证明)

委托权益证明机制类似于董事会投票。 比特股采用的PoS机制是股东投票选出一定数量的见证人,每个见证人有两秒的授权时间依次生成区块。 如果见证人不能在给定的时间片内生成区块,则将该块的出块权限授予下一个时间片对应的见证人。 利益相关者可以随时投票更换这些见证人。 DPoS 的这种设计使得块生成更快、更节能。

优点:参与验证和记账节点数量大大减少,可以实现秒级共识验证。

缺点:选举固定数量的见证人作为记账候选人可能不适合完全去中心化的场景。 此外,在网络节点数量很少的情况下,民选证人的代表性并不强。

分布式共识算法

分布式共识算法是基于传统的分布式共识技术。 它分为一种拜占庭容错算法来解决拜占庭将军问题。 此外,分布式共识算法(Paxos、Raft)解决非拜占庭问题。 这类算法是目前联盟链和私有链场景中常用的共识机制。

优点:实现秒级快速共识机制,保证一致性。 适合多方参与的多中心商业模式。

缺点:去中心化程度不如公链上的共识机制。

3.解锁脚本

脚本是在区块链上实现合约自动验证和自动执行的重要技术。 每笔交易的每笔输出并不严格指向一个地址,而是指向一个脚本。 脚本就像一组规则,它限制了接收者如何使用锁定在这个输出上的资产。

交易的合法性验证也依赖于脚本。 目前它依赖于两种类型的脚本:锁定脚本和解锁脚本。 锁定脚本是在输出交易中添加的条件,通过脚本语言实现,位于交易的输出端。 解锁脚本对应锁定脚本。 只有满足锁定脚本要求的条件,才能花费该脚本上对应的资产,位于交易的输入端。 许多灵活的条件可以通过脚本语言来表达。 解释后的脚本类似于我们编程领域的“虚拟机”,分布运行在区块链网络的各个节点上。

四、交易规则

区块链交易是构成区块的基本单位,也是区块链负责记录的实际有效内容。 区块链交易可以是转账,也可以是智能合约部署等其他事物。

就比特币而言,交易就是支付转账。 其交易规则如下:

(1) 交易的输入输出不能为空。

(2) 对于交易的每一个输入,如果在当前交易池中都能找到对应的UTXO输出,则拒绝交易。 因为当前的交易池是一笔没有记录在区块链上的交易,交易的每一次输入都应该来自于确认过的UTXO。 如果在当前交易池中找到,则为双花交易。

(3) 对于一笔交易中的每一个输入,其对应的输出一定是UTXO。

(4) 每个输入解锁脚本必须与相应的输出锁定脚本一起工作,以验证交易的合规性。

对于以太坊来说,一笔交易也可能是智能合约的部署。 交易规则决定了满足一定语法规则的合约可以部署在区块链上。

5. 交易优先权

区块链交易的优先级由区块链协议决定。 对于比特币,包含在区块中的交易的优先级由交易广播到网络的时间和交易的大小决定。 随着交易在网络上广播的时间增加,交易的链龄增加,交易的优先级增加,最终会被包含在区块中。 对于以太坊而言,一笔交易的优先级还与交易的发布者愿意支付的交易手续费有关。 发布者愿意支付的交易费用越高,交易被包含在区块中的优先级就越高。

6.默克尔证明

Merkle 证明的最初应用是比特币系统。 比特币区块链使用 Merkle 证明,以便在每个区块中存储交易,使交易无法被篡改,也很容易验证交易是否包含在特定区域中。 堵塞。 比特币的Merkle证明树如图所示:

比特币的核心技术_比特币技术分析软件_比特币交易技术

Merkle树的一个重要使用场景是快速支付验证,这就是中本聪描述的“简化支付验证”(SPV)的概念:轻量级节点不需要下载每一笔交易和每一个区块,它们只需要下载链每个块只包含以下5项,数据块大小为80字节。

(1) 前一个区块头的hash值

(2) 时间戳

(3) 挖矿难度值

(4) 工作量证明随机数(nonce)

(5) 包含区块交易的默克尔树的根哈希

如果轻客户端希望确定交易的状态,它可以简单地请求 Merkle 证明,显示 Merkle 树中的特定交易,Merkle 树的根是主链上的区块头。

Merkle 证明可以使区块链得到更广泛的应用,但比特币的轻客户端有其局限性。 虽然可以证明包含的交易,但无法证明任何当前状态(例如:数字资产的持有、名称注册、金融合同的状态等)。 交易影响的确切性质可能取决于之前的几笔交易,而这些交易本身又取决于更多之前的交易,因此最终需要验证整个链上的每笔交易。 为了解决这个问题,以太坊进行了进一步的创新。

以太坊的每个区块头并不只包含一棵默克尔树,而是包含三棵默克尔树,分为三类对象:交易(Transaction)、数据(Receipts)和状态(State)。

比特币技术分析软件_比特币的核心技术_比特币交易技术

这三棵树允许轻客户端轻松地做出和验证以下类型查询的答案:

1)这笔交易是否包含在特定的区块中?

2) 该地址在过去 30 天内发出了类型 X 事件的所有实例(例如,众筹合同实现了它的目标)。

3) 经常账户余额是多少?

4)这个账号存在吗?

5) 假装在这个合约中运行这个交易,它的输出是什么?

第一类由事务树处理; 第三种和第四种由状态树处理; 第二种类型由收据树处理。 计算前 4 个查询任务非常简单。 服务器简单地找到对象,获取 Merkle 分支,并通过分支回复轻客户端。 第五个查询任务也是由状态树处理的。

7.RLP

RLP(Recursive Length Prefix,递归长度前缀编码)是以太坊中对象序列化的一种主要编码方式,其目的是对任意嵌套的二进制数据序列进行编码。

以太坊中的所有数据都以“递归长度前缀编码”的形式存储。 这种编码格式将任意长度和维度的字符串数组连接成一个字符串。 例如,['dog', 'cat'] 被连接(以字节数组格式)为 [200, 131, 100, 111, 103, 131, 99, 97, 116]; 基本思路是把数据类型和长度编码成一个字节放在实际数据的前面(比如'dog'的字符数组编码为[100, 111, 103],所以之后串联,它变成 [131, 100, 111, 103]) 。 'dog' 是一个 24 字节的字符串。 RLP编码规则是当字符串长度为0~55字节时,在字符串长度上加上0x80,这里是3。 所以是0x83,转成十进制是131。 ['dog', 'cat']是一个列表,RLP规则是当长度小于55字节时,第一个字节是0xc0加上列表的长度,这里是8,所以是0xc8,换算成十进制应该是200。注意RLP编码,顾名思义,是递归的; 当 RLP 对数组进行编码时,它实际上是对每个元素串联的 RLP 编码字符串进行编码。 需要注意的是,以太坊中的所有数据都是整数; 所以,如果有任何哈希值或地址以一个或多个 0 字节开头,则在计算出现问题时应删除这些 0 字节。 以太坊中没有包含任何以 0 开头的值的级联数据结构。整数以 big-endian base 256 格式存储。

区块链交易流程

以比特币交易为例,区块链交易不是通常意义上的一手支付一手交付的交易,而是转账。 每次转账都构造一个交易数据会很尴尬。 为了使价值易于合并和分割,比特币交易被设计成包括多个输入和输出,即一笔交易可以转移给多个人。 从产生到在网络中传播,经过工作量证明,全网节点的验证,最后记录在区块链中,就是区块链交易的整个生命周期。 整个区块链交易流程如图所示:

比特币技术分析软件_比特币的核心技术_比特币交易技术

(1) 交易的产生。 拥有者A用自己的私钥在上一笔交易和下一位拥有者B上签上数字签名,并把这个签名附加到币的末尾,做成一张交易单。

(2) 传播交易。 A向全网广播交易指令,各节点将收到的交易信息合并到一个区块中。

(3) 工作量证明。 每个节点通过相当于解决一道数学题的工作量证明机制获得创建新区块的权利,并争取获得数字货币奖励。

(4) 全网节点验证。 当一个节点找到解决方案时,它将记录在该块中的所有带时间戳的交易广播到整个网络,并由整个网络中的其他节点进行检查。

(5) 记录到区块链。 全网其他节点检查区块记账的正确性。 如果没有错误,他们将竞争合法区块之后的下一个区块,从而形成合法的记账区块链。