From 3d1437922f17a38caba8b07165af1a7270b72dca Mon Sep 17 00:00:00 2001 From: Nimrod Teich Date: Tue, 2 Jun 2026 15:44:51 +0300 Subject: [PATCH 1/2] feat(chains): add logos for all enabled lava-specs chains Fill the chain-logo gap against the lava-specs chain list. Every enabled, non-infra spec index now resolves to an icon (121 chains, was 34 logos). - Add 29 real/official brand SVGs (celestia, osmosis, injective, scroll, zksync, ton, tezos, ripple, litecoin, dogecoin, casper, iota, juno, secret, stride, mantle, manta-pacific, polkadot, worldchain, canto, agoric, koii, elys, namada, fuel, kakarot, berachain, eth-beacon, side). - Add 27 aliases so testnet/variant indexes reuse their mainnet logo (e.g. celestiata/celestiatm -> celestia, suit -> sui, lav1 -> lava, monadt -> monad, cardanot -> cardano, zksyncsp -> zksync). - Extend chain-icons tests with new-chain and alias cases. No consumer changes: the resolver is convention + alias driven, so adding files and aliases is the intended extension point. Icons still fall back to a lettered chip via onError for any chain not yet covered. --- apps/web/public/chains/agr.svg | 8 ++ apps/web/public/chains/bera.svg | 5 + apps/web/public/chains/canto.svg | 49 ++++++++ apps/web/public/chains/casper.svg | 8 ++ apps/web/public/chains/celestia.svg | 52 ++++++++ apps/web/public/chains/doge.svg | 1 + apps/web/public/chains/elys.svg | 29 +++++ apps/web/public/chains/ethbeacon.svg | 1 + apps/web/public/chains/fuelnetwork.svg | 3 + apps/web/public/chains/injective.svg | 10 ++ apps/web/public/chains/iota.svg | 1 + apps/web/public/chains/jun1.svg | 43 +++++++ apps/web/public/chains/kakarott.svg | 4 + apps/web/public/chains/koii.svg | 5 + apps/web/public/chains/ltc.svg | 1 + apps/web/public/chains/mantapacific.svg | 10 ++ apps/web/public/chains/mantle.svg | 3 + apps/web/public/chains/namtse.svg | 4 + apps/web/public/chains/osmosis.svg | 118 ++++++++++++++++++ apps/web/public/chains/polkadotassethub.svg | 1 + apps/web/public/chains/scroll.svg | 9 ++ apps/web/public/chains/secret.svg | 6 + apps/web/public/chains/sidet.svg | 16 +++ apps/web/public/chains/stride.svg | 4 + apps/web/public/chains/tezos.svg | 1 + apps/web/public/chains/ton.svg | 1 + apps/web/public/chains/worldchain.svg | 3 + apps/web/public/chains/xrp.svg | 1 + apps/web/public/chains/zksync.svg | 4 + .../web/src/lib/__tests__/chain-icons.test.ts | 19 +++ packages/shared/src/utils/chain-icons.ts | 27 ++++ 31 files changed, 447 insertions(+) create mode 100644 apps/web/public/chains/agr.svg create mode 100644 apps/web/public/chains/bera.svg create mode 100644 apps/web/public/chains/canto.svg create mode 100644 apps/web/public/chains/casper.svg create mode 100644 apps/web/public/chains/celestia.svg create mode 100644 apps/web/public/chains/doge.svg create mode 100644 apps/web/public/chains/elys.svg create mode 100644 apps/web/public/chains/ethbeacon.svg create mode 100644 apps/web/public/chains/fuelnetwork.svg create mode 100644 apps/web/public/chains/injective.svg create mode 100644 apps/web/public/chains/iota.svg create mode 100644 apps/web/public/chains/jun1.svg create mode 100644 apps/web/public/chains/kakarott.svg create mode 100644 apps/web/public/chains/koii.svg create mode 100644 apps/web/public/chains/ltc.svg create mode 100644 apps/web/public/chains/mantapacific.svg create mode 100644 apps/web/public/chains/mantle.svg create mode 100644 apps/web/public/chains/namtse.svg create mode 100644 apps/web/public/chains/osmosis.svg create mode 100644 apps/web/public/chains/polkadotassethub.svg create mode 100644 apps/web/public/chains/scroll.svg create mode 100644 apps/web/public/chains/secret.svg create mode 100644 apps/web/public/chains/sidet.svg create mode 100644 apps/web/public/chains/stride.svg create mode 100644 apps/web/public/chains/tezos.svg create mode 100644 apps/web/public/chains/ton.svg create mode 100644 apps/web/public/chains/worldchain.svg create mode 100644 apps/web/public/chains/xrp.svg create mode 100644 apps/web/public/chains/zksync.svg diff --git a/apps/web/public/chains/agr.svg b/apps/web/public/chains/agr.svg new file mode 100644 index 0000000..119059e --- /dev/null +++ b/apps/web/public/chains/agr.svg @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/apps/web/public/chains/bera.svg b/apps/web/public/chains/bera.svg new file mode 100644 index 0000000..743b5f6 --- /dev/null +++ b/apps/web/public/chains/bera.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/chains/canto.svg b/apps/web/public/chains/canto.svg new file mode 100644 index 0000000..85caf97 --- /dev/null +++ b/apps/web/public/chains/canto.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/chains/casper.svg b/apps/web/public/chains/casper.svg new file mode 100644 index 0000000..b839cd7 --- /dev/null +++ b/apps/web/public/chains/casper.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/apps/web/public/chains/celestia.svg b/apps/web/public/chains/celestia.svg new file mode 100644 index 0000000..362ba91 --- /dev/null +++ b/apps/web/public/chains/celestia.svg @@ -0,0 +1,52 @@ + + + + + + + + + diff --git a/apps/web/public/chains/doge.svg b/apps/web/public/chains/doge.svg new file mode 100644 index 0000000..c22bf09 --- /dev/null +++ b/apps/web/public/chains/doge.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/web/public/chains/elys.svg b/apps/web/public/chains/elys.svg new file mode 100644 index 0000000..946b125 --- /dev/null +++ b/apps/web/public/chains/elys.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/apps/web/public/chains/ethbeacon.svg b/apps/web/public/chains/ethbeacon.svg new file mode 100644 index 0000000..c761cef --- /dev/null +++ b/apps/web/public/chains/ethbeacon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/web/public/chains/fuelnetwork.svg b/apps/web/public/chains/fuelnetwork.svg new file mode 100644 index 0000000..ddbcdca --- /dev/null +++ b/apps/web/public/chains/fuelnetwork.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/web/public/chains/injective.svg b/apps/web/public/chains/injective.svg new file mode 100644 index 0000000..9cc8214 --- /dev/null +++ b/apps/web/public/chains/injective.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/apps/web/public/chains/iota.svg b/apps/web/public/chains/iota.svg new file mode 100644 index 0000000..229f8d4 --- /dev/null +++ b/apps/web/public/chains/iota.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/web/public/chains/jun1.svg b/apps/web/public/chains/jun1.svg new file mode 100644 index 0000000..9a3c803 --- /dev/null +++ b/apps/web/public/chains/jun1.svg @@ -0,0 +1,43 @@ + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/apps/web/public/chains/kakarott.svg b/apps/web/public/chains/kakarott.svg new file mode 100644 index 0000000..cd0e10c --- /dev/null +++ b/apps/web/public/chains/kakarott.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/web/public/chains/koii.svg b/apps/web/public/chains/koii.svg new file mode 100644 index 0000000..5de7e1b --- /dev/null +++ b/apps/web/public/chains/koii.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/web/public/chains/ltc.svg b/apps/web/public/chains/ltc.svg new file mode 100644 index 0000000..9afc706 --- /dev/null +++ b/apps/web/public/chains/ltc.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/web/public/chains/mantapacific.svg b/apps/web/public/chains/mantapacific.svg new file mode 100644 index 0000000..43558b1 --- /dev/null +++ b/apps/web/public/chains/mantapacific.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/apps/web/public/chains/mantle.svg b/apps/web/public/chains/mantle.svg new file mode 100644 index 0000000..47bddc9 --- /dev/null +++ b/apps/web/public/chains/mantle.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/web/public/chains/namtse.svg b/apps/web/public/chains/namtse.svg new file mode 100644 index 0000000..71c7dc6 --- /dev/null +++ b/apps/web/public/chains/namtse.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/apps/web/public/chains/osmosis.svg b/apps/web/public/chains/osmosis.svg new file mode 100644 index 0000000..395eadd --- /dev/null +++ b/apps/web/public/chains/osmosis.svg @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/web/public/chains/polkadotassethub.svg b/apps/web/public/chains/polkadotassethub.svg new file mode 100644 index 0000000..7751a9c --- /dev/null +++ b/apps/web/public/chains/polkadotassethub.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/web/public/chains/scroll.svg b/apps/web/public/chains/scroll.svg new file mode 100644 index 0000000..5e93c52 --- /dev/null +++ b/apps/web/public/chains/scroll.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/web/public/chains/secret.svg b/apps/web/public/chains/secret.svg new file mode 100644 index 0000000..65ac1e9 --- /dev/null +++ b/apps/web/public/chains/secret.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/apps/web/public/chains/sidet.svg b/apps/web/public/chains/sidet.svg new file mode 100644 index 0000000..f10bd3f --- /dev/null +++ b/apps/web/public/chains/sidet.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/apps/web/public/chains/stride.svg b/apps/web/public/chains/stride.svg new file mode 100644 index 0000000..68d1e18 --- /dev/null +++ b/apps/web/public/chains/stride.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/web/public/chains/tezos.svg b/apps/web/public/chains/tezos.svg new file mode 100644 index 0000000..5f9c35b --- /dev/null +++ b/apps/web/public/chains/tezos.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/web/public/chains/ton.svg b/apps/web/public/chains/ton.svg new file mode 100644 index 0000000..df6fe70 --- /dev/null +++ b/apps/web/public/chains/ton.svg @@ -0,0 +1 @@ +TON \ No newline at end of file diff --git a/apps/web/public/chains/worldchain.svg b/apps/web/public/chains/worldchain.svg new file mode 100644 index 0000000..51afe14 --- /dev/null +++ b/apps/web/public/chains/worldchain.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/web/public/chains/xrp.svg b/apps/web/public/chains/xrp.svg new file mode 100644 index 0000000..250cbfa --- /dev/null +++ b/apps/web/public/chains/xrp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/web/public/chains/zksync.svg b/apps/web/public/chains/zksync.svg new file mode 100644 index 0000000..8a9b95d --- /dev/null +++ b/apps/web/public/chains/zksync.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/web/src/lib/__tests__/chain-icons.test.ts b/apps/web/src/lib/__tests__/chain-icons.test.ts index 234ea16..e8846a9 100644 --- a/apps/web/src/lib/__tests__/chain-icons.test.ts +++ b/apps/web/src/lib/__tests__/chain-icons.test.ts @@ -13,6 +13,25 @@ describe("getChainIcon", () => { expect(getChainIcon("NEWCHAIN")).toBe("/chains/newchain.svg"); }); + it("resolves newly-added chains to their own icon file", () => { + expect(getChainIcon("CELESTIA")).toBe("/chains/celestia.svg"); + expect(getChainIcon("OSMOSIS")).toBe("/chains/osmosis.svg"); + expect(getChainIcon("INJECTIVE")).toBe("/chains/injective.svg"); + expect(getChainIcon("ZKSYNC")).toBe("/chains/zksync.svg"); + expect(getChainIcon("XRP")).toBe("/chains/xrp.svg"); + }); + + it("aliases testnet / variant specIds onto their mainnet icon", () => { + expect(getChainIcon("CELESTIATA")).toBe("/chains/celestia.svg"); + expect(getChainIcon("CELESTIATM")).toBe("/chains/celestia.svg"); + expect(getChainIcon("SUIT")).toBe("/chains/sui.svg"); + expect(getChainIcon("LAV1")).toBe("/chains/lava.svg"); + expect(getChainIcon("MONADT")).toBe("/chains/monad.svg"); + expect(getChainIcon("CARDANOT")).toBe("/chains/cardano.svg"); + expect(getChainIcon("BERAT2")).toBe("/chains/bera.svg"); + expect(getChainIcon("ZKSYNCSP")).toBe("/chains/zksync.svg"); + }); + it("is case-insensitive on input", () => { expect(getChainIcon("FVMT")).toBe("/chains/filecoin.svg"); expect(getChainIcon("fvmt")).toBe("/chains/filecoin.svg"); diff --git a/packages/shared/src/utils/chain-icons.ts b/packages/shared/src/utils/chain-icons.ts index 5bbb53a..02822c5 100644 --- a/packages/shared/src/utils/chain-icons.ts +++ b/packages/shared/src/utils/chain-icons.ts @@ -13,6 +13,7 @@ /** Maps lowercased specId → icon filename (without .svg extension). */ const ALIASES: Record = { + agrt: "agr", alfajores: "celo", apt1: "aptos", arbitrum: "arbitrum-one", @@ -28,14 +29,21 @@ const ALIASES: Record = { bases: "base", bch: "bitcoincash", bcht: "bitcoincash", + berat: "bera", + berat2: "bera", blastsp: "blast", bsc: "bsc", bsct: "bsc", btc: "bitcoin", btct: "bitcoin", + cardanot: "cardano", + caspert: "casper", celestiat: "celestia", + celestiata: "celestia", + celestiatm: "celestia", cosmoshub: "cosmos-hub", cosmoshubt: "cosmos-hub", + doget: "doge", eth1: "ethereum", evmost: "evmos", ftm250: "fantom", @@ -45,25 +53,44 @@ const ALIASES: Record = { hederat: "hedera", hol1: "ethereum", hyperliquidt: "hyperliquid", + injectivet: "injective", + iotat: "iota", + junt1: "jun1", + koiit: "koii", + lav1: "lava", + ltct: "ltc", + mantapacifict: "mantapacific", + monadt: "monad", movementt: "movement", neart: "near", optm: "optimism", optms: "optimism", + osmosist: "osmosis", + polkadotassethubt: "polkadotassethub", polygon: "polygon", polygona: "polygon", + scrolls: "scroll", + secretp: "secret", sep1: "ethereum", solanat: "solana", sonict: "sonic", spark: "fuse", strgz: "stargaze", strgzt: "stargaze", + stridet: "stride", strk: "starknet", strks: "starknet", + suit: "sui", + tezost: "tezos", + tont: "ton", trx: "tron", trxt: "tron", uniont: "union", + worldchains: "worldchain", xlm: "stellar", xlmt: "stellar", + xrpt: "xrp", + zksyncsp: "zksync", }; /** Returns the icon filename (no extension) for a given specId. */ From 648a94952ddcbf4df5b9829bad0ebe614d5aaf90 Mon Sep 17 00:00:00 2001 From: Nimrod Teich Date: Tue, 2 Jun 2026 15:52:14 +0300 Subject: [PATCH 2/2] fix(chains): correct mantle and casper logos The initial mantle.svg was a spiky-asterisk mark (wrong); casper.svg was a 'CSPR name' wordmark with an odd orbit glyph (wrong). - mantle.svg -> official segmented-aperture mark (SmolDapp tokenAssets, chainId 5000) - casper.svg -> official dotted-C mark (web3icons CSPR) Both visually verified rendered on a dark background. --- apps/web/public/chains/casper.svg | 9 ++------- apps/web/public/chains/mantle.svg | 5 +++-- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/apps/web/public/chains/casper.svg b/apps/web/public/chains/casper.svg index b839cd7..d2febc8 100644 --- a/apps/web/public/chains/casper.svg +++ b/apps/web/public/chains/casper.svg @@ -1,8 +1,3 @@ - - - - - - - + + diff --git a/apps/web/public/chains/mantle.svg b/apps/web/public/chains/mantle.svg index 47bddc9..dbbf58c 100644 --- a/apps/web/public/chains/mantle.svg +++ b/apps/web/public/chains/mantle.svg @@ -1,3 +1,4 @@ - - + + +