
先明确术语的适用范围
“疯狂的比特币挖矿”中的“疯狂”属于描述性用语,没有独立的技术定义。这里讨论比特币挖矿的一般机制:矿工尝试构造符合规则的新区块,让交易历史持续延伸,并增加改写历史的难度。理解时,可以把计算过程、区块结构和协作方式分开看。
哈希、算力与目标阈值
NIST《安全哈希标准》描述了生成消息摘要的哈希算法,摘要可用于检测消息是否发生改变。摘要可以理解为数据经过确定计算得到的结果;相同输入会得到相同输出,但它不是可直接还原原文的压缩包。
挖矿中,矿工反复计算区块头的哈希,并判断结果是否满足目标阈值。算力表示单位时间内进行这类计算的能力;目标越小,符合条件的结果越难找到,因此难度越高。提高计算速度意味着增加尝试次数,不能据此确定某次尝试何时成功。
nonce、coinbase与默克尔根
nonce是区块头中供矿工改变的字段。coinbase交易是区块里的特殊交易,用于领取区块补贴和手续费,这里的名称指交易类型。默克尔根则把区块中的交易通过树形哈希结构关联到区块头。
比特币开发者指南介绍了改变coinbase中额外nonce数据、更新默克尔根的过程。其作用是产生新的区块头候选值,扩大可尝试的输入范围。区块头里的nonce与额外nonce处在不同位置,不能混为同一个字段。
独立挖矿、矿池与share
独立挖矿由矿工自行寻找区块;矿池组织参与者共同工作,并按规则分配所得。share是提交给矿池的工作份额证明,通常只需满足比网络出块条件更宽松的目标。
常见问题是:提交share是否等于挖出了区块?并不等同。满足矿池条件的计算结果,只有同时满足网络目标及其他区块有效性规则,才可能成为有效区块。share用于衡量贡献,不能当作已确认区块的数量。
ASIC与通信协议各管什么
ASIC是执行专用计算的硬件;getblocktemplate用于取得构造候选区块所需的信息;Stratum用于矿工与矿池之间传递任务和结果。它们分别涉及计算设备、区块模板和任务通信。
这些术语适用于不同层面:设备负责计算,软件组织区块数据,协议协调信息传递。讨论协议能力时还需要明确版本与实现,不能把某一种通信方式的特征推广到全部挖矿系统,也不能仅凭设备或协议名称判断实际出块表现。