SIGN_MODE_LEGACY_AMINO_JSON) by default. If your custom module needs to support these wallets, you must provide Amino converters that translate between protobuf field names (camelCase) and Amino field names (snake_case).
Defining Converters
AnAminoConverter maps a protobuf type URL to its Amino type string and provides toAmino/fromAmino transform functions:
Handling Type Conversions
Amino JSON uses different representations for some types. Common conversions you’ll encounter:
Example with multiple type conversions:
Passing Converters to the Signing Client
Merge your custom converters with the defaults usingAminoTypes:
OfflineDirectSigner(e.g.DirectSecp256k1HdWallet) usesSIGN_MODE_DIRECT— protobuf encoding, Amino converters not neededOfflineAminoSigner(e.g.Secp256k1HdWallet, Keplr, Leap) usesSIGN_MODE_LEGACY_AMINO_JSON— requires Amino converters for all message types in the transaction
Next Steps
Custom Protobuf Types
Register the protobuf types that your Amino converters translate.
Custom Modules
See a complete module integration that ties types, queries, and Amino converters together.
Direct vs Amino Signing
Understand how the two signing modes work and when each is used.