Skip to main content

Crate soltrace

Crate soltrace 

Source
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

FlagDefaultEffect
devnet-onlyoffCompiles out all emit! calls. Enable in mainnet builds.
no-entrypointoffPasses 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 SolTraceEvent at LogLevel::Debug.
sol_error
Emits a SolTraceEvent at LogLevel::Error.
sol_info
Emits a SolTraceEvent at LogLevel::Info.
sol_log
Emits a structured SolTraceEvent with a Borsh-serialized payload.
sol_trace
Emits a SolTraceEvent at LogLevel::Trace.
sol_warn
Emits a SolTraceEvent at LogLevel::Warn.