Skip to main content
Kronex blocks are sealed with kHeavyHash, ported from the Kaspa reference implementation. The pre-image layout, the cSHAKE256 domain strings, the matrix generation including its float64 rank check, and the little-endian reading of the final hash all match kaspad byte for byte. That is deliberate: existing kHeavyHash miners and kaspa stratum bridges stay compatible with Kronex work.

The pre-image

Kronex uses the kHeavyHash seal hash of the block header as PRE_POW_HASH, and the header Time field as TIME. The 64x64 matrix depends only on the seal hash, so a miner generates it once per work template and then rolls only the nonce.

Two things that differ from Kaspa

The timestamp is in seconds, not milliseconds. Kaspa headers carry milliseconds; Kronex inherits Ethereum’s second-resolution Time field. A bridge that multiplies by 1000 produces work nobody can solve.
Share difficulty and consensus difficulty are different scales, exactly 2^32 apart. Take the value the pool hands the miner from the work package rather than converting network difficulty by hand.

MixDigest must be zero

kHeavyHash needs no DAG and no cache, so there is no light/full verification split and nothing for a mix digest to carry. Consensus rejects any header whose MixDigest is non-zero, and krnx_submitWork expects a zero digest in its third argument.

What the seal hash covers

The seal hash is an RLP hash over the usual header fields — parent hash, uncle hash, coinbase, state root, transaction and receipt roots, bloom, difficulty, number, gas limit, gas used, time, extra data, and the base fee when set. One Kronex-specific field joins them when it is set: KRNXAuxRoot, the root of the block’s merge-mining payload. Binding it into the pre-image rather than only into the block hash is what makes the payload expensive to rewrite — the payload decides who gets paid, and anything left out of the pre-image could be swapped after mining without invalidating the seal. Blocks that carry no merge-mining payload keep the stock pre-image, and stripping a payload zeroes the root, which drops the field and changes the hash just the same.

Block time

The target is 10 seconds. Difficulty retargets toward it; see Difficulty.