feat(frontend): add vFDUSD token logo for bridge UI #133

Closed
opened 2026-07-30 03:23:46 +00:00 by PlasticDigits · 13 comments
PlasticDigits commented 2026-07-30 03:23:46 +00:00 (Migrated from gitlab.com)

Summary

Venus vFDUSD is now registered on the CL8Y bridge (BSC LockUnlock ↔ Terra mint_burn). The bridge frontend resolves logos via symbol match against packages/frontend/public/tokens/*.png and LOGO_SYMBOLS in packages/frontend/src/utils/tokenLogos.ts — vFDUSD is not in that set yet, so the UI will show a missing/fallback icon.

Related: ust1-window#19 (Phase 2 UST1↔vFDUSD window deploy).

Live token addresses

Chain Token Address Decimals Bridge mode
BSC Venus vFDUSD 0xC4eF4229FEc74Ccfe17B2bdeF7715fAC740BA0ba 8 LockUnlock
Terra Classic vFDUSD CW20 terra1mnl9azefrqpmu888ar2u6zrcwr80hxlt3avf4300r576cw5ar7esvxsvj3 6 mint_burn

Acceptance criteria

  • Add packages/frontend/public/tokens/VFDUSD.png (same style/size convention as existing token logos, e.g. CL8Y.png / SPACEUSD.png).
  • Add 'VFDUSD' to LOGO_SYMBOLS in packages/frontend/src/utils/tokenLogos.ts.
  • Bridge UI shows the vFDUSD logo when the token is selected / listed (symbol vFDUSD / VFDUSD).
  • Prefer official Venus / FDUSD branding if available; document source in the MR.

Notes

  • Logo lookup is symbol-only (case-insensitive) — filename must be VFDUSD.png.
  • No contract changes required; frontend asset + allowlist only.
## Summary Venus **vFDUSD** is now registered on the CL8Y bridge (BSC LockUnlock ↔ Terra mint_burn). The bridge frontend resolves logos via symbol match against `packages/frontend/public/tokens/*.png` and `LOGO_SYMBOLS` in `packages/frontend/src/utils/tokenLogos.ts` — **vFDUSD** is not in that set yet, so the UI will show a missing/fallback icon. Related: [ust1-window#19](https://gitlab.com/PlasticDigits/ust1-window/-/issues/19) (Phase 2 UST1↔vFDUSD window deploy). ## Live token addresses | Chain | Token | Address | Decimals | Bridge mode | |-------|-------|---------|----------|-------------| | BSC | Venus vFDUSD | `0xC4eF4229FEc74Ccfe17B2bdeF7715fAC740BA0ba` | 8 | LockUnlock | | Terra Classic | vFDUSD CW20 | `terra1mnl9azefrqpmu888ar2u6zrcwr80hxlt3avf4300r576cw5ar7esvxsvj3` | 6 | mint_burn | ## Acceptance criteria - [ ] Add `packages/frontend/public/tokens/VFDUSD.png` (same style/size convention as existing token logos, e.g. `CL8Y.png` / `SPACEUSD.png`). - [ ] Add `'VFDUSD'` to `LOGO_SYMBOLS` in `packages/frontend/src/utils/tokenLogos.ts`. - [ ] Bridge UI shows the vFDUSD logo when the token is selected / listed (symbol `vFDUSD` / `VFDUSD`). - [ ] Prefer official Venus / FDUSD branding if available; document source in the MR. ## Notes - Logo lookup is **symbol-only** (case-insensitive) — filename must be `VFDUSD.png`. - No contract changes required; frontend asset + allowlist only.
PlasticDigits commented 2026-07-30 04:19:21 +00:00 (Migrated from gitlab.com)

mentioned in commit 87061927db

mentioned in commit 87061927dba5fc7819d6941f4bb33fc697e9e7f0
PlasticDigits commented 2026-07-30 04:19:31 +00:00 (Migrated from gitlab.com)

mentioned in merge request !151

mentioned in merge request !151
PlasticDigits commented 2026-07-30 04:19:45 +00:00 (Migrated from gitlab.com)

mentioned in merge request !152

mentioned in merge request !152
PlasticDigits commented 2026-07-30 04:19:59 +00:00 (Migrated from gitlab.com)

Implementation update (!152)

Branch: feat/gl-133-vfdusd-token-logo — MR: https://gitlab.com/PlasticDigits/cl8y-bridge-monorepo/-/merge_requests/12

Acceptance criteria

  • Add packages/frontend/public/tokens/VFDUSD.png (256×256, Venus Protocol branding from this issue’s attachment)
  • Add 'VFDUSD' to LOGO_SYMBOLS in packages/frontend/src/utils/tokenLogos.ts
  • Bridge UI logo resolution for vFDUSD / VFDUSD → /tokens/VFDUSD.png (unit-tested twice via npm run test:run -- src/utils/tokenLogos.test.ts)
  • Prefer official Venus / FDUSD branding; source documented in MR
  • Manual UI check after frontend deploy (token picker / settings) — not done in this change (no live UI deploy from this agent)

Also documented INV-FE-TOKEN-LOGO-1 + skills/agent-frontend-token-logos.md (cross-linked from docs/FRONTEND_BRIDGE_INVARIANTS.md, docs/frontend.md, README, skills/agent-frontend-bridge-chains.md).

Final verification — per-tx + rolling rate limits (2026-07-30T04:16:17Z UTC)

Queried live mainnet; values below are as configured on-chain, not changed by this frontend MR.

BSC — TokenRegistry 0x3d8820EC93748fd4df8eee6B763834a23938B207

Field Raw (base units, 8 decimals) Human (vFDUSD)
isTokenRegistered true —
rateLimitBridge 0xb2A22c74dA8E3642e0EffC107d3Ac362ce885369 (wired) —
min per tx (getRateLimitConfig[0]) 865586527 8.65586527
max per tx (getRateLimitConfig[1]) 86558652777 865.58652777
max per period / 24h rolling (getRateLimitConfig[2]) 86558652777 865.58652777

Token: 0xC4eF4229FEc74Ccfe17B2bdeF7715fAC740BA0ba

BSC — Guard TokenRateLimit 0xD72b2fe3012a2896aef7E3cA561aD11B1542a88c

Field Value
depositLimitPerToken 0 (unset / no guard deposit cap)
withdrawLimitPerToken 0 (unset / no guard withdraw cap)

Terra Classic — bridge terra18m02l2f43c2dagqnz3kfccpgz9pzzz5hk9l5mh5wvr6dcvv47zfqdfs7la

Field Value
Token registered yes (enabled: true, 6 decimals)
Explicit rate_limit config null (not in all_rate_limits)
CW20 total_supply 0
Effective default at withdraw (contract code) per-tx: none (0); per-period: 100e18 when supply is zero (DEFAULT_RATE_LIMIT_IF_ZERO_SUPPLY)
period_usage.used_amount 0
period_usage.remaining_amount 2^128-1 (no configured period cap stored)

Terra CW20: terra1mnl9azefrqpmu888ar2u6zrcwr80hxlt3avf4300r576cw5ar7esvxsvj3

Not done / follow-ups (out of #133 frontend scope)

  • Manual visual check in deployed SPA after merge/deploy.
  • Setting an explicit Terra set_rate_limit for vFDUSD (currently relying on zero-supply default) — operational, not a logo task.
  • Setting non-zero BSC Guard TokenRateLimit deposit/withdraw caps for vFDUSD — optional defense-in-depth; TokenRegistry withdraw caps are already set and rateLimitBridge is wired.
## Implementation update (!152) Branch: `feat/gl-133-vfdusd-token-logo` — MR: https://gitlab.com/PlasticDigits/cl8y-bridge-monorepo/-/merge_requests/12 ### Acceptance criteria - [x] Add `packages/frontend/public/tokens/VFDUSD.png` (256×256, Venus Protocol branding from this issue’s attachment) - [x] Add `'VFDUSD'` to `LOGO_SYMBOLS` in `packages/frontend/src/utils/tokenLogos.ts` - [x] Bridge UI logo resolution for `vFDUSD` / `VFDUSD` → `/tokens/VFDUSD.png` (unit-tested twice via `npm run test:run -- src/utils/tokenLogos.test.ts`) - [x] Prefer official Venus / FDUSD branding; source documented in MR - [ ] Manual UI check after frontend deploy (token picker / settings) — not done in this change (no live UI deploy from this agent) Also documented **INV-FE-TOKEN-LOGO-1** + `skills/agent-frontend-token-logos.md` (cross-linked from `docs/FRONTEND_BRIDGE_INVARIANTS.md`, `docs/frontend.md`, README, `skills/agent-frontend-bridge-chains.md`). ### Final verification — per-tx + rolling rate limits (2026-07-30T04:16:17Z UTC) Queried live mainnet; values below are **as configured on-chain**, not changed by this frontend MR. #### BSC — TokenRegistry `0x3d8820EC93748fd4df8eee6B763834a23938B207` | Field | Raw (base units, 8 decimals) | Human (vFDUSD) | |-------|------------------------------|----------------| | `isTokenRegistered` | `true` | — | | `rateLimitBridge` | `0xb2A22c74dA8E3642e0EffC107d3Ac362ce885369` (wired) | — | | **min per tx** (`getRateLimitConfig`[0]) | `865586527` | **8.65586527** | | **max per tx** (`getRateLimitConfig`[1]) | `86558652777` | **865.58652777** | | **max per period / 24h rolling** (`getRateLimitConfig`[2]) | `86558652777` | **865.58652777** | Token: `0xC4eF4229FEc74Ccfe17B2bdeF7715fAC740BA0ba` #### BSC — Guard `TokenRateLimit` `0xD72b2fe3012a2896aef7E3cA561aD11B1542a88c` | Field | Value | |-------|-------| | `depositLimitPerToken` | `0` (unset / no guard deposit cap) | | `withdrawLimitPerToken` | `0` (unset / no guard withdraw cap) | #### Terra Classic — bridge `terra18m02l2f43c2dagqnz3kfccpgz9pzzz5hk9l5mh5wvr6dcvv47zfqdfs7la` | Field | Value | |-------|-------| | Token registered | yes (`enabled: true`, 6 decimals) | | Explicit `rate_limit` config | **`null`** (not in `all_rate_limits`) | | CW20 `total_supply` | `0` | | Effective default at withdraw (contract code) | **per-tx: none** (`0`); **per-period: `100e18`** when supply is zero (`DEFAULT_RATE_LIMIT_IF_ZERO_SUPPLY`) | | `period_usage.used_amount` | `0` | | `period_usage.remaining_amount` | `2^128-1` (no configured period cap stored) | Terra CW20: `terra1mnl9azefrqpmu888ar2u6zrcwr80hxlt3avf4300r576cw5ar7esvxsvj3` ### Not done / follow-ups (out of #133 frontend scope) - Manual visual check in deployed SPA after merge/deploy. - Setting an explicit Terra `set_rate_limit` for vFDUSD (currently relying on zero-supply default) — operational, not a logo task. - Setting non-zero BSC Guard `TokenRateLimit` deposit/withdraw caps for vFDUSD — optional defense-in-depth; TokenRegistry withdraw caps are already set and `rateLimitBridge` is wired.
PlasticDigits commented 2026-07-30 04:41:36 +00:00 (Migrated from gitlab.com)

Verified: vFDUSD rate limits set to 500 / tx and 5 000 / 24h

On-chain readback matches the intended policy (BSC 8 decimals, Terra 6 decimals).

BSC TokenRegistry setRateLimit — ✅

Field Raw Human
min per tx 0 0
max per tx 50000000000 500 vFDUSD
max per period (24h) 500000000000 5 000 vFDUSD

BSC Guard TokenRateLimit.setLimitsBatch — ✅

Field Raw Human
depositLimitPerToken (24h) 500000000000 5 000 vFDUSD
withdrawLimitPerToken (24h) 500000000000 5 000 vFDUSD

Terra Classic set_rate_limit — ✅

Field Raw Human
max_per_transaction 500000000 500 vFDUSD
max_per_period 5000000000 5 000 vFDUSD
  • CW20: terra1mnl9azefrqpmu888ar2u6zrcwr80hxlt3avf4300r576cw5ar7esvxsvj3
  • Bridge: terra18m02l2f43c2dagqnz3kfccpgz9pzzz5hk9l5mh5wvr6dcvv47zfqdfs7la

All three surfaces now agree on 500 / tx and 5 000 / 24h.

## Verified: vFDUSD rate limits set to 500 / tx and 5 000 / 24h On-chain readback matches the intended policy (BSC 8 decimals, Terra 6 decimals). ### BSC TokenRegistry `setRateLimit` — ✅ | Field | Raw | Human | |-------|-----|-------| | min per tx | `0` | 0 | | max per tx | `50000000000` | **500 vFDUSD** | | max per period (24h) | `500000000000` | **5 000 vFDUSD** | - Token: `0xC4eF4229FEc74Ccfe17B2bdeF7715fAC740BA0ba` - Registry: `0x3d8820EC93748fd4df8eee6B763834a23938B207` - Tx: [`0x59f86cda47aa58bff1f830cab6ededa2f50926136351b4a7cb3281ce2be77b81`](https://bscscan.com/tx/0x59f86cda47aa58bff1f830cab6ededa2f50926136351b4a7cb3281ce2be77b81) (block `112947574`, status success) - Signer: `0xCd4Eb82CFC16d5785b4f7E3bFC255E735e79F39c` ### BSC Guard `TokenRateLimit.setLimitsBatch` — ✅ | Field | Raw | Human | |-------|-----|-------| | `depositLimitPerToken` (24h) | `500000000000` | **5 000 vFDUSD** | | `withdrawLimitPerToken` (24h) | `500000000000` | **5 000 vFDUSD** | - Module: `0xD72b2fe3012a2896aef7E3cA561aD11B1542a88c` - Tx: [`0x50eadf2f87eae60ee3f818c275ea6d7c0de39331533e68b0c391e04282e9fc`](https://bscscan.com/tx/0x50eadf2f87eae60ee3f818c275ea6d7c0de39331533e68b0c391e04282e9fc) (block `112947516`, status success) ### Terra Classic `set_rate_limit` — ✅ | Field | Raw | Human | |-------|-----|-------| | `max_per_transaction` | `500000000` | **500 vFDUSD** | | `max_per_period` | `5000000000` | **5 000 vFDUSD** | - CW20: `terra1mnl9azefrqpmu888ar2u6zrcwr80hxlt3avf4300r576cw5ar7esvxsvj3` - Bridge: `terra18m02l2f43c2dagqnz3kfccpgz9pzzz5hk9l5mh5wvr6dcvv47zfqdfs7la` All three surfaces now agree on **500 / tx** and **5 000 / 24h**.
PlasticDigits commented 2026-07-30 04:42:41 +00:00 (Migrated from gitlab.com)

Correction: Guard tx hash

Previous note’s Guard tx link may have been corrupted by HTML entity encoding. Canonical hash from block 112947516:

On-chain readbacks from the prior verification comment remain correct (500 / tx, 5 000 / 24h on TokenRegistry + Guard + Terra).

## Correction: Guard tx hash Previous note’s Guard tx link may have been corrupted by HTML entity encoding. Canonical hash from block `112947516`: - Guard `setLimitsBatch`: [`0x50eadf2f87e692e60ee3f818c275ea6d7c0de39331533e68b0c391e04282e9fc`](https://bscscan.com/tx/0x50eadf2f87e692e60ee3f818c275ea6d7c0de39331533e68b0c391e04282e9fc) (status success) On-chain readbacks from the prior verification comment remain correct (**500 / tx**, **5 000 / 24h** on TokenRegistry + Guard + Terra).
PlasticDigits commented 2026-07-30 04:44:12 +00:00 (Migrated from gitlab.com)

mentioned in commit c4bebecefb

mentioned in commit c4bebecefb9ff444df516256dd980a09ed807bd0
PlasticDigits (Migrated from gitlab.com) closed this issue 2026-07-30 04:44:12 +00:00
PlasticDigits commented 2026-07-30 05:30:30 +00:00 (Migrated from gitlab.com)

mentioned in commit c7139fddc6

mentioned in commit c7139fddc660259a03a773507186bc18cabea6e2
PlasticDigits commented 2026-07-30 05:30:35 +00:00 (Migrated from gitlab.com)

mentioned in merge request !153

mentioned in merge request !153
PlasticDigits commented 2026-07-30 05:35:20 +00:00 (Migrated from gitlab.com)

mentioned in commit d5f053cb9a

mentioned in commit d5f053cb9a73b7f4af2b3ba0c8f85879ff505dc7
PlasticDigits commented 2026-07-30 06:04:13 +00:00 (Migrated from gitlab.com)

mentioned in commit 5e1c3ecdc0

mentioned in commit 5e1c3ecdc06a977bc4d6e35e80856f987c7ebdd4
PlasticDigits commented 2026-07-30 06:04:14 +00:00 (Migrated from gitlab.com)

mentioned in merge request !154

mentioned in merge request !154
PlasticDigits commented 2026-07-30 06:12:45 +00:00 (Migrated from gitlab.com)

mentioned in commit f62203b50a

mentioned in commit f62203b50aa585246bc40c0e2af43ea4272464db
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
code/cl8y-bridge-monorepo#133
No description provided.