From 50dbca558bb4149c18c1a1262c5b8a1b0617e23f Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Thu, 9 Jul 2020 14:04:35 +0200 Subject: [PATCH] Add MintExtension --- packages/sdk38/src/index.ts | 5 +++ packages/sdk38/src/lcdapi/index.ts | 7 +++ packages/sdk38/src/lcdapi/mint.spec.ts | 59 ++++++++++++++++++++++++++ packages/sdk38/src/lcdapi/mint.ts | 41 ++++++++++++++++++ packages/sdk38/src/testutils.spec.ts | 4 ++ packages/sdk38/types/index.d.ts | 5 +++ packages/sdk38/types/lcdapi/index.d.ts | 7 +++ packages/sdk38/types/lcdapi/mint.d.ts | 28 ++++++++++++ 8 files changed, 156 insertions(+) create mode 100644 packages/sdk38/src/lcdapi/mint.spec.ts create mode 100644 packages/sdk38/src/lcdapi/mint.ts create mode 100644 packages/sdk38/types/lcdapi/mint.d.ts diff --git a/packages/sdk38/src/index.ts b/packages/sdk38/src/index.ts index 917e6728..f7d21dc6 100644 --- a/packages/sdk38/src/index.ts +++ b/packages/sdk38/src/index.ts @@ -30,12 +30,17 @@ export { EncodeTxResponse, LcdApiArray, LcdClient, + MintAnnualProvisionsResponse, + MintExtension, + MintInflationResponse, + MintParametersResponse, NodeInfoResponse, normalizeLcdApiArray, PostTxsResponse, SearchTxsResponse, setupAuthExtension, setupBankExtension, + setupMintExtension, setupSlashingExtension, setupSupplyExtension, SlashingExtension, diff --git a/packages/sdk38/src/lcdapi/index.ts b/packages/sdk38/src/lcdapi/index.ts index 97a7899b..11ef100e 100644 --- a/packages/sdk38/src/lcdapi/index.ts +++ b/packages/sdk38/src/lcdapi/index.ts @@ -4,6 +4,13 @@ export { AuthExtension, AuthAccountsResponse, setupAuthExtension } from "./auth"; export { BankBalancesResponse, BankExtension, setupBankExtension } from "./bank"; +export { + MintAnnualProvisionsResponse, + MintExtension, + MintInflationResponse, + MintParametersResponse, + setupMintExtension, +} from "./mint"; export { setupSlashingExtension, SlashingExtension, diff --git a/packages/sdk38/src/lcdapi/mint.spec.ts b/packages/sdk38/src/lcdapi/mint.spec.ts new file mode 100644 index 00000000..201a461e --- /dev/null +++ b/packages/sdk38/src/lcdapi/mint.spec.ts @@ -0,0 +1,59 @@ +/* eslint-disable @typescript-eslint/camelcase */ +import { + bigDecimalMatcher, + nonNegativeIntegerMatcher, + pendingWithoutWasmd, + smallDecimalMatcher, + wasmd, +} from "../testutils.spec"; +import { LcdClient } from "./lcdclient"; +import { MintExtension, setupMintExtension } from "./mint"; + +function makeMintClient(apiUrl: string): LcdClient & MintExtension { + return LcdClient.withExtensions({ apiUrl }, setupMintExtension); +} + +describe("MintExtension", () => { + describe("parameters", () => { + it("works", async () => { + pendingWithoutWasmd(); + const client = makeMintClient(wasmd.endpoint); + const response = await client.mint.parameters(); + expect(response).toEqual({ + height: jasmine.stringMatching(nonNegativeIntegerMatcher), + result: { + mint_denom: "ustake", + inflation_rate_change: "0.130000000000000000", + inflation_max: "0.200000000000000000", + inflation_min: "0.070000000000000000", + goal_bonded: "0.670000000000000000", + blocks_per_year: "6311520", + }, + }); + }); + }); + + describe("inflation", () => { + it("works", async () => { + pendingWithoutWasmd(); + const client = makeMintClient(wasmd.endpoint); + const response = await client.mint.inflation(); + expect(response).toEqual({ + height: jasmine.stringMatching(nonNegativeIntegerMatcher), + result: jasmine.stringMatching(smallDecimalMatcher), + }); + }); + }); + + describe("annualProvisions", () => { + it("works", async () => { + pendingWithoutWasmd(); + const client = makeMintClient(wasmd.endpoint); + const response = await client.mint.annualProvisions(); + expect(response).toEqual({ + height: jasmine.stringMatching(nonNegativeIntegerMatcher), + result: jasmine.stringMatching(bigDecimalMatcher), + }); + }); + }); +}); diff --git a/packages/sdk38/src/lcdapi/mint.ts b/packages/sdk38/src/lcdapi/mint.ts new file mode 100644 index 00000000..7f8cde68 --- /dev/null +++ b/packages/sdk38/src/lcdapi/mint.ts @@ -0,0 +1,41 @@ +import { LcdClient } from "./lcdclient"; + +export interface MintParametersResponse { + readonly height: string; + readonly result: { + readonly mint_denom: string; + readonly inflation_rate_change: string; + readonly inflation_max: string; + readonly inflation_min: string; + readonly goal_bonded: string; + readonly blocks_per_year: string; + }; +} + +export interface MintInflationResponse { + readonly height: string; + readonly result: string; +} + +export interface MintAnnualProvisionsResponse { + readonly height: string; + readonly result: string; +} + +export interface MintExtension { + readonly mint: { + readonly parameters: () => Promise; + readonly inflation: () => Promise; + readonly annualProvisions: () => Promise; + }; +} + +export function setupMintExtension(base: LcdClient): MintExtension { + return { + mint: { + parameters: async () => base.get(`/minting/parameters`), + inflation: async () => base.get(`/minting/inflation`), + annualProvisions: async () => base.get(`/minting/annual-provisions`), + }, + }; +} diff --git a/packages/sdk38/src/testutils.spec.ts b/packages/sdk38/src/testutils.spec.ts index e61c6927..005fdc26 100644 --- a/packages/sdk38/src/testutils.spec.ts +++ b/packages/sdk38/src/testutils.spec.ts @@ -9,6 +9,10 @@ export function makeRandomAddress(): string { } export const nonNegativeIntegerMatcher = /^[0-9]+$/; +/** Matches decimals < 1.0 */ +export const smallDecimalMatcher = /^0\.[0-9]+$/; +/** Matches decimals >= 1.0 */ +export const bigDecimalMatcher = /^[1-9][0-9]*\.[0-9]+$/; export const tendermintIdMatcher = /^[0-9A-F]{64}$/; export const tendermintOptionalIdMatcher = /^([0-9A-F]{64}|)$/; export const tendermintAddressMatcher = /^[0-9A-F]{40}$/; diff --git a/packages/sdk38/types/index.d.ts b/packages/sdk38/types/index.d.ts index 4b06f60c..fe529970 100644 --- a/packages/sdk38/types/index.d.ts +++ b/packages/sdk38/types/index.d.ts @@ -28,12 +28,17 @@ export { EncodeTxResponse, LcdApiArray, LcdClient, + MintAnnualProvisionsResponse, + MintExtension, + MintInflationResponse, + MintParametersResponse, NodeInfoResponse, normalizeLcdApiArray, PostTxsResponse, SearchTxsResponse, setupAuthExtension, setupBankExtension, + setupMintExtension, setupSlashingExtension, setupSupplyExtension, SlashingExtension, diff --git a/packages/sdk38/types/lcdapi/index.d.ts b/packages/sdk38/types/lcdapi/index.d.ts index 38335cf6..d22a29b4 100644 --- a/packages/sdk38/types/lcdapi/index.d.ts +++ b/packages/sdk38/types/lcdapi/index.d.ts @@ -1,5 +1,12 @@ export { AuthExtension, AuthAccountsResponse, setupAuthExtension } from "./auth"; export { BankBalancesResponse, BankExtension, setupBankExtension } from "./bank"; +export { + MintAnnualProvisionsResponse, + MintExtension, + MintInflationResponse, + MintParametersResponse, + setupMintExtension, +} from "./mint"; export { setupSlashingExtension, SlashingExtension, diff --git a/packages/sdk38/types/lcdapi/mint.d.ts b/packages/sdk38/types/lcdapi/mint.d.ts new file mode 100644 index 00000000..755d002a --- /dev/null +++ b/packages/sdk38/types/lcdapi/mint.d.ts @@ -0,0 +1,28 @@ +import { LcdClient } from "./lcdclient"; +export interface MintParametersResponse { + readonly height: string; + readonly result: { + readonly mint_denom: string; + readonly inflation_rate_change: string; + readonly inflation_max: string; + readonly inflation_min: string; + readonly goal_bonded: string; + readonly blocks_per_year: string; + }; +} +export interface MintInflationResponse { + readonly height: string; + readonly result: string; +} +export interface MintAnnualProvisionsResponse { + readonly height: string; + readonly result: string; +} +export interface MintExtension { + readonly mint: { + readonly parameters: () => Promise; + readonly inflation: () => Promise; + readonly annualProvisions: () => Promise; + }; +} +export declare function setupMintExtension(base: LcdClient): MintExtension;