Skip to content

Commit b9de294

Browse files
committed
fix: work around thegraphs 1000 item limit
1 parent 1d67dc4 commit b9de294

File tree

2 files changed

+11549
-17
lines changed

2 files changed

+11549
-17
lines changed

src/utils/get-tokens.ts

Lines changed: 57 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,59 @@ export default async function getTokens(
1818
provider: ethers.providers.JsonRpcProvider,
1919
chainId: number,
2020
): Promise<TokenInfo[]> {
21-
const response = await fetch(process.env.T2CR_GRAPH_URL, {
21+
const registryResponse = await fetch(process.env.T2CR_GRAPH_URL, {
2222
method: 'POST',
2323
body: JSON.stringify({
2424
query: `
25-
query Tokens {
26-
tokensA: tokens(first: 1000, where: { status: Registered }) {
27-
name
28-
ticker
29-
address
30-
symbolMultihash
25+
{
26+
registries {
27+
numberOfSubmissions
3128
}
32-
tokensB: tokens(where: { status: ClearingRequested }) {
29+
}
30+
`,
31+
}),
32+
})
33+
34+
const {
35+
data: { registries },
36+
} = (await registryResponse.json()) || {}
37+
const registry = registries[0]
38+
const { numberOfSubmissions } = registry
39+
const rounds = Math.ceil(numberOfSubmissions / 1000)
40+
41+
let tokensFromSubgraph: TokenFromSubgraph[] = []
42+
43+
for (let i = 0; i < rounds; i++) {
44+
const registeredResponse = await fetch(process.env.T2CR_GRAPH_URL, {
45+
method: 'POST',
46+
body: JSON.stringify({
47+
query: `
48+
{
49+
tokens(skip: ${
50+
i * 1000
51+
}, first: 1000, where: { status: Registered }) {
52+
name
53+
ticker
54+
address
55+
symbolMultihash
56+
}
57+
}
58+
`,
59+
}),
60+
})
61+
62+
const {
63+
data: { tokens: registeredTokens },
64+
} = (await registeredResponse.json()) || {}
65+
tokensFromSubgraph = tokensFromSubgraph.concat(registeredTokens)
66+
}
67+
68+
const clearingRequestedResponse = await fetch(process.env.T2CR_GRAPH_URL, {
69+
method: 'POST',
70+
body: JSON.stringify({
71+
query: `
72+
{
73+
tokens(where: { status: ClearingRequested }) {
3374
name
3475
ticker
3576
address
@@ -39,15 +80,14 @@ export default async function getTokens(
3980
`,
4081
}),
4182
})
42-
43-
const { data } = (await response.json()) || {}
44-
const { tokensA, tokensB } = data || {}
45-
const tokensFromSubgraph: TokenFromSubgraph[] = tokensA
46-
.concat(tokensB)
47-
.map((t: TokenFromSubgraph) => ({
48-
...t,
49-
address: ethers.utils.getAddress(t.address),
50-
}))
83+
const {
84+
data: { tokens: clearingRequestedTokens },
85+
} = (await clearingRequestedResponse.json()) || {}
86+
tokensFromSubgraph = tokensFromSubgraph.concat(clearingRequestedTokens)
87+
tokensFromSubgraph = tokensFromSubgraph.map((t: TokenFromSubgraph) => ({
88+
...t,
89+
address: ethers.utils.getAddress(t.address),
90+
}))
5191

5292
// We use a view contract to return token decimals
5393
// efficiently.

0 commit comments

Comments
 (0)