# Metaplex Core decoder (Carbon 2.0)

> Decode Metaplex Core instructions and accounts in Rust with carbon-mpl-core-decoder 2.0.0. Program ID CoREENxT6tW1HoK8ypY1SxRMZTcVPm7R94rH4PZNhX7d.

`carbon-mpl-core-decoder` decodes the instructions and accounts of the Metaplex Core program (`CoREENxT6tW1HoK8ypY1SxRMZTcVPm7R94rH4PZNhX7d`): 42 instructions, 6 account types. It is generated with Codama from the program's IDL; see [decoders](https://carbon.sevenlabs.org/concepts/decoders.md) for how decoders plug into a pipeline.

|                  |                                                                                                           |
| ---------------- | --------------------------------------------------------------------------------------------------------- |
| Crate            | [`carbon-mpl-core-decoder`](https://crates.io/crates/carbon-mpl-core-decoder/2.0.0) 2.0.0                 |
| Install          | `cargo add carbon-mpl-core-decoder@2.0.0`                                                                 |
| Program ID       | `CoREENxT6tW1HoK8ypY1SxRMZTcVPm7R94rH4PZNhX7d` (`carbon_mpl_core_decoder::PROGRAM_ID`)                    |
| Category         | [NFTs & metadata](https://carbon.sevenlabs.org/decoders/nfts.md)                                          |
| Decoder          | `carbon_mpl_core_decoder::MplCoreDecoder`                                                                 |
| Instruction enum | `instructions::MplCoreInstruction`                                                                        |
| Account enum     | `accounts::MplCoreAccount`                                                                                |
| Features         | `serde`, `postgres`, `graphql` (none enabled by default)                                                  |
| API docs         | [docs.rs/carbon-mpl-core-decoder/2.0.0](https://docs.rs/carbon-mpl-core-decoder/2.0.0)                    |
| Source           | [decoders/mpl-core-decoder](https://github.com/sevenlabs-hq/carbon/tree/v2.0.0/decoders/mpl-core-decoder) |

Other NFT and metadata decoders: [Bubblegum](https://carbon.sevenlabs.org/decoders/bubblegum.md), [Metaplex Token Metadata](https://carbon.sevenlabs.org/decoders/mpl-token-metadata.md). To decode several in one pipeline, see [nFT and metadata decoders](https://carbon.sevenlabs.org/decoders/nfts.md).

The `serde` feature derives `Serialize`/`Deserialize` on every type, `postgres` adds tables and processors for [Postgres](https://carbon.sevenlabs.org/guides/postgres.md), and `graphql` adds a schema for the [GraphQL server](https://carbon.sevenlabs.org/guides/graphql.md).

## Usage

This program crawls recent Metaplex Core transactions from the public RPC and prints every decoded `CreateV1` instruction. Add the dependencies:

```sh
cargo add carbon-core@2.0.0 carbon-mpl-core-decoder@2.0.0 carbon-rpc-transaction-crawler-datasource@2.0.0 carbon-log-metrics@2.0.0 env_logger tokio --features tokio/full
```

`src/main.rs`:

```rust
use {
    carbon_core::{
        error::CarbonResult, instruction::InstructionProcessorInputType, pipeline::Pipeline,
        processor::Processor,
    },
    carbon_log_metrics::LogMetrics,
    carbon_mpl_core_decoder::{instructions::MplCoreInstruction, MplCoreDecoder, PROGRAM_ID},
    carbon_rpc_transaction_crawler_datasource::{ConnectionConfig, Filters, RpcTransactionCrawler},
    std::sync::Arc,
};

#[tokio::main]
async fn main() -> CarbonResult<()> {
    env_logger::init();

    // Fetches the program's recent transactions over JSON-RPC, newest first.
    let datasource = RpcTransactionCrawler::new(
        "https://api.mainnet-beta.solana.com".to_string(),
        PROGRAM_ID,
        ConnectionConfig::default(),
        Filters::new(None, None, None),
        None,
    );

    Pipeline::builder()
        .datasource(datasource)
        .metrics(Arc::new(LogMetrics::new()))
        .instruction(MplCoreDecoder, InstructionLogger)
        .build()?
        .run()
        .await
}

struct InstructionLogger;

impl Processor<InstructionProcessorInputType<'_, MplCoreInstruction>> for InstructionLogger {
    async fn process(
        &mut self,
        input: &InstructionProcessorInputType<'_, MplCoreInstruction>,
    ) -> CarbonResult<()> {
        let signature = input.metadata.transaction_metadata.signature;
        if let MplCoreInstruction::CreateV1 { data, accounts, .. } = input.decoded_instruction {
            println!("create_v1 {signature}: {data:?} asset={}", accounts.asset);
        }
        Ok(())
    }
}
```

```sh
RUST_LOG=info cargo run
```

Each `CreateV1` instruction prints one line with the transaction signature and the decoded `CreateV1` data. The public endpoint rate-limits requests, so the first lines can take a while; use your own RPC URL for anything beyond a test. See [stream with RPC](https://carbon.sevenlabs.org/guides/stream-with-rpc.md) for the crawler options.

### Decode accounts

The transaction crawler emits transactions only. To decode accounts, use a datasource that emits account updates. This program subscribes to the program's accounts with `programSubscribe` on the public WebSocket endpoint and prints every decoded `AssetV1` account as it changes. Add the datasource and the Solana RPC types it takes:

```sh
cargo add carbon-rpc-program-subscribe-datasource@2.0.0 solana-client@4.2.2
```

`src/main.rs`:

```rust
use {
    carbon_core::{
        account::AccountProcessorInputType, error::CarbonResult, pipeline::Pipeline,
        processor::Processor,
    },
    carbon_log_metrics::LogMetrics,
    carbon_mpl_core_decoder::{accounts::MplCoreAccount, MplCoreDecoder, PROGRAM_ID},
    carbon_rpc_program_subscribe_datasource::{Filters, RpcProgramSubscribe},
    solana_client::rpc_config::{RpcAccountInfoConfig, RpcProgramAccountsConfig, UiAccountEncoding},
    std::sync::Arc,
};

#[tokio::main]
async fn main() -> CarbonResult<()> {
    env_logger::init();

    // Streams every change to an account owned by the program (programSubscribe).
    let config = RpcProgramAccountsConfig {
        account_config: RpcAccountInfoConfig {
            encoding: Some(UiAccountEncoding::Base64),
            ..Default::default()
        },
        ..Default::default()
    };
    let datasource = RpcProgramSubscribe::new(
        "wss://api.mainnet-beta.solana.com".to_string(),
        Filters::new(PROGRAM_ID, Some(config)),
    );

    Pipeline::builder()
        .datasource(datasource)
        .metrics(Arc::new(LogMetrics::new()))
        .account(MplCoreDecoder, AccountLogger)
        .build()?
        .run()
        .await
}

struct AccountLogger;

impl Processor<AccountProcessorInputType<'_, MplCoreAccount>> for AccountLogger {
    async fn process(
        &mut self,
        input: &AccountProcessorInputType<'_, MplCoreAccount>,
    ) -> CarbonResult<()> {
        if let MplCoreAccount::AssetV1(asset_v1) = &input.decoded_account.data {
            println!("asset_v1 {}: {asset_v1:?}", input.metadata.pubkey);
        }
        Ok(())
    }
}
```

```sh
RUST_LOG=info cargo run
```

Each update to a `AssetV1` account prints its address and decoded fields; the program runs until you stop it. Cargo resolves `solana-client` to 4.2.2, the exact version the datasource pins, so both use the same `RpcProgramAccountsConfig` type. To load every existing account once instead of streaming changes, see [load account state](https://carbon.sevenlabs.org/guides/load-account-state.md).

## Instructions

Variants of `MplCoreInstruction`. Each is `MplCoreInstruction::<Variant> { program_id, data, accounts }`, where `data` and `accounts` are the types listed under the variant, exported from `carbon_mpl_core_decoder::instructions`. Discriminators are the leading bytes of the instruction data, in hex.

**How an instruction decodes.** The decoder returns a variant only when all of these hold; otherwise the instruction is skipped and no processor is called:

1. The instruction's program ID is `CoREENxT6tW1HoK8ypY1SxRMZTcVPm7R94rH4PZNhX7d`.
2. The data starts with the variant's discriminator, and the rest deserializes into its data type.
3. The instruction has at least as many accounts as the variant requires (the "Required accounts" count under each variant).

**Accounts.** They are matched by position, in the order listed. An account marked _optional_ is `None` only when the instruction ends before it; Anchor programs pass the program ID as a placeholder for an omitted optional account, so check for `Some(PROGRAM_ID)` too. Accounts after the listed ones are in `accounts.remaining` as `AccountMeta`s. The decoder doesn't record whether an account signed or was writable: read that from `input.raw_instruction.accounts[i].is_signer` and `.is_writable`, which follow the same order. It doesn't check signer, writable, owner or PDA constraints either; the program enforced those when the transaction executed, so a decoded instruction from a successful transaction already satisfied them.

### `AddAssetsToGroupV1`

Discriminator `23` · data `AddAssetsToGroupV1` · accounts `AddAssetsToGroupV1InstructionAccounts`.

| Field                         | Type                                                |
| ----------------------------- | --------------------------------------------------- |
| `add_assets_to_group_v1_args` | [`AddAssetsToGroupV1Args`](#addassetstogroupv1args) |

Required accounts: 4; extras go to `remaining`.

Fields of `AddAssetsToGroupV1InstructionAccounts`, in account order:

| #  | Field            | Type               |
| -- | ---------------- | ------------------ |
| 0  | `group`          | `Pubkey`           |
| 1  | `payer`          | `Pubkey`           |
| 2  | `authority`      | `Option<Pubkey>`   |
| 3  | `system_program` | `Pubkey`           |
| 4… | `remaining`      | `Vec<AccountMeta>` |

### `AddCollectionExternalPluginAdapterV1`

Discriminator `17` · data `AddCollectionExternalPluginAdapterV1` · accounts `AddCollectionExternalPluginAdapterV1InstructionAccounts`.

| Field                                            | Type                                                                                    |
| ------------------------------------------------ | --------------------------------------------------------------------------------------- |
| `add_collection_external_plugin_adapter_v1_args` | [`AddCollectionExternalPluginAdapterV1Args`](#addcollectionexternalpluginadapterv1args) |

Required accounts: 4 (5 listed); extras go to `remaining`.

Fields of `AddCollectionExternalPluginAdapterV1InstructionAccounts`, in account order:

| #  | Field            | Type               |
| -- | ---------------- | ------------------ |
| 0  | `collection`     | `Pubkey`           |
| 1  | `payer`          | `Pubkey`           |
| 2  | `authority`      | `Option<Pubkey>`   |
| 3  | `system_program` | `Pubkey`           |
| 4  | `log_wrapper`    | `Option<Pubkey>`   |
| 5… | `remaining`      | `Vec<AccountMeta>` |

### `AddCollectionPluginV1`

Discriminator `03` · data `AddCollectionPluginV1` · accounts `AddCollectionPluginV1InstructionAccounts`.

| Field                           | Type                                                      |
| ------------------------------- | --------------------------------------------------------- |
| `add_collection_plugin_v1_args` | [`AddCollectionPluginV1Args`](#addcollectionpluginv1args) |

Required accounts: 4 (5 listed); extras go to `remaining`.

Fields of `AddCollectionPluginV1InstructionAccounts`, in account order:

| #  | Field            | Type               |
| -- | ---------------- | ------------------ |
| 0  | `collection`     | `Pubkey`           |
| 1  | `payer`          | `Pubkey`           |
| 2  | `authority`      | `Option<Pubkey>`   |
| 3  | `system_program` | `Pubkey`           |
| 4  | `log_wrapper`    | `Option<Pubkey>`   |
| 5… | `remaining`      | `Vec<AccountMeta>` |

### `AddCollectionsToGroupV1`

Discriminator `21` · data `AddCollectionsToGroupV1` · accounts `AddCollectionsToGroupV1InstructionAccounts`.

| Field                              | Type                                                          |
| ---------------------------------- | ------------------------------------------------------------- |
| `add_collections_to_group_v1_args` | [`AddCollectionsToGroupV1Args`](#addcollectionstogroupv1args) |

Required accounts: 4; extras go to `remaining`.

Fields of `AddCollectionsToGroupV1InstructionAccounts`, in account order:

| #  | Field            | Type               |
| -- | ---------------- | ------------------ |
| 0  | `group`          | `Pubkey`           |
| 1  | `payer`          | `Pubkey`           |
| 2  | `authority`      | `Option<Pubkey>`   |
| 3  | `system_program` | `Pubkey`           |
| 4… | `remaining`      | `Vec<AccountMeta>` |

### `AddExternalPluginAdapterV1`

Discriminator `16` · data `AddExternalPluginAdapterV1` · accounts `AddExternalPluginAdapterV1InstructionAccounts`.

| Field                                 | Type                                                                |
| ------------------------------------- | ------------------------------------------------------------------- |
| `add_external_plugin_adapter_v1_args` | [`AddExternalPluginAdapterV1Args`](#addexternalpluginadapterv1args) |

Required accounts: 5 (6 listed); extras go to `remaining`.

Fields of `AddExternalPluginAdapterV1InstructionAccounts`, in account order:

| #  | Field            | Type               |
| -- | ---------------- | ------------------ |
| 0  | `asset`          | `Pubkey`           |
| 1  | `collection`     | `Option<Pubkey>`   |
| 2  | `payer`          | `Pubkey`           |
| 3  | `authority`      | `Option<Pubkey>`   |
| 4  | `system_program` | `Pubkey`           |
| 5  | `log_wrapper`    | `Option<Pubkey>`   |
| 6… | `remaining`      | `Vec<AccountMeta>` |

### `AddGroupsToGroupV1`

Discriminator `25` · data `AddGroupsToGroupV1` · accounts `AddGroupsToGroupV1InstructionAccounts`.

| Field                         | Type                                                |
| ----------------------------- | --------------------------------------------------- |
| `add_groups_to_group_v1_args` | [`AddGroupsToGroupV1Args`](#addgroupstogroupv1args) |

Required accounts: 4; extras go to `remaining`.

Fields of `AddGroupsToGroupV1InstructionAccounts`, in account order:

| #  | Field            | Type               |
| -- | ---------------- | ------------------ |
| 0  | `parent_group`   | `Pubkey`           |
| 1  | `payer`          | `Pubkey`           |
| 2  | `authority`      | `Option<Pubkey>`   |
| 3  | `system_program` | `Pubkey`           |
| 4… | `remaining`      | `Vec<AccountMeta>` |

### `AddPluginV1`

Discriminator `02` · data `AddPluginV1` · accounts `AddPluginV1InstructionAccounts`.

| Field                | Type                                  |
| -------------------- | ------------------------------------- |
| `add_plugin_v1_args` | [`AddPluginV1Args`](#addpluginv1args) |

Required accounts: 5 (6 listed); extras go to `remaining`.

Fields of `AddPluginV1InstructionAccounts`, in account order:

| #  | Field            | Type               |
| -- | ---------------- | ------------------ |
| 0  | `asset`          | `Pubkey`           |
| 1  | `collection`     | `Option<Pubkey>`   |
| 2  | `payer`          | `Pubkey`           |
| 3  | `authority`      | `Option<Pubkey>`   |
| 4  | `system_program` | `Pubkey`           |
| 5  | `log_wrapper`    | `Option<Pubkey>`   |
| 6… | `remaining`      | `Vec<AccountMeta>` |

### `ApproveCollectionPluginAuthorityV1`

Discriminator `09` · data `ApproveCollectionPluginAuthorityV1` · accounts `ApproveCollectionPluginAuthorityV1InstructionAccounts`.

| Field                                         | Type                                                                                |
| --------------------------------------------- | ----------------------------------------------------------------------------------- |
| `approve_collection_plugin_authority_v1_args` | [`ApproveCollectionPluginAuthorityV1Args`](#approvecollectionpluginauthorityv1args) |

Required accounts: 4 (5 listed); extras go to `remaining`.

Fields of `ApproveCollectionPluginAuthorityV1InstructionAccounts`, in account order:

| #  | Field            | Type               |
| -- | ---------------- | ------------------ |
| 0  | `collection`     | `Pubkey`           |
| 1  | `payer`          | `Pubkey`           |
| 2  | `authority`      | `Option<Pubkey>`   |
| 3  | `system_program` | `Pubkey`           |
| 4  | `log_wrapper`    | `Option<Pubkey>`   |
| 5… | `remaining`      | `Vec<AccountMeta>` |

### `ApprovePluginAuthorityV1`

Discriminator `08` · data `ApprovePluginAuthorityV1` · accounts `ApprovePluginAuthorityV1InstructionAccounts`.

| Field                              | Type                                                            |
| ---------------------------------- | --------------------------------------------------------------- |
| `approve_plugin_authority_v1_args` | [`ApprovePluginAuthorityV1Args`](#approvepluginauthorityv1args) |

Required accounts: 5 (6 listed); extras go to `remaining`.

Fields of `ApprovePluginAuthorityV1InstructionAccounts`, in account order:

| #  | Field            | Type               |
| -- | ---------------- | ------------------ |
| 0  | `asset`          | `Pubkey`           |
| 1  | `collection`     | `Option<Pubkey>`   |
| 2  | `payer`          | `Pubkey`           |
| 3  | `authority`      | `Option<Pubkey>`   |
| 4  | `system_program` | `Pubkey`           |
| 5  | `log_wrapper`    | `Option<Pubkey>`   |
| 6… | `remaining`      | `Vec<AccountMeta>` |

### `BurnCollectionV1`

Discriminator `0d` · data `BurnCollectionV1` · accounts `BurnCollectionV1InstructionAccounts`.

| Field                     | Type                                            |
| ------------------------- | ----------------------------------------------- |
| `burn_collection_v1_args` | [`BurnCollectionV1Args`](#burncollectionv1args) |

Required accounts: 2 (4 listed); extras go to `remaining`.

Fields of `BurnCollectionV1InstructionAccounts`, in account order:

| #  | Field         | Type               |
| -- | ------------- | ------------------ |
| 0  | `collection`  | `Pubkey`           |
| 1  | `payer`       | `Pubkey`           |
| 2  | `authority`   | `Option<Pubkey>`   |
| 3  | `log_wrapper` | `Option<Pubkey>`   |
| 4… | `remaining`   | `Vec<AccountMeta>` |

### `BurnV1`

Discriminator `0c` · data `BurnV1` · accounts `BurnV1InstructionAccounts`.

| Field          | Type                        |
| -------------- | --------------------------- |
| `burn_v1_args` | [`BurnV1Args`](#burnv1args) |

Required accounts: 3 (6 listed); extras go to `remaining`.

Fields of `BurnV1InstructionAccounts`, in account order:

| #  | Field            | Type               |
| -- | ---------------- | ------------------ |
| 0  | `asset`          | `Pubkey`           |
| 1  | `collection`     | `Option<Pubkey>`   |
| 2  | `payer`          | `Pubkey`           |
| 3  | `authority`      | `Option<Pubkey>`   |
| 4  | `system_program` | `Option<Pubkey>`   |
| 5  | `log_wrapper`    | `Option<Pubkey>`   |
| 6… | `remaining`      | `Vec<AccountMeta>` |

### `CloseGroupV1`

Discriminator `28` · data `CloseGroupV1` · accounts `CloseGroupV1InstructionAccounts`.

| Field                 | Type                                    |
| --------------------- | --------------------------------------- |
| `close_group_v1_args` | [`CloseGroupV1Args`](#closegroupv1args) |

Required accounts: 2 (3 listed); extras go to `remaining`.

Fields of `CloseGroupV1InstructionAccounts`, in account order:

| #  | Field       | Type               |
| -- | ----------- | ------------------ |
| 0  | `group`     | `Pubkey`           |
| 1  | `payer`     | `Pubkey`           |
| 2  | `authority` | `Option<Pubkey>`   |
| 3… | `remaining` | `Vec<AccountMeta>` |

### `Collect`

Discriminator `13` · data `Collect` · accounts `CollectInstructionAccounts`.

No data fields.

Required accounts: 2; extras go to `remaining`.

Fields of `CollectInstructionAccounts`, in account order:

| #  | Field        | Type               |
| -- | ------------ | ------------------ |
| 0  | `recipient1` | `Pubkey`           |
| 1  | `recipient2` | `Pubkey`           |
| 2… | `remaining`  | `Vec<AccountMeta>` |

### `CompressV1`

Discriminator `11` · data `CompressV1` · accounts `CompressV1InstructionAccounts`.

| Field              | Type                                |
| ------------------ | ----------------------------------- |
| `compress_v1_args` | [`CompressV1Args`](#compressv1args) |

Required accounts: 5 (6 listed); extras go to `remaining`.

Fields of `CompressV1InstructionAccounts`, in account order:

| #  | Field            | Type               |
| -- | ---------------- | ------------------ |
| 0  | `asset`          | `Pubkey`           |
| 1  | `collection`     | `Option<Pubkey>`   |
| 2  | `payer`          | `Pubkey`           |
| 3  | `authority`      | `Option<Pubkey>`   |
| 4  | `system_program` | `Pubkey`           |
| 5  | `log_wrapper`    | `Option<Pubkey>`   |
| 6… | `remaining`      | `Vec<AccountMeta>` |

### `CreateCollectionV1`

Discriminator `01` · data `CreateCollectionV1` · accounts `CreateCollectionV1InstructionAccounts`.

| Field                       | Type                                                |
| --------------------------- | --------------------------------------------------- |
| `create_collection_v1_args` | [`CreateCollectionV1Args`](#createcollectionv1args) |

Required accounts: 4; extras go to `remaining`.

Fields of `CreateCollectionV1InstructionAccounts`, in account order:

| #  | Field              | Type               |
| -- | ------------------ | ------------------ |
| 0  | `collection`       | `Pubkey`           |
| 1  | `update_authority` | `Option<Pubkey>`   |
| 2  | `payer`            | `Pubkey`           |
| 3  | `system_program`   | `Pubkey`           |
| 4… | `remaining`        | `Vec<AccountMeta>` |

### `CreateCollectionV2`

Discriminator `15` · data `CreateCollectionV2` · accounts `CreateCollectionV2InstructionAccounts`.

| Field                       | Type                                                |
| --------------------------- | --------------------------------------------------- |
| `create_collection_v2_args` | [`CreateCollectionV2Args`](#createcollectionv2args) |

Required accounts: 4; extras go to `remaining`.

Fields of `CreateCollectionV2InstructionAccounts`, in account order:

| #  | Field              | Type               |
| -- | ------------------ | ------------------ |
| 0  | `collection`       | `Pubkey`           |
| 1  | `update_authority` | `Option<Pubkey>`   |
| 2  | `payer`            | `Pubkey`           |
| 3  | `system_program`   | `Pubkey`           |
| 4… | `remaining`        | `Vec<AccountMeta>` |

### `CreateGroupV1`

Discriminator `27` · data `CreateGroupV1` · accounts `CreateGroupV1InstructionAccounts`.

| Field                  | Type                                      |
| ---------------------- | ----------------------------------------- |
| `create_group_v1_args` | [`CreateGroupV1Args`](#creategroupv1args) |

Required accounts: 4; extras go to `remaining`.

Fields of `CreateGroupV1InstructionAccounts`, in account order:

| #  | Field              | Type               |
| -- | ------------------ | ------------------ |
| 0  | `group`            | `Pubkey`           |
| 1  | `update_authority` | `Option<Pubkey>`   |
| 2  | `payer`            | `Pubkey`           |
| 3  | `system_program`   | `Pubkey`           |
| 4… | `remaining`        | `Vec<AccountMeta>` |

### `CreateV1`

Discriminator `00` · data `CreateV1` · accounts `CreateV1InstructionAccounts`.

| Field            | Type                            |
| ---------------- | ------------------------------- |
| `create_v1_args` | [`CreateV1Args`](#createv1args) |

Required accounts: 7 (8 listed); extras go to `remaining`.

Fields of `CreateV1InstructionAccounts`, in account order:

| #  | Field              | Type               |
| -- | ------------------ | ------------------ |
| 0  | `asset`            | `Pubkey`           |
| 1  | `collection`       | `Option<Pubkey>`   |
| 2  | `authority`        | `Option<Pubkey>`   |
| 3  | `payer`            | `Pubkey`           |
| 4  | `owner`            | `Option<Pubkey>`   |
| 5  | `update_authority` | `Option<Pubkey>`   |
| 6  | `system_program`   | `Pubkey`           |
| 7  | `log_wrapper`      | `Option<Pubkey>`   |
| 8… | `remaining`        | `Vec<AccountMeta>` |

### `CreateV2`

Discriminator `14` · data `CreateV2` · accounts `CreateV2InstructionAccounts`.

| Field            | Type                            |
| ---------------- | ------------------------------- |
| `create_v2_args` | [`CreateV2Args`](#createv2args) |

Required accounts: 7 (8 listed); extras go to `remaining`.

Fields of `CreateV2InstructionAccounts`, in account order:

| #  | Field              | Type               |
| -- | ------------------ | ------------------ |
| 0  | `asset`            | `Pubkey`           |
| 1  | `collection`       | `Option<Pubkey>`   |
| 2  | `authority`        | `Option<Pubkey>`   |
| 3  | `payer`            | `Pubkey`           |
| 4  | `owner`            | `Option<Pubkey>`   |
| 5  | `update_authority` | `Option<Pubkey>`   |
| 6  | `system_program`   | `Pubkey`           |
| 7  | `log_wrapper`      | `Option<Pubkey>`   |
| 8… | `remaining`        | `Vec<AccountMeta>` |

### `DecompressV1`

Discriminator `12` · data `DecompressV1` · accounts `DecompressV1InstructionAccounts`.

| Field                | Type                                    |
| -------------------- | --------------------------------------- |
| `decompress_v1_args` | [`DecompressV1Args`](#decompressv1args) |

Required accounts: 5 (6 listed); extras go to `remaining`.

Fields of `DecompressV1InstructionAccounts`, in account order:

| #  | Field            | Type               |
| -- | ---------------- | ------------------ |
| 0  | `asset`          | `Pubkey`           |
| 1  | `collection`     | `Option<Pubkey>`   |
| 2  | `payer`          | `Pubkey`           |
| 3  | `authority`      | `Option<Pubkey>`   |
| 4  | `system_program` | `Pubkey`           |
| 5  | `log_wrapper`    | `Option<Pubkey>`   |
| 6… | `remaining`      | `Vec<AccountMeta>` |

### `ExecuteV1`

Discriminator `1f` · data `ExecuteV1` · accounts `ExecuteV1InstructionAccounts`.

| Field             | Type                              |
| ----------------- | --------------------------------- |
| `execute_v1_args` | [`ExecuteV1Args`](#executev1args) |

Required accounts: 7; extras go to `remaining`.

Fields of `ExecuteV1InstructionAccounts`, in account order:

| #  | Field            | Type               |
| -- | ---------------- | ------------------ |
| 0  | `asset`          | `Pubkey`           |
| 1  | `collection`     | `Option<Pubkey>`   |
| 2  | `asset_signer`   | `Pubkey`           |
| 3  | `payer`          | `Pubkey`           |
| 4  | `authority`      | `Option<Pubkey>`   |
| 5  | `system_program` | `Pubkey`           |
| 6  | `program_id`     | `Pubkey`           |
| 7… | `remaining`      | `Vec<AccountMeta>` |

### `RemoveAssetsFromGroupV1`

Discriminator `24` · data `RemoveAssetsFromGroupV1` · accounts `RemoveAssetsFromGroupV1InstructionAccounts`.

| Field                              | Type                                                          |
| ---------------------------------- | ------------------------------------------------------------- |
| `remove_assets_from_group_v1_args` | [`RemoveAssetsFromGroupV1Args`](#removeassetsfromgroupv1args) |

Required accounts: 4; extras go to `remaining`.

Fields of `RemoveAssetsFromGroupV1InstructionAccounts`, in account order:

| #  | Field            | Type               |
| -- | ---------------- | ------------------ |
| 0  | `group`          | `Pubkey`           |
| 1  | `payer`          | `Pubkey`           |
| 2  | `authority`      | `Option<Pubkey>`   |
| 3  | `system_program` | `Pubkey`           |
| 4… | `remaining`      | `Vec<AccountMeta>` |

### `RemoveCollectionExternalPluginAdapterV1`

Discriminator `19` · data `RemoveCollectionExternalPluginAdapterV1` · accounts `RemoveCollectionExternalPluginAdapterV1InstructionAccounts`.

| Field                                               | Type                                                                                          |
| --------------------------------------------------- | --------------------------------------------------------------------------------------------- |
| `remove_collection_external_plugin_adapter_v1_args` | [`RemoveCollectionExternalPluginAdapterV1Args`](#removecollectionexternalpluginadapterv1args) |

Required accounts: 4 (5 listed); extras go to `remaining`.

Fields of `RemoveCollectionExternalPluginAdapterV1InstructionAccounts`, in account order:

| #  | Field            | Type               |
| -- | ---------------- | ------------------ |
| 0  | `collection`     | `Pubkey`           |
| 1  | `payer`          | `Pubkey`           |
| 2  | `authority`      | `Option<Pubkey>`   |
| 3  | `system_program` | `Pubkey`           |
| 4  | `log_wrapper`    | `Option<Pubkey>`   |
| 5… | `remaining`      | `Vec<AccountMeta>` |

### `RemoveCollectionPluginV1`

Discriminator `05` · data `RemoveCollectionPluginV1` · accounts `RemoveCollectionPluginV1InstructionAccounts`.

| Field                              | Type                                                            |
| ---------------------------------- | --------------------------------------------------------------- |
| `remove_collection_plugin_v1_args` | [`RemoveCollectionPluginV1Args`](#removecollectionpluginv1args) |

Required accounts: 4 (5 listed); extras go to `remaining`.

Fields of `RemoveCollectionPluginV1InstructionAccounts`, in account order:

| #  | Field            | Type               |
| -- | ---------------- | ------------------ |
| 0  | `collection`     | `Pubkey`           |
| 1  | `payer`          | `Pubkey`           |
| 2  | `authority`      | `Option<Pubkey>`   |
| 3  | `system_program` | `Pubkey`           |
| 4  | `log_wrapper`    | `Option<Pubkey>`   |
| 5… | `remaining`      | `Vec<AccountMeta>` |

### `RemoveCollectionsFromGroupV1`

Discriminator `22` · data `RemoveCollectionsFromGroupV1` · accounts `RemoveCollectionsFromGroupV1InstructionAccounts`.

| Field                                   | Type                                                                    |
| --------------------------------------- | ----------------------------------------------------------------------- |
| `remove_collections_from_group_v1_args` | [`RemoveCollectionsFromGroupV1Args`](#removecollectionsfromgroupv1args) |

Required accounts: 4; extras go to `remaining`.

Fields of `RemoveCollectionsFromGroupV1InstructionAccounts`, in account order:

| #  | Field            | Type               |
| -- | ---------------- | ------------------ |
| 0  | `group`          | `Pubkey`           |
| 1  | `payer`          | `Pubkey`           |
| 2  | `authority`      | `Option<Pubkey>`   |
| 3  | `system_program` | `Pubkey`           |
| 4… | `remaining`      | `Vec<AccountMeta>` |

### `RemoveExternalPluginAdapterV1`

Discriminator `18` · data `RemoveExternalPluginAdapterV1` · accounts `RemoveExternalPluginAdapterV1InstructionAccounts`.

| Field                                    | Type                                                                      |
| ---------------------------------------- | ------------------------------------------------------------------------- |
| `remove_external_plugin_adapter_v1_args` | [`RemoveExternalPluginAdapterV1Args`](#removeexternalpluginadapterv1args) |

Required accounts: 5 (6 listed); extras go to `remaining`.

Fields of `RemoveExternalPluginAdapterV1InstructionAccounts`, in account order:

| #  | Field            | Type               |
| -- | ---------------- | ------------------ |
| 0  | `asset`          | `Pubkey`           |
| 1  | `collection`     | `Option<Pubkey>`   |
| 2  | `payer`          | `Pubkey`           |
| 3  | `authority`      | `Option<Pubkey>`   |
| 4  | `system_program` | `Pubkey`           |
| 5  | `log_wrapper`    | `Option<Pubkey>`   |
| 6… | `remaining`      | `Vec<AccountMeta>` |

### `RemoveGroupsFromGroupV1`

Discriminator `26` · data `RemoveGroupsFromGroupV1` · accounts `RemoveGroupsFromGroupV1InstructionAccounts`.

| Field                              | Type                                                          |
| ---------------------------------- | ------------------------------------------------------------- |
| `remove_groups_from_group_v1_args` | [`RemoveGroupsFromGroupV1Args`](#removegroupsfromgroupv1args) |

Required accounts: 4; extras go to `remaining`.

Fields of `RemoveGroupsFromGroupV1InstructionAccounts`, in account order:

| #  | Field            | Type               |
| -- | ---------------- | ------------------ |
| 0  | `parent_group`   | `Pubkey`           |
| 1  | `payer`          | `Pubkey`           |
| 2  | `authority`      | `Option<Pubkey>`   |
| 3  | `system_program` | `Pubkey`           |
| 4… | `remaining`      | `Vec<AccountMeta>` |

### `RemovePluginV1`

Discriminator `04` · data `RemovePluginV1` · accounts `RemovePluginV1InstructionAccounts`.

| Field                   | Type                                        |
| ----------------------- | ------------------------------------------- |
| `remove_plugin_v1_args` | [`RemovePluginV1Args`](#removepluginv1args) |

Required accounts: 5 (6 listed); extras go to `remaining`.

Fields of `RemovePluginV1InstructionAccounts`, in account order:

| #  | Field            | Type               |
| -- | ---------------- | ------------------ |
| 0  | `asset`          | `Pubkey`           |
| 1  | `collection`     | `Option<Pubkey>`   |
| 2  | `payer`          | `Pubkey`           |
| 3  | `authority`      | `Option<Pubkey>`   |
| 4  | `system_program` | `Pubkey`           |
| 5  | `log_wrapper`    | `Option<Pubkey>`   |
| 6… | `remaining`      | `Vec<AccountMeta>` |

### `RevokeCollectionPluginAuthorityV1`

Discriminator `0b` · data `RevokeCollectionPluginAuthorityV1` · accounts `RevokeCollectionPluginAuthorityV1InstructionAccounts`.

| Field                                        | Type                                                                              |
| -------------------------------------------- | --------------------------------------------------------------------------------- |
| `revoke_collection_plugin_authority_v1_args` | [`RevokeCollectionPluginAuthorityV1Args`](#revokecollectionpluginauthorityv1args) |

Required accounts: 4 (5 listed); extras go to `remaining`.

Fields of `RevokeCollectionPluginAuthorityV1InstructionAccounts`, in account order:

| #  | Field            | Type               |
| -- | ---------------- | ------------------ |
| 0  | `collection`     | `Pubkey`           |
| 1  | `payer`          | `Pubkey`           |
| 2  | `authority`      | `Option<Pubkey>`   |
| 3  | `system_program` | `Pubkey`           |
| 4  | `log_wrapper`    | `Option<Pubkey>`   |
| 5… | `remaining`      | `Vec<AccountMeta>` |

### `RevokePluginAuthorityV1`

Discriminator `0a` · data `RevokePluginAuthorityV1` · accounts `RevokePluginAuthorityV1InstructionAccounts`.

| Field                             | Type                                                          |
| --------------------------------- | ------------------------------------------------------------- |
| `revoke_plugin_authority_v1_args` | [`RevokePluginAuthorityV1Args`](#revokepluginauthorityv1args) |

Required accounts: 5 (6 listed); extras go to `remaining`.

Fields of `RevokePluginAuthorityV1InstructionAccounts`, in account order:

| #  | Field            | Type               |
| -- | ---------------- | ------------------ |
| 0  | `asset`          | `Pubkey`           |
| 1  | `collection`     | `Option<Pubkey>`   |
| 2  | `payer`          | `Pubkey`           |
| 3  | `authority`      | `Option<Pubkey>`   |
| 4  | `system_program` | `Pubkey`           |
| 5  | `log_wrapper`    | `Option<Pubkey>`   |
| 6… | `remaining`      | `Vec<AccountMeta>` |

### `TransferV1`

Discriminator `0e` · data `TransferV1` · accounts `TransferV1InstructionAccounts`.

| Field              | Type                                |
| ------------------ | ----------------------------------- |
| `transfer_v1_args` | [`TransferV1Args`](#transferv1args) |

Required accounts: 5 (7 listed); extras go to `remaining`.

Fields of `TransferV1InstructionAccounts`, in account order:

| #  | Field            | Type               |
| -- | ---------------- | ------------------ |
| 0  | `asset`          | `Pubkey`           |
| 1  | `collection`     | `Option<Pubkey>`   |
| 2  | `payer`          | `Pubkey`           |
| 3  | `authority`      | `Option<Pubkey>`   |
| 4  | `new_owner`      | `Pubkey`           |
| 5  | `system_program` | `Option<Pubkey>`   |
| 6  | `log_wrapper`    | `Option<Pubkey>`   |
| 7… | `remaining`      | `Vec<AccountMeta>` |

### `UpdateCollectionExternalPluginAdapterV1`

Discriminator `1b` · data `UpdateCollectionExternalPluginAdapterV1` · accounts `UpdateCollectionExternalPluginAdapterV1InstructionAccounts`.

| Field                                               | Type                                                                                          |
| --------------------------------------------------- | --------------------------------------------------------------------------------------------- |
| `update_collection_external_plugin_adapter_v1_args` | [`UpdateCollectionExternalPluginAdapterV1Args`](#updatecollectionexternalpluginadapterv1args) |

Required accounts: 4 (5 listed); extras go to `remaining`.

Fields of `UpdateCollectionExternalPluginAdapterV1InstructionAccounts`, in account order:

| #  | Field            | Type               |
| -- | ---------------- | ------------------ |
| 0  | `collection`     | `Pubkey`           |
| 1  | `payer`          | `Pubkey`           |
| 2  | `authority`      | `Option<Pubkey>`   |
| 3  | `system_program` | `Pubkey`           |
| 4  | `log_wrapper`    | `Option<Pubkey>`   |
| 5… | `remaining`      | `Vec<AccountMeta>` |

### `UpdateCollectionInfoV1`

Discriminator `20` · data `UpdateCollectionInfoV1` · accounts `UpdateCollectionInfoV1InstructionAccounts`.

| Field                            | Type                                                        |
| -------------------------------- | ----------------------------------------------------------- |
| `update_collection_info_v1_args` | [`UpdateCollectionInfoV1Args`](#updatecollectioninfov1args) |

Required accounts: 2; extras go to `remaining`.

Fields of `UpdateCollectionInfoV1InstructionAccounts`, in account order:

| #  | Field              | Type               |
| -- | ------------------ | ------------------ |
| 0  | `collection`       | `Pubkey`           |
| 1  | `bubblegum_signer` | `Pubkey`           |
| 2… | `remaining`        | `Vec<AccountMeta>` |

### `UpdateCollectionPluginV1`

Discriminator `07` · data `UpdateCollectionPluginV1` · accounts `UpdateCollectionPluginV1InstructionAccounts`.

| Field                              | Type                                                            |
| ---------------------------------- | --------------------------------------------------------------- |
| `update_collection_plugin_v1_args` | [`UpdateCollectionPluginV1Args`](#updatecollectionpluginv1args) |

Required accounts: 4 (5 listed); extras go to `remaining`.

Fields of `UpdateCollectionPluginV1InstructionAccounts`, in account order:

| #  | Field            | Type               |
| -- | ---------------- | ------------------ |
| 0  | `collection`     | `Pubkey`           |
| 1  | `payer`          | `Pubkey`           |
| 2  | `authority`      | `Option<Pubkey>`   |
| 3  | `system_program` | `Pubkey`           |
| 4  | `log_wrapper`    | `Option<Pubkey>`   |
| 5… | `remaining`      | `Vec<AccountMeta>` |

### `UpdateCollectionV1`

Discriminator `10` · data `UpdateCollectionV1` · accounts `UpdateCollectionV1InstructionAccounts`.

| Field                       | Type                                                |
| --------------------------- | --------------------------------------------------- |
| `update_collection_v1_args` | [`UpdateCollectionV1Args`](#updatecollectionv1args) |

Required accounts: 5 (6 listed); extras go to `remaining`.

Fields of `UpdateCollectionV1InstructionAccounts`, in account order:

| #  | Field                  | Type               |
| -- | ---------------------- | ------------------ |
| 0  | `collection`           | `Pubkey`           |
| 1  | `payer`                | `Pubkey`           |
| 2  | `authority`            | `Option<Pubkey>`   |
| 3  | `new_update_authority` | `Option<Pubkey>`   |
| 4  | `system_program`       | `Pubkey`           |
| 5  | `log_wrapper`          | `Option<Pubkey>`   |
| 6… | `remaining`            | `Vec<AccountMeta>` |

### `UpdateExternalPluginAdapterV1`

Discriminator `1a` · data `UpdateExternalPluginAdapterV1` · accounts `UpdateExternalPluginAdapterV1InstructionAccounts`.

| Field                                    | Type                                                                      |
| ---------------------------------------- | ------------------------------------------------------------------------- |
| `update_external_plugin_adapter_v1_args` | [`UpdateExternalPluginAdapterV1Args`](#updateexternalpluginadapterv1args) |

Required accounts: 5 (6 listed); extras go to `remaining`.

Fields of `UpdateExternalPluginAdapterV1InstructionAccounts`, in account order:

| #  | Field            | Type               |
| -- | ---------------- | ------------------ |
| 0  | `asset`          | `Pubkey`           |
| 1  | `collection`     | `Option<Pubkey>`   |
| 2  | `payer`          | `Pubkey`           |
| 3  | `authority`      | `Option<Pubkey>`   |
| 4  | `system_program` | `Pubkey`           |
| 5  | `log_wrapper`    | `Option<Pubkey>`   |
| 6… | `remaining`      | `Vec<AccountMeta>` |

### `UpdateGroupV1`

Discriminator `29` · data `UpdateGroupV1` · accounts `UpdateGroupV1InstructionAccounts`.

| Field                  | Type                                      |
| ---------------------- | ----------------------------------------- |
| `update_group_v1_args` | [`UpdateGroupV1Args`](#updategroupv1args) |

Required accounts: 5; extras go to `remaining`.

Fields of `UpdateGroupV1InstructionAccounts`, in account order:

| #  | Field                  | Type               |
| -- | ---------------------- | ------------------ |
| 0  | `group`                | `Pubkey`           |
| 1  | `payer`                | `Pubkey`           |
| 2  | `authority`            | `Option<Pubkey>`   |
| 3  | `new_update_authority` | `Option<Pubkey>`   |
| 4  | `system_program`       | `Pubkey`           |
| 5… | `remaining`            | `Vec<AccountMeta>` |

### `UpdatePluginV1`

Discriminator `06` · data `UpdatePluginV1` · accounts `UpdatePluginV1InstructionAccounts`.

| Field                   | Type                                        |
| ----------------------- | ------------------------------------------- |
| `update_plugin_v1_args` | [`UpdatePluginV1Args`](#updatepluginv1args) |

Required accounts: 5 (6 listed); extras go to `remaining`.

Fields of `UpdatePluginV1InstructionAccounts`, in account order:

| #  | Field            | Type               |
| -- | ---------------- | ------------------ |
| 0  | `asset`          | `Pubkey`           |
| 1  | `collection`     | `Option<Pubkey>`   |
| 2  | `payer`          | `Pubkey`           |
| 3  | `authority`      | `Option<Pubkey>`   |
| 4  | `system_program` | `Pubkey`           |
| 5  | `log_wrapper`    | `Option<Pubkey>`   |
| 6… | `remaining`      | `Vec<AccountMeta>` |

### `UpdateV1`

Discriminator `0f` · data `UpdateV1` · accounts `UpdateV1InstructionAccounts`.

| Field            | Type                            |
| ---------------- | ------------------------------- |
| `update_v1_args` | [`UpdateV1Args`](#updatev1args) |

Required accounts: 5 (6 listed); extras go to `remaining`.

Fields of `UpdateV1InstructionAccounts`, in account order:

| #  | Field            | Type               |
| -- | ---------------- | ------------------ |
| 0  | `asset`          | `Pubkey`           |
| 1  | `collection`     | `Option<Pubkey>`   |
| 2  | `payer`          | `Pubkey`           |
| 3  | `authority`      | `Option<Pubkey>`   |
| 4  | `system_program` | `Pubkey`           |
| 5  | `log_wrapper`    | `Option<Pubkey>`   |
| 6… | `remaining`      | `Vec<AccountMeta>` |

### `UpdateV2`

Discriminator `1e` · data `UpdateV2` · accounts `UpdateV2InstructionAccounts`.

| Field            | Type                            |
| ---------------- | ------------------------------- |
| `update_v2_args` | [`UpdateV2Args`](#updatev2args) |

Required accounts: 6 (7 listed); extras go to `remaining`.

Fields of `UpdateV2InstructionAccounts`, in account order:

| #  | Field            | Type               |
| -- | ---------------- | ------------------ |
| 0  | `asset`          | `Pubkey`           |
| 1  | `collection`     | `Option<Pubkey>`   |
| 2  | `payer`          | `Pubkey`           |
| 3  | `authority`      | `Option<Pubkey>`   |
| 4  | `new_collection` | `Option<Pubkey>`   |
| 5  | `system_program` | `Pubkey`           |
| 6  | `log_wrapper`    | `Option<Pubkey>`   |
| 7… | `remaining`      | `Vec<AccountMeta>` |

### `WriteCollectionExternalPluginAdapterDataV1`

Discriminator `1d` · data `WriteCollectionExternalPluginAdapterDataV1` · accounts `WriteCollectionExternalPluginAdapterDataV1InstructionAccounts`.

| Field                                                   | Type                                                                                                |
| ------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
| `write_collection_external_plugin_adapter_data_v1_args` | [`WriteCollectionExternalPluginAdapterDataV1Args`](#writecollectionexternalpluginadapterdatav1args) |

Required accounts: 5 (6 listed); extras go to `remaining`.

Fields of `WriteCollectionExternalPluginAdapterDataV1InstructionAccounts`, in account order:

| #  | Field            | Type               |
| -- | ---------------- | ------------------ |
| 0  | `collection`     | `Pubkey`           |
| 1  | `payer`          | `Pubkey`           |
| 2  | `authority`      | `Option<Pubkey>`   |
| 3  | `buffer`         | `Option<Pubkey>`   |
| 4  | `system_program` | `Pubkey`           |
| 5  | `log_wrapper`    | `Option<Pubkey>`   |
| 6… | `remaining`      | `Vec<AccountMeta>` |

### `WriteExternalPluginAdapterDataV1`

Discriminator `1c` · data `WriteExternalPluginAdapterDataV1` · accounts `WriteExternalPluginAdapterDataV1InstructionAccounts`.

| Field                                        | Type                                                                            |
| -------------------------------------------- | ------------------------------------------------------------------------------- |
| `write_external_plugin_adapter_data_v1_args` | [`WriteExternalPluginAdapterDataV1Args`](#writeexternalpluginadapterdatav1args) |

Required accounts: 6 (7 listed); extras go to `remaining`.

Fields of `WriteExternalPluginAdapterDataV1InstructionAccounts`, in account order:

| #  | Field            | Type               |
| -- | ---------------- | ------------------ |
| 0  | `asset`          | `Pubkey`           |
| 1  | `collection`     | `Option<Pubkey>`   |
| 2  | `payer`          | `Pubkey`           |
| 3  | `authority`      | `Option<Pubkey>`   |
| 4  | `buffer`         | `Option<Pubkey>`   |
| 5  | `system_program` | `Pubkey`           |
| 6  | `log_wrapper`    | `Option<Pubkey>`   |
| 7… | `remaining`      | `Vec<AccountMeta>` |

## Accounts

Variants of `MplCoreAccount`. Each wraps a boxed struct from `carbon_mpl_core_decoder::accounts::<module>`. `decode_account` only considers accounts owned by `PROGRAM_ID` and returns the first variant that matches.

### `AssetV1`

No discriminator (matched by Borsh layout) · `accounts::asset_v1::AssetV1`.

| Field              | Type                                  |
| ------------------ | ------------------------------------- |
| `key`              | [`Key`](#key)                         |
| `owner`            | `Pubkey`                              |
| `update_authority` | [`UpdateAuthority`](#updateauthority) |
| `name`             | `String`                              |
| `uri`              | `String`                              |
| `seq`              | `Option<u64>`                         |

### `CollectionV1`

No discriminator (matched by Borsh layout) · `accounts::collection_v1::CollectionV1`.

| Field              | Type          |
| ------------------ | ------------- |
| `key`              | [`Key`](#key) |
| `update_authority` | `Pubkey`      |
| `name`             | `String`      |
| `uri`              | `String`      |
| `num_minted`       | `u32`         |
| `current_size`     | `u32`         |

### `GroupV1`

No discriminator (matched by Borsh layout) · `accounts::group_v1::GroupV1`.

| Field              | Type          |
| ------------------ | ------------- |
| `key`              | [`Key`](#key) |
| `update_authority` | `Pubkey`      |
| `name`             | `String`      |
| `uri`              | `String`      |
| `collections`      | `Vec<Pubkey>` |
| `groups`           | `Vec<Pubkey>` |
| `parent_groups`    | `Vec<Pubkey>` |
| `assets`           | `Vec<Pubkey>` |

### `HashedAssetV1`

No discriminator (matched by Borsh layout) · `accounts::hashed_asset_v1::HashedAssetV1`.

| Field  | Type          |
| ------ | ------------- |
| `key`  | [`Key`](#key) |
| `hash` | `[u8; 32]`    |

### `PluginHeaderV1`

No discriminator (matched by Borsh layout) · `accounts::plugin_header_v1::PluginHeaderV1`.

| Field                    | Type          |
| ------------------------ | ------------- |
| `key`                    | [`Key`](#key) |
| `plugin_registry_offset` | `u64`         |

### `PluginRegistryV1`

No discriminator (matched by Borsh layout) · `accounts::plugin_registry_v1::PluginRegistryV1`.

| Field               | Type                                                     |
| ------------------- | -------------------------------------------------------- |
| `key`               | [`Key`](#key)                                            |
| `registry`          | [`Vec<RegistryRecord>`](#registryrecord)                 |
| `external_registry` | [`Vec<ExternalRegistryRecord>`](#externalregistryrecord) |

## Types

Types used by the instructions, accounts and events above, exported from `carbon_mpl_core_decoder::types`.

### `AddAssetsToGroupV1Args`

Struct `types::AddAssetsToGroupV1Args`.

No fields.

### `AddBlocker`

Struct `types::AddBlocker`.

No fields.

### `AddCollectionExternalPluginAdapterV1Args`

Struct `types::AddCollectionExternalPluginAdapterV1Args`.

| Field       | Type                                                              |
| ----------- | ----------------------------------------------------------------- |
| `init_info` | [`ExternalPluginAdapterInitInfo`](#externalpluginadapterinitinfo) |

### `AddCollectionPluginV1Args`

Struct `types::AddCollectionPluginV1Args`.

| Field            | Type                              |
| ---------------- | --------------------------------- |
| `plugin`         | [`Plugin`](#plugin)               |
| `init_authority` | [`Option<Authority>`](#authority) |

### `AddCollectionsToGroupV1Args`

Struct `types::AddCollectionsToGroupV1Args`.

No fields.

### `AddExternalPluginAdapterV1Args`

Struct `types::AddExternalPluginAdapterV1Args`.

| Field       | Type                                                              |
| ----------- | ----------------------------------------------------------------- |
| `init_info` | [`ExternalPluginAdapterInitInfo`](#externalpluginadapterinitinfo) |

### `AddGroupsToGroupV1Args`

Struct `types::AddGroupsToGroupV1Args`.

| Field    | Type          |
| -------- | ------------- |
| `groups` | `Vec<Pubkey>` |

### `AddPluginV1Args`

Struct `types::AddPluginV1Args`.

| Field            | Type                              |
| ---------------- | --------------------------------- |
| `plugin`         | [`Plugin`](#plugin)               |
| `init_authority` | [`Option<Authority>`](#authority) |

### `AgentIdentity`

Struct `types::AgentIdentity`.

| Field | Type     |
| ----- | -------- |
| `uri` | `String` |

### `AgentIdentityInitInfo`

Struct `types::AgentIdentityInitInfo`.

| Field                   | Type                                                                            |
| ----------------------- | ------------------------------------------------------------------------------- |
| `uri`                   | `String`                                                                        |
| `init_plugin_authority` | [`Option<Authority>`](#authority)                                               |
| `lifecycle_checks`      | [`Vec<(HookableLifecycleEvent, ExternalCheckResult)>`](#hookablelifecycleevent) |

### `AgentIdentityUpdateInfo`

Struct `types::AgentIdentityUpdateInfo`.

| Field              | Type                                                                                    |
| ------------------ | --------------------------------------------------------------------------------------- |
| `uri`              | `Option<String>`                                                                        |
| `lifecycle_checks` | [`Option<Vec<(HookableLifecycleEvent, ExternalCheckResult)>>`](#hookablelifecycleevent) |

### `AppData`

Struct `types::AppData`.

| Field            | Type                                                          |
| ---------------- | ------------------------------------------------------------- |
| `data_authority` | [`Authority`](#authority)                                     |
| `schema`         | [`ExternalPluginAdapterSchema`](#externalpluginadapterschema) |

### `AppDataInitInfo`

Struct `types::AppDataInitInfo`.

| Field                   | Type                                                                  |
| ----------------------- | --------------------------------------------------------------------- |
| `data_authority`        | [`Authority`](#authority)                                             |
| `init_plugin_authority` | [`Option<Authority>`](#authority)                                     |
| `schema`                | [`Option<ExternalPluginAdapterSchema>`](#externalpluginadapterschema) |

### `AppDataUpdateInfo`

Struct `types::AppDataUpdateInfo`.

| Field    | Type                                                                  |
| -------- | --------------------------------------------------------------------- |
| `schema` | [`Option<ExternalPluginAdapterSchema>`](#externalpluginadapterschema) |

### `ApproveCollectionPluginAuthorityV1Args`

Struct `types::ApproveCollectionPluginAuthorityV1Args`.

| Field           | Type                        |
| --------------- | --------------------------- |
| `plugin_type`   | [`PluginType`](#plugintype) |
| `new_authority` | [`Authority`](#authority)   |

### `ApprovePluginAuthorityV1Args`

Struct `types::ApprovePluginAuthorityV1Args`.

| Field           | Type                        |
| --------------- | --------------------------- |
| `plugin_type`   | [`PluginType`](#plugintype) |
| `new_authority` | [`Authority`](#authority)   |

### `Attribute`

Struct `types::Attribute`.

| Field   | Type     |
| ------- | -------- |
| `key`   | `String` |
| `value` | `String` |

### `Attributes`

Struct `types::Attributes`.

| Field            | Type                           |
| ---------------- | ------------------------------ |
| `attribute_list` | [`Vec<Attribute>`](#attribute) |

### `Authority`

Enum `types::Authority`.

| Variant           | Fields              |
| ----------------- | ------------------- |
| `None`            |                     |
| `Owner`           |                     |
| `UpdateAuthority` |                     |
| `Address`         | `address`: `Pubkey` |

### `Autograph`

Struct `types::Autograph`.

| Field        | Type                                             |
| ------------ | ------------------------------------------------ |
| `signatures` | [`Vec<AutographSignature>`](#autographsignature) |

### `AutographSignature`

Struct `types::AutographSignature`.

| Field     | Type     |
| --------- | -------- |
| `address` | `Pubkey` |
| `message` | `String` |

### `BubblegumV2`

Struct `types::BubblegumV2`.

No fields.

### `BurnCollectionV1Args`

Struct `types::BurnCollectionV1Args`.

| Field               | Type                                            |
| ------------------- | ----------------------------------------------- |
| `compression_proof` | [`Option<CompressionProof>`](#compressionproof) |

### `BurnDelegate`

Struct `types::BurnDelegate`.

No fields.

### `BurnV1Args`

Struct `types::BurnV1Args`.

| Field               | Type                                            |
| ------------------- | ----------------------------------------------- |
| `compression_proof` | [`Option<CompressionProof>`](#compressionproof) |

### `CloseGroupV1Args`

Struct `types::CloseGroupV1Args`.

No fields.

### `CompressionProof`

Struct `types::CompressionProof`.

| Field              | Type                                                 |
| ------------------ | ---------------------------------------------------- |
| `owner`            | `Pubkey`                                             |
| `update_authority` | [`UpdateAuthority`](#updateauthority)                |
| `name`             | `String`                                             |
| `uri`              | `String`                                             |
| `seq`              | `u64`                                                |
| `plugins`          | [`Vec<HashablePluginSchema>`](#hashablepluginschema) |

### `CompressV1Args`

Struct `types::CompressV1Args`.

No fields.

### `CreateCollectionV1Args`

Struct `types::CreateCollectionV1Args`.

| Field     | Type                                                       |
| --------- | ---------------------------------------------------------- |
| `name`    | `String`                                                   |
| `uri`     | `String`                                                   |
| `plugins` | [`Option<Vec<PluginAuthorityPair>>`](#pluginauthoritypair) |

### `CreateCollectionV2Args`

Struct `types::CreateCollectionV2Args`.

| Field                      | Type                                                                           |
| -------------------------- | ------------------------------------------------------------------------------ |
| `name`                     | `String`                                                                       |
| `uri`                      | `String`                                                                       |
| `plugins`                  | [`Option<Vec<PluginAuthorityPair>>`](#pluginauthoritypair)                     |
| `external_plugin_adapters` | [`Option<Vec<ExternalPluginAdapterInitInfo>>`](#externalpluginadapterinitinfo) |

### `CreateGroupV1Args`

Struct `types::CreateGroupV1Args`.

| Field           | Type                                           |
| --------------- | ---------------------------------------------- |
| `name`          | `String`                                       |
| `uri`           | `String`                                       |
| `relationships` | [`Vec<RelationshipEntry>`](#relationshipentry) |

### `CreateV1Args`

Struct `types::CreateV1Args`.

| Field        | Type                                                       |
| ------------ | ---------------------------------------------------------- |
| `data_state` | [`DataState`](#datastate)                                  |
| `name`       | `String`                                                   |
| `uri`        | `String`                                                   |
| `plugins`    | [`Option<Vec<PluginAuthorityPair>>`](#pluginauthoritypair) |

### `CreateV2Args`

Struct `types::CreateV2Args`.

| Field                      | Type                                                                           |
| -------------------------- | ------------------------------------------------------------------------------ |
| `data_state`               | [`DataState`](#datastate)                                                      |
| `name`                     | `String`                                                                       |
| `uri`                      | `String`                                                                       |
| `plugins`                  | [`Option<Vec<PluginAuthorityPair>>`](#pluginauthoritypair)                     |
| `external_plugin_adapters` | [`Option<Vec<ExternalPluginAdapterInitInfo>>`](#externalpluginadapterinitinfo) |

### `Creator`

Struct `types::Creator`.

| Field        | Type     |
| ------------ | -------- |
| `address`    | `Pubkey` |
| `percentage` | `u8`     |

### `DataSection`

Struct `types::DataSection`.

| Field        | Type                                                          |
| ------------ | ------------------------------------------------------------- |
| `parent_key` | [`LinkedDataKey`](#linkeddatakey)                             |
| `schema`     | [`ExternalPluginAdapterSchema`](#externalpluginadapterschema) |

### `DataSectionInitInfo`

Struct `types::DataSectionInitInfo`.

| Field        | Type                                                          |
| ------------ | ------------------------------------------------------------- |
| `parent_key` | [`LinkedDataKey`](#linkeddatakey)                             |
| `schema`     | [`ExternalPluginAdapterSchema`](#externalpluginadapterschema) |

### `DataSectionUpdateInfo`

Struct `types::DataSectionUpdateInfo`.

No fields.

### `DataState`

Enum `types::DataState`.

| Variant        |
| -------------- |
| `AccountState` |
| `LedgerState`  |

### `DecompressV1Args`

Struct `types::DecompressV1Args`.

| Field               | Type                                    |
| ------------------- | --------------------------------------- |
| `compression_proof` | [`CompressionProof`](#compressionproof) |

### `Edition`

Struct `types::Edition`.

| Field    | Type  |
| -------- | ----- |
| `number` | `u32` |

### `ExecuteV1Args`

Struct `types::ExecuteV1Args`.

| Field              | Type      |
| ------------------ | --------- |
| `instruction_data` | `Vec<u8>` |

### `ExternalCheckResult`

Struct `types::ExternalCheckResult`.

| Field   | Type  |
| ------- | ----- |
| `flags` | `u32` |

### `ExternalPluginAdapter`

Enum `types::ExternalPluginAdapter`.

| Variant               | Fields                                        |
| --------------------- | --------------------------------------------- |
| `LifecycleHook`       | [`LifecycleHook`](#lifecyclehook)             |
| `Oracle`              | [`Oracle`](#oracle)                           |
| `AppData`             | [`AppData`](#appdata)                         |
| `LinkedLifecycleHook` | [`LinkedLifecycleHook`](#linkedlifecyclehook) |
| `LinkedAppData`       | [`LinkedAppData`](#linkedappdata)             |
| `DataSection`         | [`DataSection`](#datasection)                 |
| `AgentIdentity`       | [`AgentIdentity`](#agentidentity)             |

### `ExternalPluginAdapterInitInfo`

Enum `types::ExternalPluginAdapterInitInfo`.

| Variant               | Fields                                                        |
| --------------------- | ------------------------------------------------------------- |
| `LifecycleHook`       | [`LifecycleHookInitInfo`](#lifecyclehookinitinfo)             |
| `Oracle`              | [`OracleInitInfo`](#oracleinitinfo)                           |
| `AppData`             | [`AppDataInitInfo`](#appdatainitinfo)                         |
| `LinkedLifecycleHook` | [`LinkedLifecycleHookInitInfo`](#linkedlifecyclehookinitinfo) |
| `LinkedAppData`       | [`LinkedAppDataInitInfo`](#linkedappdatainitinfo)             |
| `DataSection`         | [`DataSectionInitInfo`](#datasectioninitinfo)                 |
| `AgentIdentity`       | [`AgentIdentityInitInfo`](#agentidentityinitinfo)             |

### `ExternalPluginAdapterKey`

Enum `types::ExternalPluginAdapterKey`.

| Variant               | Fields                            |
| --------------------- | --------------------------------- |
| `LifecycleHook`       | `Pubkey`                          |
| `Oracle`              | `Pubkey`                          |
| `AppData`             | [`Authority`](#authority)         |
| `LinkedLifecycleHook` | `Pubkey`                          |
| `LinkedAppData`       | [`Authority`](#authority)         |
| `DataSection`         | [`LinkedDataKey`](#linkeddatakey) |
| `AgentIdentity`       |                                   |

### `ExternalPluginAdapterSchema`

Enum `types::ExternalPluginAdapterSchema`.

| Variant   |
| --------- |
| `Binary`  |
| `Json`    |
| `MsgPack` |

### `ExternalPluginAdapterType`

Enum `types::ExternalPluginAdapterType`.

| Variant               |
| --------------------- |
| `LifecycleHook`       |
| `Oracle`              |
| `AppData`             |
| `LinkedLifecycleHook` |
| `LinkedAppData`       |
| `DataSection`         |
| `AgentIdentity`       |

### `ExternalPluginAdapterUpdateInfo`

Enum `types::ExternalPluginAdapterUpdateInfo`.

| Variant               | Fields                                                            |
| --------------------- | ----------------------------------------------------------------- |
| `LifecycleHook`       | [`LifecycleHookUpdateInfo`](#lifecyclehookupdateinfo)             |
| `Oracle`              | [`OracleUpdateInfo`](#oracleupdateinfo)                           |
| `AppData`             | [`AppDataUpdateInfo`](#appdataupdateinfo)                         |
| `LinkedLifecycleHook` | [`LinkedLifecycleHookUpdateInfo`](#linkedlifecyclehookupdateinfo) |
| `LinkedAppData`       | [`LinkedAppDataUpdateInfo`](#linkedappdataupdateinfo)             |
| `AgentIdentity`       | [`AgentIdentityUpdateInfo`](#agentidentityupdateinfo)             |

### `ExternalRegistryRecord`

Struct `types::ExternalRegistryRecord`.

| Field              | Type                                                                                    |
| ------------------ | --------------------------------------------------------------------------------------- |
| `plugin_type`      | [`ExternalPluginAdapterType`](#externalpluginadaptertype)                               |
| `authority`        | [`Authority`](#authority)                                                               |
| `lifecycle_checks` | [`Option<Vec<(HookableLifecycleEvent, ExternalCheckResult)>>`](#hookablelifecycleevent) |
| `offset`           | `u64`                                                                                   |
| `data_offset`      | `Option<u64>`                                                                           |
| `data_len`         | `Option<u64>`                                                                           |

### `ExternalValidationResult`

Enum `types::ExternalValidationResult`.

| Variant    |
| ---------- |
| `Approved` |
| `Rejected` |
| `Pass`     |

### `ExtraAccount`

Enum `types::ExtraAccount`.

| Variant                   | Fields                                                                                                           |
| ------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| `PreconfiguredProgram`    | `is_signer`: `bool`, `is_writable`: `bool`                                                                       |
| `PreconfiguredCollection` | `is_signer`: `bool`, `is_writable`: `bool`                                                                       |
| `PreconfiguredOwner`      | `is_signer`: `bool`, `is_writable`: `bool`                                                                       |
| `PreconfiguredRecipient`  | `is_signer`: `bool`, `is_writable`: `bool`                                                                       |
| `PreconfiguredAsset`      | `is_signer`: `bool`, `is_writable`: `bool`                                                                       |
| `CustomPda`               | `seeds`: [`Vec<Seed>`](#seed), `custom_program_id`: `Option<Pubkey>`, `is_signer`: `bool`, `is_writable`: `bool` |
| `Address`                 | `address`: `Pubkey`, `is_signer`: `bool`, `is_writable`: `bool`                                                  |

### `FreezeDelegate`

Struct `types::FreezeDelegate`.

| Field    | Type   |
| -------- | ------ |
| `frozen` | `bool` |

### `FreezeExecute`

Struct `types::FreezeExecute`.

| Field    | Type   |
| -------- | ------ |
| `frozen` | `bool` |

### `Groups`

Struct `types::Groups`.

| Field    | Type          |
| -------- | ------------- |
| `groups` | `Vec<Pubkey>` |

### `HashablePluginSchema`

Struct `types::HashablePluginSchema`.

| Field       | Type                      |
| ----------- | ------------------------- |
| `index`     | `u64`                     |
| `authority` | [`Authority`](#authority) |
| `plugin`    | [`Plugin`](#plugin)       |

### `HashedAssetSchema`

Struct `types::HashedAssetSchema`.

| Field           | Type            |
| --------------- | --------------- |
| `asset_hash`    | `[u8; 32]`      |
| `plugin_hashes` | `Vec<[u8; 32]>` |

### `HookableLifecycleEvent`

Enum `types::HookableLifecycleEvent`.

| Variant    |
| ---------- |
| `Create`   |
| `Transfer` |
| `Burn`     |
| `Update`   |
| `Execute`  |

### `ImmutableMetadata`

Struct `types::ImmutableMetadata`.

No fields.

### `Key`

Enum `types::Key`.

| Variant            |
| ------------------ |
| `Uninitialized`    |
| `AssetV1`          |
| `HashedAssetV1`    |
| `PluginHeaderV1`   |
| `PluginRegistryV1` |
| `CollectionV1`     |
| `GroupV1`          |

### `LifecycleHook`

Struct `types::LifecycleHook`.

| Field            | Type                                                          |
| ---------------- | ------------------------------------------------------------- |
| `hooked_program` | `Pubkey`                                                      |
| `extra_accounts` | [`Option<Vec<ExtraAccount>>`](#extraaccount)                  |
| `data_authority` | [`Option<Authority>`](#authority)                             |
| `schema`         | [`ExternalPluginAdapterSchema`](#externalpluginadapterschema) |

### `LifecycleHookInitInfo`

Struct `types::LifecycleHookInitInfo`.

| Field                   | Type                                                                            |
| ----------------------- | ------------------------------------------------------------------------------- |
| `hooked_program`        | `Pubkey`                                                                        |
| `init_plugin_authority` | [`Option<Authority>`](#authority)                                               |
| `lifecycle_checks`      | [`Vec<(HookableLifecycleEvent, ExternalCheckResult)>`](#hookablelifecycleevent) |
| `extra_accounts`        | [`Option<Vec<ExtraAccount>>`](#extraaccount)                                    |
| `data_authority`        | [`Option<Authority>`](#authority)                                               |
| `schema`                | [`Option<ExternalPluginAdapterSchema>`](#externalpluginadapterschema)           |

### `LifecycleHookUpdateInfo`

Struct `types::LifecycleHookUpdateInfo`.

| Field              | Type                                                                                    |
| ------------------ | --------------------------------------------------------------------------------------- |
| `lifecycle_checks` | [`Option<Vec<(HookableLifecycleEvent, ExternalCheckResult)>>`](#hookablelifecycleevent) |
| `extra_accounts`   | [`Option<Vec<ExtraAccount>>`](#extraaccount)                                            |
| `schema`           | [`Option<ExternalPluginAdapterSchema>`](#externalpluginadapterschema)                   |

### `LinkedAppData`

Struct `types::LinkedAppData`.

| Field            | Type                                                          |
| ---------------- | ------------------------------------------------------------- |
| `data_authority` | [`Authority`](#authority)                                     |
| `schema`         | [`ExternalPluginAdapterSchema`](#externalpluginadapterschema) |

### `LinkedAppDataInitInfo`

Struct `types::LinkedAppDataInitInfo`.

| Field                   | Type                                                                  |
| ----------------------- | --------------------------------------------------------------------- |
| `data_authority`        | [`Authority`](#authority)                                             |
| `init_plugin_authority` | [`Option<Authority>`](#authority)                                     |
| `schema`                | [`Option<ExternalPluginAdapterSchema>`](#externalpluginadapterschema) |

### `LinkedAppDataUpdateInfo`

Struct `types::LinkedAppDataUpdateInfo`.

| Field    | Type                                                                  |
| -------- | --------------------------------------------------------------------- |
| `schema` | [`Option<ExternalPluginAdapterSchema>`](#externalpluginadapterschema) |

### `LinkedDataKey`

Enum `types::LinkedDataKey`.

| Variant               | Fields                    |
| --------------------- | ------------------------- |
| `LinkedLifecycleHook` | `Pubkey`                  |
| `LinkedAppData`       | [`Authority`](#authority) |

### `LinkedLifecycleHook`

Struct `types::LinkedLifecycleHook`.

| Field            | Type                                                          |
| ---------------- | ------------------------------------------------------------- |
| `hooked_program` | `Pubkey`                                                      |
| `extra_accounts` | [`Option<Vec<ExtraAccount>>`](#extraaccount)                  |
| `data_authority` | [`Option<Authority>`](#authority)                             |
| `schema`         | [`ExternalPluginAdapterSchema`](#externalpluginadapterschema) |

### `LinkedLifecycleHookInitInfo`

Struct `types::LinkedLifecycleHookInitInfo`.

| Field                   | Type                                                                            |
| ----------------------- | ------------------------------------------------------------------------------- |
| `hooked_program`        | `Pubkey`                                                                        |
| `init_plugin_authority` | [`Option<Authority>`](#authority)                                               |
| `lifecycle_checks`      | [`Vec<(HookableLifecycleEvent, ExternalCheckResult)>`](#hookablelifecycleevent) |
| `extra_accounts`        | [`Option<Vec<ExtraAccount>>`](#extraaccount)                                    |
| `data_authority`        | [`Option<Authority>`](#authority)                                               |
| `schema`                | [`Option<ExternalPluginAdapterSchema>`](#externalpluginadapterschema)           |

### `LinkedLifecycleHookUpdateInfo`

Struct `types::LinkedLifecycleHookUpdateInfo`.

| Field              | Type                                                                                    |
| ------------------ | --------------------------------------------------------------------------------------- |
| `lifecycle_checks` | [`Option<Vec<(HookableLifecycleEvent, ExternalCheckResult)>>`](#hookablelifecycleevent) |
| `extra_accounts`   | [`Option<Vec<ExtraAccount>>`](#extraaccount)                                            |
| `schema`           | [`Option<ExternalPluginAdapterSchema>`](#externalpluginadapterschema)                   |

### `MasterEdition`

Struct `types::MasterEdition`.

| Field        | Type             |
| ------------ | ---------------- |
| `max_supply` | `Option<u32>`    |
| `name`       | `Option<String>` |
| `uri`        | `Option<String>` |

### `Oracle`

Struct `types::Oracle`.

| Field                 | Type                                                  |
| --------------------- | ----------------------------------------------------- |
| `base_address`        | `Pubkey`                                              |
| `base_address_config` | [`Option<ExtraAccount>`](#extraaccount)               |
| `results_offset`      | [`ValidationResultsOffset`](#validationresultsoffset) |

### `OracleInitInfo`

Struct `types::OracleInitInfo`.

| Field                   | Type                                                                            |
| ----------------------- | ------------------------------------------------------------------------------- |
| `base_address`          | `Pubkey`                                                                        |
| `init_plugin_authority` | [`Option<Authority>`](#authority)                                               |
| `lifecycle_checks`      | [`Vec<(HookableLifecycleEvent, ExternalCheckResult)>`](#hookablelifecycleevent) |
| `base_address_config`   | [`Option<ExtraAccount>`](#extraaccount)                                         |
| `results_offset`        | [`Option<ValidationResultsOffset>`](#validationresultsoffset)                   |

### `OracleUpdateInfo`

Struct `types::OracleUpdateInfo`.

| Field                 | Type                                                                                    |
| --------------------- | --------------------------------------------------------------------------------------- |
| `lifecycle_checks`    | [`Option<Vec<(HookableLifecycleEvent, ExternalCheckResult)>>`](#hookablelifecycleevent) |
| `base_address_config` | [`Option<ExtraAccount>`](#extraaccount)                                                 |
| `results_offset`      | [`Option<ValidationResultsOffset>`](#validationresultsoffset)                           |

### `OracleValidation`

Enum `types::OracleValidation`.

| Variant         | Fields                                                                                                                                                                                                                                                                     |
| --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Uninitialized` |                                                                                                                                                                                                                                                                            |
| `V1`            | `create`: [`ExternalValidationResult`](#externalvalidationresult), `transfer`: [`ExternalValidationResult`](#externalvalidationresult), `burn`: [`ExternalValidationResult`](#externalvalidationresult), `update`: [`ExternalValidationResult`](#externalvalidationresult) |

### `PermanentBurnDelegate`

Struct `types::PermanentBurnDelegate`.

No fields.

### `PermanentFreezeDelegate`

Struct `types::PermanentFreezeDelegate`.

| Field    | Type   |
| -------- | ------ |
| `frozen` | `bool` |

### `PermanentFreezeExecute`

Struct `types::PermanentFreezeExecute`.

| Field    | Type   |
| -------- | ------ |
| `frozen` | `bool` |

### `PermanentTransferDelegate`

Struct `types::PermanentTransferDelegate`.

No fields.

### `Plugin`

Enum `types::Plugin`.

| Variant                     | Fields                                                    |
| --------------------------- | --------------------------------------------------------- |
| `Royalties`                 | [`Royalties`](#royalties)                                 |
| `FreezeDelegate`            | [`FreezeDelegate`](#freezedelegate)                       |
| `BurnDelegate`              | [`BurnDelegate`](#burndelegate)                           |
| `TransferDelegate`          | [`TransferDelegate`](#transferdelegate)                   |
| `UpdateDelegate`            | [`UpdateDelegate`](#updatedelegate)                       |
| `PermanentFreezeDelegate`   | [`PermanentFreezeDelegate`](#permanentfreezedelegate)     |
| `Attributes`                | [`Attributes`](#attributes)                               |
| `PermanentTransferDelegate` | [`PermanentTransferDelegate`](#permanenttransferdelegate) |
| `PermanentBurnDelegate`     | [`PermanentBurnDelegate`](#permanentburndelegate)         |
| `Edition`                   | [`Edition`](#edition)                                     |
| `MasterEdition`             | [`MasterEdition`](#masteredition)                         |
| `AddBlocker`                | [`AddBlocker`](#addblocker)                               |
| `ImmutableMetadata`         | [`ImmutableMetadata`](#immutablemetadata)                 |
| `VerifiedCreators`          | [`VerifiedCreators`](#verifiedcreators)                   |
| `Autograph`                 | [`Autograph`](#autograph)                                 |
| `BubblegumV2`               | [`BubblegumV2`](#bubblegumv2)                             |
| `FreezeExecute`             | [`FreezeExecute`](#freezeexecute)                         |
| `PermanentFreezeExecute`    | [`PermanentFreezeExecute`](#permanentfreezeexecute)       |
| `Groups`                    | [`Groups`](#groups)                                       |

### `PluginAuthorityPair`

Struct `types::PluginAuthorityPair`.

| Field       | Type                              |
| ----------- | --------------------------------- |
| `plugin`    | [`Plugin`](#plugin)               |
| `authority` | [`Option<Authority>`](#authority) |

### `PluginType`

Enum `types::PluginType`.

| Variant                     |
| --------------------------- |
| `Royalties`                 |
| `FreezeDelegate`            |
| `BurnDelegate`              |
| `TransferDelegate`          |
| `UpdateDelegate`            |
| `PermanentFreezeDelegate`   |
| `Attributes`                |
| `PermanentTransferDelegate` |
| `PermanentBurnDelegate`     |
| `Edition`                   |
| `MasterEdition`             |
| `AddBlocker`                |
| `ImmutableMetadata`         |
| `VerifiedCreators`          |
| `Autograph`                 |
| `BubblegumV2`               |
| `FreezeExecute`             |
| `PermanentFreezeExecute`    |
| `Groups`                    |

### `RegistryRecord`

Struct `types::RegistryRecord`.

| Field         | Type                        |
| ------------- | --------------------------- |
| `plugin_type` | [`PluginType`](#plugintype) |
| `authority`   | [`Authority`](#authority)   |
| `offset`      | `u64`                       |

### `RelationshipEntry`

Struct `types::RelationshipEntry`.

| Field  | Type                                    |
| ------ | --------------------------------------- |
| `kind` | [`RelationshipKind`](#relationshipkind) |
| `key`  | `Pubkey`                                |

### `RelationshipKind`

Enum `types::RelationshipKind`.

| Variant       |
| ------------- |
| `Collection`  |
| `ChildGroup`  |
| `ParentGroup` |
| `Asset`       |

### `RemoveAssetsFromGroupV1Args`

Struct `types::RemoveAssetsFromGroupV1Args`.

| Field    | Type          |
| -------- | ------------- |
| `assets` | `Vec<Pubkey>` |

### `RemoveCollectionExternalPluginAdapterV1Args`

Struct `types::RemoveCollectionExternalPluginAdapterV1Args`.

| Field | Type                                                    |
| ----- | ------------------------------------------------------- |
| `key` | [`ExternalPluginAdapterKey`](#externalpluginadapterkey) |

### `RemoveCollectionPluginV1Args`

Struct `types::RemoveCollectionPluginV1Args`.

| Field         | Type                        |
| ------------- | --------------------------- |
| `plugin_type` | [`PluginType`](#plugintype) |

### `RemoveCollectionsFromGroupV1Args`

Struct `types::RemoveCollectionsFromGroupV1Args`.

| Field         | Type          |
| ------------- | ------------- |
| `collections` | `Vec<Pubkey>` |

### `RemoveExternalPluginAdapterV1Args`

Struct `types::RemoveExternalPluginAdapterV1Args`.

| Field | Type                                                    |
| ----- | ------------------------------------------------------- |
| `key` | [`ExternalPluginAdapterKey`](#externalpluginadapterkey) |

### `RemoveGroupsFromGroupV1Args`

Struct `types::RemoveGroupsFromGroupV1Args`.

| Field    | Type          |
| -------- | ------------- |
| `groups` | `Vec<Pubkey>` |

### `RemovePluginV1Args`

Struct `types::RemovePluginV1Args`.

| Field         | Type                        |
| ------------- | --------------------------- |
| `plugin_type` | [`PluginType`](#plugintype) |

### `RevokeCollectionPluginAuthorityV1Args`

Struct `types::RevokeCollectionPluginAuthorityV1Args`.

| Field         | Type                        |
| ------------- | --------------------------- |
| `plugin_type` | [`PluginType`](#plugintype) |

### `RevokePluginAuthorityV1Args`

Struct `types::RevokePluginAuthorityV1Args`.

| Field         | Type                        |
| ------------- | --------------------------- |
| `plugin_type` | [`PluginType`](#plugintype) |

### `Royalties`

Struct `types::Royalties`.

| Field          | Type                       |
| -------------- | -------------------------- |
| `basis_points` | `u16`                      |
| `creators`     | [`Vec<Creator>`](#creator) |
| `rule_set`     | [`RuleSet`](#ruleset)      |

### `RuleSet`

Enum `types::RuleSet`.

| Variant            | Fields        |
| ------------------ | ------------- |
| `None`             |               |
| `ProgramAllowList` | `Vec<Pubkey>` |
| `ProgramDenyList`  | `Vec<Pubkey>` |

### `Seed`

Enum `types::Seed`.

| Variant      | Fields    |
| ------------ | --------- |
| `Collection` |           |
| `Owner`      |           |
| `Recipient`  |           |
| `Asset`      |           |
| `Address`    | `Pubkey`  |
| `Bytes`      | `Vec<u8>` |

### `TransferDelegate`

Struct `types::TransferDelegate`.

No fields.

### `TransferV1Args`

Struct `types::TransferV1Args`.

| Field               | Type                                            |
| ------------------- | ----------------------------------------------- |
| `compression_proof` | [`Option<CompressionProof>`](#compressionproof) |

### `UpdateAuthority`

Enum `types::UpdateAuthority`.

| Variant      | Fields   |
| ------------ | -------- |
| `None`       |          |
| `Address`    | `Pubkey` |
| `Collection` | `Pubkey` |

### `UpdateCollectionExternalPluginAdapterV1Args`

Struct `types::UpdateCollectionExternalPluginAdapterV1Args`.

| Field         | Type                                                                  |
| ------------- | --------------------------------------------------------------------- |
| `key`         | [`ExternalPluginAdapterKey`](#externalpluginadapterkey)               |
| `update_info` | [`ExternalPluginAdapterUpdateInfo`](#externalpluginadapterupdateinfo) |

### `UpdateCollectionInfoV1Args`

Struct `types::UpdateCollectionInfoV1Args`.

| Field         | Type                        |
| ------------- | --------------------------- |
| `update_type` | [`UpdateType`](#updatetype) |
| `amount`      | `u32`                       |

### `UpdateCollectionPluginV1Args`

Struct `types::UpdateCollectionPluginV1Args`.

| Field    | Type                |
| -------- | ------------------- |
| `plugin` | [`Plugin`](#plugin) |

### `UpdateCollectionV1Args`

Struct `types::UpdateCollectionV1Args`.

| Field      | Type             |
| ---------- | ---------------- |
| `new_name` | `Option<String>` |
| `new_uri`  | `Option<String>` |

### `UpdateDelegate`

Struct `types::UpdateDelegate`.

| Field                  | Type          |
| ---------------------- | ------------- |
| `additional_delegates` | `Vec<Pubkey>` |

### `UpdateExternalPluginAdapterV1Args`

Struct `types::UpdateExternalPluginAdapterV1Args`.

| Field         | Type                                                                  |
| ------------- | --------------------------------------------------------------------- |
| `key`         | [`ExternalPluginAdapterKey`](#externalpluginadapterkey)               |
| `update_info` | [`ExternalPluginAdapterUpdateInfo`](#externalpluginadapterupdateinfo) |

### `UpdateGroupV1Args`

Struct `types::UpdateGroupV1Args`.

| Field      | Type             |
| ---------- | ---------------- |
| `new_name` | `Option<String>` |
| `new_uri`  | `Option<String>` |

### `UpdatePluginV1Args`

Struct `types::UpdatePluginV1Args`.

| Field    | Type                |
| -------- | ------------------- |
| `plugin` | [`Plugin`](#plugin) |

### `UpdateType`

Enum `types::UpdateType`.

| Variant  |
| -------- |
| `Mint`   |
| `Add`    |
| `Remove` |

### `UpdateV1Args`

Struct `types::UpdateV1Args`.

| Field                  | Type                                          |
| ---------------------- | --------------------------------------------- |
| `new_name`             | `Option<String>`                              |
| `new_uri`              | `Option<String>`                              |
| `new_update_authority` | [`Option<UpdateAuthority>`](#updateauthority) |

### `UpdateV2Args`

Struct `types::UpdateV2Args`.

| Field                  | Type                                          |
| ---------------------- | --------------------------------------------- |
| `new_name`             | `Option<String>`                              |
| `new_uri`              | `Option<String>`                              |
| `new_update_authority` | [`Option<UpdateAuthority>`](#updateauthority) |

### `ValidationResult`

Enum `types::ValidationResult`.

| Variant         |
| --------------- |
| `Approved`      |
| `Rejected`      |
| `Pass`          |
| `ForceApproved` |

### `ValidationResultsOffset`

Enum `types::ValidationResultsOffset`.

| Variant    | Fields |
| ---------- | ------ |
| `NoOffset` |        |
| `Anchor`   |        |
| `Custom`   | `u64`  |

### `VerifiedCreators`

Struct `types::VerifiedCreators`.

| Field        | Type                                                           |
| ------------ | -------------------------------------------------------------- |
| `signatures` | [`Vec<VerifiedCreatorsSignature>`](#verifiedcreatorssignature) |

### `VerifiedCreatorsSignature`

Struct `types::VerifiedCreatorsSignature`.

| Field      | Type     |
| ---------- | -------- |
| `address`  | `Pubkey` |
| `verified` | `bool`   |

### `WriteCollectionExternalPluginAdapterDataV1Args`

Struct `types::WriteCollectionExternalPluginAdapterDataV1Args`.

| Field  | Type                                                    |
| ------ | ------------------------------------------------------- |
| `key`  | [`ExternalPluginAdapterKey`](#externalpluginadapterkey) |
| `data` | `Option<Vec<u8>>`                                       |

### `WriteExternalPluginAdapterDataV1Args`

Struct `types::WriteExternalPluginAdapterDataV1Args`.

| Field  | Type                                                    |
| ------ | ------------------------------------------------------- |
| `key`  | [`ExternalPluginAdapterKey`](#externalpluginadapterkey) |
| `data` | `Option<Vec<u8>>`                                       |

---

Carbon 2.0.0 documentation · Web: https://carbon.sevenlabs.org/decoders/mpl-core · Last updated 2026-11-09 · Index of all pages: https://carbon.sevenlabs.org/llms.txt
