Article · June 7, 2026 · Digital infrastructure

Block 125,000.
BTX closes the MatMul precompute loophole.

Two thousand blocks after the 0.31 activation, BTX is set to land its second consensus change. At block 125,000 — a little under two days from now at the current cadence — the network switches from v1 MatMul seed derivation to a v2 scheme that gives every nonce its own seed, and therefore its own pair of matrices. Every mining attempt now does the full matrix multiplication.

The change closes a long-standing shortcut: under v1 the seed was largely determined by the block header, so a clever optimiser could precompute one pair of matrices and reuse them across thousands of nonces — making each individual attempt much cheaper than the algorithm intended. v2 makes the seed depend on the header andthe nonce, so the matrices cannot be reused. The network's reported hashrate becomes a more honest measurement of real matmul work, and the “useful” in proof of useful work gets tighter.

block 125,000/v2 seed derivation/per-nonce matrices/v0.32.2 required

Whyte Consolidated Research · 2026-06-07· 8 min read

1 · What MatMul mining actually is

Seven steps. One loop. No hashes in the work itself.

BTX does not mine with SHA-256. It mines with a 512×512 matrix multiplication over the Mersenne-prime field 2³¹−1. The loop a miner runs to find a valid block is short and identical on every backend, whether the implementation is CPU, Apple-Silicon Metal, or CUDA. Every attempt is the same seven steps.

  1. Build a candidate block header.
  2. Pick a nonce — a guess.
  3. Derive a seed from header + nonce.
  4. Use the seed to construct two matrices A and B.
  5. Multiply A × B.
  6. Hash the product.
  7. Check whether the result is below the current difficulty target. If not, increment the nonce and start over from step 2.

The whole question of mining efficiency comes down to step 3. The seed is what determines which matrices you multiply. If you change the nonce but the seed barely moves, you are multiplying the same matrices again with a slightly different label on the output. That is the part the v1 → v2 change is about.

Diagram · The loop, and where v1 and v2 split
BTX MatMul mining loop, with the v1 versus v2 seed-derivation branchA horizontal flow showing the seven steps of MatMul mining: header → nonce → seed → matrices → multiply → hash → check vs target, with a loop back from check to nonce. The seed step is expanded to show the difference: under v1 the seed is derived from the header alone, so the matrices are reusable across many nonces; under v2 the seed is derived from the header and the nonce together, so the matrices must be regenerated every attempt.Headercandidate blockNonceguess: 0, 1, 2, …★ THE SPLITDerive seedfrom header (+ nonce)Matrices A, B512×512 over M31A × BmatmulHashdigest< target?block found · else loopincrement nonce, try againV1 · UP TO BLOCK 124,999seed = f(header)→ matrices A, B are the same across many nonces→ optimiser can precompute once and reuse→ network hashrate ≠ real matmul workV2 · FROM BLOCK 125,000seed = f(header, nonce)→ matrices A, B are fresh every attempt→ no reuse, no shortcut→ network hashrate = real matmul workSame loop. Same primitive. The only change is where the nonce enters seed derivation.Under v2, batched parallelism in the solver (CPU · Metal · CUDA) is what keeps each backend competitive.
The mining loop is unchanged. The split is at one step: under v1 the seed depended only on the header, so the matrices could be precomputed once and reused across thousands of nonces; under v2 the seed depends on the header and the nonce, so every attempt must regenerate its matrices.
2 · The v1 loophole

When the network thinks it's buying matmul and isn't.

Under v1, the seed used to construct the matrices was largely determined by the header alone. That sounds innocuous, and at first glance the loop still reads the same. The hidden problem is in step 4: if the seed does not change much when the nonce changes, the matrices the seed produces do not change much either. A miner trying thousands of nonces against the same header was, in practice, multiplying nearly the same matrices over and over.

The natural optimisation is then obvious. Precompute the matrices once, hold them in cache, and re-use them across every nonce that fits the same header. The expensive step — the actual 512×512 matrix multiplication — gets amortised across many attempts. A clever miner can effectively try far more nonces per second than the algorithm was designed for, because most of those attempts are not actually doing the work the network thinks they are.

This is efficient in a narrow sense. It is also corrosive to the chain's headline pitch. The argument for MatMul proof-of-work is that the cycles securing the network are the same cycles AI workloads pay for — that mining is a real bid on the GPU-hour market, not a token-shaped abstraction sitting on top of it. If most nonce attempts are precomputed reuse, then the network's reported hashrate overstates the matmul cycles actually being burned. That is the gap v2 was designed to close.

3 · What v2 does

One change, in one place, with cascading effects.

The v2 rule is small and surgical. Under v2, every header + nonce combination derives its own unique seed. Step 3 of the loop now includes the nonce in the seed derivation, where before it did not. From step 4 onward the loop is identical — but because the seed differs for every nonce, the matrices A and B that the seed produces also differ for every nonce.

The consequence is that the precompute trick stops working. There is no “reuse” available, because there is nothing to reuse. Every nonce attempt requires its own pair of fresh 512×512 matrices, its own multiplication, its own hash of the product, and its own check against the difficulty target. The cost per attempt becomes what the algorithm always intended it to be.

The intent is to tighten the link between reported hashrate and real matmul cycles. After activation, thenetworkhashps figure means what it sounds like: the number of full 512×512 matrix multiplications the network is computing per second. That is a more honest unit, and it is the unit a chain that intends to host real GPU-economy mining needs to expose if anyone is going to take its difficulty as a real signal.

4 · Why the CPU solver had to learn to batch

Parallelism becomes load-bearing under v2.

A naïve implementation of v2 is to do one nonce at a time: generate the seed, build the matrices, multiply, hash, check, increment. That works correctly and produces exactly the right answer — and it would also throw away most of the throughput that modern CPUs, Apple-Silicon GPUs, and CUDA devices were designed to deliver. v2 wants to be batched.

That is what the v0.32.1 work shipped. The CPU solver now processes a batch of candidate nonces in parallel — each with its own seed, its own pair of matrices, its own multiplication — so a multi-core CPU stays usefully busy instead of crawling. The same parallelism lands on the Metal path (the Apple-Silicon GPU on a Mac mini or M-series studio) and on CUDA. v0.32.2 carries those changes forward and adds v2 awareness to both validation and mining, which is why operators already running v0.32.2 do not need to take any action before the activation height.

For Apple-Silicon operators specifically, the SOLVE_BATCH_SIZE tuning becomes more interesting. The default that worked best under v1 was tuned to a loop where matmul cost amortised across nonces; under v2, where every nonce pays the full matmul cost, batching is the whole game. It is the right knob to revisit after activation to see whether a larger batch is faster on a given Mac mini or M-series box.

5 · The operator checklist

Four small things — none of them required ahead of time if you're on 0.32.2.

The hardest piece is making sure your node is on the right version. Once that is done, the rest is just re-tuning and watching the chain-guard.

01

Run v0.32.2

The validation and mining paths both need v2-awareness. Earlier versions will reject post-activation blocks and effectively fork off.

02

Don’t panic about hashrate

What counts as one ‘hash’ changed. networkhashps and similar metrics may shift visibly after activation — that is the unit change, not a regression.

03

Retune SOLVE_BATCH_SIZE

On Apple Silicon and CUDA, batched parallel solving becomes load-bearing under v2. The v1 default may no longer be optimal — re-check after activation.

04

Watch chain-guard

Use the 0.31 chain-guard RPC. ‘continue / pause / catch_up’ is the right loop to keep running across activation height as peers converge.

Pre-v0.32 nodes will start producing invalid blocks at the activation height and fork off the canonical chain. That is the consensus consequence of the change — and it is the second activation in roughly two thousand blocks, landing on the same upgrade-slack design covered in Block 123,000: BTX activates hardening upgrades.

6 · Why this matters beyond mining

A chain whose difficulty is honest about its compute.

The reason any of this matters outside the mining bench is that BTX's entire pitch is that its proof-of-work primitive is the same operation transformer models run. If the network's advertised work can be substantially shortcut, the headline pitch is weaker than it should be. Every honest measurement that downstream consumers — investors, regulators, agents, exchanges — eventually take off the chain depends on the difficulty being a real reflection of cycles spent. v2 restores that.

It also continues a pattern. 0.31 activated at block 123,000. 0.32 (v2 seeds) activates at block 125,000. Two consensus changes in roughly four days of block time, each landing cleanly on upgrade slack the launch wire was designed to reserve. A network that can ship and land two consequential consensus changes in a week without breaking ordinary users is a network that has the right kind of plumbing to absorb the larger changes that come later — multi-user settlement, the bridge layer, wBTX, all of the work the upgrade-slack design was always for.

The headline metric is not how often the network can fork. It is how invisibly it can. Ordinary wallet users do nothing for this activation either. The chain just gets quietly more honest about the work it does.

7 · The activation at a glance

Four numbers that frame the change.

125,000
Activation height
v2 seed derivation becomes consensus
v0.32.2
Required node
Earlier versions will fork off
Per-nonce
Seed derivation
v1 was per-header (matrices reusable)
Batched
Solver parallelism
CPU / Metal / CUDA all get parallel batches
Bottom line

One change, in one step of the loop.

The MatMul loop on BTX is seven steps long. The v2 activation at block 125,000 changes one of them — the seed derivation in step 3 — so every nonce gets its own seed, its own matrices, and its own full multiplication. The precompute shortcut goes away. The network's difficulty becomes a more honest measure of real matmul cycles. The CPU, Metal, and CUDA solvers stay competitive because the v0.32.1 work taught them to batch nonces in parallel.

For wallet users this activation, like the last one, is invisible. For operators it is a version check, a hashrate-optics adjustment, and an optional re-tune of a batch-size knob. For the network it is one more piece of evidence that BTX's upgrade cadence works as advertised — slack reserved at launch, activations landing on it without breaking anyone who was not trying to break themselves.

Frequently asked

BTX MatMul v2, in brief.

Do I need to do anything before the activation?
Run v0.32.2 (or later). The upgrade is automatic once the node is on a v2-aware build — both the validation path and the mining path. Anyone still running v0.30 or v0.31.0 at block 125,000 will start producing invalid blocks and fork off the canonical chain.
Will my reported hashrate change after activation?
Yes. The unit of work changed — a v2 nonce attempt does more real matrix multiplication than a v1 one did. Numbers like networkhashps may shift after activation because what counts as one ‘hash’ is materially different. The shift is an optics change, not a regression in your miner.
Why does this matter for proof-of-useful-work?
The whole pitch of MatMul proof-of-work is that the cycles securing the chain are the same cycles AI workloads pay for. If miners can precompute matrices and reuse them across thousands of nonces, the network is being secured by less matmul than it appears to be — and the ‘useful work’ claim weakens. v2 closes that loophole and restores the link between network hashrate and real matmul cycles.
What is SOLVE_BATCH_SIZE and should I retune it?
It is the number of candidate nonces the solver processes in parallel — each with its own v2 seed and its own pair of matrices. The default on Apple Silicon was tuned for v1; v2 makes batch parallelism load-bearing, so it is worth re-checking whether a larger batch is faster on your Metal path after activation. CPU and CUDA paths can be retuned the same way.
Is this a hard fork?
Operationally yes — pre-v0.32 nodes that try to validate post-activation blocks will reject them, because the v2 seed derivation is part of the consensus rules. For wallet users it is invisible; for miners it is the second activation in roughly two thousand blocks, landing on the same upgrade slack the launch wire was designed to reserve.
Context & further reading

This article is the operator-side summary of the v2 MatMul seed change activating at block 125,000 on BTX. The items below are the primary sources for the chain itself and related pieces from this site.

For informational purposes only. Not financial, investment, or legal advice. Technical claims reflect the BTX project's released change set and may be subject to further iteration. Systems, protocols, and tokens referenced are described for context and are not endorsements. Mining outcomes depend on hardware, difficulty, and market conditions, and are not guaranteed.