@folks-finance/xchain-sdk 0.0.70 → 0.0.71
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/dist/chains/evm/common/utils/chain.d.ts +2 -1
- package/dist/chains/evm/common/utils/chain.js +5 -0
- package/dist/chains/evm/common/utils/chain.js.map +1 -1
- package/dist/chains/evm/hub/modules/folks-hub-pool.js +6 -4
- package/dist/chains/evm/hub/modules/folks-hub-pool.js.map +1 -1
- package/dist/common/utils/formulae.d.ts +3 -3
- package/dist/common/utils/formulae.js +6 -6
- package/dist/common/utils/formulae.js.map +1 -1
- package/package.json +1 -1
- package/src/chains/evm/common/utils/chain.ts +8 -1
- package/src/chains/evm/hub/modules/folks-hub-pool.ts +7 -1
- package/src/common/utils/formulae.ts +16 -5
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { EvmAddress } from "../../../../common/types/address.js";
|
|
2
2
|
import type { EvmChainId } from "../types/chain.js";
|
|
3
|
-
import type { Account, WalletClient } from "viem";
|
|
3
|
+
import type { Account, Client, WalletClient } from "viem";
|
|
4
4
|
export declare function getEvmSignerAddress(signer: WalletClient): EvmAddress;
|
|
5
5
|
export declare function getEvmSignerAccount(signer: WalletClient): Account;
|
|
6
6
|
export declare const isEvmChainId: (chainId: number) => chainId is EvmChainId;
|
|
7
|
+
export declare function getBlockTimestamp(provider: Client, blockNumber?: bigint): Promise<bigint>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getBlock } from "viem/actions";
|
|
1
2
|
import { EVM_FOLKS_CHAIN_ID } from "../constants/chain.js";
|
|
2
3
|
export function getEvmSignerAddress(signer) {
|
|
3
4
|
if (signer.account?.address)
|
|
@@ -13,4 +14,8 @@ export const isEvmChainId = (chainId) => {
|
|
|
13
14
|
// @ts-expect-error -- this is made on purpose to have the type predicate
|
|
14
15
|
return Object.values(EVM_FOLKS_CHAIN_ID).includes(chainId);
|
|
15
16
|
};
|
|
17
|
+
export async function getBlockTimestamp(provider, blockNumber) {
|
|
18
|
+
const block = await getBlock(provider, { blockNumber, includeTransactions: false });
|
|
19
|
+
return block.timestamp;
|
|
20
|
+
}
|
|
16
21
|
//# sourceMappingURL=chain.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chain.js","sourceRoot":"","sources":["../../../../../src/chains/evm/common/utils/chain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAM3D,MAAM,UAAU,mBAAmB,CAAC,MAAoB;IACtD,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO;QAAE,OAAO,MAAM,CAAC,OAAO,CAAC,OAAqB,CAAC;IACzE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAoB;IACtD,IAAI,MAAM,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC,OAAO,CAAC;IAC1C,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAe,EAAyB,EAAE;IACrE,yEAAyE;IACzE,OAAO,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC7D,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"chain.js","sourceRoot":"","sources":["../../../../../src/chains/evm/common/utils/chain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAM3D,MAAM,UAAU,mBAAmB,CAAC,MAAoB;IACtD,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO;QAAE,OAAO,MAAM,CAAC,OAAO,CAAC,OAAqB,CAAC;IACzE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAoB;IACtD,IAAI,MAAM,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC,OAAO,CAAC;IAC1C,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAe,EAAyB,EAAE;IACrE,yEAAyE;IACzE,OAAO,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC7D,CAAC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,QAAgB,EAAE,WAAoB;IAC5E,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,CAAC;IACpF,OAAO,KAAK,CAAC,SAAS,CAAC;AACzB,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { multicall } from "viem/actions";
|
|
2
2
|
import { calcBorrowInterestIndex, calcDepositInterestIndex, calcOverallBorrowInterestRate, calcRetention, } from "../../../../common/utils/formulae.js";
|
|
3
|
-
import { compoundEveryHour, compoundEverySecond } from "../../../../common/utils/math-lib.js";
|
|
3
|
+
import { compoundEveryHour, compoundEverySecond, unixTime } from "../../../../common/utils/math-lib.js";
|
|
4
|
+
import { getBlockTimestamp } from "../../common/utils/chain.js";
|
|
4
5
|
import { getHubTokenData } from "../utils/chain.js";
|
|
5
6
|
import { getHubPoolContract } from "../utils/contract.js";
|
|
6
7
|
export async function getPoolInfo(provider, network, folksTokenId, blockNumber) {
|
|
@@ -58,6 +59,7 @@ export async function getPoolInfo(provider, network, folksTokenId, blockNumber)
|
|
|
58
59
|
allowFailure: false,
|
|
59
60
|
blockNumber,
|
|
60
61
|
});
|
|
62
|
+
const lastTimestamp = blockNumber ? await getBlockTimestamp(provider, blockNumber) : BigInt(unixTime());
|
|
61
63
|
const { flashLoanFee, retentionRate, fTokenFeeRecipient, tokenFeeClaimer, totalRetainedAmount: actualRetained, tokenFeeRecipient, } = feeData;
|
|
62
64
|
const { optimalUtilisationRatio, totalAmount: depositTotalAmount, interestRate: depositInterestRate, interestIndex: oldDepositInterestIndex, } = depositData;
|
|
63
65
|
const { vr0, vr1, vr2, totalAmount: variableBorrowTotalAmount, interestRate: variableBorrowInterestRate, interestIndex: oldVariableBorrowInterestsIndex, } = variableBorrowData;
|
|
@@ -72,7 +74,7 @@ export async function getPoolInfo(provider, network, folksTokenId, blockNumber)
|
|
|
72
74
|
feeData: {
|
|
73
75
|
flashLoanFee: [BigInt(flashLoanFee), 6],
|
|
74
76
|
retentionRate: [BigInt(retentionRate), 6],
|
|
75
|
-
totalRetainedAmount: calcRetention(actualRetained, variableBorrowTotalAmount + stableBorrowTotalAmount, calcOverallBorrowInterestRate(variableBorrowTotalAmount, stableBorrowTotalAmount, [variableBorrowInterestRate, 18], [stableBorrowAverageInterestRate, 18]), [BigInt(retentionRate), 6], lastUpdateTimestamp),
|
|
77
|
+
totalRetainedAmount: calcRetention(actualRetained, variableBorrowTotalAmount + stableBorrowTotalAmount, calcOverallBorrowInterestRate(variableBorrowTotalAmount, stableBorrowTotalAmount, [variableBorrowInterestRate, 18], [stableBorrowAverageInterestRate, 18]), [BigInt(retentionRate), 6], lastUpdateTimestamp, lastTimestamp),
|
|
76
78
|
fTokenFeeRecipient: fTokenFeeRecipient,
|
|
77
79
|
tokenFeeClaimer: tokenFeeClaimer,
|
|
78
80
|
tokenFeeRecipient: tokenFeeRecipient,
|
|
@@ -82,7 +84,7 @@ export async function getPoolInfo(provider, network, folksTokenId, blockNumber)
|
|
|
82
84
|
totalAmount: depositTotalAmount,
|
|
83
85
|
interestRate: [depositInterestRate, 18],
|
|
84
86
|
interestYield: compoundEveryHour([depositInterestRate, 18]),
|
|
85
|
-
interestIndex: calcDepositInterestIndex([depositInterestRate, 18], [oldDepositInterestIndex, 18], lastUpdateTimestamp),
|
|
87
|
+
interestIndex: calcDepositInterestIndex([depositInterestRate, 18], [oldDepositInterestIndex, 18], lastUpdateTimestamp, lastTimestamp),
|
|
86
88
|
},
|
|
87
89
|
variableBorrowData: {
|
|
88
90
|
vr0: [BigInt(vr0), 6],
|
|
@@ -91,7 +93,7 @@ export async function getPoolInfo(provider, network, folksTokenId, blockNumber)
|
|
|
91
93
|
totalAmount: variableBorrowTotalAmount,
|
|
92
94
|
interestRate: [variableBorrowInterestRate, 18],
|
|
93
95
|
interestYield: compoundEverySecond([variableBorrowInterestRate, 18]),
|
|
94
|
-
interestIndex: calcBorrowInterestIndex([variableBorrowInterestRate, 18], [oldVariableBorrowInterestsIndex, 18], lastUpdateTimestamp),
|
|
96
|
+
interestIndex: calcBorrowInterestIndex([variableBorrowInterestRate, 18], [oldVariableBorrowInterestsIndex, 18], lastUpdateTimestamp, lastTimestamp),
|
|
95
97
|
},
|
|
96
98
|
stableBorrowData: {
|
|
97
99
|
sr0: [BigInt(sr0), 6],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"folks-hub-pool.js","sourceRoot":"","sources":["../../../../../src/chains/evm/hub/modules/folks-hub-pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,6BAA6B,EAC7B,aAAa,GACd,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"folks-hub-pool.js","sourceRoot":"","sources":["../../../../../src/chains/evm/hub/modules/folks-hub-pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,9 @@ import type { Dnum } from "dnum";
|
|
|
2
2
|
export declare function calcPeriodNumber(offset: bigint, length: bigint): bigint;
|
|
3
3
|
export declare function calcNextPeriodReset(periodNumber: bigint, offset: bigint, length: bigint): bigint;
|
|
4
4
|
export declare function calcOverallBorrowInterestRate(totalVarDebt: bigint, totalStableDebt: bigint, variableBorInterestRate: Dnum, avgStableBorInterestRate: Dnum): Dnum;
|
|
5
|
-
export declare function calcDepositInterestIndex(dirt1: Dnum, diit1: Dnum, latestUpdate: bigint): Dnum;
|
|
6
|
-
export declare function calcBorrowInterestIndex(birt1: Dnum, biit1: Dnum, latestUpdate: bigint): Dnum;
|
|
7
|
-
export declare function calcRetention(actualRetained: bigint, totalDebt: bigint, overallBorrowInterestRate: Dnum, retentionRate: Dnum, latestUpdate: bigint): bigint;
|
|
5
|
+
export declare function calcDepositInterestIndex(dirt1: Dnum, diit1: Dnum, latestUpdate: bigint, lastTimestamp?: bigint): Dnum;
|
|
6
|
+
export declare function calcBorrowInterestIndex(birt1: Dnum, biit1: Dnum, latestUpdate: bigint, lastTimestamp?: bigint): Dnum;
|
|
7
|
+
export declare function calcRetention(actualRetained: bigint, totalDebt: bigint, overallBorrowInterestRate: Dnum, retentionRate: Dnum, latestUpdate: bigint, lastTimestamp?: bigint): bigint;
|
|
8
8
|
export declare function calcRewardIndex(used: bigint, ma: bigint, rit1: Dnum, rs: Dnum, latestUpdate: bigint): Dnum;
|
|
9
9
|
export declare function calcAccruedRewards(amount: bigint, rit: Dnum, ritn1: Dnum): bigint;
|
|
10
10
|
export declare function toFAmount(underlyingAmount: bigint, diit: Dnum): bigint;
|
|
@@ -12,18 +12,18 @@ export function calcOverallBorrowInterestRate(totalVarDebt, totalStableDebt, var
|
|
|
12
12
|
return dn.from(0, 18);
|
|
13
13
|
return dn.div(dn.add(dn.mul(totalVarDebt, variableBorInterestRate, { rounding: "ROUND_DOWN", decimals: 0 }), dn.mul(totalStableDebt, avgStableBorInterestRate, { rounding: "ROUND_DOWN", decimals: 0 })), totalDebt, { rounding: "ROUND_DOWN", decimals: 18 });
|
|
14
14
|
}
|
|
15
|
-
export function calcDepositInterestIndex(dirt1, diit1, latestUpdate) {
|
|
16
|
-
const dt =
|
|
15
|
+
export function calcDepositInterestIndex(dirt1, diit1, latestUpdate, lastTimestamp = BigInt(unixTime())) {
|
|
16
|
+
const dt = lastTimestamp - latestUpdate;
|
|
17
17
|
return dn.mul(diit1, dn.add(dn.from(1, 18), dn.div(dn.mul(dirt1, dt, { rounding: "ROUND_DOWN" }), SECONDS_IN_YEAR, {
|
|
18
18
|
rounding: "ROUND_DOWN",
|
|
19
19
|
})), { rounding: "ROUND_DOWN" });
|
|
20
20
|
}
|
|
21
|
-
export function calcBorrowInterestIndex(birt1, biit1, latestUpdate) {
|
|
22
|
-
const dt =
|
|
21
|
+
export function calcBorrowInterestIndex(birt1, biit1, latestUpdate, lastTimestamp = BigInt(unixTime())) {
|
|
22
|
+
const dt = lastTimestamp - latestUpdate;
|
|
23
23
|
return dn.mul(biit1, expBySquaring(dn.add(dn.from(1, 18), dn.div(birt1, SECONDS_IN_YEAR, { rounding: "ROUND_DOWN" })), dt), { rounding: "ROUND_DOWN" });
|
|
24
24
|
}
|
|
25
|
-
export function calcRetention(actualRetained, totalDebt, overallBorrowInterestRate, retentionRate, latestUpdate) {
|
|
26
|
-
const dt =
|
|
25
|
+
export function calcRetention(actualRetained, totalDebt, overallBorrowInterestRate, retentionRate, latestUpdate, lastTimestamp = BigInt(unixTime())) {
|
|
26
|
+
const dt = lastTimestamp - latestUpdate;
|
|
27
27
|
const [retainedDelta] = dn.div(dn.mul(dn.mul(dn.mul(totalDebt, overallBorrowInterestRate, { rounding: "ROUND_DOWN", decimals: 0 }), retentionRate, {
|
|
28
28
|
rounding: "ROUND_DOWN",
|
|
29
29
|
decimals: 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formulae.js","sourceRoot":"","sources":["../../../src/common/utils/formulae.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,MAAM,CAAC;AAE3B,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAIzE,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,MAAc;IAC7D,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,YAAoB,EAAE,MAAc,EAAE,MAAc;IACtF,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,YAAoB,EACpB,eAAuB,EACvB,uBAA6B,EAC7B,wBAA8B;IAE9B,MAAM,SAAS,GAAG,YAAY,GAAG,eAAe,CAAC;IACjD,IAAI,SAAS,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE5C,OAAO,EAAE,CAAC,GAAG,CACX,EAAE,CAAC,GAAG,CACJ,EAAE,CAAC,GAAG,CAAC,YAAY,EAAE,uBAAuB,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,EACtF,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,wBAAwB,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAC3F,EACD,SAAS,EACT,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,EAAE,CACzC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,
|
|
1
|
+
{"version":3,"file":"formulae.js","sourceRoot":"","sources":["../../../src/common/utils/formulae.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { getBlock } from "viem/actions";
|
|
2
|
+
|
|
1
3
|
import { EVM_FOLKS_CHAIN_ID } from "../constants/chain.js";
|
|
2
4
|
|
|
3
5
|
import type { EvmAddress } from "../../../../common/types/address.js";
|
|
4
6
|
import type { EvmChainId } from "../types/chain.js";
|
|
5
|
-
import type { Account, WalletClient } from "viem";
|
|
7
|
+
import type { Account, Client, WalletClient } from "viem";
|
|
6
8
|
|
|
7
9
|
export function getEvmSignerAddress(signer: WalletClient): EvmAddress {
|
|
8
10
|
if (signer.account?.address) return signer.account.address as EvmAddress;
|
|
@@ -18,3 +20,8 @@ export const isEvmChainId = (chainId: number): chainId is EvmChainId => {
|
|
|
18
20
|
// @ts-expect-error -- this is made on purpose to have the type predicate
|
|
19
21
|
return Object.values(EVM_FOLKS_CHAIN_ID).includes(chainId);
|
|
20
22
|
};
|
|
23
|
+
|
|
24
|
+
export async function getBlockTimestamp(provider: Client, blockNumber?: bigint): Promise<bigint> {
|
|
25
|
+
const block = await getBlock(provider, { blockNumber, includeTransactions: false });
|
|
26
|
+
return block.timestamp;
|
|
27
|
+
}
|
|
@@ -6,7 +6,8 @@ import {
|
|
|
6
6
|
calcOverallBorrowInterestRate,
|
|
7
7
|
calcRetention,
|
|
8
8
|
} from "../../../../common/utils/formulae.js";
|
|
9
|
-
import { compoundEveryHour, compoundEverySecond } from "../../../../common/utils/math-lib.js";
|
|
9
|
+
import { compoundEveryHour, compoundEverySecond, unixTime } from "../../../../common/utils/math-lib.js";
|
|
10
|
+
import { getBlockTimestamp } from "../../common/utils/chain.js";
|
|
10
11
|
import { getHubTokenData } from "../utils/chain.js";
|
|
11
12
|
import { getHubPoolContract } from "../utils/contract.js";
|
|
12
13
|
|
|
@@ -91,6 +92,8 @@ export async function getPoolInfo(
|
|
|
91
92
|
blockNumber,
|
|
92
93
|
});
|
|
93
94
|
|
|
95
|
+
const lastTimestamp = blockNumber ? await getBlockTimestamp(provider, blockNumber) : BigInt(unixTime());
|
|
96
|
+
|
|
94
97
|
const {
|
|
95
98
|
flashLoanFee,
|
|
96
99
|
retentionRate,
|
|
@@ -148,6 +151,7 @@ export async function getPoolInfo(
|
|
|
148
151
|
),
|
|
149
152
|
[BigInt(retentionRate), 6],
|
|
150
153
|
lastUpdateTimestamp,
|
|
154
|
+
lastTimestamp,
|
|
151
155
|
),
|
|
152
156
|
fTokenFeeRecipient: fTokenFeeRecipient as EvmAddress,
|
|
153
157
|
tokenFeeClaimer: tokenFeeClaimer as EvmAddress,
|
|
@@ -162,6 +166,7 @@ export async function getPoolInfo(
|
|
|
162
166
|
[depositInterestRate, 18],
|
|
163
167
|
[oldDepositInterestIndex, 18],
|
|
164
168
|
lastUpdateTimestamp,
|
|
169
|
+
lastTimestamp,
|
|
165
170
|
),
|
|
166
171
|
},
|
|
167
172
|
variableBorrowData: {
|
|
@@ -175,6 +180,7 @@ export async function getPoolInfo(
|
|
|
175
180
|
[variableBorrowInterestRate, 18],
|
|
176
181
|
[oldVariableBorrowInterestsIndex, 18],
|
|
177
182
|
lastUpdateTimestamp,
|
|
183
|
+
lastTimestamp,
|
|
178
184
|
),
|
|
179
185
|
},
|
|
180
186
|
stableBorrowData: {
|
|
@@ -31,8 +31,13 @@ export function calcOverallBorrowInterestRate(
|
|
|
31
31
|
);
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
export function calcDepositInterestIndex(
|
|
35
|
-
|
|
34
|
+
export function calcDepositInterestIndex(
|
|
35
|
+
dirt1: Dnum,
|
|
36
|
+
diit1: Dnum,
|
|
37
|
+
latestUpdate: bigint,
|
|
38
|
+
lastTimestamp = BigInt(unixTime()),
|
|
39
|
+
): Dnum {
|
|
40
|
+
const dt = lastTimestamp - latestUpdate;
|
|
36
41
|
return dn.mul(
|
|
37
42
|
diit1,
|
|
38
43
|
dn.add(
|
|
@@ -45,8 +50,13 @@ export function calcDepositInterestIndex(dirt1: Dnum, diit1: Dnum, latestUpdate:
|
|
|
45
50
|
);
|
|
46
51
|
}
|
|
47
52
|
|
|
48
|
-
export function calcBorrowInterestIndex(
|
|
49
|
-
|
|
53
|
+
export function calcBorrowInterestIndex(
|
|
54
|
+
birt1: Dnum,
|
|
55
|
+
biit1: Dnum,
|
|
56
|
+
latestUpdate: bigint,
|
|
57
|
+
lastTimestamp = BigInt(unixTime()),
|
|
58
|
+
): Dnum {
|
|
59
|
+
const dt = lastTimestamp - latestUpdate;
|
|
50
60
|
return dn.mul(
|
|
51
61
|
biit1,
|
|
52
62
|
expBySquaring(dn.add(dn.from(1, 18), dn.div(birt1, SECONDS_IN_YEAR, { rounding: "ROUND_DOWN" })), dt),
|
|
@@ -60,8 +70,9 @@ export function calcRetention(
|
|
|
60
70
|
overallBorrowInterestRate: Dnum,
|
|
61
71
|
retentionRate: Dnum,
|
|
62
72
|
latestUpdate: bigint,
|
|
73
|
+
lastTimestamp = BigInt(unixTime()),
|
|
63
74
|
): bigint {
|
|
64
|
-
const dt =
|
|
75
|
+
const dt = lastTimestamp - latestUpdate;
|
|
65
76
|
|
|
66
77
|
const [retainedDelta] = dn.div(
|
|
67
78
|
dn.mul(
|