9 KiB
ADR-0034: Solana (SOL) Addition — Trade-Only with Delegated PoS, 9-Decimal Lamport Precision, and Same-Format Address Disambiguation
Status: Accepted (Part 122 cp45, 2026-05-19)
Context:
Following Decred (ADR-0033), Pirate Chain (ADR-0032), Zcash (ADR-0031), Dogecoin (ADR-0030), DAI (ADR-0029), USDC (ADR-0028), Dash (ADR-0027), Litecoin (cp24), Bitcoin Cash (cp21), USDT (Part 121), and the founders' BLURT/BTC/XMR set, Morphit adds Solana (SOL) as the fourteenth tradable asset. Solana launched in 2020 as a high-throughput Proof-of-Stake cryptocurrency. Delegated PoS consensus is combined with Proof-of-History sequencing (a verifiable ordering oracle) to achieve transaction throughput several orders of magnitude higher than traditional UTXO chains. Validators stake SOL and process blocks in rotation; no central freeze authority controls the chain.
The chain is transparent at the base layer (sender, recipient, and amount visible on chain). Solana has no native protocol-level mixing protocol; wallet-side address rotation is the user's primary privacy lever.
Decision
1. SOL is a Category-B trade-only asset
Per Memory #23 the fee_method enum stays frozen at {blurt, btc, xmr, waived_first_buy}. SOL therefore ships with canBeTraded: true and canPayListingFee: false, matching the BCH/LTC/DASH/DOGE/USDT/USDC/DAI/ZEC/ARRR/DCR pattern.
2. Single-network mainnet
Solana has devnet/testnet and mainnet-beta. Morphit trades only on mainnet-beta, consistent with every other single-network asset.
3. Address regex — base58 32-44 chars
The canonical registry's addressShape regex accepts the full Solana address range:
^[1-9A-HJ-NP-Za-km-z]{32,44}$
- 32-byte public keys, base58-encoded
- Most addresses are exactly 44 chars; minimum is 32 (leading-zero byte case is rare but valid)
- Base58 alphabet excludes
0,O,I,l
Critical LL #50 case: SOL addresses share their shape with USDT-Solana and USDC-Solana SPL token-account addresses. This is by design — Solana addresses ARE base58 32-byte public keys regardless of whether they hold native SOL, an SPL token-account for USDT, or an SPL token-account for USDC. The asset field on the order disambiguates at the order layer; cp42 address-shape-overlap-smoke documents 23 new SOL-related overlaps (49→72 entries) as intentional allowlist.
Program-Derived Addresses (PDAs): PDAs match the address regex but are off-curve — they have no associated private key and can only be controlled by the owning on-chain program. Sending SOL to a PDA generally works at the protocol level but the recipient cannot move funds out unless the owning program has a withdraw instruction. Morphit accepts the shape; receiver-side wallet UX is responsible for PDA-destination warnings.
Wrapped SOL (wSOL): The mint So11111111111111111111111111111111111111112 is the famous wSOL identifier used for DEX interoperability. Morphit users trade NATIVE SOL — wSOL is not special-cased.
4. 9-decimal lamport precision — NEW jitterSolAmount
Solana uses 9 decimals (1 SOL = 1,000,000,000 lamports). This is a unique smallest-unit precision among Morphit's 14 assets: BTC family is 8, USDT/USDC/DAI is 6, BLURT is 3, XMR is 12. SOL therefore needs its own jitter calibration — no existing jitter function has 9-decimal arithmetic.
The new jitterSolAmount function in apps/web/src/lib/chat/payload.ts provides 9-decimal jitter at 999-lamport range, which at cp45-era SOL price ($150) is approximately $0.00015. Same caveats as the other jitter functions: round-UP-only (never underpay), CSPRNG-derived (not Math.random), idempotent on caller-side memoization. jitterAmountForAsset dispatches asset === 'sol' to the new function.
Per Ken's directive at cp45 ("implement as many of our privacy things with this as we have done with the others so far (jitter, etc)"), amount-jitter is wired same-turn.
5. Transparent base layer with no native mixing
optInPrivacyTech: [] — Solana has no native protocol-level mixing protocol. Privacy is achieved through wallet-side address rotation (Phantom, Solflare, Cake Wallet for SOL, Trust Wallet all derive fresh addresses from HD seeds) and through RPC-provider rotation. The privacy.guides.sol × 10 locales documents these practices.
6. Chat-link explorer default — explorer.solana.com
Operator's 5-explorer survey at addition time. Bundled default is explorer.solana.com — the official Solana project explorer, project-aligned, run by Solana Labs, no third-party tracking, supports SPL token transfers and native SOL transfers, full validator/staking visibility.
| Explorer | Disposition | Rationale |
|---|---|---|
explorer.solana.com |
Chosen | Official Solana project explorer; project-aligned |
solscan.io |
Available | Third-party aggregator; most popular by traffic |
solanabeach.io |
Available | Validator-focused explorer |
oklink.com/solana |
Available | OKX-affiliated, third-party |
solana.fm |
Not surveyed | Per Ken's note at addition time — "not working?"; unreachable |
Operators wanting different defaults override via MORPHIT_FRONTEND_SOL_CHAT_LINK_URL.
7. SOL txid format differs from BTC family
Solana transaction signatures are 64 bytes encoded as base58, surfacing as 87-88-character strings. Notably DIFFERENT from the BTC/ZEC/ARRR/DCR family's 64-hex-character txid convention. The canonical SOL_TXID_RE regex is /^[1-9A-HJ-NP-Za-km-z]{87,88}$/, distinct from every other asset's txid regex.
8. Universal no-favoritism principle (adopted at cp39, reapplied at cp41/cp43/cp45)
Solana ships with chain-level transparency and no native mixing. Per the universal no-favoritism principle adopted at cp39 (ADR-0031 §5) and reapplied at cp41/cp43, Morphit's framing of SOL describes what the chain IS (high-throughput delegated PoS with Proof-of-History sequencing; transparent base layer; wallet-side address rotation as the privacy lever) WITHOUT comparative claims against any other chain. The phrase "the most private" does not appear in any SOL-related copy. The phrase "better than" does not appear. SOL is described factually as a fast PoS chain — neither superior nor inferior to any other Morphit-traded asset.
9. solana: URI scheme (Solana Pay)
The payment-URI builder emits solana:<address>?amount=<decimal> — BIP-21-style. This is the Solana Pay specification. Native SOL transfer only — Morphit doesn't generate Solana Pay URIs for SPL token transfers (USDT/USDC SPL transfers use their own per-asset URI builders).
10. Brand color text-violet-500
Solana's brand gradient runs purple (#9945ff) to green (#19fb9b). text-violet-500 lands the violet accent distinct from all 13 existing assignments (BTC amber-500, USDT amber-400, USDC blue-500, DAI yellow-600, BCH lime-500, LTC slate-400, DASH sky-500, DOGE yellow-500, ZEC yellow-400, ARRR amber-600, XMR orange-500, DCR teal-500, BLURT morphit-emerald). Verified at cp45 via cp42 asset-accent-class-uniqueness-smoke.
11. LL #52 discipline applied
Per cp44 LL #52 (workspace-typecheck-smoke catches type-union widening bugs), no new tech tags were introduced at cp45. SOL's optInPrivacyTech: [] uses an existing union member (the empty array). Final tsc --noEmit on packages/asset-registry/ is clean.
Consequences
- SOL is enabled by default on every fresh Morphit instance. Operators preferring not to support SOL can disable via
MORPHIT_INDEXER_DISABLED_ASSETS="SOL". - The frozen
fee_methodenum is unaffected. Listing fees stay BLURT/BTC/XMR. - Pre-launch operators who configured their instance before cp45 are unaffected — the indexer-client mirror declares
sol?: string | nullas optional and the frontend's defensive-fallback uses the bundledexplorer.solana.comdefault when the response field is missing. - The 23 new cross-asset overlap entries added to
address-shape-overlap-smokedocument the intentional same-format-different-chain class. Future asset additions on Solana-shaped chains (or any chain using 32-byte base58 addresses) extend this allowlist with same-turn discipline. - Users coming from the Solana community see their chain's framing as factual — no Morphit copy compares SOL's throughput or privacy posture against any other chain.
References
- ADR-0026 (Transparent-chain privacy framework).
- ADR-0031 (Zcash addition — established universal no-favoritism principle).
- ADR-0032 (Pirate Chain addition — LL #50 same-format-different-chain).
- ADR-0033 (Decred addition — LL #51 proactive type-union widening discipline).
- Solana protocol — https://docs.solana.com
- Solana Pay specification — https://docs.solanapay.com
- Memory #23 (fee_method enum frozen at BLURT/BTC/XMR).
- Memory #29 (NEW-asset i18n native-en/es/fr/de + EN-fallback discipline).
- Cp32 LL #36 (payment-rail axis same-turn discipline).
- Cp33 CODE-3 (atomically widen all 4 wire-format gates).
- Cp40 LL #49 (defensive smokes verify i18n existence for dynamic-key reads).
- Cp42-J-68 LL #51 + cp44 LL #52 (workspace-wide compiler smoke catches type errors the runtime smoke battery misses).