{namespace}_solana schema.
How to submit
- Go to dune.com/contracts/new (you must be logged in).
- In “Search for decoding submission”, open the blockchain dropdown and select Solana.
- Enter the program address (Solana program ID). For Anchor programs, Dune may fetch the IDL from chain and pre-fill it.
- Select program type: Anchor, Native, or System.
- In “Program information”, fill in project name, program name, start block slot (and optionally end block slot), and paste or edit the IDL. The preview can help you find a suitable start slot for new programs or upgrades.
- Click Submit. The submission is validated (client- and server-side); if validation passes, it is sent to the pipeline and you are redirected to your workspace Contracts page. You can also check status under Settings → Contracts.
Submit a Solana program
Select Solana, then fill program address, type, names, slot range, and IDL.
Explore decoded Solana data
Learn how decoded tables are named and how to query them.
What you need to submit
Writing an IDL for native programs
Native programs don’t use Anchor, so there is no auto-generated IDL. You need to construct one manually in Anchor IDL format, using the program’s source code or documentation as the reference. Key things to get right:- Instruction discriminators — Native programs typically identify instructions via the first byte(s) of instruction data (e.g. a
u8enum variant index). Check the program’s Rust source for the instruction enum to find the correct discriminator value for each instruction. - Argument types — All instruction arguments must be borsh-serializable. Map the Rust types in the instruction struct fields to their IDL equivalents (e.g.
u64,i64,publicKey,bool, custom structs defined intypes). - Account ordering — List accounts in
accountsin exactly the order the program expects them. The names you give them will become theaccount_<name>columns in the decoded table. - Program name — Set
name(ormetadata.name) to match the program name you enter in the submission form. Use only letters, numbers, and underscores.
Pack/BorshDeserialize implementations in the Rust source. If source is unavailable, transaction data on Solscan or Explorer can help you reverse-engineer the instruction layout.
IDL requirements
Your IDL is validated in the UI and server-side before approval. The following must hold:- Valid JSON — No trailing commas, valid escaping. Doc comments and
errorsarrays are stripped during validation. - Program name — Must be set (in
metadata.nameor top-levelname) and contain only letters, numbers, and underscores (no hyphens). - Custom types — Every custom type referenced in instructions, accounts, or other types must be defined in the
typesarray. - Instruction args — Only types that use borsh serialization are allowed in instruction arguments. Other serializations (e.g. bytemuck) are not supported for instruction decoding.
- No generics — IDLs that use generic type definitions are not supported.
New vs upgrade submissions
- New program — First time submitting this program (no existing entry for this project + program ID). In the UI, use submission type New. Provide the IDL and the slot range where it is valid.
- Upgrade — The program is already decoded and you are adding a new IDL version (e.g. after a program upgrade). Use submission type Upgrade in the UI.
- Soft upgrade: Your new start block slot is after the end of the current active entry (no overlap). These are approved automatically. The previous version is closed at
end_slot = your start_slot, and the new version is added. - Hard upgrade: Your new start block slot overlaps with an existing version’s range. These are marked for manual review so the team can confirm slot boundaries and avoid conflicting decoding.
- Soft upgrade: Your new start block slot is after the end of the current active entry (no overlap). These are approved automatically. The previous version is closed at
Submission status and what happens next
After you submit:- Pending — The submission is in the queue and will be validated (IDL checks, upgrade logic).
- Approved — Validation passed. The submission is then processed and written to the decoding pipeline (
solana.programsand related systems). - Rejected — Validation failed (e.g. invalid IDL, empty required field). Check the rejection reason and fix the submission.
- Needs manual review — Typically a hard upgrade (overlapping slots). The team will review and either approve or reject.
- Processed — The program has been written to the pipeline. Decoded tables will appear and backfill; this can take some time (similar to EVM decoding latency).
Decoded table naming and usage
Once processed, decoded instructions appear as tables named:whirlpool_solana.whirlpool_call_initializePool. Columns include the decoded instruction arguments and account arguments (with a call_ prefix for inherited fields like call_tx_id, call_block_time). For details and examples, see Solana IDL decoded tables.
Summary
For more on querying decoded Solana data, see IDL decoded tables. For EVM contract decoding, see How contract decoding works.