we built SolanaTestForge during @colosseum Frontier Hackathon because “tests passed” means very little without adversarial conditions.
fork state.
mutate inputs.
break assumptions first.
https://t.co/NzsmdSRhVW
forking mainnet does not just make tests more realistic.
it removes assumptions.
same program.
same instructions.
completely different outcomes once real state is involved.
demo: https://t.co/2hhBHLVks5
some teams treat testing like confirmation.
we treat it like adversarial research.
if the protocol survives weird timing, weird state, and weird inputs,
then the real confidence starts.
instruction passed all checks.
post-state matched expectations.
except one thing:
rent-exempt threshold dropped below minimum after transfer.
not caught in test.
caught in fork.
yes, that is a bug.
coming from Foundry? fuzzing on solana is not just calldata mutation.
you are mutating:
- account state
- signer flags
- cpi boundaries
same idea. different failure modes.
forking mainnet does not just give you real state. it removes assumptions.
most programs pass on local validator.
fail within 20s on fork. that is the gap people underestimate.
Testing Solana CPIs is hard: inner instructions are hidden from logs by default, transaction-level pre/post checks miss intermediate state bugs, and target programs often only exist on mainnet. Forking solves the mainnet issue, but the first two are on you.
coming from Foundry? here is the rough mapping.
forge test → solforge test https://t.co/rVVrcDAROr() → forked account state with whatever lamports you want vm.prank() → no direct equivalent.
CPI authority is checked at instruction boundary, not impersonated at runtime.