ASICBoost 是一种 Bitcoin 挖矿优化方法,它重复利用计算区块头哈希时的部分工作。哈希可以理解为数据的数字指纹。这种方法降低某些尝试的计算成本,却不放宽成功哈希必须满足的条件。它需要适当准备任务,也需要芯片采用相应设计。
处理相似订单时,可以先统一准备共同资料,但每份订单仍要分别完成。这个比喻能帮助理解 ASICBoost。Timo Hanke 在 2016 年的论文中介绍了这一方法,并说明与 Sergio Demian Lerner 的合作。ASIC 是专门执行某种计算任务的芯片,调整其工作方式可以减少重复。它既不改变所用的 SHA-256 哈希函数,也不改变 Bitcoin 规则。区块头最终的双重哈希仍必须小于或等于目标值,整个区块也必须有效。 [1]
字节是衡量数字数据大小的单位。 区块头是区块信息的简要汇总,共占 80 字节。第一次哈希运算先处理 64 字节,再处理剩余 16 字节及规定的填充内容。Merkle root 是交易集合的共同指纹,它跨越了这个分界:最后 4 字节位于第二段。第二段还包括时间、目标值的紧凑编码 bits,以及尝试之间不断变化的计数器 nonce。因此,改变哪些字段,决定了哪些计算可以重复利用。 [1]
Hanke 把合适的一组任务称为 colliding work items。它们的区块头第一段不同,因此产生不同的 midstate,也就是计算的中间状态;而称为 Message 的部分相同。对于选定的 nonce,芯片就可以共用 message schedule,即第一次 SHA-256 运算处理第二段时所需的一组辅助数值。之后,各项计算仍从不同的中间状态分别继续。这不是找到了相同的最终哈希,也不是破解哈希函数。这里的“碰撞”只是选定输入部分相同,区块头第一段反而不同。 [1]
Sergio Demian Lerner 区分 overt 和 covert ASICBoost。Overt 改变区块头版本字段 nVersion 中获准修改的位,不必寻找 Merkle root 的部分匹配。Covert 则寻找这样的匹配:Merkle root 最后 4 字节保持相同,前面部分改变。它可以调整允许修改的交易数据或交易顺序,但不能破坏交易依赖关系,记录的数字指纹也必须继续与区块数据一致。仅仅观察到不同的区块头版本,并不能证明具体节能幅度或确定运营者身份。 [2]
矿池协调矿工的工作。设备与矿池的服务器通信;服务器是一项计算机服务,按约定的条件接收结果。 彼得的设备不能任意改变区块头。编号为BIP310的文档描述了通过 mining.configure 协商的方法:version-rolling.mask 标记可修改的位,返回结果取矿工与服务器能力的交集。掩码是一份允许修改的位置表,不是加速保证。技术条件 version_bits & ~last_mask == 0 要求提交的位不能超出最新有效掩码。收到 mining.set_version_mask 通知后,新掩码立即生效,无须等到下一个任务。控制设备的固件必须遵守这项约定。 [3]
BIP320 提议将 16 个 nVersion 位用于通用用途;作为拟议替代方案的 BIP323 描述了 24 个位。本次编辑核查时,两份文件都处于 Draft,即草案状态。这一标签本身既不表示完全没有实现,也不表示所有矿池都支持。文件讨论字段的预期用途,而具体连接取决于实际使用的掩码和软件。彼得不能仅凭 BIP 编号判断设备当前允许改什么,也不能把提案当作网络规则已经自动改变。 [4] [5]
Hanke 用 x × (n − 1) / n 表示模型中的节省比例。x 是可以共享的计算工作占比,n 是合适任务的数量。当 x = 25%、n = 4 时,结果为 18.75%。其道理是,共同准备工作统一完成,不必为每个任务重做。这个结果适用于所述计算模型,并不自动等于任何矿机的瓦数下降比例。其他电路和运行条件也影响耗电。因此,不能未经测量,就把这个百分比当作算力或收入增幅。 [1]
彼得先检查芯片、固件和矿池是否配合支持,再确认矿池是否接受工作,并在可比条件下测量整台设备。J/TH表示焦耳每太哈希,也就是完成一万亿次哈希尝试所需的能量。比较时,测量必须涵盖相同的设备部件和相同的时间段。ASICBoost 的名称不能替代这些测量。它也不等于提高工作频率的超频,更不保证找到区块或盈利。只有整个配置都支持时,它才是一种更省力地完成部分计算的方法。 [1] [3]
要获得更完整的理解,请将本词条与以下词条结合阅读: ASIC Miner, 挖矿, Block Header, Proof of Work, Bitcoin, SHA-256. 反向关联还来自: Mining Firmware.