cosmos / cosmos-sdk

:chains: A Framework for Building High Value Public Blockchains :sparkles:
https://cosmos.network/
Apache License 2.0
6.25k stars 3.62k forks source link

unable to resolve type URL error when running tests #21915

Open akankshadhyani05 opened 1 month ago

akankshadhyani05 commented 1 month ago

Hi, I am running an appchain using the latest sdk version (0.50.8) and I am trying to run test but I am getting error in my code which I have posted below: Error is originating from this code(here cctptypes is a dependency that i am importing in my repo):

msgs := []sdk.Msg{}

    msgs = append(msgs, &cctptypes.MsgAddRemoteTokenMessenger{
        From:     gw.fiatTfRoles.Owner.FormattedAddress(),
        DomainId: 0,
        Address:  tokenMessenger,
    })

The error is: "unable to resolve type URL /cctp.MsgAddRemoteTokenMessenger"

I have pasted the code snippet of its tx.pb.go file :

proto.RegisterType((*MsgAddRemoteTokenMessenger)(nil), "cctp.MsgAddRemoteTokenMessenger")
proto.RegisterType((*MsgAddRemoteTokenMessengerResponse)(nil), "cctp.MsgAddRemoteTokenMessengerResponse")

where could the issue be?

I have added these lines in my app.go file:

app.BasicModuleManager = module.NewBasicManagerFromManager(
        app.mm,
        map[string]module.AppModuleBasic{
            genutiltypes.ModuleName: genutil.NewAppModuleBasic(genutiltypes.DefaultMessageValidator),
            govtypes.ModuleName: gov.NewAppModuleBasic(
                []govclient.ProposalHandler{
                    paramsclient.ProposalHandler,
                },
            ),
            CCTPModuleName:         cctp.AppModuleBasic{}
        },
    )

    app.BasicModuleManager.RegisterLegacyAminoCodec(legacyAmino)
    app.BasicModuleManager.RegisterInterfaces(interfaceRegistry)
lucaslopezf commented 3 weeks ago

Hi @akankshadhyani05

The issue you're encountering, "unable to resolve type URL /cctp.MsgAddRemoteTokenMessenger", is related to the fact that the protobuf message type MsgAddRemoteTokenMessenger is not properly registered in the interface registry. The error indicates that the MsgAddRemoteTokenMessenger type URL /cctp.MsgAddRemoteTokenMessenger hasn't been registered properly in the interface registry. This typically happens when the RegisterInterfaces method for the module is missing or incomplete, leading to the message types not being recognized when processing transactions. You can see the main method here: https://github.com/cosmos/cosmos-sdk/blob/5dc8768ef14a1f968d9094bcdc58ac7d217aa583/codec/types/interface_registry.go#L299. If you want reproduce it, you can do it easily comment this line and execute the test. You need to ensure that your cctp module registers all message types with the protobuf interface registry. And here has an explanation of this. Let me know if this helped you or you need anything else!