Hardening pass on the USDt→τUSDt wrap (builds on 0170's end-to-end validation).
Security fix — found via robustness testing:
- UsdtLockNile used require(token.transfer(...)) assuming a bool return; real
Tether-style USDt returns nothing → the refund path reverted, which would
STRAND the locker's funds. Fixed with SafeERC20 handling (no-data or true) on
both transfer/transferFrom; redeployed to Nile (TVahBUBqUDLqVjDn77Yav…Vnn2o).
- scripts/tron-wrap-robustness.cjs: R2 (too-early) and R3 (consumed) revert for
the right reason (decoded on-chain revert). R1 (self-refund) validated against
a clean standard token — contracts/tron/MockUsdt.sol + tron-refund-validate.cjs
— since the Nile faucet USDT has a non-standard transfer that reverts for
contract senders.
Naming model (revises the prefix-primary stance):
- identity = CashToken category; human name = USDt + a network badge (the "BIC");
the ε/τ prefix is a text-only fallback. Applied to the mockup (ASM·Multichain:
name+badge, prefix in button/stepper, synced selectors, new source-chain
dropdown Ethereum/Tron→ε/τ) and to ASM-Multichain.md / README.md, plus the
cross-chain-redemption non-goal (per-chain IOUs + AMM swap, not a universal IOU).
Design record:
- Parameters/ASM DEX/cross-chain-asm-concept-and-state.md — concept, the
trustless-vs-authority analysis, oracle vs light-client vs zk, the VM wall, the
reference hacks, the trust ladder, and the 48-hour build state.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>