From e09ff5a78c4e1a4e0b04fcb7de1833c7a426ac98 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Thu, 9 Jul 2020 11:08:28 +0200 Subject: [PATCH] Add support for slashing queries --- packages/sdk38/src/index.ts | 4 ++ packages/sdk38/src/lcdapi/index.ts | 6 +++ packages/sdk38/src/lcdapi/slashing.spec.ts | 49 ++++++++++++++++++++++ packages/sdk38/src/lcdapi/slashing.ts | 46 ++++++++++++++++++++ packages/sdk38/types/index.d.ts | 4 ++ packages/sdk38/types/lcdapi/index.d.ts | 6 +++ packages/sdk38/types/lcdapi/slashing.d.ts | 31 ++++++++++++++ 7 files changed, 146 insertions(+) create mode 100644 packages/sdk38/src/lcdapi/slashing.spec.ts create mode 100644 packages/sdk38/src/lcdapi/slashing.ts create mode 100644 packages/sdk38/types/lcdapi/slashing.d.ts diff --git a/packages/sdk38/src/index.ts b/packages/sdk38/src/index.ts index e7c7636f..917e6728 100644 --- a/packages/sdk38/src/index.ts +++ b/packages/sdk38/src/index.ts @@ -36,7 +36,11 @@ export { SearchTxsResponse, setupAuthExtension, setupBankExtension, + setupSlashingExtension, setupSupplyExtension, + SlashingExtension, + SlashingParametersResponse, + SlashingSigningInfosResponse, SupplyExtension, TxsResponse, } from "./lcdapi"; diff --git a/packages/sdk38/src/lcdapi/index.ts b/packages/sdk38/src/lcdapi/index.ts index d94b7aac..97a7899b 100644 --- a/packages/sdk38/src/lcdapi/index.ts +++ b/packages/sdk38/src/lcdapi/index.ts @@ -4,6 +4,12 @@ export { AuthExtension, AuthAccountsResponse, setupAuthExtension } from "./auth"; export { BankBalancesResponse, BankExtension, setupBankExtension } from "./bank"; +export { + setupSlashingExtension, + SlashingExtension, + SlashingParametersResponse, + SlashingSigningInfosResponse, +} from "./slashing"; export { setupSupplyExtension, SupplyExtension, TotalSupplyAllResponse, TotalSupplyResponse } from "./supply"; // diff --git a/packages/sdk38/src/lcdapi/slashing.spec.ts b/packages/sdk38/src/lcdapi/slashing.spec.ts new file mode 100644 index 00000000..5e6db321 --- /dev/null +++ b/packages/sdk38/src/lcdapi/slashing.spec.ts @@ -0,0 +1,49 @@ +/* eslint-disable @typescript-eslint/camelcase */ +import { nonNegativeIntegerMatcher, pendingWithoutWasmd, wasmd } from "../testutils.spec"; +import { LcdClient } from "./lcdclient"; +import { setupSlashingExtension, SlashingExtension } from "./slashing"; + +function makeSlashingClient(apiUrl: string): LcdClient & SlashingExtension { + return LcdClient.withExtensions({ apiUrl }, setupSlashingExtension); +} + +describe("SlashingExtension", () => { + describe("signingInfos", () => { + it("works", async () => { + pendingWithoutWasmd(); + const client = makeSlashingClient(wasmd.endpoint); + const response = await client.slashing.signingInfos(); + expect(response).toEqual({ + height: jasmine.stringMatching(nonNegativeIntegerMatcher), + result: [ + { + address: "cosmosvalcons1yyjaavsv98lwn8he9lzcjhefzyyn4xygfyxls0", + start_height: "0", + index_offset: jasmine.stringMatching(nonNegativeIntegerMatcher), + jailed_until: "1970-01-01T00:00:00Z", + tombstoned: false, + missed_blocks_counter: "0", + }, + ], + }); + }); + }); + + describe("parameters", () => { + it("works", async () => { + pendingWithoutWasmd(); + const client = makeSlashingClient(wasmd.endpoint); + const response = await client.slashing.parameters(); + expect(response).toEqual({ + height: jasmine.stringMatching(nonNegativeIntegerMatcher), + result: { + signed_blocks_window: "100", + min_signed_per_window: "0.500000000000000000", + downtime_jail_duration: "600000000000", + slash_fraction_double_sign: "0.050000000000000000", + slash_fraction_downtime: "0.010000000000000000", + }, + }); + }); + }); +}); diff --git a/packages/sdk38/src/lcdapi/slashing.ts b/packages/sdk38/src/lcdapi/slashing.ts new file mode 100644 index 00000000..3f023b30 --- /dev/null +++ b/packages/sdk38/src/lcdapi/slashing.ts @@ -0,0 +1,46 @@ +import { LcdClient } from "./lcdclient"; + +interface SlashingSigningInfo { + readonly address: string; + readonly start_height: string; + readonly index_offset: string; + readonly jailed_until: string; + readonly tombstoned: boolean; + readonly missed_blocks_counter: string; +} + +export interface SlashingSigningInfosResponse { + readonly height: string; + readonly result: readonly SlashingSigningInfo[]; +} + +export interface SlashingParametersResponse { + readonly height: string; + readonly result: { + readonly signed_blocks_window: string; + readonly min_signed_per_window: string; + readonly downtime_jail_duration: string; + readonly slash_fraction_double_sign: string; + readonly slash_fraction_downtime: string; + }; +} + +export interface SlashingExtension { + readonly slashing: { + readonly signingInfos: () => Promise; + readonly parameters: () => Promise; + }; +} + +export function setupSlashingExtension(base: LcdClient): SlashingExtension { + return { + slashing: { + signingInfos: async () => { + return base.get(`/slashing/signing_infos`); + }, + parameters: async () => { + return base.get(`/slashing/parameters`); + }, + }, + }; +} diff --git a/packages/sdk38/types/index.d.ts b/packages/sdk38/types/index.d.ts index ab573f75..4b06f60c 100644 --- a/packages/sdk38/types/index.d.ts +++ b/packages/sdk38/types/index.d.ts @@ -34,7 +34,11 @@ export { SearchTxsResponse, setupAuthExtension, setupBankExtension, + setupSlashingExtension, setupSupplyExtension, + SlashingExtension, + SlashingParametersResponse, + SlashingSigningInfosResponse, SupplyExtension, TxsResponse, } from "./lcdapi"; diff --git a/packages/sdk38/types/lcdapi/index.d.ts b/packages/sdk38/types/lcdapi/index.d.ts index 1e885a99..38335cf6 100644 --- a/packages/sdk38/types/lcdapi/index.d.ts +++ b/packages/sdk38/types/lcdapi/index.d.ts @@ -1,5 +1,11 @@ export { AuthExtension, AuthAccountsResponse, setupAuthExtension } from "./auth"; export { BankBalancesResponse, BankExtension, setupBankExtension } from "./bank"; +export { + setupSlashingExtension, + SlashingExtension, + SlashingParametersResponse, + SlashingSigningInfosResponse, +} from "./slashing"; export { setupSupplyExtension, SupplyExtension, TotalSupplyAllResponse, TotalSupplyResponse } from "./supply"; export { BlockResponse, diff --git a/packages/sdk38/types/lcdapi/slashing.d.ts b/packages/sdk38/types/lcdapi/slashing.d.ts new file mode 100644 index 00000000..deaedf5e --- /dev/null +++ b/packages/sdk38/types/lcdapi/slashing.d.ts @@ -0,0 +1,31 @@ +import { LcdClient } from "./lcdclient"; +interface SlashingSigningInfo { + readonly address: string; + readonly start_height: string; + readonly index_offset: string; + readonly jailed_until: string; + readonly tombstoned: boolean; + readonly missed_blocks_counter: string; +} +export interface SlashingSigningInfosResponse { + readonly height: string; + readonly result: readonly SlashingSigningInfo[]; +} +export interface SlashingParametersResponse { + readonly height: string; + readonly result: { + readonly signed_blocks_window: string; + readonly min_signed_per_window: string; + readonly downtime_jail_duration: string; + readonly slash_fraction_double_sign: string; + readonly slash_fraction_downtime: string; + }; +} +export interface SlashingExtension { + readonly slashing: { + readonly signingInfos: () => Promise; + readonly parameters: () => Promise; + }; +} +export declare function setupSlashingExtension(base: LcdClient): SlashingExtension; +export {};