Skip to content

Commit 49d5e3d

Browse files
authored
Merge pull request #82 from terra-money/feat/feemarket
feat: feemarket
2 parents ec383ff + 72cb69b commit 49d5e3d

File tree

14 files changed

+879
-9
lines changed

14 files changed

+879
-9
lines changed

package-lock.json

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@terra-money/feather.js",
3-
"version": "2.0.4",
3+
"version": "2.1.0-beta.1",
44
"description": "The JavaScript SDK for Terra and Feather chains",
55
"license": "MIT",
66
"author": "Terraform Labs, PTE.",
@@ -86,7 +86,7 @@
8686
},
8787
"dependencies": {
8888
"@terra-money/legacy.proto": "npm:@terra-money/terra.proto@^0.1.7",
89-
"@terra-money/terra.proto": "^4.0.4",
89+
"@terra-money/terra.proto": "^4.0.10",
9090
"assert": "^2.0.0",
9191
"axios": "^0.27.2",
9292
"bech32": "^2.0.0",

src/client/lcd/LCDClient.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import { FeeshareAPI } from './api/FeeshareAPI';
2727
import { GovV1API } from './api/GovV1API';
2828
import { ICAv1API } from './api/ICAv1API';
2929
import { ICQv1API } from './api/ICQv1API';
30+
import { FeemarketAPI } from './api/FeemarketAPI';
3031

3132
export type AxiosConfig = {
3233
/**
@@ -135,6 +136,7 @@ export class LCDClient {
135136
public ibcTransfer: IbcTransferAPI;
136137
public pob: PobAPI;
137138
public feeshare: FeeshareAPI;
139+
public feemarket: FeemarketAPI;
138140
public utils: LCDUtils;
139141

140142
/**
@@ -185,6 +187,7 @@ export class LCDClient {
185187
this.tx = new TxAPI(this);
186188
this.pob = new PobAPI(this);
187189
this.feeshare = new FeeshareAPI(this);
190+
this.feemarket = new FeemarketAPI(this);
188191
this.utils = new LCDUtils(this);
189192
}
190193

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import Decimal from 'decimal.js';
2+
import {
3+
FeemarketDenomParams,
4+
FeemarketParams,
5+
FeemarketState,
6+
} from '../../../core/feemarket';
7+
import { LCDClient } from '../LCDClient';
8+
import { FeemarketAPI } from './FeemarketAPI';
9+
10+
const lcd = new LCDClient({
11+
'pisco-1': {
12+
chainID: 'pisco-1',
13+
gasAdjustment: 1.5,
14+
gasPrices: {
15+
uluna: 0.02,
16+
},
17+
lcd: 'http://localhost:1317/',
18+
prefix: 'terra',
19+
},
20+
});
21+
const feemarket = new FeemarketAPI(lcd);
22+
23+
describe('FeemarketAPI', () => {
24+
it('asset the module params', async () => {
25+
const res = await feemarket.params('pisco-1');
26+
27+
expect(res).toStrictEqual(
28+
new FeemarketParams(
29+
new Decimal(0),
30+
new Decimal(1),
31+
new Decimal(0),
32+
new Decimal(0.125),
33+
new Decimal(0.125),
34+
new Decimal(15000000),
35+
new Decimal(30000000),
36+
new Decimal(1),
37+
true,
38+
'uluna'
39+
)
40+
);
41+
42+
expect(res.toData()).toEqual({
43+
alpha: '0',
44+
beta: '1',
45+
theta: '0',
46+
min_learning_rate: '0.125',
47+
max_learning_rate: '0.125',
48+
target_block_utilization: '15000000',
49+
max_block_utilization: '30000000',
50+
window: '1',
51+
enabled: true,
52+
default_fee_denom: 'uluna',
53+
});
54+
});
55+
56+
it('asset the module state', async () => {
57+
const res = await feemarket.state('pisco-1');
58+
expect(res).toStrictEqual(
59+
new FeemarketState(new Decimal(0.125), [new Decimal(0)], new Decimal(0))
60+
);
61+
expect(res.toData()).toEqual({
62+
learning_rate: '0.125',
63+
window: ['0'],
64+
index: '0',
65+
});
66+
});
67+
68+
it('get fee denom params', async () => {
69+
const res = await feemarket.feeDenomParam('pisco-1', 'uluna');
70+
expect(res).toStrictEqual([
71+
new FeemarketDenomParams(
72+
'uluna',
73+
new Decimal('0.0015'),
74+
new Decimal('0.0015')
75+
),
76+
]);
77+
expect(res[0].toData()).toEqual({
78+
fee_denom: 'uluna',
79+
min_base_fee: '0.0015',
80+
base_fee: '0.0015',
81+
});
82+
});
83+
});

src/client/lcd/api/FeemarketAPI.ts

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import {
2+
FeemarketDenomParams,
3+
FeemarketParams,
4+
FeemarketState,
5+
} from '../../../core/feemarket';
6+
import { APIParams, PaginationOptions } from '../APIRequester';
7+
import { LCDClient } from '../LCDClient';
8+
import { BaseAPI } from './BaseAPI';
9+
10+
export class FeemarketAPI extends BaseAPI {
11+
constructor(public lcd: LCDClient) {
12+
super(lcd.apiRequesters, lcd.config);
13+
}
14+
15+
/**
16+
* Query the feemarket module params.
17+
*
18+
* @tags Query
19+
* @name params
20+
* @request GET:/feemarket/v1/params
21+
*/
22+
public async params(
23+
chainId: string,
24+
params: Partial<APIParams> = {}
25+
): Promise<FeemarketParams> {
26+
const res = await this.getReqFromChainID(chainId).get<{
27+
params: FeemarketParams.Data;
28+
}>(`/feemarket/v1/params`, params);
29+
30+
return FeemarketParams.fromData(res.params);
31+
}
32+
33+
/**
34+
* Query feemarket state.
35+
*
36+
* @tags Query
37+
* @name state
38+
* @request GET:/feemarket/v1/state
39+
*/
40+
public async state(chainId: string, params: Partial<APIParams> = {}) {
41+
const res = await this.getReqFromChainID(chainId).get<{
42+
state: FeemarketState.Data;
43+
}>(`/feemarket/v1/state`, params);
44+
45+
return FeemarketState.fromData(res.state);
46+
}
47+
48+
/**
49+
* Query the current feeDenomParam for fee_denom.
50+
*
51+
* @tags Query
52+
* @name feeDenomParam
53+
* @summary Query the current feeDenomParam for fee_denom.
54+
* @request GET:/feemarket/v1/fee_denom_param/${feeDenom} or GET:/feemarket/v1/fee_denom_param/
55+
*/
56+
public async feeDenomParam(
57+
chainId: string,
58+
feeDenom: string,
59+
params?: Partial<PaginationOptions & APIParams>
60+
): Promise<Array<FeemarketDenomParams>> {
61+
const res = await this.getReqFromChainID(chainId).get<{
62+
fee_denom_params: Array<FeemarketDenomParams.Data>;
63+
}>(`/feemarket/v1/fee_denom_param/${feeDenom}`, params);
64+
65+
return res.fee_denom_params.map(x => FeemarketDenomParams.fromData(x));
66+
}
67+
}

src/core/alliance/proposals/v1/MsgCreateAlliance.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ export class MsgCreateAlliance extends JSONSerializable<
124124
rewardChangeInterval,
125125
rewardWeightRange,
126126
} = this;
127+
127128
return MsgCreateAlliance_pb.fromPartial({
128129
authority,
129130
denom,

src/core/feemarket/index.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export * from './v1/models/FeemarketParams';
2+
export * from './v1/proposals/MsgFeeDenomParam';
3+
export * from './v1/proposals/MsgRemoveFeeDenomParam';
4+
export * from './v1/proposals/MsgParams';
5+
export * from './v1/models/FeemarketState';
6+
export * from './v1/models/FeemarketDenomParams';
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
import { FeeDenomParam as FeeDenomParam_pb } from '@terra-money/terra.proto/feemarket/feemarket/v1/genesis';
2+
import { Denom } from 'core/Denom';
3+
import Decimal from 'decimal.js';
4+
import { JSONSerializable } from '../../../../util/json';
5+
6+
export class FeemarketDenomParams extends JSONSerializable<
7+
FeemarketDenomParams.Amino,
8+
FeemarketDenomParams.Data,
9+
FeemarketDenomParams.Proto
10+
> {
11+
constructor(
12+
public feeDenom: Denom,
13+
public minBaseFee: Decimal,
14+
public baseFee: Decimal
15+
) {
16+
super();
17+
}
18+
19+
public static fromAmino(
20+
data: FeemarketDenomParams.Amino
21+
): FeemarketDenomParams {
22+
const {
23+
value: { fee_denom, min_base_fee, base_fee },
24+
} = data;
25+
26+
return new FeemarketDenomParams(
27+
fee_denom,
28+
new Decimal(min_base_fee),
29+
new Decimal(base_fee)
30+
);
31+
}
32+
33+
public toAmino(): FeemarketDenomParams.Amino {
34+
const { feeDenom, minBaseFee, baseFee } = this;
35+
36+
return {
37+
value: {
38+
fee_denom: feeDenom,
39+
min_base_fee: minBaseFee.toString(),
40+
base_fee: baseFee.toString(),
41+
},
42+
};
43+
}
44+
45+
public static fromData(
46+
data: FeemarketDenomParams.Data,
47+
_?: boolean
48+
): FeemarketDenomParams {
49+
_;
50+
const { fee_denom, min_base_fee, base_fee } = data;
51+
return new FeemarketDenomParams(
52+
fee_denom,
53+
new Decimal(min_base_fee),
54+
new Decimal(base_fee)
55+
);
56+
}
57+
58+
public toData(_?: boolean): FeemarketDenomParams.Data {
59+
_;
60+
const { feeDenom, minBaseFee, baseFee } = this;
61+
return {
62+
fee_denom: feeDenom,
63+
min_base_fee: minBaseFee.toString(),
64+
base_fee: baseFee.toString(),
65+
};
66+
}
67+
68+
public static fromProto(
69+
proto: FeemarketDenomParams.Proto
70+
): FeemarketDenomParams {
71+
return new FeemarketDenomParams(
72+
proto.feeDenom,
73+
new Decimal(proto.minBaseFee),
74+
new Decimal(proto.baseFee)
75+
);
76+
}
77+
78+
public toProto(): FeemarketDenomParams.Proto {
79+
const { feeDenom, minBaseFee, baseFee } = this;
80+
return {
81+
feeDenom,
82+
minBaseFee: minBaseFee.toString(),
83+
baseFee: baseFee.toString(),
84+
};
85+
}
86+
}
87+
88+
export namespace FeemarketDenomParams {
89+
export interface Amino {
90+
value: {
91+
fee_denom: string;
92+
min_base_fee: string;
93+
base_fee: string;
94+
};
95+
}
96+
97+
export interface Data {
98+
fee_denom: string;
99+
min_base_fee: string;
100+
base_fee: string;
101+
}
102+
export type Proto = FeeDenomParam_pb;
103+
}

0 commit comments

Comments
 (0)