diff --git a/.github/.ghaignore b/.github/.ghaignore index a04a034f..034781a7 100644 --- a/.github/.ghaignore +++ b/.github/.ghaignore @@ -19,10 +19,6 @@ compression/cnft-vault/anchor # builds but need to test on localhost compression/cnft-burn/anchor -# not live -tokens/token-extensions/group/anchor -tokens/token-extensions/group/quasar - # CPI quasar project uses subdirectories (hand/ and lever/) instead of a root Quasar.toml basics/cross-program-invocation/quasar diff --git a/tokens/token-extensions/group/anchor/programs/group/Cargo.toml b/tokens/token-extensions/group/anchor/programs/group/Cargo.toml index fe19b3a1..1253a994 100644 --- a/tokens/token-extensions/group/anchor/programs/group/Cargo.toml +++ b/tokens/token-extensions/group/anchor/programs/group/Cargo.toml @@ -22,7 +22,6 @@ custom-panic = [] [dependencies] anchor-lang = "1.0.0" anchor-spl = "1.0.0" -spl-token-group-interface = "0.2.5" [dev-dependencies] litesvm = "0.11.0" diff --git a/tokens/token-extensions/group/quasar/src/lib.rs b/tokens/token-extensions/group/quasar/src/lib.rs index 3f65707c..d9c4fad4 100644 --- a/tokens/token-extensions/group/quasar/src/lib.rs +++ b/tokens/token-extensions/group/quasar/src/lib.rs @@ -42,13 +42,14 @@ pub struct InitializeGroup { #[account(mut)] pub mint_account: Signer, pub token_program: Program, - pub system_program: Program, + pub system_program: Program, } #[inline(always)] fn handle_initialize_group(accounts: &mut InitializeGroup) -> Result<(), ProgramError> { - // Mint + GroupPointer extension = 250 bytes - let mint_size: u64 = 250; + // Mint + GroupPointer extension = 234 bytes + // (base mint padded to 165 + account_type byte + GroupPointer TLV [2 type + 2 len + 64 data]) + let mint_size: u64 = 234; let lamports = Rent::get()?.try_minimum_balance(mint_size as usize)?; accounts @@ -62,10 +63,11 @@ fn handle_initialize_group(accounts: &mut InitializeGroup) -> Result<(), Program ) .invoke()?; - // InitializeGroupPointer: opcode 41, sub-opcode 0 - // Data: [41, 0, authority (32 bytes), group_address (32 bytes)] + // InitializeGroupPointer: opcode 40, sub-opcode 0 + // (opcode 41 is GroupMemberPointer, not GroupPointer) + // Data: [40, 0, authority (32 bytes), group_address (32 bytes)] let mut ext_data = [0u8; 66]; - ext_data[0] = 41; + ext_data[0] = 40; ext_data[1] = 0; // authority = mint itself (self-referential PDA pattern) ext_data[2..34].copy_from_slice(accounts.mint_account.to_account_view().address().as_ref());