挖矿架构
只有算力无法生成区块。挖矿需要 State;只有证明完成后才能开始搜索 nonce。 区块生产者必须持有当前 Live State,并在开始搜索 nonce 前确立精确的下一次转换。因此,独立矿工是由算力支撑、能够生成证明的全节点,而不是无状态的哈希端点。
挖矿严格分为两个有序阶段:
- 选择交易、构造 State 转换,并证明完整的无 nonce 区块;
- 搜索固定 Poseidon2b 区块头的 128 位 nonce。
这样的顺序避免把工作量证明浪费在尚未确立 State 转换的区块上。
构造模板
节点从规范链尖与当前内存池出发。它按费率选择互不冲突的逻辑交易,同时遵守 State、分段和证明类别限制。随后:
- 计算 coinbase 奖励以及计划中的系统付款;
- 分配新的输出创建标识;
- 推导规范槽位写入;
- 计算交易根与转换后 State 根;
- 构造
HistoryStep公开输入; - 生成新的终端证明。
至此,除区块头 nonce 外的一切内容都已不可变。
系统铸币选择槽位时,优先避开其他待处理交易预留的输出。这只是有界的本地偏好,不是禁止条件。若未找到替代槽位,就使用原来的有效选择。已选入区块的交易仍受严格保护,基金收款方、金额和付款计划不变。
B25 与 B255
证明栈附带两种经过认证的矩阵类别:
| 类别 | 超立方体维度 | 有效页面容量 |
|---|---|---|
| B25 | m=22 |
最多 25 页 |
| B255 | m=24 |
最多 255 页 |
每次挖矿会话从 B25 开始,不执行启动基准测试。第一次完成的 B25 证明准备提供计时样本。只有 prepare_time_B25 × 4 ≤ 20 秒 时,才为该会话允许 B255。这是预测,不是 B255 的实测耗时,也不必等待找到有效 PoW nonce。后续样本不会改变本次会话的许可。
生产者按手续费顺序,在允许的容量内选择合格交易。所选页面不超过 25 页时使用 B25,超过则使用 B255。到期基金付款占用一页,因此用户交易最多可占 24 或 254 页。选择过程中每笔交易保持原子性。
ASERT 将这一目标应用于已接受区块之间的完整间隔。证明准备、nonce 搜索与 区块传播共同占用同一个间隔。
两种类别证明同一个共识关系。它们只是容量选择,不代表不同的区块有效性规则。
CPU 调度
内置矿工在证明构造与 nonce 搜索之间共享一个 CPU 线程池,不会同时运行两个互不相关、各自占满全部核心的任务。
本地钱包工作拥有优先级。用户在挖矿期间发送交易或执行归集时,节点会在本地边界暂停或让出挖矿 CPU,完成交易授权和提交后再继续挖矿。网络规则、对等节点优先级和全局手续费策略均不会改变。
模板刷新策略
只有改变有效工作的事件才会重建模板:
- 出现新的规范链尖;
- 挖矿收益地址变化;
- 第一笔交易进入此前只有 coinbase 奖励的模板;
- 已选交易失效。
100 秒心跳刷新只是安全兜底,并非正常刷新循环。已经证明的模板始终绑定原始收益地址和交易集;证明构造完成后不再修改。
内置矿工
内置矿工运行在节点进程内。节点负责交易选择、证明构造、PoW 和区块提交。CPU 线程数与收益地址可通过 Core 或 GUI 控制。
节点只有在同步完成且至少连接一个已完成身份认证的对等节点时才开始挖矿。本地找到的区块按与收到区块相同的共识规则完成封装、提交和公告。提交路径复用本地已证明的精确 State 转移,不重复验证同一个证明。收到的区块仍需验证证明。
外部矿工
外部矿工只把 nonce 搜索移出节点。它请求一个不透明、一次性的模板,其中包含:
- 模板标识;
- 精确的 16 字段 Poseidon2b PoW 输入序列;
- 目标值;
- 过期时间与显示元数据。
外部矿工返回一个小端序 128 位 nonce。节点根据仍然有效的模板验证 nonce,封装已经证明的区块,并使模板失效。外部模板 30 秒后过期;链尖改变或成功提交后均不能重放。
外部挖矿进程无权替换交易、改变 State、修改手续费或重新计算 coinbase 奖励。使用自定义 coinbase 地址必须显式启用相应节点设置,并提供 Bearer 密钥。
分叉选择
挖矿扩展累计工作量最高的有效链。工作量相同时,以字典序更小的区块哈希作为确定性决胜规则。任何试图替换硬最终性前缀的候选链都不具备资格。