Expand description
SolTrace — structured, Borsh-serialized Anchor events for Solana programs.
§Why this exists
Solana programs rely on msg! for observability, but msg! performs string
formatting on-chain. For a swap instruction logging an amount and a pubkey,
msg! costs roughly 11,000 CU. SolTrace replaces that with a single
emit! call over a Borsh-serialized struct, cutting the same log entry to
~781 CU — a 92.96% reduction.
The emitted events are standard Anchor events, visible as Program data:
entries in transaction metadata and decodable by any Borsh-aware client.
§Quick start
ⓘ
use anchor_lang::prelude::*;
use soltrace::{sol_info, sol_warn};
#[derive(AnchorSerialize, AnchorDeserialize)]
pub struct SwapExecuted {
pub amount: u64,
pub user: Pubkey,
}
pub fn swap(ctx: Context<Swap>, amount: u64) -> Result<()> {
sol_info!("swap_executed", SwapExecuted {
amount,
user: ctx.accounts.user.key(),
});
Ok(())
}§Feature flags
| Flag | Default | Effect |
|---|---|---|
devnet-only | off | Compiles out all emit! calls. Enable in mainnet builds. |
no-entrypoint | off | Passes through to anchor-lang/no-entrypoint. |
Re-exports§
pub use event::SolTraceEvent;pub use level::LogLevel;
Modules§
- event
- The Anchor event struct emitted by every
sol_log!call. - level
- Log severity levels for SolTrace events.
Macros§
- sol_
debug - Emits a
SolTraceEventatLogLevel::Debug. - sol_
error - Emits a
SolTraceEventatLogLevel::Error. - sol_
info - Emits a
SolTraceEventatLogLevel::Info. - sol_log
- Emits a structured
SolTraceEventwith a Borsh-serialized payload. - sol_
trace - Emits a
SolTraceEventatLogLevel::Trace. - sol_
warn - Emits a
SolTraceEventatLogLevel::Warn.