Skip to content

feat(tokens): add USDT0 on Optimism#35

Merged
MantisClone merged 1 commit into
mainfrom
feat/REQ-190-add-usdt0-optimism
Jul 8, 2026
Merged

feat(tokens): add USDT0 on Optimism#35
MantisClone merged 1 commit into
mainfrom
feat/REQ-190-add-usdt0-optimism

Conversation

@MantisClone

Copy link
Copy Markdown
Contributor

Problem

Cross-chain payments funded with USDT0 on Optimism fail on the secure payment page. After the LiFi quote succeeds, request-api's getTokenList() lookup 404s with "Invoice currency not found" because USDT0 is not in this token list — only legacy USDT-optimism (0x94b008aA…) is registered. USDT0 (0x01bFF41798a0BcF287b996046Ca68b395DbC1071) is now the canonical Optimism USDT, and REQ-190 added it to request-api's routing map, but the currency registry (this list) was never updated.

Refs REQ-190. Pairs with RequestNetwork/request-api#1065 (which surfaces + resolves USDT0 as a cross-chain source).

Proposed Solution

Add USDT0-optimism to tokens/token-list.json (mirroring the existing USDT-optimism entry) and bump the list minor version 1.6.0 → 1.7.0.

{
  "id": "USDT0-optimism",
  "name": "USDT0",
  "symbol": "USDT0",
  "decimals": 6,
  "address": "0x01bFF41798a0BcF287b996046Ca68b395DbC1071",
  "network": "optimism",
  "type": "ERC20",
  "hash": "0x01bFF41798a0BcF287b996046Ca68b395DbC1071",
  "chainId": 10
}

npm run validate → "Token list is valid!" and npx vitest run → 11/11 pass.

Considerations

  • Optimism is the only chain where USDT and USDT0 are distinct contracts; both stay listed. The id is USDT0-optimism to match what request-api's resolveSourceCurrencyId produces.
  • Once merged and published (deploy.yml regenerates latest.json), request-api picks it up after its token-list cache expires — so it's not instant on staging/prod.
  • No logo added (entries carry no logo field and the payment page renders the USDT0 icon from its own assets); happy to add one to tokens/assets/ if preferred.

UAT

On staging, open a USDC-on-Base request and pay cross-chain from a wallet holding only USDT0 on Optimism → selecting USDT0 now returns a quote and proceeds (previously 404'd after the quote).

Adds the canonical Optimism USDT0 (0x01bFF41798a0BcF287b996046Ca68b395DbC1071)
as USDT0-optimism and bumps the list to 1.7.0.

Without this entry, cross-chain payments funded with USDT0 on Optimism fail
after a successful LiFi quote with 404 "Invoice currency not found", since the
currency isn't in the list. Legacy USDT-optimism is already present.

REQ-190

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@greptile-apps

greptile-apps Bot commented Jul 8, 2026

Copy link
Copy Markdown

Greptile Summary

Adds USDT0-optimism (0x01bFF41798a0BcF287b996046Ca68b395DbC1071) to the token list so that cross-chain payments funded with USDT0 on Optimism no longer 404 on the secure payment page, and bumps the list version from 1.6.0 → 1.7.0.

  • The new entry mirrors the existing USDT-optimism entry in structure, with correct chainId: 10, decimals: 6, type: "ERC20", and network: "optimism" — all of which satisfy the schema and the runtime CHAIN_IDS / NetworkType validation.
  • The contract address is the verified USDT0 contract on OP Mainnet per Etherscan, and hash is set to the contract address, consistent with all other ERC20 entries in the list.

Confidence Score: 5/5

Safe to merge — single additive JSON entry with a verified on-chain contract address, consistent structure, and a correct minor version bump.

The change is a one-token addition to a JSON list. The contract address is confirmed on Etherscan, all schema-required fields are present, chainId and decimals match the existing Optimism entries, and the id is unique in the list. The version bump follows the established convention for new-token additions.

No files require special attention.

Important Files Changed

Filename Overview
tokens/token-list.json Adds USDT0-optimism token entry and bumps minor version to 1.7.0; all fields are correct and consistent with existing ERC20 entries on Optimism.

Sequence Diagram

%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
    participant User
    participant PaymentPage
    participant LiFi
    participant RequestAPI
    participant TokenList

    User->>PaymentPage: Pay with USDT0 on Optimism
    PaymentPage->>LiFi: Get cross-chain quote
    LiFi-->>PaymentPage: Quote success
    PaymentPage->>RequestAPI: getTokenList() lookup for USDT0-optimism
    RequestAPI->>TokenList: Resolve USDT0-optimism currency
    Note over TokenList: Before PR: 404 "Invoice currency not found"
    Note over TokenList: After PR: USDT0-optimism entry exists (0x01bFF41...)
    TokenList-->>RequestAPI: Currency resolved ✓
    RequestAPI-->>PaymentPage: Token details returned
    PaymentPage-->>User: Payment proceeds
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
sequenceDiagram
    participant User
    participant PaymentPage
    participant LiFi
    participant RequestAPI
    participant TokenList

    User->>PaymentPage: Pay with USDT0 on Optimism
    PaymentPage->>LiFi: Get cross-chain quote
    LiFi-->>PaymentPage: Quote success
    PaymentPage->>RequestAPI: getTokenList() lookup for USDT0-optimism
    RequestAPI->>TokenList: Resolve USDT0-optimism currency
    Note over TokenList: Before PR: 404 "Invoice currency not found"
    Note over TokenList: After PR: USDT0-optimism entry exists (0x01bFF41...)
    TokenList-->>RequestAPI: Currency resolved ✓
    RequestAPI-->>PaymentPage: Token details returned
    PaymentPage-->>User: Payment proceeds
Loading

Reviews (1): Last reviewed commit: "feat(tokens): add USDT0 on Optimism" | Re-trigger Greptile

@MantisClone
MantisClone marked this pull request as ready for review July 8, 2026 15:04
@MantisClone
MantisClone merged commit de78ca1 into main Jul 8, 2026
10 checks passed
@MantisClone
MantisClone deleted the feat/REQ-190-add-usdt0-optimism branch July 8, 2026 15:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants