Although you want to keep an eye on the CU (compute unit) limit to make sure the program does not consume too many CUs, program integration test will fail unexpectedly if limit is too low when developing.
Use this method to change the CU limit:
test_builder.test().set_compute_max_units(500_000);
The Rust version requirements for Solana and Mango V4 can be found in the respective rust-toolchain.toml
file
and tools like cargo pick up on them automatically.
Check with this command:
rustup show
On MacOS its also required to use the x86 toolchain.
rustup override set 1.69-x86_64
# CORRECT:
# /Users/username/code/mango-v4 1.69-x86_64
This error results from wrong Rust version!
Solution: see Section about Rust version
Multiple errors of this style are shown:
666 | const_assert_eq!(size_of::<AnyNode>(), size_of::<LeafNode>());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ attempt to compute `0_usize - 1_usize`, which would overflow
Note: the assertion error text is misleading, the problem is not the overflow but the static assert about struct sizes failing.
The problem appears on non-x86-targets (typically on MacOS) that produce different struct layouts than are expected on-chain. For performance reasons the mango program wants to do zero-copy deserialization of account state and for that it's essential to be able to define structs that match the on-chain data layout. The assert failing means that that didn't work on this target.
Solution: For now, the only solution is to use an x86 toolchain - see Section about Rust version
(anchor-related issue)
Solution: Make sure that instruction layout (defined using Anchor) used by client/cpi matches the program version.
Program failed to complete: Access violation in stack frame 5 at address 0x200005ff8 of size 8 by instruction #6340
The solana runtime provides limited stack space to each callframe and likely you are exceeding it.
Workaround:
Avoid putting large data on the stack. Experiment with #[inline(never)]
on methods.
(anchor-related issue)
Solution:
Revisit the account references retrieved by explicit calls to .load
/.load_mut
. See doc on account_loader.rs
.
Solution:
For Solana programs you must use msg!
for logging and not info!
/debug!
/error!
/warn!
/trace!
from the log
crate.
Solution: Fix the Rust version - see Section about Rust version
Program failed to complete: Invoked an instruction with data that is too large (12884928151 > 10240)
Solution: Use the Solana version 1.16.x or later.
Error: Function ZN86$LT$switchboard_v2..aggregator..AggregatorAccountData$u20$as$u20$core..fmt..Debug$GT$3fmt17h22734c1ad9ed3ea8E Stack offset of 4128 exceeded max offset of 4096 by 32 bytes, please minimize large stack variables
This error results from very large Rust structures passed as parameters.
No solution yet! Please open an issue if you know how to fix this.
As of now the problem can be ignored as long as the method is not called.
Solution: Make sure the Solana version of the program is compatible with the validator version.
Check the Solana Feature Gate status and the Solana Feature Gate Activation Schedule:
solana feature status
# Output (truncated):
Feature | Status | Activation Slot | Description
7rcw5UtqgDTBBv2EcynNfYckgdAaH1MAsCjKgXMkN7Ri | active since epoch 516 | 217388260 | enable curve25519 syscalls
5x3825XS7M2A3Ekbn5VGGkvFoAg5qrRWkTrY4bARP1GL | inactive | NA | enable bpf upgradeable loader SetAuthorityChecked instruction #28424
Tool Feature Set: 4033350765
Software Version Feature Set Stake RPC
1.17.1, 1.17.0 2241946265 2.20% 1.75%
1.16.17, 1.16.16, 1.16.15, 1.16.14 4033350765 9.12% 2.56% <-- me
1.16.13 3949673676 0.41% 0.27%
Solution: Configure the log filter.
Start with this filter using the RUST_LOG
environment variable:
solana_rbpf=trace, solana_runtime::message_processor=debug, solana_runtime::system_instruction_processor=info, solana_program_test=debug, test_all=debug
Solana programs require the special Rust toolchain to be installed.
Normally the solana tooling installs it automatically on first use and cargo build-sbf
will just work.
Workaround:
Explicitly mention the toolchain when invoking cargo
build or test:
# 1.16.x
cargo +solana build-sbf
Make sure the toolchain is installed on your system:
rustup toolchain list -v
If toolchain is missing use the Solana Install Tool here to install it.