From research #9
Overview
Add (amino.name) proto option to all 46 remaining Msg types in inference-chain/proto/inference/inference/tx.proto. This unblocks SIGN_MODE_LEGACY_AMINO_JSON signing (Keplr browser wallet + Ledger hardware wallet) for all inference module transactions. Currently only MsgUpdateParams has amino.name; all other 46 Msg types are missing it.
Why this works: In cosmos SDK v0.50+, the (amino.name) proto option is auto-registered into the global amino codec via proto file descriptor init(). No changes to RegisterLegacyAminoCodec or codec.go are needed — they stay as-is.
Reference: inference-chain/proto/inference/collateral/tx.proto — all 3 messages have amino.name and work with Keplr.
Implementation Checklist
Phase 1: Add amino.name annotations to tx.proto (~1.5 hours)
Phase 2: Regenerate proto files (~30 min)
Phase 3: Verify amino registration works (~30 min)
Phase 4: Verify no changes to Go files needed
Dependencies & Blockers
- Requires proto generation tooling to be available (check
Makefile for proto-gen target)
- No blockers — this is a standalone change, safe to do independently of other issues
Estimated Total: 0.5-1 day (Junior level)
All 47 amino.name values follow an identical pattern. The work is mechanical and well-defined.
From research #9
Overview
Add
(amino.name)proto option to all 46 remaining Msg types ininference-chain/proto/inference/inference/tx.proto. This unblocksSIGN_MODE_LEGACY_AMINO_JSONsigning (Keplr browser wallet + Ledger hardware wallet) for all inference module transactions. Currently onlyMsgUpdateParamshas amino.name; all other 46 Msg types are missing it.Why this works: In cosmos SDK v0.50+, the
(amino.name)proto option is auto-registered into the global amino codec via proto file descriptorinit(). No changes toRegisterLegacyAminoCodecorcodec.goare needed — they stay as-is.Reference:
inference-chain/proto/inference/collateral/tx.proto— all 3 messages have amino.name and work with Keplr.Implementation Checklist
Phase 1: Add amino.name annotations to tx.proto (~1.5 hours)
inference-chain/proto/inference/inference/tx.protooption (amino.name) = "inference/x/inference/Msg{Name}";to each of the 46 Msg types that don't have it yet (follow the existingMsgUpdateParamspattern on line 79)MsgSubmitNewParticipant→"inference/x/inference/MsgSubmitNewParticipant"MsgSubmitNewUnfundedParticipant→"inference/x/inference/MsgSubmitNewUnfundedParticipant"MsgSubmitHardwareDiff→"inference/x/inference/MsgSubmitHardwareDiff"MsgClaimRewards→"inference/x/inference/MsgClaimRewards"MsgStartInference→"inference/x/inference/MsgStartInference"MsgCreateSubnetEscrow→"inference/x/inference/MsgCreateSubnetEscrow"MsgSettleSubnetEscrow→"inference/x/inference/MsgSettleSubnetEscrow"MsgRequestBridgeWithdrawal→"inference/x/inference/MsgRequestBridgeWithdrawal"MsgRequestBridgeMint→"inference/x/inference/MsgRequestBridgeMint"MsgBridgeExchange→"inference/x/inference/MsgBridgeExchange"MsgRegisterModel→"inference/x/inference/MsgRegisterModel"MsgDeleteGovernanceModel→"inference/x/inference/MsgDeleteGovernanceModel"Phase 2: Regenerate proto files (~30 min)
make proto-gen(or equivalent) ininference-chain/to regenerate:inference-chain/x/inference/types/tx.pb.goinference-chain/api/inference/inference/tx.pulsar.gogo build ./...Phase 3: Verify amino registration works (~30 min)
go test ./x/inference/...inference-chain/x/inference/types/codec_test.go:MsgSubmitNewParticipant,MsgClaimRewards,MsgSubmitHardwareDiffcan be amino-encoded (verify amino type name is registered)Phase 4: Verify no changes to Go files needed
x/inference/types/codec.goneeds NO changesx/inference/module/module.goRegisterLegacyAminoCodec stays EMPTYx/collateral/module/module.goRegisterLegacyAminoCodec is still empty (reference)Dependencies & Blockers
Makefileforproto-gentarget)Estimated Total: 0.5-1 day (Junior level)
All 47 amino.name values follow an identical pattern. The work is mechanical and well-defined.