Skip to content

Conversation

@rustopian
Copy link
Contributor

@rustopian rustopian commented Jul 1, 2025

This is a draft pending testing of the latest optimizations, especially custom entrypoint.

p-ata (pinocchio-ata) is a drop-in replacement for SPL ATA. Following in the footsteps of p-token, it uses pinocchio instead of solana-program to reduce compute usage. Plus, it includes a number of additional improvements.

See README for

  • descriptions of new features and improvements
  • instructions for running the various test suites
  • benchmark numbers
  • byte-for-byte SPL ATA vs. p-ATA comparisons

Optimal bump circumstances as of 2025-08-11, ecde2ca

Test SPL ATA p-ata bump arg all optimizations notes
create_idempotent 3669 1732 590 590
create 12364 4842 3323 3216
create_token2022 14692 7642 6123 5987
create_topup 15817 4710 3191 3083 CreateAccountPrefunded
create_topup_nocap 15817 7476 5959 5851 no CreateAccountPrefunded
create_extended 17620 9771 8251 7997
recover_nested 12851 8100 N/A 8100 rare instruction
recover_multisig N/A 8412 N/A 8412 rare instruction
worst_case_create 19864 15187 3323 3216 hard-to-find bump

Average of 10,000 random wallets as of 2025-08-11, ecde2ca

Test SPL ATA p-ata bump arg all optimizations notes
create_idempotent 4914 3234 948 948
create 14194 6343 3692 3589
create_token2022 16057 9140 6491 6362
create_topup 17317 6183 3561 3449 CreateAccountPrefunded
create_topup_no_cap 17287 8987 6324 6209 no CreateAccountPrefunded
create_extended 19420 11289 8618 8366
recover_nested 17066 12576 N/A 12576 rare instruction
recover_multisig N/A 12875 N/A 12875 rare instruction

@rustopian rustopian marked this pull request as draft July 1, 2025 20:39
@rustopian rustopian self-assigned this Jul 2, 2025
@rustopian rustopian changed the title [WIP] p-ata p-ata Jul 3, 2025
@rustopian rustopian marked this pull request as ready for review July 4, 2025 15:28
@rustopian rustopian marked this pull request as draft July 6, 2025 07:53
@rustopian rustopian requested review from febo and joncinque July 7, 2025 10:30
@rustopian rustopian requested a review from febo August 14, 2025 11:49
Comment on lines +40 to +55
if accounts.len() < 7 {
return Err(ProgramError::NotEnoughAccountKeys);
}

// SAFETY: account len already checked
unsafe {
Ok(RecoverNestedAccounts {
nested_associated_token_account: accounts.get_unchecked(0),
nested_mint: accounts.get_unchecked(1),
destination_associated_token_account: accounts.get_unchecked(2),
owner_associated_token_account: accounts.get_unchecked(3),
owner_mint: accounts.get_unchecked(4),
wallet: accounts.get_unchecked(5),
token_program: accounts.get_unchecked(6),
})
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same pattern here:

Suggested change
if accounts.len() < 7 {
return Err(ProgramError::NotEnoughAccountKeys);
}
// SAFETY: account len already checked
unsafe {
Ok(RecoverNestedAccounts {
nested_associated_token_account: accounts.get_unchecked(0),
nested_mint: accounts.get_unchecked(1),
destination_associated_token_account: accounts.get_unchecked(2),
owner_associated_token_account: accounts.get_unchecked(3),
owner_mint: accounts.get_unchecked(4),
wallet: accounts.get_unchecked(5),
token_program: accounts.get_unchecked(6),
})
}
let [nested_associated_token_account, nested_mint, destination_associated_token_account, owner_associated_token_account, owner_associated_token_account, owner_mint, wallet, token_program @ ..] =
accounts
else {
return Err(ProgramError::NotEnoughAccountKeys);
};
Ok(RecoverNestedAccounts {
nested_associated_token_account,
nested_mint,
destination_associated_token_account,
owner_associated_token_account,
owner_mint,
wallet,
token_program,
})
}

Comment on lines +158 to +165
pub(crate) fn load_token_account(account: &AccountInfo) -> Result<&TokenAccount, ProgramError> {
let account_data = account.try_borrow_data()?;
if !valid_token_account_data(&account_data) {
return Err(ProgramError::InvalidAccountData);
}
// SAFETY: We've validated the account data structure above
unsafe { Ok(&*(account_data.as_ptr() as *const TokenAccount)) }
}
Copy link

@febo febo Aug 15, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Getting the raw pointer (line 164) from the Ref (line 159) is problematic. The Ref keeps track of borrows, but when this method finished, it will be drop and reset the borrow state. At the same time, the pointer will be live and can lead to UB if there is a mutable borrow after calling this method.

The safe way to implement this is to map the Ref's data reference to a TokenAccount reference, so the Ref stays alive while the reference is alive.

Suggested change
pub(crate) fn load_token_account(account: &AccountInfo) -> Result<&TokenAccount, ProgramError> {
let account_data = account.try_borrow_data()?;
if !valid_token_account_data(&account_data) {
return Err(ProgramError::InvalidAccountData);
}
// SAFETY: We've validated the account data structure above
unsafe { Ok(&*(account_data.as_ptr() as *const TokenAccount)) }
}
pub(crate) fn load_token_account(account: &AccountInfo) -> Result<Ref<TokenAccount>, ProgramError> {
let account_data = account.try_borrow_data()?;
if !valid_token_account_data(&account_data) {
return Err(ProgramError::InvalidAccountData);
}
// SAFETY: We've validated the account data structure above
Ok(Ref::map(account_data, |data| unsafe {
&*(data.as_ptr() as *const TokenAccount)
})
}

Comment on lines +187 to +206
AccountMeta {
pubkey: recover_accounts.nested_associated_token_account.key(),
is_writable: true,
is_signer: false,
},
AccountMeta {
pubkey: recover_accounts.nested_mint.key(),
is_writable: false,
is_signer: false,
},
AccountMeta {
pubkey: recover_accounts.destination_associated_token_account.key(),
is_writable: true,
is_signer: false,
},
AccountMeta {
pubkey: recover_accounts.owner_associated_token_account.key(),
is_writable: false,
is_signer: true,
},
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can use the constructors:

Suggested change
AccountMeta {
pubkey: recover_accounts.nested_associated_token_account.key(),
is_writable: true,
is_signer: false,
},
AccountMeta {
pubkey: recover_accounts.nested_mint.key(),
is_writable: false,
is_signer: false,
},
AccountMeta {
pubkey: recover_accounts.destination_associated_token_account.key(),
is_writable: true,
is_signer: false,
},
AccountMeta {
pubkey: recover_accounts.owner_associated_token_account.key(),
is_writable: false,
is_signer: true,
},
AccountMeta::writable(
recover_accounts.nested_associated_token_account.key()
),
AccountMeta::readonly(
recover_accounts.nested_mint.key()
),
AccountMeta::writable(
recover_accounts.destination_associated_token_account.key()
),
AccountMeta::readonly_signer(
recover_accounts.owner_associated_token_account.key()
),

Comment on lines +259 to +268
invoke_signed(
&ix_close,
&[
recover_accounts.nested_associated_token_account,
recover_accounts.wallet,
recover_accounts.owner_associated_token_account,
],
&[pda_signer],
)?;
Ok(())
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit:

Suggested change
invoke_signed(
&ix_close,
&[
recover_accounts.nested_associated_token_account,
recover_accounts.wallet,
recover_accounts.owner_associated_token_account,
],
&[pda_signer],
)?;
Ok(())
invoke_signed(
&ix_close,
&[
recover_accounts.nested_associated_token_account,
recover_accounts.wallet,
recover_accounts.owner_associated_token_account,
],
&[pda_signer],
)

Comment on lines +236 to +250
AccountMeta {
pubkey: recover_accounts.nested_associated_token_account.key(),
is_writable: true,
is_signer: false,
},
AccountMeta {
pubkey: recover_accounts.wallet.key(),
is_writable: true,
is_signer: false,
},
AccountMeta {
pubkey: recover_accounts.owner_associated_token_account.key(),
is_writable: false,
is_signer: true,
},
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
AccountMeta {
pubkey: recover_accounts.nested_associated_token_account.key(),
is_writable: true,
is_signer: false,
},
AccountMeta {
pubkey: recover_accounts.wallet.key(),
is_writable: true,
is_signer: false,
},
AccountMeta {
pubkey: recover_accounts.owner_associated_token_account.key(),
is_writable: false,
is_signer: true,
},
AccountMeta::writable(
recover_accounts.nested_associated_token_account.key()
),
AccountMeta::writable(
recover_accounts.wallet.key()
),
AccountMeta::readonly_signer(
recover_accounts.owner_associated_token_account.key()
),

Comment on lines +160 to +164
let get_size_metas = &[AccountMeta {
pubkey: mint_account.key(),
is_writable: false,
is_signer: false,
}];
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
let get_size_metas = &[AccountMeta {
pubkey: mint_account.key(),
is_writable: false,
is_signer: false,
}];
let get_size_metas = &[AccountMeta::readonly(
mint_account.key()
)];

/// - All bump hints are validated for canonicality
/// - `token_account_len` is bounded by `MAX_SANE_ACCOUNT_LENGTH`
#[inline(always)]
pub fn process_instruction(
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

general comment: wonder if you tried to "prioritize" a potential common path? For example, keep it like the original ATA and encapsulating the logic to parse the instruction data (if needed) inside process_create_associated_token_account. Sometimes it helps CU-wise to have simpler match statements.

known_token_account_len,
)?;

match create_accounts.rent_sysvar {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The rent_sysvar seems to be used only to compute the minimal rent but at this point you already have the space. You could calculate the rent requirement here and replace the match statement with something like:

let minimum_balance = if let Some(rent_sysvar_info) = create_accounts.rent_sysvar {
        let rent = unsafe { Rent::from_account_info_unchecked(rent_sysvar_info)? };
        rent.minimum_balance(space)
} else {
        Rent::get()?.minimum_balance(space)
};
create_and_initialize_ata(...)

while better_bump > expected_bump {
let maybe_better_address = derive_address::<3>(seeds, Some(better_bump), program_id);
if is_off_curve(&maybe_better_address) {
log!("Canonical address does not match provided address. Canonical bump is {}, with address {}.", better_bump, &maybe_better_address);
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure if you are expecting the log! to print the pubkey in base58 – as it is it will print the bytes.

@rustopian rustopian marked this pull request as draft September 16, 2025 14:09
rustopian and others added 3 commits September 17, 2025 10:22
* build(deps-dev): bump zx from 8.6.1 to 8.6.2 (solana-program#104)

Bumps [zx](https://github.com/google/zx) from 8.6.1 to 8.6.2.
- [Release notes](https://github.com/google/zx/releases)
- [Commits](google/zx@8.6.1...8.6.2)

---
updated-dependencies:
- dependency-name: zx
  dependency-version: 8.6.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps-dev): bump zx from 8.6.2 to 8.7.0 (solana-program#105)

Bumps [zx](https://github.com/google/zx) from 8.6.2 to 8.7.0.
- [Release notes](https://github.com/google/zx/releases)
- [Commits](google/zx@8.6.2...8.7.0)

---
updated-dependencies:
- dependency-name: zx
  dependency-version: 8.7.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps-dev): bump zx from 8.7.0 to 8.7.1 (solana-program#107)

Bumps [zx](https://github.com/google/zx) from 8.7.0 to 8.7.1.
- [Release notes](https://github.com/google/zx/releases)
- [Commits](google/zx@8.7.0...8.7.1)

---
updated-dependencies:
- dependency-name: zx
  dependency-version: 8.7.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* deps: Update Solana v2.3.4 and rust toolchain (solana-program#106)

#### Problem

The v2.3 Solana crates are out, and the toolchain on this repo is a bit
old.

#### Summary of changes

Bump the Solana version, crates, and rust toolchain.

* build(deps): bump solana-program from 2.2.1 to 2.3.0 (solana-program#108)

* build(deps): bump solana-program from 2.2.1 to 2.3.0

Bumps [solana-program](https://github.com/anza-xyz/solana-sdk) from 2.2.1 to 2.3.0.
- [Release notes](https://github.com/anza-xyz/solana-sdk/releases)
- [Commits](https://github.com/anza-xyz/solana-sdk/compare/[email protected]@v2.3.0)

---
updated-dependencies:
- dependency-name: solana-program
  dependency-version: 2.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>

* Fixup deprecations

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Jon C <[email protected]>

* build(deps): bump solana-program-test from 2.3.4 to 2.3.5 (solana-program#109)

Bumps [solana-program-test](https://github.com/anza-xyz/agave) from 2.3.4 to 2.3.5.
- [Release notes](https://github.com/anza-xyz/agave/releases)
- [Changelog](https://github.com/anza-xyz/agave/blob/master/CHANGELOG.md)
- [Commits](anza-xyz/agave@v2.3.4...v2.3.5)

---
updated-dependencies:
- dependency-name: solana-program-test
  dependency-version: 2.3.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps): bump solana-program-test from 2.3.5 to 2.3.6 (solana-program#111)

Bumps [solana-program-test](https://github.com/anza-xyz/agave) from 2.3.5 to 2.3.6.
- [Release notes](https://github.com/anza-xyz/agave/releases)
- [Changelog](https://github.com/anza-xyz/agave/blob/master/CHANGELOG.md)
- [Commits](anza-xyz/agave@v2.3.5...v2.3.6)

---
updated-dependencies:
- dependency-name: solana-program-test
  dependency-version: 2.3.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps-dev): bump zx from 8.7.1 to 8.7.2 (solana-program#112)

Bumps [zx](https://github.com/google/zx) from 8.7.1 to 8.7.2.
- [Release notes](https://github.com/google/zx/releases)
- [Commits](google/zx@8.7.1...8.7.2)

---
updated-dependencies:
- dependency-name: zx
  dependency-version: 8.7.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* interface: Add instruction definition, refactor some (solana-program#113)

* interface: Add instruction definition, refactor some

#### Problem

In order to publish the v3 SDK crates and have them usable in Agave, we
also need to have SPL crates using the v3 SDK crates. However, we have a
circular dependency between Agave and SPL which currently makes this
impossible.

The overall plan is to have Agave only use "interface" crates from SPL,
which have no dependencies on Agave crates.

You can see more info about the project at
https://github.com/orgs/anza-xyz/projects/27

ATA is already in a good position since it has a small "interface"-style
crate for Agave to use. However, it has two issues:

* the instruction definition is still in the program, and Agave needs
  that to deserialize instructions
* the name of the crate is "spl-associated-token-account-client", which
  is inconsistent with how we normally name these

#### Summary of changes

Move the instruction definition into the interface crate, gated with the
"borsh" feature for those who need it.

Rename the crate to "spl-associated-token-account-interface".

* Add required feature to borsh dep

* Run cargo fmt

* Bump version down to v1 for first release

* CI: Update git-cliff action to v4 (solana-program#114)

#### Problem

The v3 git-cliff action is very out of date, but still being used by this repo.

#### Summary of changes

Bump the git-cliff action version to v4.

* CI: Fix git-cliff args (solana-program#115)

#### Problem

The current yaml isn't actually recognized for the publish job.

#### Summary of changes

Remove some quotes. While I was at it, I also fixed the tag to `HEAD`
instead of `main`, which is useful in case we ever add backport
branches.

* build(deps-dev): bump typescript from 5.8.3 to 5.9.2 (solana-program#116)

Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.8.3 to 5.9.2.
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release-publish.yml)
- [Commits](microsoft/TypeScript@v5.8.3...v5.9.2)

---
updated-dependencies:
- dependency-name: typescript
  dependency-version: 5.9.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps-dev): bump zx from 8.7.2 to 8.8.0 (solana-program#117)

Bumps [zx](https://github.com/google/zx) from 8.7.2 to 8.8.0.
- [Release notes](https://github.com/google/zx/releases)
- [Commits](google/zx@8.7.2...8.8.0)

---
updated-dependencies:
- dependency-name: zx
  dependency-version: 8.8.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* deps: Bump sdk to v3, decouple from program (solana-program#118)

#### Problem

The sdk v3 crates are out, but the ATA interface is still on v2.

#### Summary of changes

Bump the deps to v3, and make the program depend on the crates version
of the ATA interface to make the build possible.

* chore: Release

* build(deps): bump solana-program-test from 2.3.6 to 2.3.7 (solana-program#121)

Bumps [solana-program-test](https://github.com/anza-xyz/agave) from 2.3.6 to 2.3.7.
- [Release notes](https://github.com/anza-xyz/agave/releases)
- [Changelog](https://github.com/anza-xyz/agave/blob/master/CHANGELOG.md)
- [Commits](anza-xyz/agave@v2.3.6...v2.3.7)

---
updated-dependencies:
- dependency-name: solana-program-test
  dependency-version: 2.3.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps): bump thiserror from 2.0.12 to 2.0.14 (solana-program#122)

Bumps [thiserror](https://github.com/dtolnay/thiserror) from 2.0.12 to 2.0.14.
- [Release notes](https://github.com/dtolnay/thiserror/releases)
- [Commits](dtolnay/thiserror@2.0.12...2.0.14)

---
updated-dependencies:
- dependency-name: thiserror
  dependency-version: 2.0.14
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps): bump thiserror from 2.0.14 to 2.0.15 (solana-program#124)

Bumps [thiserror](https://github.com/dtolnay/thiserror) from 2.0.14 to 2.0.15.
- [Release notes](https://github.com/dtolnay/thiserror/releases)
- [Commits](dtolnay/thiserror@2.0.14...2.0.15)

---
updated-dependencies:
- dependency-name: thiserror
  dependency-version: 2.0.15
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps): bump thiserror from 2.0.15 to 2.0.16 (solana-program#126)

Bumps [thiserror](https://github.com/dtolnay/thiserror) from 2.0.15 to 2.0.16.
- [Release notes](https://github.com/dtolnay/thiserror/releases)
- [Commits](dtolnay/thiserror@2.0.15...2.0.16)

---
updated-dependencies:
- dependency-name: thiserror
  dependency-version: 2.0.16
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps-dev): bump zx from 8.8.0 to 8.8.1 (solana-program#127)

Bumps [zx](https://github.com/google/zx) from 8.8.0 to 8.8.1.
- [Release notes](https://github.com/google/zx/releases)
- [Commits](google/zx@8.8.0...8.8.1)

---
updated-dependencies:
- dependency-name: zx
  dependency-version: 8.8.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* checking in; branching out 3.0 update

* use 3.0 crates

* specify solana ver

* try cache bust

* try dedicated

* update mollusk

* passing mollusk tests

* error matching and other various test improvements

* rm old patches

* use 3.0 crates (solana-program#130)

* store token programs for now (until their repos use 3.0)

* fmt

* Use 3.0 crates (#29)

*remove CI hack

* sync and resolve conflicts (#30)

* fix merged file

* fmt

* specify tokio

* lockfile

* fmt, clippy

* rm unused

* process_and_merge_instruction helper

* ensure_system_account_exists helper for mollusk

* few more helpers reducing LoC

* a few more helpers

* lint

* rename vars to mollusk_result

* some small test fixes

* use mollusk check

* split up huge fn

* a little reuse

* CreateAtaInstructionType default

* rm async tokio

* test calc helpers

* move tests to harness

* rm some unused

* rm now-unused utils

* use harness for extended mint

* use breakout crates in tests

* minor clarifications and cleanups

* some naming updates and small utils cleanup

* rm redundant mint setup

* rm old comment

* rm solana-program-test dep

* rm dup

* rm intermediate harness

* rm unused fns

* use account builder in more places

* rm nested mod

* rm unneeded interface dev deps

* rm unrelated program import changes

* rm worthless wrappers

* rm specifiers

* rm old comment from comparison version

* rm submodules plan; program bins in fixtures

* more mollusk checks to ensure nested ata is empty and closed

* rm unnnecessary branching and specifiers; other small updates

AtaTestHarness capitalization, token_2022_interface/token_interface branching rm when unneeded, rm unnecessary specifiers, wrong-account helper takes Pubkey, deprecated instruction test adds rent sysvar account, setup_mollusk_with_programsnow points to programs/tests/fixtures

* move test harness to own crate

* cargo lock/toml updates

* rm unneeded branch: StateWithExtensionsOwned for both programs

* clearer name

* add ATA to spellcheck

* spellcheck

* merge create_ata_for_owner and create_nested_ata

* remove unnecessary path setters

* rm import

* accurate mint authority comment

* no sense having 0 lamports even when account expected to exist

* unified helpers for smaller token/token-2022 tests

* test-harness cargo.toml updates

* use mollusk mint constructors in some locations

* import lengths

* rm now unnecessary prog acct prefill

* rm hardcoded native loader and sys prog insertion

* update ctx_ensure_account_exists_with_lamports

* rm rent prefill

* use helper for token2022 too

* rm keypair

* ren_sysvar() no longer needed, woot

* fmt

* use interface

* rm unnecessary account insertions

* simplify some setup code

* simplify wallet_and_mint helper

* rm now unused

* rm stray keypair

* lint

* fmt

* comment

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Jon C <[email protected]>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants