小白从零开始学习区块链的个人笔记(二) 初识比特币分布式系统

第二章 初识比特币分布式系统

2.1 比特币的最初目的

a. 货币的发展阶段

以物易物->实物货币(主要是金属货币)->纸币->中心化记账货币。
中心化在电子支付中存在信任的问题,见下

b. 电子支付行业的两个基本问题

1.如何不通过权威的第三方,就能够在有需求的双方之间进行在线转账呢?
2.如何在进行电子转账的同时记录付款信息,避免重复支付并确保资金安全呢?

c. 比特币的诞生

为了解决以上两种问题,在2008年,一个化名为中本聪的人,发布了一篇题为**“一种点对点的电子现金支付系统”的白皮书,针对前面的两个问题提出了两种解决方法:
1.在个人对个人的转账中,需要有一种能够
不依附于第三方定价机构**、就能判断其价值的电子货币。
2.我们需要有一份去中心化的数字账本,能够把交易记录及存储的交易信息分发给世界 各地的计算机
因此,伴随着去中心化的期望,比特币应运而生。
比特币是区块链技术兴起的源头,是区块链技术最早、最成功的应用。区块链也进入广大人民的视野当中

2.2 比特币的三个基本概念(钱包,地址,私钥)

a.用户,私钥,公钥,地址四者的关系

公钥、私钥:公钥和私钥是一组配合使用的概念,他们之间有着紧密 的联系。简单来说,私钥是系统随机生成的,公钥是由私钥计算得出 的;公钥负责加密,私钥负责解密;私钥负责签名,公钥负责验证。
比特币实际上是存在于用户的地址
此过程无法逆推
个人的理解

b.交易的过程

交易:利用矿工掌握的私钥,把比特币从一个地址转到另一个地址的行为
一.首先假设A要给B转账比特币,其中CD为路人
在这里插入图片描述
二.
如果A给B发送一些比特币,那么这个交易就有三项信息:
1、输入。这里面记录了最初A拥有的这些币是从哪个地址转给A的。
2、数目。这个就是A到底给B转了多少个比特币。
3、输出。即B的比特币地址。
除了第一笔交易是矿工的挖矿所得外,每一笔交易都拥有一个或多个输入,以及一个或多个输出。
在这里插入图片描述
其中,有三点补充
1.私钥的加密记录了交易的输出者,此处为A。这保证了每一笔交易都可以进行追溯
2.公钥的验证成为公钥脚本,保证了交易的接收地址一定是B的地址

2.3 非对称加密以及如何避免记假账

非对称加密即加密和解密在同一种算法当中不可逆
非对称加密的信息传递当中的工作原理:

1、A要向B发送信息,A和B都要产生一对用于加密和解密的公钥和私钥。
2、A的私钥保密,A的公钥告诉B;B的私钥保密,B的公钥告诉A。
3、A要给B发送信息时,A用B的公钥加密信息,因为A知道B的公钥。
4、A将这个消息发给B(已经用B的公钥加密消息)。
5、B收到这个消息后,B用自己的私钥解密A的消息。其他所有收到这个报文的人都无法 解密,因为只有B才有B的私钥。

在这里插入图片描述

2.4 难以篡改的哈希算法

1.哈希算法的特征

哈希算法的特征
➢ 单向性
➢ 根据任意长度的消息计算出固定长度的散列
➢ 不同的输入就有不同的输出
➢ 算法效率高,计算哈希值的时间
Hash函数必须具有以下性质:
⚫ H可以用于“任意”长度的消息。“任意”是指实际存在的。
⚫ H产生的Hash值是固定长度的。这是Hash函数的基本性质。
⚫ 对于任意给定的消息M,容易计算H(M)值。这是要求Hash函数的可用性。
⚫ 单向性(抗原像性):对于给定的Hash值h,要找到M使得H(M)=h
在计算上是不可行的。

2.哈希指针在区块链之中的作用

数据加密
哈希指针:不仅要保存结构体在内存中的位置还要保存结构体 的哈希值
区块链和普通链表的主要区别就在于用哈希指针代替了普通的指针
在这里插入图片描述

实际运用A——加密交易地址

使用的是单向哈希。哈希树的顶部为顶部哈希(top hash),亦称根哈希(root hash)或主哈希(master hash)。它是通过并联两个子哈希来往树上爬直到找到根哈希。 作用:
1.快速定位每笔交易
2.核实交易数据是否被篡改

实际运用B——挖矿的本质

挖矿:区块头中有个参数叫随机数Nonce, 寻找这个随机数的过程就叫做“挖矿
比特币挖矿过程使用SHA256哈希函数不断运算。挖矿就是重复计算区块头的哈希值,不断修改Nonce值,直到符合目标哈希值过程。哈希函数的结果无法预知,也没有特定模式快速算出哈希值。

2.5 双花问题与UTXO机制

双花问题

双花是什么?

一笔钱被花费了两次甚至更多次,也叫“双重支付”。
在数字货币系统中,数字资产本质上是以互联网为基础的虚拟数字,简单来说所谓的数字资产其实就是一串字符,因此它很容易被复制或者多次发送使用。 在这种情况下,如果没有中心机构的存在,人们并不能确定一笔资产是否已经被花掉,这就导致系统可能存在同一笔数字资产因不当操作被重复使用的情况。

比特币系统中如何避免双花?——UTXO机制

1. UTXO是什么?

• UTXO是Unspent Transaction Outputs的缩写,全称叫做“尚未使用的交易输出”。
• U代表Unspent,表示未支付的或尚未使用的,“尚未支付”指的是这个交易输出还没有出现在其它交易的输入端。
• TX是transaction的缩写,交易是从一个比特币钱包向另一个钱包转账, 是唯一可以改变比特币所有权的方式,包含了输入、数目和输出这些基本内容。
• O是Output,是输出的意思,TXO连起来就是指交易输出。

2.比特币交易之中的UTXO

比特币的分布式区块链账本,就是由一笔一笔的交易形成的,每一笔交易都要花费一笔输入,产生一笔输出,而其所产生的输出,就是“未花费过的交易输出”,也就是UTXO。

比特币里并没有用户帐户的概念。

我们说自己有多少比特币实际上是指的我们拥有所有权的那些UTXO中所指明的比特币的数量。
D有14个比特币,本质上来说其实是当前区块链账本中,有若干笔交易的UTXO项收款人写的是D的地址,而这些UTXO项的数额总和是14。
具体可见下图在这里插入图片描述

2.6 共识算法与工作量证明机制

什么是共识

xx(对象) 对 xx(事) 达成统一的看法

比特币之中的共识

所有的节点哪个节点可以生成下一个区块 达成统一的看法
比特币区块链中共识算法规定,下一个新区块由哪个矿工生成,同时,在这条区块链 上一笔交易要达成,需要被共识算法选出的部分节点达成一致的观点。

几种共识算法

• PoW(Proof of Work,工作量证明)
• PoS(Proof of Stake,权益证明)
• DPoW(Delegate Proof of Work,委托工作量证明)
• DPoS(Delegate Proof of Stake,委托权益证明)
• PBFT(Practical Byzantine Fault Tolerance,实用拜占庭容错算法)

这里主要对比特币网络使用的pow机制进行说明

比特币网络中的共识机制——工作量证明机制

特征:不对称性
进行实际工作的用户需要付出很多的工作量才能得到一个符合已定条件 的结果,但是作为验证方却可以根据用户提供的材料很容易重算这个结果,同时验证这个结果是否满足提前规定好的条件。

在比特币网络中,首先,生成要加入到区块链中的一笔新的交易信息, 也就是新区块时必须满足的要求。然后在基于工作量证明机制构建的区 块链网络中,所有节点开始不断尝试和计算,直到第一个节点找到了那个随机哈希散列的数值解,于是它就得到了生成新区块的权利。
优点:完全去中心化
缺点:1. 挖矿行为造成了大量的资源浪费
2. 达成共识所需要的周期较长
个人理解:通过给一个哈希值,经过穷举法不断进行加密运算直至得到原表达式,然后经过验证可以很容易得到结果是否正确的结论

2.7 区块高度,51%攻击, 矿池与算力

区块与区块高度

区块是构成区块链的基本单元,由区块头区块主体构成。在区块头中包含了前一个区块的哈希信息,可以帮助新区块和之前的区块联系起来;而区块主体则包含了这一段时间内所有的交易信息。
在这里插入图片描述

区块头是什么

在这里插入图片描述

1)版本号(Version)
用来标识交易版本和所参照的规则。例如安卓10,或者iOS13,区块也有自己的版本号。
2)前一区块哈希值
也称“父区块哈希值”,这个哈希值通过对前一个区块的区块头数据进行哈希计算(SHA256算法)得出,它的意义在于:每个新挖出的区块都按秩序接在前一个区块的后面;这样,挖出新的区块后,你才能安心地喝一口茶,因为你很清楚这个区块是跟在一个被各节点验证过的可靠的区块后头。
3)默克尔根(Merkle Root)
如上图,在区块主体中,所有交易信息先进行两个一组的哈希计算,这种结构叫做Merkle树(Merkle Tree),而且是一棵倒挂的树。
我们把问题简单化,假设区块主体中有4笔交易信息,分别是交易1,交易2,交易3,交易4。Merkle树先对每个交易信息进行哈希Hash计算,分别得出Hash 1 、Hash 2、Hash 3、Hash 4。
到了第二层,像班主任安排座位一样,两个一组,也就是说 Hash 1 和 Hash 2 的字符串排排坐,变成2倍长的字符串,然后算出这个字符串的哈希值,我们记做 Hash(1&2);Hash 3 和 Hash 4 同上办法处理,得到 Hash( 3&4),再往上算,Hash(1&2)、Hash( 3&4)这两个字符串又合并,接着进行哈希运算,这个最后的哈希值就是区块头的Merkle树根。
对比特币来讲,真实情况是一个区块主体包含约4000多笔,更多的情况大家就举一反三吧,总之就是不断两组合并、哈希运算,依次往上计算,直到算到最后一个哈希值。
Merkle树能够快速检验交易数据的完整性,即数据是否被篡改过。根据密码学中哈希函数的特点,如果有人对数据做过手脚,计算出的哈希值也会变得完全不一样。哪怕在这4000笔交易中,我只移动了一个小数点,你也能从Merkle树根的哈希值发现问题。
在这里插入图片描述
4)时间戳(Time)
记录这个区块生成的时间,精确到秒。每诞生一个新的区块,就会被盖上相应的时间戳,这样就能保证整条链上的区块都按照时间顺序进行排列。
5)难度值(Target_bits)
挖出该区块的难度目标。每产生2016个区块,数据区块运算难度会调整一次。比如,比特币区块链网络能够自动调整挖矿的难度,让矿工每10分钟才挖出一个区块。原本需要14天才能挖完2016块区块,但不知哪个天杀的突然弄来几台算力爆表的矿机,7天就搞定了,这就意味着到预定调整期的时候,挖矿难度会增加一倍。
6)随机数(Nonce)
挖矿相当于矿工做数学题,他们利用计算机或矿机的算力(hashrate),经过大量的计算(专业一点称“哈希碰撞”),试出一个正确的区块哈希值;很多时候我们也把挖矿称作争夺记账权。在这里插入图片描述

区块主体是什么

用来记录交易信息的地方,在比特币中,每个区块大约储存十分钟的交易信息,然后下一个区块生成,交易信息就接着存储在下一个区块,以此类推。
这个十分钟的交易信息是由区块平均生成速度决定的,并且会根据挖矿速度改变。举个例子,比特币设定让矿工每10分钟才挖出一个区块。原本需要14天才能挖完2016块区块,但不知哪个天杀的突然弄来几台算力爆表的矿机,7天就搞定了,这就意味着到预定调整期的时候,系统便自动提高挖矿难度,使得区块生成速度总体趋向稳定的十分钟

区块高度是什么

区块高度是用来标识一个区块在区块链中位置的一个概念。
在这里插入图片描述

矿池

将许多算力合并之后,共同运作形成的网站

算力

算力,也叫哈希率,是用来衡量进行哈希运算的能力的指标,或者说进行
一次哈希计算所需要使用的时间。如果说网络达到了10T hash/s(10T哈希每秒)的哈希率时,就意味着它可以每秒进行10万亿次计算。
哈希碰撞:解出随机哈希值不断尝试的过程。
一个挖矿机每秒钟能做这种碰撞的次数,代表其算力。
矿工进行挖矿所使用的机器越先进,算力就会越高。

51%攻击与悖论

整个网络中有人的算力超过了全网的50%。那么他就可以尝试对区块链的状态进行修改,进行反向交易,实现双花。
可见https://www.jianshu.com/p/d6be6637edc1

发布了3 篇原创文章 · 获赞 0 · 访问量 62

猜你喜欢

转载自blog.csdn.net/weixin_45067603/article/details/105444151