ibc-go
ibc-go copied to clipboard
Make BroadcastMessages function generic and return the msg response type
Summary
We currently have BroadcastMessages
which returns an sdk.Response
and also a UnmarshalMsgResponses
function to unmarshal concrete types.
It would be nice to have a function which returned a concrete type. I think this could look something like
package broadcast
type Broadcaster interface {
BroadcastMessages(ctx context.Context, chain ibc.Chain, user ibc.Wallet, msgs ...sdk.Msg) sdk.TxResponse
}
func Messages[T codec.ProtoMarshaler](ctx context.Context, broadcaster Broadcaster, chain ibc.Chain, user ibc.Wallet, msgs ...sdk.Msg) (T, sdk.TxResponse) {
txResp := broadcaster.BroadcastMessages(ctx, chain, user, msgs...)
var marshaller T
if err := testsuite.UnmarshalMsgResponses(txResp, marshaller); err != nil {
return marshaller, txResp
}
return marshaller, txResp
}
And usage could be like
resp, sdkResp := broadcast.Messages[*controllertypes.MsgRegisterInterchainAccountResponse](ctx, s, chainA, controllerAccount, msgRegisterAccount)
s.AssertTxSuccess(sdkResp)
s.Require().NotNil(resp)
s.Require().NotEmpty(resp.ChannelId)
s.Require().NotEmpty(resp.PortId)
There may be some additional quirks to getting the unmarshalling working correctly, but this could be a nice QoL improvement for dealing with concrete response types.
For Admin Use
- [ ] Not duplicate issue
- [ ] Appropriate labels applied
- [ ] Appropriate contributors tagged/assigned