目录
因为账本要得到维护账本的每个人的同意,得到大家一致的认可,那这个账本每添加一页(即一个区块)的时候该如何记账?
比特币共识机制包含两方面的内容:这一页添加在哪里?这一页由谁来写?
1、最长链:大家一致认可、同意最长链(就是接在目前网络里最长的这个链上的区块才是有效的)
2、工作量证明机制(POW)
为什么网络里会出现多条链?
1、网络中的人互相不认识,各自的网络速度也非常不一样。当区块链上新产生一个区块的时候,网络快的人就有可能看到这个新区快,于是就在新区快上接上自己挖出来的区块。网络忙的人可能没有看到,他就有可能在旧的链上继续挖矿、接上区块,从而导致分叉;也有可能两个人同时抢到记账权,此时其他的矿工该在哪条链上继续接自己挖出来的区块呢?答案是依据他们自己的判断。过一段事件之后,网络中总会出现那一条最长的链,最后大家只承认那条最长的链。
工作量证明机制
工作量证明机制就是要找到一个Nonce使得当前区块头的哈希值小于系统规定的数。Nonce是工作量证明机制的关键。
挖矿:只有第一个找到Nonce的人才能在区块链账本上新添加一页,即创建这个区块,这就是挖矿的过程。
难度是衡量找打这个规定的哈希值有多难的指标。难度越大,对应的满足系统条件的Nonce值就越小。
中本聪很早就预料到,随着社会的进步发展,每个人电脑的能量越来越大,使用的计算资源越来越强,如果难度太低,大家找到系统规定的满足一定哈希值的Nonce就非常容易,就会导致速度太快。于是,中本聪在2009年区块链创建之初的时候规定难度为1,并定期调整难度,让难度越来越大,使得区块头哈希值需要满足的这个值越来越小。中本聪设定的难度调整原则描述如下:
每2016个块调整难度,使得平均10分钟出一个块。
一天(60*24)/10=144块
2016块/144块 = 14天
也就是说,每14天调整一次难度来保持平均每10分钟出一个块的速度。
找到符合规定的Nonce有多难?
大概率来说,分母就是找到Nonce需要尝试的次数。
思考:找到符合规定的Nonce如此困难,维护网络的人为什么要干这么一件看似毫无意义的事情?2.2节有答案哦!
银行帮助我们实时记账、记录我们的所有交易并提供优质的服务主要是由于银行的收入和利润来自于我们的存款(银行把我们的钱贷款给需要钱的人然后收取利息)。那么,在比特币的世界里那些记录我们转账交易的矿工能得到什么好处呢?
矿工: 是维护比特币网络的人,同时也是在网络里希望能够抢先算出Nonce的人。
激励矿工工作的第一个奖励:系统发放的奖励。
矿工只有率先算出Nonce使得当前区块的哈希值满足一定的条件,并且将区块接在目前网络里最长的一条链上就能够得到系统发放的奖励。
2020年5月之前,每个创建区块抢到记账权的矿工都能得到12.5个比特币的奖励,每隔十分钟创建一个区块,相当于每隔十分钟就有一个矿工得到了奖励。但是,由于比特币的总量只有2100万枚,到2140年就发放完毕(详见第一章),那么2140年后,矿工抢先获得记账权会得到什么奖励?
激励矿工工作的第二个奖励:交易手续费
当我把比特币转账给别人的时候,通过比特币网路进行转账交易,该交易就会被矿工打包放到他的区块里。此时我需要给矿工手续费,如果我不给他,他就不会把该交易放在他的区块里。当该矿工成功计算出Nonce抢到记账权并得到网络里其他所有人的确认的时候,他的区块里的所有交易就会被成功记录在比特币的网络里。我的转账交易在这个时候才是真正的完成了。
矿工不仅可以得到系统奖励的12.5个比特币,还可以得到他的区块里的所有交易的交易手续费。
比特币网络中的交易手续费与交易金额并没有什么关系,而是和你的心情相关的。如果你的心情好就多给交易手续费,矿工看到你的手续费高就会优先把你的交易放在区块里。反之,如果不给交易手续费,矿工就不会把你的交易放在他的区块里。
为什么矿工有这么大的选择权?
第一章1.6节讲到,比特币区块的容量是有限的,每10分钟只能记录容量为1MB的交易量。记录不了网络里产生的所有新的交易。如果大家都是用比特币网络进行支付转账,矿工一定会优先记录交易中手续费给的更多的交易。所以,你的交易是否顺畅、是否能够成功的被记账取决于你给的交易费有多少。
矿工得到系统发放的奖励越来越少(每四年一次减半),而挖矿的难度却是指数级的增加,矿工是否很不划算?
比特币的价格
2011年2月,首次从零点零零几美分涨到了一美元一个。那时候抢到记账权的矿工能够得到的系统奖励是$1*50=$50。
2015年2月10日,比特币的价格已经是240美元,系统的奖励是$240*25=$6000。
2019年2月份,比特币价格为4000美金,系统的奖励是$4000*12.5=$50000。
2020年5月,
可以看出,矿工得到的比特币的数据是越来越少了,但是它的金额实际上已经翻了好几千倍。
安全的转账支付系统,避免双花(1.3节)
比特币系统采用的就是共识机制*激励的双重作用,使得比特币点对点的电子现金系统能够避免双花。
双花导致的结果:一方受损另一方获利。
比特币中的双花是什么?
分叉之后的短链上的交易都是无效的,小明就是受损的一方,因为他已经把对等价值的商品给了张三。张三是获利的一方,他把钱花了两次(一次给小明,一次给大熊),而真正有效被记录的那次转账交易时给大熊的那一次。
思考:张三能不能在分叉点后建立更长的链,即能不能成功的进行双花?
由于比特币的激励机制,矿工都会在更长的链上进行挖矿,而在张三给大熊的这条链上挖矿得不到任何好处,所以大部分的矿工还是会在原来的那条链上进行挖矿,原来的那条链会越来越长。所以张三不能成功进行双花。
因此,比特币网络中的共识机制和激励机制强强联手可以成功避免双花。
如果想双花的人的计算能力比所有人都强大,那么他就会双花成功,他会比所有人更可能抢到记账权。但是为什么比特币系统一直都没有人能够成功进行双花,破坏系统的安全性呢?继续学习下一节吧!
算力:每单位时间的哈希运算的次数:H/S(Hash per second),读作哈希每秒。
例如:1TH/S=10^12H/S,代表每秒钟可以运行10^12次哈希运算。
2020年5月份,计算的难度为16.1T,所以算力为16.1*10^12*2^32/600s=115*10^18H/S=115EH/S(这个是全网算力)。再次说明,难度的设立是为了保证比特币系统平均每10分钟产生一个区块,以为就是平均10分钟找到一次答案,不能太快也不能太慢。
回到上一节提到的双花问题:如果想双花的人的算力比所有人都大,那么他一定会双花成功。
比如想双花的人占有系统51%的算力,即115EH/S*0.51=57EH/S的算力就一定可以双花成功。那么:
第一,拥有这么大的算力需要多少成本:
矿工的三大成本:
设备:进行哈希运算
电费:维持机器运行
运维:搬运和维护
挖矿设备:
cpu->gpu->ASIC矿机
如上,是一台销量很大的矿机,算力是73TH/s,价格是2019美金。
拥有全网51%算力需要多少台这样的矿机?
57EH/s?73TH/s=781,000台
需要投入的资金:
718,000台×$2019/台=$15亿
想要双花的人需要15亿美金,这还不包括运维费和电费。
双花可能获得的收益是什么?
需要至少取消以前对别人15亿美金的支付,相当于给了别人15亿美金的价钱,即使这样,还只是弥补了购买设备的花销。按照比特币2020年5月份一万美金一个的价格,15亿美金相当于15万个比特币。双花的人需要取消以前对别人支付的15万个比特币。这是不可能的:
第一,在比特币价格如此高的时候,谁会有那么多的比特币一下子拿出来打给别人呢?
第二,如果谁敢一下子拿出那么多比特币,谁敢收呢?他收的时候一定会等,因为他不相信,害怕这是假钱。所以当系统中出现一个人支付给另外一个人15万个比特币的时候,不仅仅收费方会警觉,矿工也会警觉,所有监视区块链系统的人都会警觉。因为所有在比特币系统里转账的交易都是公开透明的,只是不知道是谁给谁转的账,转账的金额大家都能看到,地址也能看到。收币方会担心双花的可能性,所以他会等很多区块会接在包含他的转账交易的区块的后面,他会迟迟不去确认收到这笔钱,不会拿着商品去交换15万个比特币。
所以,如果有个人的计算能力比所有人的都大,他想双花比特币系统、想攻击比特币系统,他一定可以双花成功,但是他的花费是巨大的,想获得相当的收益可能性是很低的,总之就是费力不讨好。所以这种人存在的可能性是非常低的。这就是为什么中本聪的假设非常合理的原因:他假设掌握系统大部分算力的人是不会攻击比特币网络的。
比特币双花可能性不大的因素:
全网的算力
币的价格(决定性作用)
算力、币的价格与安全性之间的关系:
如果某个区块链网络的历史非常长,那么它上面积累的算力可能就很,也有很多人参与这个网络。那么想要算力比别人的都大,就要花很多钱来购买算力,要想双花的成本就越非常高,就越不可能有双花现象的发生,网络的安全性就越高。网络安全性越高,那么网络上支持币的价格才会坚挺。如果用于转账的网络的安全性都不高的话,那大家肯定就不会用这个网络了,不安全的网络上跑的这个币的价格就会归零。所以,安全是维持币的价格上涨的重要因素。矿工挖矿得到的币的价格一定要高于他挖矿的成本才会投入算力来进行挖矿。在币价非常低的时候,会出现矿机关机、矿机甩卖等现象,这种情况会使得网络的算力下跌。所以,一个区块链项目最开始运行的时候,提高网络的算力以吸引大家都来参与这个网络是非常重要的,因为参与区块链网络的人越多算力就会越大。如何吸引更多的人来参与维护网络?这是一个慢慢发展的过程。比特币网络运行11年来,越来越多的人参与到了网络的维护中,币的价格也越来越高,从来没有出现双花攻击现象,也没有出现过信任危机。但是,有的区块链网络运行的币却没有这么幸运,多次遭到双花攻击。
思考题:全网算力和币的价格是什么关系的时候,区块链网络最有可能遭到双花攻击?
中本聪论文“比特币 点对点的电子现金系统”摘要:第一,做一个点对点的电子现金系统,让一个人给另外一个人转钱不需要经过任何中间金融机构,数字签名虽然能解决部分的问题:保证我的交易是我发起的,但如果需要依赖中心机构解决支付双花的问题,点对点的电子现金系统的优势就被减弱了。第二,网络上把所有的交易都加上了时间戳,通过哈希函数把交易记录在基于工作量证明的链条上。除非重新完成全部的工作量证明,否则不能更改记录的交易。第三,最长的链条不仅能证明发生交易的先后顺序,而且是由最多的CPU计算能力形成的,只要大部分的算力掌握在不会攻击网络的节点的手里,他们就会比攻击者快速、创造出来的链最长。第四,网络只需要最少的组织结构,信息从节点处尽最大的努力播报给全网,节点可以随意离开和加入网络,加入时会接受最长的链,作为易发生事情的权威记录。
问题一:既然区块链上的信息和交易不可逆装,如果我错误的进行了一笔交易,那我是不是真的没办法去取消这笔交易?
答:并不是一定不能取消。这要看是公链还是联盟链。
如果是公链,要取消原来的交易的话,就必须要新产生一条链,就必须分叉。分叉的前提是你能够产生一条新的链比原来那条链更长,此时你就可以取消原来那条链上的交易了。(很难,一般都是都是通过分叉的形式。)
如果是联盟链,只要大家商量好,联盟链之间觉得可以取消这笔交易那就可以。
问题二:比特币系统挖出的区块经过六次确认后就难以篡改了,这是为什么?
答:因为当比特币里面的区块后面已经接了6个区块的话,这个区块里的内容就非常难以篡改了。这是因为你需要比这条链多挖7个区块才能比原来那条链长,才能取消原来那条链上的交易。但是比别人快7个区块是非常难的:如果你的算力占全网算力20%的话,挖到一个块的概率即使20%,连续挖两个块(比别人多一个块)的概率就是0.2*0.2;如果相比别人多挖7个块的话,这个概率是指数级降低的,在你现有的算力下基本是达不到的,除非你拥有全网51%以上的算力。
问题三:矿工分布于世界各地的不同时区,如何保证每个挖出块的人他的时间线都是一致的?另外,时间戳上的时间到底是什么时间,是纽约时间、伦敦时间还是北京时间?
答:区块链上的时间戳是矿工加上去的,矿工分布在世界各地,每个人用了自己的机器,一般来说大家用的都是时区0的时间,矿工会根据自己机器系统的时间把区块产生的时候的时间写上去。所以说,大家一般来说是用的统一的一个时间。
问题四:矿工是否需要打包交易才能出块?如果所有人都不支付手续费的话矿工是否还会出块呢?
答:区块是不一定非要打包交易的。矿工打包交易的一个非常大的动力是交易的执行者(就是转账比特币的人)需要支付手续费,所以矿工一般会把交易打包在他的区块里。但他不打包这些交易也是可以挖块的,例如:如果比特币没有任何人使用里面就没有交易(比特币系统创建之初,没有人使用),但那个时候比特币网络也是一直都在出块的,按照平均每10分钟出一个块的速度一直在出块。所以,如果区块里不打包交易的话,也是可以出块的。因为现在又交易手续费的激励,矿工就愿意把交易都打包在区块里。
问题五:比特币可以用来消费吗?如果不可以,人们获得它的目的是什么?
答:比特币再有的国家可以用来支付的,有的国家是不允许用来支付的。但由于现在的比特币有价格、有交易,大家可以把比特币换成当地的货币。所以在那些不能支付商品的国家,比特币的价值可能就来源于大家希望它的价值能增长然后换成当地的货币并用于购买商品等等。所以,比特币的价值不光用于支付,也希望它的价值增加,所以很多人都希望拥有比特币。
问题六:当比特币被挖完的时候,也就是2100万个比特币数量达到上限的时候,还会有新的区块产生吗?也就是说这个时候比特币的供给会发生改变吗?
答:当2100万个比特币被挖完的时候,如果利益够大,矿工还是会继续挖矿产产生区块的。这是因为里边有交易的手续费,只要交易手续费大于矿工的成本它就会持续出块,也就是说比特币的系统会一直运行下去。当然,如果说比特币2100万的上限会不会突破、到时候会不会系统突然增加比特币的发放是要看当时的生态的。整个生态有很多产业链,比如:矿池、矿工、生产矿机的机器商、投资人、交易所等等,如果产业链里的人都认为能够增加上限的话,可能就是会增加上限。
问题七:去中心化的机制就一定安全吗?现在各个国家都在研究自己的数字货币,这对比特币会有哪些冲击呢?
为什么比特币减半后会大涨?
所有的区块链系统都需要挖矿吗?
答:在接下来的章节中会学习到。
评价矿机的指标:算力、价格、耗电量
以蚂蚁矿机S17+为例讲解如何用这些指标判断矿机的好坏。
算力:73TH/S
价格:$2019
耗电量:2920Watt,一小时用电2092度
单位算力价格:$2019?73=$27.6(每TH/S)? ? 就是说需要花27.6美金来购买1T的算力
单位算力耗电量:2920?73=40watt(每TH/S)? 就是说每T哈希的算力需要40瓦的电
矿池出现的原因:
我们知道抢到比特币区块链系统的记账权需要随机的算很多次哈希运算,算的此说越多找答案的概率越大,挖到块的概率也就越大。所以说,每个矿工投入的机器算力的大小就决定了他能够抢到记账权的概率。
矿工出块的可能性:
Prob(出块)概率=矿工的算力/全网算力
2020年5月初,比特币全网的算力是115EH/S,一台蚂蚁17+的算力是73TH/S,一台蚂蚁矿机出块的可能性:
Prob(出块)概率=(73TH/S)/(115EH/S)=6.3*10^(-7)
每T算力的收益如何计算?
?
?
?
?
?
?
?
jsp 中HttpClient中的POST方法实例详解 POST方法用来向目的服务器发出请求,要求...
用Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能 图片上传图片压缩拖拽...
JSON和JSONP JSONP和JSON好像啊,他们之间有什么联系吗? JSON(JavaScript Objec...
作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,...
1.背景 在完成一个分表项目后,发现分表的数据迁移后,新库所需的存储容量远大于...
判断目标字符串中是否 可能 含这个字符。 假如待匹配字符串包含指定字符串并且匹...
扑克牌算24点 简介 代码 简介 小时候一个人无聊的时候最喜欢玩的游戏一副扑克牌...
c语言轻松解决VS This function or variable may be unsafe的四种简单的方法 问...
索引优化的目的主要是让索引不失效,走正确的索引,今天主要分享的是最近整理的...
前言 好久没冒泡了,算起来估计有快半年没更新博客了,估计是我第一次停更如此之...