/
fees.ts
92 lines (84 loc) 路 2.71 KB
/
fees.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import { Percent, u64 } from "@saberhq/token-utils";
import type { RawFees } from "./layout.js";
export type Fees = {
trade: Percent;
withdraw: Percent;
adminTrade: Percent;
adminWithdraw: Percent;
};
export const DEFAULT_FEE = new Percent(0, 10000);
export const ZERO_FEES: Fees = {
/**
* Fee per trade
*/
trade: DEFAULT_FEE,
withdraw: DEFAULT_FEE,
adminTrade: DEFAULT_FEE,
adminWithdraw: DEFAULT_FEE,
};
const recommendedFeesRaw = {
adminTradeFeeNumerator: 50,
adminTradeFeeDenominator: 100,
adminWithdrawFeeNumerator: 50,
adminWithdrawFeeDenominator: 100,
tradeFeeNumerator: 20,
tradeFeeDenominator: 10000,
withdrawFeeNumerator: 50,
withdrawFeeDenominator: 10000,
};
export const RECOMMENDED_FEES: Fees = {
trade: new Percent(
recommendedFeesRaw.tradeFeeNumerator,
recommendedFeesRaw.tradeFeeDenominator
),
withdraw: new Percent(
recommendedFeesRaw.withdrawFeeNumerator,
recommendedFeesRaw.withdrawFeeDenominator
),
adminTrade: new Percent(
recommendedFeesRaw.adminTradeFeeNumerator,
recommendedFeesRaw.adminTradeFeeDenominator
),
adminWithdraw: new Percent(
recommendedFeesRaw.adminWithdrawFeeNumerator,
recommendedFeesRaw.adminWithdrawFeeDenominator
),
};
export const encodeFees = (fees: Fees): RawFees => ({
adminTradeFeeNumerator: new u64(
fees.adminTrade.numerator.toString()
).toBuffer(),
adminTradeFeeDenominator: new u64(
fees.adminTrade.denominator.toString()
).toBuffer(),
adminWithdrawFeeNumerator: new u64(
fees.adminWithdraw.numerator.toString()
).toBuffer(),
adminWithdrawFeeDenominator: new u64(
fees.adminWithdraw.denominator.toString()
).toBuffer(),
tradeFeeNumerator: new u64(fees.trade.numerator.toString()).toBuffer(),
tradeFeeDenominator: new u64(fees.trade.denominator.toString()).toBuffer(),
withdrawFeeNumerator: new u64(fees.withdraw.numerator.toString()).toBuffer(),
withdrawFeeDenominator: new u64(
fees.withdraw.denominator.toString()
).toBuffer(),
});
export const decodeFees = (raw: RawFees): Fees => ({
adminTrade: new Percent(
u64.fromBuffer(Buffer.from(raw.adminTradeFeeNumerator)).toString(),
u64.fromBuffer(Buffer.from(raw.adminTradeFeeDenominator)).toString()
),
adminWithdraw: new Percent(
u64.fromBuffer(Buffer.from(raw.adminWithdrawFeeNumerator)).toString(),
u64.fromBuffer(Buffer.from(raw.adminWithdrawFeeDenominator)).toString()
),
trade: new Percent(
u64.fromBuffer(Buffer.from(raw.tradeFeeNumerator)).toString(),
u64.fromBuffer(Buffer.from(raw.tradeFeeDenominator)).toString()
),
withdraw: new Percent(
u64.fromBuffer(Buffer.from(raw.withdrawFeeNumerator)).toString(),
u64.fromBuffer(Buffer.from(raw.withdrawFeeDenominator)).toString()
),
});