From 0d6484648a3c8db72b2f2db377a9b243a521c3c8 Mon Sep 17 00:00:00 2001 From: willclarktech Date: Tue, 14 Jul 2020 15:37:07 +0200 Subject: [PATCH] sdk38: Add gov parametersByType endpoint to lcd --- packages/sdk38/src/lcdapi/gov.spec.ts | 54 ++++++++++++++++ packages/sdk38/src/lcdapi/gov.ts | 92 +++++++++++++++++++++++++++ packages/sdk38/types/lcdapi/gov.d.ts | 70 ++++++++++++++++++++ 3 files changed, 216 insertions(+) create mode 100644 packages/sdk38/src/lcdapi/gov.spec.ts create mode 100644 packages/sdk38/src/lcdapi/gov.ts create mode 100644 packages/sdk38/types/lcdapi/gov.d.ts diff --git a/packages/sdk38/src/lcdapi/gov.spec.ts b/packages/sdk38/src/lcdapi/gov.spec.ts new file mode 100644 index 00000000..904199ff --- /dev/null +++ b/packages/sdk38/src/lcdapi/gov.spec.ts @@ -0,0 +1,54 @@ +/* eslint-disable @typescript-eslint/camelcase */ +import { nonNegativeIntegerMatcher, pendingWithoutWasmd, wasmd } from "../testutils.spec"; +import { GovExtension, GovParametersType, setupGovExtension } from "./gov"; +import { LcdClient } from "./lcdclient"; + +function makeGovClient(apiUrl: string): LcdClient & GovExtension { + return LcdClient.withExtensions({ apiUrl }, setupGovExtension); +} + +describe("GovExtension", () => { + describe("parametersByType", () => { + it("works for deposit", async () => { + pendingWithoutWasmd(); + const client = makeGovClient(wasmd.endpoint); + const paramsType = GovParametersType.Deposit; + const response = await client.gov.parametersByType(paramsType); + expect(response).toEqual({ + height: jasmine.stringMatching(nonNegativeIntegerMatcher), + result: { + min_deposit: [{ denom: "ustake", amount: "10000000" }], + max_deposit_period: "172800000000000", + }, + }); + }); + + it("works for tallying", async () => { + pendingWithoutWasmd(); + const client = makeGovClient(wasmd.endpoint); + const paramsType = GovParametersType.Tallying; + const response = await client.gov.parametersByType(paramsType); + expect(response).toEqual({ + height: jasmine.stringMatching(nonNegativeIntegerMatcher), + result: { + quorum: "0.334000000000000000", + threshold: "0.500000000000000000", + veto: "0.334000000000000000", + }, + }); + }); + + it("works for voting", async () => { + pendingWithoutWasmd(); + const client = makeGovClient(wasmd.endpoint); + const paramsType = GovParametersType.Voting; + const response = await client.gov.parametersByType(paramsType); + expect(response).toEqual({ + height: jasmine.stringMatching(nonNegativeIntegerMatcher), + result: { + voting_period: "172800000000000", + }, + }); + }); + }); +}); diff --git a/packages/sdk38/src/lcdapi/gov.ts b/packages/sdk38/src/lcdapi/gov.ts new file mode 100644 index 00000000..d7c89e59 --- /dev/null +++ b/packages/sdk38/src/lcdapi/gov.ts @@ -0,0 +1,92 @@ +import { Coin } from "../coins"; +import { LcdClient } from "./lcdclient"; + +export enum GovParametersType { + Deposit = "deposit", + Tallying = "tallying", + Voting = "voting", +} + +export interface GovParametersDepositResponse { + readonly height: string; + readonly result: { + readonly min_deposit: readonly Coin[]; + readonly max_deposit_period: string; + }; +} + +export interface GovParametersTallyingResponse { + readonly height: string; + readonly result: { + readonly quorum: string; + readonly threshold: string; + readonly veto: string; + }; +} + +export interface GovParametersVotingResponse { + readonly height: string; + readonly result: { + readonly voting_period: string; + }; +} + +export type GovParametersByTypeResponse = + | GovParametersDepositResponse + | GovParametersTallyingResponse + | GovParametersVotingResponse; + +export interface GovProposalsResponse { + readonly height: string; + readonly result: {}; +} + +export interface GovProposalsByIdResponse { + readonly height: string; + readonly result: {}; +} + +export interface GovProposerResponse { + readonly height: string; + readonly result: {}; +} + +export interface GovDepositsResponse { + readonly height: string; + readonly result: {}; +} + +export interface GovDepositsByDepositorResponse { + readonly height: string; + readonly result: {}; +} + +export interface GovTallyResponse { + readonly height: string; + readonly result: {}; +} + +export interface GovVotesResponse { + readonly height: string; + readonly result: {}; +} + +export interface GovVotesByVoterResponse { + readonly height: string; + readonly result: {}; +} + +export interface GovExtension { + readonly gov: { + readonly parametersByType: (parametersType: GovParametersType) => Promise; + }; +} + +export function setupGovExtension(base: LcdClient): GovExtension { + return { + gov: { + parametersByType: async (parametersType: GovParametersType) => + base.get(`/gov/parameters/${parametersType}`), + }, + }; +} diff --git a/packages/sdk38/types/lcdapi/gov.d.ts b/packages/sdk38/types/lcdapi/gov.d.ts new file mode 100644 index 00000000..9623f647 --- /dev/null +++ b/packages/sdk38/types/lcdapi/gov.d.ts @@ -0,0 +1,70 @@ +import { Coin } from "../coins"; +import { LcdClient } from "./lcdclient"; +export declare enum GovParametersType { + Deposit = "deposit", + Tallying = "tallying", + Voting = "voting", +} +export interface GovParametersDepositResponse { + readonly height: string; + readonly result: { + readonly min_deposit: readonly Coin[]; + readonly max_deposit_period: string; + }; +} +export interface GovParametersTallyingResponse { + readonly height: string; + readonly result: { + readonly quorum: string; + readonly threshold: string; + readonly veto: string; + }; +} +export interface GovParametersVotingResponse { + readonly height: string; + readonly result: { + readonly voting_period: string; + }; +} +export declare type GovParametersByTypeResponse = + | GovParametersDepositResponse + | GovParametersTallyingResponse + | GovParametersVotingResponse; +export interface GovProposalsResponse { + readonly height: string; + readonly result: {}; +} +export interface GovProposalsByIdResponse { + readonly height: string; + readonly result: {}; +} +export interface GovProposerResponse { + readonly height: string; + readonly result: {}; +} +export interface GovDepositsResponse { + readonly height: string; + readonly result: {}; +} +export interface GovDepositsByDepositorResponse { + readonly height: string; + readonly result: {}; +} +export interface GovTallyResponse { + readonly height: string; + readonly result: {}; +} +export interface GovVotesResponse { + readonly height: string; + readonly result: {}; +} +export interface GovVotesByVoterResponse { + readonly height: string; + readonly result: {}; +} +export interface GovExtension { + readonly gov: { + readonly parametersByType: (parametersType: GovParametersType) => Promise; + }; +} +export declare function setupGovExtension(base: LcdClient): GovExtension;