Last active
January 20, 2021 13:28
-
-
Save zh/d032b774e995b0f7f86e25a45d131363 to your computer and use it in GitHub Desktop.
Get CP2021 team scores
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const axios = require('axios'); | |
const slpdbUri = 'https://slpdb.fountainhead.cash/q/'; | |
const btoa = function (str) { | |
return Buffer.from(str).toString('base64'); | |
}; | |
const slpList = [ | |
'simpleledger:qrr7ye5gtemkn6stvnfhh762g234tc4c2sqhruyr2f', | |
'simpleledger:qrt9q69sypxxaypugxptaaz57l4gnq0x4yvl0ns0f2', | |
'simpleledger:pqqjlxx4g7qxzlnj0dqk02g8me55vggcygjpfmfkx8', | |
'simpleledger:qzsmp3zyxuyxzdc9xdx2z2ys7vuprehvtvqs0kg8t5', | |
'simpleledger:qqjga3285te7ddwkgtl4ykmd83xxjte9lqjk62vke4', | |
'simpleledger:qquqtxcd6jdkk8dp7cha2cryuur6vqt6tgsw89gfnj', | |
'simpleledger:qpz3xnt2wu05as8970efah35tsjxc9yzeqmewq0xmf', | |
'simpleledger:qqjr0r5avz6x0vew9f9p4zyc5v8dzy7xushq3u5uq4', | |
'simpleledger:qz60eknvvq7e4f7pvg63336zpl79mud7msyzan8d3c', | |
'simpleledger:qqczwdlsvt02l9nu5q3zjw7uvl86xcn0gy6t7sjsu5', | |
'simpleledger:qq3e6n00l6d3gqylfmtztqrz93jrchjwvcnuf8v9jw', | |
'simpleledger:qrq72ntvsrc5ulmxcydncse0ckwum7s6fczghpfpac', | |
'simpleledger:qz3yn7t4u4y9j669hhrx5y7wlw0q6ajwnu7x9z3ef5', | |
'simpleledger:qpke8tkyrpt47hhwuk4lf7c6mjlq4qnk4vm6yp4e3c', | |
'simpleledger:qzqn399ljyt6zv5mvas4ecmt3k2xmjgway7rrh0x5j', | |
'simpleledger:qq063qtj6nu6vvv3ce4wkk5ssuqwf5yzfg8yr52nf2', | |
'simpleledger:qplz7wwaya5d22s6a5er8sg50cezgyvg7sa4853647', | |
'simpleledger:qqxtz0fw3gs5ndmwjm2we92k20zu3z99uuuxr25a2s', | |
'simpleledger:qpk0c0tj3tjgg5pepmtcaalvfm4vqjx6agh3dm9245', | |
'simpleledger:qqjswgwgw87jvhh6a05wnjqgspzqc99l5qushk4wvh', | |
'simpleledger:qrma980lvxddyjf0x2nrrktwptmr8mjejvvavn508l', | |
'simpleledger:qqq2cs5rk7ryrete96xd8n6ckljplhhp9q58tykyve', | |
'simpleledger:qzzf6vpwes27m8nqhajau0m4fld4wpvz2u3849jcew', | |
'simpleledger:qqg3yjcdhsqldqjp28aecj54q3p8t6j4dyzuq6jzv5', | |
'simpleledger:qrxsxnztn505sglmazf0qg8kv6upprg2gc5f7x0sd4', | |
'simpleledger:qqkqc0ucg992qsc450fvrm3pgkp3nfzlzygt950hva', | |
'simpleledger:qz3fj0264kfqjunvv6a9e3v2q2qt3akr0gq4qswaql', | |
'simpleledger:qqpy2cwa2h9h4caqht9rpnm87e9rmc46ssxl4u3x7m', | |
'simpleledger:qzu4zwcq6sfatnpgteawl3a73nezlgcjsyvrpkdakx', | |
'simpleledger:qrpr4kyjv84dh8ux3cr4reatccfrhnmfpuy4j82h4w', | |
'simpleledger:qqxz2ar6jzg9cacpy5w0vv5xvn79cv9p95srjx5qe6', | |
'simpleledger:qrr0pdxfgf4lgdenvx7cz56msrhfknl2agxevwva39', | |
'simpleledger:qzrkyhe8v34845rjevptka2l4gcyzff0gy9ag9sdth', | |
]; | |
async function querySlpDB(q) { | |
const b64 = btoa(JSON.stringify(q)); | |
const url = slpdbUri + b64; | |
const options = { | |
method: 'GET', | |
headers: { | |
'content-type': 'application/json', | |
}, | |
url, | |
}; | |
const result = await axios(options); | |
return result.data ? result.data : null; | |
} | |
function buildQuery(slp) { | |
return { | |
v: 3, | |
q: { | |
db: ['g'], | |
aggregate: [ | |
{ | |
$match: { | |
'graphTxn.outputs.address': slp, | |
'tokenDetails.tokenIdHex': | |
'78632119b0cfe861df5441dd6b3486afc99ce1dd1114b84018a6f3ae9508923f', | |
}, | |
}, | |
{ | |
$unwind: '$graphTxn.outputs', | |
}, | |
{ | |
$match: { | |
'graphTxn.outputs.address': slp, | |
'graphTxn.outputs.status': 'UNSPENT', | |
}, | |
}, | |
{ | |
$group: { | |
_id: '$graphTxn.outputs.address', | |
slpAmount: { | |
$sum: '$graphTxn.outputs.slpAmount', | |
}, | |
}, | |
}, | |
{ | |
$match: { | |
slpAmount: { | |
$gt: 0, | |
}, | |
}, | |
}, | |
], | |
sort: { | |
slpAmount: -1, | |
}, | |
project: { | |
address: '$_id', | |
token_balance: '$slpAmount', | |
}, | |
limit: 10, | |
skip: 0, | |
}, | |
}; | |
} | |
async function getTeamScores(slpList) { | |
try { | |
const scores = await Promise.all( | |
slpList.map(async (slp) => { | |
const query = buildQuery(slp); | |
const result = await querySlpDB(query); | |
if (result && result.g && result.g[0]) { | |
return { | |
address: result.g[0].address, | |
tokens: parseInt(result.g[0].token_balance, 10), | |
}; | |
} | |
}) | |
); | |
return scores | |
.filter((n) => n) | |
.sort((a, b) => (a.tokens > b.tokens ? -1 : 1)); | |
} catch (error) { | |
console.error('error in getTeamScores(): ', error); | |
} | |
} | |
const allScores = async (slpList) => { | |
const result = await getTeamScores(slpList); | |
console.log(JSON.stringify(result, null, 2)); | |
}; | |
allScores(slpList); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment