Skip to content

Commit

Permalink
feat: feemarket models to decimal and api extensions
Browse files Browse the repository at this point in the history
  • Loading branch information
emidev98 committed Feb 13, 2024
1 parent 0a647d1 commit 1329854
Show file tree
Hide file tree
Showing 17 changed files with 644 additions and 364 deletions.
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@terra-money/feather.js",
"version": "2.1.0-beta.0",
"version": "2.1.0-beta.1",
"description": "The JavaScript SDK for Terra and Feather chains",
"license": "MIT",
"author": "Terraform Labs, PTE.",
Expand Down
96 changes: 96 additions & 0 deletions src/client/lcd/api/Feemarket.API.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
import Decimal from 'decimal.js';
import {
BaseFee,
FeemarketDenomParams,
FeemarketParams,
FeemarketState,
} from '../../../core/feemarket';
import { LCDClient } from '../LCDClient';
import { FeemarketAPI } from './FeemarketAPI';
import { Coin } from '../../../core';

const lcd = new LCDClient({
'pisco-1': {
chainID: 'pisco-1',
gasAdjustment: 1.5,
gasPrices: {
uluna: 0.02,
},
lcd: 'http://localhost:1317/',
prefix: 'terra',
},
});
const feemarket = new FeemarketAPI(lcd);

describe('FeemarketAPI', () => {
it('asset the module params', async () => {
const res = await feemarket.params('pisco-1');

expect(res).toStrictEqual(
new FeemarketParams(
new Decimal(0),
new Decimal(1),
new Decimal(0),
new Decimal(0.125),
new Decimal(0.125),
new Decimal(15000000),
new Decimal(30000000),
new Decimal(1),
true,
'uluna'
)
);

expect(res.toData()).toEqual({
alpha: '0',
beta: '1',
theta: '0',
min_learning_rate: '0.125',
max_learning_rate: '0.125',
target_block_utilization: '15000000',
max_block_utilization: '30000000',
window: '1',
enabled: true,
default_fee_denom: 'uluna',
});
});

it('asset the module state', async () => {
const res = await feemarket.state('pisco-1');
expect(res).toStrictEqual(
new FeemarketState(new Decimal(0.125), [new Decimal(0)], new Decimal(0))
);
expect(res.toData()).toEqual({
learning_rate: '0.125',
window: ['0'],
index: '0',
});
});

it('get base fee', async () => {
const res = await feemarket.baseFee('pisco-1', 'uluna');
expect(res).toStrictEqual(new BaseFee(new Coin('uluna', '0.0015')));
expect(res.toData()).toEqual({
fee: {
amount: '0.001500000000000000',
denom: 'uluna',
},
});
});

it('get fee denom params', async () => {
const res = await feemarket.feeDenomParam('pisco-1', 'uluna');
expect(res).toStrictEqual([
new FeemarketDenomParams(
'uluna',
new Decimal('0.0015'),
new Decimal('0.0015')
),
]);
expect(res[0].toData()).toEqual({
fee_denom: 'uluna',
min_base_fee: '0.0015',
base_fee: '0.0015',
});
});
});
62 changes: 30 additions & 32 deletions src/client/lcd/api/FeemarketAPI.ts
Original file line number Diff line number Diff line change
@@ -1,51 +1,49 @@
import {
BaseFeeResponse,
FeeDenomParamResponse,
ParamsResponse,
StateResponse,
} from '@terra-money/terra.proto/feemarket/feemarket/v1/query';
import { APIParams, PaginationOptions } from '../APIRequester';
import { LCDClient } from '../LCDClient';
import { BaseAPI } from './BaseAPI';
import {
FeemarketParams,
FeemarketState,
BaseFee,
FeemarketDenomParams,
} from '../../../core/feemarket';

export class FeemarketAPI extends BaseAPI {
constructor(public lcd: LCDClient) {
super(lcd.apiRequesters, lcd.config);
}

/**
* Query the feemarket module params
* Query the feemarket module params.
*
* @tags Query
* @name params
* @request GET:/feemarket/v1/params
*/
public async params(
chainId: string,
params: Partial<PaginationOptions & APIParams> = {}
) {
return this.getReqFromChainID(chainId).get<ParamsResponse>(
`/feemarket/v1/params`,
params
);
params: Partial<APIParams> = {}
): Promise<FeemarketParams> {
const res = await this.getReqFromChainID(chainId).get<{
params: FeemarketParams.Data;
}>(`/feemarket/v1/params`, params);

return FeemarketParams.fromData(res.params);
}

/**
* Query feemarket state.
*
* @tags Query
* @name state
* @summary Query all paginated states of feemarket fee_denoms.
* @request GET:/feemarket/v1/state
*/
public async state(
chainId: string,
params: Partial<PaginationOptions & APIParams> = {}
) {
return this.getReqFromChainID(chainId).get<StateResponse>(
`/feemarket/v1/state`,
params
);
public async state(chainId: string, params: Partial<APIParams> = {}) {
const res = await this.getReqFromChainID(chainId).get<{
state: FeemarketState.Data;
}>(`/feemarket/v1/state`, params);

return FeemarketState.fromData(res.state);
}

/**
Expand All @@ -61,9 +59,12 @@ export class FeemarketAPI extends BaseAPI {
feeDenom: string,
params?: Partial<PaginationOptions & APIParams>
) {
const url = `/feemarket/v1/base_fee/${feeDenom}`;
const res = await this.getReqFromChainID(chainId).get<BaseFee.Data>(
`/feemarket/v1/base_fee/${feeDenom}`,
params
);

return this.getReqFromChainID(chainId).get<BaseFeeResponse>(url, params);
return BaseFee.fromData(res);
}

/**
Expand All @@ -78,14 +79,11 @@ export class FeemarketAPI extends BaseAPI {
chainId: string,
feeDenom: string,
params?: Partial<PaginationOptions & APIParams>
) {
const url = feeDenom
? `/feemarket/v1/fee_denom_param/${feeDenom}`
: `/feemarket/v1/fee_denom_param/`;
): Promise<Array<FeemarketDenomParams>> {
const res = await this.getReqFromChainID(chainId).get<{
fee_denom_params: Array<FeemarketDenomParams.Data>;
}>(`/feemarket/v1/fee_denom_param/${feeDenom}`, params);

return this.getReqFromChainID(chainId).get<FeeDenomParamResponse>(
url,
params
);
return res.fee_denom_params.map(x => FeemarketDenomParams.fromData(x));
}
}
6 changes: 6 additions & 0 deletions src/core/feemarket/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
export * from './v1/models/FeemarketParams';
export * from './v1/proposals/MsgFeeDenomParam';
export * from './v1/proposals/MsgParams';
export * from './v1/models/FeemarketState';
export * from './v1/models/FeemarketBaseFee';
export * from './v1/models/FeemarketDenomParams';
Loading

0 comments on commit 1329854

Please sign in to comment.