light_token_interface/instructions/mint_action/
update_metadata.rs

1use light_compressed_account::Pubkey;
2use light_zero_copy::ZeroCopy;
3
4use crate::{AnchorDeserialize, AnchorSerialize};
5
6#[repr(C)]
7#[derive(Debug, Clone, AnchorSerialize, AnchorDeserialize, ZeroCopy)]
8pub struct UpdateMetadataFieldAction {
9    pub extension_index: u8, // Index of the TokenMetadata extension in the extensions array
10    pub field_type: u8,      // 0=Name, 1=Symbol, 2=Uri, 3=Custom key
11    pub key: Vec<u8>,        // Empty for Name/Symbol/Uri, key string for custom fields
12    pub value: Vec<u8>,      // UTF-8 encoded value
13}
14
15#[repr(C)]
16#[derive(Debug, Clone, AnchorSerialize, AnchorDeserialize, ZeroCopy)]
17pub struct UpdateMetadataAuthorityAction {
18    pub extension_index: u8, // Index of the TokenMetadata extension in the extensions array
19    pub new_authority: Pubkey, // Use zero bytes to set to None
20}
21
22#[repr(C)]
23#[derive(Debug, Clone, AnchorSerialize, AnchorDeserialize, ZeroCopy)]
24pub struct RemoveMetadataKeyAction {
25    pub extension_index: u8, // Index of the TokenMetadata extension in the extensions array
26    pub key: Vec<u8>,        // UTF-8 encoded key to remove
27    pub idempotent: u8,      // 0=false, 1=true - don't error if key doesn't exist
28}
29
30/// Authority types for compressed mint updates, following SPL Token-2022 pattern
31#[derive(Debug, Clone, PartialEq, Eq, AnchorSerialize, AnchorDeserialize, ZeroCopy)]
32#[repr(C, u8)]
33pub enum MetadataUpdate {
34    UpdateAuthority(UpdateMetadataAuthority),
35    UpdateKey(UpdateKey),
36    RemoveKey(RemoveKey),
37}
38
39#[repr(C)]
40#[derive(Debug, Clone, PartialEq, Eq, AnchorSerialize, AnchorDeserialize, ZeroCopy)]
41pub struct UpdateKey {
42    pub extension_index: u8,
43    pub key_index: u8,
44    pub key: Vec<u8>,
45    pub value: Vec<u8>,
46}
47
48#[repr(C)]
49#[derive(Debug, Clone, Copy, PartialEq, Eq, AnchorSerialize, AnchorDeserialize, ZeroCopy)]
50pub struct RemoveKey {
51    pub extension_index: u8,
52    pub key_index: u8,
53}
54
55#[repr(C)]
56#[derive(Debug, Clone, Copy, PartialEq, Eq, AnchorSerialize, AnchorDeserialize, ZeroCopy)]
57pub struct UpdateMetadataAuthority {
58    pub extension_index: u8,
59    pub new_authority: Pubkey,
60}