八十字节包含六个字段
比特币区块头按顺序包含六个字段:四字节版本号、三十二字节前块哈希、三十二字节默克尔根、四字节时间戳、四字节 nBits,以及四字节 nonce,合计八十字节。Bitcoin 开发者区块头文档与 Core v28.0 的 CBlockHeader 序列化定义可互相核对。nBits 存放目标阈值的紧凑编码,不能误称为直接容纳完整目标整数的字段。
区块哈希是对这八十字节连续执行两次 SHA256 的结果,不是对区块浏览器显示的文字做两次摘要。整数按小端序列化,前块哈希与默克尔根使用内部字节顺序。显示用的十六进制哈希与实际参与序列化的字节顺序需要区分,否则字段看起来一样,也可能算出完全不同的结果。
交易并不直接逐笔放进区块头,而是通过默克尔根形成承诺。普通交易标识的默克尔树结构见 默克尔根的归并规则。区块头字段少,不代表节点只检查这几个字段就能判断整个区块有效;交易输入、脚本、金额和其他共识条件仍须另行验证。
哈希必须小于等于目标
设由有效 nBits 解出的目标整数为 T,区块头哈希按协议解释出的无符号整数为 H,工作量证明要求 H ≤ T,包括恰好相等的情况。Core v28.0 的 CheckProofOfWork 先排除负目标、零目标、溢出和超过网络上限的目标,再在哈希大于目标时返回失败。这比含糊的“前面有很多零”更精确。
目标还必须与所接父块及网络的难度规则相符,矿工不能把 nBits 任意改得更宽松来获得有效区块。对比特币主网而言,目标按每二千零一十六个区块的规则重新计算,周期内通常沿用既有值;到了边界重新计算,也不意味着数值必定变化。测试网络存在不同的例外条件,不能把主网描述推广到所有网络,机制见 目标阈值与难度调整。
哪些字段提供搜索空间
前块哈希绑定矿工打算延长的父块,不能在保持同一父块的同时随意改写。默克尔根由有序的交易标识构造,改动 coinbase 中的可用附加数据会改变交易标识,继而产生新的区块头候选。时间戳也能提供变化空间,但必须满足中位时间与未来时间等约束,不是任意数值都能被节点接受。
版本号涉及区块规则与部署信号,具体可使用哪些位取决于规则和矿池工作分配,不能笼统说它只是软分叉投票。矿工还可使用区块头之外的额外 nonce:它通常位于 coinbase 的可变数据中,经交易标识与默克尔根间接改变区块头,并不是新增了第七个区块头字段。
这些自由度都有限制。例如 coinbase 输入脚本既有格式要求,也有长度限制;改动时不能破坏必需内容。更换交易集合还要重新考虑依赖、费用和区块限制。因此,挖矿更准确的描述是寻找满足规则与目标的区块头候选,而不是只寻找一个孤立的 nonce。
用完 nonce 后并不保证找到答案
四字节 nonce 有 2^32 个取值,也就是四十二亿九千四百九十六万七千二百九十六种可能。固定其余字段后,即便全部尝试完,也可能没有一个哈希达到目标。消耗这些候选需要多久取决于实际算力与任务划分,不能对所有设备统一承诺几秒或不到一秒。
矿工可在规则允许时更新 coinbase、时间戳或其他可变内容,形成不同候选继续搜索。改变额外 nonce 并不意味着每次都获得可以完整遍历的 2^256 个新输入;哈希输出范围与实际可枚举的输入数量是两件事。矿池还需要协调任务,避免不同设备大量重复计算同一组区块头。
成功概率要包含零这个结果
在把不同输入的双 SHA256 输出近似视为均匀、独立的二百五十六位结果这一模型下,可能结果总数是 2^256。对固定有效目标 T,合格整数包含从零到 T,因此一次尝试的成功概率是 (T + 1) / 2^256。写成 T / 2^256 只能作为忽略加一项的近似,不能称为恒等式。
这一模型也不表示哈希函数本身随机:相同区块头永远得到相同结果,重复计算同一输入不会增加找到新答案的机会。此前失败了很多次,不会让一个新的独立候选必然成功。区块到达时间的概率讨论可参考 出块间隔的统计模型,但概率模型不能替代对实际算力、目标变化与传播条件的观察。
模板改变不要求 nonce 必须清零
默克尔根承诺交易顺序,却不负责制定交易顺序规则。coinbase 必须在第一位;同一区块中,花费另一个交易输出的交易必须排在那个交易之后。按费率选择或排序则是组块策略,不能写成所有交易必须依费率排序的共识要求。
修改模板并得到不同的区块头后,旧哈希不能直接作为新头的工作量证明,需要对新的完整输入重新计算。但 nonce 可以从零、某个指定起点或分配区间开始,也可以沿用一个已有数值尝试。是否清零是实现和调度选择,不是共识硬规矩;节点验证的是提交区块头的最终数值与哈希,不检查矿机从哪个 nonce 开始搜索。
创世块也有有效工作量证明
创世块的参数和哈希被固定在软件中,这说明节点知道从哪里开始,不等于创世块没有被挖出。使用其预设字段复算的哈希满足 nBits 对应目标。节点初始化不重新执行当年的搜索过程,正如验证普通区块也无需重放矿工所有失败尝试,相关特例见 创世块与不可花费补贴。
理解这六个字段,应同时记住三条边界:哈希是摘要而不是加密,工作量证明通过不等于交易全部合法,模板与搜索起点的工程选择也不自动成为共识规则。它们解释矿工与节点各自在做什么,不提供挖矿收益或资产价格保证。本文不构成投资建议。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。