|
// 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)); |
|
} |