2012年以来,比特币挖矿发展出一个解决区块头基本结构限制的方案。在比特币的早期,矿工可以通过遍历随机数 (Nonce)获得符合要求的hash来挖出一个块。 难度增长后,矿工经常在尝试了...
精通比特币(83):比特币挖矿的算力发展
比特币挖矿是一个极富竞争性的行业。自从比特币存在开始,每年比特币算力都成指数增长。一些年份的增长还体现出技术的变革,比如在2010年和2011年,很多矿工开始从使用CPU升级到使用GPU,进而使用FG...
精通比特币(82):区块链分叉是如何产生的?
因为区块链是去中心化的数据结构,所以不同副本之间不能总是保持一致。区块有可能在不同时间到达不同节点,导致节点有不同的区块链全貌。解决的办法是,每一个节点总是选择并尝试延长代表累计了最大工作量证明的区块...
精通比特币(81):区块链的组装与选择
比特币去中心化的共识机制的最后一步是将区块集合至有最大工作量证明的链中。 一旦一个节点验证了一个新的区块, 它将尝试将新的区块连接到到现存的区块链,将它们组装起来。 节点维护三种区块:...
精通比特币(80):节点是如何校验新区块的?
比特币共识机制的第三步是通过网络中的每个节点独立校验每个新区块。 当新区块在网络中传播时,每一个节点在将它转发到其节点之前,会进行一系列的测试去验证它。这确保了只有有效的区块会在网络中传播。 &nbs...
精通比特币(79):比特币中难度是如何调整的?
目标决定了难度,进而影响求解工作量证明算法所需要的时间。那么问题来了:为什么这个难度值是可调整的?由谁来调整?如何调整? 比特币的区块平均每10分钟生成一个。这就是比特币的心跳,是货币...
精通比特币(78):如何计算难度目标?
在区块中看到难度目标,其被标为"难度位"或简称"nBits",定义在src/chain.h的CBlockIndex类中。 在区块277,316中,它的值为 0x1903a30c。 这个标...
精通比特币(77):工作量证明算法
哈希函数输入一个任意长度的数据,输出一个长度固定且绝不雷同的值,可将其视为输入的数字指纹。 对于特定输入,哈希的结果每次都一样,任何人都可以用相同的哈希函数,计算和验证哈希结果。 一个加密哈希函数的...
精通比特币(76):构造区块头
为了构造区块头,挖矿节点需要填充六个字段。 区块头结构 区块结构中用来表示版本号的字段值为2,长度为4字节,以小端格式编码值为 0x20000000。 接着,挖矿节点需要填充“前区块哈希...
精通比特币(75):创币交易
创币交易 区块中的第一笔交易是笔特殊交易,称为创币交易或者coinbase交易。这个交易是由挖矿节点构造并用来奖励矿工们所做的贡献的。 与常规交易不同,创币交易没有输入,不消耗UTXO。它只包含一个被...