主页 > imtoken苹果版官网下载 > 比特币?看这篇文章就够了(下):记录就是价值

比特币?看这篇文章就够了(下):记录就是价值

imtoken苹果版官网下载 2023-03-25 05:50:37

在前面两篇文章中,白皮哥已经为大家整理好了:

事实上,前两篇文章主要关注的是碎片化的知识。 很多小伙伴看了之后觉得基本看懂了。 哦,是这样,但是那又怎样呢? 矿工、钱包、全节点客户端如何在比特币系统中发挥作用? 椭圆曲线算法和哈希函数在比特币的运行中是如何运作的?

1.进入网络(以核心客户端为例,其他类型节点类似)

A听说比特币挖矿很贵,就买了一台笔记本电脑准备挖矿,下载了比特币核心客户端准备挖矿。 还记得这张照片吗?

他按照说明启动了比特币核心程序。 这时,A的笔记本电脑进入了比特币网络,成为了一个节点。 此时,节点A开始在网络中寻找另一个比特币节点(通过网络路由),很快,它找到了一个节点B,并且bitcoin core的版本是兼容的。 A让比他在网络方面更有经验的B介绍他所连接的节点的地址。 这样,通过层层推介,A知道了很多节点,当A有消息要广播时,就会告诉它知道的节点。 但是A不喜新厌旧。 它会记住第一个连接的节点B,当A重启时,它会直接去B,这样就可以完成网络关系的获取。

因为比特币网络中的节点随时都会退出,网络中的每个节点都必须接受这个事实,所以在没有消息广播的时候,A也会定时给其他节点发信。 如果一个节点在90分钟内没有响应,A就会认为自己挂了,然后寻找新的节点来维持连接的节点数。 当然,网络中随时都会有新人加入,A也会将自己的通讯录介绍给找到它的新节点,帮助新节点启动。

2017年比特币事件_比特币黑客事件_比特币大事件

这样比特币大事件比特币大事件,比特币网络中的节点同时连接到多个节点,形成一个网络结构。 任何节点的退出和进入都不会影响整个比特币网络的稳定性。 意义请参考这篇文章:区块链是劳动人民对银行家的宣战。

找到朋友后,A作为比特币核心客户端,属于全节点客户端的一种,需要构建完整的区块链,但之前从网上下载的客户端软件只有第一个区块(创世区块)。 块),因此 A 需要同步链上所有后续块。 事实上,当任何两个节点相遇时,它们都会相互比较各自的区块链长度(区块高度)。

由于A只有一个区块,肯定不如这些网络老手,所以B会将自己的前500个区块的hash发送给A,A验证后将hash发送给A(见下图区块结构) . 所有连接的节点请求块内容,并逐块构建整个区块链,直到赶上最新的块。 在构建区块链时,A 是一个真正的全节点客户端。 当然,如果A下线了,再次上线时还是要像上面说的那样“补课”。

2. 付款

图中,交易1是C在区块链上向矿工E购买比特币的交易:

2017年比特币事件_比特币黑客事件_比特币大事件

3.挖矿

A加入比特币网络后,终于完成了区块链的同步。 假设当前一共有1001个区块,上述交易1在第999个区块中。 现在A开始挖矿,收到上面C到网上发来的购买咖啡的交易,验证:

交易 1 的第一个输出是交易 2 的输入(C),

交易1的输出(1)大于交易2的输出(0.005+0.994),

被锁定的脚本可以被交易2解锁,因此是有效交易,加入交易池进行打包。 请注意,事务 2 的输出 (0.005+0.994) 小于其输入 (1)。 这个差价就是手续费。 手续费越高,矿工越早将交易从池中取出打包。

2017年比特币事件_比特币大事件_比特币黑客事件

此时第1002个区块的竞争刚刚结束,A没有成功。 于是,它接受了网络同步过来的第1002个区块,开始自己打包第1003个区块:第一笔交易是coinbase交易,输入为空,输出为自己,个数为12.5:

这是对矿工的奖励。 然后A又打包了4000笔交易(无限打包,区块大小要小于1M),其中就是上面的交易2,这些交易中的手续费都是A的,然后A需要给这些打包好的区块头加上区块头形成一个完整区块的交易:

(绿色为区块头,蓝色为区块内容)

简而言之,假设系统当前的挖矿难度要求区块头的Hash值前6位为0。A不断修改区块头的nonce值,计算每个区块头的Hash,最后计算出区块头的Hash值为0000002a7bb274121cbd.... 满足难度要求。 此时A还没有收到广播区块(如果收到则挖矿失败,放弃,重新打包区块1004),于是迅速将这个包含交易2的区块广播到比特币网络。

比特币网络中的其他矿工节点(如B)收到A发送的1003区块,进行校验(Hash算法只能遍历,但很容易知道输入是否容易校验输出是否正确)和发现区块头的Hash满足难度要求。 只需将1003区块添加到自己的区块链中,放弃自己的打包,重新打包挖出1004区块。并将A的1003区块广播给其他节点。

比特币黑客事件_比特币大事件_2017年比特币事件

4.验证

5.小问题

上面的一切都很完美,但是有一个小问题。 当矿工A打包1003区块(下图正三角)发送给B等人时,千里之外的另一个矿工F也挖出一个1003区块(下图倒三角)发送到网络广播呢(虽然不太可能)? 现实中,网络传输是有延迟的:

此时A和F分别将自己的新区块告诉邻居,邻居也同意加入链。 此时全网分为两大阵营,三角派和倒三角派。 这种情况称为分叉:

当某个阵营的节点收到对面节点的新区块时,不会丢弃,而是默默保存。 但以原文为准。 当挖出下一个区块1004时:

2017年比特币事件_比特币黑客事件_比特币大事件

因为挖出1004区块的人是三角派,所以当1004区块传给倒三角派时,倒三角派就会反叛三角派,因为这个绿钻的链条更长。 当菱形扩散到全网后,全网的认识将再次统一:

这就解决了同时挖出不同区块的问题,也就是解决了一笔钱花两次的问题(类似于你和你爸同时在两台ATM取钱的问题)。 那么喜欢争论的你,如果第二个区块(区块1004)也同时被挖出两个不同的呢? 当然是在等1005区块,实际上1个区块的分叉几乎每天都有,2个区块的分叉几周才出现一次。 目前分叉最多的是5个区块的分叉:2015年7月4日,因为区块版本升级(2到3),倒三角派(2版)不接受三角派(2版)的新区块3)、必须等待自己派系的新区块被挖出后才能接受,这样就形成了第5区区块分叉。 最后通过代码升级消除了fork,解决了以上问题。

分叉会导致交易回滚的问题。 例如,假设C买咖啡的交易2被矿工F挖出,存在于倒三角区块中,但倒三角区块最终因为分叉而被放弃。 这时,D看到了账户里的钱,给了咖啡。 过了一会儿,叉子不见了,钱又不见了。 所以一般来说,钱包应用会等到倒三角区块加入6-8个新区块后才会确认账户,因为当6-8个区块都是基于倒三角区块时,基本没有fallback(如果有是一个后备,这将是比特币系统的一件大事)。

好的,你知道区块链是如何工作的吗? 本文重点介绍实现事务的部分。 我们可以看到,比特币的优势在于每一笔交易都是相互关联的。 如果我要花一笔钱(在交易中加上“输入”),我必须提供一笔交易的“输出”,并证明这笔交易的输出是给我的。 而交易就是所谓的“账户”。 而且比特币中没有“余额”的概念。 你在比特币钱包中看到的所谓钱包余额,其实就是钱包筛选出“输出”为钱包地址的交易,不列为任何交易输入。 (未花费的交易输出)称为UTXO(未花费的交易输出),它们的总和就是余额。

不同于现在的银行系统,区块链系统将“账户”和“资金”合二为一。 没有记账、清算、结算的过程,没有不平衡的账户,因为这个账户是绝对可靠的,账户上的钱应该是按照账户上的交易来计算的。

“因此,区块链上的每一条记录都是有价值的,每一笔交易都是资产。”