当前位置: 首页 > news >正文

【BTC】协议(共识机制)

目录

一、设计加密货币的初步尝试

1.1 中心化地解决双花攻击

二、比特币要解决的问题

三、比特币交易原理

四、比特币节点类型

五、分布式共识及相关理论

5.1 比特币的共识协议

5.2 比特币分叉问题

六、挖矿的概念及意义

七、总结


一、设计加密货币的初步尝试

在假设存在可信任中性化机构的前提下,思考数字货币的发行方式。若模仿人民币发行,使用密码学中的非对称加密算法来验证数字货币真伪,但该方案存在私钥易泄露、可能引发通货膨胀以及数字货币可复制导致双花攻击等问题。具体如下:

  1. 基于非对称加密的数字货币设计:如果存在可信任的中性化机构,模仿人民币发行数字货币时,可利用密码学中的非对称加密算法。机构拥有私钥用于对数字货币进行签名,用户持有公钥来验证数字货币的真伪。在这种模式下,数字货币的安全性依赖于私钥的保密性。如果央行的私钥泄露,就会导致有人可以无限制的伪造数字货币。
  2. 初步设计存在的问题:
    1. 私钥安全问题:一旦私钥泄露,恶意者就能伪造数字货币,破坏货币系统的安全性。
    2. 通货膨胀风险:在这种设计下,发行机构若缺乏有效约束,可能会随意增发货币,引发通货膨胀,破坏货币的价值稳定。
    3. 双花攻击(double spending attack)隐患:数字货币具有可复制性,不像物理货币那样只能进行一次交易。同一笔数字货币可能被复制多次,用于多次支付,即 “双花攻击”,这会造成交易记录混乱,损害交易对手方的利益。

1.1 中心化地解决双花攻击

上述情况的改进方案及带来的新问题:为解决双花攻击问题,提出为数字货币编号并记录其归属的方案。不过,该方案操作繁琐,实际应用不便,由此引出比特币要解决的去中心化货币相关问题。

  1. 改进方案:为解决数字货币的双花攻击问题,提出改进方案,即为每个数字货币编号,并记录其归属。在交易过程中,每一笔数字货币的流动都需要在账本上详细记录,从一个人转给另一个人时,账本上要明确显示其编号的转移,这样就可以通过查看账本,检测出货币是否被重复使用,从而解决双花问题。
  2. 存在的问题
    1. 操作繁琐:实际操作中,每一笔交易都要记录货币编号及归属变化,随着交易数量的增多,账本会变得无比庞大和复杂。比如在一个交易频繁的场景下,大量的编号记录和查询工作会使交易效率变得极低,增加了系统的负担和运营成本。
    2. 缺乏去中心化信任机制:这种方案依赖于一个中心化的账本记录所有交易信息,就如同传统银行系统一样。在去中心化的理念下,这种依赖中心化机构维护账本的方式是存在问题的。因为在去中心化系统中,没有一个绝对可信的中心机构,若由某个中心来维护账本,可能会出现数据被篡改、信息泄露等风险,而且也违背了去中心化的初衷。

二、比特币要解决的问题

去中心化的比特币需解决数字货币发行交易有效性验证两个关键问题,包括确定谁有权发行货币、何时发行以及发行数量,还有如何防止双花攻击等。

比特币作为一种去中心化的数字货币,需要解决数字货币发行以及交易有效性验证这两个关键问题,具体如下:

  1. 数字货币的发行:在去中心化的体系下,需要确定发行数字货币的主体、时机和数量。在传统货币体系中,货币发行由中心化机构控制,如印钞厂印钞。但比特币系统中,发行权并非由特定机构掌控 ,而是通过挖矿来决定,后续课程会对此详细讲解。
  2. 交易有效性验证:要防止 “双花攻击”,即同一笔数字货币被重复使用。在设计加密货币的初步设想中,若采用类似传统货币发行的方式,数字货币易被复制,导致双花问题。改进方案是为每个数字货币编号,并记录其归属,但该方案操作繁琐,不适用于大规模交易。比特币的解决方法与改进方案有相似之处,同样需要维护一个数据结构来记录货币的流转情况,不过这个数据结构由所有用户共同维护。在比特币交易中,交易需要有签名证明以及资金来源说明,通过哈希指针连接交易,以此证明资金来源合法,进而验证交易的有效性

比特币系统中,每一个账户的地址是通过这个账户的公钥经过一系列哈希运算转换得到的。地址并不是物理下标的概念(一定要和Java中的地址区分开),地址就是一个唯一标识的字符串id。地址就相当于一个银行账号,转账的时候就需要对方用户的地址。

三、比特币交易原理

比特币通过挖矿决定货币发行。在交易过程中,交易需包含签名证明和资金来源说明,使用哈希指针连接交易以证明资金来源合法,通过执行脚本验证交易合法性。同时,介绍了交易中地址、公钥的相关知识以及信息获取方式。

这部分内容中,老师主要以实例讲解了比特币的交易流程、交易所需信息及验证方式,还介绍了比特币脚本在交易验证中的作用和比特币系统中交易的实际组织形式,具体内容如下:

  1. 交易流程与资金来源:假设用户 A 获得铸币权并发行十个比特币,A 将这十个比特币转给 B 和 C,每人五个。该交易需要 A 的签名证明,并说明资金来源于之前的铸币交易。之后,B 又将部分比特币转给 C 和 D,同样需要签名和说明资金来源。在这个过程中,C 收到不同来源的比特币后,若要转给 E,其资金来源的说明会更复杂,可能涉及多个之前的交易。

  1. 交易信息与验证
    1. 交易所需信息:以 A 向 B 转账为例,此交易需要 A 的签名以及 B 的地址。在比特币系统里,收款地址由公钥推算得出,A 给 B 转账时,需知道 B 的地址,获取方式与日常生活中获取银行账号类似,需通过其他渠道获得,比如电商网站接受比特币支付时会公开地址或公钥。同时,A 给 B 转账,B 不需要知道 A 的详细信息,但所有节点都需要知道 A 的公钥,用于验证 A 的签名。
    2. 交易验证方式:每个交易分为输入和输出两部分,输入要说明资金来源和 A 的公钥,输出要给出收款人的公钥哈希。为防止有人伪造公钥进行交易,系统会验证 A 的公钥与资金来源交易中 A 的公钥哈希是否匹配,若不匹配则交易不合法。
  2. 比特币脚本的作用:比特币系统通过执行脚本来验证交易是否合法。每个交易的输入和输出都是一段脚本,验证时将当前交易的输入脚本与提供资金来源的交易输出脚本拼接在一起执行,若能顺利执行则交易合法。后续课程会专门讲解比特币中的脚本。
  3. 交易的实际组织形式:实际的比特币系统中,交易被组织成默克尔树(Merkle Tree)。每个区块分为块头(block header)和块身(block body),块头包含比特币协议版本、默克尔树的根哈希值、与挖矿相关的目标阈值和随机数等信息,块身则包含交易列表。在计算区块哈希时,只对块头进行哈希计算,默克尔树的根哈希值能保证块身的完整性。哈希指针是根据块头进行计算并相互连接的。

四、比特币节点类型

比特币系统中的节点分为全节点和轻节点。全节点保存所有信息并验证每笔交易;轻节点仅保存区块头信息,无法验证交易是否双花,整个比特币系统中,轻节点数量最多,但是轻节点并没有参与到区块链的构造和维护。维护整个区块链主要依靠全节点。所以本课程主要针对全节点讲解:

  1. 全节点:全节点保存比特币系统中的所有信息,并对每一个交易进行验证,因此全节点也被称为 “完全验证节点(Fully Validating Node)”。它能够确保交易的合法性,维护整个比特币网络的稳定和安全,是比特币系统中功能最为完整的节点类型。
  2. 轻节点:轻节点只保存区块头(block header)的信息,无法验证交易是否存在双花问题,因为它没有存储以前的交易信息,不能对交易进行全面的验证。轻节点在系统中的主要作用是提供一种轻量化的参与方式,适用于一些资源受限的设备或场景。
  3. 节点占比与课程侧重:在比特币系统中,大多数节点是轻节点,这是因为轻节点对资源的要求较低,更易于部署和运行。全节点的数目相对较少,这是由于全节点需要存储大量数据并进行复杂的验证工作,对设备的存储和计算能力要求较高。本课程主要针对全节点进行讲解,因为全节点能够更深入地展示比特币系统的工作原理和核心机制。

五、分布式共识及相关理论

这部分内容中,老师先介绍了分布式共识的概念,以分布式哈希表为例说明其在分布式系统中的体现,接着讲解了与分布式共识相关的理论成果,包括 FLP 不可能性结果和 CAP 定理,还提及了 Paxos 协议,最后表明这些理论与比特币实际应用关系不大,课程不再深入讲解,具体内容如下:

  1. 分布式共识概念:在去中心化账本场景中,各节点需对账本内容达成一致,此即分布式共识。以分布式哈希表为例,系统中多台机器共同维护一个全局哈希表,当一台机器插入数据,其他机器读取时能得到相同结果,这就是一种分布式共识的体现。在比特币系统里,各节点要对哪些交易应被写入下一个区块以及写入顺序达成一致,以保证账本的一致性
  2. 相关理论成果
    1. FLP 不可能性结果:由三位分布式系统专家提出,该结论指出在异步系统(网络传输时延无上限)中,即便只有一个成员存在问题,也无法达成共识。这意味着在网络状况不佳且存在故障节点的情况下,实现分布式共识极具挑战性。
    2. CAP 定理:CAP 代表分布式系统的三个性质,即一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)。该定理表明,任何一个分布式系统最多只能满足这三个性质中的两个。例如,若追求一致性和可用性,就无法获得分区容错性;若要保证可用性和分区容错性,就需牺牲一致性。
  3. Paxos 协议:这是一种用于实现分布式共识的著名协议,其优势在于能保证一致性,即协议达成的共识在各成员间是一致的。然而,在某些特定情况下,Paxos 协议可能一直无法达成共识,尽管这种情况在实际系统中出现概率较小,但依然客观存在。
  4. 课程安排:由于这些分布式理论内容丰富且复杂,详细讲解需耗费大量时间,且与比特币实际应用关联度不高,所以本课程不再深入探讨这些理论。

5.1 比特币的共识协议

直接投票的共识方案在比特币系统中不可行,因其易受女巫攻击。比特币采用算力投票机制,节点通过求解计算谜题竞争记账权,获得记账权的节点可将合法交易写入区块并得到出块奖励,奖励以铸币交易形式发放新比特币,且出块奖励会随区块数量增加而减半。

这部分内容中,老师主要介绍了比特币的共识协议,包括直接投票方案的不可行性、比特币采用的算力投票机制、分叉问题及出块奖励机制,具体内容如下:

  1. 直接投票方案的问题:在比特币系统中,存在恶意节点,假设多数节点是好的,有人提出直接投票的共识方案,即节点根据收到的交易信息选出合法交易,对收到的区块检查其中交易的合法性,若超过半数赞成则接受该区块。但这种方案存在诸多问题,如恶意节点可能在区块中放入非法交易,导致其他节点浪费时间投票;无法强迫每个节点都投票,部分节点可能不参与投票;网络延迟会影响投票效率;此外,比特币系统创建账户非常容易,恶意节点可通过创建大量账户进行女巫攻击,操纵投票结果,所以简单直接投票不可行
  2. 算力投票机制:比特币采用算力投票机制解决上述问题。节点将认为合法的交易放入区块,然后尝试不同随机数,求解计算谜题(computational puzzle)。若节点找到符合要求的随机数,即该节点计算出的区块头哈希值小于等于目标阈值,便获得记账权,有权将合法交易写入比特币去中心化账本的下一个区块。其他节点收到该区块后,会验证区块头内容,包括检查目标阈值编码、随机数等是否符合要求,同时验证区块体中的交易列表,只有所有交易合法(有合法签名且未被重复花费),区块才会被接受。

  1. 分叉问题:当两个节点几乎同时找到符合要求的随机数,获得记账权并发布区块时,会出现等长分叉。按照比特币协议,节点默认接受最早收到的区块,并通过隐式共识来判断是否接受某个区块,即若节点沿着接收到的区块继续扩展新区块,就表示认可该区块。这种临时性分叉会持续一段时间,直到某个分叉率先找到下一个区块,成为最长合法链,其他分叉则会被丢弃。分叉可能导致部分区块奖励无法使用,若交易所在分叉不是最长合法链,该分叉上的比特币奖励通常不会被大多数诚实节点接受。

  1. 出块奖励机制:为鼓励节点竞争记账权,比特币设计了出块奖励机制。获得记账权的节点在发布的区块里可包含一个特殊的铸币交易(coin base transaction),凭空发行一定数量比特币作为奖励(不需要指明这个比特币的来源,因为这是凭空创造的全新的比特币)。比特币刚上线时,每个区块可产生 50 个比特币,每产生 21 万个区块后,出块奖励减半,目前每个区块只能产生 12.5 个比特币。虽然出块奖励逐渐减少,但比特币价值提升,现在发布一个区块的奖励价值可观,这促使众多节点竞争记账权

5.2 比特币分叉问题

当两个节点同时获得记账权发布区块时会出现分叉。比特币协议规定接受最长合法链上的区块,一般节点接受最早收到的区块,通过隐式共识判断是否接受某区块,分叉最终会有一个胜出,未胜出分叉上的区块奖励可能无法使用。

在该部分讲课内容中,老师围绕比特币分叉问题,从分叉产生的原因、不同节点对分叉的处理方式、分叉导致的结果以及相关攻击类型等方面进行了详细讲解。

  1. 分叉产生原因:在比特币系统中,当两个节点几乎同时获得记账权并发布区块时,就会出现分叉。这是因为每个节点在本地组装认为合适的区块后,会尝试不同随机数求解计算谜题,若两个节点差不多在同一时间找到符合要求的随机数,都可发布区块,进而形成两个等长的分叉。
  2. 节点对分叉的处理
    1. 接收原则:比特币协议规定,缺省情况下,每个节点接受最早收到的那一个区块。由于不同节点在网络中的位置不同,有些节点可能先收到某个区块并接受它,而另一些节点可能先收到另一个区块并接受该区块。
    2. 隐式共识判断:比特币协议通过隐式共识来判断节点是否接受某个区块。如果节点沿着接收到的区块往下继续扩展新区块,就表明该节点认可这个发布的区块;若不扩展,则表示没有认可。
  3. 分叉导致的结果:出现分叉后,这种等长的临时性分叉会维持一段时间,直到其中某一个分叉抢先找到下一个区块,成为最长合法链,另一个分叉就会被丢弃。被丢弃分叉(orphan block)上的出块奖励往往没有实际作用,因为大多数诚实节点不会接受该分叉上的交易,交易所在的分叉若不是最长合法链,其上的比特币奖励无法得到认可。
  4. 分叉攻击示例:老师举例说明一种情况,若有恶意节点故意在中间位置插入一个合法但不合常规的区块,虽然该区块内交易本身合法,但它不在最长合法链上,实际上等于把之前的转账交易回滚了,这属于分叉攻击(working attack )。在这种情况下,即使交易内容合法,节点也不应接受该区块,因为比特币协议规定应接受在扩展最长合法链上的区块。

六、挖矿的概念及意义

比特币争夺记账权的过程形象地称为 “挖矿”,求解谜题寻找符合要求随机数的过程类似淘金,找到后可获得比特币奖励,获得记账权的节点称为矿工。

在这部分内容中,老师介绍了比特币中 “挖矿” 的概念,将其与淘金进行类比,解释了 “矿工” 的含义,同时阐述了挖矿的意义,包括对发行货币和激励节点维护系统的作用,具体如下:

  1. 挖矿的概念:比特币中争夺记账权的过程被形象地称为 “挖矿”。在这个过程中,节点需要求解计算谜题(computational puzzle),即尝试各种随机数(nonce),使得区块头的哈希值小于等于目标阈值。这个寻找符合要求随机数的过程就像当初的淘金,需要在一个很大的搜索空间中不断尝试,找到的概率很小。一旦节点找到了合法的随机数,获得记账权,就相当于挖到了矿,也可以说挖到了区块,而参与这个过程的节点被称为 “矿工”。
  2. 挖矿的意义
    1. 发行货币:挖矿是比特币系统发行新比特币的唯一途径(铸币交易是产生新比特币的唯一方式)。获得记账权的节点在发布的区块里可以包含一个特殊的铸币交易(coin base transaction),通过这个交易发行一定数量的比特币。比特币刚上线时,每个发布的区块可产生 50 个比特币,之后每产生 21 万个区块,出块奖励减半,目前每个区块只能产生 12.5 个比特币 。
    2. 激励节点:挖矿能激励节点参与比特币系统的维护。节点为了获得出块奖励,会积极参与争夺记账权。虽然随着时间推移,出块奖励逐渐减少,但比特币的价值不断提升,现在获得记账权仍能得到可观的经济回报。例如,当前每个区块的出块奖励价值约 8 万美元,这促使众多节点投入大量计算资源去竞争记账权,从而保证了比特币系统的正常运行 。

七、总结

当有一个矿工节点争夺到区块的记账权之后,在这个区块的所有交易的保存写入都由获得记账权来完成,并不会有多个节点同时记录该笔交易。当这个区块完成构造后,就由该矿工节点对区块链网络发布出去,广播给其他的矿工节点,让大家形成共识,把铸造好的区块都存入到自己的机器当中。每一台期间都存储了整个区块链网络的所有交易数据,这些数据都很小,所以一台机器的存储空间完全足够存储所有的交易数据。

所以可以将区块链系统理解为一个分布式系统,不同的机器处理来自不同的请求,每台机器处理完自己负责的请求后,再将结果数据广播给网络上的其他节点,所有节点同步数据来达成共识。同样一份交易数据,在每一台机器节点上都要存储一遍。

这个和我们之前学习Java体系的分布式中间件原理是一致的,区块链没有任何科研技术上的创新,用的都是现有技术,但是它的设计理念,经济学模型非常超前。


相关文章:【BTC】密码学原理-CSDN博客
                  【BTC】数据结构-CSDN博客

http://www.xdnf.cn/news/1083673.html

相关文章:

  • 自定义指令
  • java+vue+SpringBoo职业生涯规划系统(程序+数据库+报告+部署教程+答辩指导)
  • 【AI大模型】Spring AI 基于mysql实现对话持久存储详解
  • 多模态大语言模型arxiv论文略读(149)
  • 【网络协议安全】任务13:ACL访问控制列表
  • 深度学习图像分类数据集—蘑菇可食性识别分类
  • 使用Python将PDF转换成word、PPT
  • 量子计算机技术(第二节,到底什么是量子)
  • 【CSS-15】深入理解CSS transition-duration:掌握过渡动画的时长控制
  • 高速信号眼图
  • ASP.NET代码审计 Web Forms框架 SQL注入漏洞
  • 【Python】使用读取到的文件
  • 零成本搭建浏览器远程Linux桌面:Ubuntu/Debian方案全解析
  • MySQL数据库主从复制
  • python-if结构、三目运算符
  • 善用关系网络:开源AI大模型、AI智能名片与S2B2C商城小程序赋能下的成功新路径
  • 知识文档管理系统选型指南(中小企业专用)
  • CppCon 2018 学习:What Do We Mean When We Say Nothing At All?
  • 一文掌握Qt Quick数字图像处理项目开发(基于Qt 6.9 C++和QML,代码开源)
  • 计算机网络1.1:什么是Internet?
  • 电商系统二次开发找谁做?ZKmall开源商城前后端分离技术更易升级迭代
  • leetcode 每日一题 1865. 找出和为指定值的下标对
  • uniapp实现的多种时间线模板
  • Redis存储Cookie实现爬虫保持登录 requests | selenium
  • TCP/IP协议栈实现浅析(下) 报文接收相关函数及流程分析
  • 软件版本FCCU(故障采集与控制单元)设计
  • RS触发器Multisim电路仿真——硬件工程师笔记
  • Linux命令大全:按功能分类详解(附表格速查)
  • Altium Designer使用教程 第一章(Altium Designer工程与窗口)
  • 用户中心Vue3网页开发(1.0版)