TYPE 0x0505 · ANCHOR FAMILY

ANCHOR_SEAL

Asset seal anchor. Verifies an asset identifier hash and a state transition hash. Used for RGB-style client-validated assets and single-use seal protocols.

Anchor Invertible
ANCHOR_SEAL ASSET_ID STATE_TRANSITION 2 × HASH256 present → SATISFIED
FieldData TypeSizeSideDescription
asset_idHASH25632 BConditionsHash identifying the asset being sealed. Must equal SHA256(witness PREIMAGE[0]) at spend time.
state_transitionHASH25632 BConditionsHash of the state transition being committed. Must equal SHA256(witness PREIMAGE[1]).
preimage[0]PREIMAGEvarWitnessPreimage for asset_id (paired by field order).
preimage[1]PREIMAGEvarWitnessPreimage for state_transition.

PubkeyCountForBlock = 0. Witness layout is freeform (NO_IMPLICIT) but the evaluator requires one PREIMAGE per HASH256, in field order, via VerifyHashPreimageBinding.

0x0505 0 2 HASH256 · 32B HASH256 · 32B Conditions = 72 bytes
0x0505 0 2 PREIMAGE · var PREIMAGE · var Witness ≈ 6 + 2×len bytes
Total ≈ 78 + 2×len bytes
1.HasRequiredHashes(block, 2): at least 2 HASH256 fields must be present (the first is asset_id, the second is state_transition); else → ERROR
2.VerifyHashPreimageBinding(block): pair each HASH256 with a witness PREIMAGE in field order; require SHA256(preimage[i]) == hash[i] for both pairs. Insufficient PREIMAGEs, undersized HASH256, or any mismatch → UNSATISFIED
3.All checks passed → SATISFIED
ConditionResult
Fewer than 2 HASH256 fieldsERROR
Either HASH256 not exactly 32 BUNSATISFIED
Witness has fewer than 2 PREIMAGEs, or any pair fails the SHA-256 bindingUNSATISFIED
Both pairs satisfy the hash bindingSATISFIED
Conditions (asset seal with state transition — committed in the rung leaf)
{
  "type": "ANCHOR_SEAL",
  "inverted": false,
  "fields": [
    { "type": "HASH256", "hex": "d4e5f6a7...asset identifier...32 bytes" },
    { "type": "HASH256", "hex": "b8c9d0e1...state transition hash...32 bytes" }
  ]
}
Witness (input)
{
  "type": "ANCHOR_SEAL",
  "fields": [
    { "type": "PREIMAGE", "hex": "... preimage that hashes to asset_id ..." },
    { "type": "PREIMAGE", "hex": "... preimage that hashes to state_transition ..." }
  ]
}

Seals a specific state transition for the identified asset to this UTXO. The seal is consumed when the UTXO is spent; the witness reveals preimages whose SHA-256 values equal the two committed hashes.

RGB-style Client-validated Assets
Anchor client-side validated asset state transitions on-chain. The asset_id identifies the contract, and the state_transition hash commits to the off-chain state change. Validators verify the full state history client-side while only the seal appears on-chain.
Single-use Seals
Implement single-use seal protocols where each UTXO can only commit to one state transition per asset. Spending the UTXO consumes the seal, preventing double-commitment of the same asset state.
NFT State Anchoring
Anchor non-fungible token ownership transitions on-chain. The asset_id uniquely identifies the NFT, and the state_transition commits to the new ownership or metadata state, creating an auditable chain of custody.