From f239f86047c44d938170821117c6810992e7a554 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Thu, 9 Jul 2020 14:45:57 +0200 Subject: [PATCH] Add StakingExtension --- packages/sdk38/src/index.ts | 4 +++ packages/sdk38/src/lcdapi/index.ts | 6 ++++ packages/sdk38/src/lcdapi/staking.spec.ts | 43 +++++++++++++++++++++++ packages/sdk38/src/lcdapi/staking.ts | 36 +++++++++++++++++++ packages/sdk38/types/index.d.ts | 4 +++ packages/sdk38/types/lcdapi/index.d.ts | 6 ++++ packages/sdk38/types/lcdapi/staking.d.ts | 25 +++++++++++++ 7 files changed, 124 insertions(+) create mode 100644 packages/sdk38/src/lcdapi/staking.spec.ts create mode 100644 packages/sdk38/src/lcdapi/staking.ts create mode 100644 packages/sdk38/types/lcdapi/staking.d.ts diff --git a/packages/sdk38/src/index.ts b/packages/sdk38/src/index.ts index ff94bed9..81ddccea 100644 --- a/packages/sdk38/src/index.ts +++ b/packages/sdk38/src/index.ts @@ -63,10 +63,14 @@ export { setupGovExtension, setupMintExtension, setupSlashingExtension, + setupStakingExtension, setupSupplyExtension, SlashingExtension, SlashingParametersResponse, SlashingSigningInfosResponse, + StakingExtension, + StakingParametersResponse, + StakingPoolResponse, SupplyExtension, TxsResponse, } from "./lcdapi"; diff --git a/packages/sdk38/src/lcdapi/index.ts b/packages/sdk38/src/lcdapi/index.ts index 742a2a1b..b0dcbb5f 100644 --- a/packages/sdk38/src/lcdapi/index.ts +++ b/packages/sdk38/src/lcdapi/index.ts @@ -42,6 +42,12 @@ export { SlashingParametersResponse, SlashingSigningInfosResponse, } from "./slashing"; +export { + setupStakingExtension, + StakingExtension, + StakingParametersResponse, + StakingPoolResponse, +} from "./staking"; export { setupSupplyExtension, SupplyExtension, TotalSupplyAllResponse, TotalSupplyResponse } from "./supply"; // diff --git a/packages/sdk38/src/lcdapi/staking.spec.ts b/packages/sdk38/src/lcdapi/staking.spec.ts new file mode 100644 index 00000000..8810277e --- /dev/null +++ b/packages/sdk38/src/lcdapi/staking.spec.ts @@ -0,0 +1,43 @@ +/* eslint-disable @typescript-eslint/camelcase */ +import { nonNegativeIntegerMatcher, pendingWithoutWasmd, wasmd } from "../testutils.spec"; +import { LcdClient } from "./lcdclient"; +import { setupStakingExtension, StakingExtension } from "./staking"; + +function makeStakingClient(apiUrl: string): LcdClient & StakingExtension { + return LcdClient.withExtensions({ apiUrl }, setupStakingExtension); +} + +describe("StakingExtension", () => { + describe("pool", () => { + it("works", async () => { + pendingWithoutWasmd(); + const client = makeStakingClient(wasmd.endpoint); + const response = await client.staking.pool(); + expect(response).toEqual({ + height: jasmine.stringMatching(nonNegativeIntegerMatcher), + result: { + not_bonded_tokens: "0", + bonded_tokens: "250000000", + }, + }); + }); + }); + + describe("parameters", () => { + it("works", async () => { + pendingWithoutWasmd(); + const client = makeStakingClient(wasmd.endpoint); + const response = await client.staking.parameters(); + expect(response).toEqual({ + height: jasmine.stringMatching(nonNegativeIntegerMatcher), + result: { + unbonding_time: "1814400000000000", + max_validators: 100, + max_entries: 7, + historical_entries: 0, + bond_denom: "ustake", + }, + }); + }); + }); +}); diff --git a/packages/sdk38/src/lcdapi/staking.ts b/packages/sdk38/src/lcdapi/staking.ts new file mode 100644 index 00000000..081fe74d --- /dev/null +++ b/packages/sdk38/src/lcdapi/staking.ts @@ -0,0 +1,36 @@ +import { LcdClient } from "./lcdclient"; + +export interface StakingPoolResponse { + readonly height: string; + readonly result: { + readonly not_bonded_tokens: string; + readonly bonded_tokens: string; + }; +} + +export interface StakingParametersResponse { + readonly height: string; + readonly result: { + readonly unbonding_time: string; + readonly max_validators: number; + readonly max_entries: number; + readonly historical_entries: number; + readonly bond_denom: string; + }; +} + +export interface StakingExtension { + readonly staking: { + readonly pool: () => Promise; + readonly parameters: () => Promise; + }; +} + +export function setupStakingExtension(base: LcdClient): StakingExtension { + return { + staking: { + pool: async () => base.get(`/staking/pool`), + parameters: async () => base.get(`/staking/parameters`), + }, + }; +} diff --git a/packages/sdk38/types/index.d.ts b/packages/sdk38/types/index.d.ts index 07e7a554..7aaafa40 100644 --- a/packages/sdk38/types/index.d.ts +++ b/packages/sdk38/types/index.d.ts @@ -61,10 +61,14 @@ export { setupGovExtension, setupMintExtension, setupSlashingExtension, + setupStakingExtension, setupSupplyExtension, SlashingExtension, SlashingParametersResponse, SlashingSigningInfosResponse, + StakingExtension, + StakingParametersResponse, + StakingPoolResponse, SupplyExtension, TxsResponse, } from "./lcdapi"; diff --git a/packages/sdk38/types/lcdapi/index.d.ts b/packages/sdk38/types/lcdapi/index.d.ts index 77819d6c..43ce0c21 100644 --- a/packages/sdk38/types/lcdapi/index.d.ts +++ b/packages/sdk38/types/lcdapi/index.d.ts @@ -38,6 +38,12 @@ export { SlashingParametersResponse, SlashingSigningInfosResponse, } from "./slashing"; +export { + setupStakingExtension, + StakingExtension, + StakingParametersResponse, + StakingPoolResponse, +} from "./staking"; export { setupSupplyExtension, SupplyExtension, TotalSupplyAllResponse, TotalSupplyResponse } from "./supply"; export { BlockResponse, diff --git a/packages/sdk38/types/lcdapi/staking.d.ts b/packages/sdk38/types/lcdapi/staking.d.ts new file mode 100644 index 00000000..09f186e6 --- /dev/null +++ b/packages/sdk38/types/lcdapi/staking.d.ts @@ -0,0 +1,25 @@ +import { LcdClient } from "./lcdclient"; +export interface StakingPoolResponse { + readonly height: string; + readonly result: { + readonly not_bonded_tokens: string; + readonly bonded_tokens: string; + }; +} +export interface StakingParametersResponse { + readonly height: string; + readonly result: { + readonly unbonding_time: string; + readonly max_validators: number; + readonly max_entries: number; + readonly historical_entries: number; + readonly bond_denom: string; + }; +} +export interface StakingExtension { + readonly staking: { + readonly pool: () => Promise; + readonly parameters: () => Promise; + }; +} +export declare function setupStakingExtension(base: LcdClient): StakingExtension;