Skip to content

Instantly share code, notes, and snippets.

@zh
Last active January 20, 2021 13:28
Show Gist options
  • Save zh/d032b774e995b0f7f86e25a45d131363 to your computer and use it in GitHub Desktop.
Save zh/d032b774e995b0f7f86e25a45d131363 to your computer and use it in GitHub Desktop.
Get CP2021 team scores
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