Skip to content

Instantly share code, notes, and snippets.

@justinkalland
Created May 20, 2021 11:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save justinkalland/f684b8e5794ccacc9c16c22094492055 to your computer and use it in GitHub Desktop.
Save justinkalland/f684b8e5794ccacc9c16c22094492055 to your computer and use it in GitHub Desktop.
Fetch all subgraph PoH requests using ghetto creation time pagination
const PAGE_SIZE = 1000
async function fetchAllRequests (resolved = false): Promise<Array<{}>> {
let requests: Array<{}> = []
let creationTimeOffset = Math.floor(Date.now() / 1000)
while (creationTimeOffset > 0) {
logger.debug(`Fetching ${PAGE_SIZE} ${resolved ? 'resolved' : 'unresolved'} requests starting at ${creationTimeOffset}`)
const response = await axios.post('https://api.thegraph.com/subgraphs/name/kleros/proof-of-humanity-mainnet', {
query: `
{
requests(first: ${PAGE_SIZE}, orderBy: creationTime, orderDirection: desc, where: {resolved: ${resolved.toString()}, creationTime_lte: ${creationTimeOffset}}) {
id
submission {
id
creationTime
status
registered
submissionTime
name
vouchesReceivedLength
disputed
requestsLength
}
creationTime
disputed
lastStatusChange
resolved
requester
vouches {
id
}
usedReasons
currentReason
requesterLost
registration
evidence {
id
URI
}
}
}
`
})
if (response.data?.data?.requests === undefined) {
logger.error(response.data, 'No responses returned from Subgraph.')
creationTimeOffset = 0
continue
}
requests = [...requests, ...response.data.data.requests]
if (response.data.data.requests.length === PAGE_SIZE) {
creationTimeOffset = response.data.data.requests.pop().creationTime
} else {
creationTimeOffset = 0
}
}
requests = [...new Set(requests)]
logger.debug(`Fetched ${requests.length} ${resolved ? 'resolved' : 'unresolved'} requests`)
return requests
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment