Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions .github/.ghaignore
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
14 changes: 8 additions & 6 deletions tokens/token-extensions/group/quasar/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,14 @@ pub struct InitializeGroup {
#[account(mut)]
pub mint_account: Signer,
pub token_program: Program<Token2022Program>,
pub system_program: Program<System>,
pub system_program: Program<SystemProgram>,
}

#[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
Expand All @@ -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());
Expand Down
Loading