@gearbox-protocol/sdk 14.12.0-next.8 → 14.12.0-next.9
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/cjs/dev/AccountOpener.js +7 -13
- package/dist/cjs/history/classifyMulticallOperations.js +2 -0
- package/dist/cjs/history/mapOperations.js +7 -0
- package/dist/cjs/plugins/adapters/contracts/AbstractAdapter.js +10 -9
- package/dist/cjs/plugins/adapters/contracts/AbstractCurveAdapter.js +66 -0
- package/dist/cjs/plugins/adapters/contracts/BalancerV3RouterAdapterContract.js +4 -5
- package/dist/cjs/plugins/adapters/contracts/BalancerV3WrapperAdapterContract.js +4 -9
- package/dist/cjs/plugins/adapters/contracts/CamelotV3AdapterContract.js +9 -5
- package/dist/cjs/plugins/adapters/contracts/ConvexV1BaseRewardPoolAdapterContract.js +5 -10
- package/dist/cjs/plugins/adapters/contracts/ConvexV1BoosterAdapterContract.js +4 -5
- package/dist/cjs/plugins/adapters/contracts/Curve2AssetsAdapterContract.js +2 -34
- package/dist/cjs/plugins/adapters/contracts/Curve3AssetsAdapterContract.js +2 -34
- package/dist/cjs/plugins/adapters/contracts/Curve4AssetsAdapterContract.js +2 -34
- package/dist/cjs/plugins/adapters/contracts/CurveV1AdapterDeposit.js +2 -29
- package/dist/cjs/plugins/adapters/contracts/CurveV1AdapterStETHContract.js +2 -34
- package/dist/cjs/plugins/adapters/contracts/CurveV1StableNGAdapterContract.js +2 -34
- package/dist/cjs/plugins/adapters/contracts/DaiUsdsAdapterContract.js +4 -5
- package/dist/cjs/plugins/adapters/contracts/ERC4626AdapterContract.js +4 -5
- package/dist/cjs/plugins/adapters/contracts/ERC4626ReferralAdapterContract.js +4 -5
- package/dist/cjs/plugins/adapters/contracts/FluidDexAdapterContract.js +8 -8
- package/dist/cjs/plugins/adapters/contracts/InfinifiGatewayAdapterContract.js +5 -6
- package/dist/cjs/plugins/adapters/contracts/KelpLRTDepositPoolAdapterContract.js +4 -5
- package/dist/cjs/plugins/adapters/contracts/LidoV1AdapterContract.js +3 -4
- package/dist/cjs/plugins/adapters/contracts/MellowDVVAdapterContract.js +4 -5
- package/dist/cjs/plugins/adapters/contracts/MellowERC4626VaultAdapterContract.js +4 -5
- package/dist/cjs/plugins/adapters/contracts/MellowWrapperAdapterContract.js +3 -4
- package/dist/cjs/plugins/adapters/contracts/MidasIssuanceVaultAdapterContract.js +3 -4
- package/dist/cjs/plugins/adapters/contracts/MidasRedemptionVaultAdapterContract.js +3 -4
- package/dist/cjs/plugins/adapters/contracts/PendleRouterAdapterContract.js +16 -11
- package/dist/cjs/plugins/adapters/contracts/SecuritizeOnRampAdapterContract.js +3 -4
- package/dist/cjs/plugins/adapters/contracts/SecuritizeSwapAdapterContract.js +3 -4
- package/dist/cjs/plugins/adapters/contracts/StakingRewardsAdapterContract.js +5 -10
- package/dist/cjs/plugins/adapters/contracts/TraderJoeRouterAdapterContract.js +3 -4
- package/dist/cjs/plugins/adapters/contracts/UniswapV2AdapterContract.js +3 -4
- package/dist/cjs/plugins/adapters/contracts/UniswapV3AdapterContract.js +9 -5
- package/dist/cjs/plugins/adapters/contracts/UniswapV4AdapterContract.js +8 -8
- package/dist/cjs/plugins/adapters/contracts/UpshiftVaultAdapterContract.js +4 -5
- package/dist/cjs/plugins/adapters/contracts/VelodromeV2AdapterContract.js +3 -4
- package/dist/cjs/plugins/adapters/contracts/WstETHV1AdapterContract.js +4 -5
- package/dist/cjs/plugins/adapters/index.js +0 -2
- package/dist/cjs/preview/parse/classifyInnerOperations.js +14 -1
- package/dist/cjs/preview/prerequisites/buildPrerequisites.js +3 -8
- package/dist/cjs/preview/preview/previewOpenCreditAccount.js +51 -59
- package/dist/cjs/preview/preview/unwrapNativeCollateral.js +10 -24
- package/dist/cjs/sdk/accounts/CreditAccountsServiceV310.js +3 -4
- package/dist/cjs/sdk/base/BaseContract.js +4 -2
- package/dist/cjs/sdk/base/ChainContractsRegister.js +1 -0
- package/dist/cjs/sdk/market/credit/CreditFacadeV310BaseContract.js +0 -31
- package/dist/cjs/sdk/market/rwa/securitize/SecuritizeRWAFactory.js +0 -25
- package/dist/cjs/sdk/router/AbstractRouterContract.js +21 -27
- package/dist/cjs/sdk/router/RouterV310Contract.js +11 -12
- package/dist/cjs/sdk/router/helpers.js +0 -5
- package/dist/cjs/sdk/utils/AddressMap.js +6 -0
- package/dist/cjs/sdk/utils/AssetsMap.js +61 -0
- package/dist/cjs/sdk/utils/index.js +2 -0
- package/dist/esm/dev/AccountOpener.js +8 -13
- package/dist/esm/history/classifyMulticallOperations.js +2 -0
- package/dist/esm/history/mapOperations.js +7 -0
- package/dist/esm/plugins/adapters/contracts/AbstractAdapter.js +10 -9
- package/dist/esm/plugins/adapters/contracts/AbstractCurveAdapter.js +42 -0
- package/dist/esm/plugins/adapters/contracts/BalancerV3RouterAdapterContract.js +4 -5
- package/dist/esm/plugins/adapters/contracts/BalancerV3WrapperAdapterContract.js +4 -9
- package/dist/esm/plugins/adapters/contracts/CamelotV3AdapterContract.js +9 -5
- package/dist/esm/plugins/adapters/contracts/ConvexV1BaseRewardPoolAdapterContract.js +5 -10
- package/dist/esm/plugins/adapters/contracts/ConvexV1BoosterAdapterContract.js +4 -5
- package/dist/esm/plugins/adapters/contracts/Curve2AssetsAdapterContract.js +3 -37
- package/dist/esm/plugins/adapters/contracts/Curve3AssetsAdapterContract.js +3 -37
- package/dist/esm/plugins/adapters/contracts/Curve4AssetsAdapterContract.js +3 -37
- package/dist/esm/plugins/adapters/contracts/CurveV1AdapterDeposit.js +3 -32
- package/dist/esm/plugins/adapters/contracts/CurveV1AdapterStETHContract.js +3 -37
- package/dist/esm/plugins/adapters/contracts/CurveV1StableNGAdapterContract.js +3 -37
- package/dist/esm/plugins/adapters/contracts/DaiUsdsAdapterContract.js +4 -5
- package/dist/esm/plugins/adapters/contracts/ERC4626AdapterContract.js +4 -5
- package/dist/esm/plugins/adapters/contracts/ERC4626ReferralAdapterContract.js +4 -5
- package/dist/esm/plugins/adapters/contracts/FluidDexAdapterContract.js +8 -8
- package/dist/esm/plugins/adapters/contracts/InfinifiGatewayAdapterContract.js +5 -6
- package/dist/esm/plugins/adapters/contracts/KelpLRTDepositPoolAdapterContract.js +4 -5
- package/dist/esm/plugins/adapters/contracts/LidoV1AdapterContract.js +3 -4
- package/dist/esm/plugins/adapters/contracts/MellowDVVAdapterContract.js +4 -5
- package/dist/esm/plugins/adapters/contracts/MellowERC4626VaultAdapterContract.js +4 -5
- package/dist/esm/plugins/adapters/contracts/MellowWrapperAdapterContract.js +3 -4
- package/dist/esm/plugins/adapters/contracts/MidasIssuanceVaultAdapterContract.js +3 -4
- package/dist/esm/plugins/adapters/contracts/MidasRedemptionVaultAdapterContract.js +3 -4
- package/dist/esm/plugins/adapters/contracts/PendleRouterAdapterContract.js +16 -11
- package/dist/esm/plugins/adapters/contracts/SecuritizeOnRampAdapterContract.js +3 -4
- package/dist/esm/plugins/adapters/contracts/SecuritizeSwapAdapterContract.js +3 -4
- package/dist/esm/plugins/adapters/contracts/StakingRewardsAdapterContract.js +5 -10
- package/dist/esm/plugins/adapters/contracts/TraderJoeRouterAdapterContract.js +3 -4
- package/dist/esm/plugins/adapters/contracts/UniswapV2AdapterContract.js +3 -4
- package/dist/esm/plugins/adapters/contracts/UniswapV3AdapterContract.js +9 -5
- package/dist/esm/plugins/adapters/contracts/UniswapV4AdapterContract.js +8 -8
- package/dist/esm/plugins/adapters/contracts/UpshiftVaultAdapterContract.js +4 -5
- package/dist/esm/plugins/adapters/contracts/VelodromeV2AdapterContract.js +3 -4
- package/dist/esm/plugins/adapters/contracts/WstETHV1AdapterContract.js +4 -5
- package/dist/esm/plugins/adapters/index.js +0 -1
- package/dist/esm/preview/parse/classifyInnerOperations.js +14 -1
- package/dist/esm/preview/prerequisites/buildPrerequisites.js +4 -8
- package/dist/esm/preview/preview/previewOpenCreditAccount.js +54 -67
- package/dist/esm/preview/preview/unwrapNativeCollateral.js +11 -25
- package/dist/esm/sdk/accounts/CreditAccountsServiceV310.js +4 -5
- package/dist/esm/sdk/base/BaseContract.js +4 -2
- package/dist/esm/sdk/base/ChainContractsRegister.js +1 -0
- package/dist/esm/sdk/market/credit/CreditFacadeV310BaseContract.js +0 -33
- package/dist/esm/sdk/market/rwa/securitize/SecuritizeRWAFactory.js +1 -27
- package/dist/esm/sdk/router/AbstractRouterContract.js +25 -29
- package/dist/esm/sdk/router/RouterV310Contract.js +11 -12
- package/dist/esm/sdk/router/helpers.js +0 -4
- package/dist/esm/sdk/utils/AddressMap.js +6 -0
- package/dist/esm/sdk/utils/AssetsMap.js +37 -0
- package/dist/esm/sdk/utils/index.js +1 -0
- package/dist/types/common-utils/utils/strategies/assets/assets.d.ts +1 -1
- package/dist/types/common-utils/utils/strategies/credit-managers/get-wallet-balances-allowed-on-cm.d.ts +1 -1
- package/dist/types/common-utils/utils/strategies/strategy-info/calculate-total-apy.d.ts +1 -1
- package/dist/types/common-utils/utils/strategies/strategy-info/calculate-total-points.d.ts +1 -1
- package/dist/types/common-utils/utils/strategies/tokens/add-amount-in-target.d.ts +1 -1
- package/dist/types/common-utils/utils/strategies/tokens/get-list-with-amount-in-target.d.ts +1 -1
- package/dist/types/common-utils/utils/strategies/types/strategy-earnings.d.ts +1 -1
- package/dist/types/common-utils/utils/validation/validate-balances.d.ts +1 -1
- package/dist/types/common-utils/utils/validation/validate-open-account.d.ts +1 -1
- package/dist/types/common-utils/utils/validation/validate-quota.d.ts +1 -1
- package/dist/types/common-utils/utils/validation/validate-token-to-obtain.d.ts +1 -1
- package/dist/types/plugins/adapters/contracts/AbstractAdapter.d.ts +9 -11
- package/dist/types/plugins/adapters/contracts/AbstractCurveAdapter.d.ts +18 -0
- package/dist/types/plugins/adapters/contracts/BalancerV3RouterAdapterContract.d.ts +2 -1
- package/dist/types/plugins/adapters/contracts/BalancerV3WrapperAdapterContract.d.ts +2 -1
- package/dist/types/plugins/adapters/contracts/CamelotV3AdapterContract.d.ts +2 -1
- package/dist/types/plugins/adapters/contracts/ConvexV1BaseRewardPoolAdapterContract.d.ts +2 -1
- package/dist/types/plugins/adapters/contracts/ConvexV1BoosterAdapterContract.d.ts +2 -1
- package/dist/types/plugins/adapters/contracts/Curve2AssetsAdapterContract.d.ts +4 -8
- package/dist/types/plugins/adapters/contracts/Curve3AssetsAdapterContract.d.ts +4 -9
- package/dist/types/plugins/adapters/contracts/Curve4AssetsAdapterContract.d.ts +4 -8
- package/dist/types/plugins/adapters/contracts/CurveV1AdapterDeposit.d.ts +4 -5
- package/dist/types/plugins/adapters/contracts/CurveV1AdapterStETHContract.d.ts +4 -8
- package/dist/types/plugins/adapters/contracts/CurveV1StableNGAdapterContract.d.ts +4 -8
- package/dist/types/plugins/adapters/contracts/DaiUsdsAdapterContract.d.ts +2 -1
- package/dist/types/plugins/adapters/contracts/ERC4626AdapterContract.d.ts +2 -1
- package/dist/types/plugins/adapters/contracts/ERC4626ReferralAdapterContract.d.ts +2 -1
- package/dist/types/plugins/adapters/contracts/FluidDexAdapterContract.d.ts +2 -1
- package/dist/types/plugins/adapters/contracts/InfinifiGatewayAdapterContract.d.ts +2 -1
- package/dist/types/plugins/adapters/contracts/KelpLRTDepositPoolAdapterContract.d.ts +2 -1
- package/dist/types/plugins/adapters/contracts/LidoV1AdapterContract.d.ts +2 -1
- package/dist/types/plugins/adapters/contracts/MellowDVVAdapterContract.d.ts +2 -1
- package/dist/types/plugins/adapters/contracts/MellowERC4626VaultAdapterContract.d.ts +2 -1
- package/dist/types/plugins/adapters/contracts/MellowWrapperAdapterContract.d.ts +2 -1
- package/dist/types/plugins/adapters/contracts/MidasIssuanceVaultAdapterContract.d.ts +2 -1
- package/dist/types/plugins/adapters/contracts/MidasRedemptionVaultAdapterContract.d.ts +2 -1
- package/dist/types/plugins/adapters/contracts/PendleRouterAdapterContract.d.ts +2 -1
- package/dist/types/plugins/adapters/contracts/SecuritizeOnRampAdapterContract.d.ts +2 -1
- package/dist/types/plugins/adapters/contracts/SecuritizeSwapAdapterContract.d.ts +2 -1
- package/dist/types/plugins/adapters/contracts/StakingRewardsAdapterContract.d.ts +2 -1
- package/dist/types/plugins/adapters/contracts/TraderJoeRouterAdapterContract.d.ts +2 -1
- package/dist/types/plugins/adapters/contracts/UniswapV2AdapterContract.d.ts +2 -1
- package/dist/types/plugins/adapters/contracts/UniswapV3AdapterContract.d.ts +2 -1
- package/dist/types/plugins/adapters/contracts/UniswapV4AdapterContract.d.ts +2 -1
- package/dist/types/plugins/adapters/contracts/UpshiftVaultAdapterContract.d.ts +2 -1
- package/dist/types/plugins/adapters/contracts/VelodromeV2AdapterContract.d.ts +2 -1
- package/dist/types/plugins/adapters/contracts/WstETHV1AdapterContract.d.ts +2 -1
- package/dist/types/plugins/adapters/index.d.ts +0 -1
- package/dist/types/plugins/adapters/types.d.ts +10 -0
- package/dist/types/preview/parse/types-adapters.d.ts +5 -1
- package/dist/types/preview/parse/types-facades.d.ts +23 -1
- package/dist/types/preview/preview/types.d.ts +4 -0
- package/dist/types/preview/preview/unwrapNativeCollateral.d.ts +2 -2
- package/dist/types/sdk/accounts/CreditAccountsServiceV310.d.ts +1 -1
- package/dist/types/sdk/accounts/types.d.ts +2 -2
- package/dist/types/sdk/base/BaseContract.d.ts +1 -1
- package/dist/types/sdk/base/TokensMeta.d.ts +1 -1
- package/dist/types/sdk/base/types.d.ts +18 -0
- package/dist/types/sdk/market/credit/CreditFacadeV310BaseContract.d.ts +1 -13
- package/dist/types/sdk/market/rwa/securitize/SecuritizeRWAFactory.d.ts +1 -13
- package/dist/types/sdk/pools/types.d.ts +1 -1
- package/dist/types/sdk/router/AbstractRouterContract.d.ts +5 -5
- package/dist/types/sdk/router/helpers.d.ts +1 -2
- package/dist/types/sdk/router/types.d.ts +1 -15
- package/dist/types/sdk/utils/AddressMap.d.ts +4 -0
- package/dist/types/sdk/utils/AssetsMap.d.ts +26 -0
- package/dist/types/sdk/utils/index.d.ts +1 -0
- package/package.json +1 -1
- package/dist/cjs/plugins/adapters/balanceChanges.js +0 -47
- package/dist/cjs/preview/preview/extractExpectedBalanceChanges.js +0 -70
- package/dist/esm/plugins/adapters/balanceChanges.js +0 -21
- package/dist/esm/preview/preview/extractExpectedBalanceChanges.js +0 -46
- package/dist/types/plugins/adapters/balanceChanges.d.ts +0 -21
- package/dist/types/preview/preview/extractExpectedBalanceChanges.d.ts +0 -33
|
@@ -1,56 +1,80 @@
|
|
|
1
|
+
import { AbstractAdapterContract } from "../../plugins/adapters/index.js";
|
|
1
2
|
import {
|
|
2
|
-
AbstractAdapterContract,
|
|
3
|
-
copyBalances
|
|
4
|
-
} from "../../plugins/adapters/index.js";
|
|
5
|
-
import {
|
|
6
|
-
AddressMap,
|
|
7
3
|
AP_WETH_TOKEN,
|
|
8
|
-
|
|
9
|
-
NO_VERSION
|
|
10
|
-
SecuritizeRWAFactory
|
|
4
|
+
AssetsMap,
|
|
5
|
+
NO_VERSION
|
|
11
6
|
} from "../../sdk/index.js";
|
|
12
|
-
import { extractExpectedBalanceChanges } from "./extractExpectedBalanceChanges.js";
|
|
13
7
|
import { unwrapNativeCollateral } from "./unwrapNativeCollateral.js";
|
|
14
8
|
function previewOpenCreditAccount(input, operation) {
|
|
15
|
-
const { sdk,
|
|
9
|
+
const { sdk, value = 0n } = input;
|
|
16
10
|
const market = sdk.marketRegister.findByCreditManager(
|
|
17
11
|
operation.creditManager
|
|
18
12
|
);
|
|
19
|
-
const
|
|
20
|
-
const balances = new
|
|
21
|
-
const addBalance = (token, amount) => {
|
|
22
|
-
balances.upsert(token, (balances.get(token) ?? 0n) + amount);
|
|
23
|
-
};
|
|
13
|
+
const collateralBalances = new AssetsMap();
|
|
14
|
+
const balances = new AssetsMap();
|
|
24
15
|
let debt = 0n;
|
|
25
16
|
const quotas = [];
|
|
17
|
+
let inBracket = false;
|
|
18
|
+
let storeSeen = false;
|
|
26
19
|
for (const op of operation.multicall) {
|
|
27
20
|
switch (op.operation) {
|
|
28
|
-
case "AddCollateral":
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
token: op.token,
|
|
32
|
-
balance: balance + op.amount
|
|
33
|
-
});
|
|
34
|
-
addBalance(op.token, op.amount);
|
|
21
|
+
case "AddCollateral":
|
|
22
|
+
collateralBalances.inc(op.token, op.amount);
|
|
23
|
+
balances.inc(op.token, op.amount);
|
|
35
24
|
break;
|
|
36
|
-
}
|
|
37
25
|
case "WithdrawCollateral":
|
|
38
|
-
|
|
26
|
+
balances.dec(op.token, op.amount);
|
|
39
27
|
break;
|
|
40
28
|
case "IncreaseBorrowedAmount":
|
|
41
29
|
debt += op.amount;
|
|
42
|
-
|
|
30
|
+
balances.inc(op.token, op.amount);
|
|
43
31
|
break;
|
|
44
32
|
case "DecreaseBorrowedAmount":
|
|
45
33
|
debt -= op.amount;
|
|
46
|
-
|
|
34
|
+
balances.dec(op.token, op.amount);
|
|
47
35
|
break;
|
|
48
36
|
case "UpdateQuota":
|
|
49
37
|
quotas.push({ token: op.token, balance: op.change });
|
|
50
38
|
break;
|
|
39
|
+
case "StoreExpectedBalances":
|
|
40
|
+
if (storeSeen) {
|
|
41
|
+
throw new Error(
|
|
42
|
+
"malformed multicall: duplicate storeExpectedBalances call"
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
storeSeen = true;
|
|
46
|
+
inBracket = true;
|
|
47
|
+
for (const { token, balance } of op.deltas) {
|
|
48
|
+
balances.inc(token, balance);
|
|
49
|
+
}
|
|
50
|
+
break;
|
|
51
|
+
case "CompareBalances":
|
|
52
|
+
if (!inBracket) {
|
|
53
|
+
throw new Error(
|
|
54
|
+
"malformed multicall: compareBalances without a preceding storeExpectedBalances"
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
inBracket = false;
|
|
58
|
+
break;
|
|
59
|
+
case "Execute":
|
|
60
|
+
if (inBracket) {
|
|
61
|
+
const adapter = sdk.getContract(op.adapter);
|
|
62
|
+
if (!(adapter instanceof AbstractAdapterContract)) {
|
|
63
|
+
throw new Error(
|
|
64
|
+
`call to ${op.adapter} between storeExpectedBalances and compareBalances is not an adapter call`
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
adapter.previewBalanceChanges(balances, op.calldata);
|
|
68
|
+
}
|
|
69
|
+
break;
|
|
51
70
|
}
|
|
52
71
|
}
|
|
53
|
-
|
|
72
|
+
if (inBracket) {
|
|
73
|
+
throw new Error(
|
|
74
|
+
"malformed multicall: storeExpectedBalances without a matching compareBalances"
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
let collateral = collateralBalances.toAssets();
|
|
54
78
|
const collateralValue = collateral.reduce(
|
|
55
79
|
(acc, { token, balance }) => acc + market.priceOracle.convert(token, market.underlying, balance),
|
|
56
80
|
0n
|
|
@@ -60,39 +84,11 @@ function previewOpenCreditAccount(input, operation) {
|
|
|
60
84
|
value,
|
|
61
85
|
sdk.addressProvider.getAddress(AP_WETH_TOKEN, NO_VERSION)
|
|
62
86
|
);
|
|
63
|
-
const
|
|
64
|
-
const innerCalls = parsed.rawArgs.calls ?? [];
|
|
65
|
-
const expected = extractExpectedBalanceChanges(innerCalls);
|
|
66
|
-
let finalBalances = balances;
|
|
67
|
-
if (expected) {
|
|
68
|
-
const rawCalls = extractRawInnerCalls(sdk, to, calldata);
|
|
69
|
-
if (rawCalls.length !== innerCalls.length) {
|
|
70
|
-
throw new Error(
|
|
71
|
-
`raw and parsed inner calls of ${to} are misaligned: ${rawCalls.length} raw vs ${innerCalls.length} parsed`
|
|
72
|
-
);
|
|
73
|
-
}
|
|
74
|
-
const snapshot = copyBalances(balances);
|
|
75
|
-
for (let i = expected.startIndex + 1; i < expected.endIndex; i++) {
|
|
76
|
-
const call = rawCalls[i];
|
|
77
|
-
const adapter = sdk.getContract(call.target);
|
|
78
|
-
if (!(adapter instanceof AbstractAdapterContract)) {
|
|
79
|
-
throw new Error(
|
|
80
|
-
`call to ${call.target} between storeExpectedBalances and compareBalances is not an adapter call`
|
|
81
|
-
);
|
|
82
|
-
}
|
|
83
|
-
finalBalances = adapter.previewBalanceChanges(
|
|
84
|
-
finalBalances,
|
|
85
|
-
call.callData
|
|
86
|
-
);
|
|
87
|
-
}
|
|
88
|
-
for (const { token, balance } of expected.deltas) {
|
|
89
|
-
finalBalances.upsert(token, (snapshot.get(token) ?? 0n) + balance);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
const assets = finalBalances.entries().filter(([, balance]) => balance > 1n).map(([token, balance]) => ({ token, balance }));
|
|
87
|
+
const assets = balances.entries().filter(([, balance]) => balance > 1n).map(([token, balance]) => ({ token, balance }));
|
|
93
88
|
return {
|
|
94
89
|
operation: operation.operation,
|
|
95
|
-
|
|
90
|
+
creditManager: operation.creditManager,
|
|
91
|
+
target: inferTargetAsset(operation.multicall, balances),
|
|
96
92
|
collateral,
|
|
97
93
|
collateralValue,
|
|
98
94
|
debt,
|
|
@@ -100,15 +96,6 @@ function previewOpenCreditAccount(input, operation) {
|
|
|
100
96
|
assets
|
|
101
97
|
};
|
|
102
98
|
}
|
|
103
|
-
function extractRawInnerCalls(sdk, to, calldata) {
|
|
104
|
-
const entry = sdk.getContract(to);
|
|
105
|
-
if (entry instanceof CreditFacadeV310BaseContract || entry instanceof SecuritizeRWAFactory) {
|
|
106
|
-
return entry.extractRawInnerCalls(calldata);
|
|
107
|
-
}
|
|
108
|
-
throw new Error(
|
|
109
|
-
`cannot extract raw inner calls from ${to}: neither a credit facade nor a supported RWA factory`
|
|
110
|
-
);
|
|
111
|
-
}
|
|
112
99
|
function inferTargetAsset(multicall, balances) {
|
|
113
100
|
for (const op of multicall) {
|
|
114
101
|
if (op.operation === "UpdateQuota" && op.change > 0n) {
|
|
@@ -1,34 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { NATIVE_ADDRESS } from "../../sdk/index.js";
|
|
1
|
+
import { AssetsMap, NATIVE_ADDRESS } from "../../sdk/index.js";
|
|
3
2
|
import { InvalidTransactionValueError } from "./errors.js";
|
|
4
3
|
function unwrapNativeCollateral(collateral, nativeAmount, wethToken) {
|
|
5
4
|
if (nativeAmount === 0n) {
|
|
6
5
|
return collateral;
|
|
7
6
|
}
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
if (!isWeth) {
|
|
13
|
-
result.push(asset);
|
|
14
|
-
continue;
|
|
15
|
-
}
|
|
16
|
-
if (asset.balance < nativeAmount) {
|
|
17
|
-
throw new InvalidTransactionValueError(nativeAmount, asset.balance);
|
|
18
|
-
}
|
|
19
|
-
result.push({ token: NATIVE_ADDRESS, balance: nativeAmount });
|
|
20
|
-
if (asset.balance > nativeAmount) {
|
|
21
|
-
result.push({
|
|
22
|
-
token: asset.token,
|
|
23
|
-
balance: asset.balance - nativeAmount
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
unwrapped = true;
|
|
7
|
+
const balances = new AssetsMap(collateral);
|
|
8
|
+
const wethBalance = balances.get(wethToken) ?? 0n;
|
|
9
|
+
if (wethBalance < nativeAmount) {
|
|
10
|
+
throw new InvalidTransactionValueError(nativeAmount, wethBalance);
|
|
27
11
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
12
|
+
balances.upsert(
|
|
13
|
+
wethToken,
|
|
14
|
+
wethBalance === nativeAmount ? void 0 : wethBalance - nativeAmount
|
|
15
|
+
);
|
|
16
|
+
balances.inc(NATIVE_ADDRESS, nativeAmount);
|
|
17
|
+
return balances.toAssets();
|
|
32
18
|
}
|
|
33
19
|
export {
|
|
34
20
|
unwrapNativeCollateral
|
|
@@ -27,8 +27,7 @@ import {
|
|
|
27
27
|
import {
|
|
28
28
|
getRawPriceUpdates
|
|
29
29
|
} from "../market/index.js";
|
|
30
|
-
import {
|
|
31
|
-
import { AddressMap, AddressSet, hexEq } from "../utils/index.js";
|
|
30
|
+
import { AddressMap, AddressSet, AssetsMap, hexEq } from "../utils/index.js";
|
|
32
31
|
import { simulateWithPriceUpdates } from "../utils/viem/index.js";
|
|
33
32
|
import {
|
|
34
33
|
extractPriceUpdates,
|
|
@@ -1718,10 +1717,10 @@ class CreditAccountsServiceV310 extends SDKConstruct {
|
|
|
1718
1717
|
return calls;
|
|
1719
1718
|
}
|
|
1720
1719
|
#prepareUpdateQuotas(creditFacade, { averageQuota, minQuota }) {
|
|
1721
|
-
const minRecord =
|
|
1720
|
+
const minRecord = new AssetsMap(minQuota);
|
|
1722
1721
|
const calls = averageQuota.map((q) => {
|
|
1723
|
-
const
|
|
1724
|
-
const min =
|
|
1722
|
+
const minBalance = minRecord.get(q.token);
|
|
1723
|
+
const min = minBalance && minBalance > 0n ? minBalance : 0n;
|
|
1725
1724
|
return {
|
|
1726
1725
|
target: creditFacade,
|
|
1727
1726
|
callData: encodeFunctionData({
|
|
@@ -234,6 +234,7 @@ class BaseContract extends Construct {
|
|
|
234
234
|
const functionName = getFunctionSignature(this.abi, calldata);
|
|
235
235
|
return this.wrapParseCallV2(
|
|
236
236
|
functionName,
|
|
237
|
+
calldata,
|
|
237
238
|
this.parseFunctionParamsV2(decoded, strict)
|
|
238
239
|
);
|
|
239
240
|
} catch (e) {
|
|
@@ -247,7 +248,7 @@ class BaseContract extends Construct {
|
|
|
247
248
|
this.logger?.warn(e);
|
|
248
249
|
const selector = calldata.slice(0, 10);
|
|
249
250
|
const data = `0x${calldata.slice(10)}`;
|
|
250
|
-
return this.wrapParseCallV2(`unknown function ${selector}`, {
|
|
251
|
+
return this.wrapParseCallV2(`unknown function ${selector}`, calldata, {
|
|
251
252
|
_data: data
|
|
252
253
|
});
|
|
253
254
|
}
|
|
@@ -260,7 +261,7 @@ class BaseContract extends Construct {
|
|
|
260
261
|
parseFunctionParamsV2(params, _strict) {
|
|
261
262
|
return functionArgsToRecord(this.abi, params.functionName, params.args);
|
|
262
263
|
}
|
|
263
|
-
wrapParseCallV2(functionName, rawArgs) {
|
|
264
|
+
wrapParseCallV2(functionName, calldata, rawArgs) {
|
|
264
265
|
return {
|
|
265
266
|
chainId: this.chainId,
|
|
266
267
|
target: this.address,
|
|
@@ -268,6 +269,7 @@ class BaseContract extends Construct {
|
|
|
268
269
|
label: this.labelAddress(this.address, true),
|
|
269
270
|
version: this.version,
|
|
270
271
|
functionName,
|
|
272
|
+
calldata,
|
|
271
273
|
rawArgs
|
|
272
274
|
};
|
|
273
275
|
}
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
decodeFunctionData
|
|
3
|
-
} from "viem";
|
|
4
1
|
import {
|
|
5
2
|
iCreditFacadeMulticallV310Abi,
|
|
6
3
|
iCreditFacadeV310Abi
|
|
@@ -16,36 +13,6 @@ class CreditFacadeV310BaseContract extends BaseContract {
|
|
|
16
13
|
constructor(options, args) {
|
|
17
14
|
super(options, { ...args, abi });
|
|
18
15
|
}
|
|
19
|
-
/**
|
|
20
|
-
* Decodes entry-point calldata with the facade ABI and returns the untouched
|
|
21
|
-
* inner multicall structs (targets with still-ABI-encoded `callData`).
|
|
22
|
-
*
|
|
23
|
-
* Unlike {@link ChainContractsRegister.parseMultiCallV2}, the inner calls are
|
|
24
|
-
* not decoded, so callers can re-decode them with a specific contract's ABI.
|
|
25
|
-
*
|
|
26
|
-
* @throws When the calldata cannot be decoded or the function has no inner
|
|
27
|
-
* multicall argument.
|
|
28
|
-
*/
|
|
29
|
-
extractRawInnerCalls(calldata) {
|
|
30
|
-
const decoded = decodeFunctionData({ abi: this.abi, data: calldata });
|
|
31
|
-
switch (decoded.functionName) {
|
|
32
|
-
case "openCreditAccount":
|
|
33
|
-
case "closeCreditAccount":
|
|
34
|
-
case "botMulticall":
|
|
35
|
-
case "multicall": {
|
|
36
|
-
const [, calls] = decoded.args;
|
|
37
|
-
return [...calls];
|
|
38
|
-
}
|
|
39
|
-
case "liquidateCreditAccount": {
|
|
40
|
-
const [, , calls] = decoded.args;
|
|
41
|
-
return [...calls];
|
|
42
|
-
}
|
|
43
|
-
default:
|
|
44
|
-
throw new Error(
|
|
45
|
-
`function ${decoded.functionName} on ${this.name} has no inner multicall`
|
|
46
|
-
);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
16
|
parseFunctionParamsV2(params, strict) {
|
|
50
17
|
switch (params.functionName) {
|
|
51
18
|
case "openCreditAccount": {
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
-
decodeAbiParameters
|
|
3
|
-
decodeFunctionData
|
|
2
|
+
decodeAbiParameters
|
|
4
3
|
} from "viem";
|
|
5
4
|
import { iSecuritizeRWAFactoryAbi } from "../../../../abi/rwa/iSecuritizeRWAFactory.js";
|
|
6
5
|
import { BaseContract } from "../../../base/index.js";
|
|
@@ -52,31 +51,6 @@ class SecuritizeRWAFactory extends BaseContract {
|
|
|
52
51
|
operators: [...t.operators]
|
|
53
52
|
}));
|
|
54
53
|
}
|
|
55
|
-
/**
|
|
56
|
-
* Decodes entry-point calldata with the factory ABI and returns the
|
|
57
|
-
* untouched inner multicall structs (targets with still-ABI-encoded
|
|
58
|
-
* `callData`).
|
|
59
|
-
*
|
|
60
|
-
* Unlike {@link ChainContractsRegister.parseMultiCallV2}, the inner calls are
|
|
61
|
-
* not decoded, so callers can re-decode them with a specific contract's ABI.
|
|
62
|
-
*
|
|
63
|
-
* @throws When the calldata cannot be decoded or the function has no inner
|
|
64
|
-
* multicall argument.
|
|
65
|
-
*/
|
|
66
|
-
extractRawInnerCalls(calldata) {
|
|
67
|
-
const decoded = decodeFunctionData({ abi: this.abi, data: calldata });
|
|
68
|
-
switch (decoded.functionName) {
|
|
69
|
-
case "openCreditAccount":
|
|
70
|
-
case "multicall": {
|
|
71
|
-
const [, calls] = decoded.args;
|
|
72
|
-
return [...calls];
|
|
73
|
-
}
|
|
74
|
-
default:
|
|
75
|
-
throw new Error(
|
|
76
|
-
`function ${decoded.functionName} on ${this.name} has no inner multicall`
|
|
77
|
-
);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
54
|
parseFunctionParamsV2(params, strict) {
|
|
81
55
|
switch (params.functionName) {
|
|
82
56
|
case "openCreditAccount": {
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
BaseContract
|
|
3
|
+
} from "../base/index.js";
|
|
2
4
|
import { PERCENTAGE_FACTOR } from "../constants/math.js";
|
|
3
|
-
import {
|
|
5
|
+
import { AddressSet, AssetsMap, formatBN, isDust } from "../utils/index.js";
|
|
4
6
|
import { limitLeftover } from "./helpers.js";
|
|
5
7
|
class AbstractRouterContract extends BaseContract {
|
|
6
8
|
/**
|
|
@@ -18,15 +20,15 @@ class AbstractRouterContract extends BaseContract {
|
|
|
18
20
|
options.debtOnly
|
|
19
21
|
);
|
|
20
22
|
const { leftoverBalances, expectedBalances, tokensToClaim } = b;
|
|
21
|
-
const expected = new
|
|
22
|
-
const leftover = new
|
|
23
|
+
const expected = new AssetsMap();
|
|
24
|
+
const leftover = new AssetsMap();
|
|
23
25
|
for (const token of cm.collateralTokens) {
|
|
24
|
-
const actual = expectedBalances.get(token)
|
|
25
|
-
expected.upsert(token,
|
|
26
|
-
leftover.upsert(
|
|
26
|
+
const actual = expectedBalances.get(token) || 0n;
|
|
27
|
+
expected.upsert(token, actual > 10n ? actual : 0n);
|
|
28
|
+
leftover.upsert(
|
|
27
29
|
token,
|
|
28
|
-
|
|
29
|
-
|
|
30
|
+
limitLeftover(leftoverBalances.get(token) || 1n, token) ?? 1n
|
|
31
|
+
);
|
|
30
32
|
}
|
|
31
33
|
return {
|
|
32
34
|
expectedBalances: expected,
|
|
@@ -35,8 +37,8 @@ class AbstractRouterContract extends BaseContract {
|
|
|
35
37
|
};
|
|
36
38
|
}
|
|
37
39
|
getDefaultExpectedAndLeftover(ca, keepAssets, debtOnly) {
|
|
38
|
-
const expectedBalances = new
|
|
39
|
-
const leftoverBalances = new
|
|
40
|
+
const expectedBalances = new AssetsMap();
|
|
41
|
+
const leftoverBalances = new AssetsMap();
|
|
40
42
|
const keepAssetsSet = new AddressSet(keepAssets);
|
|
41
43
|
if (debtOnly) {
|
|
42
44
|
const result = this.getLeftoversAfterBuyingDebt(ca, keepAssetsSet);
|
|
@@ -48,23 +50,23 @@ class AbstractRouterContract extends BaseContract {
|
|
|
48
50
|
}
|
|
49
51
|
for (const { token, balance, mask } of ca.tokens) {
|
|
50
52
|
const isEnabled = (mask & ca.enabledTokensMask) !== 0n;
|
|
51
|
-
expectedBalances.upsert(token,
|
|
53
|
+
expectedBalances.upsert(token, balance);
|
|
52
54
|
if (keepAssetsSet.has(token) || !isEnabled || isDust({
|
|
53
55
|
sdk: this.sdk,
|
|
54
56
|
token,
|
|
55
57
|
balance,
|
|
56
58
|
creditManager: ca.creditManager
|
|
57
59
|
})) {
|
|
58
|
-
leftoverBalances.upsert(
|
|
60
|
+
leftoverBalances.upsert(
|
|
59
61
|
token,
|
|
60
|
-
|
|
61
|
-
|
|
62
|
+
limitLeftover(balance, token) ?? balance
|
|
63
|
+
);
|
|
62
64
|
}
|
|
63
65
|
}
|
|
64
66
|
return {
|
|
65
67
|
expectedBalances,
|
|
66
68
|
leftoverBalances,
|
|
67
|
-
tokensToClaim: new
|
|
69
|
+
tokensToClaim: new AssetsMap()
|
|
68
70
|
};
|
|
69
71
|
}
|
|
70
72
|
/**
|
|
@@ -77,16 +79,13 @@ class AbstractRouterContract extends BaseContract {
|
|
|
77
79
|
const { priceOracle } = this.sdk.marketRegister.findByCreditManager(
|
|
78
80
|
ca.creditManager
|
|
79
81
|
);
|
|
80
|
-
const expectedBalances = new
|
|
81
|
-
const leftoverBalances = new
|
|
82
|
+
const expectedBalances = new AssetsMap();
|
|
83
|
+
const leftoverBalances = new AssetsMap();
|
|
82
84
|
const usdBalances = [];
|
|
83
85
|
for (const { token, balance, mask } of ca.tokens) {
|
|
84
86
|
const isEnabled = (mask & ca.enabledTokensMask) !== 0n;
|
|
85
|
-
expectedBalances.upsert(token,
|
|
86
|
-
leftoverBalances.upsert(token,
|
|
87
|
-
token,
|
|
88
|
-
balance: limitLeftover(balance, token) ?? balance
|
|
89
|
-
});
|
|
87
|
+
expectedBalances.upsert(token, balance);
|
|
88
|
+
leftoverBalances.upsert(token, limitLeftover(balance, token) ?? balance);
|
|
90
89
|
if (isEnabled && !keepAssets.has(token)) {
|
|
91
90
|
usdBalances.push({
|
|
92
91
|
token,
|
|
@@ -116,15 +115,12 @@ class AbstractRouterContract extends BaseContract {
|
|
|
116
115
|
if (tokenAmount === 0n) {
|
|
117
116
|
return void 0;
|
|
118
117
|
}
|
|
119
|
-
let leftoverBalance = leftoverBalances.get(highestToken.token)
|
|
118
|
+
let leftoverBalance = leftoverBalances.get(highestToken.token) ?? 0n;
|
|
120
119
|
leftoverBalance -= tokenAmount;
|
|
121
120
|
if (leftoverBalance < 0n) {
|
|
122
121
|
return void 0;
|
|
123
122
|
}
|
|
124
|
-
leftoverBalances.upsert(highestToken.token,
|
|
125
|
-
token: highestToken.token,
|
|
126
|
-
balance: leftoverBalance
|
|
127
|
-
});
|
|
123
|
+
leftoverBalances.upsert(highestToken.token, leftoverBalance);
|
|
128
124
|
const tokenAmountStr = this.sdk.tokensMeta.formatBN(
|
|
129
125
|
highestToken.token,
|
|
130
126
|
tokenAmount,
|
|
@@ -137,7 +133,7 @@ class AbstractRouterContract extends BaseContract {
|
|
|
137
133
|
return {
|
|
138
134
|
expectedBalances,
|
|
139
135
|
leftoverBalances,
|
|
140
|
-
tokensToClaim: new
|
|
136
|
+
tokensToClaim: new AssetsMap()
|
|
141
137
|
};
|
|
142
138
|
}
|
|
143
139
|
safeConvertToUSD(priceOracle, token, balance) {
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { getAddress } from "viem";
|
|
2
2
|
import { gearboxRouterAbi } from "../../abi/router/gearboxRouter.js";
|
|
3
|
-
import { AddressMap } from "../utils/AddressMap.js";
|
|
4
3
|
import { formatBN } from "../utils/formatter.js";
|
|
5
|
-
import { isDust } from "../utils/index.js";
|
|
4
|
+
import { AddressMap, AssetsMap, isDust } from "../utils/index.js";
|
|
6
5
|
import { AbstractRouterContract } from "./AbstractRouterContract.js";
|
|
7
|
-
import {
|
|
6
|
+
import { limitLeftover } from "./helpers.js";
|
|
8
7
|
const abi = gearboxRouterAbi;
|
|
9
8
|
class RouterV310Contract extends AbstractRouterContract {
|
|
10
9
|
#numSplits = new AddressMap();
|
|
@@ -71,8 +70,8 @@ class RouterV310Contract extends AbstractRouterContract {
|
|
|
71
70
|
slippage
|
|
72
71
|
} = props;
|
|
73
72
|
const [expectedMap, leftoverMap] = [
|
|
74
|
-
|
|
75
|
-
|
|
73
|
+
new AssetsMap(expectedBalances),
|
|
74
|
+
new AssetsMap(leftoverBalances)
|
|
76
75
|
];
|
|
77
76
|
const getNumSplits = this.#numSplitsGetter(cm, expectedBalances);
|
|
78
77
|
const tData = cm.collateralTokens.map(
|
|
@@ -157,22 +156,22 @@ class RouterV310Contract extends AbstractRouterContract {
|
|
|
157
156
|
} = props;
|
|
158
157
|
const { expectedBalances, leftoverBalances, tokensToClaim } = this.getExpectedAndLeftover(ca, cm, {
|
|
159
158
|
balances: balances ? {
|
|
160
|
-
expectedBalances:
|
|
161
|
-
leftoverBalances:
|
|
162
|
-
tokensToClaim:
|
|
159
|
+
expectedBalances: new AssetsMap(balances.expectedBalances),
|
|
160
|
+
leftoverBalances: new AssetsMap(balances.leftoverBalances),
|
|
161
|
+
tokensToClaim: new AssetsMap(balances.tokensToClaim || [])
|
|
163
162
|
} : void 0,
|
|
164
163
|
keepAssets: balances ? void 0 : keepAssets,
|
|
165
164
|
debtOnly
|
|
166
165
|
});
|
|
167
|
-
const getNumSplits = this.#numSplitsGetter(cm, expectedBalances.
|
|
166
|
+
const getNumSplits = this.#numSplitsGetter(cm, expectedBalances.toAssets());
|
|
168
167
|
const tData = [];
|
|
169
168
|
for (const token of cm.collateralTokens) {
|
|
170
169
|
tData.push({
|
|
171
170
|
token,
|
|
172
|
-
balance: expectedBalances.get(token)
|
|
173
|
-
leftoverBalance: limitLeftover(leftoverBalances.get(token)
|
|
171
|
+
balance: expectedBalances.get(token) || 0n,
|
|
172
|
+
leftoverBalance: limitLeftover(leftoverBalances.get(token), token) ?? 0n,
|
|
174
173
|
numSplits: getNumSplits(token),
|
|
175
|
-
claimRewards:
|
|
174
|
+
claimRewards: tokensToClaim.has(token)
|
|
176
175
|
});
|
|
177
176
|
}
|
|
178
177
|
this.logger?.debug(
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
import { AddressMap } from "../utils/index.js";
|
|
2
|
-
function balancesMap(assets) {
|
|
3
|
-
return new AddressMap(assets.map(({ token, balance }) => [token, balance]));
|
|
4
|
-
}
|
|
5
2
|
function assetsMap(assets) {
|
|
6
3
|
return new AddressMap(assets.map((a) => [a.token, a]));
|
|
7
4
|
}
|
|
@@ -16,6 +13,5 @@ function limitLeftover(balance, token) {
|
|
|
16
13
|
}
|
|
17
14
|
export {
|
|
18
15
|
assetsMap,
|
|
19
|
-
balancesMap,
|
|
20
16
|
limitLeftover
|
|
21
17
|
};
|
|
@@ -113,6 +113,12 @@ class AddressMap {
|
|
|
113
113
|
keys() {
|
|
114
114
|
return Array.from(this.#map.keys());
|
|
115
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* Returns an unfrozen shallow copy of the map.
|
|
118
|
+
**/
|
|
119
|
+
clone() {
|
|
120
|
+
return new AddressMap(this.entries(), this.name);
|
|
121
|
+
}
|
|
116
122
|
/**
|
|
117
123
|
* Converts the map to a plain `Record<Address, T>` object.
|
|
118
124
|
**/
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { AddressMap } from "./AddressMap.js";
|
|
2
|
+
class AssetsMap extends AddressMap {
|
|
3
|
+
/**
|
|
4
|
+
* @param entries - Optional initial entries as `[address, balance]` tuples or {@link Asset} objects.
|
|
5
|
+
* @param name - Optional label used in error messages when a lookup fails.
|
|
6
|
+
*/
|
|
7
|
+
constructor(entries, name) {
|
|
8
|
+
super(
|
|
9
|
+
entries?.map((e) => Array.isArray(e) ? e : [e.token, e.balance]),
|
|
10
|
+
name
|
|
11
|
+
);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Adds `amount` to the token balance, treating a missing key as `0n`.
|
|
15
|
+
*/
|
|
16
|
+
inc(address, amount) {
|
|
17
|
+
this.upsert(address, (this.get(address) ?? 0n) + amount);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Subtracts `amount` from the token balance, treating a missing key as `0n`.
|
|
21
|
+
*/
|
|
22
|
+
dec(address, amount) {
|
|
23
|
+
this.inc(address, -amount);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Converts the map to an array of {@link Asset} objects.
|
|
27
|
+
*/
|
|
28
|
+
toAssets() {
|
|
29
|
+
return this.entries().map(([token, balance]) => ({ token, balance }));
|
|
30
|
+
}
|
|
31
|
+
clone() {
|
|
32
|
+
return new AssetsMap(this.entries(), this.name);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export {
|
|
36
|
+
AssetsMap
|
|
37
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Address } from "viem";
|
|
2
|
-
import type { Asset } from "../../../../sdk/
|
|
2
|
+
import type { Asset } from "../../../../sdk/index.js";
|
|
3
3
|
import type { TokenSlice } from "../strategy-info/types.js";
|
|
4
4
|
export interface GetWalletBalancesAllowedOnCMProps {
|
|
5
5
|
walletBalances: Record<Address, bigint> | undefined;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Address } from "viem";
|
|
2
|
-
import type { Asset } from "../../../../sdk/
|
|
2
|
+
import type { Asset } from "../../../../sdk/index.js";
|
|
3
3
|
import type { QuotaSlice, TokenSlice } from "./types.js";
|
|
4
4
|
export interface TotalAPY {
|
|
5
5
|
overallAPY: number | undefined | null;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Address } from "viem";
|
|
2
|
-
import type { Asset } from "../../../../sdk/
|
|
2
|
+
import type { Asset } from "../../../../sdk/index.js";
|
|
3
3
|
import type { LocalDebtReward, LocalPointsInfo, LocalPointsReward } from "../types/points-slices.js";
|
|
4
4
|
import type { TokenSlice } from "./types.js";
|
|
5
5
|
export interface PointsData {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Address } from "viem";
|
|
2
|
-
import type { Asset } from "../../../../sdk/
|
|
2
|
+
import type { Asset } from "../../../../sdk/index.js";
|
|
3
3
|
import type { TokenSlice } from "../strategy-info/types.js";
|
|
4
4
|
export declare function addAmountInTarget<T extends Asset>(asset: T, tokensList: Record<Address, TokenSlice>, prices: Record<Address, bigint>, toPrice: bigint, toDecimals: number): T & {
|
|
5
5
|
amountInTarget: bigint;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Address } from "viem";
|
|
2
|
-
import type { Asset } from "../../../../sdk/
|
|
2
|
+
import type { Asset } from "../../../../sdk/index.js";
|
|
3
3
|
import type { TokenSlice } from "../strategy-info/types.js";
|
|
4
4
|
export interface AddAmountInTargetProps<T> {
|
|
5
5
|
assets: Array<T>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Asset } from "../../../../sdk/
|
|
1
|
+
import type { Asset } from "../../../../sdk/index.js";
|
|
2
2
|
import type { calculateEarnings } from "../../apy/calculate-earnings.js";
|
|
3
3
|
import type { Strategy } from "../../strategies/types/strategy.js";
|
|
4
4
|
import type { calculateTotalAPY } from "../strategy-info/calculate-total-apy.js";
|