Skip to content

Instantly share code, notes, and snippets.

@togosh
Created February 1, 2022 16:56
Show Gist options
  • Save togosh/4ff1d113e9824f3e76f94682c1fb7719 to your computer and use it in GitHub Desktop.
Save togosh/4ff1d113e9824f3e76f94682c1fb7719 to your computer and use it in GitHub Desktop.
Get Sum of All TShares for an Address - Codeak HEX API
// https://codeakk.medium.com/hex-development-data-a1b1822446fa
// https://togosh.medium.com/hex-developer-guide-3b018a943a55
// Replace XXXX below with staker address
test();
async function test(){
var stakerAddress = "XXXX";
var { stakeTShares, stakedHEX, stakedCount } = await get_stakeStartData(stakerAddress);
console.log("Staked Tshares: " + stakeTShares);
console.log("Staked HEX : " + stakedHEX);
console.log("Stake Count: " + stakedCount);
}
async function get_stakeStartData($stakerAddress){
var $lastStakeId = 0;
var stakedCount = 0;
var stakedHEXSum = 0;
var stakeTSharesSum = 0;
while (true) {
var data = await get_stakeStarts($lastStakeId, $stakerAddress);
if (data.count <= 0) { break; }
stakedCount += data.count;
$lastStakeId = data.lastStakeId;
stakedHEXSum += data.stakedHEX;
stakeTSharesSum += data.stakeTShares;
console.log($lastStakeId);
await sleep(300);
}
return {
stakedCount: stakedCount,
stakedHEX: stakedHEXSum,
stakeTShares: stakeTSharesSum,
}
}
async function get_stakeStarts($lastStakeId, $stakerAddress){
return await fetch('https://api.thegraph.com/subgraphs/name/codeakk/hex', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ query: `
query {
stakeStarts(first: 1000, orderBy: stakeId,
where: {
stakeId_gt: "` + $lastStakeId + `",
stakeEnd: null,
stakeGoodAccounting: null,
stakerAddr: "` + $stakerAddress + `",
}
) {
stakeId
stakedDays
stakerAddr
stakedHearts
stakeTShares
}
}`
}),
})
.then(res => res.json())
.then(res => {
var stakeCount = Object.keys(res.data.stakeStarts).length;
if (stakeCount <= 0) {
return {
count: 0,
stakedHEX: 0,
stakeTShares: 0,
};
}
else {
var stakeStartsReduced = res.data.stakeStarts.reduce(function(previousValue, currentValue) {
return {
stakedHearts: parseInt(previousValue.stakedHearts, 10) + parseInt(currentValue.stakedHearts, 10),
stakeTShares: parseInt(previousValue.stakeTShares, 10) + parseInt(currentValue.stakeTShares, 10),
}
});
var lastStakeId = res.data.stakeStarts[(stakeCount - 1)].stakeId;
var data = {
count: stakeCount,
lastStakeId: lastStakeId,
stakedHEX: stakeStartsReduced.stakedHearts / 100000000,
stakeTShares: stakeStartsReduced.stakeTShares,
};
return data;
}});
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment