主页 > token.im > 《区块链技术进阶实战》试读:1.3区块链关键技术

《区块链技术进阶实战》试读:1.3区块链关键技术

token.im 2023-08-21 05:12:07

通过对区块链基础知识和发展历史的介绍,相信读者对区块链有了更直观的认识。 本节将更进一步,深入介绍区块链的系统架构和关键技术。 1.3.1 基本模型 图1.3 展示了区块链的基本架构。 本图的绘制参考了《区块链技术发展现状与展望》[2]和工信部《中国区块链技术与应用发展白皮书(2016)》[9]区块链架构图。 基本架构区块链的架构可分为数据层、网络层、共识层、激励层、合约层和应用层:对点的数据通信和验证机制;  共识层主要是网络节点之间达成共识的各种共识算法;  激励层将经济因素引入区块链技术体系,主要包括经济因素的发行机制和分配机制;合约层展示了区块链系统的可编程性,封装了各种脚本、智能合约和算法; 应用层封装了区块链技术的应用场景和案例。 在该架构中,基于时间戳的链式结构、分布式节点间的共识机制和可编程智能合约是区块链技术最具代表性的创新。 一般可以在合约层编写智能合约或脚本编程,构建基于区块链的去中心化应用。 下面将详细介绍该架构中每一层所涉及的技术。 图1.3 区块链基本架构 1.3.2 数据层 数据层是区块链的核心部分。 区块链本质上是一种数据库技术,是一种分布式共享账本。 它由包含交易信息的区块从后往前依次连接的数据结构组成。

该层涉及的技术主要包括:区块结构、默克尔树、非对称加密、时间戳、数字签名和哈希函数。 时间戳和哈希函数相对简单。 这里重点介绍块结构、默克尔树、非对称加密和数字签名。 1. 区块结构 每个区块一般由两部分组成:区块头和区块体。 如图1.4所示,区块头包含父区块哈希值、时间戳、默克尔根等信息,而区块体则包含本区块中的所有交易信息。 此外,每个区块还对应两个值来标识区块:区块头哈希值和区块高度。 图 1.4 区块结构 每个区块都会有一个区块头哈希值,它是通过 SHA256 算法对区块头进行二次哈希计算得到的 32 字节的数字指纹。 例如,比特币的第一个区块的头部哈希为 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f。 区块头的哈希值可以在区块链上唯一标识一个区块,任何节点都可以通过对区块头进行简单的哈希计算得到区块头的哈希值。 区块头哈希也包含在区块的整体数据结构中,但区块头的数据和区块体的数据不一定存储在一起。 为了检索效率,实现中可以将两者分开存放。 除了通过区块头哈希值来识别区块外,还可以通过区块高度来识别区块。

比如高度为0,前面000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f索引的块就是第一个块。 但与头部哈希不同,区块高度并不能唯一标识一个区块。 由于区块链中分叉的存在,可能会出现两个或多个区块高度相同的区块。 说完区块头哈希值和区块高度,下面介绍区块头的结构。 以比特币为例,区块头为80字节,其详细结构如表1.1所示[7]。 表 1.1 区块头详细结构 字段大小(字节) 说明 Version 4 版本号,用于跟踪软件/协议更新 上一个区块哈希值 32 指区块链中上一个区块的哈希值 Merkle root 32 哈希值的时间戳该区块交易默克尔树的根 4 区块生成的大概时间(精确到秒的 Unix 时间戳) 随机数 4 用于工作量证明算法的计数器 区块头由三组元数据组成,一组是引用父块的哈希值数据,用于连接上一个块。 第二组是难度值、时间戳和随机数比特币的区块头有多少个字节,都与挖矿竞争有关。 第三组是Merkle根,即Merkle树在区块体中的根节点。 2.默克尔树介绍了区块头哈希值,区块高度,以及区块头的结构,接下来我们来看区块体。 区块体存储交易信息。 在区块中,它们被存储在一个Merkle树的数据结构中,Merkle树是一种用于有效汇总区块中所有交易的数据结构。

比特币每个区块多少币_比特币一个区块多少币_比特币的区块头有多少个字节

Merkle树是一棵哈希二叉树,树的每个叶子节点都是一笔交易的哈希值。 还以比特币为例。 在比特币网络中,默克尔树用于汇总一个区块中的所有交易,同时生成整个交易集的数字指纹,即默克尔树的根,提供一种验证方式该区块存在某笔交易的有效路径。 生成一棵Merkle树,需要每两个hash节点递归哈希得到一个新的hash值,将新的hash值存入Merkle树中,直到两者合并时只有一个hash值,这个hash值为这个区块中所有交易的默克尔根,存储在上面介绍的区块头结构中。 下面通过一个例子进一步介绍Merkle树。 图1.5是一棵只有4笔交易的Merkle树,分别是交易A、B、C、D。 图1.5 Merkle树的第一步是对每笔交易数据进行两次SHA256算法哈希,得到每笔交易的哈希值. 在这里可以得到 4 个哈希值:HA、HB、HC 和 HD。 也就是这棵默克尔树的叶子节点。 例如,HA = SHA256 (SHA256 (transaction A)) 第二步,将两个叶子节点HA和HB的哈希值也结合两次SHA256哈希运算,会得到一个新的哈希值HAB。 对HC和HD进行同样的操作,会得到另一个哈希值HCD。

例如HAB = SHA256 (SHA256(HA+HB)) 第三步,对已有的两个哈希值HAB和HCD进行第二步的组合运算,最终会得到一个新的哈希值HABCD . 此时,我们没有其他相同高度的节点,所以最终的HABCD就是这棵Merkle树的Merkle根。 然后将这个节点的32字节哈希值写入区块头的Merkle根域。 Merkle树的整个形成过程就结束了。 HABCD = SHA256 (SHA256 (HAB+HCD)) 因为默克尔树是二叉树,所以需要偶数个叶子节点,也就是偶数个交易。 但在很多情况下,一个区块中会有奇数笔交易。 对于这种情况,默克尔树的解决方案是将最后一笔交易复制一次,构造偶数个叶子节点。 这种叶子节点数为偶数的二叉树也称为平衡树。 图 1.6 显示了由 16 个交易组成的更大的默克尔树。 通过图可以发现,无论是一笔交易还是一个区块中的10万笔交易,都可以归纳为一个32字节的哈希值作为默克尔树的根节点。 图1.6 多节点Merkle树 当需要证明交易列表中某笔交易的存在时,一个节点只需要计算log2N个32字节的哈希值就可以形成一条从Merkle树的根节点到一个具体的交易,Merkle树的效率如表1.2所示[7]。

表 1.2 Merkle 树效率 交易数量(笔) 块的近似大小(千字节) 路径大小(哈希数) 路径大小(字节) 16441285121289288(续) 交易数量(笔) 块的近似大小(千字节) 部分)路径size (number of hashes) path size (bytes) 2048512113526553516384165123. 非对称加密和数字签名 非对称加密是区块链技术中用于安全需求和所有权认证的一种加密技术。 常见的非对称加密算法有RSA、Elgamal、背包算法、Rabin、DH、ECC(椭圆曲线密码算法)和ECDSA(椭圆曲线数字签名算法)等[9-26]。 与对称加密算法不同,非对称加密算法需要两个密钥:公钥和私钥。 基于非对称加密算法,通信双方可以在不安全的媒体上交换信息,安全地达成信息共识。 公钥是对外公开的,而私钥是保密的比特币的区块头有多少个字节,别人无法通过公钥计算出对应的私钥。 每个公钥都有对应的私钥。 如果我们使用公钥来加密信息,那么我们必须有相应的私钥来解密加密后的信息; 如果密钥加密信息,则只有相应的公钥才能解密。 在区块链中,非对称加密主要应用于信息加密、数字签名等场景。

比特币的区块头有多少个字节_比特币一个区块多少币_比特币每个区块多少币

在信息加密场景中,如图1.7所示,信息发送方A需要向信息接收方B发送消息,需要先使用B的公钥对信息进行加密。 B收到后,就可以使用自己的私钥了。 解密这个信息,别人没有私钥,所以没有办法解密这个加密的信息。 图 1.7 信息加密 在数字签名场景中,如图 1.8 所示,发送方 A 首先使用哈希函数对原文生成摘要(Digest),然后使用私钥对摘要进行加密生成数字签名(Signature)。 然后将数字签名连同原文一起发送给接收方B; B收到信息后,用A的公钥对数字签名进行解密,得到摘要,从而保证信息是A发送的,然后对收到的原文使用哈希函数生成摘要,并与A进行比对解密摘要。 如果相同,则说明接收到的信息在传输过程中没有被修改。 图1.8 数字签名 1.3.3 网络层 网络层是区块链平台信息传输的基础。 通过P2P网络、特定的信息传播协议和数据验证机制,区块链网络中的每个节点都可以平等地参与共识和记账。 下面将详细介绍区块链平台网络层的P2P网络架构、信息传输机制和数据验证机制。 1. P2P网络架构 区块链网络架构一般采用基于互联网的P2P(点对点)架构。 在P2P网络中,每台计算机、每一个节点都是平等的,他们共同为整个网络提供Serve。

而且没有中心化的服务器,每个主机都可以作为服务器响应请求,或者作为客户端使用其他节点提供的服务。 P2P 通信不需要其他实体或 CA 的地址验证,从而有效地消除了篡改和第三方欺骗的可能性 [27]。 因此,P2P网络是去中心化和开放的,这也符合区块链技术的理念。 在区块链网络中,所有节点地位平等,以扁平拓扑结构相互连接交互。 每个节点需要承担网络路由、区块数据验证、区块数据传播等功能。 在比特币网络中,有两种类型的节点,一种是全节点,它存储了区块链上所有完整的数据信息,需要实时参与区块链数据的验证和记录,以更新区块链主链链。 另一类是轻节点,仅将部分信息保存在区块链中,通过简单支付验证(SPV)向其他相邻节点请求数据,完成数据验证[2]。 2. 传输机制 新的区块数据产生后,产生数据的节点会将其广播给全网其他节点进行验证。 目前的底层区块链平台,一般会根据自身实际应用需求,在比特币传输机制的基础上,重新设计或改进一种新的传输机制。 例如,以太坊区块链集成了所谓的“幽灵协议”,以解决区块数据确认速度快导致的高区块失效率和后续安全风险[28]。 这里我们以中本聪设计的比特币系统为例,列出其传输协议的步骤如下[5]: (1) 比特币交易节点将新产生的交易数据广播给全网所有节点; (2) 每个节点将收集到的交易数据存储到一个区块中; (3) 每个节点根据自己的算力在区块中找到一个具有足够难度的工作量证明; (4) 当节点找到区块后进行工作量证明,将该区块广播给全网所有节点; (5) 只有当区块中包含的所有交易都有效且之前不存在时,其他节点才同意该区块的有效性; (6) 其他节点接收数据块并在块尾创建一个新块来扩展链,将接收到的块的随机哈希值作为新块的前一个块哈希值。

如果交易的相关节点是一个没有连接其他节点的新节点,比特币系统通常会推荐一组长期稳定的“种子节点”给新节点建立连接,或者推荐至少一个节点连接到新节点。 此外,广播的交易数据不需要所有节点都收到,只要有足够多的节点响应,交易数据就可以被整合到区块链账本中。 没有收到完整交易数据的节点可以请求相邻节点下载丢失的交易数据[7]。 3. 验证机制 在区块链网络中,所有节点都会时刻关注网络中广播的交易数据和新生成的区块。 收到相邻节点发送的数据后,首先会验证数据的有效性。 如果数据有效,则按照接收顺序为新数据建立一个存储池暂存数据,并继续转发给相邻节点; 如果数据无效,则立即丢弃数据,以确保无效数据不会继续在区块链网络中传播。 验证有效性的方法是根据预先定义的标准验证数据结构、语法规范性、输入输出、数字签名等方面。 新区块的验证也是如此。 一个节点生成新区块后,其他节点将根据预先定义的标准验证新区块的工作量证明和时间戳。 如果确认有效,则该区块将链接到主区块链,开始争夺下一个区块的记账权。 1.3.4 共识层 Leslie Lamport 在 1982 年提出了著名的拜占庭将军问题,引发了无数研究者探索解决方案。

比特币的区块头有多少个字节_比特币每个区块多少币_比特币一个区块多少币

如何在分布式系统中高效地达成共识是分布式计算领域的一个重要研究课题。 区块链共识层的作用是通过在不同的应用场景下使用不同的共识算法,使每个节点在一个具有高度去中心化决策权的去中心化系统中高效地达成共识。 最初,比特币区块链选择了工作量证明共识(PoW)机制,依靠节点算力来保证比特币网络分布式记账的一致性。 后来,随着区块链技术的不断演进和完善,研究人员相继提出了一些无需过度依赖算力即可实现全网共识的算法,如权益证明(PoS)机制、授权股票共识等。 (Delegated Proof of Stake,DPoS)机制、实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)算法等。下面我们对这些共识算法进行简要介绍[29]。 1. PoW(Proof of Work 机制) PoW 机制诞生于 1997 年,由 Adam Back 设计的 Hashcash 系统。 它最初是为了防止邮件系统中的垃圾邮件而创建的 [11]。 2009年,中本聪将PoW机制作为共识机制应用于比特币区块链网络,实现全网共识。 严格来说,比特币使用的是可重复使用的 Hashcash 工作量证明,因此产生工作量证明可以是概率意义上的随机过程 [29]。

在这种机制中,网络上的每个节点都在使用 SHA256 哈希算法计算一个不断变化的区块头的哈希值。 共识要求计算值必须等于或小于给定值[30]。 在分布式网络中,所有参与者需要使用不同的随机数不断计算哈希值,直到达到目标。 当一个节点得到准确的值时,所有其他节点必须相互确认该值的正确性。 之后,将验证新区块中的交易是否存在欺诈。 然后,用于计算的交易信息集合被确认为认证结果,由区块链中的新区块表示。 在比特币中,计算哈希值的节点称为“矿工”,PoW 的过程称为“挖矿”。 由于计算证明是一个耗时的过程,因此也提出了相应的激励措施(例如奖励矿工一小部分比特币)。 一般来说,工作量证明就是工作量证明。 添加到链上的每个区块都必须经过网络参与者的同意验证,并且矿工已经在其上完成了相应的工作量。 PoW 的优点是完全去中心化和分布式账本。 缺点也很明显,就是资源消耗:挖矿行为造成大量的资源浪费,PoW共识的周期比较长。 比特币网络会自动调整目标值,保证出块过程需要10分钟左右,所以不太适合商用。 2. PoS (Proof of Equity Mechanism) PoS的思想起源于Nick Szabo。 它是 PoW 的节能替代方案。 它不需要用户在不受限制的空间中找到一个随机数,而是需要人们对货币数量的所有权证明,因为人们认为拥有更多货币的人不太可能攻击网络。

由于基于账户余额的选择是非常不公平的,因为单个最富有的人必然会控制网络,因此已经提出了许多解决方案,结合权益来决定谁可以创建下一个区块。 其中Blackcoin使用随机选择来预测下一个创建者,而Peercoin则倾向于根据币龄来选择。 Peercoin 首次开创了真正的权益证明。 它使用工作量证明机制发行新币,使用权益证明机制维护网络安全。 这也是“虚拟货币”史上的创举。 不同于比特币网络需要证明者完成一定数量的工作,这种机制只需要证明者提供一定数量的“数字货币”的所有权。 在权益证明机制中,每当创建一个区块时,矿工都需要创建一个称为“币权”的交易,该交易会按照一定比例预先将一些币发送给矿工。 然后,权益证明机制根据算法根据每个节点持有代币的比例和时间,按比例降低节点的挖矿难度,从而加快节点搜索随机数的速度,缩短时间需要达成共识 [31]。 与 PoW 相比,PoS 可以更节能、更高效。 但是,由于挖矿成本接近于零,因此有可能受到攻击。 另外,PoS本质上还是需要网络中的节点进行挖矿操作,因此也很难应用于商业领域。 3. DPoS(Share Authorization Proof Mechanism) DPoS是由Bitshares项目组发明的[32]。

比特币每个区块多少币_比特币的区块头有多少个字节_比特币一个区块多少币

利益相关者选举他们的代表来生成和验证块。 DPoS 类似于现代企业董事会制度。 比特股系统将代币持有者称为股东。 股东投票选出 101 名代表,然后由他们负责生成和验证区块。 持币人要想成为代表,首先需要用自己的公钥在区块链上注册,获得一个唯一的身份标识,长度为32位。 股东可以通过交易的形式对该标识符进行投票,获得票数前101名的被选为代表。 代表们轮流出块,收益(交易手续费)平分。 如果代表不诚实地出块,很容易被其他代表和股东发现,他将立即被踢出“董事会”,空缺的职位将由代表以102票自动填补。 DPoS 的优势在于大大减少了参与区块验证和记账的节点数量,从而缩短了共识验证所需的时间,大大提高了交易效率。 从某种角度来看,DPoS 可以理解为一个兼具去中心化和中心化优势的多中心系统。 4. PBFT(Practical Byzantine Fault Tolerant Algorithm)该算法最早出现在麻省理工学院的Miguel和Barbara Liskov的学术论文中[33]。 初衷是设计一个低延迟的存储系统,降低算法的复杂度。 该算法可以应用于吞吐量不高但需要处理大量事件的数字资产平台。 它允许每个节点发布一个公钥,任何通过该节点的消息都由该节点签名以验证其格式。 验证过程分为三个阶段:准备、准备和实施。

如果服务操作获得超过 1/3 的不同节点的批准,则服务操作将有效。 使用 PBFT,区块链网络中的 N 个节点可以包含 f 个拜占庭恶意节点,其中 f = (N-1)/3。 换句话说,PBFT 确保至少有 2f+1 个节点达成共识,然后才能将信息添加到分布式共享账本中。 目前,HyperLedger Alliance、China ChinaLedger Alliance等多家区块链联盟正在研究验证该算法的实际部署和应用。 1.3.5 激励层 激励层是在区块链技术中引入经济因素的层,其必要性取决于基于区块链技术的具体应用需求。 这里我们以比特币系统为例介绍其激励层。 在比特币系统中,通过共识过程汇集了大量的节点计算资源,从而实现区块链账本的数据校验和记账工作,因此本质上是共识节点之间的任务众包过程[2]。 在去中心化系统中,共识节点本身是利己的,其参与数据校验和记账的根本目的是为了自身利益最大化。 因此,必须设计合理的激励机制,使共识节点个体为实现自身利益最大化的行为与区块链系统的安全性和有效性相匹配,从而使大规模节点在区块链历史上形成稳定的共识。 比特币采用 PoW 共识机制。 在这个共识中,它的经济激励包括两部分:一是新发行的比特币; 二是交易流通过程中的手续费。

两者结合奖励在 PoW 共识过程中成功计算出所需随机数并生成新区块的节点。 因此,只有当节点达成共识,共同构建和维护区块链历史和系统的有效性时,作为奖励的比特币才会有价值。 1. 发行机制 在比特币系统中,新区块产生的比特币发行数量随着时间的推移呈阶梯式递减。 从创世区块开始,每个新区块都会向该区块的簿记员发放50个比特币奖励,此后每4年(210,000个区块),每个新区块发行的比特币数量减半,以此类推,直到比特币数量稳定在 2100 万枚上限 [7]。 如前所述,记账人的另一部分报酬是比特币交易过程中产生的手续费。 目前默认手续费为1/10000比特币。 两部分费用包含在新区块的第一笔交易中(称为 Coinbase 交易)。 虽然每个新区块的总手续费要比新发行的比特币少很多,但是随着时间的推移,未来比特币发行的数量会越来越少,甚至停止发行。 它将成为共识节点记账的主要驱动力。 此外,手续费还能起到保障安全的作用,防止大量微交易对比特币系统发起“灰尘攻击”。 2、分配机制 随着比特币挖矿生态的成熟,“矿池”出现在人们的视野中。 大量算力小的节点通过加入矿池联合起来,相互合作汇集算力以增加获得记账权的概率,分享新发行的比特币和产生新区块获得的交易手续费奖励.

比特币每个区块多少币_比特币的区块头有多少个字节_比特币一个区块多少币

根据 Bitcoinminning.com 的统计,已经有 13 种不同的分配机制 [34]。 现在的主流矿池通常采用PPLNS(Pay Per Last N Shares)、PPS(Pay Per Share)和PROP(PRO Portionately)等机制。 在矿池中,根据每个节点贡献的算力,按比例分成不同的份额。 PPLNS机制产生新区块后,各合作节点按照其在最后N股中实际贡献的份额分配奖励; PPS直接根据分成比例为每个节点预估并支付固定的理论收益。 该方法的矿池将收取适度的费用,以弥补其为每个节点承担的收益不确定性的风险; PROP机制将根据节点贡献的份额[2]按比例分配奖励。 1.3.6 合约层 合约层封装了各种脚本、算法和智能合约,是区块链可编程性的体现。 比特币本身具有编写简单脚本的功能,而以太坊大大加强了编程语言协议,理论上可以编写实现任何功能的应用程序[28]。 如果把比特币看成一个全球账本,那么以太坊就可以看成是一台“全球计算机”。 任何人都可以上传和执行任何应用程序,并保证程序的有效执行。 如果说数据、网络和共识三个层次是区块链底层的“虚拟机”,分别承担数据表示、数据传播和数据验证的功能,那么合约层就是基于区块链虚拟的业务逻辑和算法。机,是区块链系统灵活编程和数据操作的基础。

包括比特币在内的“数字加密货币”大多采用非图灵完备的简单脚本代码来编程控制交易过程,这也是智能合约的雏形。 随着技术的发展,出现了以太坊等图灵完备的脚本语言,可以实现更复杂、更灵活的智能合约,使区块链能够支持宏观金融和社会系统中的诸多应用。 智能合约的概念可以追溯到1995年,由学者Nick Szabo[35]提出,定义如下:“智能合约是以数字形式定义的一组承诺,包括合约参与者的协议。” 其最初的设计是通过将智能合约构建为物理实体,创造出各种灵活可控的智能资产,但由于计算方法的落后和应用场景的缺乏,智能合约在当时并没有得到研究者的广泛关注[2]. The emergence of blockchain technology has redefined smart contracts and made them possible. As one of the key features of blockchain technology, smart contracts are modular, reusable, and automatically executed scripts that run on the blockchain and can realize a series of functions such as data processing, value transfer, and asset management. When the contract is deployed, it is compiled into an opcode by the virtual machine and stored on the blockchain, and there will be a corresponding storage address. When the predetermined condition occurs, a transaction (transaction) will be sent to the contract address, and all network nodes will execute the operation code generate d by the contract script compilation, and finally write the execution result into the blockchain [28,36-37] .

As an embedded programmatic contract, smart contracts can be built into any blockchain data, transactions or assets to form a system, market or asset that can be controlled by the program itself. Smart contracts not only provide innovative solutions for the financial industry, but also play an important role in the management of information, assets, contracts, supervision and other affairs in social systems. Smart contracts based on blockchain technology can not only take advantage of smart contracts in terms of cost efficiency, but also prevent malicious behavior from interfering with the normal execution of contracts. Smart contracts can be applied to any kind of data-driven business logic. Ethereum first saw the fit of blockchain and smart contracts, and released the white paper "Ethereum: Next Generation Smart Contract and Decentralized Application Platform"[28] , built a public blockchain with a built-in Turing-complete programming language, enabling anyone to create contracts and decentralized applications. The combination of smart contract and blockchain enriches the value connotation of blockchain itself. Its characteristics include the following three points [38-39]: Using the expressive ability of rich contract rules in program logic realizes the communication between untrusting parties. Fair exchange avoids the possibility of malicious parties interrupting the agreement;  Minimizes the interaction between transaction parties, avoiding the possibility of unplanned monitoring and tracking;  Enriches the interaction between transactions and external states, such as trusted data sources Provide stock information, weather forecast, etc.