Skip to content
This repository was archived by the owner on Mar 24, 2025. It is now read-only.

Commit 0cd5f1b

Browse files
author
Alex | Interchain Labs
authored
feat: add list query (#888) (backport) (#891)
1 parent ceb1459 commit 0cd5f1b

File tree

21 files changed

+2147
-287
lines changed

21 files changed

+2147
-287
lines changed

api/slinky/marketmap/v1/query.pulsar.go

Lines changed: 1074 additions & 117 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/slinky/marketmap/v1/query_grpc.pb.go

Lines changed: 46 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmd/slinky/main.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"errors"
66
"fmt"
77
"net/http"
8+
89
//nolint: gosec
910
_ "net/http/pprof"
1011
"os"

go.mod

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ require (
1515
github.com/client9/misspell v0.3.4
1616
github.com/cometbft/cometbft v0.38.15
1717
github.com/cosmos/cosmos-proto v1.0.0-beta.5
18-
github.com/cosmos/cosmos-sdk v0.50.10
18+
github.com/cosmos/cosmos-sdk v0.50.11
1919
github.com/cosmos/gogogateway v1.2.0
2020
github.com/cosmos/gogoproto v1.7.0
2121
github.com/cosmos/interchain-security/v5 v5.2.0
@@ -59,7 +59,7 @@ require (
5959
4d63.com/gochecknoglobals v0.2.1 // indirect
6060
cloud.google.com/go/storage v1.43.0 // indirect
6161
cosmossdk.io/errors v1.0.1 // indirect
62-
cosmossdk.io/x/tx v0.13.5 // indirect
62+
cosmossdk.io/x/tx v0.13.7 // indirect
6363
cosmossdk.io/x/upgrade v0.1.4 // indirect
6464
filippo.io/edwards25519 v1.1.0 // indirect
6565
github.com/4meepo/tagalign v1.3.4 // indirect
@@ -118,9 +118,9 @@ require (
118118
github.com/consensys/bavard v0.1.13 // indirect
119119
github.com/consensys/gnark-crypto v0.12.1 // indirect
120120
github.com/cosmos/btcutil v1.0.5 // indirect
121-
github.com/cosmos/cosmos-db v1.0.2 // indirect
121+
github.com/cosmos/cosmos-db v1.1.0 // indirect
122122
github.com/cosmos/go-bip39 v1.0.0 // indirect
123-
github.com/cosmos/iavl v1.2.0 // indirect
123+
github.com/cosmos/iavl v1.2.2 // indirect
124124
github.com/cosmos/ibc-go/modules/capability v1.0.1 // indirect
125125
github.com/cosmos/ibc-go/v8 v8.5.1 // indirect
126126
github.com/cosmos/ics23/go v0.11.0 // indirect
@@ -140,7 +140,7 @@ require (
140140
github.com/dgraph-io/ristretto v0.1.2-0.20240116140435-c67e07994f91 // indirect
141141
github.com/dustin/go-humanize v1.0.1 // indirect
142142
github.com/dvsekhvalnov/jose2go v1.6.0 // indirect
143-
github.com/emicklei/dot v1.6.1 // indirect
143+
github.com/emicklei/dot v1.6.2 // indirect
144144
github.com/ethereum/c-kzg-4844 v1.0.0 // indirect
145145
github.com/ethereum/go-verkle v0.1.1-0.20240829091221-dffa7562dbe9 // indirect
146146
github.com/ettle/strcase v0.2.0 // indirect

go.sum

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -215,8 +215,8 @@ cosmossdk.io/x/evidence v0.1.1 h1:Ks+BLTa3uftFpElLTDp9L76t2b58htjVbSZ86aoK/E4=
215215
cosmossdk.io/x/evidence v0.1.1/go.mod h1:OoDsWlbtuyqS70LY51aX8FBTvguQqvFrt78qL7UzeNc=
216216
cosmossdk.io/x/feegrant v0.1.1 h1:EKFWOeo/pup0yF0svDisWWKAA9Zags6Zd0P3nRvVvw8=
217217
cosmossdk.io/x/feegrant v0.1.1/go.mod h1:2GjVVxX6G2fta8LWj7pC/ytHjryA6MHAJroBWHFNiEQ=
218-
cosmossdk.io/x/tx v0.13.5 h1:FdnU+MdmFWn1pTsbfU0OCf2u6mJ8cqc1H4OMG418MLw=
219-
cosmossdk.io/x/tx v0.13.5/go.mod h1:V6DImnwJMTq5qFjeGWpXNiT/fjgE4HtmclRmTqRVM3w=
218+
cosmossdk.io/x/tx v0.13.7 h1:8WSk6B/OHJLYjiZeMKhq7DK7lHDMyK0UfDbBMxVmeOI=
219+
cosmossdk.io/x/tx v0.13.7/go.mod h1:V6DImnwJMTq5qFjeGWpXNiT/fjgE4HtmclRmTqRVM3w=
220220
cosmossdk.io/x/upgrade v0.1.4 h1:/BWJim24QHoXde8Bc64/2BSEB6W4eTydq0X/2f8+g38=
221221
cosmossdk.io/x/upgrade v0.1.4/go.mod h1:9v0Aj+fs97O+Ztw+tG3/tp5JSlrmT7IcFhAebQHmOPo=
222222
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
@@ -430,21 +430,21 @@ github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV
430430
github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
431431
github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk=
432432
github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis=
433-
github.com/cosmos/cosmos-db v1.0.2 h1:hwMjozuY1OlJs/uh6vddqnk9j7VamLv+0DBlbEXbAKs=
434-
github.com/cosmos/cosmos-db v1.0.2/go.mod h1:Z8IXcFJ9PqKK6BIsVOB3QXtkKoqUOp1vRvPT39kOXEA=
433+
github.com/cosmos/cosmos-db v1.1.0 h1:KLHNVQ73h7vawXTpj9UJ7ZR2IXv51tsEHkQJJ9EBDzI=
434+
github.com/cosmos/cosmos-db v1.1.0/go.mod h1:t7c4A6cfGdpUwwVxrQ0gQLeRQqGUBJu0yvE4F/26REg=
435435
github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA=
436436
github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec=
437-
github.com/cosmos/cosmos-sdk v0.50.10 h1:zXfeu/z653tWZARr/jESzAEiCUYjgJwwG4ytnYWMoDM=
438-
github.com/cosmos/cosmos-sdk v0.50.10/go.mod h1:6Eesrx3ZE7vxBZWpK++30H+Uc7Q4ahQWCL7JKU/LEdU=
437+
github.com/cosmos/cosmos-sdk v0.50.11 h1:LxR1aAc8kixdrs3itO+3a44sFoc+vjxVAOyPFx22yjk=
438+
github.com/cosmos/cosmos-sdk v0.50.11/go.mod h1:gt14Meok2IDCjbDtjwkbUcgVNEpUBDN/4hg9cCUtLgw=
439439
github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY=
440440
github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw=
441441
github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE=
442442
github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI=
443443
github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU=
444444
github.com/cosmos/gogoproto v1.7.0 h1:79USr0oyXAbxg3rspGh/m4SWNyoz/GLaAh0QlCe2fro=
445445
github.com/cosmos/gogoproto v1.7.0/go.mod h1:yWChEv5IUEYURQasfyBW5ffkMHR/90hiHgbNgrtp4j0=
446-
github.com/cosmos/iavl v1.2.0 h1:kVxTmjTh4k0Dh1VNL046v6BXqKziqMDzxo93oh3kOfM=
447-
github.com/cosmos/iavl v1.2.0/go.mod h1:HidWWLVAtODJqFD6Hbne2Y0q3SdxByJepHUOeoH4LiI=
446+
github.com/cosmos/iavl v1.2.2 h1:qHhKW3I70w+04g5KdsdVSHRbFLgt3yY3qTMd4Xa4rC8=
447+
github.com/cosmos/iavl v1.2.2/go.mod h1:GiM43q0pB+uG53mLxLDzimxM9l/5N9UuSY3/D0huuVw=
448448
github.com/cosmos/ibc-go/modules/capability v1.0.1 h1:ibwhrpJ3SftEEZRxCRkH0fQZ9svjthrX2+oXdZvzgGI=
449449
github.com/cosmos/ibc-go/modules/capability v1.0.1/go.mod h1:rquyOV262nGJplkumH+/LeYs04P3eV8oB7ZM4Ygqk4E=
450450
github.com/cosmos/ibc-go/v8 v8.5.1 h1:3JleEMKBjRKa3FeTKt4fjg22za/qygLBo7mDkoYTNBs=
@@ -508,8 +508,8 @@ github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5m
508508
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
509509
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
510510
github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
511-
github.com/emicklei/dot v1.6.1 h1:ujpDlBkkwgWUY+qPId5IwapRW/xEoligRSYjioR6DFI=
512-
github.com/emicklei/dot v1.6.1/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s=
511+
github.com/emicklei/dot v1.6.2 h1:08GN+DD79cy/tzN6uLCT84+2Wk9u+wvqP+Hkx/dIR8A=
512+
github.com/emicklei/dot v1.6.2/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s=
513513
github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
514514
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
515515
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=

proto/slinky/marketmap/v1/query.proto

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,20 @@ option go_package = "github.com/skip-mev/slinky/x/marketmap/types";
1212
// Query is the query service for the x/marketmap module.
1313
service Query {
1414
// MarketMap returns the full market map stored in the x/marketmap
15-
// module.
15+
// module. NOTE: the value returned by this query is not safe for on-chain
16+
// code.
1617
rpc MarketMap(MarketMapRequest) returns (MarketMapResponse) {
1718
option (google.api.http).get = "/slinky/marketmap/v1/marketmap";
1819
}
1920

21+
// Market returns all stored in the x/marketmap
22+
// module as a sorted list.
23+
rpc Markets(MarketsRequest) returns (MarketsResponse) {
24+
option (google.api.http) = {
25+
get : "/slinky/marketmap/v1/markets"
26+
};
27+
}
28+
2029
// Market returns a market stored in the x/marketmap
2130
// module.
2231
rpc Market(MarketRequest) returns (MarketResponse) {
@@ -55,6 +64,15 @@ message MarketMapResponse {
5564
string chain_id = 3;
5665
}
5766

67+
// MarketsRequest is the query request for the Market query.
68+
message MarketsRequest {}
69+
70+
// MarketsResponse is the query response for the Markets query.
71+
message MarketsResponse {
72+
// Markets is a sorted list of all markets in the module.
73+
repeated Market markets = 1 [ (gogoproto.nullable) = false ];
74+
}
75+
5876
// MarketRequest is the query request for the Market query.
5977
// It takes the currency pair of the market as an argument.
6078
message MarketRequest {

tests/integration/go.mod

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ toolchain go1.23.4
1515
require (
1616
cosmossdk.io/math v1.4.0
1717
github.com/cometbft/cometbft v0.38.15
18-
github.com/cosmos/cosmos-sdk v0.50.10
18+
github.com/cosmos/cosmos-sdk v0.50.11
1919
github.com/pelletier/go-toml/v2 v2.2.3
2020
github.com/skip-mev/slinky v1.0.4
2121
github.com/strangelove-ventures/interchaintest/v8 v8.8.1
@@ -40,7 +40,7 @@ require (
4040
cosmossdk.io/store v1.1.1 // indirect
4141
cosmossdk.io/x/evidence v0.1.1 // indirect
4242
cosmossdk.io/x/feegrant v0.1.1 // indirect
43-
cosmossdk.io/x/tx v0.13.5 // indirect
43+
cosmossdk.io/x/tx v0.13.7 // indirect
4444
cosmossdk.io/x/upgrade v0.1.4 // indirect
4545
filippo.io/edwards25519 v1.1.0 // indirect
4646
github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect
@@ -77,12 +77,12 @@ require (
7777
github.com/consensys/bavard v0.1.13 // indirect
7878
github.com/consensys/gnark-crypto v0.12.1 // indirect
7979
github.com/cosmos/btcutil v1.0.5 // indirect
80-
github.com/cosmos/cosmos-db v1.0.2 // indirect
80+
github.com/cosmos/cosmos-db v1.1.0 // indirect
8181
github.com/cosmos/cosmos-proto v1.0.0-beta.5 // indirect
8282
github.com/cosmos/go-bip39 v1.0.0 // indirect
8383
github.com/cosmos/gogogateway v1.2.0 // indirect
8484
github.com/cosmos/gogoproto v1.7.0 // indirect
85-
github.com/cosmos/iavl v1.2.0 // indirect
85+
github.com/cosmos/iavl v1.2.2 // indirect
8686
github.com/cosmos/ibc-go/modules/capability v1.0.1 // indirect
8787
github.com/cosmos/ibc-go/v8 v8.5.1 // indirect
8888
github.com/cosmos/ics23/go v0.11.0 // indirect

tests/integration/go.sum

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -212,8 +212,8 @@ cosmossdk.io/x/evidence v0.1.1 h1:Ks+BLTa3uftFpElLTDp9L76t2b58htjVbSZ86aoK/E4=
212212
cosmossdk.io/x/evidence v0.1.1/go.mod h1:OoDsWlbtuyqS70LY51aX8FBTvguQqvFrt78qL7UzeNc=
213213
cosmossdk.io/x/feegrant v0.1.1 h1:EKFWOeo/pup0yF0svDisWWKAA9Zags6Zd0P3nRvVvw8=
214214
cosmossdk.io/x/feegrant v0.1.1/go.mod h1:2GjVVxX6G2fta8LWj7pC/ytHjryA6MHAJroBWHFNiEQ=
215-
cosmossdk.io/x/tx v0.13.5 h1:FdnU+MdmFWn1pTsbfU0OCf2u6mJ8cqc1H4OMG418MLw=
216-
cosmossdk.io/x/tx v0.13.5/go.mod h1:V6DImnwJMTq5qFjeGWpXNiT/fjgE4HtmclRmTqRVM3w=
215+
cosmossdk.io/x/tx v0.13.7 h1:8WSk6B/OHJLYjiZeMKhq7DK7lHDMyK0UfDbBMxVmeOI=
216+
cosmossdk.io/x/tx v0.13.7/go.mod h1:V6DImnwJMTq5qFjeGWpXNiT/fjgE4HtmclRmTqRVM3w=
217217
cosmossdk.io/x/upgrade v0.1.4 h1:/BWJim24QHoXde8Bc64/2BSEB6W4eTydq0X/2f8+g38=
218218
cosmossdk.io/x/upgrade v0.1.4/go.mod h1:9v0Aj+fs97O+Ztw+tG3/tp5JSlrmT7IcFhAebQHmOPo=
219219
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
@@ -377,12 +377,12 @@ github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV
377377
github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
378378
github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk=
379379
github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis=
380-
github.com/cosmos/cosmos-db v1.0.2 h1:hwMjozuY1OlJs/uh6vddqnk9j7VamLv+0DBlbEXbAKs=
381-
github.com/cosmos/cosmos-db v1.0.2/go.mod h1:Z8IXcFJ9PqKK6BIsVOB3QXtkKoqUOp1vRvPT39kOXEA=
380+
github.com/cosmos/cosmos-db v1.1.0 h1:KLHNVQ73h7vawXTpj9UJ7ZR2IXv51tsEHkQJJ9EBDzI=
381+
github.com/cosmos/cosmos-db v1.1.0/go.mod h1:t7c4A6cfGdpUwwVxrQ0gQLeRQqGUBJu0yvE4F/26REg=
382382
github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA=
383383
github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec=
384-
github.com/cosmos/cosmos-sdk v0.50.10 h1:zXfeu/z653tWZARr/jESzAEiCUYjgJwwG4ytnYWMoDM=
385-
github.com/cosmos/cosmos-sdk v0.50.10/go.mod h1:6Eesrx3ZE7vxBZWpK++30H+Uc7Q4ahQWCL7JKU/LEdU=
384+
github.com/cosmos/cosmos-sdk v0.50.11 h1:LxR1aAc8kixdrs3itO+3a44sFoc+vjxVAOyPFx22yjk=
385+
github.com/cosmos/cosmos-sdk v0.50.11/go.mod h1:gt14Meok2IDCjbDtjwkbUcgVNEpUBDN/4hg9cCUtLgw=
386386
github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y=
387387
github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY=
388388
github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw=
@@ -391,8 +391,8 @@ github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ
391391
github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU=
392392
github.com/cosmos/gogoproto v1.7.0 h1:79USr0oyXAbxg3rspGh/m4SWNyoz/GLaAh0QlCe2fro=
393393
github.com/cosmos/gogoproto v1.7.0/go.mod h1:yWChEv5IUEYURQasfyBW5ffkMHR/90hiHgbNgrtp4j0=
394-
github.com/cosmos/iavl v1.2.0 h1:kVxTmjTh4k0Dh1VNL046v6BXqKziqMDzxo93oh3kOfM=
395-
github.com/cosmos/iavl v1.2.0/go.mod h1:HidWWLVAtODJqFD6Hbne2Y0q3SdxByJepHUOeoH4LiI=
394+
github.com/cosmos/iavl v1.2.2 h1:qHhKW3I70w+04g5KdsdVSHRbFLgt3yY3qTMd4Xa4rC8=
395+
github.com/cosmos/iavl v1.2.2/go.mod h1:GiM43q0pB+uG53mLxLDzimxM9l/5N9UuSY3/D0huuVw=
396396
github.com/cosmos/ibc-go/modules/capability v1.0.1 h1:ibwhrpJ3SftEEZRxCRkH0fQZ9svjthrX2+oXdZvzgGI=
397397
github.com/cosmos/ibc-go/modules/capability v1.0.1/go.mod h1:rquyOV262nGJplkumH+/LeYs04P3eV8oB7ZM4Ygqk4E=
398398
github.com/cosmos/ibc-go/v8 v8.5.1 h1:3JleEMKBjRKa3FeTKt4fjg22za/qygLBo7mDkoYTNBs=

tests/integration/slinky_setup.go

Lines changed: 65 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,8 @@ func QueryMarket(chain *cosmos.CosmosChain, cp slinkytypes.CurrencyPair) (mmtype
332332
return res.Market, nil
333333
}
334334

335-
// QueryMarketMap queries the market map.
335+
// QueryMarketMap queries the market map. This query util provides an additional query to the list endpoint
336+
// and ensures that the response data in both queries is equal.
336337
func QueryMarketMap(chain *cosmos.CosmosChain) (*mmtypes.MarketMapResponse, error) {
337338
grpcAddr := chain.GetHostGRPCAddress()
338339

@@ -349,7 +350,59 @@ func QueryMarketMap(chain *cosmos.CosmosChain) (*mmtypes.MarketMapResponse, erro
349350
ctx := context.Background()
350351

351352
// query the currency pairs
352-
res, err := client.MarketMap(ctx, &mmtypes.MarketMapRequest{})
353+
mapRes, err := client.MarketMap(ctx, &mmtypes.MarketMapRequest{})
354+
if err != nil {
355+
return nil, err
356+
}
357+
358+
if mapRes == nil {
359+
return nil, fmt.Errorf("map response is nil")
360+
}
361+
362+
// query markets to check that there is 1-1 correspondence to the map query
363+
listRes, err := QueryMarkets(chain)
364+
if err != nil {
365+
return nil, err
366+
}
367+
368+
if len(listRes.Markets) != len(mapRes.MarketMap.Markets) {
369+
return nil, fmt.Errorf("map and list responses should be the same length: got %d list, %d map",
370+
len(listRes.Markets),
371+
len(mapRes.MarketMap.Markets),
372+
)
373+
}
374+
for _, market := range listRes.Markets {
375+
mapMarket, found := mapRes.MarketMap.Markets[market.Ticker.String()]
376+
if !found {
377+
return nil, fmt.Errorf("market %s not found", market.Ticker.String())
378+
}
379+
380+
if !market.Equal(mapMarket) {
381+
return nil, fmt.Errorf("market %s is not equal to %s", market.Ticker.String(), mapMarket.String())
382+
}
383+
}
384+
385+
return mapRes, nil
386+
}
387+
388+
// QueryMarkets queries all markets .
389+
func QueryMarkets(chain *cosmos.CosmosChain) (*mmtypes.MarketsResponse, error) {
390+
grpcAddr := chain.GetHostGRPCAddress()
391+
392+
// create the client
393+
cc, err := grpc.Dial(grpcAddr, grpc.WithTransportCredentials(insecure.NewCredentials()))
394+
if err != nil {
395+
return nil, err
396+
}
397+
defer cc.Close()
398+
399+
// create the mm client
400+
client := mmtypes.NewQueryClient(cc)
401+
402+
ctx := context.Background()
403+
404+
// query the currency pairs
405+
res, err := client.Markets(ctx, &mmtypes.MarketsRequest{})
353406
if err != nil {
354407
return nil, err
355408
}
@@ -500,6 +553,16 @@ func (s *SlinkyIntegrationSuite) RemoveMarket(
500553
return fmt.Errorf(resp.TxResult.Log)
501554
}
502555

556+
// check market map and lastUpdated
557+
mmResp, err := QueryMarketMap(chain)
558+
s.Require().NoError(err)
559+
560+
// ensure that the market no longer exist
561+
for _, market := range markets {
562+
_, found := mmResp.MarketMap.Markets[market.String()]
563+
s.Require().False(found)
564+
}
565+
503566
return nil
504567
}
505568

0 commit comments

Comments
 (0)