v0.1.0-pre.011

This commit is contained in:
2026-07-24 14:23:58 +02:00
parent 62bc0ffb44
commit 42e8a203ec
460 changed files with 12005 additions and 7020 deletions

View File

@@ -7,7 +7,7 @@
## Décodeur Solana Core
`SolanaCoreDecoder` est le premier décodeur concret porté depuis bot2. Il implémente `InstructionDecoder` et `ProtocolDecoder` sans dépendre de PostgreSQL, du RPC, de Tauri ou du wallet.
`DcSolanaCoreDecoder` est le premier décodeur concret porté depuis bot2. Il implémente `DcApiInstructionDecoder` et `DcApiProtocolDecoder` sans dépendre de PostgreSQL, du RPC, de Tauri ou du wallet.
Il couvre les 18 surfaces natives suivantes :
@@ -25,13 +25,13 @@ La matrice `docs/NATIVE_SOLANA_DECODER_MATRIX.json` reste la source machine-read
## Décodeur SPL Memo
`SplMemoDecoder` couvre exactement les générations v1, v3 et v4. Le payload est lu comme un message brut sans discriminator, borné à 4 096 octets, puis projeté avec son texte UTF-8 complet, sa longueur, son SHA-256, les comptes ordonnés et le statut de commit.
`DcSplMemoDecoder` couvre exactement les générations v1, v3 et v4. Le payload est lu comme un message brut sans discriminator, borné à 4 096 octets, puis projeté avec son texte UTF-8 complet, sa longueur, son SHA-256, les comptes ordonnés et le statut de commit.
Memo v1 ignore les comptes lors de la validation runtime. Memo v3 et v4 exigent que chaque compte fourni soit signer. Les transactions échouées restent des intentions non commitées et les payloads UTF-8 invalides ou signatures manquantes deviennent des tentatives invalides explicites. La matrice normative est `docs/SPL_MEMO_MATRIX.json`.
## Décodeur SPL Token classique
`SplTokenDecoder` couvre exclusivement le Program ID classique
`DcSplTokenDecoder` couvre exclusivement le Program ID classique
`TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA`. Il publie 28 déclarations de couverture pour
les tags `0..24`, `38`, `45` et `255`, y compris les variantes historiques, checked,
`WithdrawExcessLamports`, `UnwrapLamports` et `Batch`.
@@ -45,7 +45,7 @@ normative est `docs/SPL_TOKEN_MATRIX.json`.
## Décodeur SPL Associated Token Account
`SplAssociatedTokenAccountDecoder` couvre exclusivement
`DcSplAssociatedTokenAccountDecoder` couvre exclusivement
`ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL`. Il reconnaît les trois variantes publiées
`Create`, `CreateIdempotent` et `RecoverNested`, ainsi que lencodage historique vide de `Create`.
@@ -58,7 +58,7 @@ Program ID sans reconstruire leur état ni interpréter leurs extensions. La mat
## Décodeur SPL Token2022
`SplToken2022Decoder` couvre exclusivement
`DcSplToken2022Decoder` couvre exclusivement
`TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb`. Il conserve les 48 enveloppes de premier niveau,
les sous-instructions dextensions dont le wire est officiellement identifiable, les interfaces
Token Metadata et Token Group exécutées directement par Token2022, ainsi que `Batch` sans batch
@@ -67,22 +67,22 @@ imbriqué.
Le décodeur borne les payloads, les chaînes de metadata, le nombre denfants et les comptes
cumulés. Les comptes, autorités, offsets de preuve, suffixes et chemins outer/inner restent
ordonnés et exacts. Une transaction échouée produit une intention non commitée. Le parseur public
`parse_token_2022_state()` distingue Mint, Account et Multisig, conserve la base exacte et expose
`decoder_spl_token2022_parse_token2022_state()` distingue Mint, Account et Multisig, conserve la base exacte et expose
les entrées TLV ordonnées sans inventer létat dun programme externe pointé. La matrice normative
est `docs/SPL_TOKEN_2022_MATRIX.json`.
## Décodeur du registre ElGamal
`SplElgamalRegistryDecoder` couvre le programme indépendant
`DcSplElgamalRegistryDecoder` couvre le programme indépendant
`regVYJW7tcT8zipN5YiBvHsvR5jXW1uLFxaHSbugABg`. Il décode exactement `CreateRegistry` et
`UpdateRegistry`, conserve loffset relatif de preuve et ne prétend jamais vérifier la preuve ZK.
`parse_elgamal_registry_state()` exige exactement 64 octets et restitue le wallet propriétaire, la
`decoder_spl_elgamal_registry_parse_elgamal_registry_state()` exige exactement 64 octets et restitue le wallet propriétaire, la
clé publique ElGamal et le wire complet. La matrice normative est
`docs/SPL_ELGAMAL_REGISTRY_MATRIX.json`.
## Décodeur Metaplex Token Metadata
`MetadataMetaplexTokenMetadataDecoder` couvre exclusivement
`DcMetadataMetaplexTokenMetadataDecoder` couvre exclusivement
`metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s`. Il inventorie exactement les 58
discriminateurs `0..=57`, conserve les arguments Borsh, les comptes positionnels,
les placeholders optionnels, les chemins outer/CPI et les transactions échouées
@@ -100,22 +100,22 @@ politique dexécution définitivement interdite. La matrice normative est
## API publique utile
- `EventMaterializer`, `MaterializerIdentity`, `MaterializationTransactionPolicy`, `MaterializerExecutionResult` et `MaterializedOutput` : contrat complet utilisable par un matérialiseur interne ou externe ;
- `LifecycleMaterializer`, `AdminMaterializer`, `ComplianceAuditMaterializer` et `StakingMaterializer` : matérialisateurs Solana natifs concrets ;
- `materialize_token_2022_admin_state_snapshots()` et `materialize_elgamal_registry_state_snapshot()` : projections stateful dadministration déjà exposées ;
- `SolanaCoreDecoder` : décodeur concret natif ;
- `SplMemoDecoder` : décodeur exact des trois générations SPL Memo ;
- `SplTokenDecoder` : décodeur exact du programme SPL Token classique ;
- `SplAssociatedTokenAccountDecoder` : décodeur exact du programme Associated Token Account ;
- `SplToken2022Decoder` : décodeur exact des instructions Token2022 ;
- `Token2022State`, `Token2022StateKind`, `Token2022TlvEntry` et `parse_token_2022_state()` : API publique de lecture détat Token2022 ;
- `SplElgamalRegistryDecoder`, `ElGamalRegistryState` et `parse_elgamal_registry_state()` : API publique du registre ElGamal ;
- `MetadataMetaplexTokenMetadataDecoder` : décodeur exact du programme Metaplex Token Metadata ;
- `MtApiEventMaterializer`, `MtApiMaterializerIdentity`, `MtApiMaterializationTransactionPolicy`, `MtApiMaterializerExecutionResult` et `MtApiMaterializedOutput` : contrat complet utilisable par un matérialiseur interne ou externe ;
- `MtLifecycleMaterializer`, `MtAdminMaterializer`, `MtComplianceAuditMaterializer` et `MtStakingMaterializer` : matérialisateurs Solana natifs concrets ;
- `materialize_token2022_admin_state_snapshots()` et `materialize_elgamal_registry_state_snapshot()` : projections stateful dadministration déjà exposées ;
- `DcSolanaCoreDecoder` : décodeur concret natif ;
- `DcSplMemoDecoder` : décodeur exact des trois générations SPL Memo ;
- `DcSplTokenDecoder` : décodeur exact du programme SPL Token classique ;
- `DcSplAssociatedTokenAccountDecoder` : décodeur exact du programme Associated Token Account ;
- `DcSplToken2022Decoder` : décodeur exact des instructions Token2022 ;
- `DcToken2022State`, `DcToken2022StateKind`, `DcToken2022TlvEntry` et `decoder_spl_token2022_token2022_state()` : API publique de lecture détat Token2022 ;
- `DcSplElgamalRegistryDecoder`, `DcSplElGamalRegistryState` et `decoder_spl_elgamal_registry_parse_elgamal_registry_state()` : API publique du registre ElGamal ;
- `DcMetadataMetaplexTokenMetadataDecoder` : décodeur exact du programme Metaplex Token Metadata ;
- `kb_lib::decoder::metadata::metaplex_token_metadata` : parseurs et snapshots publics des comptes Metaplex ;
- `InstructionDecoder` : contrat de reconnaissance, couverture et décodage contextualisé ;
- `ProtocolDecoder` : contrat de compatibilité avec les observations historiques ;
- `CoreInstructionReplayInput` : input source-neutral produit par lextraction core ;
- `DecoderExecutionResult`, `DecoderRecognition` et `DecoderCoverageDeclaration` : résultats typés du pipeline ;
- `DcApiInstructionDecoder` : contrat de reconnaissance, couverture et décodage contextualisé ;
- `DcApiProtocolDecoder` : contrat de compatibilité avec les observations historiques ;
- `MdCoreInstructionReplayInput` : input source-neutral produit par lextraction core ;
- `DcApiDecoderExecutionResult`, `DcApiDecoderRecognition` et `DcApiDecoderCoverageDeclaration` : résultats typés du pipeline ;
- modèles canoniques et nomenclature réexportés depuis la façade.
Les helpers, constantes wire et types intermédiaires de chaque composant restent internes. Leurs noms sont préfixés au niveau de la façade interne afin déviter les collisions lors de la fusion des anciens crates.

View File

@@ -3,164 +3,498 @@
//! Consolidated decoder modules.
pub mod adapter;
pub mod admin;
pub mod amm;
pub mod anchor;
pub mod api;
pub mod bridge;
pub mod clmm;
pub mod cpmm;
pub mod dlmm;
pub mod fees;
pub mod governance;
pub mod launchpad;
pub mod lending;
pub mod lock;
pub mod metadata;
pub mod nft;
pub mod orderbook;
pub mod perpetuals;
pub mod router;
pub mod rwa;
pub mod solana;
pub mod spl;
pub mod stable;
pub mod staking;
pub mod treasury;
pub mod vault;
pub mod vesting;
pub mod wallet;
pub mod weighted;
mod adapter;
mod admin;
mod amm;
mod anchor;
mod api;
mod bridge;
mod clmm;
mod cpmm;
mod dlmm;
mod fees;
mod governance;
mod launchpad;
mod lending;
mod lock;
mod metadata;
mod nft;
mod orderbook;
mod perpetuals;
mod router;
mod rwa;
mod solana;
mod spl;
mod stable;
mod staking;
mod treasury;
mod vault;
mod vesting;
mod wallet;
mod weighted;
/// One parsed SPL ElGamal registry instruction.
pub(crate) use self::spl::ParsedRegistryInstruction;
/// Approve Collection Authority discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_APPROVE_COLLECTION_AUTHORITY_DISCRIMINATOR;
/// Approve Use Authority discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_APPROVE_USE_AUTHORITY_DISCRIMINATOR;
/// Bubblegum Set Collection Size discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_BUBBLEGUM_SET_COLLECTION_SIZE_DISCRIMINATOR;
/// Burn discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_BURN_DISCRIMINATOR;
/// Historical Burn Edition NFT discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_BURN_EDITION_NFT_DISCRIMINATOR;
/// Historical Burn NFT discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_BURN_NFT_DISCRIMINATOR;
/// Close Accounts discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_CLOSE_ACCOUNTS_DISCRIMINATOR;
/// Close Escrow Account discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_CLOSE_ESCROW_ACCOUNT_DISCRIMINATOR;
/// Collect discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_COLLECT_DISCRIMINATOR;
/// Convert Master Edition V1 to V2 discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_CONVERT_MASTER_EDITION_V1_TO_V2_DISCRIMINATOR;
/// Modern Create discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_CREATE_DISCRIMINATOR;
/// Create Escrow Account discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_CREATE_ESCROW_ACCOUNT_DISCRIMINATOR;
/// Historical Create Master Edition discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_CREATE_MASTER_EDITION_DISCRIMINATOR;
/// Create Master Edition V3 discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_CREATE_MASTER_EDITION_V3_DISCRIMINATOR;
/// Historical Create Metadata Account discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_CREATE_METADATA_ACCOUNT_DISCRIMINATOR;
/// Historical Create Metadata Account V2 discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_CREATE_METADATA_ACCOUNT_V2_DISCRIMINATOR;
/// Create Metadata Account V3 discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_CREATE_METADATA_ACCOUNT_V3_DISCRIMINATOR;
/// Delegate discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_DELEGATE_DISCRIMINATOR;
/// Deprecated Create Master Edition discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_DEPRECATED_CREATE_MASTER_EDITION_DISCRIMINATOR;
/// Deprecated Create Reservation List discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_DEPRECATED_CREATE_RESERVATION_LIST_DISCRIMINATOR;
/// Deprecated printing-token mint-new-edition discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_DEPRECATED_MINT_NEW_EDITION_VIA_PRINTING_TOKEN_DISCRIMINATOR;
/// Deprecated Mint Printing Tokens discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_DEPRECATED_MINT_PRINTING_TOKENS_DISCRIMINATOR;
/// Deprecated Mint Printing Tokens Via Token discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_DEPRECATED_MINT_PRINTING_TOKENS_VIA_TOKEN_DISCRIMINATOR;
/// Deprecated Set Reservation List discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_DEPRECATED_SET_RESERVATION_LIST_DISCRIMINATOR;
/// Number of bytes retained in malformed-wire diagnostics.
pub(crate) use self::metadata::DC_METADATA_MTM_DIAGNOSTIC_PREFIX_BYTES;
/// Stable event payload contract version.
pub(crate) use self::metadata::DC_METADATA_MTM_EVENT_VERSION;
/// Freeze Delegated Account discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_FREEZE_DELEGATED_ACCOUNT_DISCRIMINATOR;
/// Current pre-release instruction inventory.
pub(crate) use self::metadata::DC_METADATA_MTM_INSTRUCTION_ENTRIES;
/// Lock discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_LOCK_DISCRIMINATOR;
/// Maximum encoded base64 instruction payload size.
pub(crate) use self::metadata::DC_METADATA_MTM_MAX_BASE64_BYTES;
/// Maximum number of instruction accounts accepted by this decoder.
pub(crate) use self::metadata::DC_METADATA_MTM_MAX_INSTRUCTION_ACCOUNTS;
/// Tracing target for this decoder.
/// Maximum retained instruction payload size.
pub(crate) use self::metadata::DC_METADATA_MTM_MAX_INSTRUCTION_BYTES;
/// Migrate discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_MIGRATE_DISCRIMINATOR;
/// Modern Mint discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_MINT_DISCRIMINATOR;
/// Mint New Edition From Master Edition Via Token discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_MINT_NEW_EDITION_FROM_MASTER_EDITION_VIA_TOKEN_DISCRIMINATOR;
/// Mint New Edition From Master Edition Via Vault Proxy discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_MINT_NEW_EDITION_FROM_MASTER_EDITION_VIA_VAULT_PROXY_DISCRIMINATOR;
/// Modern Print discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_PRINT_DISCRIMINATOR;
/// Puff Metadata discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_PUFF_METADATA_DISCRIMINATOR;
/// Remove Creator Verification discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_REMOVE_CREATOR_VERIFICATION_DISCRIMINATOR;
/// Resize discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_RESIZE_DISCRIMINATOR;
/// Revoke Collection Authority discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_REVOKE_COLLECTION_AUTHORITY_DISCRIMINATOR;
/// Revoke discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_REVOKE_DISCRIMINATOR;
/// Revoke Use Authority discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_REVOKE_USE_AUTHORITY_DISCRIMINATOR;
/// Set And Verify Collection discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_SET_AND_VERIFY_COLLECTION_DISCRIMINATOR;
/// Set And Verify Sized Collection Item discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_SET_AND_VERIFY_SIZED_COLLECTION_ITEM_DISCRIMINATOR;
/// Set Collection Size discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_SET_COLLECTION_SIZE_DISCRIMINATOR;
/// Set Token Standard discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_SET_TOKEN_STANDARD_DISCRIMINATOR;
/// Sign Metadata discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_SIGN_METADATA_DISCRIMINATOR;
/// Stable decoder surface code.
pub(crate) use self::metadata::DC_METADATA_MTM_SURFACE_CODE;
/// Thaw Delegated Account discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_THAW_DELEGATED_ACCOUNT_DISCRIMINATOR;
/// Canonical tracing target for this crate.
pub(crate) use self::metadata::DC_METADATA_MTM_TRACING_TARGET;
/// Transfer discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_TRANSFER_DISCRIMINATOR;
/// Transfer Out Of Escrow discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_TRANSFER_OUT_OF_ESCROW_DISCRIMINATOR;
/// Unlock discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_UNLOCK_DISCRIMINATOR;
/// Unverify Collection discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_UNVERIFY_COLLECTION_DISCRIMINATOR;
/// Modern Unverify discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_UNVERIFY_DISCRIMINATOR;
/// Unverify Sized Collection Item discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_UNVERIFY_SIZED_COLLECTION_ITEM_DISCRIMINATOR;
/// Modern Update discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_UPDATE_DISCRIMINATOR;
/// Historical Update Metadata Account discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_UPDATE_METADATA_ACCOUNT_DISCRIMINATOR;
/// Update Metadata Account V2 discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_UPDATE_METADATA_ACCOUNT_V2_DISCRIMINATOR;
/// Update Primary Sale Happened Via Token discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_UPDATE_PRIMARY_SALE_HAPPENED_VIA_TOKEN_DISCRIMINATOR;
/// Modern Use discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_USE_DISCRIMINATOR;
/// Utilize discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_UTILIZE_DISCRIMINATOR;
/// Verify Collection discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_VERIFY_COLLECTION_DISCRIMINATOR;
/// Modern Verify discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_VERIFY_DISCRIMINATOR;
/// Verify Sized Collection Item discriminator.
pub(crate) use self::metadata::DC_METADATA_MTM_VERIFY_SIZED_COLLECTION_ITEM_DISCRIMINATOR;
/// Crate-root access to `decode` from `instruction`.
pub(crate) use self::metadata::decoder_metadata_metaplex_token_metadata_decode;
/// Crate-root access to `entry_for_discriminator` from `instruction`.
pub(crate) use self::metadata::decoder_metadata_metaplex_token_metadata_entry_for_discriminator;
/// Crate-root access to `payload_discriminator` from `instruction`.
pub(crate) use self::metadata::decoder_metadata_metaplex_token_metadata_payload_discriminator;
pub(crate) use self::solana::DC_SOLANA_CORE_ADDRESS_LOOKUP_TABLE_SURFACE_CODE;
pub(crate) use self::solana::DC_SOLANA_CORE_BPF_LOADER_DEPRECATED_SURFACE_CODE;
pub(crate) use self::solana::DC_SOLANA_CORE_BPF_LOADER_SURFACE_CODE;
pub(crate) use self::solana::DC_SOLANA_CORE_BPF_LOADER_UPGRADEABLE_SURFACE_CODE;
pub(crate) use self::solana::DC_SOLANA_CORE_COMPUTE_BUDGET_SURFACE_CODE;
pub(crate) use self::solana::DC_SOLANA_CORE_CONFIG_SURFACE_CODE;
pub(crate) use self::solana::DC_SOLANA_CORE_ED25519_PUBLIC_KEY_BYTES;
pub(crate) use self::solana::DC_SOLANA_CORE_ED25519_SURFACE_CODE;
pub(crate) use self::solana::DC_SOLANA_CORE_FEATURE_SURFACE_CODE;
pub(crate) use self::solana::DC_SOLANA_CORE_LOADER_V4_SURFACE_CODE;
pub(crate) use self::solana::DC_SOLANA_CORE_MAX_NATIVE_INSTRUCTION_PAYLOAD_BYTES;
pub(crate) use self::solana::DC_SOLANA_CORE_NATIVE_EVENT_VERSION;
pub(crate) use self::solana::DC_SOLANA_CORE_NATIVE_LOADER_SURFACE_CODE;
pub(crate) use self::solana::DC_SOLANA_CORE_PRECOMPILE_COMPONENT_PREFIX_BYTES;
pub(crate) use self::solana::DC_SOLANA_CORE_PROTOCOL_CODE;
pub(crate) use self::solana::DC_SOLANA_CORE_SECP256K1_ETHEREUM_ADDRESS_BYTES;
pub(crate) use self::solana::DC_SOLANA_CORE_SECP256K1_SURFACE_CODE;
pub(crate) use self::solana::DC_SOLANA_CORE_SECP256R1_MAX_SIGNATURES;
pub(crate) use self::solana::DC_SOLANA_CORE_SECP256R1_PUBLIC_KEY_BYTES;
pub(crate) use self::solana::DC_SOLANA_CORE_SECP256R1_SURFACE_CODE;
pub(crate) use self::solana::DC_SOLANA_CORE_SIGNATURE_BYTES;
pub(crate) use self::solana::DC_SOLANA_CORE_SLASHING_SURFACE_CODE;
pub(crate) use self::solana::DC_SOLANA_CORE_STAKE_SURFACE_CODE;
pub(crate) use self::solana::DC_SOLANA_CORE_SYSTEM_SURFACE_CODE;
pub(crate) use self::solana::DC_SOLANA_CORE_TRACING_TARGET;
pub(crate) use self::solana::DC_SOLANA_CORE_U8_OFFSETS_BYTES;
pub(crate) use self::solana::DC_SOLANA_CORE_U16_OFFSETS_BYTES;
pub(crate) use self::solana::DC_SOLANA_CORE_VOTE_SURFACE_CODE;
pub(crate) use self::solana::DC_SOLANA_CORE_ZK_ELGAMAL_PROOF_SURFACE_CODE;
pub(crate) use self::solana::DC_SOLANA_CORE_ZK_TOKEN_PROOF_SURFACE_CODE;
pub(crate) use self::solana::DcSolanaCoreAccountRole;
pub(crate) use self::solana::DcSolanaCoreResolvedInstructionPayload;
pub(crate) use self::solana::decoder_solana_core_address_lookup_table_coverage;
pub(crate) use self::solana::decoder_solana_core_address_lookup_table_decode;
pub(crate) use self::solana::decoder_solana_core_address_lookup_table_recognize;
pub(crate) use self::solana::decoder_solana_core_bounded_hexadecimal_prefix;
pub(crate) use self::solana::decoder_solana_core_bounded_slice;
pub(crate) use self::solana::decoder_solana_core_compute_budget_coverage;
pub(crate) use self::solana::decoder_solana_core_compute_budget_decode;
pub(crate) use self::solana::decoder_solana_core_compute_budget_recognize;
pub(crate) use self::solana::decoder_solana_core_config_coverage;
pub(crate) use self::solana::decoder_solana_core_config_decode;
pub(crate) use self::solana::decoder_solana_core_config_recognize;
pub(crate) use self::solana::decoder_solana_core_decode_instruction_data;
pub(crate) use self::solana::decoder_solana_core_decoded_payload_length;
pub(crate) use self::solana::decoder_solana_core_decoded_payload_sha256;
pub(crate) use self::solana::decoder_solana_core_decoded_result;
pub(crate) use self::solana::decoder_solana_core_failed_result;
pub(crate) use self::solana::decoder_solana_core_feature_coverage;
pub(crate) use self::solana::decoder_solana_core_feature_decode;
pub(crate) use self::solana::decoder_solana_core_feature_recognize;
pub(crate) use self::solana::decoder_solana_core_hash_bytes;
pub(crate) use self::solana::decoder_solana_core_hexadecimal_prefix;
pub(crate) use self::solana::decoder_solana_core_loaders_coverage;
pub(crate) use self::solana::decoder_solana_core_loaders_decode;
pub(crate) use self::solana::decoder_solana_core_loaders_recognize;
pub(crate) use self::solana::decoder_solana_core_payload_hash;
pub(crate) use self::solana::decoder_solana_core_precompiles_coverage;
pub(crate) use self::solana::decoder_solana_core_precompiles_decode;
pub(crate) use self::solana::decoder_solana_core_precompiles_recognize;
pub(crate) use self::solana::decoder_solana_core_read_u32_le;
pub(crate) use self::solana::decoder_solana_core_read_u64_le;
pub(crate) use self::solana::decoder_solana_core_resolve_accounts;
pub(crate) use self::solana::decoder_solana_core_resolve_u8_instruction_payload;
pub(crate) use self::solana::decoder_solana_core_resolve_u16_instruction_payload;
pub(crate) use self::solana::decoder_solana_core_slashing_coverage;
pub(crate) use self::solana::decoder_solana_core_slashing_decode;
pub(crate) use self::solana::decoder_solana_core_slashing_recognize;
pub(crate) use self::solana::decoder_solana_core_stake_coverage;
pub(crate) use self::solana::decoder_solana_core_stake_decode;
pub(crate) use self::solana::decoder_solana_core_stake_recognize;
pub(crate) use self::solana::decoder_solana_core_system_coverage;
pub(crate) use self::solana::decoder_solana_core_system_decode;
pub(crate) use self::solana::decoder_solana_core_system_recognize;
pub(crate) use self::solana::decoder_solana_core_target_outer_instruction_index;
pub(crate) use self::solana::decoder_solana_core_unsupported_result;
pub(crate) use self::solana::decoder_solana_core_vote_coverage;
pub(crate) use self::solana::decoder_solana_core_vote_decode;
pub(crate) use self::solana::decoder_solana_core_vote_recognize;
pub(crate) use self::solana::decoder_solana_core_zk_elgamal_coverage;
pub(crate) use self::solana::decoder_solana_core_zk_elgamal_decode;
pub(crate) use self::solana::decoder_solana_core_zk_elgamal_recognize;
pub(crate) use self::solana::decoder_solana_core_zk_token_proof_coverage;
pub(crate) use self::solana::decoder_solana_core_zk_token_proof_decode;
pub(crate) use self::solana::decoder_solana_core_zk_token_proof_recognize;
/// Current stable Associated Token Account decoded event contract version.
pub(crate) use self::spl::SPL_ASSOCIATED_TOKEN_ACCOUNT_EVENT_VERSION;
pub(crate) use self::spl::DC_SPL_ATA_EVENT_VERSION;
/// Exact Associated Token Account instructions published by the official interface.
pub(crate) use self::spl::SPL_ASSOCIATED_TOKEN_ACCOUNT_INSTRUCTION_ENTRIES;
pub(crate) use self::spl::DC_SPL_ATA_INSTRUCTION_ENTRIES;
/// Maximum retained account-key text length for the Associated Token Account decoder.
pub(crate) use self::spl::SPL_ASSOCIATED_TOKEN_ACCOUNT_MAX_ACCOUNT_KEY_BYTES;
pub(crate) use self::spl::DC_SPL_ATA_MAX_ACCOUNT_KEY_BYTES;
/// Maximum retained instruction account count for the Associated Token Account decoder.
pub(crate) use self::spl::SPL_ASSOCIATED_TOKEN_ACCOUNT_MAX_ACCOUNTS;
pub(crate) use self::spl::DC_SPL_ATA_MAX_ACCOUNTS;
/// Maximum retained semantic diagnostic count for the Associated Token Account decoder.
pub(crate) use self::spl::SPL_ASSOCIATED_TOKEN_ACCOUNT_MAX_DIAGNOSTICS;
pub(crate) use self::spl::DC_SPL_ATA_MAX_DIAGNOSTICS;
/// Maximum retained Associated Token Account instruction payload size.
pub(crate) use self::spl::SPL_ASSOCIATED_TOKEN_ACCOUNT_MAX_INSTRUCTION_BYTES;
pub(crate) use self::spl::DC_SPL_ATA_MAX_INSTRUCTION_BYTES;
/// Maximum retained transaction account-key count for the Associated Token Account decoder.
pub(crate) use self::spl::SPL_ASSOCIATED_TOKEN_ACCOUNT_MAX_TRANSACTION_KEYS;
pub(crate) use self::spl::DC_SPL_ATA_MAX_TRANSACTION_KEYS;
/// Stable protocol and surface code for the Associated Token Account program.
pub(crate) use self::spl::SPL_ASSOCIATED_TOKEN_ACCOUNT_SURFACE_CODE;
pub(crate) use self::spl::DC_SPL_ATA_SURFACE_CODE;
/// Canonical tracing target for the Associated Token Account decoder.
pub(crate) use self::spl::SPL_ASSOCIATED_TOKEN_ACCOUNT_TRACING_TARGET;
pub(crate) use self::spl::DC_SPL_ATA_TRACING_TARGET;
/// Current stable SPL ElGamal registry event contract version.
pub(crate) use self::spl::SPL_ELGAMAL_REGISTRY_EVENT_VERSION;
pub(crate) use self::spl::DC_SPL_ELGAMAL_REGISTRY_EVENT_VERSION;
/// Maximum retained SPL ElGamal registry instruction payload size.
pub(crate) use self::spl::SPL_ELGAMAL_REGISTRY_MAX_INSTRUCTION_BYTES;
pub(crate) use self::spl::DC_SPL_ELGAMAL_REGISTRY_MAX_INSTRUCTION_BYTES;
/// Stable SPL ElGamal registry surface code.
pub(crate) use self::spl::SPL_ELGAMAL_REGISTRY_SURFACE_CODE;
pub(crate) use self::spl::DC_SPL_ELGAMAL_REGISTRY_SURFACE_CODE;
/// Canonical tracing target for the SPL ElGamal registry decoder.
pub(crate) use self::spl::SPL_ELGAMAL_REGISTRY_TRACING_TARGET;
pub(crate) use self::spl::DC_SPL_ELGAMAL_REGISTRY_TRACING_TARGET;
/// Maximum payload prefix retained for bounded diagnostics.
pub(crate) use self::spl::SPL_MEMO_DIAGNOSTIC_PREFIX_BYTES;
pub(crate) use self::spl::DC_SPL_MEMO_DIAGNOSTIC_PREFIX_BYTES;
/// Current stable Memo decoded event contract version.
pub(crate) use self::spl::SPL_MEMO_EVENT_VERSION;
pub(crate) use self::spl::DC_SPL_MEMO_EVENT_VERSION;
/// Maximum decoded instruction data retained as a complete Memo payload.
pub(crate) use self::spl::SPL_MEMO_MAX_PAYLOAD_BYTES;
pub(crate) use self::spl::DC_SPL_MEMO_MAX_PAYLOAD_BYTES;
/// Stable protocol code shared by Memo generations.
pub(crate) use self::spl::SPL_MEMO_PROTOCOL_CODE;
pub(crate) use self::spl::DC_SPL_MEMO_PROTOCOL_CODE;
/// Canonical tracing target for the SPL Memo decoder.
pub(crate) use self::spl::SPL_MEMO_TRACING_TARGET;
pub(crate) use self::spl::DC_SPL_MEMO_TRACING_TARGET;
/// Stable Memo v1 surface code.
pub(crate) use self::spl::SPL_MEMO_V1_SURFACE_CODE;
pub(crate) use self::spl::DC_SPL_MEMO_V1_SURFACE_CODE;
/// Stable Memo v3 surface code.
pub(crate) use self::spl::SPL_MEMO_V3_SURFACE_CODE;
pub(crate) use self::spl::DC_SPL_MEMO_V3_SURFACE_CODE;
/// Stable Memo v4 surface code.
pub(crate) use self::spl::SPL_MEMO_V4_SURFACE_CODE;
/// Maximum prefix retained in bounded Token-2022 diagnostics.
pub(crate) use self::spl::SPL_TOKEN_2022_DIAGNOSTIC_PREFIX_BYTES;
/// Current stable Token-2022 decoded event contract version.
pub(crate) use self::spl::SPL_TOKEN_2022_EVENT_VERSION;
/// Exact top-level instruction inventory published by the resolved Token-2022 interface.
pub(crate) use self::spl::SPL_TOKEN_2022_INSTRUCTION_ENTRIES;
/// Maximum total account metas consumed by one Token-2022 batch.
pub(crate) use self::spl::SPL_TOKEN_2022_MAX_BATCH_ACCOUNTS;
/// Maximum decoded sub-instructions in one Token-2022 batch.
pub(crate) use self::spl::SPL_TOKEN_2022_MAX_BATCH_INSTRUCTIONS;
/// Maximum retained Token-2022 instruction payload size.
pub(crate) use self::spl::SPL_TOKEN_2022_MAX_INSTRUCTION_BYTES;
/// Maximum retained UTF-8 string size for embedded Token Metadata instructions.
pub(crate) use self::spl::SPL_TOKEN_2022_MAX_METADATA_STRING_BYTES;
/// Stable Token-2022 surface code.
pub(crate) use self::spl::SPL_TOKEN_2022_SURFACE_CODE;
/// Canonical tracing target for the Token-2022 decoder.
pub(crate) use self::spl::SPL_TOKEN_2022_TRACING_TARGET;
pub(crate) use self::spl::DC_SPL_MEMO_V4_SURFACE_CODE;
/// Maximum prefix retained in bounded classic SPL Token diagnostics.
pub(crate) use self::spl::SPL_TOKEN_DIAGNOSTIC_PREFIX_BYTES;
pub(crate) use self::spl::DC_SPL_TOKEN_DIAGNOSTIC_PREFIX_BYTES;
/// Current stable classic SPL Token decoded event contract version.
pub(crate) use self::spl::SPL_TOKEN_EVENT_VERSION;
pub(crate) use self::spl::DC_SPL_TOKEN_EVENT_VERSION;
/// One exact classic SPL Token instruction entry published by the official interface.
pub(crate) use self::spl::SPL_TOKEN_INSTRUCTION_ENTRIES;
pub(crate) use self::spl::DC_SPL_TOKEN_INSTRUCTION_ENTRIES;
/// Maximum total account metas consumed by one classic SPL Token batch.
pub(crate) use self::spl::SPL_TOKEN_MAX_BATCH_ACCOUNTS;
pub(crate) use self::spl::DC_SPL_TOKEN_MAX_BATCH_ACCOUNTS;
/// Maximum decoded sub-instructions in one classic SPL Token batch.
pub(crate) use self::spl::SPL_TOKEN_MAX_BATCH_INSTRUCTIONS;
pub(crate) use self::spl::DC_SPL_TOKEN_MAX_BATCH_INSTRUCTIONS;
/// Maximum retained classic SPL Token instruction payload size.
pub(crate) use self::spl::SPL_TOKEN_MAX_INSTRUCTION_BYTES;
pub(crate) use self::spl::DC_SPL_TOKEN_MAX_INSTRUCTION_BYTES;
/// Stable protocol and surface code for the classic SPL Token program.
pub(crate) use self::spl::SPL_TOKEN_SURFACE_CODE;
pub(crate) use self::spl::DC_SPL_TOKEN_SURFACE_CODE;
/// Canonical tracing target for the classic SPL Token decoder.
pub(crate) use self::spl::SPL_TOKEN_TRACING_TARGET;
pub(crate) use self::spl::DC_SPL_TOKEN_TRACING_TARGET;
/// Maximum prefix retained in bounded Token-2022 diagnostics.
pub(crate) use self::spl::DC_SPL_TOKEN2022_DIAGNOSTIC_PREFIX_BYTES;
/// Current stable Token-2022 decoded event contract version.
pub(crate) use self::spl::DC_SPL_TOKEN2022_EVENT_VERSION;
/// Exact top-level instruction inventory published by the resolved Token-2022 interface.
pub(crate) use self::spl::DC_SPL_TOKEN2022_INSTRUCTION_ENTRIES;
/// Maximum total account metas consumed by one Token-2022 batch.
pub(crate) use self::spl::DC_SPL_TOKEN2022_MAX_BATCH_ACCOUNTS;
/// Maximum decoded sub-instructions in one Token-2022 batch.
pub(crate) use self::spl::DC_SPL_TOKEN2022_MAX_BATCH_INSTRUCTIONS;
/// Maximum retained Token-2022 instruction payload size.
pub(crate) use self::spl::DC_SPL_TOKEN2022_MAX_INSTRUCTION_BYTES;
/// Maximum retained UTF-8 string size for embedded Token Metadata instructions.
pub(crate) use self::spl::DC_SPL_TOKEN2022_MAX_METADATA_STRING_BYTES;
/// Stable Token-2022 surface code.
pub(crate) use self::spl::DC_SPL_TOKEN2022_SURFACE_CODE;
/// Canonical tracing target for the Token-2022 decoder.
pub(crate) use self::spl::DC_SPL_TOKEN2022_TRACING_TARGET;
/// One parsed SPL ElGamal registry instruction.
pub(crate) use self::spl::DcSplElGamalRegistryParsedRegistryInstruction;
/// Decodes one bounded Associated Token Account instruction.
pub(crate) use self::spl::spl_associated_token_account_decode;
pub(crate) use self::spl::decoder_spl_associated_token_account_decode;
/// Returns the exact entry matching an Associated Token Account wire.
pub(crate) use self::spl::spl_associated_token_account_entry;
pub(crate) use self::spl::decoder_spl_associated_token_account_entry;
/// Reads one bounded Associated Token Account payload.
pub(crate) use self::spl::spl_associated_token_account_payload;
pub(crate) use self::spl::decoder_spl_associated_token_account_payload;
/// Decodes one bounded SPL ElGamal registry instruction.
pub(crate) use self::spl::spl_elgamal_registry_decode;
pub(crate) use self::spl::decoder_spl_elgamal_registry_decode;
/// Decodes one bounded SPL ElGamal registry instruction payload.
pub(crate) use self::spl::spl_elgamal_registry_decode_payload;
pub(crate) use self::spl::decoder_spl_elgamal_registry_decode_payload;
/// Parses one exact SPL ElGamal registry instruction.
pub(crate) use self::spl::spl_elgamal_registry_parse;
pub(crate) use self::spl::decoder_spl_elgamal_registry_parse;
/// Decodes one bounded SPL Memo instruction.
pub(crate) use self::spl::spl_memo_decode;
/// Decodes one bounded Token-2022 instruction.
pub(crate) use self::spl::spl_token_2022_decode;
/// Returns the exact entry matching one Token-2022 tag.
pub(crate) use self::spl::spl_token_2022_entry_for_tag;
/// Returns the first byte of one retained Token-2022 payload.
pub(crate) use self::spl::spl_token_2022_payload_tag;
pub(crate) use self::spl::decoder_spl_memo_decode;
/// Decodes one bounded classic SPL Token instruction.
pub(crate) use self::spl::spl_token_decode;
pub(crate) use self::spl::decoder_spl_token_decode;
/// Returns the published entry matching one classic SPL Token tag.
pub(crate) use self::spl::spl_token_entry_for_tag;
pub(crate) use self::spl::decoder_spl_token_entry_for_tag;
/// Returns the first byte of one retained classic SPL Token payload.
pub(crate) use self::spl::spl_token_payload_tag;
pub(crate) use self::spl::decoder_spl_token_payload_tag;
/// Decodes one bounded Token-2022 instruction.
pub(crate) use self::spl::decoder_spl_token2022_decode;
/// Returns the exact entry matching one Token-2022 tag.
pub(crate) use self::spl::decoder_spl_token2022_entry_for_tag;
/// Returns the first byte of one retained Token-2022 payload.
pub(crate) use self::spl::decoder_spl_token2022_payload_tag;
/// Current contextual core instruction input contract version.
pub use self::api::DC_API_CORE_INSTRUCTION_INPUT_CONTRACT_VERSION;
/// Stable contextual decoded observation.
pub use self::api::DcApiDecodedObservation;
/// Machine-readable decoder coverage declaration.
pub use self::api::DcApiDecoderCoverageDeclaration;
/// Declared decoder coverage entry kind.
pub use self::api::DcApiDecoderCoverageEntryKind;
/// Structured decoder diagnostic.
pub use self::api::DcApiDecoderDiagnostic;
/// Complete decoder execution result.
pub use self::api::DcApiDecoderExecutionResult;
/// Stable decoder identity.
pub use self::api::DcApiDecoderIdentity;
/// Decoder terminal result status.
pub use self::api::DcApiDecoderOutcomeStatus;
/// Explicit decoding proof.
pub use self::api::DcApiDecoderProof;
/// Decoding proof category.
pub use self::api::DcApiDecoderProofKind;
/// Deterministic decoder recognition result.
pub use self::api::DcApiDecoderRecognition;
/// Exposes the decoder support level.
pub use self::api::DcApiDecoderSupport;
/// One statically declared decoder surface.
pub use self::api::DcApiDecoderSurface;
/// Initial decoder implementation placeholder for API-level tests.
pub use self::api::DcApiInitialDecoder;
/// Contextual instruction decoder contract.
pub use self::api::DcApiInstructionDecoder;
/// Exposes the common protocol decoder trait.
pub use self::api::DcApiProtocolDecoder;
/// Computes the deterministic contextual input hash.
pub use self::api::decoder_api_decoder_api_contextual_input_hash;
/// Returns true when a decoder declares the exact program id.
pub use self::api::decoder_api_decoder_handles_program_id;
/// Computes a deterministic lowercase SHA-256 hash for one JSON value.
pub use self::api::decoder_api_deterministic_json_hash;
/// Extracts the first eight payload bytes as hexadecimal when available.
pub use self::api::decoder_api_discriminator_8_hex;
/// Exhaustive published Metaplex account-key inventory.
pub use self::metadata::DC_METADATA_MTM_METADATA_ACCOUNT_LAYOUT_AUDIT;
/// Exact decoder for the Metaplex Token Metadata program.
pub use self::metadata::MetadataMetaplexTokenMetadataDecoder;
pub use self::metadata::DcMetadataMetaplexTokenMetadataDecoder;
/// Canonical projection shared by Collection and Use Authority records.
pub use self::metadata::DcMetadataMtmAuthorityRecordAccountSnapshot;
/// Stable identity and policy of one canonical account snapshot.
pub use self::metadata::DcMetadataMtmCanonicalAccountIdentity;
/// Lifecycle class of one canonical account layout.
pub use self::metadata::DcMetadataMtmCanonicalAccountLifecycle;
/// Provenance retained for one canonical account observation.
pub use self::metadata::DcMetadataMtmCanonicalAccountProvenance;
/// Execution policy separated from historical materialization.
pub use self::metadata::DcMetadataMtmCanonicalExecutionPolicy;
/// Materialization policy for active or historical state.
pub use self::metadata::DcMetadataMtmCanonicalMaterializationPolicy;
/// Canonical account envelope used by materializers and replay.
pub use self::metadata::DcMetadataMtmCanonicalMetadataAccountSnapshot;
/// Typed canonical Metaplex account state.
pub use self::metadata::DcMetadataMtmCanonicalMetadataAccountState;
/// Origin of one canonical account observation.
pub use self::metadata::DcMetadataMtmCanonicalObservationSource;
/// Canonical projection shared by Metadata and Holder delegate records.
pub use self::metadata::DcMetadataMtmDelegateRecordAccountSnapshot;
/// Supported edition account layout.
pub use self::metadata::DcMetadataMtmEditionAccountKind;
/// Canonical bounded projection of one edition or master-edition account.
pub use self::metadata::DcMetadataMtmEditionAccountSnapshot;
/// Supported Edition Marker account layout.
pub use self::metadata::DcMetadataMtmEditionMarkerAccountKind;
/// Canonical bounded projection of one Edition Marker account.
pub use self::metadata::DcMetadataMtmEditionMarkerAccountSnapshot;
/// Bounded error returned while decoding a Metadata account.
pub use self::metadata::DcMetadataMtmMetadataAccountDecodeError;
/// One entry in the exhaustive published account-key audit.
pub use self::metadata::DcMetadataMtmMetadataAccountLayoutAuditEntry;
/// Canonical bounded projection of one Metadata account.
pub use self::metadata::DcMetadataMtmMetadataAccountSnapshot;
/// One bounded historical reservation entry.
pub use self::metadata::DcMetadataMtmReservationEntrySnapshot;
/// Historical Reservation List account generation.
pub use self::metadata::DcMetadataMtmReservationListAccountKind;
/// Canonical decode-only projection of a historical Reservation List account.
pub use self::metadata::DcMetadataMtmReservationListAccountSnapshot;
/// Canonical projection of one Token Owned Escrow account.
pub use self::metadata::DcMetadataMtmTokenOwnedEscrowAccountSnapshot;
/// Authority form used by one Token Owned Escrow account.
pub use self::metadata::DcMetadataMtmTokenOwnedEscrowAuthorityKind;
/// Canonical bounded projection of one programmable Token Record account.
pub use self::metadata::DcMetadataMtmTokenRecordAccountSnapshot;
/// Decodes one Collection Authority Record account.
pub use self::metadata::decoder_metadata_metaplex_token_metadata_decode_collection_authority_record_account;
/// Decodes and validates one edition or master-edition account snapshot.
pub use self::metadata::decoder_metadata_metaplex_token_metadata_decode_edition_account;
/// Decodes and validates one Edition Marker account snapshot.
pub use self::metadata::decoder_metadata_metaplex_token_metadata_decode_edition_marker_account;
/// Decodes one Holder Delegate Record account.
pub use self::metadata::decoder_metadata_metaplex_token_metadata_decode_holder_delegate_record_account;
/// Decodes and validates one canonical Metadata account snapshot.
pub use self::metadata::decoder_metadata_metaplex_token_metadata_decode_metadata_account;
/// Decodes one Metadata Delegate Record account.
pub use self::metadata::decoder_metadata_metaplex_token_metadata_decode_metadata_delegate_record_account;
/// Decodes one historical Reservation List V1 or V2 account.
pub use self::metadata::decoder_metadata_metaplex_token_metadata_decode_reservation_list_account;
/// Decodes one Token Owned Escrow account.
pub use self::metadata::decoder_metadata_metaplex_token_metadata_decode_token_owned_escrow_account;
/// Decodes and validates one programmable Token Record account snapshot.
pub use self::metadata::decoder_metadata_metaplex_token_metadata_decode_token_record_account;
/// Decodes one Use Authority Record account.
pub use self::metadata::decoder_metadata_metaplex_token_metadata_decode_use_authority_record_account;
/// Runtime-native Solana decoder with phased maximal native coverage.
pub use self::solana::DcSolanaCoreDecoder;
/// Exact byte length of one SPL ElGamal registry account.
pub use self::spl::ELGAMAL_REGISTRY_ACCOUNT_LEN;
/// Parsed SPL ElGamal public-key registry account.
pub use self::spl::ElGamalRegistryState;
pub use self::spl::DC_SPL_ELGAMAL_REGISTRY_ACCOUNT_LEN;
/// Exact decoder for the SPL Associated Token Account program.
pub use self::spl::SplAssociatedTokenAccountDecoder;
pub use self::spl::DcSplAssociatedTokenAccountDecoder;
/// Parsed SPL ElGamal public-key registry account.
pub use self::spl::DcSplElGamalRegistryState;
/// Exact decoder for the SPL ElGamal registry program.
pub use self::spl::SplElgamalRegistryDecoder;
pub use self::spl::DcSplElgamalRegistryDecoder;
/// Exact decoder for the three registered SPL Memo generations.
pub use self::spl::SplMemoDecoder;
pub use self::spl::DcSplMemoDecoder;
/// Exact decoder for the Token-2022 program.
pub use self::spl::SplToken2022Decoder;
pub use self::spl::DcSplToken2022Decoder;
/// Exact decoder for the classic SPL Token program.
pub use self::spl::SplTokenDecoder;
pub use self::spl::DcSplTokenDecoder;
/// Parsed Token-2022 Mint, Account, or Multisig state.
pub use self::spl::Token2022State;
pub use self::spl::DcToken2022State;
/// Exact Token-2022 base account state kind.
pub use self::spl::Token2022StateKind;
pub use self::spl::DcToken2022StateKind;
/// One exact Token-2022 TLV entry.
pub use self::spl::Token2022TlvEntry;
pub use self::spl::DcToken2022TlvEntry;
/// Parses one exact SPL ElGamal registry account.
pub use self::spl::parse_elgamal_registry_state;
pub use self::spl::decoder_spl_elgamal_registry_parse_elgamal_registry_state;
/// Parses one Token-2022 Mint, Account, or Multisig state.
pub use self::spl::parse_token_2022_state;
pub use self::spl::decoder_spl_token2022_parse_token2022_state;

View File

@@ -3,4 +3,4 @@
//! `adapter` decoder family.
pub mod saber_decimal_wrapper;
mod saber_decimal_wrapper;

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_adapter_saber_decimal_wrapper`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_adapter_saber_decimal_wrapper";
const LEGACY_CRATE: &str = "kb_decoder_adapter_saber_decimal_wrapper";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -3,5 +3,5 @@
//! `admin` decoder family.
pub mod jupiter_lock;
pub mod pump_fees;
mod jupiter_lock;
mod pump_fees;

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_admin_jupiter_lock`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_admin_jupiter_lock";
const LEGACY_CRATE: &str = "kb_decoder_admin_jupiter_lock";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_admin_pump_fees`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_admin_pump_fees";
const LEGACY_CRATE: &str = "kb_decoder_admin_pump_fees";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -3,29 +3,29 @@
//! `amm` decoder family.
pub mod aldrin_v1;
pub mod aldrin_v2;
pub mod alphaq;
pub mod believe;
pub mod bonk_swap;
pub mod fluxbeam;
pub mod goon_fi;
pub mod goosefx_gamma;
pub mod goosefx_v2;
pub mod guac_swap;
pub mod lifinity_swap_v2;
pub mod metadao_futarchy_amm;
pub mod metadao_v0_5;
pub mod meteora_damm_v1;
pub mod meteora_damm_v2;
pub mod obric_v2;
pub mod one_dex;
pub mod pump_swap;
pub mod raydium_lp_v4;
pub mod solfi;
pub mod solfi_v2;
pub mod vertigo;
pub mod virtuals;
pub mod woofi;
pub mod zero_fi;
pub mod zora;
mod aldrin_v1;
mod aldrin_v2;
mod alphaq;
mod believe;
mod bonk_swap;
mod fluxbeam;
mod goon_fi;
mod goosefx_gamma;
mod goosefx_v2;
mod guac_swap;
mod lifinity_swap_v2;
mod metadao_futarchy_amm;
mod metadao_v0_5;
mod meteora_damm_v1;
mod meteora_damm_v2;
mod obric_v2;
mod one_dex;
mod pump_swap;
mod raydium_lp_v4;
mod solfi;
mod solfi_v2;
mod vertigo;
mod virtuals;
mod woofi;
mod zero_fi;
mod zora;

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_amm_aldrin_v1`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_amm_aldrin_v1";
const LEGACY_CRATE: &str = "kb_decoder_amm_aldrin_v1";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_amm_aldrin_v2`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_amm_aldrin_v2";
const LEGACY_CRATE: &str = "kb_decoder_amm_aldrin_v2";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_amm_alphaq`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_amm_alphaq";
const LEGACY_CRATE: &str = "kb_decoder_amm_alphaq";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_amm_believe`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_amm_believe";
const LEGACY_CRATE: &str = "kb_decoder_amm_believe";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_amm_bonk_swap`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_amm_bonk_swap";
const LEGACY_CRATE: &str = "kb_decoder_amm_bonk_swap";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_amm_fluxbeam`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_amm_fluxbeam";
const LEGACY_CRATE: &str = "kb_decoder_amm_fluxbeam";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_amm_goon_fi`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_amm_goon_fi";
const LEGACY_CRATE: &str = "kb_decoder_amm_goon_fi";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_amm_goosefx_gamma`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_amm_goosefx_gamma";
const LEGACY_CRATE: &str = "kb_decoder_amm_goosefx_gamma";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_amm_goosefx_v2`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_amm_goosefx_v2";
const LEGACY_CRATE: &str = "kb_decoder_amm_goosefx_v2";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_amm_guac_swap`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_amm_guac_swap";
const LEGACY_CRATE: &str = "kb_decoder_amm_guac_swap";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_amm_lifinity_swap_v2`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_amm_lifinity_swap_v2";
const LEGACY_CRATE: &str = "kb_decoder_amm_lifinity_swap_v2";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_amm_metadao_futarchy_amm`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_amm_metadao_futarchy_amm";
const LEGACY_CRATE: &str = "kb_decoder_amm_metadao_futarchy_amm";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_amm_metadao_v0_5`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_amm_metadao_v0_5";
const LEGACY_CRATE: &str = "kb_decoder_amm_metadao_v0_5";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_amm_meteora_damm_v1`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_amm_meteora_damm_v1";
const LEGACY_CRATE: &str = "kb_decoder_amm_meteora_damm_v1";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_amm_meteora_damm_v2`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_amm_meteora_damm_v2";
const LEGACY_CRATE: &str = "kb_decoder_amm_meteora_damm_v2";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_amm_obric_v2`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_amm_obric_v2";
const LEGACY_CRATE: &str = "kb_decoder_amm_obric_v2";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_amm_one_dex`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_amm_one_dex";
const LEGACY_CRATE: &str = "kb_decoder_amm_one_dex";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_amm_pump_swap`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_amm_pump_swap";
const LEGACY_CRATE: &str = "kb_decoder_amm_pump_swap";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_amm_raydium_lp_v4`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_amm_raydium_lp_v4";
const LEGACY_CRATE: &str = "kb_decoder_amm_raydium_lp_v4";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_amm_solfi`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_amm_solfi";
const LEGACY_CRATE: &str = "kb_decoder_amm_solfi";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_amm_solfi_v2`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_amm_solfi_v2";
const LEGACY_CRATE: &str = "kb_decoder_amm_solfi_v2";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_amm_vertigo`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_amm_vertigo";
const LEGACY_CRATE: &str = "kb_decoder_amm_vertigo";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_amm_virtuals`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_amm_virtuals";
const LEGACY_CRATE: &str = "kb_decoder_amm_virtuals";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_amm_woofi`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_amm_woofi";
const LEGACY_CRATE: &str = "kb_decoder_amm_woofi";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_amm_zero_fi`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_amm_zero_fi";
const LEGACY_CRATE: &str = "kb_decoder_amm_zero_fi";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_amm_zora`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_amm_zora";
const LEGACY_CRATE: &str = "kb_decoder_amm_zora";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -3,4 +3,4 @@
//! `anchor` decoder family.
pub mod core;
mod core;

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_anchor`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_anchor";
const LEGACY_CRATE: &str = "kb_decoder_anchor";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -3,45 +3,46 @@
//! Decoder contracts consolidated from `kb_decoder_api`.
pub mod contracts;
pub mod decoder;
mod contracts;
mod decoder;
/// Current contextual core instruction input contract version.
pub use crate::decoder::api::contracts::CORE_INSTRUCTION_INPUT_CONTRACT_VERSION;
pub use self::contracts::DC_API_CORE_INSTRUCTION_INPUT_CONTRACT_VERSION;
/// Stable contextual decoded observation.
pub use crate::decoder::api::contracts::DecodedObservation;
pub use self::contracts::DcApiDecodedObservation;
/// Machine-readable decoder coverage declaration.
pub use crate::decoder::api::contracts::DecoderCoverageDeclaration;
pub use self::contracts::DcApiDecoderCoverageDeclaration;
/// Declared decoder coverage entry kind.
pub use crate::decoder::api::contracts::DecoderCoverageEntryKind;
pub use self::contracts::DcApiDecoderCoverageEntryKind;
/// Structured decoder diagnostic.
pub use crate::decoder::api::contracts::DecoderDiagnostic;
pub use self::contracts::DcApiDecoderDiagnostic;
/// Complete decoder execution result.
pub use crate::decoder::api::contracts::DecoderExecutionResult;
pub use self::contracts::DcApiDecoderExecutionResult;
/// Stable decoder identity.
pub use crate::decoder::api::contracts::DecoderIdentity;
pub use self::contracts::DcApiDecoderIdentity;
/// Decoder terminal result status.
pub use crate::decoder::api::contracts::DecoderOutcomeStatus;
pub use self::contracts::DcApiDecoderOutcomeStatus;
/// Explicit decoding proof.
pub use crate::decoder::api::contracts::DecoderProof;
pub use self::contracts::DcApiDecoderProof;
/// Decoding proof category.
pub use crate::decoder::api::contracts::DecoderProofKind;
pub use self::contracts::DcApiDecoderProofKind;
/// Deterministic decoder recognition result.
pub use crate::decoder::api::contracts::DecoderRecognition;
pub use self::contracts::DcApiDecoderRecognition;
/// One statically declared decoder surface.
pub use crate::decoder::api::contracts::DecoderSurface;
pub use self::contracts::DcApiDecoderSurface;
/// Contextual instruction decoder contract.
pub use crate::decoder::api::contracts::InstructionDecoder;
pub use self::contracts::DcApiInstructionDecoder;
/// Computes the deterministic contextual input hash.
pub use crate::decoder::api::contracts::contextual_input_hash;
pub use self::contracts::decoder_api_decoder_api_contextual_input_hash;
/// Returns true when a decoder declares the exact program id.
pub use crate::decoder::api::contracts::decoder_handles_program_id;
pub use self::contracts::decoder_api_decoder_handles_program_id;
/// Computes a deterministic lowercase SHA-256 hash for one JSON value.
pub use crate::decoder::api::contracts::deterministic_json_hash;
pub use self::contracts::decoder_api_deterministic_json_hash;
/// Extracts the first eight payload bytes as hexadecimal when available.
pub use crate::decoder::api::contracts::discriminator_8_hex;
pub use self::contracts::decoder_api_discriminator_8_hex;
/// Exposes the decoder support level.
pub use crate::decoder::api::decoder::DecoderSupport;
pub use self::decoder::DcApiDecoderSupport;
/// Initial decoder implementation placeholder for API-level tests.
pub use crate::decoder::api::decoder::InitialDecoder;
pub use self::decoder::DcApiInitialDecoder;
/// Exposes the common protocol decoder trait.
pub use crate::decoder::api::decoder::ProtocolDecoder;
pub use self::decoder::DcApiProtocolDecoder;

View File

@@ -6,18 +6,19 @@
use sha2::Digest; // rust-rules: trait-import
/// Current contextual core instruction input contract version.
pub const CORE_INSTRUCTION_INPUT_CONTRACT_VERSION: u32 = crate::CORE_REPLAY_INPUT_CONTRACT_VERSION;
pub const DC_API_CORE_INSTRUCTION_INPUT_CONTRACT_VERSION: u32 =
crate::MD_CORE_REPLAY_INPUT_CONTRACT_VERSION;
/// Stable identity of one contextual instruction decoder.
#[derive(Clone, Debug, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct DecoderIdentity {
pub struct DcApiDecoderIdentity {
/// Stable lower snake case processor name.
pub name: std::string::String,
/// Semantic or deterministic implementation version.
pub version: std::string::String,
}
impl DecoderIdentity {
impl DcApiDecoderIdentity {
/// Builds a validated decoder identity.
pub fn new(
name: impl std::convert::Into<std::string::String>,
@@ -38,7 +39,7 @@ impl DecoderIdentity {
/// One statically declared Solana surface supported by a decoder.
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct DecoderSurface {
pub struct DcApiDecoderSurface {
/// Exact Solana program identifier.
pub program_id: &'static str,
/// Stable surface code.
@@ -49,7 +50,7 @@ pub struct DecoderSurface {
/// Declared decoder coverage entry kind.
#[derive(Clone, Copy, Debug, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
pub enum DecoderCoverageEntryKind {
pub enum DcApiDecoderCoverageEntryKind {
/// Program instruction entry.
Instruction,
/// Program event entry.
@@ -60,13 +61,13 @@ pub enum DecoderCoverageEntryKind {
/// Machine-readable decoder coverage declaration.
#[derive(Clone, Debug, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct DecoderCoverageDeclaration {
pub struct DcApiDecoderCoverageDeclaration {
/// Solana program identifier.
pub program_id: std::string::String,
/// Optional stable surface code.
pub surface_code: std::option::Option<std::string::String>,
/// Entry kind.
pub entry_kind: DecoderCoverageEntryKind,
pub entry_kind: DcApiDecoderCoverageEntryKind,
/// Stable instruction, event or discriminator code.
pub entry_code: std::string::String,
/// Optional normalized lowercase hexadecimal discriminator.
@@ -75,12 +76,12 @@ pub struct DecoderCoverageDeclaration {
pub historical: bool,
}
impl DecoderCoverageDeclaration {
impl DcApiDecoderCoverageDeclaration {
/// Builds a validated coverage declaration.
pub fn new(
program_id: impl std::convert::Into<std::string::String>,
surface_code: std::option::Option<std::string::String>,
entry_kind: DecoderCoverageEntryKind,
entry_kind: DcApiDecoderCoverageEntryKind,
entry_code: impl std::convert::Into<std::string::String>,
discriminator_hex: std::option::Option<std::string::String>,
historical: bool,
@@ -122,7 +123,7 @@ impl DecoderCoverageDeclaration {
/// Deterministic recognition result used by dispatch.
#[derive(Clone, Debug, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct DecoderRecognition {
pub struct DcApiDecoderRecognition {
/// Whether the decoder is compatible with the input.
pub compatible: bool,
/// Whether recognition is exact rather than program-only.
@@ -137,7 +138,7 @@ pub struct DecoderRecognition {
pub discriminator_hex: std::option::Option<std::string::String>,
}
impl DecoderRecognition {
impl DcApiDecoderRecognition {
/// Builds a non-compatible recognition result.
pub fn incompatible() -> Self {
return Self {
@@ -171,7 +172,7 @@ impl DecoderRecognition {
/// Decoder terminal result status.
#[derive(Clone, Copy, Debug, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
pub enum DecoderOutcomeStatus {
pub enum DcApiDecoderOutcomeStatus {
/// At least one stable decoded observation was produced.
Decoded,
/// The decoder intentionally ignored a recognized input.
@@ -184,7 +185,7 @@ pub enum DecoderOutcomeStatus {
/// Proof category attached to one decoded observation.
#[derive(Clone, Copy, Debug, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
pub enum DecoderProofKind {
pub enum DcApiDecoderProofKind {
/// Exact instruction discriminator match.
ExactDiscriminator,
/// Exact binary layout decode.
@@ -207,18 +208,18 @@ pub enum DecoderProofKind {
/// Explicit proof attached to one decoded observation.
#[derive(Clone, Debug, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct DecoderProof {
pub struct DcApiDecoderProof {
/// Proof category.
pub kind: DecoderProofKind,
pub kind: DcApiDecoderProofKind,
/// Decoder confidence.
pub confidence: crate::DecoderConfidence,
pub confidence: crate::MdDecoderConfidence,
/// Stable evidence strings, hashes or classifier codes.
pub evidence: std::vec::Vec<std::string::String>,
}
/// Structured decoder diagnostic without third-party error wrappers.
#[derive(Clone, Debug, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct DecoderDiagnostic {
pub struct DcApiDecoderDiagnostic {
/// Stable machine-readable diagnostic code.
pub code: std::string::String,
/// Human-readable diagnostic message.
@@ -227,7 +228,7 @@ pub struct DecoderDiagnostic {
pub retriable: bool,
}
impl DecoderDiagnostic {
impl DcApiDecoderDiagnostic {
/// Builds a validated decoder diagnostic.
pub fn new(
code: impl std::convert::Into<std::string::String>,
@@ -250,11 +251,11 @@ impl DecoderDiagnostic {
/// Stable contextual decoded observation persisted by the decode pipeline.
#[derive(Clone, Debug, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct DecodedObservation {
pub struct DcApiDecodedObservation {
/// Stable processor-owned event key within one input.
pub event_key: std::string::String,
/// Shared typed protocol event identity.
pub event: crate::DecodedProtocolEvent,
pub event: crate::MdDecodedProtocolEvent,
/// Typed event payload serialized as deterministic JSON.
pub payload_json: serde_json::Value,
/// Whether the source transaction failed on-chain.
@@ -264,10 +265,10 @@ pub struct DecodedObservation {
/// Whether the observed state mutation was committed on-chain.
pub observation_committed: bool,
/// Explicit decoding proof.
pub proof: DecoderProof,
pub proof: DcApiDecoderProof,
}
impl DecodedObservation {
impl DcApiDecodedObservation {
/// Validates failed transaction commit semantics and stable identity fields.
pub fn validate(&self) -> kb_core::Result<()> {
if self.event_key.trim().is_empty() {
@@ -295,22 +296,22 @@ impl DecodedObservation {
/// Complete explicit result produced by one decoder invocation.
#[derive(Clone, Debug, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct DecoderExecutionResult {
pub struct DcApiDecoderExecutionResult {
/// Terminal decoder status.
pub status: DecoderOutcomeStatus,
pub status: DcApiDecoderOutcomeStatus,
/// Optional recognized instruction or discriminator code.
pub recognized_entry_code: std::option::Option<std::string::String>,
/// Decoded observations.
pub observations: std::vec::Vec<DecodedObservation>,
pub observations: std::vec::Vec<DcApiDecodedObservation>,
/// Structured diagnostics.
pub diagnostics: std::vec::Vec<DecoderDiagnostic>,
pub diagnostics: std::vec::Vec<DcApiDecoderDiagnostic>,
}
impl DecoderExecutionResult {
impl DcApiDecoderExecutionResult {
/// Builds an unsupported result with no false decoded observation.
pub fn unsupported(entry_code: std::option::Option<std::string::String>) -> Self {
return Self {
status: DecoderOutcomeStatus::Unsupported,
status: DcApiDecoderOutcomeStatus::Unsupported,
recognized_entry_code: entry_code,
observations: std::vec::Vec::new(),
diagnostics: std::vec::Vec::new(),
@@ -320,7 +321,7 @@ impl DecoderExecutionResult {
/// Builds an ignored result.
pub fn ignored(entry_code: std::option::Option<std::string::String>) -> Self {
return Self {
status: DecoderOutcomeStatus::Ignored,
status: DcApiDecoderOutcomeStatus::Ignored,
recognized_entry_code: entry_code,
observations: std::vec::Vec::new(),
diagnostics: std::vec::Vec::new(),
@@ -329,17 +330,17 @@ impl DecoderExecutionResult {
/// Validates status and observation consistency.
pub fn validate(&self) -> kb_core::Result<()> {
if self.status == DecoderOutcomeStatus::Decoded && self.observations.is_empty() {
if self.status == DcApiDecoderOutcomeStatus::Decoded && self.observations.is_empty() {
return std::result::Result::Err(kb_core::Error::invalid_state(
"decoded status requires at least one observation",
));
}
if self.status != DecoderOutcomeStatus::Decoded && !self.observations.is_empty() {
if self.status != DcApiDecoderOutcomeStatus::Decoded && !self.observations.is_empty() {
return std::result::Result::Err(kb_core::Error::invalid_state(
"non-decoded status must not contain observations",
));
}
if self.status == DecoderOutcomeStatus::Failed && self.diagnostics.is_empty() {
if self.status == DcApiDecoderOutcomeStatus::Failed && self.diagnostics.is_empty() {
return std::result::Result::Err(kb_core::Error::invalid_state(
"failed decoder status requires at least one diagnostic",
));
@@ -355,21 +356,24 @@ impl DecoderExecutionResult {
}
/// Contextual instruction decoder contract used by the common pipeline.
pub trait InstructionDecoder: std::marker::Send + std::marker::Sync {
pub trait DcApiInstructionDecoder: std::marker::Send + std::marker::Sync {
/// Returns the stable decoder identity.
fn identity(&self) -> DecoderIdentity;
fn identity(&self) -> DcApiDecoderIdentity;
/// Returns every exact Solana surface supported by the decoder.
fn surfaces(&self) -> &'static [DecoderSurface];
fn surfaces(&self) -> &'static [DcApiDecoderSurface];
/// Returns the machine-readable declared coverage matrix.
fn coverage(&self) -> std::vec::Vec<DecoderCoverageDeclaration>;
fn coverage(&self) -> std::vec::Vec<DcApiDecoderCoverageDeclaration>;
/// Recognizes one contextual core instruction for deterministic dispatch.
fn recognize(&self, input: &crate::CoreInstructionReplayInput) -> DecoderRecognition;
fn recognize(&self, input: &crate::MdCoreInstructionReplayInput) -> DcApiDecoderRecognition;
/// Decodes one recognized contextual core instruction.
fn decode(&self, input: &crate::CoreInstructionReplayInput) -> DecoderExecutionResult;
fn decode(&self, input: &crate::MdCoreInstructionReplayInput) -> DcApiDecoderExecutionResult;
}
/// Returns true when a decoder declares the exact program id.
pub fn decoder_handles_program_id(decoder: &dyn InstructionDecoder, program_id: &str) -> bool {
pub fn decoder_api_decoder_handles_program_id(
decoder: &dyn DcApiInstructionDecoder,
program_id: &str,
) -> bool {
for surface in decoder.surfaces() {
if surface.program_id == program_id {
return true;
@@ -379,8 +383,8 @@ pub fn decoder_handles_program_id(decoder: &dyn InstructionDecoder, program_id:
}
/// Computes a deterministic lowercase SHA-256 hash for one contextual input.
pub fn contextual_input_hash(
input: &crate::CoreInstructionReplayInput,
pub fn decoder_api_decoder_api_contextual_input_hash(
input: &crate::MdCoreInstructionReplayInput,
) -> kb_core::Result<std::string::String> {
let serialization_result = serde_json::to_value(input);
let mut value = match serialization_result {
@@ -391,11 +395,11 @@ pub fn contextual_input_hash(
)));
},
};
return crate::deterministic_json_hash(&mut value);
return crate::decoder_api_deterministic_json_hash(&mut value);
}
/// Computes a deterministic lowercase SHA-256 hash for one JSON value.
pub fn deterministic_json_hash(
pub fn decoder_api_deterministic_json_hash(
value: &mut serde_json::Value,
) -> kb_core::Result<std::string::String> {
sort_json_value(value);
@@ -417,8 +421,8 @@ pub fn deterministic_json_hash(
}
/// Extracts the first eight payload bytes as normalized lowercase hexadecimal when available.
pub fn discriminator_8_hex(
input: &crate::CoreInstructionReplayInput,
pub fn decoder_api_discriminator_8_hex(
input: &crate::MdCoreInstructionReplayInput,
) -> std::option::Option<std::string::String> {
let payload = match &input.instruction_payload_json {
std::option::Option::Some(value) => value,
@@ -465,8 +469,8 @@ fn sort_json_value(value: &mut serde_json::Value) {
#[cfg(test)]
mod tests {
fn replay_input() -> crate::CoreInstructionReplayInput {
let result = crate::CoreInstructionReplayInput::new(
fn replay_input() -> crate::MdCoreInstructionReplayInput {
let result = crate::MdCoreInstructionReplayInput::new(
"signature:0",
"signature",
42,
@@ -497,8 +501,8 @@ mod tests {
#[test]
fn contextual_input_hash_is_stable() {
let first = crate::contextual_input_hash(&replay_input());
let second = crate::contextual_input_hash(&replay_input());
let first = crate::decoder_api_decoder_api_contextual_input_hash(&replay_input());
let second = crate::decoder_api_decoder_api_contextual_input_hash(&replay_input());
assert!(first.is_ok());
assert_eq!(first, second);
}
@@ -514,8 +518,8 @@ mod tests {
"payloadJson": {"dataBase64": "CAcGBQQDAgE="},
"payloadHash": "different-payload-hash"
}]);
let first_hash = crate::contextual_input_hash(&first);
let second_hash = crate::contextual_input_hash(&second);
let first_hash = crate::decoder_api_decoder_api_contextual_input_hash(&first);
let second_hash = crate::decoder_api_decoder_api_contextual_input_hash(&second);
assert!(first_hash.is_ok());
assert!(second_hash.is_ok());
assert_ne!(first_hash, second_hash);
@@ -538,26 +542,26 @@ mod tests {
#[test]
fn discriminator_uses_first_eight_bytes() {
let value = crate::discriminator_8_hex(&replay_input());
let value = crate::decoder_api_discriminator_8_hex(&replay_input());
assert_eq!(value.as_deref(), std::option::Option::Some("0102030405060708"));
}
#[test]
fn failed_observation_cannot_be_committed() {
let observation = crate::DecodedObservation {
let observation = crate::DcApiDecodedObservation {
event_key: "event".to_string(),
event: crate::DecodedProtocolEvent {
signature: crate::Signature("signature".to_string()),
slot: crate::Slot(42),
instruction_path: crate::InstructionPath("0".to_string()),
program_id: crate::ProgramId("program".to_string()),
protocol_code: crate::ProtocolCode("solana".to_string()),
surface_code: crate::SurfaceCode("system_program".to_string()),
event_code: crate::EventCode("system_program.attempt".to_string()),
event_name: crate::EventName("attempt".to_string()),
event_family: crate::EventFamily::Audit,
source_kind: crate::EventSourceKind::Instruction,
confidence: crate::DecoderConfidence::Exact,
event: crate::MdDecodedProtocolEvent {
signature: crate::MdSignature("signature".to_string()),
slot: crate::MdSlot(42),
instruction_path: crate::MdInstructionPath("0".to_string()),
program_id: crate::MdProgramId("program".to_string()),
protocol_code: crate::MdProtocolCode("solana".to_string()),
surface_code: crate::MdSurfaceCode("system_program".to_string()),
event_code: crate::MdEventCode("system_program.attempt".to_string()),
event_name: crate::MdEventName("attempt".to_string()),
event_family: crate::MdEventFamily::Audit,
source_kind: crate::MdEventSourceKind::Instruction,
confidence: crate::MdDecoderConfidence::Exact,
},
payload_json: serde_json::json!({}),
transaction_failed: true,
@@ -565,9 +569,9 @@ mod tests {
serde_json::json!({"InstructionError": [0, "Custom"]}),
),
observation_committed: true,
proof: crate::DecoderProof {
kind: crate::DecoderProofKind::ExactLayout,
confidence: crate::DecoderConfidence::Exact,
proof: crate::DcApiDecoderProof {
kind: crate::DcApiDecoderProofKind::ExactLayout,
confidence: crate::MdDecoderConfidence::Exact,
evidence: std::vec!["layout".to_string()],
},
};

View File

@@ -5,7 +5,7 @@
/// Decoder support level for a program observation.
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum DecoderSupport {
pub enum DcApiDecoderSupport {
/// The decoder does not support the observation.
No,
/// The decoder may support the observation after deeper inspection.
@@ -15,7 +15,7 @@ pub enum DecoderSupport {
}
/// Common trait implemented by every protocol decoder crate.
pub trait ProtocolDecoder {
pub trait DcApiProtocolDecoder {
/// Returns the stable decoder name.
fn decoder_name(&self) -> &'static str;
/// Returns the decoder implementation version.
@@ -23,7 +23,7 @@ pub trait ProtocolDecoder {
/// Returns the Solana program ids handled by this decoder.
fn program_ids(&self) -> &'static [&'static str];
/// Checks whether the decoder handles a program id.
fn handles_program_id(&self, program_id: &crate::ProgramId) -> bool {
fn handles_program_id(&self, program_id: &crate::MdProgramId) -> bool {
for candidate in self.program_ids() {
if program_id.0.as_str() == *candidate {
return true;
@@ -32,19 +32,22 @@ pub trait ProtocolDecoder {
return false;
}
/// Checks whether the decoder supports a generic program observation.
fn supports_observation(&self, observation: &crate::ProgramObservation) -> DecoderSupport;
fn supports_observation(
&self,
observation: &crate::MdProgramObservation,
) -> DcApiDecoderSupport;
/// Decodes a generic program observation into protocol events.
fn decode_observation(
&self,
observation: &crate::ProgramObservation,
) -> kb_core::Result<std::vec::Vec<crate::DecodedProtocolEvent>>;
observation: &crate::MdProgramObservation,
) -> kb_core::Result<std::vec::Vec<crate::MdDecodedProtocolEvent>>;
}
/// Initial decoder implementation placeholder for API-level tests.
#[derive(Clone, Debug, Default)]
pub struct InitialDecoder;
pub struct DcApiInitialDecoder;
impl ProtocolDecoder for InitialDecoder {
impl DcApiProtocolDecoder for DcApiInitialDecoder {
fn decoder_name(&self) -> &'static str {
return "kb_decoder_api";
}
@@ -57,17 +60,20 @@ impl ProtocolDecoder for InitialDecoder {
return &[];
}
fn supports_observation(&self, observation: &crate::ProgramObservation) -> DecoderSupport {
if ProtocolDecoder::handles_program_id(self, &observation.program_id) {
return DecoderSupport::Maybe;
fn supports_observation(
&self,
observation: &crate::MdProgramObservation,
) -> DcApiDecoderSupport {
if DcApiProtocolDecoder::handles_program_id(self, &observation.program_id) {
return DcApiDecoderSupport::Maybe;
}
return DecoderSupport::No;
return DcApiDecoderSupport::No;
}
fn decode_observation(
&self,
_observation: &crate::ProgramObservation,
) -> kb_core::Result<std::vec::Vec<crate::DecodedProtocolEvent>> {
_observation: &crate::MdProgramObservation,
) -> kb_core::Result<std::vec::Vec<crate::MdDecodedProtocolEvent>> {
return std::result::Result::Ok(std::vec::Vec::new());
}
}

View File

@@ -3,7 +3,7 @@
//! `bridge` decoder family.
pub mod circle_cctp_token_messenger_minter;
pub mod circle_cctp_token_messenger_minter_v2;
pub mod layer_zero_endpoint;
pub mod layer_zero_executor;
mod circle_cctp_token_messenger_minter;
mod circle_cctp_token_messenger_minter_v2;
mod layer_zero_endpoint;
mod layer_zero_executor;

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_bridge_circle_cctp_token_messenger_minter`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_bridge_circle_cctp_token_messenger_minter";
const LEGACY_CRATE: &str = "kb_decoder_bridge_circle_cctp_token_messenger_minter";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_bridge_circle_cctp_token_messenger_minter_v2`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_bridge_circle_cctp_token_messenger_minter_v2";
const LEGACY_CRATE: &str = "kb_decoder_bridge_circle_cctp_token_messenger_minter_v2";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_bridge_layer_zero_endpoint`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_bridge_layer_zero_endpoint";
const LEGACY_CRATE: &str = "kb_decoder_bridge_layer_zero_endpoint";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_bridge_layer_zero_executor`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_bridge_layer_zero_executor";
const LEGACY_CRATE: &str = "kb_decoder_bridge_layer_zero_executor";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -3,9 +3,9 @@
//! `clmm` decoder family.
pub mod byreal;
pub mod fusion;
pub mod orca_whirlpool;
pub mod pancake_swap;
pub mod raydium;
pub mod stabble;
mod byreal;
mod fusion;
mod orca_whirlpool;
mod pancake_swap;
mod raydium;
mod stabble;

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_clmm_byreal`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_clmm_byreal";
const LEGACY_CRATE: &str = "kb_decoder_clmm_byreal";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_clmm_fusion`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_clmm_fusion";
const LEGACY_CRATE: &str = "kb_decoder_clmm_fusion";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_clmm_orca_whirlpool`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_clmm_orca_whirlpool";
const LEGACY_CRATE: &str = "kb_decoder_clmm_orca_whirlpool";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_clmm_pancake_swap`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_clmm_pancake_swap";
const LEGACY_CRATE: &str = "kb_decoder_clmm_pancake_swap";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_clmm_raydium`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_clmm_raydium";
const LEGACY_CRATE: &str = "kb_decoder_clmm_raydium";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_clmm_stabble`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_clmm_stabble";
const LEGACY_CRATE: &str = "kb_decoder_clmm_stabble";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -3,4 +3,4 @@
//! `cpmm` decoder family.
pub mod raydium;
mod raydium;

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_cpmm_raydium`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_cpmm_raydium";
const LEGACY_CRATE: &str = "kb_decoder_cpmm_raydium";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -3,4 +3,4 @@
//! `dlmm` decoder family.
pub mod meteora;
mod meteora;

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_dlmm_meteora`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_dlmm_meteora";
const LEGACY_CRATE: &str = "kb_decoder_dlmm_meteora";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -3,5 +3,5 @@
//! `fees` decoder family.
pub mod bags_fee_share_v1;
pub mod bags_fee_share_v2;
mod bags_fee_share_v1;
mod bags_fee_share_v2;

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_fees_bags_fee_share_v1`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_fees_bags_fee_share_v1";
const LEGACY_CRATE: &str = "kb_decoder_fees_bags_fee_share_v1";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_fees_bags_fee_share_v2`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_fees_bags_fee_share_v2";
const LEGACY_CRATE: &str = "kb_decoder_fees_bags_fee_share_v2";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -3,4 +3,4 @@
//! `governance` decoder family.
pub mod metadao_bid_wall;
mod metadao_bid_wall;

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_governance_metadao_bid_wall`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_governance_metadao_bid_wall";
const LEGACY_CRATE: &str = "kb_decoder_governance_metadao_bid_wall";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -3,12 +3,12 @@
//! `launchpad` decoder family.
pub mod boop_fun;
pub mod metadao_ico;
pub mod meteora_dbc;
pub mod moonit;
pub mod orca_wavebreak;
pub mod printr;
pub mod pump_fun;
pub mod pump_pumpup_ai;
pub mod raydium_launchlab;
mod boop_fun;
mod metadao_ico;
mod meteora_dbc;
mod moonit;
mod orca_wavebreak;
mod printr;
mod pump_fun;
mod pump_pumpup_ai;
mod raydium_launchlab;

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_launchpad_boop_fun`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_launchpad_boop_fun";
const LEGACY_CRATE: &str = "kb_decoder_launchpad_boop_fun";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_launchpad_metadao_ico`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_launchpad_metadao_ico";
const LEGACY_CRATE: &str = "kb_decoder_launchpad_metadao_ico";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_launchpad_meteora_dbc`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_launchpad_meteora_dbc";
const LEGACY_CRATE: &str = "kb_decoder_launchpad_meteora_dbc";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_launchpad_moonit`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_launchpad_moonit";
const LEGACY_CRATE: &str = "kb_decoder_launchpad_moonit";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_launchpad_orca_wavebreak`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_launchpad_orca_wavebreak";
const LEGACY_CRATE: &str = "kb_decoder_launchpad_orca_wavebreak";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_launchpad_printr`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_launchpad_printr";
const LEGACY_CRATE: &str = "kb_decoder_launchpad_printr";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_launchpad_pump_fun`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_launchpad_pump_fun";
const LEGACY_CRATE: &str = "kb_decoder_launchpad_pump_fun";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_launchpad_pump_pumpup_ai`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_launchpad_pump_pumpup_ai";
const LEGACY_CRATE: &str = "kb_decoder_launchpad_pump_pumpup_ai";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_launchpad_raydium_launchlab`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_launchpad_raydium_launchlab";
const LEGACY_CRATE: &str = "kb_decoder_launchpad_raydium_launchlab";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -3,10 +3,10 @@
//! `lending` decoder family.
pub mod clone;
pub mod jupiter_lend_borrow;
pub mod jupiter_lend_earn;
pub mod jupiter_lend_flash_loan;
pub mod jupiter_lend_liquidity;
pub mod kamino;
pub mod marginfi_v2;
mod clone;
mod jupiter_lend_borrow;
mod jupiter_lend_earn;
mod jupiter_lend_flash_loan;
mod jupiter_lend_liquidity;
mod kamino;
mod marginfi_v2;

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_lending_clone`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_lending_clone";
const LEGACY_CRATE: &str = "kb_decoder_lending_clone";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_lending_jupiter_lend_borrow`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_lending_jupiter_lend_borrow";
const LEGACY_CRATE: &str = "kb_decoder_lending_jupiter_lend_borrow";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_lending_jupiter_lend_earn`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_lending_jupiter_lend_earn";
const LEGACY_CRATE: &str = "kb_decoder_lending_jupiter_lend_earn";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_lending_jupiter_lend_flash_loan`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_lending_jupiter_lend_flash_loan";
const LEGACY_CRATE: &str = "kb_decoder_lending_jupiter_lend_flash_loan";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_lending_jupiter_lend_liquidity`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_lending_jupiter_lend_liquidity";
const LEGACY_CRATE: &str = "kb_decoder_lending_jupiter_lend_liquidity";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_lending_kamino`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_lending_kamino";
const LEGACY_CRATE: &str = "kb_decoder_lending_kamino";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_lending_marginfi_v2`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_lending_marginfi_v2";
const LEGACY_CRATE: &str = "kb_decoder_lending_marginfi_v2";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -3,4 +3,4 @@
//! `lock` decoder family.
pub mod raydium_lp;
mod raydium_lp;

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_lock_raydium_lp`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_lock_raydium_lp";
const LEGACY_CRATE: &str = "kb_decoder_lock_raydium_lp";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -3,8 +3,216 @@
//! `metadata` decoder family.
pub mod metaplex_token_metadata;
pub mod spl_name_service;
mod metaplex_token_metadata;
mod spl_name_service;
/// Approve Collection Authority discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_APPROVE_COLLECTION_AUTHORITY_DISCRIMINATOR;
/// Approve Use Authority discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_APPROVE_USE_AUTHORITY_DISCRIMINATOR;
/// Bubblegum Set Collection Size discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_BUBBLEGUM_SET_COLLECTION_SIZE_DISCRIMINATOR;
/// Burn discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_BURN_DISCRIMINATOR;
/// Historical Burn Edition NFT discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_BURN_EDITION_NFT_DISCRIMINATOR;
/// Historical Burn NFT discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_BURN_NFT_DISCRIMINATOR;
/// Close Accounts discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_CLOSE_ACCOUNTS_DISCRIMINATOR;
/// Close Escrow Account discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_CLOSE_ESCROW_ACCOUNT_DISCRIMINATOR;
/// Collect discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_COLLECT_DISCRIMINATOR;
/// Convert Master Edition V1 to V2 discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_CONVERT_MASTER_EDITION_V1_TO_V2_DISCRIMINATOR;
/// Modern Create discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_CREATE_DISCRIMINATOR;
/// Create Escrow Account discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_CREATE_ESCROW_ACCOUNT_DISCRIMINATOR;
/// Historical Create Master Edition discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_CREATE_MASTER_EDITION_DISCRIMINATOR;
/// Create Master Edition V3 discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_CREATE_MASTER_EDITION_V3_DISCRIMINATOR;
/// Historical Create Metadata Account discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_CREATE_METADATA_ACCOUNT_DISCRIMINATOR;
/// Historical Create Metadata Account V2 discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_CREATE_METADATA_ACCOUNT_V2_DISCRIMINATOR;
/// Create Metadata Account V3 discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_CREATE_METADATA_ACCOUNT_V3_DISCRIMINATOR;
/// Delegate discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_DELEGATE_DISCRIMINATOR;
/// Deprecated Create Master Edition discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_DEPRECATED_CREATE_MASTER_EDITION_DISCRIMINATOR;
/// Deprecated Create Reservation List discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_DEPRECATED_CREATE_RESERVATION_LIST_DISCRIMINATOR;
/// Deprecated printing-token mint-new-edition discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_DEPRECATED_MINT_NEW_EDITION_VIA_PRINTING_TOKEN_DISCRIMINATOR;
/// Deprecated Mint Printing Tokens discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_DEPRECATED_MINT_PRINTING_TOKENS_DISCRIMINATOR;
/// Deprecated Mint Printing Tokens Via Token discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_DEPRECATED_MINT_PRINTING_TOKENS_VIA_TOKEN_DISCRIMINATOR;
/// Deprecated Set Reservation List discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_DEPRECATED_SET_RESERVATION_LIST_DISCRIMINATOR;
/// Number of bytes retained in malformed-wire diagnostics.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_DIAGNOSTIC_PREFIX_BYTES;
/// Stable event payload contract version.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_EVENT_VERSION;
/// Freeze Delegated Account discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_FREEZE_DELEGATED_ACCOUNT_DISCRIMINATOR;
/// Current pre-release instruction inventory.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_INSTRUCTION_ENTRIES;
/// Lock discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_LOCK_DISCRIMINATOR;
/// Maximum encoded base64 instruction payload size.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_MAX_BASE64_BYTES;
/// Maximum number of instruction accounts accepted by this decoder.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_MAX_INSTRUCTION_ACCOUNTS;
/// Tracing target for this decoder.
/// Maximum retained instruction payload size.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_MAX_INSTRUCTION_BYTES;
/// Migrate discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_MIGRATE_DISCRIMINATOR;
/// Modern Mint discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_MINT_DISCRIMINATOR;
/// Mint New Edition From Master Edition Via Token discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_MINT_NEW_EDITION_FROM_MASTER_EDITION_VIA_TOKEN_DISCRIMINATOR;
/// Mint New Edition From Master Edition Via Vault Proxy discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_MINT_NEW_EDITION_FROM_MASTER_EDITION_VIA_VAULT_PROXY_DISCRIMINATOR;
/// Modern Print discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_PRINT_DISCRIMINATOR;
/// Puff Metadata discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_PUFF_METADATA_DISCRIMINATOR;
/// Remove Creator Verification discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_REMOVE_CREATOR_VERIFICATION_DISCRIMINATOR;
/// Resize discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_RESIZE_DISCRIMINATOR;
/// Revoke Collection Authority discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_REVOKE_COLLECTION_AUTHORITY_DISCRIMINATOR;
/// Revoke discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_REVOKE_DISCRIMINATOR;
/// Revoke Use Authority discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_REVOKE_USE_AUTHORITY_DISCRIMINATOR;
/// Set And Verify Collection discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_SET_AND_VERIFY_COLLECTION_DISCRIMINATOR;
/// Set And Verify Sized Collection Item discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_SET_AND_VERIFY_SIZED_COLLECTION_ITEM_DISCRIMINATOR;
/// Set Collection Size discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_SET_COLLECTION_SIZE_DISCRIMINATOR;
/// Set Token Standard discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_SET_TOKEN_STANDARD_DISCRIMINATOR;
/// Sign Metadata discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_SIGN_METADATA_DISCRIMINATOR;
/// Stable decoder surface code.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_SURFACE_CODE;
/// Thaw Delegated Account discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_THAW_DELEGATED_ACCOUNT_DISCRIMINATOR;
/// Canonical tracing target for this crate.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_TRACING_TARGET;
/// Transfer discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_TRANSFER_DISCRIMINATOR;
/// Transfer Out Of Escrow discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_TRANSFER_OUT_OF_ESCROW_DISCRIMINATOR;
/// Unlock discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_UNLOCK_DISCRIMINATOR;
/// Unverify Collection discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_UNVERIFY_COLLECTION_DISCRIMINATOR;
/// Modern Unverify discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_UNVERIFY_DISCRIMINATOR;
/// Unverify Sized Collection Item discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_UNVERIFY_SIZED_COLLECTION_ITEM_DISCRIMINATOR;
/// Modern Update discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_UPDATE_DISCRIMINATOR;
/// Historical Update Metadata Account discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_UPDATE_METADATA_ACCOUNT_DISCRIMINATOR;
/// Update Metadata Account V2 discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_UPDATE_METADATA_ACCOUNT_V2_DISCRIMINATOR;
/// Update Primary Sale Happened Via Token discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_UPDATE_PRIMARY_SALE_HAPPENED_VIA_TOKEN_DISCRIMINATOR;
/// Modern Use discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_USE_DISCRIMINATOR;
/// Utilize discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_UTILIZE_DISCRIMINATOR;
/// Verify Collection discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_VERIFY_COLLECTION_DISCRIMINATOR;
/// Modern Verify discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_VERIFY_DISCRIMINATOR;
/// Verify Sized Collection Item discriminator.
pub(crate) use self::metaplex_token_metadata::DC_METADATA_MTM_VERIFY_SIZED_COLLECTION_ITEM_DISCRIMINATOR;
/// Crate-root access to `decode` from `instruction`.
pub(crate) use self::metaplex_token_metadata::decoder_metadata_metaplex_token_metadata_decode;
/// Crate-root access to `entry_for_discriminator` from `instruction`.
pub(crate) use self::metaplex_token_metadata::decoder_metadata_metaplex_token_metadata_entry_for_discriminator;
/// Crate-root access to `payload_discriminator` from `instruction`.
pub(crate) use self::metaplex_token_metadata::decoder_metadata_metaplex_token_metadata_payload_discriminator;
/// Exhaustive published Metaplex account-key inventory.
pub use self::metaplex_token_metadata::DC_METADATA_MTM_METADATA_ACCOUNT_LAYOUT_AUDIT;
/// Exact decoder for the Metaplex Token Metadata program.
pub use self::metaplex_token_metadata::MetadataMetaplexTokenMetadataDecoder;
pub use self::metaplex_token_metadata::DcMetadataMetaplexTokenMetadataDecoder;
/// Canonical projection shared by Collection and Use Authority records.
pub use self::metaplex_token_metadata::DcMetadataMtmAuthorityRecordAccountSnapshot;
/// Stable identity and policy of one canonical account snapshot.
pub use self::metaplex_token_metadata::DcMetadataMtmCanonicalAccountIdentity;
/// Lifecycle class of one canonical account layout.
pub use self::metaplex_token_metadata::DcMetadataMtmCanonicalAccountLifecycle;
/// Provenance retained for one canonical account observation.
pub use self::metaplex_token_metadata::DcMetadataMtmCanonicalAccountProvenance;
/// Execution policy separated from historical materialization.
pub use self::metaplex_token_metadata::DcMetadataMtmCanonicalExecutionPolicy;
/// Materialization policy for active or historical state.
pub use self::metaplex_token_metadata::DcMetadataMtmCanonicalMaterializationPolicy;
/// Canonical account envelope used by materializers and replay.
pub use self::metaplex_token_metadata::DcMetadataMtmCanonicalMetadataAccountSnapshot;
/// Typed canonical Metaplex account state.
pub use self::metaplex_token_metadata::DcMetadataMtmCanonicalMetadataAccountState;
/// Origin of one canonical account observation.
pub use self::metaplex_token_metadata::DcMetadataMtmCanonicalObservationSource;
/// Canonical projection shared by Metadata and Holder delegate records.
pub use self::metaplex_token_metadata::DcMetadataMtmDelegateRecordAccountSnapshot;
/// Supported edition account layout.
pub use self::metaplex_token_metadata::DcMetadataMtmEditionAccountKind;
/// Canonical bounded projection of one edition or master-edition account.
pub use self::metaplex_token_metadata::DcMetadataMtmEditionAccountSnapshot;
/// Supported Edition Marker account layout.
pub use self::metaplex_token_metadata::DcMetadataMtmEditionMarkerAccountKind;
/// Canonical bounded projection of one Edition Marker account.
pub use self::metaplex_token_metadata::DcMetadataMtmEditionMarkerAccountSnapshot;
/// Bounded error returned while decoding a Metadata account.
pub use self::metaplex_token_metadata::DcMetadataMtmMetadataAccountDecodeError;
/// One entry in the exhaustive published account-key audit.
pub use self::metaplex_token_metadata::DcMetadataMtmMetadataAccountLayoutAuditEntry;
/// Canonical bounded projection of one Metadata account.
pub use self::metaplex_token_metadata::DcMetadataMtmMetadataAccountSnapshot;
/// One bounded historical reservation entry.
pub use self::metaplex_token_metadata::DcMetadataMtmReservationEntrySnapshot;
/// Historical Reservation List account generation.
pub use self::metaplex_token_metadata::DcMetadataMtmReservationListAccountKind;
/// Canonical decode-only projection of a historical Reservation List account.
pub use self::metaplex_token_metadata::DcMetadataMtmReservationListAccountSnapshot;
/// Canonical projection of one Token Owned Escrow account.
pub use self::metaplex_token_metadata::DcMetadataMtmTokenOwnedEscrowAccountSnapshot;
/// Authority form used by one Token Owned Escrow account.
pub use self::metaplex_token_metadata::DcMetadataMtmTokenOwnedEscrowAuthorityKind;
/// Canonical bounded projection of one programmable Token Record account.
pub use self::metaplex_token_metadata::DcMetadataMtmTokenRecordAccountSnapshot;
/// Decodes one Collection Authority Record account.
pub use self::metaplex_token_metadata::decoder_metadata_metaplex_token_metadata_decode_collection_authority_record_account;
/// Decodes and validates one edition or master-edition account snapshot.
pub use self::metaplex_token_metadata::decoder_metadata_metaplex_token_metadata_decode_edition_account;
/// Decodes and validates one Edition Marker account snapshot.
pub use self::metaplex_token_metadata::decoder_metadata_metaplex_token_metadata_decode_edition_marker_account;
/// Decodes one Holder Delegate Record account.
pub use self::metaplex_token_metadata::decoder_metadata_metaplex_token_metadata_decode_holder_delegate_record_account;
/// Decodes and validates one canonical Metadata account snapshot.
pub use self::metaplex_token_metadata::decoder_metadata_metaplex_token_metadata_decode_metadata_account;
/// Decodes one Metadata Delegate Record account.
pub use self::metaplex_token_metadata::decoder_metadata_metaplex_token_metadata_decode_metadata_delegate_record_account;
/// Decodes one historical Reservation List V1 or V2 account.
pub use self::metaplex_token_metadata::decoder_metadata_metaplex_token_metadata_decode_reservation_list_account;
/// Decodes one Token Owned Escrow account.
pub use self::metaplex_token_metadata::decoder_metadata_metaplex_token_metadata_decode_token_owned_escrow_account;
/// Decodes and validates one programmable Token Record account snapshot.
pub use self::metaplex_token_metadata::decoder_metadata_metaplex_token_metadata_decode_token_record_account;
/// Decodes one Use Authority Record account.
pub use self::metaplex_token_metadata::decoder_metadata_metaplex_token_metadata_decode_use_authority_record_account;

View File

@@ -10,214 +10,212 @@ mod decoder;
mod instruction;
/// Approve Collection Authority discriminator.
pub(crate) use self::constants::APPROVE_COLLECTION_AUTHORITY_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_APPROVE_COLLECTION_AUTHORITY_DISCRIMINATOR;
/// Approve Use Authority discriminator.
pub(crate) use self::constants::APPROVE_USE_AUTHORITY_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_APPROVE_USE_AUTHORITY_DISCRIMINATOR;
/// Bubblegum Set Collection Size discriminator.
pub(crate) use self::constants::BUBBLEGUM_SET_COLLECTION_SIZE_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_BUBBLEGUM_SET_COLLECTION_SIZE_DISCRIMINATOR;
/// Burn discriminator.
pub(crate) use self::constants::BURN_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_BURN_DISCRIMINATOR;
/// Historical Burn Edition NFT discriminator.
pub(crate) use self::constants::BURN_EDITION_NFT_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_BURN_EDITION_NFT_DISCRIMINATOR;
/// Historical Burn NFT discriminator.
pub(crate) use self::constants::BURN_NFT_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_BURN_NFT_DISCRIMINATOR;
/// Close Accounts discriminator.
pub(crate) use self::constants::CLOSE_ACCOUNTS_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_CLOSE_ACCOUNTS_DISCRIMINATOR;
/// Close Escrow Account discriminator.
pub(crate) use self::constants::CLOSE_ESCROW_ACCOUNT_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_CLOSE_ESCROW_ACCOUNT_DISCRIMINATOR;
/// Collect discriminator.
pub(crate) use self::constants::COLLECT_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_COLLECT_DISCRIMINATOR;
/// Convert Master Edition V1 to V2 discriminator.
pub(crate) use self::constants::CONVERT_MASTER_EDITION_V1_TO_V2_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_CONVERT_MASTER_EDITION_V1_TO_V2_DISCRIMINATOR;
/// Modern Create discriminator.
pub(crate) use self::constants::CREATE_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_CREATE_DISCRIMINATOR;
/// Create Escrow Account discriminator.
pub(crate) use self::constants::CREATE_ESCROW_ACCOUNT_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_CREATE_ESCROW_ACCOUNT_DISCRIMINATOR;
/// Historical Create Master Edition discriminator.
pub(crate) use self::constants::CREATE_MASTER_EDITION_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_CREATE_MASTER_EDITION_DISCRIMINATOR;
/// Create Master Edition V3 discriminator.
pub(crate) use self::constants::CREATE_MASTER_EDITION_V3_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_CREATE_MASTER_EDITION_V3_DISCRIMINATOR;
/// Historical Create Metadata Account discriminator.
pub(crate) use self::constants::CREATE_METADATA_ACCOUNT_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_CREATE_METADATA_ACCOUNT_DISCRIMINATOR;
/// Historical Create Metadata Account V2 discriminator.
pub(crate) use self::constants::CREATE_METADATA_ACCOUNT_V2_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_CREATE_METADATA_ACCOUNT_V2_DISCRIMINATOR;
/// Create Metadata Account V3 discriminator.
pub(crate) use self::constants::CREATE_METADATA_ACCOUNT_V3_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_CREATE_METADATA_ACCOUNT_V3_DISCRIMINATOR;
/// Delegate discriminator.
pub(crate) use self::constants::DELEGATE_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_DELEGATE_DISCRIMINATOR;
/// Deprecated Create Master Edition discriminator.
pub(crate) use self::constants::DEPRECATED_CREATE_MASTER_EDITION_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_DEPRECATED_CREATE_MASTER_EDITION_DISCRIMINATOR;
/// Deprecated Create Reservation List discriminator.
pub(crate) use self::constants::DEPRECATED_CREATE_RESERVATION_LIST_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_DEPRECATED_CREATE_RESERVATION_LIST_DISCRIMINATOR;
/// Deprecated printing-token mint-new-edition discriminator.
pub(crate) use self::constants::DEPRECATED_MINT_NEW_EDITION_VIA_PRINTING_TOKEN_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_DEPRECATED_MINT_NEW_EDITION_VIA_PRINTING_TOKEN_DISCRIMINATOR;
/// Deprecated Mint Printing Tokens discriminator.
pub(crate) use self::constants::DEPRECATED_MINT_PRINTING_TOKENS_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_DEPRECATED_MINT_PRINTING_TOKENS_DISCRIMINATOR;
/// Deprecated Mint Printing Tokens Via Token discriminator.
pub(crate) use self::constants::DEPRECATED_MINT_PRINTING_TOKENS_VIA_TOKEN_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_DEPRECATED_MINT_PRINTING_TOKENS_VIA_TOKEN_DISCRIMINATOR;
/// Deprecated Set Reservation List discriminator.
pub(crate) use self::constants::DEPRECATED_SET_RESERVATION_LIST_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_DEPRECATED_SET_RESERVATION_LIST_DISCRIMINATOR;
/// Number of bytes retained in malformed-wire diagnostics.
pub(crate) use self::constants::DIAGNOSTIC_PREFIX_BYTES;
pub(crate) use self::constants::DC_METADATA_MTM_DIAGNOSTIC_PREFIX_BYTES;
/// Stable event payload contract version.
pub(crate) use self::constants::EVENT_VERSION;
pub(crate) use self::constants::DC_METADATA_MTM_EVENT_VERSION;
/// Freeze Delegated Account discriminator.
pub(crate) use self::constants::FREEZE_DELEGATED_ACCOUNT_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_FREEZE_DELEGATED_ACCOUNT_DISCRIMINATOR;
/// Current pre-release instruction inventory.
pub(crate) use self::constants::INSTRUCTION_ENTRIES;
pub(crate) use self::constants::DC_METADATA_MTM_INSTRUCTION_ENTRIES;
/// Lock discriminator.
pub(crate) use self::constants::LOCK_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_LOCK_DISCRIMINATOR;
/// Maximum encoded base64 instruction payload size.
pub(crate) use self::constants::MAX_BASE64_BYTES;
pub(crate) use self::constants::DC_METADATA_MTM_MAX_BASE64_BYTES;
/// Maximum number of instruction accounts accepted by this decoder.
pub(crate) use self::constants::MAX_INSTRUCTION_ACCOUNTS;
pub(crate) use self::constants::DC_METADATA_MTM_MAX_INSTRUCTION_ACCOUNTS;
/// Tracing target for this decoder.
/// Maximum retained instruction payload size.
pub(crate) use self::constants::MAX_INSTRUCTION_BYTES;
pub(crate) use self::constants::DC_METADATA_MTM_MAX_INSTRUCTION_BYTES;
/// Migrate discriminator.
pub(crate) use self::constants::MIGRATE_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_MIGRATE_DISCRIMINATOR;
/// Modern Mint discriminator.
pub(crate) use self::constants::MINT_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_MINT_DISCRIMINATOR;
/// Mint New Edition From Master Edition Via Token discriminator.
pub(crate) use self::constants::MINT_NEW_EDITION_FROM_MASTER_EDITION_VIA_TOKEN_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_MINT_NEW_EDITION_FROM_MASTER_EDITION_VIA_TOKEN_DISCRIMINATOR;
/// Mint New Edition From Master Edition Via Vault Proxy discriminator.
pub(crate) use self::constants::MINT_NEW_EDITION_FROM_MASTER_EDITION_VIA_VAULT_PROXY_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_MINT_NEW_EDITION_FROM_MASTER_EDITION_VIA_VAULT_PROXY_DISCRIMINATOR;
/// Modern Print discriminator.
pub(crate) use self::constants::PRINT_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_PRINT_DISCRIMINATOR;
/// Puff Metadata discriminator.
pub(crate) use self::constants::PUFF_METADATA_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_PUFF_METADATA_DISCRIMINATOR;
/// Remove Creator Verification discriminator.
pub(crate) use self::constants::REMOVE_CREATOR_VERIFICATION_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_REMOVE_CREATOR_VERIFICATION_DISCRIMINATOR;
/// Resize discriminator.
pub(crate) use self::constants::RESIZE_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_RESIZE_DISCRIMINATOR;
/// Revoke Collection Authority discriminator.
pub(crate) use self::constants::REVOKE_COLLECTION_AUTHORITY_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_REVOKE_COLLECTION_AUTHORITY_DISCRIMINATOR;
/// Revoke discriminator.
pub(crate) use self::constants::REVOKE_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_REVOKE_DISCRIMINATOR;
/// Revoke Use Authority discriminator.
pub(crate) use self::constants::REVOKE_USE_AUTHORITY_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_REVOKE_USE_AUTHORITY_DISCRIMINATOR;
/// Set And Verify Collection discriminator.
pub(crate) use self::constants::SET_AND_VERIFY_COLLECTION_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_SET_AND_VERIFY_COLLECTION_DISCRIMINATOR;
/// Set And Verify Sized Collection Item discriminator.
pub(crate) use self::constants::SET_AND_VERIFY_SIZED_COLLECTION_ITEM_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_SET_AND_VERIFY_SIZED_COLLECTION_ITEM_DISCRIMINATOR;
/// Set Collection Size discriminator.
pub(crate) use self::constants::SET_COLLECTION_SIZE_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_SET_COLLECTION_SIZE_DISCRIMINATOR;
/// Set Token Standard discriminator.
pub(crate) use self::constants::SET_TOKEN_STANDARD_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_SET_TOKEN_STANDARD_DISCRIMINATOR;
/// Sign Metadata discriminator.
pub(crate) use self::constants::SIGN_METADATA_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_SIGN_METADATA_DISCRIMINATOR;
/// Stable decoder surface code.
pub(crate) use self::constants::SURFACE_CODE;
pub(crate) use self::constants::DC_METADATA_MTM_SURFACE_CODE;
/// Thaw Delegated Account discriminator.
pub(crate) use self::constants::THAW_DELEGATED_ACCOUNT_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_THAW_DELEGATED_ACCOUNT_DISCRIMINATOR;
/// Canonical tracing target for this crate.
pub(crate) use self::constants::TRACING_TARGET;
pub(crate) use self::constants::DC_METADATA_MTM_TRACING_TARGET;
/// Transfer discriminator.
pub(crate) use self::constants::TRANSFER_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_TRANSFER_DISCRIMINATOR;
/// Transfer Out Of Escrow discriminator.
pub(crate) use self::constants::TRANSFER_OUT_OF_ESCROW_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_TRANSFER_OUT_OF_ESCROW_DISCRIMINATOR;
/// Unlock discriminator.
pub(crate) use self::constants::UNLOCK_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_UNLOCK_DISCRIMINATOR;
/// Unverify Collection discriminator.
pub(crate) use self::constants::UNVERIFY_COLLECTION_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_UNVERIFY_COLLECTION_DISCRIMINATOR;
/// Modern Unverify discriminator.
pub(crate) use self::constants::UNVERIFY_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_UNVERIFY_DISCRIMINATOR;
/// Unverify Sized Collection Item discriminator.
pub(crate) use self::constants::UNVERIFY_SIZED_COLLECTION_ITEM_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_UNVERIFY_SIZED_COLLECTION_ITEM_DISCRIMINATOR;
/// Modern Update discriminator.
pub(crate) use self::constants::UPDATE_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_UPDATE_DISCRIMINATOR;
/// Historical Update Metadata Account discriminator.
pub(crate) use self::constants::UPDATE_METADATA_ACCOUNT_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_UPDATE_METADATA_ACCOUNT_DISCRIMINATOR;
/// Update Metadata Account V2 discriminator.
pub(crate) use self::constants::UPDATE_METADATA_ACCOUNT_V2_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_UPDATE_METADATA_ACCOUNT_V2_DISCRIMINATOR;
/// Update Primary Sale Happened Via Token discriminator.
pub(crate) use self::constants::UPDATE_PRIMARY_SALE_HAPPENED_VIA_TOKEN_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_UPDATE_PRIMARY_SALE_HAPPENED_VIA_TOKEN_DISCRIMINATOR;
/// Modern Use discriminator.
pub(crate) use self::constants::USE_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_USE_DISCRIMINATOR;
/// Utilize discriminator.
pub(crate) use self::constants::UTILIZE_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_UTILIZE_DISCRIMINATOR;
/// Verify Collection discriminator.
pub(crate) use self::constants::VERIFY_COLLECTION_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_VERIFY_COLLECTION_DISCRIMINATOR;
/// Modern Verify discriminator.
pub(crate) use self::constants::VERIFY_DISCRIMINATOR;
pub(crate) use self::constants::DC_METADATA_MTM_VERIFY_DISCRIMINATOR;
/// Verify Sized Collection Item discriminator.
pub(crate) use self::constants::VERIFY_SIZED_COLLECTION_ITEM_DISCRIMINATOR;
/// Crate-root access to `ParsedInstruction` from `instruction`.
pub(crate) use self::instruction::ParsedInstruction;
pub(crate) use self::constants::DC_METADATA_MTM_VERIFY_SIZED_COLLECTION_ITEM_DISCRIMINATOR;
/// Crate-root access to `decode` from `instruction`.
pub(crate) use self::instruction::decode;
pub(crate) use self::instruction::decoder_metadata_metaplex_token_metadata_decode;
/// Crate-root access to `entry_for_discriminator` from `instruction`.
pub(crate) use self::instruction::entry_for_discriminator;
pub(crate) use self::instruction::decoder_metadata_metaplex_token_metadata_entry_for_discriminator;
/// Crate-root access to `payload_discriminator` from `instruction`.
pub(crate) use self::instruction::payload_discriminator;
pub(crate) use self::instruction::decoder_metadata_metaplex_token_metadata_payload_discriminator;
/// Canonical projection shared by Collection and Use Authority records.
pub use self::account::AuthorityRecordAccountSnapshot;
/// Canonical projection shared by Metadata and Holder delegate records.
pub use self::account::DelegateRecordAccountSnapshot;
/// Supported edition account layout.
pub use self::account::EditionAccountKind;
/// Canonical bounded projection of one edition or master-edition account.
pub use self::account::EditionAccountSnapshot;
/// Supported Edition Marker account layout.
pub use self::account::EditionMarkerAccountKind;
/// Canonical bounded projection of one Edition Marker account.
pub use self::account::EditionMarkerAccountSnapshot;
/// Exhaustive published Metaplex account-key inventory.
pub use self::account::METADATA_ACCOUNT_LAYOUT_AUDIT;
pub use self::account::DC_METADATA_MTM_METADATA_ACCOUNT_LAYOUT_AUDIT;
/// Canonical projection shared by Collection and Use Authority records.
pub use self::account::DcMetadataMtmAuthorityRecordAccountSnapshot;
/// Canonical projection shared by Metadata and Holder delegate records.
pub use self::account::DcMetadataMtmDelegateRecordAccountSnapshot;
/// Supported edition account layout.
pub use self::account::DcMetadataMtmEditionAccountKind;
/// Canonical bounded projection of one edition or master-edition account.
pub use self::account::DcMetadataMtmEditionAccountSnapshot;
/// Supported Edition Marker account layout.
pub use self::account::DcMetadataMtmEditionMarkerAccountKind;
/// Canonical bounded projection of one Edition Marker account.
pub use self::account::DcMetadataMtmEditionMarkerAccountSnapshot;
/// Bounded error returned while decoding a Metadata account.
pub use self::account::MetadataAccountDecodeError;
pub use self::account::DcMetadataMtmMetadataAccountDecodeError;
/// One entry in the exhaustive published account-key audit.
pub use self::account::MetadataAccountLayoutAuditEntry;
pub use self::account::DcMetadataMtmMetadataAccountLayoutAuditEntry;
/// Canonical bounded projection of one Metadata account.
pub use self::account::MetadataAccountSnapshot;
pub use self::account::DcMetadataMtmMetadataAccountSnapshot;
/// One bounded historical reservation entry.
pub use self::account::ReservationEntrySnapshot;
pub use self::account::DcMetadataMtmReservationEntrySnapshot;
/// Historical Reservation List account generation.
pub use self::account::ReservationListAccountKind;
pub use self::account::DcMetadataMtmReservationListAccountKind;
/// Canonical decode-only projection of a historical Reservation List account.
pub use self::account::ReservationListAccountSnapshot;
pub use self::account::DcMetadataMtmReservationListAccountSnapshot;
/// Canonical projection of one Token Owned Escrow account.
pub use self::account::TokenOwnedEscrowAccountSnapshot;
pub use self::account::DcMetadataMtmTokenOwnedEscrowAccountSnapshot;
/// Authority form used by one Token Owned Escrow account.
pub use self::account::TokenOwnedEscrowAuthorityKind;
pub use self::account::DcMetadataMtmTokenOwnedEscrowAuthorityKind;
/// Canonical bounded projection of one programmable Token Record account.
pub use self::account::TokenRecordAccountSnapshot;
pub use self::account::DcMetadataMtmTokenRecordAccountSnapshot;
/// Decodes one Collection Authority Record account.
pub use self::account::decode_collection_authority_record_account;
pub use self::account::decoder_metadata_metaplex_token_metadata_decode_collection_authority_record_account;
/// Decodes and validates one edition or master-edition account snapshot.
pub use self::account::decode_edition_account;
pub use self::account::decoder_metadata_metaplex_token_metadata_decode_edition_account;
/// Decodes and validates one Edition Marker account snapshot.
pub use self::account::decode_edition_marker_account;
pub use self::account::decoder_metadata_metaplex_token_metadata_decode_edition_marker_account;
/// Decodes one Holder Delegate Record account.
pub use self::account::decode_holder_delegate_record_account;
pub use self::account::decoder_metadata_metaplex_token_metadata_decode_holder_delegate_record_account;
/// Decodes and validates one canonical Metadata account snapshot.
pub use self::account::decode_metadata_account;
pub use self::account::decoder_metadata_metaplex_token_metadata_decode_metadata_account;
/// Decodes one Metadata Delegate Record account.
pub use self::account::decode_metadata_delegate_record_account;
pub use self::account::decoder_metadata_metaplex_token_metadata_decode_metadata_delegate_record_account;
/// Decodes one historical Reservation List V1 or V2 account.
pub use self::account::decode_reservation_list_account;
pub use self::account::decoder_metadata_metaplex_token_metadata_decode_reservation_list_account;
/// Decodes one Token Owned Escrow account.
pub use self::account::decode_token_owned_escrow_account;
pub use self::account::decoder_metadata_metaplex_token_metadata_decode_token_owned_escrow_account;
/// Decodes and validates one programmable Token Record account snapshot.
pub use self::account::decode_token_record_account;
pub use self::account::decoder_metadata_metaplex_token_metadata_decode_token_record_account;
/// Decodes one Use Authority Record account.
pub use self::account::decode_use_authority_record_account;
pub use self::account::decoder_metadata_metaplex_token_metadata_decode_use_authority_record_account;
/// Stable identity and policy of one canonical account snapshot.
pub use self::canonical::CanonicalAccountIdentity;
pub use self::canonical::DcMetadataMtmCanonicalAccountIdentity;
/// Lifecycle class of one canonical account layout.
pub use self::canonical::CanonicalAccountLifecycle;
pub use self::canonical::DcMetadataMtmCanonicalAccountLifecycle;
/// Provenance retained for one canonical account observation.
pub use self::canonical::CanonicalAccountProvenance;
pub use self::canonical::DcMetadataMtmCanonicalAccountProvenance;
/// Execution policy separated from historical materialization.
pub use self::canonical::CanonicalExecutionPolicy;
pub use self::canonical::DcMetadataMtmCanonicalExecutionPolicy;
/// Materialization policy for active or historical state.
pub use self::canonical::CanonicalMaterializationPolicy;
pub use self::canonical::DcMetadataMtmCanonicalMaterializationPolicy;
/// Canonical account envelope used by materializers and replay.
pub use self::canonical::CanonicalMetadataAccountSnapshot;
pub use self::canonical::DcMetadataMtmCanonicalMetadataAccountSnapshot;
/// Typed canonical Metaplex account state.
pub use self::canonical::CanonicalMetadataAccountState;
pub use self::canonical::DcMetadataMtmCanonicalMetadataAccountState;
/// Origin of one canonical account observation.
pub use self::canonical::CanonicalObservationSource;
pub use self::canonical::DcMetadataMtmCanonicalObservationSource;
/// Exact Metaplex Token Metadata decoder.
pub use self::decoder::MetadataMetaplexTokenMetadataDecoder;
pub use self::decoder::DcMetadataMetaplexTokenMetadataDecoder;

View File

@@ -5,7 +5,7 @@
/// Lifecycle class of one decoded Metaplex account layout.
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum CanonicalAccountLifecycle {
pub enum DcMetadataMtmCanonicalAccountLifecycle {
/// Current account layout used by supported runtime flows.
Active,
/// Published account layout whose runtime surface is still experimental.
@@ -16,7 +16,7 @@ pub enum CanonicalAccountLifecycle {
/// Materialization policy attached to one canonical account snapshot.
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum CanonicalMaterializationPolicy {
pub enum DcMetadataMtmCanonicalMaterializationPolicy {
/// Materialize the latest committed state of an active account.
ActiveState,
/// Materialize historical state with explicit lifecycle provenance.
@@ -25,7 +25,7 @@ pub enum CanonicalMaterializationPolicy {
/// Execution policy attached to one canonical account layout.
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum CanonicalExecutionPolicy {
pub enum DcMetadataMtmCanonicalExecutionPolicy {
/// The layout belongs to current operations that may later be executable.
CurrentCandidate,
/// The layout belongs to an experimental operation requiring explicit activation.
@@ -36,7 +36,7 @@ pub enum CanonicalExecutionPolicy {
/// Origin of one canonical account observation.
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum CanonicalObservationSource {
pub enum DcMetadataMtmCanonicalObservationSource {
/// Account observed from a live subscription or direct live read.
Live,
/// Account reconstructed while replaying already stored transactions.
@@ -51,9 +51,9 @@ pub enum CanonicalObservationSource {
/// Provenance retained for one canonical account observation.
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct CanonicalAccountProvenance {
pub struct DcMetadataMtmCanonicalAccountProvenance {
/// Observation source.
pub source: CanonicalObservationSource,
pub source: DcMetadataMtmCanonicalObservationSource,
/// Slot associated with the account state when known.
pub slot: std::option::Option<u64>,
/// Provider write version when available.
@@ -70,7 +70,7 @@ pub struct CanonicalAccountProvenance {
/// Stable identity and policy of one canonical Metaplex account snapshot.
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct CanonicalAccountIdentity {
pub struct DcMetadataMtmCanonicalAccountIdentity {
/// Stable identity formed from program id and canonical account address.
pub stable_id: String,
/// Canonical Metaplex Token Metadata program id.
@@ -84,74 +84,73 @@ pub struct CanonicalAccountIdentity {
/// Internal canonical-model version.
pub canonical_version: u16,
/// Published lifecycle class.
pub lifecycle: CanonicalAccountLifecycle,
pub lifecycle: DcMetadataMtmCanonicalAccountLifecycle,
/// Materialization policy, including historical backfill state.
pub materialization: CanonicalMaterializationPolicy,
pub materialization: DcMetadataMtmCanonicalMaterializationPolicy,
/// Execution policy separated from materialization.
pub execution: CanonicalExecutionPolicy,
pub execution: DcMetadataMtmCanonicalExecutionPolicy,
}
/// Typed state carried by one canonical Metaplex account snapshot.
#[derive(Clone, Debug, PartialEq)]
pub enum CanonicalMetadataAccountState {
pub enum DcMetadataMtmCanonicalMetadataAccountState {
/// Metadata account state.
Metadata(crate::decoder::metadata::metaplex_token_metadata::MetadataAccountSnapshot),
Metadata(crate::DcMetadataMtmMetadataAccountSnapshot),
/// Master Edition or printed Edition state.
Edition(crate::decoder::metadata::metaplex_token_metadata::EditionAccountSnapshot),
Edition(crate::DcMetadataMtmEditionAccountSnapshot),
/// Edition Marker state.
EditionMarker(crate::decoder::metadata::metaplex_token_metadata::EditionMarkerAccountSnapshot),
EditionMarker(crate::DcMetadataMtmEditionMarkerAccountSnapshot),
/// Programmable Token Record state.
TokenRecord(crate::decoder::metadata::metaplex_token_metadata::TokenRecordAccountSnapshot),
TokenRecord(crate::DcMetadataMtmTokenRecordAccountSnapshot),
/// Metadata or holder delegate state.
DelegateRecord(
crate::decoder::metadata::metaplex_token_metadata::DelegateRecordAccountSnapshot,
),
DelegateRecord(crate::DcMetadataMtmDelegateRecordAccountSnapshot),
/// Collection or use authority state.
AuthorityRecord(
crate::decoder::metadata::metaplex_token_metadata::AuthorityRecordAccountSnapshot,
),
AuthorityRecord(crate::DcMetadataMtmAuthorityRecordAccountSnapshot),
/// Token-owned escrow state.
TokenOwnedEscrow(
crate::decoder::metadata::metaplex_token_metadata::TokenOwnedEscrowAccountSnapshot,
),
TokenOwnedEscrow(crate::DcMetadataMtmTokenOwnedEscrowAccountSnapshot),
/// Historical Reservation List state.
ReservationList(
crate::decoder::metadata::metaplex_token_metadata::ReservationListAccountSnapshot,
),
ReservationList(crate::DcMetadataMtmReservationListAccountSnapshot),
}
/// Canonical envelope used by future materializers and stateful replay.
#[derive(Clone, Debug, PartialEq)]
pub struct CanonicalMetadataAccountSnapshot {
pub struct DcMetadataMtmCanonicalMetadataAccountSnapshot {
/// Stable identity and lifecycle policy.
pub identity: CanonicalAccountIdentity,
pub identity: DcMetadataMtmCanonicalAccountIdentity,
/// Observation provenance.
pub provenance: CanonicalAccountProvenance,
pub provenance: DcMetadataMtmCanonicalAccountProvenance,
/// Typed bounded state.
pub state: CanonicalMetadataAccountState,
pub state: DcMetadataMtmCanonicalMetadataAccountState,
}
fn canonical_identity(
account: &str,
layout: &str,
discriminant: u8,
lifecycle: CanonicalAccountLifecycle,
) -> CanonicalAccountIdentity {
lifecycle: DcMetadataMtmCanonicalAccountLifecycle,
) -> DcMetadataMtmCanonicalAccountIdentity {
let program_id = kb_program_ids::METADATA_METAPLEX_TOKEN_METADATA_PROGRAM_ID.to_string();
let materialization = match lifecycle {
CanonicalAccountLifecycle::Historical => CanonicalMaterializationPolicy::HistoricalState,
CanonicalAccountLifecycle::Active | CanonicalAccountLifecycle::ActiveExperimental => {
CanonicalMaterializationPolicy::ActiveState
DcMetadataMtmCanonicalAccountLifecycle::Historical => {
DcMetadataMtmCanonicalMaterializationPolicy::HistoricalState
},
DcMetadataMtmCanonicalAccountLifecycle::Active
| DcMetadataMtmCanonicalAccountLifecycle::ActiveExperimental => {
DcMetadataMtmCanonicalMaterializationPolicy::ActiveState
},
};
let execution = match lifecycle {
CanonicalAccountLifecycle::Historical => CanonicalExecutionPolicy::NeverHistorical,
CanonicalAccountLifecycle::Active => CanonicalExecutionPolicy::CurrentCandidate,
CanonicalAccountLifecycle::ActiveExperimental => {
CanonicalExecutionPolicy::ExperimentalCandidate
DcMetadataMtmCanonicalAccountLifecycle::Historical => {
DcMetadataMtmCanonicalExecutionPolicy::NeverHistorical
},
DcMetadataMtmCanonicalAccountLifecycle::Active => {
DcMetadataMtmCanonicalExecutionPolicy::CurrentCandidate
},
DcMetadataMtmCanonicalAccountLifecycle::ActiveExperimental => {
DcMetadataMtmCanonicalExecutionPolicy::ExperimentalCandidate
},
};
return CanonicalAccountIdentity {
return DcMetadataMtmCanonicalAccountIdentity {
stable_id: format!("{program_id}:{account}"),
program_id,
account: account.to_string(),
@@ -164,102 +163,102 @@ fn canonical_identity(
};
}
impl CanonicalMetadataAccountSnapshot {
impl DcMetadataMtmCanonicalMetadataAccountSnapshot {
/// Wraps one Metadata account snapshot with stable identity and provenance.
pub fn from_metadata(
snapshot: crate::decoder::metadata::metaplex_token_metadata::MetadataAccountSnapshot,
provenance: CanonicalAccountProvenance,
snapshot: crate::DcMetadataMtmMetadataAccountSnapshot,
provenance: DcMetadataMtmCanonicalAccountProvenance,
) -> Self {
let identity = canonical_identity(
&snapshot.account,
"MetadataV1",
mpl_token_metadata::types::Key::MetadataV1 as u8,
CanonicalAccountLifecycle::Active,
DcMetadataMtmCanonicalAccountLifecycle::Active,
);
return Self {
identity,
provenance,
state: CanonicalMetadataAccountState::Metadata(snapshot),
state: DcMetadataMtmCanonicalMetadataAccountState::Metadata(snapshot),
};
}
/// Wraps one Edition or Master Edition snapshot with exact lifecycle policy.
pub fn from_edition(
snapshot: crate::decoder::metadata::metaplex_token_metadata::EditionAccountSnapshot,
provenance: CanonicalAccountProvenance,
snapshot: crate::DcMetadataMtmEditionAccountSnapshot,
provenance: DcMetadataMtmCanonicalAccountProvenance,
) -> Self {
let (layout, discriminant, lifecycle) = match snapshot.kind {
crate::decoder::metadata::metaplex_token_metadata::EditionAccountKind::MasterEditionV1 => (
crate::DcMetadataMtmEditionAccountKind::MasterEditionV1 => (
"MasterEditionV1",
mpl_token_metadata::types::Key::MasterEditionV1 as u8,
CanonicalAccountLifecycle::Historical,
DcMetadataMtmCanonicalAccountLifecycle::Historical,
),
crate::decoder::metadata::metaplex_token_metadata::EditionAccountKind::MasterEditionV2 => (
crate::DcMetadataMtmEditionAccountKind::MasterEditionV2 => (
"MasterEditionV2",
mpl_token_metadata::types::Key::MasterEditionV2 as u8,
CanonicalAccountLifecycle::Active,
DcMetadataMtmCanonicalAccountLifecycle::Active,
),
crate::decoder::metadata::metaplex_token_metadata::EditionAccountKind::EditionV1 => (
crate::DcMetadataMtmEditionAccountKind::EditionV1 => (
"EditionV1",
mpl_token_metadata::types::Key::EditionV1 as u8,
CanonicalAccountLifecycle::Active,
DcMetadataMtmCanonicalAccountLifecycle::Active,
),
};
let identity = canonical_identity(&snapshot.account, layout, discriminant, lifecycle);
return Self {
identity,
provenance,
state: CanonicalMetadataAccountState::Edition(snapshot),
state: DcMetadataMtmCanonicalMetadataAccountState::Edition(snapshot),
};
}
/// Wraps one Edition Marker snapshot with exact lifecycle policy.
pub fn from_edition_marker(
snapshot: crate::decoder::metadata::metaplex_token_metadata::EditionMarkerAccountSnapshot,
provenance: CanonicalAccountProvenance,
snapshot: crate::DcMetadataMtmEditionMarkerAccountSnapshot,
provenance: DcMetadataMtmCanonicalAccountProvenance,
) -> Self {
let (layout, discriminant, lifecycle) = match snapshot.kind {
crate::decoder::metadata::metaplex_token_metadata::EditionMarkerAccountKind::EditionMarkerV1 => (
crate::DcMetadataMtmEditionMarkerAccountKind::EditionMarkerV1 => (
"EditionMarker",
mpl_token_metadata::types::Key::EditionMarker as u8,
CanonicalAccountLifecycle::Active,
DcMetadataMtmCanonicalAccountLifecycle::Active,
),
crate::decoder::metadata::metaplex_token_metadata::EditionMarkerAccountKind::EditionMarkerV2 => (
crate::DcMetadataMtmEditionMarkerAccountKind::EditionMarkerV2 => (
"EditionMarkerV2",
mpl_token_metadata::types::Key::EditionMarkerV2 as u8,
CanonicalAccountLifecycle::ActiveExperimental,
DcMetadataMtmCanonicalAccountLifecycle::ActiveExperimental,
),
};
let identity = canonical_identity(&snapshot.account, layout, discriminant, lifecycle);
return Self {
identity,
provenance,
state: CanonicalMetadataAccountState::EditionMarker(snapshot),
state: DcMetadataMtmCanonicalMetadataAccountState::EditionMarker(snapshot),
};
}
/// Wraps one Token Record snapshot.
pub fn from_token_record(
snapshot: crate::decoder::metadata::metaplex_token_metadata::TokenRecordAccountSnapshot,
provenance: CanonicalAccountProvenance,
snapshot: crate::DcMetadataMtmTokenRecordAccountSnapshot,
provenance: DcMetadataMtmCanonicalAccountProvenance,
) -> Self {
let identity = canonical_identity(
&snapshot.account,
"TokenRecord",
mpl_token_metadata::types::Key::TokenRecord as u8,
CanonicalAccountLifecycle::Active,
DcMetadataMtmCanonicalAccountLifecycle::Active,
);
return Self {
identity,
provenance,
state: CanonicalMetadataAccountState::TokenRecord(snapshot),
state: DcMetadataMtmCanonicalMetadataAccountState::TokenRecord(snapshot),
};
}
/// Wraps one Metadata or Holder Delegate snapshot.
pub fn from_delegate_record(
snapshot: crate::decoder::metadata::metaplex_token_metadata::DelegateRecordAccountSnapshot,
provenance: CanonicalAccountProvenance,
snapshot: crate::DcMetadataMtmDelegateRecordAccountSnapshot,
provenance: DcMetadataMtmCanonicalAccountProvenance,
) -> Self {
let (layout, discriminant) = if snapshot.kind == "MetadataDelegateRecord" {
("MetadataDelegate", mpl_token_metadata::types::Key::MetadataDelegate as u8)
@@ -270,19 +269,19 @@ impl CanonicalMetadataAccountSnapshot {
&snapshot.account,
layout,
discriminant,
CanonicalAccountLifecycle::Active,
DcMetadataMtmCanonicalAccountLifecycle::Active,
);
return Self {
identity,
provenance,
state: CanonicalMetadataAccountState::DelegateRecord(snapshot),
state: DcMetadataMtmCanonicalMetadataAccountState::DelegateRecord(snapshot),
};
}
/// Wraps one Collection or Use Authority snapshot.
pub fn from_authority_record(
snapshot: crate::decoder::metadata::metaplex_token_metadata::AuthorityRecordAccountSnapshot,
provenance: CanonicalAccountProvenance,
snapshot: crate::DcMetadataMtmAuthorityRecordAccountSnapshot,
provenance: DcMetadataMtmCanonicalAccountProvenance,
) -> Self {
let (layout, discriminant) = if snapshot.kind == "CollectionAuthorityRecord" {
(
@@ -296,43 +295,43 @@ impl CanonicalMetadataAccountSnapshot {
&snapshot.account,
layout,
discriminant,
CanonicalAccountLifecycle::Active,
DcMetadataMtmCanonicalAccountLifecycle::Active,
);
return Self {
identity,
provenance,
state: CanonicalMetadataAccountState::AuthorityRecord(snapshot),
state: DcMetadataMtmCanonicalMetadataAccountState::AuthorityRecord(snapshot),
};
}
/// Wraps one Token Owned Escrow snapshot.
pub fn from_token_owned_escrow(
snapshot: crate::decoder::metadata::metaplex_token_metadata::TokenOwnedEscrowAccountSnapshot,
provenance: CanonicalAccountProvenance,
snapshot: crate::DcMetadataMtmTokenOwnedEscrowAccountSnapshot,
provenance: DcMetadataMtmCanonicalAccountProvenance,
) -> Self {
let identity = canonical_identity(
&snapshot.account,
"TokenOwnedEscrow",
mpl_token_metadata::types::Key::TokenOwnedEscrow as u8,
CanonicalAccountLifecycle::Active,
DcMetadataMtmCanonicalAccountLifecycle::Active,
);
return Self {
identity,
provenance,
state: CanonicalMetadataAccountState::TokenOwnedEscrow(snapshot),
state: DcMetadataMtmCanonicalMetadataAccountState::TokenOwnedEscrow(snapshot),
};
}
/// Wraps one historical Reservation List snapshot as materializable historical state.
pub fn from_reservation_list(
snapshot: crate::decoder::metadata::metaplex_token_metadata::ReservationListAccountSnapshot,
provenance: CanonicalAccountProvenance,
snapshot: crate::DcMetadataMtmReservationListAccountSnapshot,
provenance: DcMetadataMtmCanonicalAccountProvenance,
) -> Self {
let (layout, discriminant) = match snapshot.kind {
crate::decoder::metadata::metaplex_token_metadata::ReservationListAccountKind::V1 => {
crate::DcMetadataMtmReservationListAccountKind::V1 => {
("ReservationListV1", mpl_token_metadata::types::Key::ReservationListV1 as u8)
},
crate::decoder::metadata::metaplex_token_metadata::ReservationListAccountKind::V2 => {
crate::DcMetadataMtmReservationListAccountKind::V2 => {
("ReservationListV2", mpl_token_metadata::types::Key::ReservationListV2 as u8)
},
};
@@ -340,12 +339,12 @@ impl CanonicalMetadataAccountSnapshot {
&snapshot.account,
layout,
discriminant,
CanonicalAccountLifecycle::Historical,
DcMetadataMtmCanonicalAccountLifecycle::Historical,
);
return Self {
identity,
provenance,
state: CanonicalMetadataAccountState::ReservationList(snapshot),
state: DcMetadataMtmCanonicalMetadataAccountState::ReservationList(snapshot),
};
}
}
@@ -354,10 +353,10 @@ impl CanonicalMetadataAccountSnapshot {
mod tests {
#[test]
fn historical_state_is_materializable_but_never_executable() {
let snapshot = crate::decoder::metadata::metaplex_token_metadata::ReservationListAccountSnapshot {
let snapshot = crate::DcMetadataMtmReservationListAccountSnapshot {
account: "reservation-account".to_string(),
bump: 1,
kind: crate::decoder::metadata::metaplex_token_metadata::ReservationListAccountKind::V1,
kind: crate::DcMetadataMtmReservationListAccountKind::V1,
master_edition: "master-edition".to_string(),
resource: "resource".to_string(),
supply_snapshot: std::option::Option::Some(7),
@@ -366,8 +365,8 @@ mod tests {
current_reservation_spots: 0,
payload_json: serde_json::json!({}),
};
let provenance = super::CanonicalAccountProvenance {
source: super::CanonicalObservationSource::Backfill,
let provenance = super::DcMetadataMtmCanonicalAccountProvenance {
source: super::DcMetadataMtmCanonicalObservationSource::Backfill,
slot: std::option::Option::Some(42),
write_version: std::option::Option::None,
signature: std::option::Option::Some("historical-signature".to_string()),
@@ -375,21 +374,31 @@ mod tests {
inner_instruction_index: std::option::Option::None,
committed: true,
};
let canonical =
super::CanonicalMetadataAccountSnapshot::from_reservation_list(snapshot, provenance);
assert_eq!(canonical.identity.lifecycle, super::CanonicalAccountLifecycle::Historical);
let canonical = super::DcMetadataMtmCanonicalMetadataAccountSnapshot::from_reservation_list(
snapshot, provenance,
);
assert_eq!(
canonical.identity.lifecycle,
super::DcMetadataMtmCanonicalAccountLifecycle::Historical
);
assert_eq!(
canonical.identity.materialization,
super::CanonicalMaterializationPolicy::HistoricalState
super::DcMetadataMtmCanonicalMaterializationPolicy::HistoricalState
);
assert_eq!(
canonical.identity.execution,
super::DcMetadataMtmCanonicalExecutionPolicy::NeverHistorical
);
assert_eq!(
canonical.provenance.source,
super::DcMetadataMtmCanonicalObservationSource::Backfill
);
assert_eq!(canonical.identity.execution, super::CanonicalExecutionPolicy::NeverHistorical);
assert_eq!(canonical.provenance.source, super::CanonicalObservationSource::Backfill);
assert!(canonical.identity.stable_id.ends_with(":reservation-account"));
}
#[test]
fn active_and_experimental_layouts_keep_distinct_policies() {
let metadata = crate::decoder::metadata::metaplex_token_metadata::MetadataAccountSnapshot {
let metadata = crate::DcMetadataMtmMetadataAccountSnapshot {
account: "metadata-account".to_string(),
bump: 1,
mint: "mint".to_string(),
@@ -402,8 +411,8 @@ mod tests {
is_mutable: true,
payload_json: serde_json::json!({}),
};
let provenance = super::CanonicalAccountProvenance {
source: super::CanonicalObservationSource::Live,
let provenance = super::DcMetadataMtmCanonicalAccountProvenance {
source: super::DcMetadataMtmCanonicalObservationSource::Live,
slot: std::option::Option::Some(1),
write_version: std::option::Option::Some(2),
signature: std::option::Option::None,
@@ -411,14 +420,21 @@ mod tests {
inner_instruction_index: std::option::Option::None,
committed: true,
};
let canonical =
super::CanonicalMetadataAccountSnapshot::from_metadata(metadata, provenance);
assert_eq!(canonical.identity.lifecycle, super::CanonicalAccountLifecycle::Active);
let canonical = super::DcMetadataMtmCanonicalMetadataAccountSnapshot::from_metadata(
metadata, provenance,
);
assert_eq!(
canonical.identity.lifecycle,
super::DcMetadataMtmCanonicalAccountLifecycle::Active
);
assert_eq!(
canonical.identity.materialization,
super::CanonicalMaterializationPolicy::ActiveState
super::DcMetadataMtmCanonicalMaterializationPolicy::ActiveState
);
assert_eq!(
canonical.identity.execution,
super::DcMetadataMtmCanonicalExecutionPolicy::CurrentCandidate
);
assert_eq!(canonical.identity.execution, super::CanonicalExecutionPolicy::CurrentCandidate);
assert_eq!(canonical.identity.discriminant, 4);
assert_eq!(canonical.identity.canonical_version, 1);
}

View File

@@ -4,254 +4,325 @@
//! Internal constants for Metaplex Token Metadata decoding.
/// Stable decoder surface code.
pub(crate) const SURFACE_CODE: &str = "metadata_metaplex_token_metadata";
pub(crate) const DC_METADATA_MTM_SURFACE_CODE: &str = "metadata_metaplex_token_metadata";
/// Maximum retained instruction payload size.
pub(crate) const MAX_INSTRUCTION_BYTES: usize = 16_384;
pub(crate) const DC_METADATA_MTM_MAX_INSTRUCTION_BYTES: usize = 16_384;
/// Maximum encoded base64 instruction payload size.
pub(crate) const MAX_BASE64_BYTES: usize = 21_852;
pub(crate) const DC_METADATA_MTM_MAX_BASE64_BYTES: usize = 21_852;
/// Maximum number of instruction accounts accepted by this decoder.
pub(crate) const MAX_INSTRUCTION_ACCOUNTS: usize = 64;
pub(crate) const DC_METADATA_MTM_MAX_INSTRUCTION_ACCOUNTS: usize = 64;
/// Number of bytes retained in malformed-wire diagnostics.
pub(crate) const DIAGNOSTIC_PREFIX_BYTES: usize = 32;
pub(crate) const DC_METADATA_MTM_DIAGNOSTIC_PREFIX_BYTES: usize = 32;
/// Stable event payload contract version.
pub(crate) const EVENT_VERSION: u32 = 1;
pub(crate) const DC_METADATA_MTM_EVENT_VERSION: u32 = 1;
/// Deprecated Create Master Edition discriminator.
pub(crate) const DEPRECATED_CREATE_MASTER_EDITION_DISCRIMINATOR: u8 = 2;
pub(crate) const DC_METADATA_MTM_DEPRECATED_CREATE_MASTER_EDITION_DISCRIMINATOR: u8 = 2;
/// Deprecated Set Reservation List discriminator.
pub(crate) const DEPRECATED_SET_RESERVATION_LIST_DISCRIMINATOR: u8 = 5;
pub(crate) const DC_METADATA_MTM_DEPRECATED_SET_RESERVATION_LIST_DISCRIMINATOR: u8 = 5;
/// Deprecated Create Reservation List discriminator.
pub(crate) const DEPRECATED_CREATE_RESERVATION_LIST_DISCRIMINATOR: u8 = 6;
pub(crate) const DC_METADATA_MTM_DEPRECATED_CREATE_RESERVATION_LIST_DISCRIMINATOR: u8 = 6;
/// Deprecated Mint Printing Tokens Via Token discriminator.
pub(crate) const DEPRECATED_MINT_PRINTING_TOKENS_VIA_TOKEN_DISCRIMINATOR: u8 = 8;
pub(crate) const DC_METADATA_MTM_DEPRECATED_MINT_PRINTING_TOKENS_VIA_TOKEN_DISCRIMINATOR: u8 = 8;
/// Deprecated Mint Printing Tokens discriminator.
pub(crate) const DEPRECATED_MINT_PRINTING_TOKENS_DISCRIMINATOR: u8 = 9;
pub(crate) const DC_METADATA_MTM_DEPRECATED_MINT_PRINTING_TOKENS_DISCRIMINATOR: u8 = 9;
/// Historical Create Master Edition discriminator.
pub(crate) const CREATE_MASTER_EDITION_DISCRIMINATOR: u8 = 10;
pub(crate) const DC_METADATA_MTM_CREATE_MASTER_EDITION_DISCRIMINATOR: u8 = 10;
/// Deprecated printing-token mint-new-edition discriminator.
pub(crate) const DEPRECATED_MINT_NEW_EDITION_VIA_PRINTING_TOKEN_DISCRIMINATOR: u8 = 3;
pub(crate) const DC_METADATA_MTM_DEPRECATED_MINT_NEW_EDITION_VIA_PRINTING_TOKEN_DISCRIMINATOR: u8 =
3;
/// Historical Create Metadata Account discriminator.
pub(crate) const CREATE_METADATA_ACCOUNT_DISCRIMINATOR: u8 = 0;
pub(crate) const DC_METADATA_MTM_CREATE_METADATA_ACCOUNT_DISCRIMINATOR: u8 = 0;
/// Historical Update Metadata Account discriminator.
pub(crate) const UPDATE_METADATA_ACCOUNT_DISCRIMINATOR: u8 = 1;
pub(crate) const DC_METADATA_MTM_UPDATE_METADATA_ACCOUNT_DISCRIMINATOR: u8 = 1;
/// Historical Create Metadata Account V2 discriminator.
pub(crate) const CREATE_METADATA_ACCOUNT_V2_DISCRIMINATOR: u8 = 16;
pub(crate) const DC_METADATA_MTM_CREATE_METADATA_ACCOUNT_V2_DISCRIMINATOR: u8 = 16;
/// Create Metadata Account V3 discriminator.
pub(crate) const CREATE_METADATA_ACCOUNT_V3_DISCRIMINATOR: u8 = 33;
pub(crate) const DC_METADATA_MTM_CREATE_METADATA_ACCOUNT_V3_DISCRIMINATOR: u8 = 33;
/// Update Metadata Account V2 discriminator.
pub(crate) const UPDATE_METADATA_ACCOUNT_V2_DISCRIMINATOR: u8 = 15;
pub(crate) const DC_METADATA_MTM_UPDATE_METADATA_ACCOUNT_V2_DISCRIMINATOR: u8 = 15;
/// Verify Collection discriminator.
pub(crate) const VERIFY_COLLECTION_DISCRIMINATOR: u8 = 18;
pub(crate) const DC_METADATA_MTM_VERIFY_COLLECTION_DISCRIMINATOR: u8 = 18;
/// Unverify Collection discriminator.
pub(crate) const UNVERIFY_COLLECTION_DISCRIMINATOR: u8 = 22;
pub(crate) const DC_METADATA_MTM_UNVERIFY_COLLECTION_DISCRIMINATOR: u8 = 22;
/// Set And Verify Collection discriminator.
pub(crate) const SET_AND_VERIFY_COLLECTION_DISCRIMINATOR: u8 = 25;
pub(crate) const DC_METADATA_MTM_SET_AND_VERIFY_COLLECTION_DISCRIMINATOR: u8 = 25;
/// Approve Collection Authority discriminator.
pub(crate) const APPROVE_COLLECTION_AUTHORITY_DISCRIMINATOR: u8 = 23;
pub(crate) const DC_METADATA_MTM_APPROVE_COLLECTION_AUTHORITY_DISCRIMINATOR: u8 = 23;
/// Revoke Collection Authority discriminator.
pub(crate) const REVOKE_COLLECTION_AUTHORITY_DISCRIMINATOR: u8 = 24;
pub(crate) const DC_METADATA_MTM_REVOKE_COLLECTION_AUTHORITY_DISCRIMINATOR: u8 = 24;
/// Verify Sized Collection Item discriminator.
pub(crate) const VERIFY_SIZED_COLLECTION_ITEM_DISCRIMINATOR: u8 = 30;
pub(crate) const DC_METADATA_MTM_VERIFY_SIZED_COLLECTION_ITEM_DISCRIMINATOR: u8 = 30;
/// Unverify Sized Collection Item discriminator.
pub(crate) const UNVERIFY_SIZED_COLLECTION_ITEM_DISCRIMINATOR: u8 = 31;
pub(crate) const DC_METADATA_MTM_UNVERIFY_SIZED_COLLECTION_ITEM_DISCRIMINATOR: u8 = 31;
/// Set And Verify Sized Collection Item discriminator.
pub(crate) const SET_AND_VERIFY_SIZED_COLLECTION_ITEM_DISCRIMINATOR: u8 = 32;
pub(crate) const DC_METADATA_MTM_SET_AND_VERIFY_SIZED_COLLECTION_ITEM_DISCRIMINATOR: u8 = 32;
/// Sign Metadata discriminator.
pub(crate) const SIGN_METADATA_DISCRIMINATOR: u8 = 7;
pub(crate) const DC_METADATA_MTM_SIGN_METADATA_DISCRIMINATOR: u8 = 7;
/// Update Primary Sale Happened Via Token discriminator.
pub(crate) const UPDATE_PRIMARY_SALE_HAPPENED_VIA_TOKEN_DISCRIMINATOR: u8 = 4;
pub(crate) const DC_METADATA_MTM_UPDATE_PRIMARY_SALE_HAPPENED_VIA_TOKEN_DISCRIMINATOR: u8 = 4;
/// Utilize discriminator.
pub(crate) const UTILIZE_DISCRIMINATOR: u8 = 19;
pub(crate) const DC_METADATA_MTM_UTILIZE_DISCRIMINATOR: u8 = 19;
/// Approve Use Authority discriminator.
pub(crate) const APPROVE_USE_AUTHORITY_DISCRIMINATOR: u8 = 20;
pub(crate) const DC_METADATA_MTM_APPROVE_USE_AUTHORITY_DISCRIMINATOR: u8 = 20;
/// Revoke Use Authority discriminator.
pub(crate) const REVOKE_USE_AUTHORITY_DISCRIMINATOR: u8 = 21;
pub(crate) const DC_METADATA_MTM_REVOKE_USE_AUTHORITY_DISCRIMINATOR: u8 = 21;
/// Puff Metadata discriminator.
pub(crate) const PUFF_METADATA_DISCRIMINATOR: u8 = 14;
pub(crate) const DC_METADATA_MTM_PUFF_METADATA_DISCRIMINATOR: u8 = 14;
/// Freeze Delegated Account discriminator.
pub(crate) const FREEZE_DELEGATED_ACCOUNT_DISCRIMINATOR: u8 = 26;
pub(crate) const DC_METADATA_MTM_FREEZE_DELEGATED_ACCOUNT_DISCRIMINATOR: u8 = 26;
/// Thaw Delegated Account discriminator.
pub(crate) const THAW_DELEGATED_ACCOUNT_DISCRIMINATOR: u8 = 27;
pub(crate) const DC_METADATA_MTM_THAW_DELEGATED_ACCOUNT_DISCRIMINATOR: u8 = 27;
/// Remove Creator Verification discriminator.
pub(crate) const REMOVE_CREATOR_VERIFICATION_DISCRIMINATOR: u8 = 28;
pub(crate) const DC_METADATA_MTM_REMOVE_CREATOR_VERIFICATION_DISCRIMINATOR: u8 = 28;
/// Set Token Standard discriminator.
pub(crate) const SET_TOKEN_STANDARD_DISCRIMINATOR: u8 = 35;
pub(crate) const DC_METADATA_MTM_SET_TOKEN_STANDARD_DISCRIMINATOR: u8 = 35;
/// Mint New Edition From Master Edition Via Token discriminator.
pub(crate) const MINT_NEW_EDITION_FROM_MASTER_EDITION_VIA_TOKEN_DISCRIMINATOR: u8 = 11;
pub(crate) const DC_METADATA_MTM_MINT_NEW_EDITION_FROM_MASTER_EDITION_VIA_TOKEN_DISCRIMINATOR: u8 =
11;
/// Mint New Edition From Master Edition Via Vault Proxy discriminator.
pub(crate) const MINT_NEW_EDITION_FROM_MASTER_EDITION_VIA_VAULT_PROXY_DISCRIMINATOR: u8 = 13;
pub(crate) const DC_METADATA_MTM_MINT_NEW_EDITION_FROM_MASTER_EDITION_VIA_VAULT_PROXY_DISCRIMINATOR: u8 = 13;
/// Convert Master Edition V1 to V2 discriminator.
pub(crate) const CONVERT_MASTER_EDITION_V1_TO_V2_DISCRIMINATOR: u8 = 12;
pub(crate) const DC_METADATA_MTM_CONVERT_MASTER_EDITION_V1_TO_V2_DISCRIMINATOR: u8 = 12;
/// Create Master Edition V3 discriminator.
pub(crate) const CREATE_MASTER_EDITION_V3_DISCRIMINATOR: u8 = 17;
pub(crate) const DC_METADATA_MTM_CREATE_MASTER_EDITION_V3_DISCRIMINATOR: u8 = 17;
/// Set Collection Size discriminator.
pub(crate) const SET_COLLECTION_SIZE_DISCRIMINATOR: u8 = 34;
pub(crate) const DC_METADATA_MTM_SET_COLLECTION_SIZE_DISCRIMINATOR: u8 = 34;
/// Bubblegum Set Collection Size discriminator.
pub(crate) const BUBBLEGUM_SET_COLLECTION_SIZE_DISCRIMINATOR: u8 = 36;
pub(crate) const DC_METADATA_MTM_BUBBLEGUM_SET_COLLECTION_SIZE_DISCRIMINATOR: u8 = 36;
/// Create Escrow Account discriminator.
pub(crate) const CREATE_ESCROW_ACCOUNT_DISCRIMINATOR: u8 = 38;
pub(crate) const DC_METADATA_MTM_CREATE_ESCROW_ACCOUNT_DISCRIMINATOR: u8 = 38;
/// Close Escrow Account discriminator.
pub(crate) const CLOSE_ESCROW_ACCOUNT_DISCRIMINATOR: u8 = 39;
pub(crate) const DC_METADATA_MTM_CLOSE_ESCROW_ACCOUNT_DISCRIMINATOR: u8 = 39;
/// Transfer Out Of Escrow discriminator.
pub(crate) const TRANSFER_OUT_OF_ESCROW_DISCRIMINATOR: u8 = 40;
pub(crate) const DC_METADATA_MTM_TRANSFER_OUT_OF_ESCROW_DISCRIMINATOR: u8 = 40;
/// Collect discriminator.
pub(crate) const COLLECT_DISCRIMINATOR: u8 = 54;
pub(crate) const DC_METADATA_MTM_COLLECT_DISCRIMINATOR: u8 = 54;
/// Historical Burn NFT discriminator.
pub(crate) const BURN_NFT_DISCRIMINATOR: u8 = 29;
pub(crate) const DC_METADATA_MTM_BURN_NFT_DISCRIMINATOR: u8 = 29;
/// Historical Burn Edition NFT discriminator.
pub(crate) const BURN_EDITION_NFT_DISCRIMINATOR: u8 = 37;
pub(crate) const DC_METADATA_MTM_BURN_EDITION_NFT_DISCRIMINATOR: u8 = 37;
/// Burn discriminator.
pub(crate) const BURN_DISCRIMINATOR: u8 = 41;
pub(crate) const DC_METADATA_MTM_BURN_DISCRIMINATOR: u8 = 41;
/// Lock discriminator.
pub(crate) const LOCK_DISCRIMINATOR: u8 = 46;
pub(crate) const DC_METADATA_MTM_LOCK_DISCRIMINATOR: u8 = 46;
/// Unlock discriminator.
pub(crate) const UNLOCK_DISCRIMINATOR: u8 = 47;
pub(crate) const DC_METADATA_MTM_UNLOCK_DISCRIMINATOR: u8 = 47;
/// Transfer discriminator.
pub(crate) const TRANSFER_DISCRIMINATOR: u8 = 49;
pub(crate) const DC_METADATA_MTM_TRANSFER_DISCRIMINATOR: u8 = 49;
/// Close Accounts discriminator.
pub(crate) const CLOSE_ACCOUNTS_DISCRIMINATOR: u8 = 57;
pub(crate) const DC_METADATA_MTM_CLOSE_ACCOUNTS_DISCRIMINATOR: u8 = 57;
/// Modern Create discriminator.
pub(crate) const CREATE_DISCRIMINATOR: u8 = 42;
pub(crate) const DC_METADATA_MTM_CREATE_DISCRIMINATOR: u8 = 42;
/// Modern Mint discriminator.
pub(crate) const MINT_DISCRIMINATOR: u8 = 43;
pub(crate) const DC_METADATA_MTM_MINT_DISCRIMINATOR: u8 = 43;
/// Modern Print discriminator.
pub(crate) const PRINT_DISCRIMINATOR: u8 = 55;
pub(crate) const DC_METADATA_MTM_PRINT_DISCRIMINATOR: u8 = 55;
/// Modern Update discriminator.
pub(crate) const UPDATE_DISCRIMINATOR: u8 = 50;
pub(crate) const DC_METADATA_MTM_UPDATE_DISCRIMINATOR: u8 = 50;
/// Modern Use discriminator.
pub(crate) const USE_DISCRIMINATOR: u8 = 51;
pub(crate) const DC_METADATA_MTM_USE_DISCRIMINATOR: u8 = 51;
/// Modern Verify discriminator.
pub(crate) const VERIFY_DISCRIMINATOR: u8 = 52;
pub(crate) const DC_METADATA_MTM_VERIFY_DISCRIMINATOR: u8 = 52;
/// Modern Unverify discriminator.
pub(crate) const UNVERIFY_DISCRIMINATOR: u8 = 53;
pub(crate) const DC_METADATA_MTM_UNVERIFY_DISCRIMINATOR: u8 = 53;
/// Migrate discriminator.
pub(crate) const MIGRATE_DISCRIMINATOR: u8 = 48;
pub(crate) const DC_METADATA_MTM_MIGRATE_DISCRIMINATOR: u8 = 48;
/// Resize discriminator.
pub(crate) const RESIZE_DISCRIMINATOR: u8 = 56;
pub(crate) const DC_METADATA_MTM_RESIZE_DISCRIMINATOR: u8 = 56;
/// Delegate discriminator.
pub(crate) const DELEGATE_DISCRIMINATOR: u8 = 44;
pub(crate) const DC_METADATA_MTM_DELEGATE_DISCRIMINATOR: u8 = 44;
/// Revoke discriminator.
pub(crate) const REVOKE_DISCRIMINATOR: u8 = 45;
pub(crate) const DC_METADATA_MTM_REVOKE_DISCRIMINATOR: u8 = 45;
/// Current pre-release instruction inventory.
pub(crate) const INSTRUCTION_ENTRIES: &[(u8, &str, bool)] = &[
(CREATE_METADATA_ACCOUNT_DISCRIMINATOR, "create_metadata_account", true),
pub(crate) const DC_METADATA_MTM_INSTRUCTION_ENTRIES: &[(u8, &str, bool)] = &[
(
DEPRECATED_CREATE_MASTER_EDITION_DISCRIMINATOR,
DC_METADATA_MTM_CREATE_METADATA_ACCOUNT_DISCRIMINATOR,
"create_metadata_account",
true,
),
(
DC_METADATA_MTM_DEPRECATED_CREATE_MASTER_EDITION_DISCRIMINATOR,
"deprecated_create_master_edition",
true,
),
(
DEPRECATED_MINT_NEW_EDITION_VIA_PRINTING_TOKEN_DISCRIMINATOR,
DC_METADATA_MTM_DEPRECATED_MINT_NEW_EDITION_VIA_PRINTING_TOKEN_DISCRIMINATOR,
"deprecated_mint_new_edition_from_master_edition_via_printing_token",
true,
),
(UPDATE_METADATA_ACCOUNT_DISCRIMINATOR, "update_metadata_account", true),
(
UPDATE_PRIMARY_SALE_HAPPENED_VIA_TOKEN_DISCRIMINATOR,
DC_METADATA_MTM_UPDATE_METADATA_ACCOUNT_DISCRIMINATOR,
"update_metadata_account",
true,
),
(
DC_METADATA_MTM_UPDATE_PRIMARY_SALE_HAPPENED_VIA_TOKEN_DISCRIMINATOR,
"update_primary_sale_happened_via_token",
false,
),
(
DEPRECATED_SET_RESERVATION_LIST_DISCRIMINATOR,
DC_METADATA_MTM_DEPRECATED_SET_RESERVATION_LIST_DISCRIMINATOR,
"deprecated_set_reservation_list",
true,
),
(
DEPRECATED_CREATE_RESERVATION_LIST_DISCRIMINATOR,
DC_METADATA_MTM_DEPRECATED_CREATE_RESERVATION_LIST_DISCRIMINATOR,
"deprecated_create_reservation_list",
true,
),
(SIGN_METADATA_DISCRIMINATOR, "sign_metadata", false),
(DC_METADATA_MTM_SIGN_METADATA_DISCRIMINATOR, "sign_metadata", false),
(
DEPRECATED_MINT_PRINTING_TOKENS_VIA_TOKEN_DISCRIMINATOR,
DC_METADATA_MTM_DEPRECATED_MINT_PRINTING_TOKENS_VIA_TOKEN_DISCRIMINATOR,
"deprecated_mint_printing_tokens_via_token",
true,
),
(
DEPRECATED_MINT_PRINTING_TOKENS_DISCRIMINATOR,
DC_METADATA_MTM_DEPRECATED_MINT_PRINTING_TOKENS_DISCRIMINATOR,
"deprecated_mint_printing_tokens",
true,
),
(CREATE_MASTER_EDITION_DISCRIMINATOR, "create_master_edition", true),
(PUFF_METADATA_DISCRIMINATOR, "puff_metadata", false),
(
MINT_NEW_EDITION_FROM_MASTER_EDITION_VIA_TOKEN_DISCRIMINATOR,
DC_METADATA_MTM_CREATE_MASTER_EDITION_DISCRIMINATOR,
"create_master_edition",
true,
),
(DC_METADATA_MTM_PUFF_METADATA_DISCRIMINATOR, "puff_metadata", false),
(
DC_METADATA_MTM_MINT_NEW_EDITION_FROM_MASTER_EDITION_VIA_TOKEN_DISCRIMINATOR,
"mint_new_edition_from_master_edition_via_token",
false,
),
(
MINT_NEW_EDITION_FROM_MASTER_EDITION_VIA_VAULT_PROXY_DISCRIMINATOR,
DC_METADATA_MTM_MINT_NEW_EDITION_FROM_MASTER_EDITION_VIA_VAULT_PROXY_DISCRIMINATOR,
"mint_new_edition_from_master_edition_via_vault_proxy",
true,
),
(
CONVERT_MASTER_EDITION_V1_TO_V2_DISCRIMINATOR,
DC_METADATA_MTM_CONVERT_MASTER_EDITION_V1_TO_V2_DISCRIMINATOR,
"convert_master_edition_v1_to_v2",
true,
),
(UPDATE_METADATA_ACCOUNT_V2_DISCRIMINATOR, "update_metadata_account_v2", false),
(CREATE_METADATA_ACCOUNT_V2_DISCRIMINATOR, "create_metadata_account_v2", true),
(CREATE_MASTER_EDITION_V3_DISCRIMINATOR, "create_master_edition_v3", false),
(CREATE_METADATA_ACCOUNT_V3_DISCRIMINATOR, "create_metadata_account_v3", false),
(VERIFY_COLLECTION_DISCRIMINATOR, "verify_collection", false),
(UNVERIFY_COLLECTION_DISCRIMINATOR, "unverify_collection", false),
(SET_AND_VERIFY_COLLECTION_DISCRIMINATOR, "set_and_verify_collection", false),
(
APPROVE_COLLECTION_AUTHORITY_DISCRIMINATOR,
DC_METADATA_MTM_UPDATE_METADATA_ACCOUNT_V2_DISCRIMINATOR,
"update_metadata_account_v2",
false,
),
(
DC_METADATA_MTM_CREATE_METADATA_ACCOUNT_V2_DISCRIMINATOR,
"create_metadata_account_v2",
true,
),
(
DC_METADATA_MTM_CREATE_MASTER_EDITION_V3_DISCRIMINATOR,
"create_master_edition_v3",
false,
),
(
DC_METADATA_MTM_CREATE_METADATA_ACCOUNT_V3_DISCRIMINATOR,
"create_metadata_account_v3",
false,
),
(DC_METADATA_MTM_VERIFY_COLLECTION_DISCRIMINATOR, "verify_collection", false),
(DC_METADATA_MTM_UNVERIFY_COLLECTION_DISCRIMINATOR, "unverify_collection", false),
(
DC_METADATA_MTM_SET_AND_VERIFY_COLLECTION_DISCRIMINATOR,
"set_and_verify_collection",
false,
),
(
DC_METADATA_MTM_APPROVE_COLLECTION_AUTHORITY_DISCRIMINATOR,
"approve_collection_authority",
false,
),
(REVOKE_COLLECTION_AUTHORITY_DISCRIMINATOR, "revoke_collection_authority", false),
(
VERIFY_SIZED_COLLECTION_ITEM_DISCRIMINATOR,
DC_METADATA_MTM_REVOKE_COLLECTION_AUTHORITY_DISCRIMINATOR,
"revoke_collection_authority",
false,
),
(
DC_METADATA_MTM_VERIFY_SIZED_COLLECTION_ITEM_DISCRIMINATOR,
"verify_sized_collection_item",
false,
),
(
UNVERIFY_SIZED_COLLECTION_ITEM_DISCRIMINATOR,
DC_METADATA_MTM_UNVERIFY_SIZED_COLLECTION_ITEM_DISCRIMINATOR,
"unverify_sized_collection_item",
false,
),
(
SET_AND_VERIFY_SIZED_COLLECTION_ITEM_DISCRIMINATOR,
DC_METADATA_MTM_SET_AND_VERIFY_SIZED_COLLECTION_ITEM_DISCRIMINATOR,
"set_and_verify_sized_collection_item",
false,
),
(UTILIZE_DISCRIMINATOR, "utilize", false),
(APPROVE_USE_AUTHORITY_DISCRIMINATOR, "approve_use_authority", false),
(REVOKE_USE_AUTHORITY_DISCRIMINATOR, "revoke_use_authority", false),
(FREEZE_DELEGATED_ACCOUNT_DISCRIMINATOR, "freeze_delegated_account", true),
(THAW_DELEGATED_ACCOUNT_DISCRIMINATOR, "thaw_delegated_account", true),
(REMOVE_CREATOR_VERIFICATION_DISCRIMINATOR, "remove_creator_verification", false),
(SET_TOKEN_STANDARD_DISCRIMINATOR, "set_token_standard", false),
(SET_COLLECTION_SIZE_DISCRIMINATOR, "set_collection_size", false),
(DC_METADATA_MTM_UTILIZE_DISCRIMINATOR, "utilize", false),
(
BUBBLEGUM_SET_COLLECTION_SIZE_DISCRIMINATOR,
DC_METADATA_MTM_APPROVE_USE_AUTHORITY_DISCRIMINATOR,
"approve_use_authority",
false,
),
(
DC_METADATA_MTM_REVOKE_USE_AUTHORITY_DISCRIMINATOR,
"revoke_use_authority",
false,
),
(
DC_METADATA_MTM_FREEZE_DELEGATED_ACCOUNT_DISCRIMINATOR,
"freeze_delegated_account",
true,
),
(
DC_METADATA_MTM_THAW_DELEGATED_ACCOUNT_DISCRIMINATOR,
"thaw_delegated_account",
true,
),
(
DC_METADATA_MTM_REMOVE_CREATOR_VERIFICATION_DISCRIMINATOR,
"remove_creator_verification",
false,
),
(DC_METADATA_MTM_SET_TOKEN_STANDARD_DISCRIMINATOR, "set_token_standard", false),
(DC_METADATA_MTM_SET_COLLECTION_SIZE_DISCRIMINATOR, "set_collection_size", false),
(
DC_METADATA_MTM_BUBBLEGUM_SET_COLLECTION_SIZE_DISCRIMINATOR,
"bubblegum_set_collection_size",
false,
),
(CREATE_ESCROW_ACCOUNT_DISCRIMINATOR, "create_escrow_account", false),
(CLOSE_ESCROW_ACCOUNT_DISCRIMINATOR, "close_escrow_account", false),
(TRANSFER_OUT_OF_ESCROW_DISCRIMINATOR, "transfer_out_of_escrow", false),
(BURN_NFT_DISCRIMINATOR, "burn_nft", true),
(BURN_EDITION_NFT_DISCRIMINATOR, "burn_edition_nft", true),
(BURN_DISCRIMINATOR, "burn", false),
(CREATE_DISCRIMINATOR, "create", false),
(MINT_DISCRIMINATOR, "mint", false),
(LOCK_DISCRIMINATOR, "lock", false),
(UNLOCK_DISCRIMINATOR, "unlock", false),
(TRANSFER_DISCRIMINATOR, "transfer", false),
(COLLECT_DISCRIMINATOR, "collect", false),
(PRINT_DISCRIMINATOR, "print", false),
(UPDATE_DISCRIMINATOR, "update", false),
(USE_DISCRIMINATOR, "use", false),
(VERIFY_DISCRIMINATOR, "verify", false),
(UNVERIFY_DISCRIMINATOR, "unverify", false),
(MIGRATE_DISCRIMINATOR, "migrate", false),
(RESIZE_DISCRIMINATOR, "resize", false),
(CLOSE_ACCOUNTS_DISCRIMINATOR, "close_accounts", false),
(DELEGATE_DISCRIMINATOR, "delegate", false),
(REVOKE_DISCRIMINATOR, "revoke", false),
(
DC_METADATA_MTM_CREATE_ESCROW_ACCOUNT_DISCRIMINATOR,
"create_escrow_account",
false,
),
(
DC_METADATA_MTM_CLOSE_ESCROW_ACCOUNT_DISCRIMINATOR,
"close_escrow_account",
false,
),
(
DC_METADATA_MTM_TRANSFER_OUT_OF_ESCROW_DISCRIMINATOR,
"transfer_out_of_escrow",
false,
),
(DC_METADATA_MTM_BURN_NFT_DISCRIMINATOR, "burn_nft", true),
(DC_METADATA_MTM_BURN_EDITION_NFT_DISCRIMINATOR, "burn_edition_nft", true),
(DC_METADATA_MTM_BURN_DISCRIMINATOR, "burn", false),
(DC_METADATA_MTM_CREATE_DISCRIMINATOR, "create", false),
(DC_METADATA_MTM_MINT_DISCRIMINATOR, "mint", false),
(DC_METADATA_MTM_LOCK_DISCRIMINATOR, "lock", false),
(DC_METADATA_MTM_UNLOCK_DISCRIMINATOR, "unlock", false),
(DC_METADATA_MTM_TRANSFER_DISCRIMINATOR, "transfer", false),
(DC_METADATA_MTM_COLLECT_DISCRIMINATOR, "collect", false),
(DC_METADATA_MTM_PRINT_DISCRIMINATOR, "print", false),
(DC_METADATA_MTM_UPDATE_DISCRIMINATOR, "update", false),
(DC_METADATA_MTM_USE_DISCRIMINATOR, "use", false),
(DC_METADATA_MTM_VERIFY_DISCRIMINATOR, "verify", false),
(DC_METADATA_MTM_UNVERIFY_DISCRIMINATOR, "unverify", false),
(DC_METADATA_MTM_MIGRATE_DISCRIMINATOR, "migrate", false),
(DC_METADATA_MTM_RESIZE_DISCRIMINATOR, "resize", false),
(DC_METADATA_MTM_CLOSE_ACCOUNTS_DISCRIMINATOR, "close_accounts", false),
(DC_METADATA_MTM_DELEGATE_DISCRIMINATOR, "delegate", false),
(DC_METADATA_MTM_REVOKE_DISCRIMINATOR, "revoke", false),
];
/// Canonical tracing target for this decoder.
pub(crate) const TRACING_TARGET: &str = "kb-lib.decoder.metadata.metaplex_token_metadata";
pub(crate) const DC_METADATA_MTM_TRACING_TARGET: &str =
"kb-lib.decoder.metadata.metaplex_token_metadata";

View File

@@ -6,7 +6,7 @@
use base64::Engine; // rust-rules: trait-import
use sha2::Digest; // rust-rules: trait-import
pub(crate) struct ParsedInstruction {
struct ParsedInstruction {
pub(crate) code: &'static str,
pub(crate) discriminator: u8,
pub(crate) parameters: serde_json::Value,
@@ -23,22 +23,24 @@ struct ResolvedAccount {
source: serde_json::Value,
}
pub(crate) fn entry_for_discriminator(
pub(crate) fn decoder_metadata_metaplex_token_metadata_entry_for_discriminator(
discriminator: u8,
) -> std::option::Option<(u8, &'static str, bool)> {
return crate::decoder::metadata::metaplex_token_metadata::INSTRUCTION_ENTRIES
return crate::DC_METADATA_MTM_INSTRUCTION_ENTRIES
.iter()
.copied()
.find(|(candidate, _, _)| return *candidate == discriminator);
}
pub(crate) fn payload_discriminator(
input: &crate::CoreInstructionReplayInput,
pub(crate) fn decoder_metadata_metaplex_token_metadata_payload_discriminator(
input: &crate::MdCoreInstructionReplayInput,
) -> std::option::Option<u8> {
return decode_payload(input).ok().and_then(|value| return value.first().copied());
}
pub(crate) fn decode(input: &crate::CoreInstructionReplayInput) -> crate::DecoderExecutionResult {
pub(crate) fn decoder_metadata_metaplex_token_metadata_decode(
input: &crate::MdCoreInstructionReplayInput,
) -> crate::DcApiDecoderExecutionResult {
let bytes = match decode_payload(input) {
std::result::Result::Ok(value) => value,
std::result::Result::Err(error) => {
@@ -59,16 +61,16 @@ pub(crate) fn decode(input: &crate::CoreInstructionReplayInput) -> crate::Decode
);
},
};
let entry = match crate::decoder::metadata::metaplex_token_metadata::entry_for_discriminator(
let entry = match crate::decoder_metadata_metaplex_token_metadata_entry_for_discriminator(
discriminator,
) {
std::option::Option::Some(value) => value,
std::option::Option::None => {
return crate::DecoderExecutionResult {
status: crate::DecoderOutcomeStatus::Unsupported,
return crate::DcApiDecoderExecutionResult {
status: crate::DcApiDecoderOutcomeStatus::Unsupported,
recognized_entry_code: std::option::Option::None,
observations: std::vec::Vec::new(),
diagnostics: std::vec![crate::DecoderDiagnostic {
diagnostics: std::vec![crate::DcApiDecoderDiagnostic {
code: "unknown_metaplex_token_metadata_discriminator".to_string(),
message: format!(
"unknown Metaplex Token Metadata discriminator {discriminator}; payloadPrefixHex={}",
@@ -121,15 +123,17 @@ pub(crate) fn decode(input: &crate::CoreInstructionReplayInput) -> crate::Decode
project_accounts(parsed.code, accounts.as_slice()),
bytes.as_slice(),
);
return crate::DecoderExecutionResult {
status: crate::DecoderOutcomeStatus::Decoded,
return crate::DcApiDecoderExecutionResult {
status: crate::DcApiDecoderOutcomeStatus::Decoded,
recognized_entry_code: std::option::Option::Some(parsed.code.to_string()),
observations: std::vec![observation],
diagnostics: std::vec::Vec::new(),
};
}
fn decode_payload(input: &crate::CoreInstructionReplayInput) -> kb_core::Result<std::vec::Vec<u8>> {
fn decode_payload(
input: &crate::MdCoreInstructionReplayInput,
) -> kb_core::Result<std::vec::Vec<u8>> {
let payload = match input.instruction_payload_json.as_ref() {
std::option::Option::Some(value) => value,
std::option::Option::None => {
@@ -146,10 +150,10 @@ fn decode_payload(input: &crate::CoreInstructionReplayInput) -> kb_core::Result<
));
},
};
if encoded.len() > crate::decoder::metadata::metaplex_token_metadata::MAX_BASE64_BYTES {
if encoded.len() > crate::DC_METADATA_MTM_MAX_BASE64_BYTES {
return std::result::Result::Err(kb_core::Error::invalid_state(format!(
"Metaplex Token Metadata base64 payload exceeds {} bytes",
crate::decoder::metadata::metaplex_token_metadata::MAX_BASE64_BYTES
crate::DC_METADATA_MTM_MAX_BASE64_BYTES
)));
}
let decoded = match base64::engine::general_purpose::STANDARD.decode(encoded.as_bytes()) {
@@ -160,21 +164,16 @@ fn decode_payload(input: &crate::CoreInstructionReplayInput) -> kb_core::Result<
)));
},
};
if decoded.len() > crate::decoder::metadata::metaplex_token_metadata::MAX_INSTRUCTION_BYTES {
if decoded.len() > crate::DC_METADATA_MTM_MAX_INSTRUCTION_BYTES {
return std::result::Result::Err(kb_core::Error::invalid_state(format!(
"Metaplex Token Metadata payload exceeds {} decoded bytes",
crate::decoder::metadata::metaplex_token_metadata::MAX_INSTRUCTION_BYTES
crate::DC_METADATA_MTM_MAX_INSTRUCTION_BYTES
)));
}
return std::result::Result::Ok(decoded);
}
fn parse_instruction(
bytes: &[u8],
) -> std::result::Result<
crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction,
std::string::String,
> {
fn parse_instruction(bytes: &[u8]) -> std::result::Result<ParsedInstruction, std::string::String> {
let discriminator = match bytes.first().copied() {
std::option::Option::Some(value) => value,
std::option::Option::None => {
@@ -182,92 +181,92 @@ fn parse_instruction(
},
};
return match discriminator {
crate::decoder::metadata::metaplex_token_metadata::DEPRECATED_CREATE_MASTER_EDITION_DISCRIMINATOR => {
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
crate::DC_METADATA_MTM_DEPRECATED_CREATE_MASTER_EDITION_DISCRIMINATOR => {
std::result::Result::Ok(ParsedInstruction {
code: "deprecated_create_master_edition",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
})
},
crate::decoder::metadata::metaplex_token_metadata::DEPRECATED_SET_RESERVATION_LIST_DISCRIMINATOR => {
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
}
crate::DC_METADATA_MTM_DEPRECATED_SET_RESERVATION_LIST_DISCRIMINATOR => {
std::result::Result::Ok(ParsedInstruction {
code: "deprecated_set_reservation_list",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
})
},
crate::decoder::metadata::metaplex_token_metadata::DEPRECATED_CREATE_RESERVATION_LIST_DISCRIMINATOR => {
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
}
crate::DC_METADATA_MTM_DEPRECATED_CREATE_RESERVATION_LIST_DISCRIMINATOR => {
std::result::Result::Ok(ParsedInstruction {
code: "deprecated_create_reservation_list",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
})
},
crate::decoder::metadata::metaplex_token_metadata::DEPRECATED_MINT_PRINTING_TOKENS_VIA_TOKEN_DISCRIMINATOR => {
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
}
crate::DC_METADATA_MTM_DEPRECATED_MINT_PRINTING_TOKENS_VIA_TOKEN_DISCRIMINATOR => {
std::result::Result::Ok(ParsedInstruction {
code: "deprecated_mint_printing_tokens_via_token",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
})
},
crate::decoder::metadata::metaplex_token_metadata::DEPRECATED_MINT_PRINTING_TOKENS_DISCRIMINATOR => {
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
}
crate::DC_METADATA_MTM_DEPRECATED_MINT_PRINTING_TOKENS_DISCRIMINATOR => {
std::result::Result::Ok(ParsedInstruction {
code: "deprecated_mint_printing_tokens",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
})
},
crate::decoder::metadata::metaplex_token_metadata::CREATE_MASTER_EDITION_DISCRIMINATOR => {
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
}
crate::DC_METADATA_MTM_CREATE_MASTER_EDITION_DISCRIMINATOR => {
std::result::Result::Ok(ParsedInstruction {
code: "create_master_edition",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
})
},
crate::decoder::metadata::metaplex_token_metadata::DEPRECATED_MINT_NEW_EDITION_VIA_PRINTING_TOKEN_DISCRIMINATOR => {
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
}
crate::DC_METADATA_MTM_DEPRECATED_MINT_NEW_EDITION_VIA_PRINTING_TOKEN_DISCRIMINATOR => {
std::result::Result::Ok(ParsedInstruction {
code: "deprecated_mint_new_edition_from_master_edition_via_printing_token",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
})
},
crate::decoder::metadata::metaplex_token_metadata::MINT_NEW_EDITION_FROM_MASTER_EDITION_VIA_TOKEN_DISCRIMINATOR
| crate::decoder::metadata::metaplex_token_metadata::MINT_NEW_EDITION_FROM_MASTER_EDITION_VIA_VAULT_PROXY_DISCRIMINATOR => {
}
crate::DC_METADATA_MTM_MINT_NEW_EDITION_FROM_MASTER_EDITION_VIA_TOKEN_DISCRIMINATOR
| crate::DC_METADATA_MTM_MINT_NEW_EDITION_FROM_MASTER_EDITION_VIA_VAULT_PROXY_DISCRIMINATOR => {
let mut remaining = &bytes[1..];
let args = match <mpl_token_metadata::types::MintNewEditionFromMasterEditionViaTokenArgs as borsh_0_10::BorshDeserialize>::deserialize(&mut remaining) {
std::result::Result::Ok(value) => value,
std::result::Result::Err(error) => return std::result::Result::Err(format!("MintNewEditionFromMasterEdition edition Borsh decode failed: {error}")),
};
let code = if discriminator
== crate::decoder::metadata::metaplex_token_metadata::MINT_NEW_EDITION_FROM_MASTER_EDITION_VIA_TOKEN_DISCRIMINATOR
== crate::DC_METADATA_MTM_MINT_NEW_EDITION_FROM_MASTER_EDITION_VIA_TOKEN_DISCRIMINATOR
{
"mint_new_edition_from_master_edition_via_token"
} else {
"mint_new_edition_from_master_edition_via_vault_proxy"
};
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
std::result::Result::Ok(ParsedInstruction {
code,
discriminator,
parameters: serde_json::json!({"edition": args.edition}),
consumed: bytes.len().saturating_sub(remaining.len()),
})
},
crate::decoder::metadata::metaplex_token_metadata::CONVERT_MASTER_EDITION_V1_TO_V2_DISCRIMINATOR => {
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
}
crate::DC_METADATA_MTM_CONVERT_MASTER_EDITION_V1_TO_V2_DISCRIMINATOR => {
std::result::Result::Ok(ParsedInstruction {
code: "convert_master_edition_v1_to_v2",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
})
},
crate::decoder::metadata::metaplex_token_metadata::CREATE_MASTER_EDITION_V3_DISCRIMINATOR => {
}
crate::DC_METADATA_MTM_CREATE_MASTER_EDITION_V3_DISCRIMINATOR => {
let mut remaining = &bytes[1..];
let max_supply =
match <std::option::Option<u64> as borsh_0_10::BorshDeserialize>::deserialize(
@@ -280,50 +279,50 @@ fn parse_instruction(
));
},
};
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
std::result::Result::Ok(ParsedInstruction {
code: "create_master_edition_v3",
discriminator,
parameters: serde_json::json!({"max_supply": max_supply}),
consumed: bytes.len().saturating_sub(remaining.len()),
})
},
crate::decoder::metadata::metaplex_token_metadata::UPDATE_PRIMARY_SALE_HAPPENED_VIA_TOKEN_DISCRIMINATOR => {
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
}
crate::DC_METADATA_MTM_UPDATE_PRIMARY_SALE_HAPPENED_VIA_TOKEN_DISCRIMINATOR => {
std::result::Result::Ok(ParsedInstruction {
code: "update_primary_sale_happened_via_token",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
})
},
crate::decoder::metadata::metaplex_token_metadata::SIGN_METADATA_DISCRIMINATOR => std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
}
crate::DC_METADATA_MTM_SIGN_METADATA_DISCRIMINATOR => std::result::Result::Ok(ParsedInstruction {
code: "sign_metadata",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
}),
crate::decoder::metadata::metaplex_token_metadata::PUFF_METADATA_DISCRIMINATOR => std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
crate::DC_METADATA_MTM_PUFF_METADATA_DISCRIMINATOR => std::result::Result::Ok(ParsedInstruction {
code: "puff_metadata",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
}),
crate::decoder::metadata::metaplex_token_metadata::REMOVE_CREATOR_VERIFICATION_DISCRIMINATOR => {
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
crate::DC_METADATA_MTM_REMOVE_CREATOR_VERIFICATION_DISCRIMINATOR => {
std::result::Result::Ok(ParsedInstruction {
code: "remove_creator_verification",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
})
},
crate::decoder::metadata::metaplex_token_metadata::SET_TOKEN_STANDARD_DISCRIMINATOR => {
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
}
crate::DC_METADATA_MTM_SET_TOKEN_STANDARD_DISCRIMINATOR => {
std::result::Result::Ok(ParsedInstruction {
code: "set_token_standard",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
})
},
crate::decoder::metadata::metaplex_token_metadata::CREATE_METADATA_ACCOUNT_DISCRIMINATOR => {
}
crate::DC_METADATA_MTM_CREATE_METADATA_ACCOUNT_DISCRIMINATOR => {
let mut remaining = &bytes[1..];
let data =
match <mpl_token_metadata::types::Data as borsh_0_10::BorshDeserialize>::deserialize(
@@ -357,14 +356,14 @@ fn parse_instruction(
));
},
};
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
std::result::Result::Ok(ParsedInstruction {
code: "create_metadata_account",
discriminator,
parameters: serde_json::json!({"data": data_json, "is_mutable": is_mutable}),
consumed: bytes.len().saturating_sub(remaining.len()),
})
},
crate::decoder::metadata::metaplex_token_metadata::UPDATE_METADATA_ACCOUNT_DISCRIMINATOR => {
}
crate::DC_METADATA_MTM_UPDATE_METADATA_ACCOUNT_DISCRIMINATOR => {
let mut remaining = &bytes[1..];
let data = match <std::option::Option<mpl_token_metadata::types::Data> as borsh_0_10::BorshDeserialize>::deserialize(&mut remaining) {
std::result::Result::Ok(value) => value,
@@ -407,14 +406,14 @@ fn parse_instruction(
},
};
let authority_json = new_update_authority.map(|value| return hex_bytes(&value));
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
std::result::Result::Ok(ParsedInstruction {
code: "update_metadata_account",
discriminator,
parameters: serde_json::json!({"data": data_json, "new_update_authority_hex": authority_json, "primary_sale_happened": primary_sale_happened}),
consumed: bytes.len().saturating_sub(remaining.len()),
})
},
crate::decoder::metadata::metaplex_token_metadata::CREATE_METADATA_ACCOUNT_V2_DISCRIMINATOR => {
}
crate::DC_METADATA_MTM_CREATE_METADATA_ACCOUNT_V2_DISCRIMINATOR => {
let mut remaining = &bytes[1..];
let data = match <mpl_token_metadata::types::DataV2 as borsh_0_10::BorshDeserialize>::deserialize(&mut remaining) {
std::result::Result::Ok(value) => value,
@@ -441,7 +440,7 @@ fn parse_instruction(
));
},
};
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
std::result::Result::Ok(ParsedInstruction {
code: "create_metadata_account_v2",
discriminator,
parameters: serde_json::json!({
@@ -450,8 +449,8 @@ fn parse_instruction(
}),
consumed: bytes.len().saturating_sub(remaining.len()),
})
},
crate::decoder::metadata::metaplex_token_metadata::CREATE_METADATA_ACCOUNT_V3_DISCRIMINATOR => {
}
crate::DC_METADATA_MTM_CREATE_METADATA_ACCOUNT_V3_DISCRIMINATOR => {
let mut remaining = &bytes[1..];
let args = match <mpl_token_metadata::instructions::CreateMetadataAccountV3InstructionArgs as borsh_0_10::BorshDeserialize>::deserialize(&mut remaining) {
std::result::Result::Ok(value) => value,
@@ -469,14 +468,14 @@ fn parse_instruction(
));
},
};
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
std::result::Result::Ok(ParsedInstruction {
code: "create_metadata_account_v3",
discriminator,
parameters,
consumed: bytes.len().saturating_sub(remaining.len()),
})
},
crate::decoder::metadata::metaplex_token_metadata::TRANSFER_DISCRIMINATOR => {
}
crate::DC_METADATA_MTM_TRANSFER_DISCRIMINATOR => {
let mut remaining = &bytes[1..];
let args = match <mpl_token_metadata::types::TransferArgs as borsh_0_10::BorshDeserialize>::deserialize(&mut remaining) {
std::result::Result::Ok(value) => value,
@@ -490,14 +489,14 @@ fn parse_instruction(
));
},
};
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
std::result::Result::Ok(ParsedInstruction {
code: "transfer",
discriminator,
parameters,
consumed: bytes.len().saturating_sub(remaining.len()),
})
},
crate::decoder::metadata::metaplex_token_metadata::LOCK_DISCRIMINATOR => {
}
crate::DC_METADATA_MTM_LOCK_DISCRIMINATOR => {
let mut remaining = &bytes[1..];
let args = match <mpl_token_metadata::types::LockArgs as borsh_0_10::BorshDeserialize>::deserialize(&mut remaining) {
std::result::Result::Ok(value) => value,
@@ -511,14 +510,14 @@ fn parse_instruction(
));
},
};
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
std::result::Result::Ok(ParsedInstruction {
code: "lock",
discriminator,
parameters,
consumed: bytes.len().saturating_sub(remaining.len()),
})
},
crate::decoder::metadata::metaplex_token_metadata::UNLOCK_DISCRIMINATOR => {
}
crate::DC_METADATA_MTM_UNLOCK_DISCRIMINATOR => {
let mut remaining = &bytes[1..];
let args = match <mpl_token_metadata::types::UnlockArgs as borsh_0_10::BorshDeserialize>::deserialize(&mut remaining) {
std::result::Result::Ok(value) => value,
@@ -532,30 +531,30 @@ fn parse_instruction(
));
},
};
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
std::result::Result::Ok(ParsedInstruction {
code: "unlock",
discriminator,
parameters,
consumed: bytes.len().saturating_sub(remaining.len()),
})
},
crate::decoder::metadata::metaplex_token_metadata::CREATE_ESCROW_ACCOUNT_DISCRIMINATOR => {
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
}
crate::DC_METADATA_MTM_CREATE_ESCROW_ACCOUNT_DISCRIMINATOR => {
std::result::Result::Ok(ParsedInstruction {
code: "create_escrow_account",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
})
},
crate::decoder::metadata::metaplex_token_metadata::CLOSE_ESCROW_ACCOUNT_DISCRIMINATOR => {
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
}
crate::DC_METADATA_MTM_CLOSE_ESCROW_ACCOUNT_DISCRIMINATOR => {
std::result::Result::Ok(ParsedInstruction {
code: "close_escrow_account",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
})
},
crate::decoder::metadata::metaplex_token_metadata::TRANSFER_OUT_OF_ESCROW_DISCRIMINATOR => {
}
crate::DC_METADATA_MTM_TRANSFER_OUT_OF_ESCROW_DISCRIMINATOR => {
let mut remaining = &bytes[1..];
let amount = match <u64 as borsh_0_10::BorshDeserialize>::deserialize(&mut remaining) {
std::result::Result::Ok(value) => value,
@@ -565,34 +564,34 @@ fn parse_instruction(
));
},
};
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
std::result::Result::Ok(ParsedInstruction {
code: "transfer_out_of_escrow",
discriminator,
parameters: serde_json::json!({"amount": amount}),
consumed: bytes.len().saturating_sub(remaining.len()),
})
},
crate::decoder::metadata::metaplex_token_metadata::COLLECT_DISCRIMINATOR => std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
}
crate::DC_METADATA_MTM_COLLECT_DISCRIMINATOR => std::result::Result::Ok(ParsedInstruction {
code: "collect",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
}),
crate::decoder::metadata::metaplex_token_metadata::BURN_NFT_DISCRIMINATOR => std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
crate::DC_METADATA_MTM_BURN_NFT_DISCRIMINATOR => std::result::Result::Ok(ParsedInstruction {
code: "burn_nft",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
}),
crate::decoder::metadata::metaplex_token_metadata::BURN_EDITION_NFT_DISCRIMINATOR => {
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
crate::DC_METADATA_MTM_BURN_EDITION_NFT_DISCRIMINATOR => {
std::result::Result::Ok(ParsedInstruction {
code: "burn_edition_nft",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
})
},
crate::decoder::metadata::metaplex_token_metadata::CREATE_DISCRIMINATOR => {
}
crate::DC_METADATA_MTM_CREATE_DISCRIMINATOR => {
let mut remaining = &bytes[1..];
let args = match <mpl_token_metadata::types::CreateArgs as borsh_0_10::BorshDeserialize>::deserialize(&mut remaining) {
std::result::Result::Ok(value) => value,
@@ -606,14 +605,14 @@ fn parse_instruction(
));
},
};
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
std::result::Result::Ok(ParsedInstruction {
code: "create",
discriminator,
parameters,
consumed: bytes.len().saturating_sub(remaining.len()),
})
},
crate::decoder::metadata::metaplex_token_metadata::MINT_DISCRIMINATOR => {
}
crate::DC_METADATA_MTM_MINT_DISCRIMINATOR => {
let mut remaining = &bytes[1..];
let args = match <mpl_token_metadata::types::MintArgs as borsh_0_10::BorshDeserialize>::deserialize(&mut remaining) {
std::result::Result::Ok(value) => value,
@@ -627,14 +626,14 @@ fn parse_instruction(
));
},
};
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
std::result::Result::Ok(ParsedInstruction {
code: "mint",
discriminator,
parameters,
consumed: bytes.len().saturating_sub(remaining.len()),
})
},
crate::decoder::metadata::metaplex_token_metadata::PRINT_DISCRIMINATOR => {
}
crate::DC_METADATA_MTM_PRINT_DISCRIMINATOR => {
let mut remaining = &bytes[1..];
let args = match <mpl_token_metadata::types::PrintArgs as borsh_0_10::BorshDeserialize>::deserialize(&mut remaining) {
std::result::Result::Ok(value) => value,
@@ -648,26 +647,26 @@ fn parse_instruction(
));
},
};
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
std::result::Result::Ok(ParsedInstruction {
code: "print",
discriminator,
parameters,
consumed: bytes.len().saturating_sub(remaining.len()),
})
},
crate::decoder::metadata::metaplex_token_metadata::MIGRATE_DISCRIMINATOR => std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
}
crate::DC_METADATA_MTM_MIGRATE_DISCRIMINATOR => std::result::Result::Ok(ParsedInstruction {
code: "migrate",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
}),
crate::decoder::metadata::metaplex_token_metadata::RESIZE_DISCRIMINATOR => std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
crate::DC_METADATA_MTM_RESIZE_DISCRIMINATOR => std::result::Result::Ok(ParsedInstruction {
code: "resize",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
}),
crate::decoder::metadata::metaplex_token_metadata::USE_DISCRIMINATOR => {
crate::DC_METADATA_MTM_USE_DISCRIMINATOR => {
let mut remaining = &bytes[1..];
let args = match <mpl_token_metadata::types::UseArgs as borsh_0_10::BorshDeserialize>::deserialize(&mut remaining) {
std::result::Result::Ok(value) => value,
@@ -681,14 +680,14 @@ fn parse_instruction(
));
},
};
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
std::result::Result::Ok(ParsedInstruction {
code: "use",
discriminator,
parameters,
consumed: bytes.len().saturating_sub(remaining.len()),
})
},
crate::decoder::metadata::metaplex_token_metadata::VERIFY_DISCRIMINATOR | crate::decoder::metadata::metaplex_token_metadata::UNVERIFY_DISCRIMINATOR => {
}
crate::DC_METADATA_MTM_VERIFY_DISCRIMINATOR | crate::DC_METADATA_MTM_UNVERIFY_DISCRIMINATOR => {
let mut remaining = &bytes[1..];
let args = match <mpl_token_metadata::types::VerificationArgs as borsh_0_10::BorshDeserialize>::deserialize(&mut remaining) {
std::result::Result::Ok(value) => value,
@@ -703,15 +702,15 @@ fn parse_instruction(
},
};
let code =
if discriminator == crate::decoder::metadata::metaplex_token_metadata::VERIFY_DISCRIMINATOR { "verify" } else { "unverify" };
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
if discriminator == crate::DC_METADATA_MTM_VERIFY_DISCRIMINATOR { "verify" } else { "unverify" };
std::result::Result::Ok(ParsedInstruction {
code,
discriminator,
parameters,
consumed: bytes.len().saturating_sub(remaining.len()),
})
},
crate::decoder::metadata::metaplex_token_metadata::UPDATE_DISCRIMINATOR => {
}
crate::DC_METADATA_MTM_UPDATE_DISCRIMINATOR => {
let mut remaining = &bytes[1..];
let args = match <mpl_token_metadata::types::UpdateArgs as borsh_0_10::BorshDeserialize>::deserialize(&mut remaining) {
std::result::Result::Ok(value) => value,
@@ -725,14 +724,14 @@ fn parse_instruction(
));
},
};
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
std::result::Result::Ok(ParsedInstruction {
code: "update",
discriminator,
parameters,
consumed: bytes.len().saturating_sub(remaining.len()),
})
},
crate::decoder::metadata::metaplex_token_metadata::BURN_DISCRIMINATOR => {
}
crate::DC_METADATA_MTM_BURN_DISCRIMINATOR => {
let mut remaining = &bytes[1..];
let args = match <mpl_token_metadata::types::BurnArgs as borsh_0_10::BorshDeserialize>::deserialize(&mut remaining) {
std::result::Result::Ok(value) => value,
@@ -746,20 +745,20 @@ fn parse_instruction(
));
},
};
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
std::result::Result::Ok(ParsedInstruction {
code: "burn",
discriminator,
parameters,
consumed: bytes.len().saturating_sub(remaining.len()),
})
},
crate::decoder::metadata::metaplex_token_metadata::CLOSE_ACCOUNTS_DISCRIMINATOR => std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
}
crate::DC_METADATA_MTM_CLOSE_ACCOUNTS_DISCRIMINATOR => std::result::Result::Ok(ParsedInstruction {
code: "close_accounts",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
}),
crate::decoder::metadata::metaplex_token_metadata::DELEGATE_DISCRIMINATOR => {
crate::DC_METADATA_MTM_DELEGATE_DISCRIMINATOR => {
let mut remaining = &bytes[1..];
let args = match <mpl_token_metadata::types::DelegateArgs as borsh_0_10::BorshDeserialize>::deserialize(&mut remaining) {
std::result::Result::Ok(value) => value,
@@ -773,14 +772,14 @@ fn parse_instruction(
));
},
};
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
std::result::Result::Ok(ParsedInstruction {
code: "delegate",
discriminator,
parameters,
consumed: bytes.len().saturating_sub(remaining.len()),
})
},
crate::decoder::metadata::metaplex_token_metadata::REVOKE_DISCRIMINATOR => {
}
crate::DC_METADATA_MTM_REVOKE_DISCRIMINATOR => {
let mut remaining = &bytes[1..];
let args = match <mpl_token_metadata::types::RevokeArgs as borsh_0_10::BorshDeserialize>::deserialize(&mut remaining) {
std::result::Result::Ok(value) => value,
@@ -794,97 +793,97 @@ fn parse_instruction(
));
},
};
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
std::result::Result::Ok(ParsedInstruction {
code: "revoke",
discriminator,
parameters,
consumed: bytes.len().saturating_sub(remaining.len()),
})
},
crate::decoder::metadata::metaplex_token_metadata::SET_COLLECTION_SIZE_DISCRIMINATOR
| crate::decoder::metadata::metaplex_token_metadata::BUBBLEGUM_SET_COLLECTION_SIZE_DISCRIMINATOR => {
}
crate::DC_METADATA_MTM_SET_COLLECTION_SIZE_DISCRIMINATOR
| crate::DC_METADATA_MTM_BUBBLEGUM_SET_COLLECTION_SIZE_DISCRIMINATOR => {
let mut remaining = &bytes[1..];
let args = match <mpl_token_metadata::types::SetCollectionSizeArgs as borsh_0_10::BorshDeserialize>::deserialize(&mut remaining) {
std::result::Result::Ok(value) => value,
std::result::Result::Err(error) => return std::result::Result::Err(format!("SetCollectionSize Borsh decode failed: {error}")),
};
let code = if discriminator == crate::decoder::metadata::metaplex_token_metadata::SET_COLLECTION_SIZE_DISCRIMINATOR {
let code = if discriminator == crate::DC_METADATA_MTM_SET_COLLECTION_SIZE_DISCRIMINATOR {
"set_collection_size"
} else {
"bubblegum_set_collection_size"
};
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
std::result::Result::Ok(ParsedInstruction {
code,
discriminator,
parameters: serde_json::json!({"size": args.size}),
consumed: bytes.len().saturating_sub(remaining.len()),
})
},
crate::decoder::metadata::metaplex_token_metadata::VERIFY_COLLECTION_DISCRIMINATOR => {
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
}
crate::DC_METADATA_MTM_VERIFY_COLLECTION_DISCRIMINATOR => {
std::result::Result::Ok(ParsedInstruction {
code: "verify_collection",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
})
},
crate::decoder::metadata::metaplex_token_metadata::UNVERIFY_COLLECTION_DISCRIMINATOR => {
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
}
crate::DC_METADATA_MTM_UNVERIFY_COLLECTION_DISCRIMINATOR => {
std::result::Result::Ok(ParsedInstruction {
code: "unverify_collection",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
})
},
crate::decoder::metadata::metaplex_token_metadata::SET_AND_VERIFY_COLLECTION_DISCRIMINATOR => {
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
}
crate::DC_METADATA_MTM_SET_AND_VERIFY_COLLECTION_DISCRIMINATOR => {
std::result::Result::Ok(ParsedInstruction {
code: "set_and_verify_collection",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
})
},
crate::decoder::metadata::metaplex_token_metadata::APPROVE_COLLECTION_AUTHORITY_DISCRIMINATOR => {
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
}
crate::DC_METADATA_MTM_APPROVE_COLLECTION_AUTHORITY_DISCRIMINATOR => {
std::result::Result::Ok(ParsedInstruction {
code: "approve_collection_authority",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
})
},
crate::decoder::metadata::metaplex_token_metadata::REVOKE_COLLECTION_AUTHORITY_DISCRIMINATOR => {
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
}
crate::DC_METADATA_MTM_REVOKE_COLLECTION_AUTHORITY_DISCRIMINATOR => {
std::result::Result::Ok(ParsedInstruction {
code: "revoke_collection_authority",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
})
},
crate::decoder::metadata::metaplex_token_metadata::VERIFY_SIZED_COLLECTION_ITEM_DISCRIMINATOR => {
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
}
crate::DC_METADATA_MTM_VERIFY_SIZED_COLLECTION_ITEM_DISCRIMINATOR => {
std::result::Result::Ok(ParsedInstruction {
code: "verify_sized_collection_item",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
})
},
crate::decoder::metadata::metaplex_token_metadata::UNVERIFY_SIZED_COLLECTION_ITEM_DISCRIMINATOR => {
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
}
crate::DC_METADATA_MTM_UNVERIFY_SIZED_COLLECTION_ITEM_DISCRIMINATOR => {
std::result::Result::Ok(ParsedInstruction {
code: "unverify_sized_collection_item",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
})
},
crate::decoder::metadata::metaplex_token_metadata::SET_AND_VERIFY_SIZED_COLLECTION_ITEM_DISCRIMINATOR => {
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
}
crate::DC_METADATA_MTM_SET_AND_VERIFY_SIZED_COLLECTION_ITEM_DISCRIMINATOR => {
std::result::Result::Ok(ParsedInstruction {
code: "set_and_verify_sized_collection_item",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
})
},
crate::decoder::metadata::metaplex_token_metadata::UTILIZE_DISCRIMINATOR => {
}
crate::DC_METADATA_MTM_UTILIZE_DISCRIMINATOR => {
let mut remaining = &bytes[1..];
let args = match <mpl_token_metadata::instructions::UtilizeInstructionArgs as borsh_0_10::BorshDeserialize>::deserialize(&mut remaining) {
std::result::Result::Ok(value) => value,
@@ -898,14 +897,14 @@ fn parse_instruction(
));
},
};
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
std::result::Result::Ok(ParsedInstruction {
code: "utilize",
discriminator,
parameters,
consumed: bytes.len().saturating_sub(remaining.len()),
})
},
crate::decoder::metadata::metaplex_token_metadata::APPROVE_USE_AUTHORITY_DISCRIMINATOR => {
}
crate::DC_METADATA_MTM_APPROVE_USE_AUTHORITY_DISCRIMINATOR => {
let mut remaining = &bytes[1..];
let args = match <mpl_token_metadata::instructions::ApproveUseAuthorityInstructionArgs as borsh_0_10::BorshDeserialize>::deserialize(&mut remaining) {
std::result::Result::Ok(value) => value,
@@ -919,38 +918,38 @@ fn parse_instruction(
));
},
};
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
std::result::Result::Ok(ParsedInstruction {
code: "approve_use_authority",
discriminator,
parameters,
consumed: bytes.len().saturating_sub(remaining.len()),
})
},
crate::decoder::metadata::metaplex_token_metadata::REVOKE_USE_AUTHORITY_DISCRIMINATOR => {
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
}
crate::DC_METADATA_MTM_REVOKE_USE_AUTHORITY_DISCRIMINATOR => {
std::result::Result::Ok(ParsedInstruction {
code: "revoke_use_authority",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
})
},
crate::decoder::metadata::metaplex_token_metadata::FREEZE_DELEGATED_ACCOUNT_DISCRIMINATOR => {
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
}
crate::DC_METADATA_MTM_FREEZE_DELEGATED_ACCOUNT_DISCRIMINATOR => {
std::result::Result::Ok(ParsedInstruction {
code: "freeze_delegated_account",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
})
},
crate::decoder::metadata::metaplex_token_metadata::THAW_DELEGATED_ACCOUNT_DISCRIMINATOR => {
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
}
crate::DC_METADATA_MTM_THAW_DELEGATED_ACCOUNT_DISCRIMINATOR => {
std::result::Result::Ok(ParsedInstruction {
code: "thaw_delegated_account",
discriminator,
parameters: serde_json::json!({}),
consumed: 1,
})
},
crate::decoder::metadata::metaplex_token_metadata::UPDATE_METADATA_ACCOUNT_V2_DISCRIMINATOR => {
}
crate::DC_METADATA_MTM_UPDATE_METADATA_ACCOUNT_V2_DISCRIMINATOR => {
let mut remaining = &bytes[1..];
let args = match <mpl_token_metadata::instructions::UpdateMetadataAccountV2InstructionArgs as borsh_0_10::BorshDeserialize>::deserialize(&mut remaining) {
std::result::Result::Ok(value) => value,
@@ -970,13 +969,13 @@ fn parse_instruction(
));
},
};
std::result::Result::Ok(crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction {
std::result::Result::Ok(ParsedInstruction {
code: "update_metadata_account_v2",
discriminator,
parameters,
consumed: bytes.len().saturating_sub(remaining.len()),
})
},
}
_ => std::result::Result::Err(format!("unsupported discriminator {discriminator}")),
};
}
@@ -1032,7 +1031,7 @@ fn validate_data_v2(
}
fn resolve_accounts(
input: &crate::CoreInstructionReplayInput,
input: &crate::MdCoreInstructionReplayInput,
) -> kb_core::Result<std::vec::Vec<ResolvedAccount>> {
let instruction_accounts = match input.instruction_accounts_json.as_array() {
std::option::Option::Some(value) => value,
@@ -1042,9 +1041,7 @@ fn resolve_accounts(
));
},
};
if instruction_accounts.len()
> crate::decoder::metadata::metaplex_token_metadata::MAX_INSTRUCTION_ACCOUNTS
{
if instruction_accounts.len() > crate::DC_METADATA_MTM_MAX_INSTRUCTION_ACCOUNTS {
return std::result::Result::Err(kb_core::Error::invalid_state(
"Metaplex Token Metadata instruction account count exceeds bound",
));
@@ -2642,43 +2639,39 @@ fn project_accounts(code: &str, accounts: &[ResolvedAccount]) -> serde_json::Val
}
fn observation(
input: &crate::CoreInstructionReplayInput,
parsed: &crate::decoder::metadata::metaplex_token_metadata::ParsedInstruction,
input: &crate::MdCoreInstructionReplayInput,
parsed: &ParsedInstruction,
accounts: serde_json::Value,
wire: &[u8],
) -> crate::DecodedObservation {
) -> crate::DcApiDecodedObservation {
let wire_hash = hash(wire);
let committed = !input.transaction_failed;
let event = crate::DecodedProtocolEvent {
signature: crate::Signature(input.signature.clone()),
slot: crate::Slot(input.slot),
instruction_path: crate::InstructionPath(input.instruction_path.clone()),
program_id: crate::ProgramId(input.program_id.clone()),
protocol_code: crate::ProtocolCode(
crate::decoder::metadata::metaplex_token_metadata::SURFACE_CODE.to_string(),
),
surface_code: crate::SurfaceCode(
crate::decoder::metadata::metaplex_token_metadata::SURFACE_CODE.to_string(),
),
event_code: crate::EventCode(format!(
let event = crate::MdDecodedProtocolEvent {
signature: crate::MdSignature(input.signature.clone()),
slot: crate::MdSlot(input.slot),
instruction_path: crate::MdInstructionPath(input.instruction_path.clone()),
program_id: crate::MdProgramId(input.program_id.clone()),
protocol_code: crate::MdProtocolCode(crate::DC_METADATA_MTM_SURFACE_CODE.to_string()),
surface_code: crate::MdSurfaceCode(crate::DC_METADATA_MTM_SURFACE_CODE.to_string()),
event_code: crate::MdEventCode(format!(
"{}.{}",
crate::decoder::metadata::metaplex_token_metadata::SURFACE_CODE,
crate::DC_METADATA_MTM_SURFACE_CODE,
parsed.code
)),
event_name: crate::EventName(parsed.code.to_string()),
event_family: crate::EventFamily::Metadata,
event_name: crate::MdEventName(parsed.code.to_string()),
event_family: crate::MdEventFamily::Metadata,
source_kind: if input.instruction_path.contains('/') {
crate::EventSourceKind::InnerInstruction
crate::MdEventSourceKind::InnerInstruction
} else {
crate::EventSourceKind::Instruction
crate::MdEventSourceKind::Instruction
},
confidence: crate::DecoderConfidence::ManualExact,
confidence: crate::MdDecoderConfidence::ManualExact,
};
return crate::DecodedObservation {
return crate::DcApiDecodedObservation {
event_key: format!("metaplex_token_metadata:{}:0", parsed.code),
event,
payload_json: serde_json::json!({
"eventVersion": crate::decoder::metadata::metaplex_token_metadata::EVENT_VERSION,
"eventVersion": crate::DC_METADATA_MTM_EVENT_VERSION,
"programId": input.program_id,
"instruction": parsed.code,
"wireDiscriminator": parsed.discriminator,
@@ -2695,9 +2688,9 @@ fn observation(
transaction_failed: input.transaction_failed,
transaction_error: input.transaction_err_json.clone(),
observation_committed: committed,
proof: crate::DecoderProof {
kind: crate::DecoderProofKind::Manual,
confidence: crate::DecoderConfidence::ManualExact,
proof: crate::DcApiDecoderProof {
kind: crate::DcApiDecoderProofKind::Manual,
confidence: crate::MdDecoderConfidence::ManualExact,
evidence: std::vec![
"mpl_token_metadata_5_1_1_generated_wire".to_string(),
format!("wire_discriminator:{}", parsed.discriminator),
@@ -2717,10 +2710,7 @@ fn hash(bytes: &[u8]) -> std::string::String {
}
fn hex_prefix(bytes: &[u8]) -> std::string::String {
let length = std::cmp::min(
bytes.len(),
crate::decoder::metadata::metaplex_token_metadata::DIAGNOSTIC_PREFIX_BYTES,
);
let length = std::cmp::min(bytes.len(), crate::DC_METADATA_MTM_DIAGNOSTIC_PREFIX_BYTES);
let mut output = std::string::String::with_capacity(length.saturating_mul(2));
for byte in &bytes[..length] {
output.push_str(format!("{byte:02x}").as_str());
@@ -2732,12 +2722,12 @@ fn failed(
entry_code: std::option::Option<&str>,
code: &str,
message: std::string::String,
) -> crate::DecoderExecutionResult {
return crate::DecoderExecutionResult {
status: crate::DecoderOutcomeStatus::Failed,
) -> crate::DcApiDecoderExecutionResult {
return crate::DcApiDecoderExecutionResult {
status: crate::DcApiDecoderOutcomeStatus::Failed,
recognized_entry_code: entry_code.map(str::to_string),
observations: std::vec::Vec::new(),
diagnostics: std::vec![crate::DecoderDiagnostic {
diagnostics: std::vec![crate::DcApiDecoderDiagnostic {
code: code.to_string(),
message,
retriable: false

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_metadata_spl_name_service`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_metadata_spl_name_service";
const LEGACY_CRATE: &str = "kb_decoder_metadata_spl_name_service";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -3,4 +3,4 @@
//! `nft` decoder family.
pub mod metaplex_bubblegum;
mod metaplex_bubblegum;

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_nft_metaplex_bubblegum`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_nft_metaplex_bubblegum";
const LEGACY_CRATE: &str = "kb_decoder_nft_metaplex_bubblegum";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -3,6 +3,6 @@
//! `orderbook` decoder family.
pub mod jupiter_limit_order;
pub mod jupiter_limit_order_v2;
pub mod openbook_v2;
mod jupiter_limit_order;
mod jupiter_limit_order_v2;
mod openbook_v2;

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_orderbook_jupiter_limit_order`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_orderbook_jupiter_limit_order";
const LEGACY_CRATE: &str = "kb_decoder_orderbook_jupiter_limit_order";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_orderbook_jupiter_limit_order_v2`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_orderbook_jupiter_limit_order_v2";
const LEGACY_CRATE: &str = "kb_decoder_orderbook_jupiter_limit_order_v2";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_orderbook_openbook_v2`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_orderbook_openbook_v2";
const LEGACY_CRATE: &str = "kb_decoder_orderbook_openbook_v2";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -3,6 +3,6 @@
//! `perpetuals` decoder family.
pub mod drift_v2;
pub mod jupiter;
pub mod zeta;
mod drift_v2;
mod jupiter;
mod zeta;

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_perpetuals_drift_v2`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_perpetuals_drift_v2";
const LEGACY_CRATE: &str = "kb_decoder_perpetuals_drift_v2";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_perpetuals_jupiter`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_perpetuals_jupiter";
const LEGACY_CRATE: &str = "kb_decoder_perpetuals_jupiter";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_perpetuals_zeta`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_perpetuals_zeta";
const LEGACY_CRATE: &str = "kb_decoder_perpetuals_zeta";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

View File

@@ -3,9 +3,9 @@
//! `router` decoder family.
pub mod dflow_aggregator_v4;
pub mod jupiter_aggregator_v4;
pub mod jupiter_aggregator_v6;
pub mod jupiter_dca;
pub mod okx_labs_v1;
pub mod okx_labs_v2;
mod dflow_aggregator_v4;
mod jupiter_aggregator_v4;
mod jupiter_aggregator_v6;
mod jupiter_dca;
mod okx_labs_v1;
mod okx_labs_v2;

View File

@@ -4,7 +4,7 @@
//! Migration boundary for legacy crate `kb_decoder_router_dflow_aggregator_v4`.
/// Legacy crate name retained for migration and compatibility tracking.
pub const LEGACY_CRATE: &str = "kb_decoder_router_dflow_aggregator_v4";
const LEGACY_CRATE: &str = "kb_decoder_router_dflow_aggregator_v4";
/// Current porting status.
pub const MIGRATION_STATUS: &str = "source-preserved-pending-port";
const MIGRATION_STATUS: &str = "source-preserved-pending-port";

Some files were not shown because too many files have changed in this diff Show More