# Orchestrators can't revert Solana orders

Genius Solana revert-order builder marked the trader account as a signer, so orchestrator-signed revert transactions always fail and orders stay stuck.

- Payout: Contest reward
- Severity: high
- Program: Genius
- Credited: Jonatas Martins
- Disclosed: 2025-09-04
- Write-up quality: 6/10
- Original: https://cdn.cantina.xyz/reports/cantina_competition_genius_jul2025.pdf#3.1.1
- Library page: https://bugbountylibrary.com/r/cantina%3Agenius_jul2025%3A3.1.1
- Tags: domain:web3 impact:dos kind:contest platform:cantina sev:high tech:solana technique:source-review vuln:business-logic vuln:dos

**Target:** Solana transaction builder (svm-transaction-builder.ts / genius-solana-pool.ts getRevertOrderTx)
**Root cause:** getRevertOrderTx sets the trader AccountMeta isSigner=true, but the on-chain RevertOrder struct declares trader as a non-signer AccountInfo and only the orchestrator signs, so the transaction fails signature verification.
**Steps:**
1. Read getRevertOrderTx in genius-solana-pool.ts and note `{ pubkey: trader, isSigner: true, isWritable: true }` in the instruction keys.
2. Compare with the Solana program's RevertOrder struct where `trader: AccountInfo<'info>` is not a Signer.
3. Observe only the orchestrator signature is supplied when submitting the revert transaction.
4. Submit a revert tx as orchestrator: it fails because the trader signature is required but absent, leaving the order un-reverted.
**How found:** Code review of the revert-order transaction builder, cross-checking the client-side AccountMeta isSigner flags against the on-chain account struct's Signer/AccountInfo types.
**Insight:** When auditing Solana clients, diff every AccountMeta isSigner/isWritable flag against the on-chain account struct's Signer/AccountInfo type; a mismatch silently makes transactions unexecutable rather than reverting cleanly.
