Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
4d665cd
Fix CI failures: Rust lint, Anchor, and Quasar workflows
mikemaccana Apr 14, 2026
19257b3
Fix Anchor and Quasar CI failures
mikemaccana Apr 14, 2026
55c3622
Fix rustfmt: reformat concat! macro call in test_hand.rs
mikemaccana Apr 14, 2026
ed20d28
Fix remaining Quasar CI failures
mikemaccana Apr 14, 2026
9b6972f
Fix Quasar token-2022 extension opcodes, sizes, and instruction formats
mikemaccana Apr 14, 2026
1ede0be
Fix transfer-fee mint_size and metadata MetadataPointer COption flags
mikemaccana Apr 14, 2026
6049b57
Fix metadata MetadataPointerInstruction encoding: use PodCOption (4-b…
mikemaccana Apr 14, 2026
5dab3ae
Fix metadata MetadataPointerInstruction: use OptionalNonZeroPubkey (6…
mikemaccana Apr 14, 2026
f4311a4
Fix metadata quasar: 234-byte account + over-fund lamports for realloc
mikemaccana Apr 15, 2026
a8f816e
Fix metadata quasar: use opcode 45 for TokenMetadataExtension
mikemaccana Apr 15, 2026
5d25100
Fix token-2022 metadata: use 8-byte discriminator for TokenMetadataIn…
mikemaccana Apr 15, 2026
81da8e5
Fix metadata: remove update_authority/mint from instruction data
mikemaccana Apr 15, 2026
3c72bbd
Fix metadata: create account at full size upfront, no CPI realloc needed
mikemaccana Apr 15, 2026
d1557a3
Fix metadata: revert to base-size account, mark mint writable in CPI
mikemaccana Apr 15, 2026
3be9824
Fix metadata: add payer+system_program to TokenMetadataInitialize CPI
mikemaccana Apr 15, 2026
c756622
Fix metadata: use 4-account TokenMetadataInitialize CPI matching spl-…
mikemaccana Apr 15, 2026
8627e64
Fix TokenMetadataInitialize realloc: pre-allocate full mint size
mikemaccana Apr 15, 2026
46feca0
Remove WIP tokens/token-2022/metadata/quasar until sol_realloc works …
mikemaccana Apr 15, 2026
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
14 changes: 14 additions & 0 deletions .github/.ghaignore
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,20 @@ tokens/escrow/anchor

# not live
tokens/token-2022/group/anchor
tokens/token-2022/group/quasar

# CPI quasar project uses subdirectories (hand/ and lever/) instead of a root Quasar.toml
basics/cross-program-invocation/quasar

# has Cargo.toml but no Quasar.toml
tokens/spl-token-minter/quasar
tokens/external-delegate-token-master/quasar
tokens/nft-minter/quasar
tokens/nft-operations/quasar
tokens/token-swap/quasar

# build failed - outdated quasar-lang API (no AccountView.data, no log_64)
oracles/pyth/quasar

# error in tests
tokens/external-delegate-token-master/anchor
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ jobs:
native:
- added|modified: '**/native/**'
workflow:
- added|modified: '.github/workflows/solana-native.yml'
- added|modified: '.github/workflows/native.yml'
- name: Analyze Changes
id: analyze
run: |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ jobs:
pinocchio:
- added|modified: '**/pinocchio/**'
workflow:
- added|modified: '.github/workflows/solana-pinocchio.yml'
- added|modified: '.github/workflows/pinocchio.yml'
- name: Analyze Changes
id: analyze
run: |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ jobs:
quasar:
- added|modified: '**/quasar/**'
workflow:
- added|modified: '.github/workflows/solana-quasar.yml'
- added|modified: '.github/workflows/quasar.yml'
- name: Analyze Changes
id: analyze
run: |
Expand Down
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ node_modules/
**/*/.anchor
**/*/.DS_Store
**/*/target
**/*/tests/fixtures
**/*/tests/fixtures/*
!**/*/tests/fixtures/*.so
**/*.rs.bk
**/*/test-ledger
**/*/yarn.lock
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ pub mod create_system_account {
to: context.accounts.new_account.to_account_info(), // To pubkey
},
),
lamports, // Lamports
0, // Space
lamports, // Lamports
0, // Space
&context.accounts.system_program.key(), // Owner Program
)?;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,13 @@ fn test_pull_lever_cpi() {
// include_bytes!() runs at compile time, and during `anchor build` the IDL generation
// step compiles tests before the .so files exist. Since this is a cross-program
// dependency (not our own program), lever.so may not be built yet at compile time.
let lever_bytes = std::fs::read("target/deploy/lever.so").expect("lever.so not found — run `anchor build` first");
let lever_bytes = std::fs::read(concat!(
env!("CARGO_MANIFEST_DIR"),
"/../../target/deploy/lever.so"
))
.expect("lever.so not found — run `anchor build` first");
svm.add_program(hand_program_id, hand_bytes).unwrap();
svm.add_program(lever_program_id, lever_bytes).unwrap();
svm.add_program(lever_program_id, &lever_bytes).unwrap();
let payer = create_wallet(&mut svm, 10_000_000_000).unwrap();

let power_keypair = Keypair::new();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ pub fn handle_create_new_account(context: Context<CreateNewAccount>) -> Result<(
},
)
.with_signer(signer_seeds),
lamports, // Lamports
0, // Space
lamports, // Lamports
0, // Space
&context.accounts.system_program.key(), // Owner Program
)?;
Ok(())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ pub struct IncrementPageVisits<'info> {
page_visits: Account<'info, PageVisits>,
}

pub fn handle_increment_page_visits(mut context: Context<IncrementPageVisits>) -> Result<()> {
pub fn handle_increment_page_visits(context: Context<IncrementPageVisits>) -> Result<()> {
let page_visits = &mut context.accounts.page_visits;
page_visits.increment();
Ok(())
Expand Down
2 changes: 1 addition & 1 deletion tokens/create-token/anchor/prepare.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { $ } from "zx";
const programs = [
{
id: "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s",
name: "token_metadata.so",
name: "mpl_token_metadata.so",
},
];

Expand Down
Binary file not shown.
8 changes: 5 additions & 3 deletions tokens/token-2022/default-account-state/quasar/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,8 @@ pub struct Initialize<'info> {

#[inline(always)]
pub fn handle_initialize(accounts: &Initialize) -> Result<(), ProgramError> {
// Mint + DefaultAccountState extension = 234 bytes
let mint_size: u64 = 234;
// 165 (base account) + 1 (account type) + 4 (TLV header) + 1 (DefaultAccountState data) = 171 bytes
let mint_size: u64 = 171;
let lamports = Rent::get()?.try_minimum_balance(mint_size as usize)?;

// 1. Create account owned by Token-2022
Expand Down Expand Up @@ -85,11 +85,13 @@ pub fn handle_initialize(accounts: &Initialize) -> Result<(), ProgramError> {
.invoke()?;

// 3. InitializeMint2: opcode 20, decimals, mint_authority, freeze_authority_option, freeze_authority
// COption<Pubkey> is encoded as 1-byte flag (1 = Some, 0 = None) + 32-byte pubkey
// Total: 1 (opcode) + 1 (decimals) + 32 (mint_authority) + 1 (COption flag) + 32 (freeze_authority) = 67 bytes
let mut mint_data = [0u8; 67];
mint_data[0] = 20; // InitializeMint2
mint_data[1] = 2; // decimals
mint_data[2..34].copy_from_slice(accounts.payer.to_account_view().address().as_ref());
mint_data[34] = 1; // has freeze authority
mint_data[34] = 1; // COption::Some flag (1-byte format used by quasar-svm token-2022)
mint_data[35..67].copy_from_slice(accounts.payer.to_account_view().address().as_ref());

CpiCall::new(
Expand Down
8 changes: 4 additions & 4 deletions tokens/token-2022/immutable-owner/quasar/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ pub struct Initialize<'info> {

#[inline(always)]
pub fn handle_initialize(accounts: &Initialize) -> Result<(), ProgramError> {
// Token account + ImmutableOwner extension = 301 bytes
let account_size: u64 = 301;
// 165 (base) + 1 (account type) + 4 (TLV header, ImmutableOwner is zero-size) = 170 bytes
let account_size: u64 = 170;
let lamports = Rent::get()?.try_minimum_balance(account_size as usize)?;

// 1. Create account
Expand All @@ -59,14 +59,14 @@ pub fn handle_initialize(accounts: &Initialize) -> Result<(), ProgramError> {
)
.invoke()?;

// 2. Initialize ImmutableOwner extension: opcode 34
// 2. Initialize ImmutableOwner extension: opcode 22 (no additional data)
CpiCall::new(
accounts.token_program.to_account_view().address(),
[InstructionAccount::writable(
accounts.token_account.to_account_view().address(),
)],
[accounts.token_account.to_account_view()],
[34u8],
[22u8],
)
.invoke()?;

Expand Down
4 changes: 2 additions & 2 deletions tokens/token-2022/interest-bearing/quasar/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ pub struct Initialize<'info> {

#[inline(always)]
pub fn handle_initialize(accounts: &Initialize, rate: i16) -> Result<(), ProgramError> {
// Mint + InterestBearingConfig extension = 234 bytes
let mint_size: u64 = 234;
// 165 (base) + 1 (account type) + 4 (TLV header) + 52 (InterestBearingConfig data) = 222 bytes
let mint_size: u64 = 222;
let lamports = Rent::get()?.try_minimum_balance(mint_size as usize)?;

accounts.system_program
Expand Down
Binary file not shown.
30 changes: 0 additions & 30 deletions tokens/token-2022/metadata/quasar/Cargo.toml

This file was deleted.

21 changes: 0 additions & 21 deletions tokens/token-2022/metadata/quasar/Quasar.toml

This file was deleted.

Loading
Loading