浅谈挖矿获取比特币

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gq15238209541/article/details/79760429

前言:在写这篇文章之前,我查看了比特币白皮书和一些网络博客。通过反复的理解和思考,现浅谈一下自己对比特币的理解,也是对自己学习的总结,望能与君共勉。

首先我们要了解比特币和区块链是两个概念,区块链是一种技术,这种技术是一种去中心化的一种技术,而比特币是这种技术的第一个应用。去中心化到底是个什么东西呢,举个例子,传统的银行、第三方支付机构都是应用中心化的技术,他们承担的角色是信任中介。而去中心化是直接点对点之间的交易,不需要任何第三方,他是基于密码学原理,不基于信任,杜绝回滚支付交易的可能,也就是说应用区块链这种技术产生的交易是不能回滚的。

可能还有一些同学对比特币还是一张白纸,那么我先通俗易懂的举个例子帮助大家在脑海中构建一个模型:

在一个封闭的小渔村里,渔民靠打鱼为生,现在小王要给小刘5条鱼:那么用比特币的思想就是:

小王先把借给小刘5条鱼这件事告诉全村的人;

村民知道后,去小王家确认小王有足够的鱼可以给小刘,然后村民在自家的本上写上小王家鱼少5条,小刘家的鱼加5条;

然后村民外出打鱼,互相传递小王借给小刘5条鱼这件事,一传十十传百,大家都知道这件事,确保账本的一致性。

那么肯定有些渔民不愿意徒劳去做这件事,为了解决这个问题,大家伙一致决定,谁先确认小王借给小刘5条鱼这件事,给一条鱼的奖励,那么大家都积极做这件事。

那么奖励这条鱼是从哪来的呢,这就是今天要说的比特币的产生。挖矿其实是一个记录交易信息并打包成块的过程,比特币系统每十分钟就会产生一个块,而第一个打包这个块的人将获得一定的比特币奖励。

比特币总共发行2100W个,每生成一个块周期10分钟,一个块奖励一定数目的比特币。最开始挖矿每个块奖励50个比特币,以后每21000个块奖励减半(约4年奖励减半一次),现在每生成一个块奖励12.5个比特币。每个块的生成时间10分钟,但是随着计算机技术的发展,现在的挖矿算力在不断升高,那么生成一个块的时间肯定小于10分钟,这就需要一定的控制措施来保证这个时间。这个措施就是挖矿难度,如果每个块产出时间小于10分钟,则提高挖矿难度,大于10分钟则降低挖矿难度,每次难度调整时间为2016块,即2周。

挖矿难度会在每2016个块后所有节点都会按照一定的公式自动进行调整,这个公式由最新的也就是这个周期内2016个区块的花费时间和期望的时间(期望时间20160分钟即两周)比较得出的。

新难度 = 旧难度值 * (过去2016个区块花费的时长 / 20160分钟)

然后是几个概念要理解比特币:本质是一串数字签名   公钥:可以理解为比特币钱包的地址   私钥:可以理解为比特币钱包的密码

节点:比特币去中心化的点对点网络,存在不同功能的节点。   矿工:参与记录交易打包区块,验证区块的节点,可以获得奖励比特币

hash:可以理解为一种数据加密

交易     

Owner1 交易比特币给 Owner2: 首先创造这个交易:用上一次交易和Owner2的公钥进行hash,然后用这个hash和Owner1的私钥进行签名。这条交易就算完成了,然后向全网进行广播。

全网节点收到这条交易,首先进行验证,Owner1会在交易的末尾公布自己的公钥,用Owner1的公钥进行计算,得到的结果和这个签名一样,则说明这个交易确实是Owner1签发的。Owner2得到一条支付记录也就是说拥有一定量的比特币,他可以用别人的公钥创建一条新的记录把他花出去,但是这条记录里包含你从别人那里收到这条记录的信息。


如果你同时创建多条记录把你的比特币花出去,那么这个系统就会乱套。为了解决这类问题,中本聪提出的方案是引用时间戳服务器来解决这类问题,这里的时间戳服务器 并不是一个中心化的东西,他的时间取之所有时间连接节点的中位数,也是多数人的正义。时间戳服务器会对以区块形式存在的一组数据进行hash,并加盖上时间戳,然后把这个hash进行广播。因为时间戳是唯一的,所以它能确定这个时间点特定的数据必然是存在的。每一个时间戳都会把前一个时间戳纳入其hash中,每一个随后的时间戳都对之前的时间戳进行了增强,这样就形成了一个链条。

所有节点收到交易记录都开始打包,但是每个人打包的交易记录可能不一样,时间戳也可能不一样,所以每个节点打包的hash是不一样的。这就要所有的节点达成共识,那么怎么达成共识呢,解决方案是PoW,通过工作量证明进行抢夺记账权。每一个区块都是由去块头和区块所包含的交易列表组成。去块头的大小为80个字节,4字节的版本号,32字节的上一个区块的hash,32字节的Merkle root hash,4字节的时间戳,4字节的当前难度,4字节的随机数。区块包含的交易列表则附加在区块头后面,其中的第一笔交易是coinbase交易,这是一笔为了让矿工获得奖励及手续费的特殊交易。

80个字节的区块头是工作量证明的输入,经过双SHA256的计算,不断变换随机数(nonce)使最后的结果小于当前网络的目标值,则为解题成功,工作量完成。

上边提到的当前网络的目标值计算公式为:  目标值 =  最大目标值 / 难度值

当一个节点找到工作量证明,就向全网进行广播,然后就是全网其他节点进行验证,如果该块中所有交易都有效且之前未存在过其他节点,那么才认为这个块有效。验证通过后,这个节点就不会再接受别的节点的同样区块了,同时这个节点会终止自己正在进行的包含同样交易的计算。

其他节点表示他们接受该区块,方式为:转向下一个工作量证明并使用这个块的hash作为下一个块的前一个hash。

节点始终都将最长的链条视为正确的链条,并持续工作并延长它。但是如果两个节点同时广播不同版本的区块,那么其他节点在接受到该区块的时间上由于网络的原因可能由先后差别。一般地,他们都会为先收到的区块基础上进行工作,但是也会保留另一个区块,(这里的区块是不同版本的),以防止它变成最长的区块。直到下一个工作量证明被发现,因为下一个区块用到上一个区块的hash最为它的上一个hash。所以其中一条链被证明为最长的一条诚实链。那么在另一条分支链上工作的节点将转换阵营,开始为最长的链工作。

没有更多推荐了,返回首页