04-BTC-协议

学习视频来源:https://www.bilibili.com/video/BV1Vt411X7JF/?p=4

本博客除了记录视频内容学习笔记外,还包含少部分自己扩展的内容。

文章目录

  • [1. 中心化数字货币](#1. 中心化数字货币)
    • [1.1 签名方案](#1.1 签名方案)
    • [1.2 签名方案改进](#1.2 签名方案改进)
  • [2. 去中心化货币](#2. 去中心化货币)
  • [3. 区块链节点](#3. 区块链节点)
  • [4. 共识机制](#4. 共识机制)
  • [5. 比特币的共识协议](#5. 比特币的共识协议)
    • [5.1 多数节点/账户投票](#5.1 多数节点/账户投票)
    • [5.2 算力投票](#5.2 算力投票)
    • [5. 3 最长合法链](#5. 3 最长合法链)
  • [6 出块奖励](#6 出块奖励)

1. 中心化数字货币

1.1 签名方案

比如银行要发行一种数字货币,可以使用签名方案。银行将数字货币用自己的私钥签名后发布出去。所有用户知道银行公布的公钥,在收到货币的时候,可以检验货币的真实性。在货币流通时,如用户A给用户B,B也可用银行的公钥校验货币真实性。这样虽然可以保证货币的真实性,但存在双花问题,即一个货币花了2次。因为数字货币本质就是一个文件,用户A可以给B,也可以同时给C。B、C只能验证货币真实性,不能验证是否双花。

1.2 签名方案改进

如果银行将每个数字货币进行唯一编号,并维护一个数据库记录货币当前属于某个用户,就可以解决双花问题。比如一个编号为1货币一开始属于用户A,就记录 1->A。A将货币1给B,首先银行需先确认货币1是否属于A,如果是,就将 1->A改为1->B。如果A又将货币转给C,银行发现货币1属于B,已经不属于A了,就会转账失败。这种方案是正确的,但属于中心化方案且比较麻烦,每次交易都需要向银行确认。

如何将中心化方案银行承担的职能改为由广大用户共同的承担,就是比特币系统要解决的问题。

2. 去中心化货币

一个去中心化的数字货币需要解决2个问题:

  1. 数字货币的发行:谁有权力发行这个货币?货币什么时候发行?怎么发行?发行多少。
  2. 交易有效性验证:怎么验证交易是否有效,防止双花问题。

先看第2个问题,如何验证交易的有效性,这个问题解决方案和中心化方案是有点类似的,也是维护一个数据结构,但不是有某个中心化机构维护,而是由所有用户共同维护,这个数据结构就是区块链。

比特币中每笔交易都要包含2部分,输入和输出。输入包含币的来源,输出部分包含接收者的公钥哈希。

这种数据结构有两种哈希指针,一种是连接区块的哈希指针;一种是指向前面交易的哈希指针,指向前面交易的哈希指针是为了说明币的来源,证明币是可以追溯的,不是凭空捏造的,同时也是防止双花攻击。别的节点收到区块后,会验证里边的交易是否合法,如果发现这个币发送者已经花出去了,就会拒绝区块。

A给B转账时 ,A需要知道B的地址(公钥哈希),不然不知道要转给谁。但比特币系统并不提供这种查询,所以需要其他渠道获取。比如一个电商网站,接受比特币支付,就在自己的网站公布自己的地址。B需要知道A的公钥,不然不知道钱从谁那里转来的。不仅B需要知道,其他的所有节点都需要知道A的公钥来验证A的签名,所以A发起的交易中需要A自己的公钥。如果一个用户C的用自己的公钥替换了A的公钥,并用自己的私钥签名 ,发送给其他节点,其他节点发现交易中的公钥和货币来源中的公钥不同,就会拒绝区块。所以交易里边公钥,要跟货币的来源中的公钥哈希。

3. 区块链节点

区块包括区块头和区块体。区块头包括:比特币协议的版本、前一个区块头的哈希、默克尔根以及和挖矿相关的target和nonce。注意区块哈希是区块头的哈希,不是整个区块的哈希。区块体包含交易列表。

节点分为全节点和轻节点 ,全节点包含区块头和区块体,轻节点只包含区块头,轻节点没有办法独立验证交易的合法性,不参与区块链的构造和维护,系统中大多数都是轻节点。

那么区块是怎么被写到区块链中的呢?每个账户都可以发起交易,交易广播给所有节点,有些节点是合法的,有些是非法的。那么谁来决定哪些交易以什么顺序写到区块链中呢。如果每个节点各自维护自己的数据,各个节点之间的数据一致性得不到保证。区块链是一个共同维护的账本,账本的内容要取得分布式共识。

4. 共识机制

关于分布式共识有很多的理论研究,而且由很多不可能结论。其中最著名的是FLP,FLP是指在一个异步系统里,网络传输时延没有上限,哪怕只有一个成员是有问题节点,也不可能达到共识。还一个是CAP理论,即一致性、可用性、容错性,任何一个分布式系统只能满足其中2个。

5. 比特币的共识协议

在比特币系统中,有些节点是恶意节点,但我们大部分节点是好的,那么我们就可以使用投票的方式来达到共识 。

5.1 多数节点/账户投票

如一个节点发布区块,并广播给其他节点,其他节点验证,如果验证合法就投赞成票,否则投反对票。赞成票数超过一半就认为区块合法,否则不合法。但这样做会产生一些问题:比如恶意节点不停投票或者不投票导致系统瘫痪,无法确定网络延迟每轮投票投多久等等。
任何基于投票的共识,首先要确定谁有投票权 。如果拥有投票权的节点是有严格定义的,比如联盟链,只有大公司、有背书的公司可以加入,这样可以认为节点都是安全的。但是比特币按节点数或者账户数投票是行不通的。因为一个电脑可以启动很多个比特币节点,也可以创建很多个账户(本地产生公私钥对),在外部发生交易之前,别人是不知道的。如果一个超级电脑,启动的节点数或创建账户数超过一半的时候,就有控制权了。这就是女巫攻击

5.2 算力投票

比特币系统不是按照多数节点/账户投票数统计,而是按照计算力投票。

每个节点都可以组装一个候选区块,区块头包含一个nonce值,节点开始尝试nonce值,使得Hash(block header)<=target。如果某个节点找到了符合要求nonce,它就获得了记账权,记账权就是向区块链写入下个区块的权力,才发布下一个区块。

其他节点收到区块之后,要验证这个区块。如block header填的是否正确,计算出的哈希是否满足阈值要求。如果符合要求,再验证区块体中的每个交易是否合法,是否有正确的签名和货币来源。如果验证不合法,区块不被接收。如果一个区块验证合法,但是它是插在中间的位置,不是插在后边,也不被接收。因为通过在中间某个地方插入一个区块,可以回滚以及发生过的交易。新的区块不应该插在中间,而应该插在最后边,扩展最长合法链。

5. 3 最长合法链

比特币协议种规定,接收的区块,应该是在扩展最长合法链。

区块链在正常情况下,也可能会发生分叉。如果两个节点同时获得记账权,并发布自己组装的区块。其他节点接收后,会发生等长的分叉。它会将先来的区块Block1写入了当前的主链(这里记为Block chain A),但这种"写入"是临时可变的,并非最终确认,将后来的区块暂存或标记为分叉区块Block2,(这里记为Block chain 2)。等长的临时性的分叉会维持一段时间。

  • 如果后续收到新区块是在 Block chain A 上构建,则主链延长,Block B 成为陈腐区块;
  • 如果后续收到新区块是在 Block chain B 上构建),且该链变得更长(工作量更大),节点会触发链切换,将主链回滚并切换到block chain B。

6 出块奖励

比特币协议规定,获得记账权的节点,在发布的区块里可以包含一笔特殊的而交易,即铸币交易。铸币交易是发行新的比特币的唯一方法。

这就解决了数字货币的发行问题。

除了铸币交易,其他的交易都是将比特币从一个账户转移到另一个账户,这个过程并没有新的比特币产生。包括我们将法币通过交易所兑换成比特币,中间也没有产生新的比特币。比特币在刚开始的时候,每个发布的区块可以产生50个比特币(BTC),协议规定,每21万个区块之后,比特币数目要减半。再过21万个区块之后,产生25个比特币,再过21万个区块之后,每个区块只能产生12.5个比特币。.

如果一个节点的算力是另一个节点的10倍。那么这个节点获得记账权的概率也是另一个节点的10倍数。所以比特币是基于算力来投票的,和节点数/账号数目无关,从而避免了女巫攻击。

相关推荐
m0_6038887116 小时前
Decentralized Autoregressive Generation
ai·去中心化·区块链·论文速览
反向跟单策略21 小时前
期货反向跟单—高频换人能够提高跟单效率?
大数据·人工智能·学习·数据分析·区块链
知识分享小能手1 天前
Ubuntu入门学习教程,从入门到精通,Ubuntu 22.04 中的区块链 —— 知识点详解 (23)
学习·ubuntu·区块链
电报号dapp1192 天前
钱包开发:在虚无中为数字自我筑巢
游戏·去中心化·区块链·智能合约
数据大魔方2 天前
【期货量化入门】期权交易入门:从零开始学期权量化(TqSdk完整教程)
数据库·python·mysql·算法·区块链·程序员创富
期货资管源码2 天前
期货资管分仓软件开发/平台搭建经验分享
经验分享·算法·eclipse·区块链
数据皮皮侠AI2 天前
上市公司股票名称相似度(1990-2025)
大数据·人工智能·笔记·区块链·能源·1024程序员节
LYFlied2 天前
WebGPU与浏览器边缘智能:开启去中心化AI新纪元
前端·人工智能·大模型·去中心化·区块链
电报号dapp1192 天前
DApp开发:从数字工具到自治理社会系统的构建之路
web3·去中心化·区块链·智能合约