How MoniTag Resolution Works , Username to Address Across Every Chain
MoniTag resolution turns @username into the correct blockchain address per chain. Normalization rules, 60-second cache TTL, EVM lowercase + Solana Base58, fail-closed safety, and cache invalidation triggers.
How MoniTag resolution works
When you type @alice and pick a chain, Monipay turns the username into the correct on-chain address for that chain in a deterministic, cached, fail-closed pipeline.
The resolution pipeline
- Normalize. Strip the leading
@, lowercase the result, strip surrounding whitespace.@Alice,alice, andaliceare equivalent. - Look up. Query the MoniTag registry (Supabase / on-chain registry) scoped to the chosen chain ,
base_address,bsc_address,solana_address,tempo_address,celo_address, etc. - Cache. Store the result in an in-memory +
localStorage-backed cache with a 60-second TTL. - Return. EVM addresses are returned lowercase (canonical for downstream signing and indexing); Solana addresses are returned in Base58 (the canonical Solana format).
- Fail closed. If the MoniTag has no wallet bound on the chosen chain, the send is blocked with a clear error , never silently routed to a different chain.
Why fail-closed matters
A username can resolve on one chain and not another. @alice might have a Base address but no Solana keypair. Auto-routing to "the chain alice is on" sounds friendly but creates two problems:
- The sender thought they were sending on chain X. The receipt says chain Y. Reconciliation breaks.
- The sender's MoniBot command (
send $5 to @alice on base) is explicit , overriding it would be wrong.
Monipay therefore returns an unambiguous no address on this chain error, surfaces a "fund on chain X instead" suggestion in the UI, and lets the sender decide.
Cache invalidation
The 60-second TTL is short enough to make username changes (rare) propagate quickly, and long enough to absorb the burst of repeat lookups during a multi-recipient payment. The cache is invalidated immediately on:
- A social-link change for the local user
- An account update event broadcast over Supabase realtime
- A MoniTag transfer event in the on-chain registry (where applicable)
Address normalization rules
- EVM chains , always lowercase. The Monipay database stores lowercase; the signing flow lowercases before hashing; the explorer URLs lowercase before linking. Mixed-case EIP-55 checksumming is for display only.
- Solana , Base58, case-sensitive, no normalization. Validation rejects any string that fails Base58 parsing.
- Tempo , same format as EVM (0x-prefixed hex); lowercase normalization applies.
Performance
The cache hit rate during ordinary use is high , a typical send hits 3–5 cache reads per recipient (lookup, balance check, receipt render). A multi-recipient batch of 10 hits the same MoniTag rows repeatedly, all served from cache after the first lookup.