@folks-finance/xchain-sdk 0.0.32 → 0.0.34
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/constants/contract.d.ts +1 -0
- package/dist/chains/evm/common/constants/contract.js +1 -0
- package/dist/chains/evm/common/constants/contract.js.map +1 -1
- package/dist/chains/evm/hub/modules/folks-hub-gmp.js +4 -3
- package/dist/chains/evm/hub/modules/folks-hub-gmp.js.map +1 -1
- package/dist/chains/evm/hub/modules/folks-hub-pool.js +10 -4
- package/dist/chains/evm/hub/modules/folks-hub-pool.js.map +1 -1
- package/dist/chains/evm/hub/types/pool.d.ts +1 -0
- package/dist/common/utils/formulae.d.ts +2 -0
- package/dist/common/utils/formulae.js +16 -0
- package/dist/common/utils/formulae.js.map +1 -1
- package/package.json +1 -1
- package/src/chains/evm/common/constants/contract.ts +1 -0
- package/src/chains/evm/hub/modules/folks-hub-gmp.ts +4 -3
- package/src/chains/evm/hub/modules/folks-hub-pool.ts +33 -4
- package/src/chains/evm/hub/types/pool.ts +1 -0
- package/src/common/utils/formulae.ts +45 -0
|
@@ -3,3 +3,4 @@ export declare const defaultEventParams: EventParams;
|
|
|
3
3
|
export declare const GAS_LIMIT_ESTIMATE_INCREASE = 10000n;
|
|
4
4
|
export declare const SEND_TOKEN_ACTION_RETURN_GAS_LIMIT = 500000n;
|
|
5
5
|
export declare const RECEIVER_VALUE_SLIPPAGE = 0.01;
|
|
6
|
+
export declare const RETRY_REVERSE_GAS_LIMIT_SLIPPAGE = 0.05;
|
|
@@ -6,4 +6,5 @@ export const defaultEventParams = {
|
|
|
6
6
|
export const GAS_LIMIT_ESTIMATE_INCREASE = 10000n;
|
|
7
7
|
export const SEND_TOKEN_ACTION_RETURN_GAS_LIMIT = 500000n;
|
|
8
8
|
export const RECEIVER_VALUE_SLIPPAGE = 0.01;
|
|
9
|
+
export const RETRY_REVERSE_GAS_LIMIT_SLIPPAGE = 0.05;
|
|
9
10
|
//# sourceMappingURL=contract.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../../../../src/chains/evm/common/constants/contract.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAAgB;IAC7C,SAAS,EAAE,UAAU;IACrB,OAAO,EAAE,QAAQ;IACjB,MAAM,EAAE,IAAI;CACb,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAO,CAAC;AACnD,MAAM,CAAC,MAAM,kCAAkC,GAAG,OAAQ,CAAC;AAC3D,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAC"}
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../../../../src/chains/evm/common/constants/contract.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAAgB;IAC7C,SAAS,EAAE,UAAU;IACrB,OAAO,EAAE,QAAQ;IACjB,MAAM,EAAE,IAAI;CACb,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAO,CAAC;AACnD,MAAM,CAAC,MAAM,kCAAkC,GAAG,OAAQ,CAAC;AAC3D,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAC5C,MAAM,CAAC,MAAM,gCAAgC,GAAG,IAAI,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { FINALITY } from "../../../../common/constants/message.js";
|
|
2
2
|
import { getRandomGenericAddress } from "../../../../common/utils/address.js";
|
|
3
3
|
import { getRandomBytes } from "../../../../common/utils/bytes.js";
|
|
4
|
-
import {
|
|
4
|
+
import { increaseByPercent } from "../../../../common/utils/math-lib.js";
|
|
5
|
+
import { RETRY_REVERSE_GAS_LIMIT_SLIPPAGE } from "../../common/constants/contract.js";
|
|
5
6
|
import { getEvmSignerAccount } from "../../common/utils/chain.js";
|
|
6
7
|
import { buildMessageParams, buildSendTokenExtraArgsWhenRemoving } from "../../common/utils/message.js";
|
|
7
8
|
import { getBridgeRouterHubContract } from "../utils/contract.js";
|
|
@@ -15,7 +16,7 @@ export const prepare = {
|
|
|
15
16
|
value,
|
|
16
17
|
});
|
|
17
18
|
return {
|
|
18
|
-
gasLimit: gasLimit
|
|
19
|
+
gasLimit: increaseByPercent(gasLimit, RETRY_REVERSE_GAS_LIMIT_SLIPPAGE),
|
|
19
20
|
msgValue: value,
|
|
20
21
|
isHub: true,
|
|
21
22
|
message,
|
|
@@ -32,7 +33,7 @@ export const prepare = {
|
|
|
32
33
|
value,
|
|
33
34
|
});
|
|
34
35
|
return {
|
|
35
|
-
gasLimit: gasLimit
|
|
36
|
+
gasLimit: increaseByPercent(gasLimit, RETRY_REVERSE_GAS_LIMIT_SLIPPAGE),
|
|
36
37
|
msgValue: value,
|
|
37
38
|
isHub: true,
|
|
38
39
|
message,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"folks-hub-gmp.js","sourceRoot":"","sources":["../../../../../src/chains/evm/hub/modules/folks-hub-gmp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,yCAAyC,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"folks-hub-gmp.js","sourceRoot":"","sources":["../../../../../src/chains/evm/hub/modules/folks-hub-gmp.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { multicall } from "viem/actions";
|
|
2
|
-
import { calcBorrowInterestIndex, calcDepositInterestIndex } from "../../../../common/utils/formulae.js";
|
|
2
|
+
import { calcBorrowInterestIndex, calcDepositInterestIndex, calcOverallBorrowInterestRate, calcRetention, } from "../../../../common/utils/formulae.js";
|
|
3
3
|
import { compoundEveryHour, compoundEverySecond } from "../../../../common/utils/math-lib.js";
|
|
4
4
|
import { getHubTokenData } from "../utils/chain.js";
|
|
5
5
|
import { getHubPoolContract } from "../utils/contract.js";
|
|
@@ -7,7 +7,7 @@ export async function getPoolInfo(provider, network, folksTokenId) {
|
|
|
7
7
|
const { poolAddress, token: { decimals: tokenDecimals }, } = getHubTokenData(folksTokenId, network);
|
|
8
8
|
const hubPool = getHubPoolContract(provider, poolAddress);
|
|
9
9
|
// get pool data
|
|
10
|
-
const [poolId, lastUpdateTimestamp, feeData, depositData, variableBorrowData, stableBorrowData, capsData, configData,] = await multicall(provider, {
|
|
10
|
+
const [poolId, lastUpdateTimestamp, feeData, depositData, variableBorrowData, stableBorrowData, capsData, configData, fTokenCirculatingSupply,] = await multicall(provider, {
|
|
11
11
|
contracts: [
|
|
12
12
|
{
|
|
13
13
|
address: hubPool.address,
|
|
@@ -49,10 +49,15 @@ export async function getPoolInfo(provider, network, folksTokenId) {
|
|
|
49
49
|
abi: hubPool.abi,
|
|
50
50
|
functionName: "getConfigData",
|
|
51
51
|
},
|
|
52
|
+
{
|
|
53
|
+
address: hubPool.address,
|
|
54
|
+
abi: hubPool.abi,
|
|
55
|
+
functionName: "totalSupply",
|
|
56
|
+
},
|
|
52
57
|
],
|
|
53
58
|
allowFailure: false,
|
|
54
59
|
});
|
|
55
|
-
const { flashLoanFee, retentionRate, fTokenFeeRecipient, tokenFeeClaimer, totalRetainedAmount, tokenFeeRecipient } = feeData;
|
|
60
|
+
const { flashLoanFee, retentionRate, fTokenFeeRecipient, tokenFeeClaimer, totalRetainedAmount: actualRetained, tokenFeeRecipient, } = feeData;
|
|
56
61
|
const { optimalUtilisationRatio, totalAmount: depositTotalAmount, interestRate: depositInterestRate, interestIndex: oldDepositInterestIndex, } = depositData;
|
|
57
62
|
const { vr0, vr1, vr2, totalAmount: variableBorrowTotalAmount, interestRate: variableBorrowInterestRate, interestIndex: oldVariableBorrowInterestsIndex, } = variableBorrowData;
|
|
58
63
|
const { sr0, sr1, sr2, sr3, optimalStableToTotalDebtRatio, rebalanceUpUtilisationRatio, rebalanceUpDepositInterestRate, rebalanceDownDelta, totalAmount: stableBorrowTotalAmount, interestRate: stableBorrowInterestRate, averageInterestRate: stableBorrowAverageInterestRate, } = stableBorrowData;
|
|
@@ -66,7 +71,7 @@ export async function getPoolInfo(provider, network, folksTokenId) {
|
|
|
66
71
|
feeData: {
|
|
67
72
|
flashLoanFee: [BigInt(flashLoanFee), 6],
|
|
68
73
|
retentionRate: [BigInt(retentionRate), 6],
|
|
69
|
-
totalRetainedAmount,
|
|
74
|
+
totalRetainedAmount: calcRetention(actualRetained, variableBorrowTotalAmount + stableBorrowTotalAmount, calcOverallBorrowInterestRate(variableBorrowTotalAmount, stableBorrowTotalAmount, [variableBorrowInterestRate, 18], [stableBorrowAverageInterestRate, 18]), [BigInt(retentionRate), 6], lastUpdateTimestamp),
|
|
70
75
|
fTokenFeeRecipient: fTokenFeeRecipient,
|
|
71
76
|
tokenFeeClaimer: tokenFeeClaimer,
|
|
72
77
|
tokenFeeRecipient: tokenFeeRecipient,
|
|
@@ -113,6 +118,7 @@ export async function getPoolInfo(provider, network, folksTokenId) {
|
|
|
113
118
|
canMintFToken,
|
|
114
119
|
flashLoanSupported,
|
|
115
120
|
},
|
|
121
|
+
fTokenCirculatingSupply,
|
|
116
122
|
};
|
|
117
123
|
}
|
|
118
124
|
//# sourceMappingURL=folks-hub-pool.js.map
|
|
@@ -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,
|
|
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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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
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
|
+
export declare function calcOverallBorrowInterestRate(totalVarDebt: bigint, totalStableDebt: bigint, variableBorInterestRate: Dnum, avgStableBorInterestRate: Dnum): Dnum;
|
|
4
5
|
export declare function calcDepositInterestIndex(dirt1: Dnum, diit1: Dnum, latestUpdate: bigint): Dnum;
|
|
5
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;
|
|
6
8
|
export declare function calcRewardIndex(used: bigint, ma: bigint, rit1: Dnum, rs: Dnum, latestUpdate: bigint): Dnum;
|
|
7
9
|
export declare function calcAccruedRewards(amount: bigint, rit: Dnum, ritn1: Dnum): bigint;
|
|
8
10
|
export declare function toFAmount(underlyingAmount: bigint, diit: Dnum): bigint;
|
|
@@ -6,6 +6,12 @@ export function calcPeriodNumber(offset, length) {
|
|
|
6
6
|
export function calcNextPeriodReset(periodNumber, offset, length) {
|
|
7
7
|
return (periodNumber + BigInt(1)) * length - offset;
|
|
8
8
|
}
|
|
9
|
+
export function calcOverallBorrowInterestRate(totalVarDebt, totalStableDebt, variableBorInterestRate, avgStableBorInterestRate) {
|
|
10
|
+
const totalDebt = totalVarDebt + totalStableDebt;
|
|
11
|
+
if (totalDebt === 0n)
|
|
12
|
+
return dn.from(0, 18);
|
|
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
|
+
}
|
|
9
15
|
export function calcDepositInterestIndex(dirt1, diit1, latestUpdate) {
|
|
10
16
|
const dt = BigInt(unixTime()) - latestUpdate;
|
|
11
17
|
return dn.mul(diit1, dn.add(dn.from(1, 18), dn.div(dn.mul(dirt1, dt, { rounding: "ROUND_DOWN" }), SECONDS_IN_YEAR, {
|
|
@@ -16,6 +22,16 @@ export function calcBorrowInterestIndex(birt1, biit1, latestUpdate) {
|
|
|
16
22
|
const dt = BigInt(unixTime()) - latestUpdate;
|
|
17
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" });
|
|
18
24
|
}
|
|
25
|
+
export function calcRetention(actualRetained, totalDebt, overallBorrowInterestRate, retentionRate, latestUpdate) {
|
|
26
|
+
const dt = BigInt(unixTime()) - latestUpdate;
|
|
27
|
+
const [retainedDelta] = dn.div(dn.mul(dn.mul(dn.mul(totalDebt, overallBorrowInterestRate, { rounding: "ROUND_DOWN", decimals: 0 }), retentionRate, {
|
|
28
|
+
rounding: "ROUND_DOWN",
|
|
29
|
+
decimals: 0,
|
|
30
|
+
}), dt, { rounding: "ROUND_DOWN" }), SECONDS_IN_YEAR, {
|
|
31
|
+
rounding: "ROUND_DOWN",
|
|
32
|
+
});
|
|
33
|
+
return actualRetained + retainedDelta;
|
|
34
|
+
}
|
|
19
35
|
export function calcRewardIndex(used, ma, rit1, rs, latestUpdate) {
|
|
20
36
|
if (used <= ma)
|
|
21
37
|
return rit1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formulae.js","sourceRoot":"","sources":["../../../src/common/utils/formulae.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"formulae.js","sourceRoot":"","sources":["../../../src/common/utils/formulae.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { FINALITY } from "../../../../common/constants/message.js";
|
|
2
2
|
import { getRandomGenericAddress } from "../../../../common/utils/address.js";
|
|
3
3
|
import { getRandomBytes } from "../../../../common/utils/bytes.js";
|
|
4
|
-
import {
|
|
4
|
+
import { increaseByPercent } from "../../../../common/utils/math-lib.js";
|
|
5
|
+
import { RETRY_REVERSE_GAS_LIMIT_SLIPPAGE } from "../../common/constants/contract.js";
|
|
5
6
|
import { getEvmSignerAccount } from "../../common/utils/chain.js";
|
|
6
7
|
import { buildMessageParams, buildSendTokenExtraArgsWhenRemoving } from "../../common/utils/message.js";
|
|
7
8
|
import { getBridgeRouterHubContract } from "../utils/contract.js";
|
|
@@ -38,7 +39,7 @@ export const prepare = {
|
|
|
38
39
|
});
|
|
39
40
|
|
|
40
41
|
return {
|
|
41
|
-
gasLimit: gasLimit
|
|
42
|
+
gasLimit: increaseByPercent(gasLimit, RETRY_REVERSE_GAS_LIMIT_SLIPPAGE),
|
|
42
43
|
msgValue: value,
|
|
43
44
|
isHub: true,
|
|
44
45
|
message,
|
|
@@ -68,7 +69,7 @@ export const prepare = {
|
|
|
68
69
|
});
|
|
69
70
|
|
|
70
71
|
return {
|
|
71
|
-
gasLimit: gasLimit
|
|
72
|
+
gasLimit: increaseByPercent(gasLimit, RETRY_REVERSE_GAS_LIMIT_SLIPPAGE),
|
|
72
73
|
msgValue: value,
|
|
73
74
|
isHub: true,
|
|
74
75
|
message,
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { multicall } from "viem/actions";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
calcBorrowInterestIndex,
|
|
5
|
+
calcDepositInterestIndex,
|
|
6
|
+
calcOverallBorrowInterestRate,
|
|
7
|
+
calcRetention,
|
|
8
|
+
} from "../../../../common/utils/formulae.js";
|
|
4
9
|
import { compoundEveryHour, compoundEverySecond } from "../../../../common/utils/math-lib.js";
|
|
5
10
|
import { getHubTokenData } from "../utils/chain.js";
|
|
6
11
|
import { getHubPoolContract } from "../utils/contract.js";
|
|
@@ -32,6 +37,7 @@ export async function getPoolInfo(
|
|
|
32
37
|
stableBorrowData,
|
|
33
38
|
capsData,
|
|
34
39
|
configData,
|
|
40
|
+
fTokenCirculatingSupply,
|
|
35
41
|
] = await multicall(provider, {
|
|
36
42
|
contracts: [
|
|
37
43
|
{
|
|
@@ -74,12 +80,23 @@ export async function getPoolInfo(
|
|
|
74
80
|
abi: hubPool.abi,
|
|
75
81
|
functionName: "getConfigData",
|
|
76
82
|
},
|
|
83
|
+
{
|
|
84
|
+
address: hubPool.address,
|
|
85
|
+
abi: hubPool.abi,
|
|
86
|
+
functionName: "totalSupply",
|
|
87
|
+
},
|
|
77
88
|
],
|
|
78
89
|
allowFailure: false,
|
|
79
90
|
});
|
|
80
91
|
|
|
81
|
-
const {
|
|
82
|
-
|
|
92
|
+
const {
|
|
93
|
+
flashLoanFee,
|
|
94
|
+
retentionRate,
|
|
95
|
+
fTokenFeeRecipient,
|
|
96
|
+
tokenFeeClaimer,
|
|
97
|
+
totalRetainedAmount: actualRetained,
|
|
98
|
+
tokenFeeRecipient,
|
|
99
|
+
} = feeData;
|
|
83
100
|
const {
|
|
84
101
|
optimalUtilisationRatio,
|
|
85
102
|
totalAmount: depositTotalAmount,
|
|
@@ -118,7 +135,18 @@ export async function getPoolInfo(
|
|
|
118
135
|
feeData: {
|
|
119
136
|
flashLoanFee: [BigInt(flashLoanFee), 6],
|
|
120
137
|
retentionRate: [BigInt(retentionRate), 6],
|
|
121
|
-
totalRetainedAmount
|
|
138
|
+
totalRetainedAmount: calcRetention(
|
|
139
|
+
actualRetained,
|
|
140
|
+
variableBorrowTotalAmount + stableBorrowTotalAmount,
|
|
141
|
+
calcOverallBorrowInterestRate(
|
|
142
|
+
variableBorrowTotalAmount,
|
|
143
|
+
stableBorrowTotalAmount,
|
|
144
|
+
[variableBorrowInterestRate, 18],
|
|
145
|
+
[stableBorrowAverageInterestRate, 18],
|
|
146
|
+
),
|
|
147
|
+
[BigInt(retentionRate), 6],
|
|
148
|
+
lastUpdateTimestamp,
|
|
149
|
+
),
|
|
122
150
|
fTokenFeeRecipient: fTokenFeeRecipient as EvmAddress,
|
|
123
151
|
tokenFeeClaimer: tokenFeeClaimer as EvmAddress,
|
|
124
152
|
tokenFeeRecipient: tokenFeeRecipient as GenericAddress,
|
|
@@ -173,5 +201,6 @@ export async function getPoolInfo(
|
|
|
173
201
|
canMintFToken,
|
|
174
202
|
flashLoanSupported,
|
|
175
203
|
},
|
|
204
|
+
fTokenCirculatingSupply,
|
|
176
205
|
};
|
|
177
206
|
}
|
|
@@ -12,6 +12,25 @@ export function calcNextPeriodReset(periodNumber: bigint, offset: bigint, length
|
|
|
12
12
|
return (periodNumber + BigInt(1)) * length - offset;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
+
export function calcOverallBorrowInterestRate(
|
|
16
|
+
totalVarDebt: bigint,
|
|
17
|
+
totalStableDebt: bigint,
|
|
18
|
+
variableBorInterestRate: Dnum,
|
|
19
|
+
avgStableBorInterestRate: Dnum,
|
|
20
|
+
): Dnum {
|
|
21
|
+
const totalDebt = totalVarDebt + totalStableDebt;
|
|
22
|
+
if (totalDebt === 0n) return dn.from(0, 18);
|
|
23
|
+
|
|
24
|
+
return dn.div(
|
|
25
|
+
dn.add(
|
|
26
|
+
dn.mul(totalVarDebt, variableBorInterestRate, { rounding: "ROUND_DOWN", decimals: 0 }),
|
|
27
|
+
dn.mul(totalStableDebt, avgStableBorInterestRate, { rounding: "ROUND_DOWN", decimals: 0 }),
|
|
28
|
+
),
|
|
29
|
+
totalDebt,
|
|
30
|
+
{ rounding: "ROUND_DOWN", decimals: 18 },
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
|
|
15
34
|
export function calcDepositInterestIndex(dirt1: Dnum, diit1: Dnum, latestUpdate: bigint): Dnum {
|
|
16
35
|
const dt = BigInt(unixTime()) - latestUpdate;
|
|
17
36
|
return dn.mul(
|
|
@@ -35,6 +54,32 @@ export function calcBorrowInterestIndex(birt1: Dnum, biit1: Dnum, latestUpdate:
|
|
|
35
54
|
);
|
|
36
55
|
}
|
|
37
56
|
|
|
57
|
+
export function calcRetention(
|
|
58
|
+
actualRetained: bigint,
|
|
59
|
+
totalDebt: bigint,
|
|
60
|
+
overallBorrowInterestRate: Dnum,
|
|
61
|
+
retentionRate: Dnum,
|
|
62
|
+
latestUpdate: bigint,
|
|
63
|
+
): bigint {
|
|
64
|
+
const dt = BigInt(unixTime()) - latestUpdate;
|
|
65
|
+
|
|
66
|
+
const [retainedDelta] = dn.div(
|
|
67
|
+
dn.mul(
|
|
68
|
+
dn.mul(dn.mul(totalDebt, overallBorrowInterestRate, { rounding: "ROUND_DOWN", decimals: 0 }), retentionRate, {
|
|
69
|
+
rounding: "ROUND_DOWN",
|
|
70
|
+
decimals: 0,
|
|
71
|
+
}),
|
|
72
|
+
dt,
|
|
73
|
+
{ rounding: "ROUND_DOWN" },
|
|
74
|
+
),
|
|
75
|
+
SECONDS_IN_YEAR,
|
|
76
|
+
{
|
|
77
|
+
rounding: "ROUND_DOWN",
|
|
78
|
+
},
|
|
79
|
+
);
|
|
80
|
+
return actualRetained + retainedDelta;
|
|
81
|
+
}
|
|
82
|
+
|
|
38
83
|
export function calcRewardIndex(used: bigint, ma: bigint, rit1: Dnum, rs: Dnum, latestUpdate: bigint): Dnum {
|
|
39
84
|
if (used <= ma) return rit1;
|
|
40
85
|
const dt = BigInt(unixTime()) - latestUpdate;
|