Priming state transition for a QABIO-enabled UTXO. Reveals the next auth-chain preimage at a chosen depth, bumps committed_depth, and mutates the QABI_SPEND rung’s committed_root and committed_expiry to commit the UTXO into a specific upcoming batch. A participant-only operation: only the holder of the auth_seed can produce a valid preimage, so no coordinator signature is required at priming time. The new conditions tree is enforced via a covenant check against the output’s scriptPubKey.
| Field | Data Type | Size | Side | Description |
|---|---|---|---|---|
| new_committed_root | HASH256 | 32 B | Witness | Batch root the participant is committing to. Substituted for committed_root inside the QABI_SPEND rung of the output conditions tree. Typically the Merkle root of the coordinator’s upcoming QABIBlock. |
| prime_depth | NUMERIC | 1–4 B | Witness | Depth in the auth chain at which the preimage is revealed. Must strictly exceed the current committed_depth (monotonic progression) and be bounded by QABI_AUTH_CHAIN_DEFAULT_LENGTH · 10. |
| new_committed_expiry | NUMERIC | 1–4 B | Witness | Max block height at which the subsequent QABI_SPEND may fire. Substituted for committed_expiry in the output tree. |
| prime_preimage | PREIMAGE | 32 B | Witness | Preimage such that SHA256 iterated prime_depth times yields the committed auth_tip from the QABI_SPEND rung. Only the auth_seed holder can produce this. |
QABI_PRIME has no conditions-context fields. All four fields are witness-only. The evaluator reads the “current state” (auth_tip, committed_root/depth/expiry, owner_id) from the QABI_SPEND rung of the input conditions tree — there is no duplication.
input_conditions (via the MLSC proof + revealed mutation targets). If zero or more than one → UNSATISFIEDauth_tip and committed_depth from the located QABI_SPEND block’s conditions fieldsprime_depth > committed_depth (monotonic progression). Otherwise → UNSATISFIEDSHA256^prime_depth(prime_preimage) == auth_tip. Otherwise → UNSATISFIEDcommitted_root, committed_depth, and committed_expiry replaced by the witness values. Recompute the MLSC root. Extract the output UTXO’s conditions_root from tx.vout[coil.output_index].scriptPubKey. If they match → SATISFIED, otherwise → UNSATISFIED| Condition | Result |
|---|---|
| Witness field count != 4 or wrong types/sizes | ERROR |
| prime_depth <= 0 or above safety bound | ERROR |
| No QABI_SPEND block found in input conditions | UNSATISFIED |
| Multiple QABI_SPEND blocks (ambiguous) | ERROR |
| prime_depth <= committed_depth | UNSATISFIED |
| SHA256^prime_depth(preimage) != auth_tip | UNSATISFIED |
| Output conditions_root != mutated-tree recomputed root | UNSATISFIED |
| All checks pass | SATISFIED |
Alice primes her QABIO UTXO for a 100-party batch coordinated by a FALCON-512 signer
[SIG_escape, QABI_PRIME, QABI_SPEND(auth_tip=H^50(seed), committed_root=0, depth=0, expiry=0, owner_id=SHA256(alice_pk))]R = 0xaa..aa, expiry block 1000QABI_SPEND(auth_tip, R, depth=10, expiry=1000, owner_id)signrungtx with witness {new_committed_root=R, prime_depth=10, new_committed_expiry=1000, prime_preimage=H^40(seed)}SHA256^10(H^40(seed)) == H^50(seed) == auth_tip → check 4 passesR until block 1000. The coordinator can finalise the batch via QABI_SPEND at any block ≤ 1000.