The pre-image
PRE_POW_HASH is the seal hash the node selected for this work, handed out as
index [0] of krnx_getWork. TIME is index [10]. The
64x64 matrix depends on the seal hash alone, so a miner generates it once per
work package and then rolls only the nonce.
The two form one immutable job: a miner may not roll TIME alongside the nonce.
A different time is a different pre-image, which is work the node never issued.
Two things that break integrations
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 whoseMixDigest 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.