Skip to content

Solana: wallet-provided token metadata channel for swap visualizers (mirror Ethereum) #388

Description

@prasanna-anchorage

Problem

Solana swap visualizers (jupiter_swap, dflow_aggregator, …) resolve token symbols/decimals from a hard-coded 3-token table (get_token_info in chain_parsers/visualsign-solana/src/utils/mod.rs). There is no way for a wallet to supply token metadata, so most amounts render as raw base units or truncated mints. Ethereum already has the pattern we want to mirror.

Today

  • SolanaMetadata (proto/parser/parser.proto) carries only IDLs (idl, idl_mappings) — no token metadata.
  • VisualizerContext (chain_parsers/visualsign-solana/src/core/) exposes only an IdlRegistry.
  • Ethereum: EthereumMetadata.assets: map<symbol, TokenMetadata>ContractRegistry::load_chain_metadataformat_token_amount (chain_parsers/visualsign-ethereum/src/{token_metadata.rs,registry.rs}), layered via LayeredRegistry (visualsign/src/registry.rs).

Proposal

  1. Add assets: map<string, TokenMetadata> to SolanaMetadata in proto/parser/parser.proto (+ make generated).
  2. Extract it in SolanaVisualSignConverter (core/visualsign.rs) and carry a token registry on VisualizerContext, layered over the static table via LayeredRegistry.
  3. Replace static get_token_info lookups with a registry lookup so swap presets render symbol/decimals via create_amount_field.

Notes

  • DFlow additionally needs ALT-resolved mints before its swap economics (quoted_out_amount) can benefit — the output mint lives in an ALT-loaded account. The seam is documented in dflow_aggregator::push_swap_economics.

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions