@gearbox-protocol/sdk 16.3.2-next.1 → 16.4.0-next.1
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/onchain/preview/preview/previewOpenStrategyPosition.js +10 -16
- package/dist/cjs/onchain/preview/preview/previewOperation.js +19 -11
- package/dist/cjs/onchain/preview/preview/replayMulticall.js +4 -3
- package/dist/cjs/onchain/validation/bundles/checkCollateralFunding.js +3 -3
- package/dist/cjs/onchain/validation/bundles/checkCreditOperation.js +2 -2
- package/dist/cjs/onchain/validation/bundles/checkRWAOpening.js +1 -2
- package/dist/cjs/onchain/validation/checkOperation.js +0 -1
- package/dist/esm/dev/AccountOpener.js +1 -1
- package/dist/esm/dev/withdrawalUtils.js +1 -1
- package/dist/esm/history/trace/extractTransfers.js +1 -1
- package/dist/esm/onchain/accounts/CreditAccountsServiceV310.js +2 -2
- package/dist/esm/onchain/accounts/liquidations/LiquidationsService.js +1 -1
- package/dist/esm/onchain/accounts/withdrawal-compressor/RedemptionLoggerV310Contract.js +1 -1
- package/dist/esm/onchain/accounts/withdrawal-compressor/WithdrawalCompressorV310Contract.js +1 -1
- package/dist/esm/onchain/accounts/withdrawal-compressor/WithdrawalCompressorV311Contract.js +1 -1
- package/dist/esm/onchain/accounts/withdrawal-compressor/WithdrawalCompressorV313Contract.js +1 -1
- package/dist/esm/onchain/base/TokensMeta.js +3 -3
- package/dist/esm/onchain/core/createAddressProvider.js +1 -1
- package/dist/esm/onchain/market/adapters/contracts/AccountMigratorAdapterContract.js +1 -1
- package/dist/esm/onchain/market/adapters/contracts/ERC4626AdapterContract.js +1 -1
- package/dist/esm/onchain/market/credit/CreditFacadeV310BaseContract.js +1 -1
- package/dist/esm/onchain/market/pool/PoolV310Contract.js +1 -1
- package/dist/esm/onchain/market/rwa/createDegenNFT.js +1 -1
- package/dist/esm/onchain/market/zapper/IETHZapperContract.js +1 -1
- package/dist/esm/onchain/market/zapper/ZapperContract.js +1 -1
- package/dist/esm/onchain/preview/preview/previewOpenStrategyPosition.js +11 -17
- package/dist/esm/onchain/preview/preview/previewOperation.js +19 -11
- package/dist/esm/onchain/preview/preview/previewPoolPositionOperation.js +2 -2
- package/dist/esm/onchain/preview/preview/replayMulticall.js +4 -3
- package/dist/esm/onchain/utils/viem/simulateWithPriceUpdates.js +1 -1
- package/dist/esm/onchain/validation/bundles/checkCollateralFunding.js +3 -3
- package/dist/esm/onchain/validation/bundles/checkCreditOperation.js +2 -2
- package/dist/esm/onchain/validation/bundles/checkRWAOpening.js +1 -2
- package/dist/esm/onchain/validation/checkOperation.js +0 -1
- package/dist/types/model/index.d.ts +2 -2
- package/dist/types/model/previews.d.ts +11 -20
- package/dist/types/onchain/preview/preview/previewOpenStrategyPosition.d.ts +5 -3
- package/dist/types/onchain/preview/preview/replayMulticall.d.ts +8 -7
- package/package.json +1 -1
|
@@ -3,25 +3,22 @@ const require_onchain_constants_address_provider = require("../../constants/addr
|
|
|
3
3
|
const require_model_previews = require("../../../model/previews.js");
|
|
4
4
|
const require_model_result = require("../../../model/result.js");
|
|
5
5
|
require("../../../model/index.js");
|
|
6
|
-
const require_onchain_preview_preview_CreditAccountState = require("./CreditAccountState.js");
|
|
7
6
|
const require_onchain_preview_preview_unwrapNativeCollateral = require("./unwrapNativeCollateral.js");
|
|
8
|
-
const require_onchain_preview_preview_replayInnerOperations = require("./replayInnerOperations.js");
|
|
9
7
|
//#region src/onchain/preview/preview/previewOpenStrategyPosition.ts
|
|
10
|
-
function previewOpenStrategyPosition(sdk, input, operation) {
|
|
8
|
+
function previewOpenStrategyPosition(sdk, input, operation, replay) {
|
|
11
9
|
const { value = 0n } = input;
|
|
12
10
|
const market = sdk.marketRegister.findByCreditManager(operation.creditManager);
|
|
13
11
|
const oracle = market.priceOracle;
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
if (replayError) return require_model_result.sdkErr(replayError);
|
|
17
|
-
const account = state.account;
|
|
12
|
+
const { before, after } = replay;
|
|
13
|
+
const account = after.account;
|
|
18
14
|
let warning;
|
|
19
|
-
const
|
|
15
|
+
const price = (token, balance) => {
|
|
20
16
|
const priced = oracle.safeConvert(token, market.underlying, balance);
|
|
21
17
|
warning ??= priced.error;
|
|
22
18
|
return priced.value;
|
|
23
|
-
}
|
|
24
|
-
const
|
|
19
|
+
};
|
|
20
|
+
const netValue = before.balances.sum(price) + after.collateralAdded.sum(price);
|
|
21
|
+
const unwrapped = require_onchain_preview_preview_unwrapNativeCollateral.unwrapNativeCollateral(after.collateralAdded.toAssets(), value, sdk.addressProvider.getAddress(require_onchain_constants_address_provider.AP_WETH_TOKEN, 0));
|
|
25
22
|
if (!unwrapped.ok) return unwrapped;
|
|
26
23
|
const collateral = unwrapped.data;
|
|
27
24
|
const snap = account.toSnapshot(netValue + account.totalDebt);
|
|
@@ -32,14 +29,11 @@ function previewOpenStrategyPosition(sdk, input, operation) {
|
|
|
32
29
|
collateralAdded: collateral.map((a) => oracle.toTokenAmount(a.token, a.balance)),
|
|
33
30
|
warning
|
|
34
31
|
};
|
|
35
|
-
if (operation.operation === "RWAOpenCreditAccount") return require_model_result.sdkOk({
|
|
36
|
-
...projection,
|
|
37
|
-
operation: "RWAOpenCreditAccount",
|
|
38
|
-
rwaArgs: operation.args
|
|
39
|
-
});
|
|
40
32
|
return require_model_result.sdkOk({
|
|
41
33
|
...projection,
|
|
42
|
-
operation: "OpenCreditAccount"
|
|
34
|
+
operation: "OpenCreditAccount",
|
|
35
|
+
...operation.operation === "MultiCall" || operation.operation === "BotMulticall" || operation.operation === "RWAMulticall" ? { creditAccount: operation.creditAccount } : {},
|
|
36
|
+
..."args" in operation ? { rwaArgs: operation.args } : {}
|
|
43
37
|
});
|
|
44
38
|
}
|
|
45
39
|
/**
|
|
@@ -34,9 +34,13 @@ async function previewOperation(sdk, input, options, creditAccount) {
|
|
|
34
34
|
if (!parsed.ok) return parsed;
|
|
35
35
|
const operation = parsed.data;
|
|
36
36
|
if (require_onchain_preview_parse_types.isPoolOperation(operation)) return require_onchain_preview_preview_previewPoolPositionOperation.previewPoolPositionOperation(sdk, operation, options);
|
|
37
|
-
if (operation.operation === "OpenCreditAccount" || operation.operation === "RWAOpenCreditAccount")
|
|
37
|
+
if (operation.operation === "OpenCreditAccount" || operation.operation === "RWAOpenCreditAccount") {
|
|
38
|
+
const replayed = require_onchain_preview_preview_replayMulticall.replayMulticall(sdk, operation);
|
|
39
|
+
if (!replayed.ok) return replayed;
|
|
40
|
+
return require_onchain_preview_preview_previewOpenStrategyPosition.previewOpenStrategyPosition(sdk, input, operation, replayed.data);
|
|
41
|
+
}
|
|
38
42
|
if (operation.operation === "CloseCreditAccount") {
|
|
39
|
-
const resolved = await resolveCreditAccount(sdk, operation, options, creditAccount);
|
|
43
|
+
const resolved = await resolveCreditAccount(sdk, operation.creditAccount, options, creditAccount);
|
|
40
44
|
if (!resolved.ok) return resolved;
|
|
41
45
|
const replayed = require_onchain_preview_preview_replayMulticall.replayMulticall(sdk, operation, resolved.data);
|
|
42
46
|
if (!replayed.ok) return replayed;
|
|
@@ -48,7 +52,7 @@ async function previewOperation(sdk, input, options, creditAccount) {
|
|
|
48
52
|
return preview;
|
|
49
53
|
}
|
|
50
54
|
if (operation.operation === "MultiCall" || operation.operation === "BotMulticall" || operation.operation === "RWAMulticall") {
|
|
51
|
-
const resolved = await resolveCreditAccount(sdk, operation, options, creditAccount);
|
|
55
|
+
const resolved = await resolveCreditAccount(sdk, operation.creditAccount, options, creditAccount);
|
|
52
56
|
if (!resolved.ok) return resolved;
|
|
53
57
|
const replayed = require_onchain_preview_preview_replayMulticall.replayMulticall(sdk, operation, resolved.data);
|
|
54
58
|
if (!replayed.ok) return replayed;
|
|
@@ -65,20 +69,24 @@ async function previewOperation(sdk, input, options, creditAccount) {
|
|
|
65
69
|
* injected state when present, otherwise fetches it from the credit account
|
|
66
70
|
* compressor.
|
|
67
71
|
*/
|
|
68
|
-
async function resolveCreditAccount(sdk,
|
|
69
|
-
let resolved =
|
|
70
|
-
if (!resolved) resolved = await sdk.accounts.getCreditAccountData(
|
|
71
|
-
if (!resolved) return require_model_result.sdkErr(require_model_errors_prepare_errors.creditAccountNotFound(
|
|
72
|
+
async function resolveCreditAccount(sdk, address, options, data) {
|
|
73
|
+
let resolved = data;
|
|
74
|
+
if (!resolved) resolved = await sdk.accounts.getCreditAccountData(address, options?.blockNumber);
|
|
75
|
+
if (!resolved) return require_model_result.sdkErr(require_model_errors_prepare_errors.creditAccountNotFound(address));
|
|
72
76
|
return require_model_result.sdkOk(resolved);
|
|
73
77
|
}
|
|
74
78
|
/**
|
|
75
79
|
* Previews a plain/bot/RWA multicall: classifies the instant preview
|
|
76
|
-
* (zero-debt closure/repay
|
|
77
|
-
* delayed withdrawal, wraps the instant
|
|
78
|
-
* `DelayedCreditAccountOperation` together with the
|
|
79
|
-
* the state after the withdrawal is claimed.
|
|
80
|
+
* (reopening a zero-debt account, zero-debt closure/repay, or adjustment)
|
|
81
|
+
* and, when the multicall requests a delayed withdrawal, wraps the instant
|
|
82
|
+
* preview into a `DelayedCreditAccountOperation` together with the
|
|
83
|
+
* best-effort preview of the state after the withdrawal is claimed.
|
|
84
|
+
*
|
|
85
|
+
* A reopening is reported as `OpenCreditAccount` and never as a delayed
|
|
86
|
+
* withdrawal: an opening requests no redemption.
|
|
80
87
|
*/
|
|
81
88
|
async function previewMulticallOperation(sdk, input, operation, replay, blockNumber) {
|
|
89
|
+
if (replay.before.totalDebt === 0n && replay.before.quotas.toAssets(0n).length === 0 && replay.after.account.totalDebt > 0n) return require_onchain_preview_preview_previewOpenStrategyPosition.previewOpenStrategyPosition(sdk, input, operation, replay);
|
|
82
90
|
let instantPreview;
|
|
83
91
|
if (require_onchain_preview_preview_detectCloseOrRepay.isCloseOrRepay(operation.multicall)) {
|
|
84
92
|
const instant = require_onchain_preview_preview_previewExitOrRepayStrategyPosition.previewExitOrRepayStrategyPosition(sdk, input, operation, false, replay);
|
|
@@ -5,11 +5,12 @@ const require_onchain_preview_preview_CreditAccountState = require("./CreditAcco
|
|
|
5
5
|
const require_onchain_preview_preview_replayInnerOperations = require("./replayInnerOperations.js");
|
|
6
6
|
//#region src/onchain/preview/preview/replayMulticall.ts
|
|
7
7
|
/**
|
|
8
|
-
* Replays the operation's multicall
|
|
9
|
-
*
|
|
8
|
+
* Replays the operation's multicall via {@link replayInnerOperations}.
|
|
9
|
+
* When `creditAccount` is omitted, the seed is
|
|
10
|
+
* {@link CreditAccountState.beforeOpen} (a fresh opening).
|
|
10
11
|
*/
|
|
11
12
|
function replayMulticall(sdk, operation, creditAccount) {
|
|
12
|
-
const before = require_onchain_preview_preview_CreditAccountState.CreditAccountState.fromCreditAccountData(creditAccount);
|
|
13
|
+
const before = creditAccount ? require_onchain_preview_preview_CreditAccountState.CreditAccountState.fromCreditAccountData(creditAccount) : require_onchain_preview_preview_CreditAccountState.CreditAccountState.beforeOpen(operation.creditManager, sdk.marketRegister.findByCreditManager(operation.creditManager).underlying);
|
|
13
14
|
const after = require_onchain_preview_preview_replayInnerOperations.makeReplayState(before.clone());
|
|
14
15
|
const error = require_onchain_preview_preview_replayInnerOperations.replayInnerOperations(sdk, operation.multicall, after);
|
|
15
16
|
if (error) return require_model_result.sdkErr(error);
|
|
@@ -23,13 +23,13 @@ async function checkCollateralFunding(input) {
|
|
|
23
23
|
if (held.size === 0) return [];
|
|
24
24
|
let spender;
|
|
25
25
|
try {
|
|
26
|
-
if (preview.
|
|
26
|
+
if (preview.creditAccount) spender = await sdk.accounts.getApprovalAddress({
|
|
27
27
|
creditManager: preview.creditManager,
|
|
28
|
-
|
|
28
|
+
creditAccount: preview.creditAccount
|
|
29
29
|
});
|
|
30
30
|
else spender = await sdk.accounts.getApprovalAddress({
|
|
31
31
|
creditManager: preview.creditManager,
|
|
32
|
-
|
|
32
|
+
borrower: sender
|
|
33
33
|
});
|
|
34
34
|
} catch (cause) {
|
|
35
35
|
return [require_model_errors_prepare_errors.unexpectedFailure(cause, "resolve the approval address")];
|
|
@@ -26,7 +26,7 @@ async function checkCreditOperation(args) {
|
|
|
26
26
|
const suite = sdk.marketRegister.findCreditManager(preview.creditManager);
|
|
27
27
|
const market = suite.market;
|
|
28
28
|
const underlying = require_onchain_validation_helpers_token.toToken(sdk, market.pool.underlying);
|
|
29
|
-
const isOpening = preview.operation === "OpenCreditAccount"
|
|
29
|
+
const isOpening = preview.operation === "OpenCreditAccount";
|
|
30
30
|
const protocol = [
|
|
31
31
|
...require_onchain_validation_bundles_checkMarket.checkMarket(suite),
|
|
32
32
|
...require_onchain_validation_checks_checkDebtLimits.checkDebtLimits({
|
|
@@ -52,7 +52,7 @@ async function checkCreditOperation(args) {
|
|
|
52
52
|
preview,
|
|
53
53
|
sender,
|
|
54
54
|
blockNumber
|
|
55
|
-
}),
|
|
55
|
+
}), isOpening ? require_onchain_validation_bundles_checkRWAOpening.checkRWAOpening({
|
|
56
56
|
sdk,
|
|
57
57
|
preview,
|
|
58
58
|
sender
|
|
@@ -12,13 +12,12 @@ async function checkRWAOpening(input) {
|
|
|
12
12
|
if (!nft) return [];
|
|
13
13
|
const gated = new require_onchain_utils_AddressSet.AddressSet(await nft.getTokens());
|
|
14
14
|
const candidates = new require_onchain_utils_AddressSet.AddressSet([...preview.collateralAdded.map((a) => a.token.address), ...preview.quotas.map((q) => q.token.address)]);
|
|
15
|
-
const providedArgs = preview.operation === "RWAOpenCreditAccount" ? preview.rwaArgs : void 0;
|
|
16
15
|
return (await Promise.all([...candidates].filter((token) => gated.has(token)).map((token) => require_onchain_validation_bundles_checkRWAOpenRequirements.checkRWAOpenRequirements({
|
|
17
16
|
sdk,
|
|
18
17
|
wallet: sender,
|
|
19
18
|
creditManager: preview.creditManager,
|
|
20
19
|
token,
|
|
21
|
-
providedArgs
|
|
20
|
+
providedArgs: preview.rwaArgs
|
|
22
21
|
})))).flat();
|
|
23
22
|
}
|
|
24
23
|
//#endregion
|
|
@@ -43,7 +43,6 @@ async function checkOperation(input, options = {}) {
|
|
|
43
43
|
sender
|
|
44
44
|
}, options);
|
|
45
45
|
case "OpenCreditAccount":
|
|
46
|
-
case "RWAOpenCreditAccount":
|
|
47
46
|
case "AdjustCreditAccount": return require_onchain_validation_bundles_checkCreditOperation.checkCreditOperation({
|
|
48
47
|
sdk,
|
|
49
48
|
preview,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { iCreditFacadeV310Abi } from "../abi/310/generated.js";
|
|
2
1
|
import { ierc20Abi } from "../abi/iERC20.js";
|
|
2
|
+
import { iCreditFacadeV310Abi } from "../abi/310/generated.js";
|
|
3
3
|
import { AddressMap } from "../onchain/utils/AddressMap.js";
|
|
4
4
|
import { AddressSet } from "../onchain/utils/AddressSet.js";
|
|
5
5
|
import { AssetsMap } from "../onchain/utils/AssetsMap.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { iWithdrawalCompressorV313Abi } from "../abi/IWithdrawalCompressorV313.js";
|
|
1
2
|
import { getNetworkType } from "../onchain/chain/chains.js";
|
|
2
3
|
import { getWithdrawalCompressorAddress } from "../onchain/accounts/withdrawal-compressor/addresses.js";
|
|
3
|
-
import { iWithdrawalCompressorV313Abi } from "../abi/IWithdrawalCompressorV313.js";
|
|
4
4
|
import "../onchain/index.js";
|
|
5
5
|
import { iMidasDataFeedAbi, iMidasRedemptionVaultAbi, midasGatewayAbi, midasRedeemerAbi, midasRedemptionVaultPhantomTokenAbi, securitizeRedeemerAbi, securitizeRedemptionGatewayAbi, securitizeRedemptionPhantomTokenAbi } from "./withdrawalAbi.js";
|
|
6
6
|
import { erc20Abi, hexToString, parseAbi, parseEther } from "viem";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { iCreditFacadeV310Abi } from "../../abi/310/generated.js";
|
|
2
1
|
import { ierc20Abi } from "../../abi/iERC20.js";
|
|
2
|
+
import { iCreditFacadeV310Abi } from "../../abi/310/generated.js";
|
|
3
3
|
import { AddressMap } from "../../onchain/utils/AddressMap.js";
|
|
4
4
|
import "../../onchain/index.js";
|
|
5
5
|
import { UnexpectedFacadeEventOrderError } from "./errors.js";
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { iBaseRewardPoolAbi } from "../../abi/iBaseRewardPool.js";
|
|
2
|
+
import { ierc4626AdapterAbi } from "../../abi/ierc4626Adapter.js";
|
|
1
3
|
import { AP_REWARDS_COMPRESSOR } from "../constants/address-provider.js";
|
|
2
4
|
import { ADDRESS_0X0 } from "../constants/addresses.js";
|
|
3
5
|
import { MAX_UINT256 } from "../constants/math.js";
|
|
@@ -8,8 +10,6 @@ import "../base/index.js";
|
|
|
8
10
|
import { AccountBotsService } from "./bots/AccountBotsService.js";
|
|
9
11
|
import "./bots/index.js";
|
|
10
12
|
import { rewardsCompressorAbi } from "../../abi/compressors/rewardsCompressor.js";
|
|
11
|
-
import { iBaseRewardPoolAbi } from "../../abi/iBaseRewardPool.js";
|
|
12
|
-
import { ierc4626AdapterAbi } from "../../abi/ierc4626Adapter.js";
|
|
13
13
|
import { expectedBalanceDeltas } from "../market/credit/expectedBalanceDeltas.js";
|
|
14
14
|
import "../market/index.js";
|
|
15
15
|
import { CreditAccountCompressor } from "./credit-account-compressor/CreditAccountCompressor.js";
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { iLiquidationCompressorV313Abi } from "../../../abi/ILiquidationCompressorV313.js";
|
|
1
2
|
import { AddressSet } from "../../utils/AddressSet.js";
|
|
2
3
|
import { bytes32ToString } from "../../utils/bytes32ToString.js";
|
|
3
4
|
import { ADDRESS_0X0 } from "../../constants/addresses.js";
|
|
@@ -19,7 +20,6 @@ import { SecuritizeLiquidatorContract } from "../../market/rwa/securitize/Securi
|
|
|
19
20
|
import "../../market/rwa/securitize/index.js";
|
|
20
21
|
import "../../market/index.js";
|
|
21
22
|
import { LIQUIDATION_APPROVAL_BUFFER, LIQUIDATION_COMPRESSOR_V313_ADDRESS } from "./constants.js";
|
|
22
|
-
import { iLiquidationCompressorV313Abi } from "../../../abi/ILiquidationCompressorV313.js";
|
|
23
23
|
import { skipLiquidatableAccount } from "./skipLiquidatableAccount.js";
|
|
24
24
|
//#region src/onchain/accounts/liquidations/LiquidationsService.ts
|
|
25
25
|
/**
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import { iRedemptionLoggerV310Abi } from "../../../abi/iRedemptionLoggerV310.js";
|
|
1
2
|
import { BaseContract } from "../../base/BaseContract.js";
|
|
2
3
|
import "../../base/index.js";
|
|
3
4
|
import { sdkErr, sdkOk } from "../../../model/result.js";
|
|
4
5
|
import "../../../model/index.js";
|
|
5
6
|
import { decodeDelayedIntent } from "./intent-codec.js";
|
|
6
|
-
import { iRedemptionLoggerV310Abi } from "../../../abi/iRedemptionLoggerV310.js";
|
|
7
7
|
//#region src/onchain/accounts/withdrawal-compressor/RedemptionLoggerV310Contract.ts
|
|
8
8
|
const abi = iRedemptionLoggerV310Abi;
|
|
9
9
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AbstractWithdrawalCompressorContract } from "./AbstractWithdrawalCompressorContract.js";
|
|
2
1
|
import { iWithdrawalCompressorV310Abi } from "../../../abi/IWithdrawalCompressorV310.js";
|
|
2
|
+
import { AbstractWithdrawalCompressorContract } from "./AbstractWithdrawalCompressorContract.js";
|
|
3
3
|
//#region src/onchain/accounts/withdrawal-compressor/WithdrawalCompressorV310Contract.ts
|
|
4
4
|
const abi = iWithdrawalCompressorV310Abi;
|
|
5
5
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AbstractWithdrawalCompressorContract } from "./AbstractWithdrawalCompressorContract.js";
|
|
2
1
|
import { iWithdrawalCompressorV311Abi } from "../../../abi/IWithdrawalCompressorV311.js";
|
|
2
|
+
import { AbstractWithdrawalCompressorContract } from "./AbstractWithdrawalCompressorContract.js";
|
|
3
3
|
//#region src/onchain/accounts/withdrawal-compressor/WithdrawalCompressorV311Contract.ts
|
|
4
4
|
const abi = iWithdrawalCompressorV311Abi;
|
|
5
5
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { iWithdrawalCompressorV313Abi } from "../../../abi/IWithdrawalCompressorV313.js";
|
|
1
2
|
import { encodeDelayedIntent } from "./intent-codec.js";
|
|
2
3
|
import { AbstractWithdrawalCompressorContract, iCreditAccountAbi, toClaimableWithdrawal, toPendingWithdrawal, toRequestableWithdrawal } from "./AbstractWithdrawalCompressorContract.js";
|
|
3
|
-
import { iWithdrawalCompressorV313Abi } from "../../../abi/IWithdrawalCompressorV313.js";
|
|
4
4
|
import { toWithdrawalStatus } from "./types.js";
|
|
5
5
|
//#region src/onchain/accounts/withdrawal-compressor/WithdrawalCompressorV313Contract.ts
|
|
6
6
|
const abi = iWithdrawalCompressorV313Abi;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
+
import { iExpirableAbi } from "../../abi/iExpirable.js";
|
|
2
|
+
import { iStateSerializerAbi } from "../../abi/iStateSerializer.js";
|
|
3
|
+
import { iVersionAbi } from "../../abi/iVersion.js";
|
|
1
4
|
import { AddressMap } from "../utils/AddressMap.js";
|
|
2
5
|
import { AddressSet } from "../utils/AddressSet.js";
|
|
3
6
|
import { bytes32ToString } from "../utils/bytes32ToString.js";
|
|
4
7
|
import { getAssetType } from "../chain/chains.js";
|
|
5
8
|
import { formatBN } from "../utils/formatter.js";
|
|
6
9
|
import "../utils/index.js";
|
|
7
|
-
import { iExpirableAbi } from "../../abi/iExpirable.js";
|
|
8
|
-
import { iStateSerializerAbi } from "../../abi/iStateSerializer.js";
|
|
9
|
-
import { iVersionAbi } from "../../abi/iVersion.js";
|
|
10
10
|
import { SdkRWADataNotLoadedError } from "../core/errors.js";
|
|
11
11
|
import { executeMulticallBatches } from "../utils/viem/executeMulticallBatches.js";
|
|
12
12
|
//#region src/onchain/base/TokensMeta.ts
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import { iVersionAbi } from "../../abi/iVersion.js";
|
|
1
2
|
import { AP_MARKET_COMPRESSOR, AP_PRICE_FEED_COMPRESSOR } from "../constants/address-provider.js";
|
|
2
3
|
import { isV310 } from "../constants/versions.js";
|
|
3
4
|
import "../constants/index.js";
|
|
4
5
|
import { hexEq } from "../utils/hex.js";
|
|
5
|
-
import { iVersionAbi } from "../../abi/iVersion.js";
|
|
6
6
|
import { AddressProviderV310Contract } from "./AddressProviderV310Contract.js";
|
|
7
7
|
//#region src/onchain/core/createAddressProvider.ts
|
|
8
8
|
const OVERRIDE_ADDRESSES = { Mainnet: {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AbstractAdapterContract } from "./AbstractAdapter.js";
|
|
2
1
|
import { accountMigratorAbi } from "../../../../abi/AccountMigrator.js";
|
|
2
|
+
import { AbstractAdapterContract } from "./AbstractAdapter.js";
|
|
3
3
|
//#region src/onchain/market/adapters/contracts/AccountMigratorAdapterContract.ts
|
|
4
4
|
const abi = accountMigratorAbi;
|
|
5
5
|
const protocolAbi = accountMigratorAbi;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { ierc4626AdapterAbi } from "../../../../abi/ierc4626Adapter.js";
|
|
1
2
|
import { MissingSerializedParamsError } from "../../../base/errors.js";
|
|
2
3
|
import "../../../base/index.js";
|
|
3
|
-
import { ierc4626AdapterAbi } from "../../../../abi/ierc4626Adapter.js";
|
|
4
4
|
import { iERC4626Abi } from "../abi/targetContractAbi.js";
|
|
5
5
|
import { fnSigToName, swapFromTransfers } from "../transferHelpers.js";
|
|
6
6
|
import { AbstractAdapterContract } from "./AbstractAdapter.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { iPausableAbi } from "../../../abi/iPausable.js";
|
|
1
2
|
import { iCreditFacadeMulticallV310Abi, iCreditFacadeV310Abi } from "../../../abi/310/generated.js";
|
|
2
3
|
import { BaseContract } from "../../base/BaseContract.js";
|
|
3
4
|
import "../../base/index.js";
|
|
4
|
-
import { iPausableAbi } from "../../../abi/iPausable.js";
|
|
5
5
|
//#region src/onchain/market/credit/CreditFacadeV310BaseContract.ts
|
|
6
6
|
const abi = [
|
|
7
7
|
...iCreditFacadeV310Abi,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { iPausableAbi } from "../../../abi/iPausable.js";
|
|
1
2
|
import { iPoolV310Abi } from "../../../abi/310/generated.js";
|
|
2
3
|
import { AddressMap } from "../../utils/AddressMap.js";
|
|
3
4
|
import { RAY } from "../../constants/math.js";
|
|
@@ -7,7 +8,6 @@ import "../../utils/index.js";
|
|
|
7
8
|
import { SdkRWADataNotLoadedError } from "../../core/errors.js";
|
|
8
9
|
import { BaseContract } from "../../base/BaseContract.js";
|
|
9
10
|
import "../../base/index.js";
|
|
10
|
-
import { iPausableAbi } from "../../../abi/iPausable.js";
|
|
11
11
|
//#region src/onchain/market/pool/PoolV310Contract.ts
|
|
12
12
|
const abi = [...iPoolV310Abi, ...iPausableAbi];
|
|
13
13
|
var PoolV310Contract = class extends BaseContract {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { iVersionAbi } from "../../../abi/iVersion.js";
|
|
1
2
|
import { bytes32ToString } from "../../utils/bytes32ToString.js";
|
|
2
3
|
import "../../utils/index.js";
|
|
3
|
-
import { iVersionAbi } from "../../../abi/iVersion.js";
|
|
4
4
|
import { iMidasDegenNFTAbi } from "../../../abi/rwa/iMidasDegenNFT.js";
|
|
5
5
|
import { DEGEN_NFT_MIDAS } from "./midas/constants.js";
|
|
6
6
|
import { MidasDegenNFT } from "./midas/MidasDegenNFT.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ZapperContract } from "./ZapperContract.js";
|
|
2
1
|
import { iethZapperAbi } from "../../../abi/iETHZapper.js";
|
|
2
|
+
import { ZapperContract } from "./ZapperContract.js";
|
|
3
3
|
//#region src/onchain/market/zapper/IETHZapperContract.ts
|
|
4
4
|
const abi = iethZapperAbi;
|
|
5
5
|
var IETHZapperContract = class extends ZapperContract {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import { iZapperAbi } from "../../../abi/iZapper.js";
|
|
1
2
|
import { BaseContract } from "../../base/BaseContract.js";
|
|
2
3
|
import "../../base/index.js";
|
|
3
4
|
import { sdkErr, sdkOk } from "../../../model/result.js";
|
|
4
5
|
import "../../../model/index.js";
|
|
5
|
-
import { iZapperAbi } from "../../../abi/iZapper.js";
|
|
6
6
|
//#region src/onchain/market/zapper/ZapperContract.ts
|
|
7
7
|
/**
|
|
8
8
|
* Base contract for every Gearbox zapper. Specialized zappers (e.g.
|
|
@@ -1,26 +1,23 @@
|
|
|
1
1
|
import { AP_WETH_TOKEN } from "../../constants/address-provider.js";
|
|
2
2
|
import { asEstimated } from "../../../model/previews.js";
|
|
3
|
-
import {
|
|
3
|
+
import { sdkOk } from "../../../model/result.js";
|
|
4
4
|
import "../../../model/index.js";
|
|
5
|
-
import { CreditAccountState } from "./CreditAccountState.js";
|
|
6
5
|
import { unwrapNativeCollateral } from "./unwrapNativeCollateral.js";
|
|
7
|
-
import { makeReplayState, replayInnerOperations } from "./replayInnerOperations.js";
|
|
8
6
|
//#region src/onchain/preview/preview/previewOpenStrategyPosition.ts
|
|
9
|
-
function previewOpenStrategyPosition(sdk, input, operation) {
|
|
7
|
+
function previewOpenStrategyPosition(sdk, input, operation, replay) {
|
|
10
8
|
const { value = 0n } = input;
|
|
11
9
|
const market = sdk.marketRegister.findByCreditManager(operation.creditManager);
|
|
12
10
|
const oracle = market.priceOracle;
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
if (replayError) return sdkErr(replayError);
|
|
16
|
-
const account = state.account;
|
|
11
|
+
const { before, after } = replay;
|
|
12
|
+
const account = after.account;
|
|
17
13
|
let warning;
|
|
18
|
-
const
|
|
14
|
+
const price = (token, balance) => {
|
|
19
15
|
const priced = oracle.safeConvert(token, market.underlying, balance);
|
|
20
16
|
warning ??= priced.error;
|
|
21
17
|
return priced.value;
|
|
22
|
-
}
|
|
23
|
-
const
|
|
18
|
+
};
|
|
19
|
+
const netValue = before.balances.sum(price) + after.collateralAdded.sum(price);
|
|
20
|
+
const unwrapped = unwrapNativeCollateral(after.collateralAdded.toAssets(), value, sdk.addressProvider.getAddress(AP_WETH_TOKEN, 0));
|
|
24
21
|
if (!unwrapped.ok) return unwrapped;
|
|
25
22
|
const collateral = unwrapped.data;
|
|
26
23
|
const snap = account.toSnapshot(netValue + account.totalDebt);
|
|
@@ -31,14 +28,11 @@ function previewOpenStrategyPosition(sdk, input, operation) {
|
|
|
31
28
|
collateralAdded: collateral.map((a) => oracle.toTokenAmount(a.token, a.balance)),
|
|
32
29
|
warning
|
|
33
30
|
};
|
|
34
|
-
if (operation.operation === "RWAOpenCreditAccount") return sdkOk({
|
|
35
|
-
...projection,
|
|
36
|
-
operation: "RWAOpenCreditAccount",
|
|
37
|
-
rwaArgs: operation.args
|
|
38
|
-
});
|
|
39
31
|
return sdkOk({
|
|
40
32
|
...projection,
|
|
41
|
-
operation: "OpenCreditAccount"
|
|
33
|
+
operation: "OpenCreditAccount",
|
|
34
|
+
...operation.operation === "MultiCall" || operation.operation === "BotMulticall" || operation.operation === "RWAMulticall" ? { creditAccount: operation.creditAccount } : {},
|
|
35
|
+
..."args" in operation ? { rwaArgs: operation.args } : {}
|
|
42
36
|
});
|
|
43
37
|
}
|
|
44
38
|
/**
|
|
@@ -33,9 +33,13 @@ async function previewOperation(sdk, input, options, creditAccount) {
|
|
|
33
33
|
if (!parsed.ok) return parsed;
|
|
34
34
|
const operation = parsed.data;
|
|
35
35
|
if (isPoolOperation(operation)) return previewPoolPositionOperation(sdk, operation, options);
|
|
36
|
-
if (operation.operation === "OpenCreditAccount" || operation.operation === "RWAOpenCreditAccount")
|
|
36
|
+
if (operation.operation === "OpenCreditAccount" || operation.operation === "RWAOpenCreditAccount") {
|
|
37
|
+
const replayed = replayMulticall(sdk, operation);
|
|
38
|
+
if (!replayed.ok) return replayed;
|
|
39
|
+
return previewOpenStrategyPosition(sdk, input, operation, replayed.data);
|
|
40
|
+
}
|
|
37
41
|
if (operation.operation === "CloseCreditAccount") {
|
|
38
|
-
const resolved = await resolveCreditAccount(sdk, operation, options, creditAccount);
|
|
42
|
+
const resolved = await resolveCreditAccount(sdk, operation.creditAccount, options, creditAccount);
|
|
39
43
|
if (!resolved.ok) return resolved;
|
|
40
44
|
const replayed = replayMulticall(sdk, operation, resolved.data);
|
|
41
45
|
if (!replayed.ok) return replayed;
|
|
@@ -47,7 +51,7 @@ async function previewOperation(sdk, input, options, creditAccount) {
|
|
|
47
51
|
return preview;
|
|
48
52
|
}
|
|
49
53
|
if (operation.operation === "MultiCall" || operation.operation === "BotMulticall" || operation.operation === "RWAMulticall") {
|
|
50
|
-
const resolved = await resolveCreditAccount(sdk, operation, options, creditAccount);
|
|
54
|
+
const resolved = await resolveCreditAccount(sdk, operation.creditAccount, options, creditAccount);
|
|
51
55
|
if (!resolved.ok) return resolved;
|
|
52
56
|
const replayed = replayMulticall(sdk, operation, resolved.data);
|
|
53
57
|
if (!replayed.ok) return replayed;
|
|
@@ -64,20 +68,24 @@ async function previewOperation(sdk, input, options, creditAccount) {
|
|
|
64
68
|
* injected state when present, otherwise fetches it from the credit account
|
|
65
69
|
* compressor.
|
|
66
70
|
*/
|
|
67
|
-
async function resolveCreditAccount(sdk,
|
|
68
|
-
let resolved =
|
|
69
|
-
if (!resolved) resolved = await sdk.accounts.getCreditAccountData(
|
|
70
|
-
if (!resolved) return sdkErr(creditAccountNotFound(
|
|
71
|
+
async function resolveCreditAccount(sdk, address, options, data) {
|
|
72
|
+
let resolved = data;
|
|
73
|
+
if (!resolved) resolved = await sdk.accounts.getCreditAccountData(address, options?.blockNumber);
|
|
74
|
+
if (!resolved) return sdkErr(creditAccountNotFound(address));
|
|
71
75
|
return sdkOk(resolved);
|
|
72
76
|
}
|
|
73
77
|
/**
|
|
74
78
|
* Previews a plain/bot/RWA multicall: classifies the instant preview
|
|
75
|
-
* (zero-debt closure/repay
|
|
76
|
-
* delayed withdrawal, wraps the instant
|
|
77
|
-
* `DelayedCreditAccountOperation` together with the
|
|
78
|
-
* the state after the withdrawal is claimed.
|
|
79
|
+
* (reopening a zero-debt account, zero-debt closure/repay, or adjustment)
|
|
80
|
+
* and, when the multicall requests a delayed withdrawal, wraps the instant
|
|
81
|
+
* preview into a `DelayedCreditAccountOperation` together with the
|
|
82
|
+
* best-effort preview of the state after the withdrawal is claimed.
|
|
83
|
+
*
|
|
84
|
+
* A reopening is reported as `OpenCreditAccount` and never as a delayed
|
|
85
|
+
* withdrawal: an opening requests no redemption.
|
|
79
86
|
*/
|
|
80
87
|
async function previewMulticallOperation(sdk, input, operation, replay, blockNumber) {
|
|
88
|
+
if (replay.before.totalDebt === 0n && replay.before.quotas.toAssets(0n).length === 0 && replay.after.account.totalDebt > 0n) return previewOpenStrategyPosition(sdk, input, operation, replay);
|
|
81
89
|
let instantPreview;
|
|
82
90
|
if (isCloseOrRepay(operation.multicall)) {
|
|
83
91
|
const instant = previewExitOrRepayStrategyPosition(sdk, input, operation, false, replay);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { iPoolV310Abi } from "../../../abi/310/generated.js";
|
|
2
1
|
import { ierc20Abi } from "../../../abi/iERC20.js";
|
|
2
|
+
import { iZapperAbi } from "../../../abi/iZapper.js";
|
|
3
|
+
import { iPoolV310Abi } from "../../../abi/310/generated.js";
|
|
3
4
|
import { sdkErr, sdkOk } from "../../../model/result.js";
|
|
4
5
|
import "../../../model/index.js";
|
|
5
|
-
import { iZapperAbi } from "../../../abi/iZapper.js";
|
|
6
6
|
//#region src/onchain/preview/preview/previewPoolPositionOperation.ts
|
|
7
7
|
function previewRead(operation) {
|
|
8
8
|
switch (operation.operation) {
|
|
@@ -4,11 +4,12 @@ import { CreditAccountState } from "./CreditAccountState.js";
|
|
|
4
4
|
import { makeReplayState, replayInnerOperations } from "./replayInnerOperations.js";
|
|
5
5
|
//#region src/onchain/preview/preview/replayMulticall.ts
|
|
6
6
|
/**
|
|
7
|
-
* Replays the operation's multicall
|
|
8
|
-
*
|
|
7
|
+
* Replays the operation's multicall via {@link replayInnerOperations}.
|
|
8
|
+
* When `creditAccount` is omitted, the seed is
|
|
9
|
+
* {@link CreditAccountState.beforeOpen} (a fresh opening).
|
|
9
10
|
*/
|
|
10
11
|
function replayMulticall(sdk, operation, creditAccount) {
|
|
11
|
-
const before = CreditAccountState.fromCreditAccountData(creditAccount);
|
|
12
|
+
const before = creditAccount ? CreditAccountState.fromCreditAccountData(creditAccount) : CreditAccountState.beforeOpen(operation.creditManager, sdk.marketRegister.findByCreditManager(operation.creditManager).underlying);
|
|
12
13
|
const after = makeReplayState(before.clone());
|
|
13
14
|
const error = replayInnerOperations(sdk, operation.multicall, after);
|
|
14
15
|
if (error) return sdkErr(error);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { errorAbis } from "../../../abi/errors.js";
|
|
2
|
-
import { generateCastTraceCall } from "./cast.js";
|
|
3
2
|
import { iUpdatablePriceFeedAbi } from "../../../abi/iUpdatablePriceFeed.js";
|
|
3
|
+
import { generateCastTraceCall } from "./cast.js";
|
|
4
4
|
import { simulateMulticall } from "./simulateMulticall.js";
|
|
5
5
|
import { BaseError, CallExecutionError, ContractFunctionRevertedError, decodeFunctionData, decodeFunctionResult, encodeFunctionData, parseAbi } from "viem";
|
|
6
6
|
import { getAction, parseAccount } from "viem/utils";
|
|
@@ -22,13 +22,13 @@ async function checkCollateralFunding(input) {
|
|
|
22
22
|
if (held.size === 0) return [];
|
|
23
23
|
let spender;
|
|
24
24
|
try {
|
|
25
|
-
if (preview.
|
|
25
|
+
if (preview.creditAccount) spender = await sdk.accounts.getApprovalAddress({
|
|
26
26
|
creditManager: preview.creditManager,
|
|
27
|
-
|
|
27
|
+
creditAccount: preview.creditAccount
|
|
28
28
|
});
|
|
29
29
|
else spender = await sdk.accounts.getApprovalAddress({
|
|
30
30
|
creditManager: preview.creditManager,
|
|
31
|
-
|
|
31
|
+
borrower: sender
|
|
32
32
|
});
|
|
33
33
|
} catch (cause) {
|
|
34
34
|
return [unexpectedFailure(cause, "resolve the approval address")];
|
|
@@ -25,7 +25,7 @@ async function checkCreditOperation(args) {
|
|
|
25
25
|
const suite = sdk.marketRegister.findCreditManager(preview.creditManager);
|
|
26
26
|
const market = suite.market;
|
|
27
27
|
const underlying = toToken(sdk, market.pool.underlying);
|
|
28
|
-
const isOpening = preview.operation === "OpenCreditAccount"
|
|
28
|
+
const isOpening = preview.operation === "OpenCreditAccount";
|
|
29
29
|
const protocol = [
|
|
30
30
|
...checkMarket(suite),
|
|
31
31
|
...checkDebtLimits({
|
|
@@ -51,7 +51,7 @@ async function checkCreditOperation(args) {
|
|
|
51
51
|
preview,
|
|
52
52
|
sender,
|
|
53
53
|
blockNumber
|
|
54
|
-
}),
|
|
54
|
+
}), isOpening ? checkRWAOpening({
|
|
55
55
|
sdk,
|
|
56
56
|
preview,
|
|
57
57
|
sender
|
|
@@ -11,13 +11,12 @@ async function checkRWAOpening(input) {
|
|
|
11
11
|
if (!nft) return [];
|
|
12
12
|
const gated = new AddressSet(await nft.getTokens());
|
|
13
13
|
const candidates = new AddressSet([...preview.collateralAdded.map((a) => a.token.address), ...preview.quotas.map((q) => q.token.address)]);
|
|
14
|
-
const providedArgs = preview.operation === "RWAOpenCreditAccount" ? preview.rwaArgs : void 0;
|
|
15
14
|
return (await Promise.all([...candidates].filter((token) => gated.has(token)).map((token) => checkRWAOpenRequirements({
|
|
16
15
|
sdk,
|
|
17
16
|
wallet: sender,
|
|
18
17
|
creditManager: preview.creditManager,
|
|
19
18
|
token,
|
|
20
|
-
providedArgs
|
|
19
|
+
providedArgs: preview.rwaArgs
|
|
21
20
|
})))).flat();
|
|
22
21
|
}
|
|
23
22
|
//#endregion
|
|
@@ -13,7 +13,7 @@ import { InvalidDelayedIntentError, MalformedTransactionError, PoolOperationPrev
|
|
|
13
13
|
import "./errors/index.js";
|
|
14
14
|
import { ApyBreakdown, Opportunity, OpportunityBase, OpportunityDetail, OpportunityFilter, OpportunityId, OpportunityKey, OpportunityKind, OpportunityTotals, PointRewards, PointsProgram, PoolOpportunity, PoolOpportunityDetail, PoolOpportunityKey, PoolOpportunityRef, PriceFeedData, PriceFeedSummary, QuotaAsset, RateCurve, RateCurvePoint, Rewards, StrategyOpportunity, StrategyOpportunityDetail, StrategyOpportunityKey, StrategyOpportunityRef, TokenRewards, matchesOpportunityFilter, opportunityId, poolOpportunityId, strategyOpportunityId } from "./opportunities.js";
|
|
15
15
|
import { BorrowRateBreakdown, PnlBreakdown, PointsProgramPnL, PointsRewardsPnL, PoolPosition, PoolPositionKey, PoolPositionRef, Position, PositionCollateral, PositionFilter, PositionId, PositionKey, PositionKind, PositionTransaction, PositionTransactionKind, PositionsTotals, RewardsPnL, STRATEGY_POSITION_COLLATERAL_ERROR, StrategyPosition, StrategyPositionKey, StrategyPositionRef, TokenQuotaRate, TokenRewardsPnL, liquidationPositionId, matchesPositionFilter, poolPositionId, positionId, strategyPositionId } from "./positions.js";
|
|
16
|
-
import { AccountHoldings, AccountMetrics, AccountProjection, AccountStateChange, AdjustStrategyPositionPreview, CreditOperationMarket, DelayedStrategyPositionOperationPreview, Estimated, EstimatedProjection, ExitStrategyPositionPreview, InstantStrategyPositionOperationPreview,
|
|
16
|
+
import { AccountHoldings, AccountMetrics, AccountProjection, AccountStateChange, AdjustStrategyPositionPreview, CreditOperationMarket, DelayedStrategyPositionOperationPreview, Estimated, EstimatedProjection, ExitStrategyPositionPreview, InstantStrategyPositionOperationPreview, OpenStrategyPositionPreview, OperationPreview, PoolOperationType, PoolPositionOperationPreview, PreviewOperationInput, PreviewOperationOptions, RepayStrategyPositionPreview, RoutedField, asEstimated } from "./previews.js";
|
|
17
17
|
import { DelayedReceivedAsset, InstantReceivedAsset, LiquidatableAccount, LiquidatableAccountFilter, LiquidationApproval, LiquidationDetails, LiquidationPosition, ReceivedAsset, matchesLiquidatableAccountFilter } from "./liquidations.js";
|
|
18
18
|
import { AnalyticsChartQuery, AnalyticsLiquidationPosition, AnalyticsPoolPosition, AnalyticsPosition, AnalyticsPositionListOptions, AnalyticsPositionOwner, AnalyticsPositionPage, AnalyticsPositionSortField, AnalyticsSortDirection, AnalyticsStrategyPosition } from "./analytics.js";
|
|
19
19
|
import { ANALYTICS_POSITIONS_DEFAULT_LIMIT, ANALYTICS_POSITIONS_MAX_LIMIT, analyticsChartQueryOptionsSchema, analyticsChartQueryParamsSchema, analyticsChartQuerySchema, analyticsPositionListOptionsSchema, analyticsPositionListQueryParamsSchema, analyticsPositionListQuerySchema, analyticsPositionPageSchema, analyticsPositionSchema, analyticsPositionSortFieldSchema, analyticsSortDirectionSchema } from "./analytics.schema.js";
|
|
@@ -33,4 +33,4 @@ import { SDKError, SDKResult, SDKReturn, SafeValue, safeValue, sdkErr, sdkOk } f
|
|
|
33
33
|
import { kycRequirementSchema, rwaProtocolSchema } from "./rwa.schema.js";
|
|
34
34
|
import { PositionClaimableWithdrawal, PositionPendingWithdrawal, PositionWithdrawals, WithdrawalOutputAmount } from "./withdrawals.js";
|
|
35
35
|
import { positionClaimableWithdrawalSchema, positionPendingWithdrawalSchema, positionWithdrawalsSchema, withdrawalOutputAmountSchema } from "./withdrawals.schema.js";
|
|
36
|
-
export { ANALYTICS_POSITIONS_DEFAULT_LIMIT, ANALYTICS_POSITIONS_MAX_LIMIT, AccountHoldings, AccountMetrics, AccountProjection, AccountStateChange, AdjustStrategyPositionPreview, Amount, AnalyticsChartQuery, AnalyticsLiquidationPosition, AnalyticsPoolPosition, AnalyticsPosition, AnalyticsPositionListOptions, AnalyticsPositionOwner, AnalyticsPositionPage, AnalyticsPositionSortField, AnalyticsSortDirection, AnalyticsStrategyPosition, ApyBreakdown, Asset, AssetType, BorrowLimitCause, BorrowRateBreakdown, Bps, CHART_METRIC_UNITS, CHART_RANGES, CHART_UNAVAILABLE_CODES, ChainFailed, ChainId, ChainMetadata, ChainScoped, ChainScopedFilter, ChainSucceeded, ChartBundle, ChartDenomination, ChartMetric, ChartQuery, ChartRange, ChartSeries, ChartSeriesOk, ChartSeriesUnavailable, ChartUnavailableCode, ChartUnit, ChartValue, ChartWindow, CompareTag, CompareTolerance, CreditAccountFrozenError, CreditAccountNotEmptyError, CreditAccountNotFoundError, CreditManagerPausedError, CreditOperationMarket, Curator, CuratorName, DataResponse, DataSource, DebtOutOfRangeError, DelayedAddCollateralIntent, DelayedCloseAccountIntent, DelayedDecreaseLeverageIntent, DelayedDepositAndIncreaseLeverageIntent, DelayedDepositIntent, DelayedIncreaseLeverageIntent, DelayedIntent, DelayedReceivedAsset, DelayedStrategyPositionOperationPreview, DelayedWithdrawCollateralIntent, Estimated, EstimatedProjection, ExitStrategyPositionPreview, FILTER_ALL, FilterAll, Filterable, ForbiddenTokenError, GridSampling, IGearboxError, InstantReceivedAsset, InstantStrategyPositionOperationPreview, InsufficientAllowanceError, InsufficientBalanceError, InsufficientCollateralError, InsufficientPoolLiquidityError, InvalidDelayedIntentError, KYC_REGISTRATION_LINKS, KycProtocol, KycRequirement, Leverage, LeverageOutOfRangeError, LiquidatableAccount, LiquidatableAccountFilter, LiquidationApproval, LiquidationDetails, LiquidationPosition, LiquidatorNotEligibleError, MalformedTransactionError, MarketExpiredError, MidasOpenAccountRequirements, MultipleDelayedWithdrawalsError, NoDelayedRouteError, NoRecordedIntentError, NoStrategyTargetCollateralError, NotEmergencyLiquidatorError, Notice, NoticeKind, NoticeSubject,
|
|
36
|
+
export { ANALYTICS_POSITIONS_DEFAULT_LIMIT, ANALYTICS_POSITIONS_MAX_LIMIT, AccountHoldings, AccountMetrics, AccountProjection, AccountStateChange, AdjustStrategyPositionPreview, Amount, AnalyticsChartQuery, AnalyticsLiquidationPosition, AnalyticsPoolPosition, AnalyticsPosition, AnalyticsPositionListOptions, AnalyticsPositionOwner, AnalyticsPositionPage, AnalyticsPositionSortField, AnalyticsSortDirection, AnalyticsStrategyPosition, ApyBreakdown, Asset, AssetType, BorrowLimitCause, BorrowRateBreakdown, Bps, CHART_METRIC_UNITS, CHART_RANGES, CHART_UNAVAILABLE_CODES, ChainFailed, ChainId, ChainMetadata, ChainScoped, ChainScopedFilter, ChainSucceeded, ChartBundle, ChartDenomination, ChartMetric, ChartQuery, ChartRange, ChartSeries, ChartSeriesOk, ChartSeriesUnavailable, ChartUnavailableCode, ChartUnit, ChartValue, ChartWindow, CompareTag, CompareTolerance, CreditAccountFrozenError, CreditAccountNotEmptyError, CreditAccountNotFoundError, CreditManagerPausedError, CreditOperationMarket, Curator, CuratorName, DataResponse, DataSource, DebtOutOfRangeError, DelayedAddCollateralIntent, DelayedCloseAccountIntent, DelayedDecreaseLeverageIntent, DelayedDepositAndIncreaseLeverageIntent, DelayedDepositIntent, DelayedIncreaseLeverageIntent, DelayedIntent, DelayedReceivedAsset, DelayedStrategyPositionOperationPreview, DelayedWithdrawCollateralIntent, Estimated, EstimatedProjection, ExitStrategyPositionPreview, FILTER_ALL, FilterAll, Filterable, ForbiddenTokenError, GridSampling, IGearboxError, InstantReceivedAsset, InstantStrategyPositionOperationPreview, InsufficientAllowanceError, InsufficientBalanceError, InsufficientCollateralError, InsufficientPoolLiquidityError, InvalidDelayedIntentError, KYC_REGISTRATION_LINKS, KycProtocol, KycRequirement, Leverage, LeverageOutOfRangeError, LiquidatableAccount, LiquidatableAccountFilter, LiquidationApproval, LiquidationDetails, LiquidationPosition, LiquidatorNotEligibleError, MalformedTransactionError, MarketExpiredError, MidasOpenAccountRequirements, MultipleDelayedWithdrawalsError, NoDelayedRouteError, NoRecordedIntentError, NoStrategyTargetCollateralError, NotEmergencyLiquidatorError, Notice, NoticeKind, NoticeSubject, OpenStrategyPositionPreview, OperationPreview, Opportunity, OpportunityBase, OpportunityChartMetric, OpportunityDetail, OpportunityFilter, OpportunityId, OpportunityKey, OpportunityKind, OpportunityTotals, POOL_OPPORTUNITY_CHART_METRICS, POOL_POSITION_CHART_METRICS, PROTOCOL_CHART_METRICS, PnlBreakdown, PointRewards, PointsProgram, PointsProgramPnL, PointsRewardsPnL, PoolOperationPreviewError, PoolOperationType, PoolOpportunity, PoolOpportunityChartMetric, PoolOpportunityDetail, PoolOpportunityKey, PoolOpportunityRef, PoolPausedError, PoolPosition, PoolPositionChartMetric, PoolPositionKey, PoolPositionOperationPreview, PoolPositionRef, PoolSunsetError, Position, PositionChartMetric, PositionClaimableWithdrawal, PositionCollateral, PositionFilter, PositionId, PositionKey, PositionKind, PositionPendingWithdrawal, PositionTransaction, PositionTransactionKind, PositionWithdrawals, PositionsTotals, PreviewOperationInput, PreviewOperationOptions, PriceFeedData, PriceFeedSummary, ProtocolChartMetric, QuotaAsset, QuotaCountExceededError, QuotaLimitReachedError, RWAFactoryType, RWAMissingOpenAccountRequirements, RWAOpenAccountRequirements, RWAOpenRequirementsError, RWAOperationArgs, RWAProtocol, RWA_FACTORY_SECURITIZE, RWA_FACTORY_TYPES, RWA_PROTOCOLS, RateCurve, RateCurvePoint, ReceivedAsset, RepayStrategyPositionPreview, ReservePriceLimitedError, ResponseMetadata, Rewards, RewardsPnL, RoutedField, SDKError, SDKResult, SDKReturn, SECURITIZE_REGISTER_VAULT_TYPES, STRATEGY_OPPORTUNITY_CHART_METRICS, STRATEGY_POSITION_CHART_METRICS, STRATEGY_POSITION_COLLATERAL_ERROR, SafeValue, SecuritizeMissingOpenAccountRequirements, SecuritizeOpenAccountRequirements, SecuritizeOperationArgs, SecuritizeRegisterMessage, SecuritizeRegisterVaultMessage, SecuritizeSignature, StrategyOpportunity, StrategyOpportunityChartMetric, StrategyOpportunityDetail, StrategyOpportunityKey, StrategyOpportunityRef, StrategyPosition, StrategyPositionChartMetric, StrategyPositionKey, StrategyPositionRef, Timestamp, Token, TokenAmount, TokenQuotaRate, TokenRewards, TokenRewardsPnL, ToleranceCompareTag, TxCall, UnderlyingToken, UnexpectedFailureError, UnpriceableTokenError, UnsupportedCollateralTokenError, UnsupportedOperationError, UnsupportedPoolFunctionError, UnsupportedTargetError, UnsupportedTokenPairError, UnsupportedZapperFunctionError, WithdrawalInProgressError, WithdrawalOutputAmount, amountSchema, analyticsChartQueryOptionsSchema, analyticsChartQueryParamsSchema, analyticsChartQuerySchema, analyticsPositionListOptionsSchema, analyticsPositionListQueryParamsSchema, analyticsPositionListQuerySchema, analyticsPositionPageSchema, analyticsPositionSchema, analyticsPositionSortFieldSchema, analyticsSortDirectionSchema, apyBreakdownSchema, asEstimated, assetTypeSchema, backendPreferred, booleanParamSchema, borrowRateBreakdownSchema, bpsSchema, chainFailedSchema, chainIdSchema, chainMetadataSchema, chainSucceededSchema, chartBundleSchemaFor, chartDenominationSchema, chartMetricSchema, chartQueryCodec, chartQueryParamsSchema, chartQuerySchema, chartRangeSchema, chartSeriesSchema, chartValueSchema, chartWindowSchema, compareTagOf, creditAccountFrozen, creditAccountNotEmpty, creditAccountNotFound, creditManagerPaused, curatorNameSchema, curatorSchema, dataSourceSchema, debtOutOfRange, delayedReceivedAssetSchema, encodeFlag, filterAllSchema, filterable, forbiddenToken, instantReceivedAssetSchema, insufficientAllowance, insufficientBalance, insufficientCollateral, insufficientPoolLiquidity, isFilterSet, kycRequirementSchema, leverageOutOfRange, leverageSchema, liquidatableAccountFilterSchema, liquidatableAccountSchema, liquidationApprovalSchema, liquidationDetailsSchema, liquidationPositionId, liquidationPositionSchema, liquidatorNotEligible, malformedTransaction, marketExpired, matchesLiquidatableAccountFilter, matchesOpportunityFilter, matchesPositionFilter, multipleDelayedWithdrawals, noDelayedRoute, noRecordedIntent, noStrategyTargetCollateral, notEmergencyLiquidator, noticeKindSchema, noticeSchema, offchainOnly, onchainOnly, opportunityBaseSchema, opportunityDetailSchema, opportunityFilterQueryParamsSchema, opportunityFilterQuerySchema, opportunityFilterSchema, opportunityId, opportunityKeySchema, opportunityKindSchema, opportunitySchema, opportunityTotalsSchema, pnlBreakdownSchema, pointRewardsSchema, pointsProgramPnLSchema, pointsProgramSchema, pointsRewardsPnLSchema, poolOpportunityChartMetricSchema, poolOpportunityDetailSchema, poolOpportunityId, poolOpportunityKeySchema, poolOpportunitySchema, poolPaused, poolPositionChartMetricSchema, poolPositionId, poolPositionKeySchema, poolPositionSchema, poolSunset, positionClaimableWithdrawalSchema, positionCollateralSchema, positionFilterQueryParamsSchema, positionFilterQuerySchema, positionFilterSchema, positionId, positionKeySchema, positionKindSchema, positionPendingWithdrawalSchema, positionSchema, positionTransactionKindSchema, positionTransactionSchema, positionWithdrawalsSchema, positionsTotalsSchema, priceFeedDataSchema, priceFeedSummarySchema, protocolChartMetricSchema, quotaAssetSchema, quotaCountExceeded, quotaLimitReached, rateCurvePointSchema, rateCurveSchema, receivedAssetSchema, reservePriceLimited, responseMetadataSchema, responseSchema, rewardsPnLSchema, rewardsSchema, rwaOpenRequirementsNotMet, rwaProtocolSchema, safeValue, sdkErr, sdkOk, strategyOpportunityChartMetricSchema, strategyOpportunityDetailSchema, strategyOpportunityId, strategyOpportunityKeySchema, strategyOpportunitySchema, strategyPositionChartMetricSchema, strategyPositionId, strategyPositionKeySchema, strategyPositionSchema, timestampSchema, tokenAmountSchema, tokenQuotaRateSchema, tokenRewardsPnLSchema, tokenRewardsSchema, tokenSchema, tolerance, txCallSchema, underlyingTokenSchema, unexpectedFailure, unpriceableTokenError, unsupportedCollateralToken, unsupportedTokenPair, withdrawalInProgress, withdrawalOutputAmountSchema };
|
|
@@ -375,31 +375,22 @@ interface OpenStrategyPositionProjection extends EstimatedProjection {
|
|
|
375
375
|
warning?: UnpriceableTokenError;
|
|
376
376
|
}
|
|
377
377
|
/**
|
|
378
|
-
* What
|
|
379
|
-
*
|
|
380
|
-
*
|
|
378
|
+
* What an account-opening transaction that already exists would do — the
|
|
379
|
+
* counterpart of `prepare.openNewStrategy`, read off calldata rather than
|
|
380
|
+
* planned into it.
|
|
381
381
|
**/
|
|
382
|
-
interface
|
|
382
|
+
interface OpenStrategyPositionPreview extends OpenStrategyPositionProjection {
|
|
383
383
|
operation: "OpenCreditAccount";
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
**/
|
|
389
|
-
interface OpenRWAStrategyPositionPreview extends OpenStrategyPositionProjection {
|
|
390
|
-
operation: "RWAOpenCreditAccount";
|
|
384
|
+
/**
|
|
385
|
+
* Existing zero-debt, zero-quota account this operation reopens.
|
|
386
|
+
*/
|
|
387
|
+
creditAccount?: Address;
|
|
391
388
|
/**
|
|
392
389
|
* Registration args the factory received (Securitize: `tokensToRegister`,
|
|
393
|
-
* `signaturesToCache`).
|
|
390
|
+
* `signaturesToCache`). Present on RWA-factory accounts only.
|
|
394
391
|
*/
|
|
395
|
-
rwaArgs
|
|
392
|
+
rwaArgs?: RWAOperationArgs;
|
|
396
393
|
}
|
|
397
|
-
/**
|
|
398
|
-
* What an account-opening transaction that already exists would do — the
|
|
399
|
-
* counterpart of `prepare.openNewStrategy`, read off calldata rather than
|
|
400
|
-
* planned into it.
|
|
401
|
-
**/
|
|
402
|
-
type OpenStrategyPositionPreview = OpenNonRWAStrategyPositionPreview | OpenRWAStrategyPositionPreview;
|
|
403
394
|
/**
|
|
404
395
|
* What a transaction on an existing account would do — the counterpart of the
|
|
405
396
|
* `prepare` flows that adjust one (`depositStrategy`, `withdrawStrategy`,
|
|
@@ -585,4 +576,4 @@ interface DelayedStrategyPositionOperationPreview extends CreditOperationMarket
|
|
|
585
576
|
*/
|
|
586
577
|
type OperationPreview = PoolPositionOperationPreview | OpenStrategyPositionPreview | AdjustStrategyPositionPreview | ExitStrategyPositionPreview | RepayStrategyPositionPreview | DelayedStrategyPositionOperationPreview;
|
|
587
578
|
//#endregion
|
|
588
|
-
export { AccountHoldings, AccountMetrics, AccountProjection, AccountStateChange, AdjustStrategyPositionPreview, CreditOperationMarket, DelayedStrategyPositionOperationPreview, Estimated, EstimatedProjection, ExitStrategyPositionPreview, InstantStrategyPositionOperationPreview,
|
|
579
|
+
export { AccountHoldings, AccountMetrics, AccountProjection, AccountStateChange, AdjustStrategyPositionPreview, CreditOperationMarket, DelayedStrategyPositionOperationPreview, Estimated, EstimatedProjection, ExitStrategyPositionPreview, InstantStrategyPositionOperationPreview, OpenStrategyPositionPreview, OperationPreview, PoolOperationType, PoolPositionOperationPreview, PreviewOperationInput, PreviewOperationOptions, RepayStrategyPositionPreview, RoutedField, asEstimated };
|
|
@@ -4,11 +4,13 @@ import { SDKReturn } from "../../../model/result.js";
|
|
|
4
4
|
import "../../../model/index.js";
|
|
5
5
|
import { PluginsMap } from "../../plugins/types.js";
|
|
6
6
|
import { OnchainSDK } from "../../OnchainSDK.js";
|
|
7
|
-
import { OpenCreditAccountOperation } from "../parse/types-facades.js";
|
|
8
|
-
import { RWAOpenCreditAccountOperation } from "../parse/types-rwa.js";
|
|
7
|
+
import { MulticallOperation, OpenCreditAccountOperation } from "../parse/types-facades.js";
|
|
8
|
+
import { RWAMulticallOperation, RWAOpenCreditAccountOperation } from "../parse/types-rwa.js";
|
|
9
9
|
import "../parse/index.js";
|
|
10
|
+
import { ReplayMulticallResult } from "./replayMulticall.js";
|
|
10
11
|
import "../../index.js";
|
|
11
12
|
//#region src/onchain/preview/preview/previewOpenStrategyPosition.d.ts
|
|
12
|
-
|
|
13
|
+
type OpenPreviewOperation = OpenCreditAccountOperation | RWAOpenCreditAccountOperation | MulticallOperation | RWAMulticallOperation;
|
|
14
|
+
declare function previewOpenStrategyPosition<P extends PluginsMap>(sdk: OnchainSDK<P>, input: PreviewOperationInput, operation: OpenPreviewOperation, replay: ReplayMulticallResult): SDKReturn<OpenStrategyPositionPreview, MalformedTransactionError>;
|
|
13
15
|
//#endregion
|
|
14
16
|
export { previewOpenStrategyPosition };
|
|
@@ -12,12 +12,12 @@ import "../../index.js";
|
|
|
12
12
|
import { Address } from "viem";
|
|
13
13
|
//#region src/onchain/preview/preview/replayMulticall.d.ts
|
|
14
14
|
/**
|
|
15
|
-
* Parsed operation
|
|
16
|
-
*
|
|
17
|
-
*
|
|
15
|
+
* Parsed operation whose multicall can be replayed: a facade or RWA
|
|
16
|
+
* opening (empty seed) and close/plain/bot/RWA multicalls on an existing
|
|
17
|
+
* account all fit structurally.
|
|
18
18
|
*/
|
|
19
19
|
interface ReplayableOperation {
|
|
20
|
-
|
|
20
|
+
creditManager: Address;
|
|
21
21
|
multicall: InnerOperation[];
|
|
22
22
|
}
|
|
23
23
|
/**
|
|
@@ -36,9 +36,10 @@ interface ReplayMulticallResult {
|
|
|
36
36
|
after: ReplayState;
|
|
37
37
|
}
|
|
38
38
|
/**
|
|
39
|
-
* Replays the operation's multicall
|
|
40
|
-
*
|
|
39
|
+
* Replays the operation's multicall via {@link replayInnerOperations}.
|
|
40
|
+
* When `creditAccount` is omitted, the seed is
|
|
41
|
+
* {@link CreditAccountState.beforeOpen} (a fresh opening).
|
|
41
42
|
*/
|
|
42
|
-
declare function replayMulticall<P extends PluginsMap>(sdk: OnchainSDK<P>, operation: ReplayableOperation, creditAccount
|
|
43
|
+
declare function replayMulticall<P extends PluginsMap>(sdk: OnchainSDK<P>, operation: ReplayableOperation, creditAccount?: CreditAccountData): SDKReturn<ReplayMulticallResult, MalformedTransactionError>;
|
|
43
44
|
//#endregion
|
|
44
45
|
export { ReplayMulticallResult, ReplayableOperation, replayMulticall };
|