Skip to content

Commit

Permalink
add timeseries wrapper
Browse files Browse the repository at this point in the history
  • Loading branch information
jquesnelle committed Sep 2, 2021
1 parent bff24e6 commit cd1476e
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 8 deletions.
2 changes: 1 addition & 1 deletion packages/data/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@eden-network/data",
"version": "1.0.5",
"version": "1.0.6",
"main": "dist/index.js",
"typings": "dist/index.d.ts",
"author": "Jeffrey Quesnelle <jeff@edennetwork.io>",
Expand Down
8 changes: 8 additions & 0 deletions packages/data/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,18 @@ import { currentDistribution, distribution, distributions, account, accounts } f
import { stakeStats, staker, stakers, stakerLeaderboard, slots, slotClaims } from './network';
import { Network, GOVERNANCE_CONTRACT, DISTRIBUTOR_CONTRACT, NETWORK_CONTRACT, TOKEN_CONTRACT } from './constants';

async function timeseries({blocks, network, target}: {blocks: number[], network: Network, target}, targetArguments: {}) {
return Promise.all(blocks.map(async (block) => ({
block,
data: await target({block, network, ...targetArguments})
})));
}

export {
producer, producers, producerSetChanges, producerRewardCollectorChanges,
blocks, blocksPaged, epochs, rewardSchedule,
currentDistribution, distribution, distributions, account, accounts,
stakeStats, staker, stakers, stakerLeaderboard, slots, slotClaims,
timeseries,
Network, GOVERNANCE_CONTRACT, DISTRIBUTOR_CONTRACT, NETWORK_CONTRACT, TOKEN_CONTRACT
};
26 changes: 23 additions & 3 deletions packages/data/src/network.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { staker, stakeStats, slots, stakers, stakerLeaderboard, slotClaims } from "./";
import { staker, stakeStats, slots, stakers, stakerLeaderboard, slotClaims, timeseries } from "./";

describe("network", () => {
describe("staker", () => {
Expand Down Expand Up @@ -40,11 +40,31 @@ describe("network", () => {

describe("stakeStats", () => {
it("mainnet", async () => {
const result = await stakeStats({block: 13069287, network: "mainnet"});
const result = await stakeStats({block: 13069287, network: "mainnet", includePercentiles: true});
expect(result).not.toBeUndefined();
expect(result.numStakers).toEqual(739);
expect(result.totalStaked).toEqual(BigInt("1287612749679959946014557"));
expect(result.stakedPercentiles.length).toEqual(100);
expect(result.stakedPercentiles?.length).toEqual(100);
});

it("mainnet timeseries", async () => {
const result = await timeseries({blocks: [13148000, 13147000, 13146000], network: "mainnet", target: stakeStats}, {includePercentiles: false});
expect(result).not.toBeUndefined();

expect(result[0].block).toEqual(13148000);
expect(result[0].data.numStakers).toEqual(1794);
expect(result[0].data.totalStaked).toEqual(BigInt("4244505866143056306602141"));
expect(result[0].data.stakedPercentiles).toBeUndefined();

expect(result[1].block).toEqual(13147000);
expect(result[1].data.numStakers).toEqual(1780);
expect(result[1].data.totalStaked).toEqual(BigInt("4045687347421179919289751"));
expect(result[2].data.stakedPercentiles).toBeUndefined();

expect(result[2].block).toEqual(13146000);
expect(result[2].data.numStakers).toEqual(1773);
expect(result[2].data.totalStaked).toEqual(BigInt("4000305237548249344695752"));
expect(result[2].data.stakedPercentiles).toBeUndefined();
});
});

Expand Down
14 changes: 10 additions & 4 deletions packages/data/src/network.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ import { request, gql } from 'graphql-request';
import { GRAPH_API_ENDPOINTS, NETWORK_CONTRACT, Network } from './constants';
const graphResultsPager = require('graph-results-pager');

export async function stakeStats({block, network}: {block?: number, network: Network} = {network: 'mainnet'}) {
export async function stakeStats({block, network, includePercentiles}: {block?: number, network: Network, includePercentiles: boolean} = {network: 'mainnet', includePercentiles: true}) {
const blockCondition = block ? `block: { number: ${block} }` : '';

const result = await request(GRAPH_API_ENDPOINTS[network].network,
gql`{
network(id: "${NETWORK_CONTRACT[network].address}", ${blockCondition}) {
${stakeStatsProperies.properties.toString()}
${includePercentiles ? stakeStatsProperies.properties.toString() : stakeStatsProperies.propertiesWithoutPercentiles.toString()}
}
}`
);
Expand Down Expand Up @@ -100,7 +100,7 @@ interface StakeStats {
id: string,
numStakers: string,
totalStaked: string
stakedPercentiles: string[]
stakedPercentiles?: string[]
}

const stakeStatsProperies = {
Expand All @@ -111,12 +111,18 @@ const stakeStatsProperies = {
'stakedPercentiles'
],

propertiesWithoutPercentiles: [
'id',
'numStakers',
'totalStaked'
],

callback(results: StakeStats[]) {
return results.map(network => { return {
id: network.id,
numStakers: Number(network.numStakers),
totalStaked: BigInt(network.totalStaked),
stakedPercentiles: network.stakedPercentiles.map(x => BigInt(x))
stakedPercentiles: network.stakedPercentiles !== undefined ? network.stakedPercentiles.map(x => BigInt(x)) : undefined
}});
}
}
Expand Down

0 comments on commit cd1476e

Please sign in to comment.