diff --git a/packages/data/package.json b/packages/data/package.json index 924816e..7183cab 100644 --- a/packages/data/package.json +++ b/packages/data/package.json @@ -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 ", diff --git a/packages/data/src/index.ts b/packages/data/src/index.ts index 04d7ca7..4b739c8 100644 --- a/packages/data/src/index.ts +++ b/packages/data/src/index.ts @@ -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 }; diff --git a/packages/data/src/network.test.ts b/packages/data/src/network.test.ts index d13bbf0..9830bc5 100644 --- a/packages/data/src/network.test.ts +++ b/packages/data/src/network.test.ts @@ -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", () => { @@ -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(); }); }); diff --git a/packages/data/src/network.ts b/packages/data/src/network.ts index 2516576..9cfd7b6 100644 --- a/packages/data/src/network.ts +++ b/packages/data/src/network.ts @@ -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()} } }` ); @@ -100,7 +100,7 @@ interface StakeStats { id: string, numStakers: string, totalStaked: string - stakedPercentiles: string[] + stakedPercentiles?: string[] } const stakeStatsProperies = { @@ -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 }}); } }