{"cip":86,"implements":["assign_metadata_oracle","regex_metadata_update","tabular_metadata_update","simple_metadata_update"],"not_implemented":[],"authority_rule":"A label-86 action is authorised for policy P iff the transaction carrying it either (a) spends a non-reference input whose payment credential equals the key hash of the currently-effective oracle address for P, or (b) lists that key hash in the transaction's required signers. Assignments are checked against main_address; updates against update_address. The effective oracle before any explicit assignment is CIP-86's implicit one: both addresses set to the enterprise address of the native script's signing key.","rejection_reasons":{"NOT_CIP86":"payload at label 86 is not a CIP-86 action","UNKNOWN_ACTION":"CIP-86 action type not implemented","BAD_VERSION":"unrecognised CIP-86 version","UNSIGNED":"transaction not signed by the effective oracle key","NO_ORACLE":"policy has no resolvable oracle (multi-sig or non-native script)","MALFORMED":"action matched the shape but a field did not parse","REGEX_V2":"regex_metadata_update is disallowed in version 2 (per spec)","BAD_REGEX":"token-name pattern does not compile as an ECMAScript regex"},"notes":["Within one transaction, actions apply in the spec’s order: assignment, then regex, then tabular, then simple.","Regex updates match token names as TEXT (ECMAScript dialect) against the policy’s full asset census, restricted to assets minted no later than the update transaction; per spec they are refused under version 2. Patterns are compiled only after the authority check passes, so a stranger’s hostile pattern is never executed.","Two regex details the spec leaves open, stated so implementers can agree rather than guess. (1) MATCHING IS UNANCHORED — plain ECMAScript RegExp.test semantics, so the pattern \"Spawn1\" also matches Spawn10 and Spawn100; anchor with ^…$ to address one token. (2) A pattern is tested against BOTH the raw on-chain asset name and its CIP-67 label-stripped form, because a labelled (100)/(222) name carries four binary label bytes that no human-written pattern expects; testing only the raw bytes would silently match nothing on every CIP-68 collection.","Tabular updates are path ASSIGNMENTS: each dot-separated field_path’s addressed field is REPLACED by its cell value (the spec’s own examples set whole objects), and an explicit null deletes the addressed field — mirroring simple’s deletion rule, on which the spec is silent for tabular.","CIP-86 does not define how to verify that an update was signed by the oracle. This implementation uses input provenance as primary and required_signers as secondary; both are sound and both are reachable through a standard chain API.","Authority is compared by PAYMENT KEY HASH, never by address string. The implicit oracle is an enterprise address while an explicit assignment is usually the base address of the same key, so string comparison reports rotations that never happened.","Label 86 is squatted on mainnet by unrelated traffic. Payloads are schema-validated; a payload that is not a well-formed CIP-86 action is refused, not guessed at.","Version 1 expresses policy ids and token names as text, version 2 as raw bytes. The declared version decides — a token named \"deadbeef\" is both valid text and valid hex."]}