feat(listings): list bridged USDT in Terra Classic wallets #1260
Labels
No labels
agent:fix_bugfix
agent:fix_conflicts
agent:fix_security
agent:gap_analysis
agent:implement
agent:implement
agent:implement
agent:open_issues
agent:ready
agent:research
agent:security_audit
agent:verify
architecture
backend
blocker:hybrid
blocker:launch
blocker:limit-orders
blocker:v2
block:log_only
block:security
bug
ci
contracts
correctness
deploy
dev
devops
docs
documentation
duplicate
e2e
enhancement
epic
feature
frontend
functional-completion
gas
good first issue
governance
help wanted
high-risk
hooks
hybrid
indexer
infra
infrastructure
integrators
invalid
launch-blocker
limit-orders
localnet
localterra
low priority
missing-implementation
needs-design
ops
performance
priority
high
priority
medium
product
qa
QA
question
ready
ready
research
scripts
security
security-hardening
smartcontracts
tech-debt
testing
ux
UX
v2
verification
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
code/cl8y-dex-terraclassic#1260
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Bridged USDT on Terra Classic is already pinned in the DEX tokenlist (
terra1z0xe7…, 18 decimals,tokenlist/images/USDT.png) but is absent from the wallet-registry packs that make CW20s show a name, symbol, and logo in Terra Classic wallets (Keplr, Galaxy Station / Hexxagon, Leap / cosmos chain-registry).This ticket is one token, all agentic wallet venues: add that USDT CW20 to the in-repo listing packs and open/update upstream PRs so ecosystem wallets can recognize it. Do not fold this into #629 (Keplr permanent six), #639 (catalog locked to those six via L639-2), or #1221 (ops: bridge inventory + CMM USDT/cLUNC pair).
#639 L639-1 prefers one venue per child. This capture is a single product ask across wallets; bundle the wallet venues here rather than minting sibling issues. Exchange/aggregator forms (CG/CMC/GeckoTerminal/Paprika) stay on their #639 children.
Current codebase
Tokenlist already has USDT; listing catalog does not
tokenlist/tokenlist.jsonincludes:USDTTether USDterra1z0xe7t5ymmltg4vju8tghkq0pewy4et548ta23nlu9zxtl950uyqkv8mv4cw20tokenlist/images/USDT.pngdocs/listings/catalog.jsontokens[]is still the permanent six (CL8Y, UST1, USTR, cLUNC, cUSTC, vFDUSD). L639-2 / K629-2 exclude gems, ALPHA, USTRIX, SpaceUSD, and community-tax templates. USDT is none of those; it is a new economic CW20 that was not in the 2026-08-25 catalog lock.Wallet packs (no USDT JSON)
docs/listings/keplr-contract-registry/cosmos/columbus/tokens/<contract>.json(six files)cosmos/terra(or columbus) tokens + imagesterra1z0xe7….jsondocs/listings/hexxagon/terra.fragment.jsoncw20/tokens/mainnet/terra.js(PR #68)terra/assetlist.json(PR #7910)docs/listings/cosmostation/cosmostation/chainlistarchived; catalogagentic: falseKeplr Job 1 already learned:
yarn validate:tokenrequires JSONmetadataequal to LCDtoken_info, not marketing names (#629 comments). USDT JSON must copy livename/symbol/decimalsfrom columbus-5.Related but different work
CreatePairUSDT/cLUNC with CMMreceiver. Confirm this tokenlist address is the post-bridge CW20 (code_id, usually 10184) before submitting registries. If LCDtoken_infodisagrees with the tokenlist, stop and do not invent a second USDT.Why the new implementation is needed
Wallets that only read Keplr / Hexxagon / chain-registry registries will show bridged USDT as an unnamed contract. The DEX tokenlist and logo already exist; wallet recognition is the missing integrator path. Users holding bridged USDT on columbus-5 cannot add it from those wallets’ token lists until the registries include this CW20.
Constraints / guardrails
ContractInfo.code_idandtoken_infoforterra1z0xe7…on columbus-5 before writing JSON. If the contract is missing, wrong code_id, or not USDT, stop (likely still #1221).cUSDT, IBC denom, or BSC0xTether as Terra Classic./agent implementon #629 or reopen #639 to dump USDT into the permanent six.terra-money/assetsis on the #639 skip list (L639-6). Station Classic is not a venue here.tokenlist/images/USDT.png(same bytes in each pack). Do not hotlink random CDN art.Wrapped LUNCvs marketingWrapped Luna Classic).$1rules are irrelevant to USDT; do not advertise a peg in walletdescriptionbeyond LCD name/symbol.CreatePair, or CMM LP in this ticket.Relevant files
tokenlist/tokenlist.jsontokenlist/images/USDT.pngdocs/listings/catalog.jsondocs/listings/README.mddocs/listings/keplr-contract-registry/cosmos/columbus/tokens/<usdt-contract>.json+ imagedocs/listings/hexxagon/terra.fragment.jsondocs/listings/cosmos-chain-registry/(create if missing)terra/assetlist.jsonfragment + imageskills/AGENTS_LISTINGS.mdmake verify-issue-629/640/641verify-issue-<this>Recommended direction
ContractInfo+token_infoforterra1z0xe7t5ymmltg4vju8tghkq0pewy4et548ta23nlu9zxtl950uyqkv8mv4. Recordcode_id, name, symbol, decimals. Abort if not a CW20 USDT.cosmos/columbus/tokens/<contract>.json(and image under the pack’simages/layout used by #629). Metadata = LCD. Vitest catalog↔JSON includes USDT. Export still omits gems.terra.fragment.json(trailing commas / append-at-end as #641). Do not duplicate USTR. Follow existing PR #68 if still open; otherwise a follow-up PR.type_asset: cw20,base/denomcw20:<address>, image, no inventedcoingecko_idfor this Terra USDT unless CoinGecko already maps this exact contract (do not reusetetherblindly).issue= this issue. Leave owned Keplr/Llama surfaces on #629/#631 (do_not_reopen).make verify-issue-<id>— schema, LCD match fixture or recorded golden from step 1, gems still excluded, USDT present in Keplr + Hexxagon packs.Given / When / Then
token_infoforterra1z0xe7t5ymmltg4vju8tghkq0pewy4et548ta23nlu9zxtl950uyqkv8mv4as a CW20 whose symbol is USDT (decimals matching the tokenlist),USDT.png,make verify-issue-<id>is green, gems remain excluded, and an operator can open/update the three agentic upstream PRs without touching Cosmostation, Trust Wallet, or #1221 ops.Acceptance criteria
code_id,name,symbol,decimalsforterra1z0xe7…. If LCD fails or symbol is not USDT, no registry JSON is merged.metadataequals LCDtoken_info; image is the in-repo USDT PNG.terra.fragment.jsonincludes one USDT object (contract, decimals, image) and does not duplicate USTR or add gems.cw20:<address>for this token only; no invented CoinGecko id.docs/listings/catalog.jsonlists USDT with this issue id. Permanent six rows unchanged. L639-2 exception documented indocs/listings/README.md.make verify-issue-629(and existing 640/641/639 targets if still present) stay green. Newmake verify-issue-<id>covers USDT schema + gem exclusion.Test plan (functional paths)
token_infoforterra1z0xe7…type_asset: cw20, denomcw20:terra1z0xe7…make verify-issue-<id>make verify-issue-629tokenlist/images/USDT.pngTest plan (attack, hack, and abuse)
Wallet registry metadata only (no signing, wasm execute, or 2-of-3). Not a DeFi drain suite.
#562gem or ALPHA/USTRIX0xor IBC denom in Terra CW20 slotcoingecko_id: tetheron Classic CW20Verification criteria
make verify-issue-<id>green locally (schema + gem exclude + USDT present).make verify-issue-629/ listing verifies still pass.Out of scope
CreatePair, CMM LP (#1221).chainlist(archived)./cg/cmc, IBC USDC (#1220).First-pass model recommendation
Recommendation: grok-high
Composer fails several intake criteria: more than three production files (Keplr pack, Hexxagon fragment, chain-registry pack,
catalog.json, listings README, skills, verify target); more than one subsystem (three wallet registries plus catalog invariant L639-2); live LCDtoken_infomust match before JSON is safe (Keplr CI already rejected marketing names on #629); token identity in third-party wallets is not a local one-file known edit. Verification is pack + LCD golden + existing listing make targets, not a single deterministic helper. First pass should keep #1221 ops and paid/archived venues out of the diff.