Skip to content

Commit 1ede0be

Browse files
mikemaccanaclaude
andcommitted
Fix transfer-fee mint_size and metadata MetadataPointer COption flags
- transfer-fee: correct mint_size from 378 to 278 (165+1+4+108 bytes; TransferFeeConfig is 108 bytes with no struct padding) - metadata: add 1-byte COption flags to InitializeMetadataPointer instruction (66→68 bytes): [39, 0, 1, authority(32), 1, addr(32)] Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 9b6972f commit 1ede0be

2 files changed

Lines changed: 8 additions & 5 deletions

File tree

  • tokens/token-2022

tokens/token-2022/metadata/quasar/src/lib.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,11 +99,14 @@ pub fn handle_initialize(
9999
.invoke()?;
100100

101101
// InitializeMetadataPointer: opcode 39, sub-opcode 0.
102-
let mut mp_data = [0u8; 66];
102+
// Layout: [39, 0, COption_flag(1), authority(32), COption_flag(1), metadata_address(32)]
103+
let mut mp_data = [0u8; 68];
103104
mp_data[0] = 39;
104105
mp_data[1] = 0;
105-
mp_data[2..34].copy_from_slice(accounts.payer.to_account_view().address().as_ref());
106-
mp_data[34..66]
106+
mp_data[2] = 1; // COption::Some for authority
107+
mp_data[3..35].copy_from_slice(accounts.payer.to_account_view().address().as_ref());
108+
mp_data[35] = 1; // COption::Some for metadata_address
109+
mp_data[36..68]
107110
.copy_from_slice(accounts.mint_account.to_account_view().address().as_ref());
108111

109112
CpiCall::new(

tokens/token-2022/transfer-fee/quasar/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ pub struct Initialize<'info> {
7070

7171
#[inline(always)]
7272
pub fn handle_initialize(accounts: &Initialize, basis_points: u16, max_fee: u64) -> Result<(), ProgramError> {
73-
// Mint + TransferFeeConfig extension = 378 bytes
74-
let mint_size: u64 = 378;
73+
// 165 (base) + 1 (AccountType) + 4 (TLV header) + 108 (TransferFeeConfig data) = 278 bytes
74+
let mint_size: u64 = 278;
7575
let lamports = Rent::get()?.try_minimum_balance(mint_size as usize)?;
7676

7777
accounts.system_program

0 commit comments

Comments
 (0)