比特币区块少了一个块(比特币的区块就是一个比特币吗)

币安下载

Binance币安交易所

全球最大加密货币交易所,注册100%可领取100USDT奖励!通过本站注册不仅可以享受手续费折扣同时有机会获得币安周边

点击注册 更多线路

更多交易所入口

一站式注册各大交易所、点击进入加密世界、永不失联,币安Binance/欧易OKX/GATE.IO芝麻开门/Bitget/抹茶MEXC/火币Huobi

点击进入 永不失联


比特币网络中什么是“blockquans (区块)”?


                
每个区块包含所有最近交易的信息,一个 Nonce (随机数) 以及上一个区块的哈希值。 在整个区块的 SHA-256 哈希值低于当前目标值时,它便被标记为“已解决” (已发布并通过多个节点验证)。通常一次哈希很难达到目标,因此 Nonce 必须增加,区块必须重新哈希上百万次,才能达到目标。
Bitcoin 比特币交易通过汇款人广播到网络中,所有采矿的节点 (客户端) 收集比特币并将其添加到他们正在工作的区块。如果交易额很大,超过了平均交易额,那么网络将会扣除少量的交易手续费。
每个区块中的第一个交易是特殊的: 它为第一个采到有效区块的人创建新的比特币。其它节点 (客户端) 在该交易额正确的情况下仅会接受该区块。每个区块产生的比特币的数量为 50,每 210000 个区块减少一半 (大约为 4 年)。
网络尝试每小时创建 6 个区块。每 2016 个区块 (大约两周时间),所有的比特币客户端都会将这个目标与实际创建的区块数量相比较,修改区块采集的难度百分比以维持这一目标。
客户端认为“最长的”区块链是有效的。整个区块链的“长度”是指难度相加最多的链,而不是拥有最多区块的链。这可以避免某人伪造并创建大量低难度的区块,欺骗网络将其接受为“最长”链。
点击这里查看当前已采集区块数目
没有最大数目。区块会不断以 10 分钟一个的速度添加到区块链的末尾
是的。区块用以证明交易在某个特定的时间存在。在所有比特币都被采集后,交易仍然会发生。因此只要有人交易比特币,区块仍然会被创建。
没有人可以准确说出。有一个采矿计算器会告诉您可能花去的时间。
没有进度增加 1% 的说法。每次运算并不会增加进度。计算 24 小时后您获得比特币的几率和您刚开始计算时是相等的。
这和您同时旋转 37 个硬币并使它们都正面朝上一样。每次您尝试,您成功的机会是相同的。

什么是比特币(BTC)减半?


                

我们正在谈论的是下一个“减半”事件,尽管之前已经发生过两次,但很少有人了解。今天,我们将解释“减半”的运作方式以及过去对BTC价格的影响。


必要时中央银行可以印刷法定货币;它曾经有黄金储备作为后盾(而且我们中许多人仍然相信情况确实如此)。但是,“金本位制”于1971年终止,当时美国也停止向外国政府发行黄金以换取美元。自那时以来,美元一直以美国政府的“充分信仰和信誉”为后盾。


从算法上讲,比特币的供应仅限于2100万比特币。每隔10分钟,矿机就会对新的“区块”比特币交易进行验证,并将其添加到比特币区块链中。这是复杂且昂贵的工作,需要大量的电力和硬件。并且每年变得越来越慢和棘手。


那么,为什么有人会首先开始挖矿呢?该算法用新的比特币奖励矿机,每次形成区块时,都会生成新的比特币并将其添加到循环供应中。新发行的BTC的这种分布称为“区块奖励”。


早在2010年初,区块奖励为50 BTC。这意味着每10分钟,有人将50个BTC传送到他们的钱包中。听起来很大,但当时BTC值得一分钱,你可以使用笔记本电脑进行挖矿。现在的收入远远不及硬件需求。


目前,区块奖励仅为12.5 BTC,并且分布在许多有助于解决区块的矿机中。


整体奖励减半-两次。这是编码到比特币中的功能,大约每四年或每210,000个区块发生一次。一旦达到该数字,块奖励将减少一半。该措施是预先确定的,并将持续到挖出最后一个比特币(在2140年估计)为止。这个过程称为“减半”,它可能会影响BTC的价格。到2020年5月20日大约六个月后,矿机将达到630,000区块时,这种情况将再次发生。

减半如何影响BTC的价格?

区块奖励的一半往往会对BTC的价格产生长期的积极影响。为什么?有许多不同的理论,但基本上,所有这些都归结为简单的供求规则。如果发行的比特币较少,则赤字会自动使现有比特币变得更有价值。但这不会立即发生。


必须了解,矿机是会影响BTC价格的人。简而言之,如果薪水下跌50%,你将怎么办?


这是一些数学运算:每个月平均开采4,380个区块并将其添加到比特币区块链中。截至今天,区块奖励为12.5 BTC,价格约为7280美元。


每月发行4,380 x 12.5 = 54750 BTC。


在2020年5月的下一个减半之后,每天只会发行一半的BTC。


每月发行4,380 x 6.25 = 27375 BTC。


发生这种情况时,有两种可能的情况:矿机可能会重新考虑成本与利润的关系并停止开采,或者他们将继续持有价格低于10,000美元的比特币并拒绝出售(也称为“ HODLing”)。


那么,让我们看看过去发生了什么?


第一个减半发生在2012年11月,当时1个BTC的价格约为11美元,少数人知道BTC。随后在2013年,价格开始急剧攀升,达到了历史新高,超过1100美元。


第二个减半发生在2016年7月9日。在奖励减半之前,BTC在600-700美元的范围内持续了几个月,到2016年底缓慢提高,并在2017年底达到20,000美元。



基于这两种情况,价格的波动似乎在每个减半后的18个月内发生。然而,数据仍然不足以进行适当的分析并建立价格预测模型。

历史会重演吗?

重要的是要注意,就比特币持有者数量,市值,法规和整体加密货币前景而言,2012年,2016年和2020年存在巨大差异。例如:


市值:2016年11月-> 110亿美元,2019年12月-1320亿美元。


每日交易量:2016年11月-> 8400万美元,2019年12月-170亿美元。


由于公众对比特币的意识提高以及机构投资者的兴趣,这次的风险更高。尽管自2016年以来推出了许多其他加密货币,但BTC的主导地位仍为66.6%。因此,比特币矿机不太可能会改用其他硬币,这意味着减半可能会长期影响比特币价格。


然而,主要的收获是:比特币奖励减半与事后价格波动之间存在一定的相关性。这些供应变化每4年发生一次,监视它对比特币价格的影响很有趣。


比特币不是10分钟一个块吗


                
比特币是平均10分钟产生一个块,并不是平均分配的。
一个块是块链中的一条记录,包含并确认待处理的交易。平均约每10分钟就有一个包含交易的新块通过挖矿的方式添加到块链中。
普银、莱特币、狗狗币、瑞波币都有自己的区块,交易的信息都会记录到区块链上。

比特币区块链是1个比特币就有一个区块链吗?每个节点都有完整的区块链...


                
比特币区块链是1个比特币就有一个区块链吗? 不是,区块保存交易的,前期你成功建立一个区块会得到一个币,后期只能得到交易所付出的费用。一枚货币是一串数字签名,是上一个拥有的人发给接受者的数字签名,所有人都可以从交易中看出谁拥有这枚货币。
每个节点都有完整的区块链数据吗?  你说的节点指的是一个用户节点? 一个用户节点需要保留最长的工作量证明链条的区块头的拷贝,所以是知道所有区块头的数据的可以向前推进知道所有区块链上的数据,但是没有全部保存下来。一个区块头是很小只有80字节,是完全能够保存下来的,因为节点的生成是很慢的。就算随着时间迁移现在来看量也不是太大的。

比特币矿池的协议stratum


                

转自: https://zhuanlan.zhihu.com/p/23558268
   getblockquantemplate协议诞生于2012年中叶,此时矿池已经出现。矿池采用getblockquantemplate协议与节点客户端交互,采用stratum协议与矿工交互,这是最典型的矿池搭建模式。

  

与getwork相比,getblockquantemplate协议最大的不同点是:getblockquantemplate协议让矿工自行构造区块。如此一来,节点和挖矿完全分离。对于getwork来说,区块链是黑暗的,getwork对区块链一无所知,他只知道修改data字段的4个字节。对于getblockquantemplate来说,整个区块链是透明的,getblockquantemplate掌握区块链上与挖矿有关的所有信息,包括待确认交易池,getblockquantemplate可以自己选择包含进区块的交易。

  

挖矿有两种方式,一种叫SOLO挖矿,另一种是去矿池挖矿。前文所述的在节点客户端直接启动CPU挖矿,以及依靠getwork+cgminer驱动显卡直接连接节点客户端挖矿,都是SOLO挖矿,SOLO好比自己独资买彩票,不轻易中奖,中奖则收益全部归自己所有。去矿池挖矿好比合买彩票,大家一起出钱,能买一堆彩票,中奖后按出资比率分配收益。理论上,矿机可以借助getblockquantemplate协议链接节点客户端SOLO挖矿,但其实早已没有矿工会那么做,在写这篇文章时,比特币全网算力1600P+,而当前最先进的矿机算力10T左右,如此算来,单台矿机SOLO挖到一个块的概率不到16万分之一,矿工(人)投入真金白银购买矿机、交付电费,不会做风险那么高的投资,显然投入矿池抱团挖矿以降低风险,获得稳定收益更加适合。因此矿池的出现是必然,也不可消除,无论是否破坏系统的去中心化原则。

  

矿池的核心工作是给矿工分配任务,统计工作量并分发收益。矿池将区块难度分成很多难度更小的任务下发给矿工计算,矿工完成一个任务后将工作量提交给矿池,叫提交一个share。假如全网区块难度要求Hash运算结果的前70个比特位都是0,那么矿池给矿工分配的任务可能只要求前30位是0(根据矿工算力调节),矿工完成指定难度任务后上交share,矿池再检测在满足前30位为0的基础上,看看是否碰巧前70位都是0。

  

矿池会根据每个矿工的算力情况分配不同难度的任务,矿池是如何判断矿工算力大小以分配合适的任务难度呢?调节思路和比特币区块难度一样,矿池需要借助矿工的share率,矿池希望给每个矿工分配的任务都足够让矿工运算一定时间,比如说1秒,如果矿工在一秒之内完成了几次任务,说明矿池当前给到的难度低了,需要调高,反之。如此下来,经过一段时间调节,矿池能给矿工分配合理难度,并计算出矿工的算力。

  

矿池通过getblockquantemplate协议与网络节点交互,以获得区块链的最新信息,通过stratum协议与矿工交互。此外,为了让之前用getwork协议挖矿的软件也可以连接到矿池挖矿,矿池一般也支持getwork协议,通过阶层挖矿代理机制实现(Stratum mining proxy)。须知在矿池刚出现时,显卡挖矿还是主力,getwork用起来非常方便,另外早期的FPGA矿机有些是用getwork实现的,stratum与矿池采用TCP方式通信,数据使用JSON封装格式。

  

先来说一下getblockquantemplate遗留下来的几个问题:

  

矿工驱动:在getblockquantemplate协议里,依然是由矿工主动通过HTTP方式调用RPC接口向节点申请挖矿数据,这就意味着,网络最新区块的变动无法及时告知矿工,造成算力损失。

  

数据负载:如上所述,如今正常的一次getblockquantemplate调用节点都会反馈回1.5M左右的数据,其中主要数据是交易列表,矿工与矿池需频繁交互数据,显然不能每次分配工作都要给矿工附带那么多信息。再者巨大的内存需求将大大影响矿机性能,增加成本。

  

Stratum协议彻底解决了以上问题。

  

Stratum协议采用主动分配任务的方式,也就是说,矿池任何时候都可以给矿工指派新任务,对于矿工来说,如果收到矿池指派的新任务,应立即无条件转向新任务;矿工也可以主动跟矿池申请新任务。

  

现在最核心的问题是如何让矿工获得更大的搜索空间,如果参照getwork协议,仅仅给矿工可以改变nNonce和nTime字段,则交互的数据量很少,但这点搜索空间肯定是不够的。想增加搜索空间,只能在hashMerkleroot下功夫,如果让矿工自己构造coinbase,那么搜索空间的问题将迎刃而解,但代价是必要要把区块包含的所有交易都交给矿工,矿工才能构造交易列表的Merkleroot,这对于矿工来说压力更大,对于矿池带宽要求也更高。

  

Stratum协议巧妙解决了这个问题,成功实现既可以给矿工增加足够的搜索空间,又只需要交互很少的数据量,这也是Stratum协议最具创新的地方。

  

再来回顾一下区块头的6个字段80字节,这个很关键,nVersion,nBits,hashPrevblockquan这3个字段是固定的,nNonce,nTime这两个字段是矿工现在就可以改变的。增加搜索空间只能从hashMerkleroot下手,这个绕不过去。Stratum协议让矿工自己构造coinbase交易,coinbase的scriptSig字段有很多字节可以让矿工自由填充,而coinbase的改动意味着hashMerkleroot的改变。从coinbase构造hashMerkleroot无需全部交易,

  

如上图所示,假如区块将包含13笔交易,矿池先对这13笔交易进行处理,最后只要把图中的4个黑点(Hash值)交付给矿工,同时将构造coinbase需要的信息交付给矿工,矿工就可以自己构造hashMerkleroot(图中的绿点都是矿工自行计算获得,两两合并Hash时,规定下一个黑点代表的hash值总是放在右边)

  

。按照这种方式,假如区块包含N笔交易,矿池可以浓缩成log2(N)个hash值交付给矿工,这大大降低了矿池和矿工交互的数据量。

  

Stratum协议严格规定了矿工和矿池交互的接口数据结构和交互逻辑,具体如下:

  

1. 矿工订阅任务

  

启动挖矿机器,使用mining.subscribe方法链接矿池

  

返回数据很重要,矿工需本地记录,在整个挖矿过程中都用到,其中:

  

Extranonce1,和 Extranonce2对于挖矿很重要,增加的搜索空间就在这里,现在,我们至少有了8个字节的搜索空间,即nNonce的4个字节,以及 Extranonce2的4个字节。

  

2. 矿池授权

  

在矿池注册一个账号 ,添加矿工,矿池允许每个账号任意添加矿工数,并取不同名字以区分。矿工使用mining.authorize方法申请授权,只有被矿池授权的矿工才能收到矿池指派任务。

  

3. 矿池分配任务

  

以上每个字段信息都是必不可少,其中:

  

有了以上信息,再加上之前拿到的Extranonce1 和Extranonce2_size,就可以挖矿了。

  

4. 挖矿

  

1) 构造coinbase交易

  

用到的信息包括Coinb1, Extranonce1, Extranonce2_size 以及Coinb2,构造很简单:

  

为啥可以这样,因为矿池帮矿工做了很多工作,矿池已经构建了coinbase交易,系列化后在指定位置分割成coinb1和coinb2,coinb1和coinb2包含指定信息,比如coinb1包含区块高度,coinb2包含了矿工的收益地址和收益额等信息,但是这些信息对于矿工来说无关紧要,矿工挖矿的地方只是Extranonce2 的4个字节。另外Extranonce1是矿池写入区块的指定信息,一般来说,每个矿池会写入自己矿池的信息,比如矿池名字或者域名,我们就是根据这个信息统计每个矿池在全网的算力比重。

  

2) 构建Merkleroot

  

利用coinbase和merkle_branch,按照上图方式构造hashMerkleroot字段。

  

3) 构建区块头

  

填充余下的5个字段,现在,矿池可以在nNonce和Extranonce2 里搜索进行挖矿,如果嫌搜索空间还不够,只要增加Extranonce2_size为多几个字节就可轻而易举解决。

  

5. 矿工提交工作量

  

当矿工找到一个符合难度的shares时,提交给矿池,提交的信息量很少,都是必不可少的字段:

  

矿池拿到以上5个字段后,首先根据任务号ID找出之前分配任务前存储的信息(主要是构建的coinbase交易以及包含的交易列表等),然后重构区块,再验证shares难度,对于符合难度要求的shares,再检测是否符合全网难度。

  

6. 矿池给矿工调节难度

  

矿池记录每个矿工的难度,并根据shares率不断调节以指定合适难度。矿池可以随时通过mining.set_difficulty方法给矿工发消息另其改变难度。

  

如上,Stratum协议核心理念基本解析清楚,在getblockquantemplate协议和Stratum协议的配合下,矿池终于可以大声的对矿工说,让算力来的更猛烈些吧。

目录[+]