Books that prove themselves
The audit-ready subledger for Solana treasuries. Every swap, fee claim and multisig payout — decoded, mathematically reconciled (Δ = 0) and sealed for your independent auditor.
{ "ix": 0, "program": "ComputeBudget", "SetPriority": 12000 }{ "ix": 1, "program": "JUP6Lkb…", "route": { "hops": 3 },"inner": ["Whirlpool::swap SOL → USDC","Meteora::dlmm_swap USDC → JUP","Raydium::swap_base_in JUP → USDC" ] }{ "fee": 5000, "cu": 312884, "logs": 41 }
Decoders for the protocols your treasury actually uses
Solana breaks normal crypto accounting
Generic tools read token transfers. Solana's value moves through inner instructions, temporary accounts and program-held fees. These are the five cases we see break books most often.
One swap routes SOL → mSOL → USDC → JUP through intermediate WSOL and ATA accounts. Generic tools book 3 phantom swaps and a fake realized gain on every hop.
Built for the month-end close
Every entry decoded, balanced against chain state, reviewed, and sealed into an export that reproduces byte for byte.
Merkle-sealed entries
Every ledger line hashes into one root. Any entry can be proven back to its signature.
Balance invariant
If pre + in − out − fees ≠ post, it doesn't pass. No silent misses.
Review queue
Uncertain items get flagged. Approve, reclassify or attach a memo.
Deterministic export
Pinned ruleset, decoder and slot range. Same inputs, same bytes, every time.
Real journal entries, not a CSV of transfers
Every decoded event posts balanced debits and credits to your chart of accounts — mapped to the codes your controller and auditor already use.
| Code | Account | Debit | Credit | Memo |
|---|---|---|---|---|
| 1010-SOL | Assets : Current : Vaults : Squads Primary (SOL) | 61.53 | 0.4102 SOL @ $150.00 | |
| 1020-USDC | Assets : Current : Vaults : Squads Primary (USDC) | 83.88 | bins 8422–8423 | |
| 5200-GAS | Expenses : Network : Base + Priority Fees | 0.03 | 0.000185 SOL | |
| 1010-SOL | Assets : Current : Vaults : Squads Primary (SOL) | 0.03 | fee payer | |
| 4100-YIELD | Revenue : DeFi Yield : DLMM Fee Accrual | 145.41 | RULE_DLMM_CLAIM_01 | |
| Σ totals (USD) | 145.44 | 145.44 | balanced · Δ 0.00 | |
Pull account codes from QuickBooks, Xero or NetSuite. Map once; every rule respects it.
Fair value from the block timestamp, with the price source and pool recorded on the line.
FIFO, HIFO or specific-ID — chosen per entity, locked per close.
Five steps from chain to closed books
Same inputs, same ruleset, same output — every time. That's what lets an auditor re-run your close instead of trusting it.
Replay every confirmed slot in the period from our own archival index. No RPC sampling.
Decoders we publish, version and test
Narrow on purpose. Each decoder is pinned to a program ID, tested against a fixture set of mainnet transactions, and versioned into every audit seal.
| Protocol | Program ID | Instructions | Ver. | Fixture pass |
|---|---|---|---|---|
Jupiter Aggregator v6 | JUP6LkbZ…TaV4 | route · sharedAccountsRoute · exactOutRoute | 3.2.0 | 99.6% |
Meteora DLMM | LBUZKhRx…Pwxo | claimFee · addLiquidityByWeight · removeLiquidity | 2.1.4 | 99.1% |
Squads v4 | SQDS4ep6…2pCf | vaultTransactionExecute · batchExecute | 1.8.0 | 100.0% |
Kamino Lend | KLend2g3…gmjD | depositReserveLiquidity · borrowObligationLiquidity | 1.3.2 | 98.4% |
Token-2022 | TokenzQd…xuEb | transferCheckedWithFee · withdrawWithheld | 1.1.0 | 99.9% |
Raydium CLMMbeta | CAMMCzo5…rWqK | swapV2 · increaseLiquidityV2 · collectFees | 0.9.1 | 96.2% |
Jito tip accounts | 96gYZGLn…5 +7 | system transfer (tip set match) | 1.0.3 | 100.0% |
Drift v2Q1 2027 | dRiftyHA…33UH | placePerpOrder · settlePnl · deposit | — | planned |
Unknown programs are never guessed. They route to the review queue with the raw instruction attached.
Don't trust us. Re-run it.
'Cryptographically reconciled' means three concrete things: every line links to a signature and slot, the whole set is sealed by one Merkle root, and the ruleset that produced it is pinned so anyone can reproduce it.
{
"entity": "Example DAO Treasury",
"period": "2026-07-01/2026-09-30",
"slot_range": [288112000, 294870512],
"wallets": 12,
"ruleset_version": "mb-rules-2026.09.2",
"decoder_engine": "2.4.1",
"price_source": "pyth+pool-twap@slot",
"line_items": 41208,
"merkle_root": "9f3a1d…7b04c21e",
"invariant": { "wallets_balanced": 12, "max_delta": "0.00" },
"reviewed_by": ["controller", "external_cpa"]
}Each ledger line carries signature, slot, instruction index and the rule that fired.
Change one cent on one line and the Merkle root no longer matches the seal.
Pinned ruleset, decoder and price source. Same slot range in, same books out.
What your auditor actually receives
Three artifacts from one sealed close. Each carries the same Merkle root in its header.
Date,JournalNo,Account,Debit,Credit,Memo 2026-09-14,JE-0418,1010-SOL,61.53,,DLMM claim · 4hVt…9wQe 2026-09-14,JE-0418,1020-USDC,83.88,,DLMM claim · 4hVt…9wQe 2026-09-14,JE-0418,5200-GAS,0.03,,priority fee 2026-09-14,JE-0418,1010-SOL,,0.03,fee payer 2026-09-14,JE-0418,4100-YIELD,,145.41,RULE_DLMM_CLAIM_01
Why multi-chain subledgers break on Solana
Most crypto accounting tools were engineered for Ethereum’s linear execution model. Solana’s nested invocations, bin shifts and micro-fees leave them guessing.
| Capability | MerkleBooks | Multi-chain subledgers | Spreadsheets / scripts |
|---|---|---|---|
| Solana engine | Native runtime decoder Unpacks nested CPIs, Token-2022 fee extensions and Jito tips. | EVM-first adapter Inner instructions often land as “Unknown contract”. | None Custom RPC scripts break on every protocol upgrade. |
| Reconciliation rule | Invariant Δ = 0 Pre + In − Out − Fee = Post. Unknowns go to review, never faked. | Heuristic matching Obvious transfers tie out; multi-hop swaps are a black box. | Manual formulas Missed fees and decimal errors go unnoticed. |
| Audit defense | Merkle-sealed workpapers SHA-256 leaves, pinned ruleset, open CLI verifier. | Static CSV export No tamper evidence or rule transparency for auditors. | Editable spreadsheet No version pinning; heavy auditor scrutiny. |
| DeFi depth | Protocol decoders Meteora DLMM claims, Jupiter exact-out, Kamino collateral. | Generic transfers Can’t separate yield harvest from principal. | Manual entry 20–40 hrs/month matching signatures. |
| Onboarding | Paste an address Squads vault or any treasury. Ledger in seconds. | Sales gate Demo calls, security review, annual contract. | Immediate But labor-intensive every single month. |
| Price | $499 – $1,499 / mo Published pricing. Cancel anytime. | $20k – $60k+ / yr Plus implementation fees. | Hidden cost $15k–$30k extra CPA cleanup at year-end. |
The end of “Unknown contract interaction”
A Jupiter route through three pools becomes one GAAP entry: Dr target asset, Cr source asset, Dr network fee — not three orphan transfers.
Audit-ready math, not best-effort matching
Every line is held to the balance invariant down to the lamport before it is sealed under a Merkle root.
Built for Squads from day zero
No private keys, no sales rep. Paste a public vault address and inspect the subledger immediately.
Competitor pricing and capabilities are estimates from public information and may change.
Priced for treasuries
Billed on monthly transaction volume. Every plan includes the balance invariant.
- 5 treasuries · Squads
- 25,000 tx / month
- Review queue & close
- Sealed CPA audit pack
- 2 auditor seats
- Unlimited treasuries
- Custom decoders
- Ruleset versioning & SLA
- Unlimited auditor seats
Built for the people who sign off
No. MerkleBooks is read-only. You give us public wallet or Squads vault addresses; we never sign anything.