# Incorrect names provided in RegisterConcrete calls break LegacyAmino signing method

Mismatched amino.name tags vs RegisterConcrete names in Canto Cosmos SDK v0.50 modules cause LegacyAmino-signed messages to be rejected by v8 routing.

- Payout: Audit contest
- Severity: medium
- Program: Canto
- Found by: 3docSec
- Disclosed: 2024-08-19
- Write-up quality: 6/10
- Original: https://code4rena.com/reports/2024-05-canto#m-04
- Library page: https://bugbountylibrary.com/r/c4%3A2024-05-canto%3AM-04
- Tags: domain:web3 impact:dos kind:contest platform:code4rena sev:medium tech:solidity technique:regression technique:source-review vuln:misconfiguration vuln:signature-replay

**Target:** Cosmos SDK module RegisterConcrete/Amino JSON codec
**Root cause:** amino.name protobuf tags are inconsistent with the names passed to RegisterConcrete in each module's RegisterInterfaces, so the new Amino JSON codec serializes a different type URL than the legacy client expects.
**Steps:**
1. Adapt the Cosmos SDK v0.50 generative Amino JSON test to Canto module messages
2. Build test env via Bash script (Git+Go required)
3. Run test; observe Expected `{"type":"coinswap/coinswap/MsgAddLiquidity",...}` vs Actual `{"type":"canto/MsgAddLiquidity",...}`
4. 14 tests fail across coinswap, csr, erc20, inflation, onboarding, evm, feemarket modules
**How found:** Reading the Cosmos SDK v0.50 upgrade guide's note on the new Amino JSON codec and the amino.name tags, then cross-checking each module's RegisterConcrete calls against the proto tags and adapting the SDK's generative verification test.
**Insight:** After a Cosmos SDK major upgrade, diff every amino.name proto tag against the string literal in RegisterConcrete; the SDK ships a generative test for exactly this, so port it to your custom modules rather than trusting the migration.
