@kasufinance/kasu-sdk 2.6.0 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +128 -3
- package/dist/bundle.cjs.js +1119 -254
- package/dist/bundle.esm.js +1109 -255
- package/dist/domain/index.d.ts +3 -2
- package/dist/domain/index.js +2 -2
- package/dist/domain/index.js.map +1 -1
- package/dist/domain/requests.d.ts +42 -4
- package/dist/domain/requests.js +20 -4
- package/dist/domain/requests.js.map +1 -1
- package/dist/domain/wallet-errors.d.ts +63 -8
- package/dist/domain/wallet-errors.js +115 -16
- package/dist/domain/wallet-errors.js.map +1 -1
- package/dist/facade/deposits.js +2 -1
- package/dist/facade/deposits.js.map +1 -1
- package/dist/facade/flows.d.ts +95 -0
- package/dist/facade/flows.js +116 -0
- package/dist/facade/flows.js.map +1 -0
- package/dist/facade/index.d.ts +3 -0
- package/dist/facade/index.js +3 -0
- package/dist/facade/index.js.map +1 -1
- package/dist/facade/kasu.d.ts +6 -2
- package/dist/facade/kasu.js +28 -3
- package/dist/facade/kasu.js.map +1 -1
- package/dist/facade/read-only.d.ts +12 -0
- package/dist/facade/read-only.js +13 -0
- package/dist/facade/read-only.js.map +1 -0
- package/dist/flows/deposit-flow.d.ts +301 -0
- package/dist/flows/deposit-flow.js +358 -0
- package/dist/flows/deposit-flow.js.map +1 -0
- package/dist/flows/flow.d.ts +72 -0
- package/dist/flows/flow.js +110 -0
- package/dist/flows/flow.js.map +1 -0
- package/dist/flows/index.d.ts +19 -0
- package/dist/flows/index.js +17 -0
- package/dist/flows/index.js.map +1 -0
- package/dist/flows/observable.d.ts +59 -0
- package/dist/flows/observable.js +81 -0
- package/dist/flows/observable.js.map +1 -0
- package/dist/flows/withdraw-flow.d.ts +99 -0
- package/dist/flows/withdraw-flow.js +83 -0
- package/dist/flows/withdraw-flow.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/services/DataService/data-service.js +0 -1
- package/dist/services/DataService/data-service.js.map +1 -1
- package/package.json +8 -2
- package/src/domain/index.ts +7 -1
- package/src/domain/requests.ts +57 -4
- package/src/domain/wallet-errors.ts +135 -18
- package/src/facade/deposits.ts +2 -3
- package/src/facade/flows.ts +172 -0
- package/src/facade/index.ts +8 -0
- package/src/facade/kasu.ts +43 -3
- package/src/facade/read-only.ts +13 -0
- package/src/flows/deposit-flow.ts +775 -0
- package/src/flows/flow.ts +108 -0
- package/src/flows/index.ts +45 -0
- package/src/flows/observable.ts +97 -0
- package/src/flows/withdraw-flow.ts +210 -0
- package/src/index.ts +7 -0
- package/src/services/DataService/data-service.ts +0 -1
- package/dist/domain/au-minimum.test.d.ts +0 -1
- package/dist/domain/au-minimum.test.js +0 -202
- package/dist/domain/au-minimum.test.js.map +0 -1
- package/dist/domain/deposit-bounds.test.d.ts +0 -1
- package/dist/domain/deposit-bounds.test.js +0 -135
- package/dist/domain/deposit-bounds.test.js.map +0 -1
- package/dist/domain/loan-contract.test.d.ts +0 -1
- package/dist/domain/loan-contract.test.js +0 -255
- package/dist/domain/loan-contract.test.js.map +0 -1
- package/dist/domain/partners.test.d.ts +0 -1
- package/dist/domain/partners.test.js +0 -53
- package/dist/domain/partners.test.js.map +0 -1
- package/dist/domain/pools.test.d.ts +0 -1
- package/dist/domain/pools.test.js +0 -184
- package/dist/domain/pools.test.js.map +0 -1
- package/dist/domain/rates.test.d.ts +0 -1
- package/dist/domain/rates.test.js +0 -181
- package/dist/domain/rates.test.js.map +0 -1
- package/dist/domain/requests.test.d.ts +0 -1
- package/dist/domain/requests.test.js +0 -470
- package/dist/domain/requests.test.js.map +0 -1
- package/dist/domain/settlement.test.d.ts +0 -1
- package/dist/domain/settlement.test.js +0 -152
- package/dist/domain/settlement.test.js.map +0 -1
- package/dist/domain/tranche-display-name.test.d.ts +0 -1
- package/dist/domain/tranche-display-name.test.js +0 -58
- package/dist/domain/tranche-display-name.test.js.map +0 -1
- package/dist/domain/tranches.test.d.ts +0 -1
- package/dist/domain/tranches.test.js +0 -206
- package/dist/domain/tranches.test.js.map +0 -1
- package/dist/domain/wallet-errors.test.d.ts +0 -1
- package/dist/domain/wallet-errors.test.js +0 -71
- package/dist/domain/wallet-errors.test.js.map +0 -1
- package/dist/facade/config.test.d.ts +0 -1
- package/dist/facade/config.test.js +0 -216
- package/dist/facade/config.test.js.map +0 -1
- package/dist/facade/facade.test.d.ts +0 -1
- package/dist/facade/facade.test.js +0 -278
- package/dist/facade/facade.test.js.map +0 -1
- package/dist/services/Locking/calculate-apy.test.d.ts +0 -1
- package/dist/services/Locking/calculate-apy.test.js +0 -41
- package/dist/services/Locking/calculate-apy.test.js.map +0 -1
- package/dist/tests/sample.test.d.ts +0 -1
- package/dist/tests/sample.test.js +0 -59
- package/dist/tests/sample.test.js.map +0 -1
- package/src/domain/au-minimum.test.ts +0 -371
- package/src/domain/deposit-bounds.test.ts +0 -200
- package/src/domain/loan-contract.test.ts +0 -343
- package/src/domain/partners.test.ts +0 -83
- package/src/domain/pools.test.ts +0 -260
- package/src/domain/rates.test.ts +0 -254
- package/src/domain/requests.test.ts +0 -653
- package/src/domain/settlement.test.ts +0 -198
- package/src/domain/tranche-display-name.test.ts +0 -96
- package/src/domain/tranches.test.ts +0 -300
- package/src/domain/wallet-errors.test.ts +0 -100
- package/src/facade/config.test.ts +0 -265
- package/src/facade/facade.test.ts +0 -374
- package/src/services/Locking/calculate-apy.test.ts +0 -52
- package/src/tests/sample.test.ts +0 -63
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loan-contract.test.js","sourceRoot":"","sources":["../../src/domain/loan-contract.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { APXIUM, getCreditOriginator, getInstitutionalLender, INVOICEMATE, RIXON_CAPITAL, } from './partners';
|
|
2
|
-
// Ported from kasu-ui `src/features/lending/lib/strategy-partners.test.ts`.
|
|
3
|
-
describe('getCreditOriginator', () => {
|
|
4
|
-
it('maps "Payment Finance (PayFi)" to InvoiceMate', () => {
|
|
5
|
-
expect(getCreditOriginator({ poolName: 'Payment Finance (PayFi)' })).toBe(INVOICEMATE);
|
|
6
|
-
});
|
|
7
|
-
it('keeps Apxium receivables pools as Apxium (regression: do not match "invoice")', () => {
|
|
8
|
-
// The bug: matching the asset class ("invoice financing") wrongly
|
|
9
|
-
// classified Apxium receivables pools as InvoiceMate. Name-only
|
|
10
|
-
// matching fixes it — none of these names contain payfi/payment
|
|
11
|
-
// finance.
|
|
12
|
-
expect(getCreditOriginator({ poolName: 'Professional Fee Funding' })).toBe(APXIUM);
|
|
13
|
-
expect(getCreditOriginator({ poolName: 'Whole Ledger Funding' })).toBe(APXIUM);
|
|
14
|
-
expect(getCreditOriginator({ poolName: 'Taxation Funding (Tax Pay)' })).toBe(APXIUM);
|
|
15
|
-
});
|
|
16
|
-
it('is case-insensitive and matches the "payfi" / "payment finance" name', () => {
|
|
17
|
-
expect(getCreditOriginator({ poolName: 'payment finance' })).toBe(INVOICEMATE);
|
|
18
|
-
expect(getCreditOriginator({ poolName: 'PAYFI Strategy' })).toBe(INVOICEMATE);
|
|
19
|
-
});
|
|
20
|
-
it('defaults to Apxium for empty / missing names', () => {
|
|
21
|
-
expect(getCreditOriginator({ poolName: '' })).toBe(APXIUM);
|
|
22
|
-
expect(getCreditOriginator({})).toBe(APXIUM);
|
|
23
|
-
});
|
|
24
|
-
});
|
|
25
|
-
describe('getCreditOriginator — the widened PoolNameSignal', () => {
|
|
26
|
-
it('reads the facade Strategy shape (`name`)', () => {
|
|
27
|
-
expect(getCreditOriginator({ name: 'Payment Finance (PayFi)' })).toBe(INVOICEMATE);
|
|
28
|
-
expect(getCreditOriginator({ name: 'Taxation Funding' })).toBe(APXIUM);
|
|
29
|
-
expect(getCreditOriginator({ name: null })).toBe(APXIUM);
|
|
30
|
-
});
|
|
31
|
-
it('reads a bare string', () => {
|
|
32
|
-
expect(getCreditOriginator('Payment Finance (PayFi)')).toBe(INVOICEMATE);
|
|
33
|
-
expect(getCreditOriginator('Whole Ledger Funding')).toBe(APXIUM);
|
|
34
|
-
expect(getCreditOriginator('')).toBe(APXIUM);
|
|
35
|
-
});
|
|
36
|
-
it('prefers poolName when an object carries both', () => {
|
|
37
|
-
const both = { poolName: 'Taxation Funding', name: 'Payment Finance' };
|
|
38
|
-
expect(getCreditOriginator(both)).toBe(APXIUM);
|
|
39
|
-
});
|
|
40
|
-
it('treats an explicitly null poolName as missing, not as a match', () => {
|
|
41
|
-
expect(getCreditOriginator({ poolName: null })).toBe(APXIUM);
|
|
42
|
-
expect(getCreditOriginator({ poolName: undefined })).toBe(APXIUM);
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
describe('getInstitutionalLender', () => {
|
|
46
|
-
it('gives Apxium pools Rixon Capital', () => {
|
|
47
|
-
expect(getInstitutionalLender(APXIUM)).toBe(RIXON_CAPITAL);
|
|
48
|
-
});
|
|
49
|
-
it('gives InvoiceMate pools no senior lender', () => {
|
|
50
|
-
expect(getInstitutionalLender(INVOICEMATE)).toBeNull();
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
//# sourceMappingURL=partners.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"partners.test.js","sourceRoot":"","sources":["../../src/domain/partners.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
import { maxNetRateCeiling, pickHighestYieldTranche, poolMaxApy, selectVisiblePools, } from './pools';
|
|
2
|
-
import { netEffectiveApy } from './rates';
|
|
3
|
-
/**
|
|
4
|
-
* Ported from kasu-ui `select-visible-pools.test.ts` and the
|
|
5
|
-
* `pickHighestYieldTranche` / `formatMaxNetRate` cases of
|
|
6
|
-
* `pick-best-tranche.test.ts`. The `formatMaxNetRate` assertions are on the
|
|
7
|
-
* ceiling NUMBER here; their rendered strings stay in kasu-ui.
|
|
8
|
-
*/
|
|
9
|
-
function tranche(name, apy, poolCapacity, maxApy) {
|
|
10
|
-
return { id: name, name, apy, poolCapacity, maxApy };
|
|
11
|
-
}
|
|
12
|
-
function pool(over) {
|
|
13
|
-
return Object.assign({ id: 'p', poolName: 'p', isActive: true, isOversubscribed: false, tranches: [tranche('Senior', '0.09', '250000', '0.10')] }, over);
|
|
14
|
-
}
|
|
15
|
-
const withCapacity = () => [
|
|
16
|
-
tranche('Senior', '0.09', '250000', '0.10'),
|
|
17
|
-
];
|
|
18
|
-
const noCapacity = () => [tranche('Senior', '0.09', '0', '0.10')];
|
|
19
|
-
/** The live performance fee on all deployments. */
|
|
20
|
-
const FEE = 10;
|
|
21
|
-
describe('poolMaxApy', () => {
|
|
22
|
-
it('takes the highest usable maxApy across tranches', () => {
|
|
23
|
-
expect(poolMaxApy(pool({
|
|
24
|
-
tranches: [
|
|
25
|
-
tranche('Senior', '0.09', '1', '0.10'),
|
|
26
|
-
tranche('Junior', '0.12', '1', '0.18'),
|
|
27
|
-
],
|
|
28
|
-
}))).toBe(0.18);
|
|
29
|
-
});
|
|
30
|
-
it('is 0 when nothing is usable', () => {
|
|
31
|
-
expect(poolMaxApy(pool({ tranches: [] }))).toBe(0);
|
|
32
|
-
expect(poolMaxApy(pool({ tranches: [tranche('Senior', '0.09', '1', 'x')] }))).toBe(0);
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
describe('selectVisiblePools', () => {
|
|
36
|
-
it('drops inactive pools', () => {
|
|
37
|
-
const pools = [
|
|
38
|
-
pool({ id: 'active', isActive: true }),
|
|
39
|
-
pool({ id: 'inactive', isActive: false }),
|
|
40
|
-
];
|
|
41
|
-
expect(selectVisiblePools(pools).map((p) => p.id)).toEqual(['active']);
|
|
42
|
-
});
|
|
43
|
-
it('drops oversubscribed pools', () => {
|
|
44
|
-
const pools = [
|
|
45
|
-
pool({ id: 'open', isOversubscribed: false }),
|
|
46
|
-
pool({ id: 'full', isOversubscribed: true }),
|
|
47
|
-
];
|
|
48
|
-
expect(selectVisiblePools(pools).map((p) => p.id)).toEqual(['open']);
|
|
49
|
-
});
|
|
50
|
-
it('sorts pools with capacity ahead of pools without', () => {
|
|
51
|
-
const pools = [
|
|
52
|
-
pool({ id: 'empty', tranches: noCapacity() }),
|
|
53
|
-
pool({ id: 'has-cap', tranches: withCapacity() }),
|
|
54
|
-
];
|
|
55
|
-
expect(selectVisiblePools(pools).map((p) => p.id)).toEqual([
|
|
56
|
-
'has-cap',
|
|
57
|
-
'empty',
|
|
58
|
-
]);
|
|
59
|
-
});
|
|
60
|
-
it('sorts by highest max APY within the same capacity bucket', () => {
|
|
61
|
-
const pools = [
|
|
62
|
-
pool({
|
|
63
|
-
id: 'low',
|
|
64
|
-
tranches: [tranche('Senior', '0.08', '250000', '0.08')],
|
|
65
|
-
}),
|
|
66
|
-
pool({
|
|
67
|
-
id: 'high',
|
|
68
|
-
tranches: [tranche('Senior', '0.15', '250000', '0.15')],
|
|
69
|
-
}),
|
|
70
|
-
];
|
|
71
|
-
expect(selectVisiblePools(pools).map((p) => p.id)).toEqual([
|
|
72
|
-
'high',
|
|
73
|
-
'low',
|
|
74
|
-
]);
|
|
75
|
-
});
|
|
76
|
-
it('does not mutate the input array', () => {
|
|
77
|
-
const pools = [
|
|
78
|
-
pool({ id: 'a', tranches: noCapacity() }),
|
|
79
|
-
pool({ id: 'b', tranches: withCapacity() }),
|
|
80
|
-
];
|
|
81
|
-
const before = pools.map((p) => p.id);
|
|
82
|
-
selectVisiblePools(pools);
|
|
83
|
-
expect(pools.map((p) => p.id)).toEqual(before);
|
|
84
|
-
});
|
|
85
|
-
});
|
|
86
|
-
describe('pickHighestYieldTranche', () => {
|
|
87
|
-
const named = (poolName, tranches) => pool({ id: poolName, poolName, tranches });
|
|
88
|
-
it('returns null for empty / nullish input', () => {
|
|
89
|
-
expect(pickHighestYieldTranche(undefined)).toBeNull();
|
|
90
|
-
expect(pickHighestYieldTranche(null)).toBeNull();
|
|
91
|
-
expect(pickHighestYieldTranche([])).toBeNull();
|
|
92
|
-
});
|
|
93
|
-
it('picks the highest base APY across all pools with capacity', () => {
|
|
94
|
-
const best = pickHighestYieldTranche([
|
|
95
|
-
named('A', [tranche('Junior', '0.12', '5000')]),
|
|
96
|
-
named('B', [
|
|
97
|
-
tranche('Senior', '0.18', '5000'),
|
|
98
|
-
tranche('Mezz', '0.15', '5000'),
|
|
99
|
-
]),
|
|
100
|
-
]);
|
|
101
|
-
expect(best === null || best === void 0 ? void 0 : best.pool.poolName).toBe('B');
|
|
102
|
-
expect(best === null || best === void 0 ? void 0 : best.tranche.name).toBe('Senior');
|
|
103
|
-
expect(best === null || best === void 0 ? void 0 : best.apy).toBeCloseTo(0.18);
|
|
104
|
-
});
|
|
105
|
-
it('skips tranches without capacity (< 1 unit)', () => {
|
|
106
|
-
const best = pickHighestYieldTranche([
|
|
107
|
-
named('Full', [tranche('Junior', '0.30', '0')]),
|
|
108
|
-
named('Live', [tranche('Senior', '0.10', '2000')]),
|
|
109
|
-
]);
|
|
110
|
-
expect(best === null || best === void 0 ? void 0 : best.pool.poolName).toBe('Live');
|
|
111
|
-
expect(best === null || best === void 0 ? void 0 : best.apy).toBeCloseTo(0.1);
|
|
112
|
-
});
|
|
113
|
-
it('breaks APY ties toward more remaining capacity', () => {
|
|
114
|
-
const best = pickHighestYieldTranche([
|
|
115
|
-
named('Small', [tranche('Junior', '0.15', '1000')]),
|
|
116
|
-
named('Big', [tranche('Junior', '0.15', '9000')]),
|
|
117
|
-
]);
|
|
118
|
-
expect(best === null || best === void 0 ? void 0 : best.pool.poolName).toBe('Big');
|
|
119
|
-
});
|
|
120
|
-
it('ignores zero / non-finite APY values', () => {
|
|
121
|
-
const best = pickHighestYieldTranche([
|
|
122
|
-
named('Zero', [tranche('Junior', '0', '5000')]),
|
|
123
|
-
named('NaN', [tranche('Junior', 'not-a-number', '5000')]),
|
|
124
|
-
named('Real', [tranche('Junior', '0.09', '5000')]),
|
|
125
|
-
]);
|
|
126
|
-
expect(best === null || best === void 0 ? void 0 : best.pool.poolName).toBe('Real');
|
|
127
|
-
});
|
|
128
|
-
it('reads the BASE rate, not the FTD-widened maxApy', () => {
|
|
129
|
-
// A ceiling claim and a named tranche's rate are different statements.
|
|
130
|
-
const best = pickHighestYieldTranche([
|
|
131
|
-
named('A', [tranche('Junior', '0.12', '5000', '0.30')]),
|
|
132
|
-
named('B', [tranche('Senior', '0.18', '5000', '0.18')]),
|
|
133
|
-
]);
|
|
134
|
-
expect(best === null || best === void 0 ? void 0 : best.pool.poolName).toBe('B');
|
|
135
|
-
});
|
|
136
|
-
});
|
|
137
|
-
describe('maxNetRateCeiling', () => {
|
|
138
|
-
const named = (poolName, tranches) => pool({ id: poolName, poolName, tranches });
|
|
139
|
-
it('returns the highest ceiling across all pools, net of the fee', () => {
|
|
140
|
-
const rate = maxNetRateCeiling([
|
|
141
|
-
named('A', [tranche('Junior', '0.12', '5000', '0.18')]),
|
|
142
|
-
named('B', [tranche('Senior', '0.10', '5000', '0.22')]),
|
|
143
|
-
], FEE);
|
|
144
|
-
// 0.22 gross → 19.60% net, the same arithmetic as everywhere else.
|
|
145
|
-
expect(rate).toBe(netEffectiveApy(0.22, FEE));
|
|
146
|
-
expect(rate).toBeCloseTo(0.196, 4);
|
|
147
|
-
});
|
|
148
|
-
it('prefers the FTD-inclusive maxApy over the base rate', () => {
|
|
149
|
-
// The strategies card's range tops out at maxApy; an "up to" claim
|
|
150
|
-
// quoting the base rate would contradict it on the same screen.
|
|
151
|
-
expect(maxNetRateCeiling([named('A', [tranche('Junior', '0.10', '5000', '0.22')])], FEE)).toBe(netEffectiveApy(0.22, FEE));
|
|
152
|
-
});
|
|
153
|
-
it('falls back to the base rate when a tranche carries no maxApy', () => {
|
|
154
|
-
expect(maxNetRateCeiling([named('A', [tranche('Junior', '0.22', '5000')])], FEE)).toBe(netEffectiveApy(0.22, FEE));
|
|
155
|
-
});
|
|
156
|
-
it('skips tranches without capacity — an unreachable rate is not a claim', () => {
|
|
157
|
-
const rate = maxNetRateCeiling([
|
|
158
|
-
named('Full', [tranche('Junior', '0.30', '0', '0.30')]),
|
|
159
|
-
named('Live', [tranche('Senior', '0.10', '5000', '0.10')]),
|
|
160
|
-
], FEE);
|
|
161
|
-
expect(rate).toBe(netEffectiveApy(0.1, FEE));
|
|
162
|
-
expect(rate).toBeCloseTo(0.0896, 4);
|
|
163
|
-
});
|
|
164
|
-
it('returns null rather than a gross figure when the fee is out of domain', () => {
|
|
165
|
-
const pools = [named('A', [tranche('Junior', '0.22', '5000', '0.22')])];
|
|
166
|
-
expect(maxNetRateCeiling(pools, 1000)).toBeNull();
|
|
167
|
-
expect(maxNetRateCeiling(pools, -1)).toBeNull();
|
|
168
|
-
expect(maxNetRateCeiling(pools, NaN)).toBeNull();
|
|
169
|
-
// A 100% fee leaves nothing to claim.
|
|
170
|
-
expect(maxNetRateCeiling(pools, 100)).toBeNull();
|
|
171
|
-
});
|
|
172
|
-
it('returns null for empty, nullish or rate-less input', () => {
|
|
173
|
-
expect(maxNetRateCeiling(undefined, FEE)).toBeNull();
|
|
174
|
-
expect(maxNetRateCeiling(null, FEE)).toBeNull();
|
|
175
|
-
expect(maxNetRateCeiling([], FEE)).toBeNull();
|
|
176
|
-
expect(maxNetRateCeiling([named('Zero', [tranche('Junior', '0', '5000', '0')])], FEE)).toBeNull();
|
|
177
|
-
});
|
|
178
|
-
it('agrees with the top of the tranche range it must sit alongside', () => {
|
|
179
|
-
// Both read maxApy through netEffectiveApy; they must not disagree.
|
|
180
|
-
const tranches = [tranche('Senior', '0.14', '5000', '0.22')];
|
|
181
|
-
expect(maxNetRateCeiling([named('A', tranches)], FEE)).toBe(netEffectiveApy(0.22, FEE));
|
|
182
|
-
});
|
|
183
|
-
});
|
|
184
|
-
//# sourceMappingURL=pools.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pools.test.js","sourceRoot":"","sources":["../../src/domain/pools.test.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,iBAAiB,EACjB,uBAAuB,EACvB,UAAU,EACV,kBAAkB,GACrB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1C;;;;;GAKG;AAEH,SAAS,OAAO,CACZ,IAAY,EACZ,GAAW,EACX,YAAoB,EACpB,MAAe;IAEf,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAA4B,CAAC;AACnF,CAAC;AAED,SAAS,IAAI,CAAC,IAA2B;IACrC,OAAO,gBACH,EAAE,EAAE,GAAG,EACP,QAAQ,EAAE,GAAG,EACb,QAAQ,EAAE,IAAI,EACd,gBAAgB,EAAE,KAAK,EACvB,QAAQ,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,IACpD,IAAI,CACiB,CAAC;AACjC,CAAC;AAED,MAAM,YAAY,GAAG,GAAkB,EAAE,CAAC;IACtC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC;CAC9C,CAAC;AACF,MAAM,UAAU,GAAG,GAAkB,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;AAEjF,mDAAmD;AACnD,MAAM,GAAG,GAAG,EAAE,CAAC;AAEf,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACvD,MAAM,CACF,UAAU,CACN,IAAI,CAAC;YACD,QAAQ,EAAE;gBACN,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC;gBACtC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC;aACzC;SACJ,CAAC,CACL,CACJ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM,CACF,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CACxE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC5B,MAAM,KAAK,GAAG;YACV,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YACtC,IAAI,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;SAC5C,CAAC;QACF,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QAClC,MAAM,KAAK,GAAG;YACV,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC;YAC7C,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;SAC/C,CAAC;QACF,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QACxD,MAAM,KAAK,GAAG;YACV,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,CAAC;SACpD,CAAC;QACF,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YACvD,SAAS;YACT,OAAO;SACV,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAChE,MAAM,KAAK,GAAG;YACV,IAAI,CAAC;gBACD,EAAE,EAAE,KAAK;gBACT,QAAQ,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;aAC1D,CAAC;YACF,IAAI,CAAC;gBACD,EAAE,EAAE,MAAM;gBACV,QAAQ,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;aAC1D,CAAC;SACL,CAAC;QACF,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YACvD,MAAM;YACN,KAAK;SACR,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACvC,MAAM,KAAK,GAAG;YACV,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,CAAC;YACzC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,CAAC;SAC9C,CAAC;QACF,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACtC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACrC,MAAM,KAAK,GAAG,CAAC,QAAgB,EAAE,QAAuB,EAAgB,EAAE,CACtE,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IAE/C,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACtD,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACjD,MAAM,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACjE,MAAM,IAAI,GAAG,uBAAuB,CAAC;YACjC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;YAC/C,KAAK,CAAC,GAAG,EAAE;gBACP,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;gBACjC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aAClC,CAAC;SACL,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,GAAG,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QAClD,MAAM,IAAI,GAAG,uBAAuB,CAAC;YACjC,KAAK,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;YAC/C,KAAK,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;SACrD,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACtD,MAAM,IAAI,GAAG,uBAAuB,CAAC;YACjC,KAAK,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;YACnD,KAAK,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;SACpD,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC5C,MAAM,IAAI,GAAG,uBAAuB,CAAC;YACjC,KAAK,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;YAC/C,KAAK,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;YACzD,KAAK,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;SACrD,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACvD,uEAAuE;QACvE,MAAM,IAAI,GAAG,uBAAuB,CAAC;YACjC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;YACvD,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;SAC1D,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAC/B,MAAM,KAAK,GAAG,CAAC,QAAgB,EAAE,QAAuB,EAAgB,EAAE,CACtE,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IAE/C,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACpE,MAAM,IAAI,GAAG,iBAAiB,CAC1B;YACI,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;YACvD,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;SAC1D,EACD,GAAG,CACN,CAAC;QACF,mEAAmE;QACnE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC3D,mEAAmE;QACnE,gEAAgE;QAChE,MAAM,CACF,iBAAiB,CACb,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EACzD,GAAG,CACN,CACJ,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACpE,MAAM,CACF,iBAAiB,CACb,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EACjD,GAAG,CACN,CACJ,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC5E,MAAM,IAAI,GAAG,iBAAiB,CAC1B;YACI,KAAK,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;YACvD,KAAK,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;SAC7D,EACD,GAAG,CACN,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;QAC7E,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAClD,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAChD,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACjD,sCAAsC;QACtC,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACrD,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAChD,MAAM,CAAC,iBAAiB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC9C,MAAM,CACF,iBAAiB,CACb,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EACtD,GAAG,CACN,CACJ,CAAC,QAAQ,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACtE,oEAAoE;QACpE,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CACvD,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAC7B,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
import * as fc from 'fast-check';
|
|
2
|
-
import { apyToEpochRate, epochRateToApy, EPOCHS_IN_YEAR, netEffectiveApy, } from './rates';
|
|
3
|
-
/**
|
|
4
|
-
* Ported from kasu-ui `src/features/lending/lib/interest-rate.test.ts`. The
|
|
5
|
-
* `formatEffectiveRate` cases stay there — they assert copy and locale, which
|
|
6
|
-
* this layer does not own.
|
|
7
|
-
*/
|
|
8
|
-
/** The live performance fee on all deployments (subgraph units: 10 = ten percent). */
|
|
9
|
-
const LIVE_FEE_PERCENT = 10;
|
|
10
|
-
/**
|
|
11
|
-
* Spec §9 — every distinct per-epoch rate configured on Base, read on-chain
|
|
12
|
-
* 2026-09-01, with the NET Effective Interest Rate each must display at the
|
|
13
|
-
* live 10% fee. This table IS the review sanity check: a correct
|
|
14
|
-
* implementation reproduces the whole column, including the 30% crossover row
|
|
15
|
-
* (26.30% gross nominal → 26.64% net APY) which moves UP while every other row
|
|
16
|
-
* moves down, because the two errors in the old display — no fee deducted, and
|
|
17
|
-
* a spurious de-compounding — pull in opposite directions and cross over near
|
|
18
|
-
* 28%.
|
|
19
|
-
*/
|
|
20
|
-
const GROUND_TRUTH = [
|
|
21
|
-
{ grossApy: 0.1, netPercent: 8.96 },
|
|
22
|
-
{ grossApy: 0.105, netPercent: 9.4 },
|
|
23
|
-
{ grossApy: 0.12, netPercent: 10.74 },
|
|
24
|
-
{ grossApy: 0.14, netPercent: 12.52 },
|
|
25
|
-
{ grossApy: 0.15, netPercent: 13.41 },
|
|
26
|
-
{ grossApy: 0.16, netPercent: 14.29 },
|
|
27
|
-
{ grossApy: 0.2, netPercent: 17.84 },
|
|
28
|
-
{ grossApy: 0.22, netPercent: 19.6 },
|
|
29
|
-
{ grossApy: 0.3, netPercent: 26.64 },
|
|
30
|
-
];
|
|
31
|
-
describe('netEffectiveApy — spec §9 ground truth', () => {
|
|
32
|
-
it.each(GROUND_TRUTH)('gross $grossApy at a 10% fee is $netPercent% net', ({ grossApy, netPercent }) => {
|
|
33
|
-
expect(netEffectiveApy(grossApy, LIVE_FEE_PERCENT) * 100).toBeCloseTo(netPercent, 2);
|
|
34
|
-
});
|
|
35
|
-
it('reproduces the 30% crossover — the net APY is ABOVE the old gross nominal figure', () => {
|
|
36
|
-
// Old display: 52.17857 · ((1.30)^(1/52.17857) − 1) = 26.30%. New: 26.64%.
|
|
37
|
-
const oldGrossNominal = EPOCHS_IN_YEAR * (Math.pow(1.3, (1 / EPOCHS_IN_YEAR)) - 1);
|
|
38
|
-
expect(oldGrossNominal * 100).toBeCloseTo(26.3, 1);
|
|
39
|
-
expect(netEffectiveApy(0.3, LIVE_FEE_PERCENT)).toBeGreaterThan(oldGrossNominal);
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
describe('netEffectiveApy — units (spec §2.3)', () => {
|
|
43
|
-
it('reads feePercent as a PERCENTAGE: 22% gross at fee 10 is ≈19.602%', () => {
|
|
44
|
-
expect(netEffectiveApy(0.22, 10)).toBeCloseTo(0.19602, 5);
|
|
45
|
-
});
|
|
46
|
-
it('does not silently accept the 0..1 fraction — 0.1 is a 0.1% fee, not 10%', () => {
|
|
47
|
-
const wrongUnit = netEffectiveApy(0.22, 0.1);
|
|
48
|
-
const correct = netEffectiveApy(0.22, 10);
|
|
49
|
-
// It is a finite, in-range number (we cannot reject it — 0.1% is a
|
|
50
|
-
// legal fee), so the guard cannot catch this. What protects us is that
|
|
51
|
-
// it is MATERIALLY different: ~2.37pp too high, not a plausible
|
|
52
|
-
// near-miss that could sit on screen unnoticed.
|
|
53
|
-
expect(wrongUnit).toBeCloseTo(0.21976, 5);
|
|
54
|
-
expect(wrongUnit - correct).toBeGreaterThan(0.02);
|
|
55
|
-
});
|
|
56
|
-
it('rejects the RAW subgraph integer (1000 = 10%, pre-integerToPercentage2)', () => {
|
|
57
|
-
expect(netEffectiveApy(0.22, 1000)).toBeNaN();
|
|
58
|
-
});
|
|
59
|
-
it('rejects a fee outside 0..100', () => {
|
|
60
|
-
expect(netEffectiveApy(0.22, 101)).toBeNaN();
|
|
61
|
-
expect(netEffectiveApy(0.22, -1)).toBeNaN();
|
|
62
|
-
expect(netEffectiveApy(0.22, NaN)).toBeNaN();
|
|
63
|
-
expect(netEffectiveApy(0.22, Infinity)).toBeNaN();
|
|
64
|
-
});
|
|
65
|
-
it('accepts the domain edges', () => {
|
|
66
|
-
expect(netEffectiveApy(0.22, 0)).toBe(0.22);
|
|
67
|
-
// A 100% fee leaves the lender nothing — 0, not NaN: the fee is
|
|
68
|
-
// knowable and the answer is "you earn zero", which consumers render
|
|
69
|
-
// as "—".
|
|
70
|
-
expect(netEffectiveApy(0.22, 100)).toBe(0);
|
|
71
|
-
});
|
|
72
|
-
it('returns NaN for a non-finite or negative gross APY (callers render "—")', () => {
|
|
73
|
-
expect(netEffectiveApy(NaN, 10)).toBeNaN();
|
|
74
|
-
expect(netEffectiveApy(Infinity, 10)).toBeNaN();
|
|
75
|
-
expect(netEffectiveApy(-Infinity, 10)).toBeNaN();
|
|
76
|
-
expect(netEffectiveApy(-0.01, 10)).toBeNaN();
|
|
77
|
-
});
|
|
78
|
-
});
|
|
79
|
-
// The FULL in-domain range, down to and including zero and the denormals. The
|
|
80
|
-
// invariants below are the reason `netEffectiveApy` is written with
|
|
81
|
-
// `log1p`/`expm1`: the direct `(1 + x) ** n - 1` form breaks the `net <= gross`
|
|
82
|
-
// invariant for tiny rates, and the property runner finds that in a few hundred
|
|
83
|
-
// cases. Narrowing this arb would hide it.
|
|
84
|
-
const grossApyArb = fc.double({
|
|
85
|
-
min: 0,
|
|
86
|
-
max: 5,
|
|
87
|
-
noNaN: true,
|
|
88
|
-
noDefaultInfinity: true,
|
|
89
|
-
});
|
|
90
|
-
const feePercentArb = fc.double({
|
|
91
|
-
min: 0,
|
|
92
|
-
max: 100,
|
|
93
|
-
noNaN: true,
|
|
94
|
-
noDefaultInfinity: true,
|
|
95
|
-
});
|
|
96
|
-
/**
|
|
97
|
-
* A fee as the subgraph can actually express one: `integerToPercentage2`
|
|
98
|
-
* divides a uint by 100, so every reachable value is a 2dp multiple of 0.01 in
|
|
99
|
-
* 0..100. Used only for the STRICT-decrease property, which cannot hold for a
|
|
100
|
-
* fee of 1e-300 percent — `1 − feePercent/100` rounds to exactly 1 and the net
|
|
101
|
-
* rate is the gross one. That is arithmetic, not a defect, and no such fee
|
|
102
|
-
* exists.
|
|
103
|
-
*/
|
|
104
|
-
const realisticFeePercentArb = fc
|
|
105
|
-
.integer({ min: 1, max: 10000 })
|
|
106
|
-
.map((n) => n / 100);
|
|
107
|
-
describe('netEffectiveApy — invariants', () => {
|
|
108
|
-
it('never returns more than the gross APY it came from', () => {
|
|
109
|
-
fc.assert(fc.property(grossApyArb, feePercentArb, (grossApy, feePercent) => {
|
|
110
|
-
expect(netEffectiveApy(grossApy, feePercent)).toBeLessThanOrEqual(grossApy);
|
|
111
|
-
}));
|
|
112
|
-
});
|
|
113
|
-
it('equals the gross APY EXACTLY when the fee is zero', () => {
|
|
114
|
-
fc.assert(
|
|
115
|
-
// Exact equality, not "close to": if the fee is ever set to zero
|
|
116
|
-
// on-chain, the rate must be the SDK's own APY, with no float drift
|
|
117
|
-
// from the de-compound/re-compound round trip.
|
|
118
|
-
fc.property(grossApyArb, (grossApy) => {
|
|
119
|
-
expect(netEffectiveApy(grossApy, 0)).toBe(grossApy);
|
|
120
|
-
}));
|
|
121
|
-
});
|
|
122
|
-
it('is STRICTLY below the gross APY for any real (2dp) non-zero fee', () => {
|
|
123
|
-
fc.assert(fc.property(grossApyArb, realisticFeePercentArb, (grossApy, feePercent) => {
|
|
124
|
-
if (grossApy === 0)
|
|
125
|
-
return;
|
|
126
|
-
expect(netEffectiveApy(grossApy, feePercent)).toBeLessThan(grossApy);
|
|
127
|
-
}));
|
|
128
|
-
});
|
|
129
|
-
it('decreases monotonically as the fee rises', () => {
|
|
130
|
-
fc.assert(fc.property(grossApyArb, feePercentArb, feePercentArb, (grossApy, a, b) => {
|
|
131
|
-
const [lo, hi] = a <= b ? [a, b] : [b, a];
|
|
132
|
-
expect(netEffectiveApy(grossApy, hi)).toBeLessThanOrEqual(netEffectiveApy(grossApy, lo));
|
|
133
|
-
}));
|
|
134
|
-
});
|
|
135
|
-
it('increases monotonically as the gross APY rises', () => {
|
|
136
|
-
fc.assert(fc.property(grossApyArb, grossApyArb, feePercentArb, (a, b, feePercent) => {
|
|
137
|
-
const [lo, hi] = a <= b ? [a, b] : [b, a];
|
|
138
|
-
expect(netEffectiveApy(hi, feePercent)).toBeGreaterThanOrEqual(netEffectiveApy(lo, feePercent));
|
|
139
|
-
}));
|
|
140
|
-
});
|
|
141
|
-
it('is never negative for any in-domain input', () => {
|
|
142
|
-
fc.assert(fc.property(grossApyArb, feePercentArb, (grossApy, feePercent) => {
|
|
143
|
-
expect(netEffectiveApy(grossApy, feePercent)).toBeGreaterThanOrEqual(0);
|
|
144
|
-
}));
|
|
145
|
-
});
|
|
146
|
-
});
|
|
147
|
-
describe('epochRateToApy / apyToEpochRate', () => {
|
|
148
|
-
it('compounds a per-epoch rate exactly as the data service always has', () => {
|
|
149
|
-
// The literal expression `calculateApyForTranche` carried inline.
|
|
150
|
-
for (const r of [0, 0.001, 0.0025, 0.003, 0.005, 0.01]) {
|
|
151
|
-
expect(epochRateToApy(r)).toBe(Math.pow((1 + r), EPOCHS_IN_YEAR) - 1);
|
|
152
|
-
}
|
|
153
|
-
});
|
|
154
|
-
it('round-trips within 1e-12 for realistic per-epoch rates', () => {
|
|
155
|
-
fc.assert(fc.property(
|
|
156
|
-
// 0.0001..0.02 per epoch ≈ 0.5%..190% APY — wider than any
|
|
157
|
-
// rate the platform has configured.
|
|
158
|
-
fc.double({
|
|
159
|
-
min: 0.0001,
|
|
160
|
-
max: 0.02,
|
|
161
|
-
noNaN: true,
|
|
162
|
-
noDefaultInfinity: true,
|
|
163
|
-
}), (r) => {
|
|
164
|
-
expect(apyToEpochRate(epochRateToApy(r))).toBeCloseTo(r, 12);
|
|
165
|
-
}));
|
|
166
|
-
});
|
|
167
|
-
it('inverts the APYs the platform actually quotes', () => {
|
|
168
|
-
for (const apy of [0.1, 0.12, 0.14, 0.16, 0.22, 0.3]) {
|
|
169
|
-
expect(epochRateToApy(apyToEpochRate(apy))).toBeCloseTo(apy, 12);
|
|
170
|
-
}
|
|
171
|
-
});
|
|
172
|
-
it('is the same de-compounding netEffectiveApy uses at a zero-ish fee', () => {
|
|
173
|
-
// A fee of exactly 0 short-circuits; the smallest fee that does not
|
|
174
|
-
// must still agree with the round trip to well under a basis point.
|
|
175
|
-
const gross = 0.22;
|
|
176
|
-
const net = netEffectiveApy(gross, 0.01);
|
|
177
|
-
expect(net).toBeLessThan(gross);
|
|
178
|
-
expect(gross - net).toBeLessThan(0.0005);
|
|
179
|
-
});
|
|
180
|
-
});
|
|
181
|
-
//# sourceMappingURL=rates.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rates.test.js","sourceRoot":"","sources":["../../src/domain/rates.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|