Start rework channel query
This commit is contained in:
@@ -249,27 +249,29 @@ func IBCQuerier(wasm contractMetaDataSource, channelKeeper types.ChannelKeeper)
|
||||
}
|
||||
if request.ListChannels != nil {
|
||||
portID := request.ListChannels.PortID
|
||||
channels := make(wasmvmtypes.IBCChannels, 0)
|
||||
channelKeeper.IterateChannels(ctx, func(ch channeltypes.IdentifiedChannel) bool {
|
||||
// it must match the port and be in open state
|
||||
if (portID == "" || portID == ch.PortId) && ch.State == channeltypes.OPEN {
|
||||
newChan := wasmvmtypes.IBCChannel{
|
||||
Endpoint: wasmvmtypes.IBCEndpoint{
|
||||
PortID: ch.PortId,
|
||||
ChannelID: ch.ChannelId,
|
||||
},
|
||||
CounterpartyEndpoint: wasmvmtypes.IBCEndpoint{
|
||||
PortID: ch.Counterparty.PortId,
|
||||
ChannelID: ch.Counterparty.ChannelId,
|
||||
},
|
||||
Order: ch.Ordering.String(),
|
||||
Version: ch.Version,
|
||||
ConnectionID: ch.ConnectionHops[0],
|
||||
}
|
||||
channels = append(channels, newChan)
|
||||
if portID == "" {
|
||||
portID = wasm.GetContractInfo(ctx, caller).IBCPortID
|
||||
}
|
||||
gotChannels := channelKeeper.GetAllChannelsWithPortPrefix(ctx, portID)
|
||||
channels := make(wasmvmtypes.IBCChannels, 0, len(gotChannels))
|
||||
for _, ch := range gotChannels {
|
||||
if ch.State != channeltypes.OPEN {
|
||||
continue
|
||||
}
|
||||
return false
|
||||
})
|
||||
channels = append(channels, wasmvmtypes.IBCChannel{
|
||||
Endpoint: wasmvmtypes.IBCEndpoint{
|
||||
PortID: ch.PortId,
|
||||
ChannelID: ch.ChannelId,
|
||||
},
|
||||
CounterpartyEndpoint: wasmvmtypes.IBCEndpoint{
|
||||
PortID: ch.Counterparty.PortId,
|
||||
ChannelID: ch.Counterparty.ChannelId,
|
||||
},
|
||||
Order: ch.Ordering.String(),
|
||||
Version: ch.Version,
|
||||
ConnectionID: ch.ConnectionHops[0],
|
||||
})
|
||||
}
|
||||
res := wasmvmtypes.ListChannelsResponse{
|
||||
Channels: channels,
|
||||
}
|
||||
|
||||
@@ -40,59 +40,6 @@ import (
|
||||
)
|
||||
|
||||
func TestIBCQuerier(t *testing.T) {
|
||||
myExampleChannels := []channeltypes.IdentifiedChannel{
|
||||
// this is returned
|
||||
{
|
||||
State: channeltypes.OPEN,
|
||||
Ordering: channeltypes.ORDERED,
|
||||
Counterparty: channeltypes.Counterparty{
|
||||
PortId: "counterPartyPortID",
|
||||
ChannelId: "counterPartyChannelID",
|
||||
},
|
||||
ConnectionHops: []string{"one"},
|
||||
Version: "v1",
|
||||
PortId: "myPortID",
|
||||
ChannelId: "myChannelID",
|
||||
},
|
||||
// this is filtered out
|
||||
{
|
||||
State: channeltypes.INIT,
|
||||
Ordering: channeltypes.UNORDERED,
|
||||
Counterparty: channeltypes.Counterparty{
|
||||
PortId: "foobar",
|
||||
},
|
||||
ConnectionHops: []string{"one"},
|
||||
Version: "initversion",
|
||||
PortId: "initPortID",
|
||||
ChannelId: "initChannelID",
|
||||
},
|
||||
// this is returned
|
||||
{
|
||||
State: channeltypes.OPEN,
|
||||
Ordering: channeltypes.UNORDERED,
|
||||
Counterparty: channeltypes.Counterparty{
|
||||
PortId: "otherCounterPartyPortID",
|
||||
ChannelId: "otherCounterPartyChannelID",
|
||||
},
|
||||
ConnectionHops: []string{"other", "second"},
|
||||
Version: "otherVersion",
|
||||
PortId: "otherPortID",
|
||||
ChannelId: "otherChannelID",
|
||||
},
|
||||
// this is filtered out
|
||||
{
|
||||
State: channeltypes.CLOSED,
|
||||
Ordering: channeltypes.ORDERED,
|
||||
Counterparty: channeltypes.Counterparty{
|
||||
PortId: "super",
|
||||
ChannelId: "duper",
|
||||
},
|
||||
ConnectionHops: []string{"no-more"},
|
||||
Version: "closedVersion",
|
||||
PortId: "closedPortID",
|
||||
ChannelId: "closedChannelID",
|
||||
},
|
||||
}
|
||||
specs := map[string]struct {
|
||||
srcQuery *wasmvmtypes.IBCQuery
|
||||
wasmKeeper *mockWasmQueryKeeper
|
||||
@@ -112,82 +59,6 @@ func TestIBCQuerier(t *testing.T) {
|
||||
channelKeeper: &wasmtesting.MockChannelKeeper{},
|
||||
expJSONResult: `{"port_id":"myIBCPortID"}`,
|
||||
},
|
||||
"query list channels - all": {
|
||||
srcQuery: &wasmvmtypes.IBCQuery{
|
||||
ListChannels: &wasmvmtypes.ListChannelsQuery{},
|
||||
},
|
||||
channelKeeper: &wasmtesting.MockChannelKeeper{
|
||||
IterateChannelsFn: wasmtesting.MockChannelKeeperIterator(myExampleChannels),
|
||||
},
|
||||
expJSONResult: `{
|
||||
"channels": [
|
||||
{
|
||||
"endpoint": {
|
||||
"port_id": "myPortID",
|
||||
"channel_id": "myChannelID"
|
||||
},
|
||||
"counterparty_endpoint": {
|
||||
"port_id": "counterPartyPortID",
|
||||
"channel_id": "counterPartyChannelID"
|
||||
},
|
||||
"order": "ORDER_ORDERED",
|
||||
"version": "v1",
|
||||
"connection_id": "one"
|
||||
},
|
||||
{
|
||||
"endpoint": {
|
||||
"port_id": "otherPortID",
|
||||
"channel_id": "otherChannelID"
|
||||
},
|
||||
"counterparty_endpoint": {
|
||||
"port_id": "otherCounterPartyPortID",
|
||||
"channel_id": "otherCounterPartyChannelID"
|
||||
},
|
||||
"order": "ORDER_UNORDERED",
|
||||
"version": "otherVersion",
|
||||
"connection_id": "other"
|
||||
}
|
||||
]
|
||||
}`,
|
||||
},
|
||||
"query list channels - filtered": {
|
||||
srcQuery: &wasmvmtypes.IBCQuery{
|
||||
ListChannels: &wasmvmtypes.ListChannelsQuery{
|
||||
PortID: "otherPortID",
|
||||
},
|
||||
},
|
||||
channelKeeper: &wasmtesting.MockChannelKeeper{
|
||||
IterateChannelsFn: wasmtesting.MockChannelKeeperIterator(myExampleChannels),
|
||||
},
|
||||
expJSONResult: `{
|
||||
"channels": [
|
||||
{
|
||||
"endpoint": {
|
||||
"port_id": "otherPortID",
|
||||
"channel_id": "otherChannelID"
|
||||
},
|
||||
"counterparty_endpoint": {
|
||||
"port_id": "otherCounterPartyPortID",
|
||||
"channel_id": "otherCounterPartyChannelID"
|
||||
},
|
||||
"order": "ORDER_UNORDERED",
|
||||
"version": "otherVersion",
|
||||
"connection_id": "other"
|
||||
}
|
||||
]
|
||||
}`,
|
||||
},
|
||||
"query list channels - filtered empty": {
|
||||
srcQuery: &wasmvmtypes.IBCQuery{
|
||||
ListChannels: &wasmvmtypes.ListChannelsQuery{
|
||||
PortID: "none-existing",
|
||||
},
|
||||
},
|
||||
channelKeeper: &wasmtesting.MockChannelKeeper{
|
||||
IterateChannelsFn: wasmtesting.MockChannelKeeperIterator(myExampleChannels),
|
||||
},
|
||||
expJSONResult: `{"channels": []}`,
|
||||
},
|
||||
"query channel": {
|
||||
srcQuery: &wasmvmtypes.IBCQuery{
|
||||
Channel: &wasmvmtypes.ChannelQuery{
|
||||
|
||||
@@ -11,12 +11,12 @@ import (
|
||||
)
|
||||
|
||||
type MockChannelKeeper struct {
|
||||
GetChannelFn func(ctx sdk.Context, srcPort, srcChan string) (channel channeltypes.Channel, found bool)
|
||||
GetNextSequenceSendFn func(ctx sdk.Context, portID, channelID string) (uint64, bool)
|
||||
ChanCloseInitFn func(ctx sdk.Context, portID, channelID string, chanCap *capabilitytypes.Capability) error
|
||||
GetAllChannelsFn func(ctx sdk.Context) []channeltypes.IdentifiedChannel
|
||||
IterateChannelsFn func(ctx sdk.Context, cb func(channeltypes.IdentifiedChannel) bool)
|
||||
SetChannelFn func(ctx sdk.Context, portID, channelID string, channel channeltypes.Channel)
|
||||
GetChannelFn func(ctx sdk.Context, srcPort, srcChan string) (channel channeltypes.Channel, found bool)
|
||||
GetNextSequenceSendFn func(ctx sdk.Context, portID, channelID string) (uint64, bool)
|
||||
ChanCloseInitFn func(ctx sdk.Context, portID, channelID string, chanCap *capabilitytypes.Capability) error
|
||||
GetAllChannelsFn func(ctx sdk.Context) []channeltypes.IdentifiedChannel
|
||||
SetChannelFn func(ctx sdk.Context, portID, channelID string, channel channeltypes.Channel)
|
||||
GetAllChannelsWithPortPrefixFn func(ctx sdk.Context, portPrefix string) []channeltypes.IdentifiedChannel
|
||||
}
|
||||
|
||||
func (m *MockChannelKeeper) GetChannel(ctx sdk.Context, srcPort, srcChan string) (channel channeltypes.Channel, found bool) {
|
||||
@@ -47,11 +47,11 @@ func (m *MockChannelKeeper) ChanCloseInit(ctx sdk.Context, portID, channelID str
|
||||
return m.ChanCloseInitFn(ctx, portID, channelID, chanCap)
|
||||
}
|
||||
|
||||
func (m *MockChannelKeeper) IterateChannels(ctx sdk.Context, cb func(channeltypes.IdentifiedChannel) bool) {
|
||||
if m.IterateChannelsFn == nil {
|
||||
func (m *MockChannelKeeper) GetAllChannelsWithPortPrefix(ctx sdk.Context, portPrefix string) []channeltypes.IdentifiedChannel {
|
||||
if m.GetAllChannelsWithPortPrefixFn == nil {
|
||||
panic("not expected to be called")
|
||||
}
|
||||
m.IterateChannelsFn(ctx, cb)
|
||||
return m.GetAllChannelsWithPortPrefixFn(ctx, portPrefix)
|
||||
}
|
||||
|
||||
func (m *MockChannelKeeper) SetChannel(ctx sdk.Context, portID, channelID string, channel channeltypes.Channel) {
|
||||
|
||||
@@ -82,8 +82,8 @@ type ChannelKeeper interface {
|
||||
GetNextSequenceSend(ctx sdk.Context, portID, channelID string) (uint64, bool)
|
||||
ChanCloseInit(ctx sdk.Context, portID, channelID string, chanCap *capabilitytypes.Capability) error
|
||||
GetAllChannels(ctx sdk.Context) (channels []channeltypes.IdentifiedChannel)
|
||||
IterateChannels(ctx sdk.Context, cb func(channeltypes.IdentifiedChannel) bool)
|
||||
SetChannel(ctx sdk.Context, portID, channelID string, channel channeltypes.Channel)
|
||||
GetAllChannelsWithPortPrefix(ctx sdk.Context, portPrefix string) []channeltypes.IdentifiedChannel
|
||||
}
|
||||
|
||||
// ICS4Wrapper defines the method for an IBC data package to be submitted.
|
||||
|
||||
Reference in New Issue
Block a user