From b653d3fb76591417c6770d9ac2de3f23104eaafd Mon Sep 17 00:00:00 2001 From: emidev98 Date: Thu, 1 Feb 2024 12:36:33 +0200 Subject: [PATCH] feat(bank): supply by denom API --- package-lock.json | 4 +- package.json | 2 +- src/client/lcd/api/BankAPI.spec.ts | 12 +++++- src/client/lcd/api/BankAPI.ts | 66 +++++++++++++++++++----------- 4 files changed, 56 insertions(+), 28 deletions(-) diff --git a/package-lock.json b/package-lock.json index b6ab1454..952bdd21 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@terra-money/feather.js", - "version": "2.0.2", + "version": "2.0.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@terra-money/feather.js", - "version": "2.0.2", + "version": "2.0.3", "license": "MIT", "dependencies": { "@terra-money/legacy.proto": "npm:@terra-money/terra.proto@^0.1.7", diff --git a/package.json b/package.json index e1f9852a..82e7454f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@terra-money/feather.js", - "version": "2.0.2", + "version": "2.0.3", "description": "The JavaScript SDK for Terra and Feather chains", "license": "MIT", "author": "Terraform Labs, PTE.", diff --git a/src/client/lcd/api/BankAPI.spec.ts b/src/client/lcd/api/BankAPI.spec.ts index 7ba782c9..98326535 100644 --- a/src/client/lcd/api/BankAPI.spec.ts +++ b/src/client/lcd/api/BankAPI.spec.ts @@ -1,3 +1,4 @@ +import exp from 'constants'; import { LCDClient } from '../LCDClient'; import { BankAPI } from './BankAPI'; @@ -27,9 +28,18 @@ describe('BankAPI', () => { describe('parameters', () => { it('parameters', async () => { - const param = await bank.parameters('pisco-1'); + const param = await bank.params('pisco-1'); expect(param.default_send_enabled).toBeDefined(); }); }); + + describe('supplyByDenom', () => { + it('query uluna supplyByDenom', async () => { + const res = await bank.supplyByDenom('pisco-1', 'uluna'); + + expect(res.denom).toBe('uluna'); + expect(res.amount.toNumber()).toBeGreaterThan(0); + }); + }); }); diff --git a/src/client/lcd/api/BankAPI.ts b/src/client/lcd/api/BankAPI.ts index f03a543f..4c8e7eb7 100644 --- a/src/client/lcd/api/BankAPI.ts +++ b/src/client/lcd/api/BankAPI.ts @@ -1,5 +1,5 @@ import { BaseAPI } from './BaseAPI'; -import { Coins, AccAddress } from '../../../core'; +import { Coins, Coin, AccAddress } from '../../../core'; import { APIParams, Pagination, PaginationOptions } from '../APIRequester'; import { LCDClient } from '../LCDClient'; @@ -31,6 +31,23 @@ export class BankAPI extends BaseAPI { super(lcd.apiRequesters, lcd.config); } + /** + * Query parameters of the bank module, + * @param chainID chain id + * @returns params of the bank module + */ + public async params( + chainID: string, + params: APIParams = {} + ): Promise { + return this.getReqFromChainID(chainID) + .get<{ params: BankParams.Data }>(`/cosmos/bank/v1beta1/params`, params) + .then(({ params: d }) => ({ + send_enabled: d.send_enabled, + default_send_enabled: d.default_send_enabled, + })); + } + /** * Look up the balance of an account by its address. * @param address address of account to look up. @@ -47,6 +64,22 @@ export class BankAPI extends BaseAPI { .then(d => [Coins.fromData(d.balances), d.pagination]); } + /** + * Lqueries the spenable balance of all coins for a single account. + * @param address address of account to look up. + */ + public async spendableBalances( + address: AccAddress, + params: Partial = {} + ): Promise<[Coins, Pagination]> { + return this.getReqFromAddress(address) + .get<{ + balances: Coins.Data; + pagination: Pagination; + }>(`/cosmos/bank/v1beta1/spendable_balances/${address}`, params) + .then(d => [Coins.fromData(d.balances), d.pagination]); + } + /** * Get the total supply of tokens in circulation for all denominations. * @param chainID chain id @@ -64,31 +97,16 @@ export class BankAPI extends BaseAPI { } /** - * Lqueries the spenable balance of all coins for a single account. - * @param address address of account to look up. + * Get the total supply of tokens in circulation for all denom. + * @param chainID chain id + * @param denom denom of the coin */ - public async spendableBalances( - address: AccAddress, - params: Partial = {} - ): Promise<[Coins, Pagination]> { - return this.getReqFromAddress(address) - .get<{ - balances: Coins.Data; - pagination: Pagination; - }>(`/cosmos/bank/v1beta1/spendable_balances/${address}`, params) - .then(d => [Coins.fromData(d.balances), d.pagination]); - } - - public async parameters( - chainID: string, - params: APIParams = {} - ): Promise { + public async supplyByDenom(chainID: string, denom: string): Promise { return this.getReqFromChainID(chainID) - .get<{ params: BankParams.Data }>(`/cosmos/bank/v1beta1/params`, params) - .then(({ params: d }) => ({ - send_enabled: d.send_enabled, - default_send_enabled: d.default_send_enabled, - })); + .get<{ amount: Coin.Data }>(`/cosmos/bank/v1beta1/supply/by_denom`, { + denom: denom, + }) + .then(d => Coin.fromData(d.amount)); } // TODO: TBD: implement denoms_medata?