@gearbox-protocol/sdk 16.4.0-next.1 → 16.4.0-next.11
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/index.js +3 -2
- package/dist/cjs/dev/kycUtils.js +18 -35
- package/dist/cjs/dev/midasUtils.js +80 -16
- package/dist/cjs/dev/securitizeUtils.js +14 -10
- package/dist/cjs/dev/withdrawalUtils.js +3 -6
- package/dist/cjs/model/errors/index.js +1 -0
- package/dist/cjs/model/errors/operation-errors.js +9 -0
- package/dist/cjs/model/index.js +1 -0
- package/dist/cjs/onchain/accounts/intents/borrow.js +139 -0
- package/dist/cjs/onchain/accounts/intents/{collateral-money.js → collateral-valuation.js} +7 -7
- package/dist/cjs/onchain/accounts/intents/index.js +86 -2
- package/dist/cjs/onchain/accounts/intents/leverage-band.js +2 -12
- package/dist/cjs/onchain/accounts/intents/maxBorrow.js +89 -0
- package/dist/cjs/onchain/accounts/intents/maxWithdrawCollateral.js +14 -14
- package/dist/cjs/onchain/accounts/intents/open-strategy.js +6 -45
- package/dist/cjs/onchain/accounts/intents/realize.js +44 -0
- package/dist/cjs/onchain/accounts/intents/testing/sdk-mock.js +1 -0
- package/dist/cjs/onchain/accounts/intents/utils/common.js +19 -0
- package/dist/cjs/onchain/accounts/intents/utils/credit-account-slice.js +21 -0
- package/dist/cjs/onchain/accounts/intents/utils/index.js +2 -0
- package/dist/cjs/onchain/accounts/intents/utils/price-impact.js +3 -3
- package/dist/cjs/onchain/accounts/intents/withdraw-limits.js +8 -8
- package/dist/cjs/onchain/accounts/utils/midasUtils.js +7 -1
- package/dist/cjs/onchain/core/createAddressProvider.js +2 -5
- package/dist/cjs/onchain/index.js +4 -0
- package/dist/cjs/onchain/market/adapters/contracts/MidasGatewayAdapterContract.js +11 -3
- package/dist/cjs/onchain/positions/calcHealthFactor.js +3 -3
- package/dist/cjs/onchain/preview/index.js +2 -0
- package/dist/cjs/onchain/preview/preview/index.js +2 -0
- package/dist/cjs/onchain/preview/preview/midasGreenlistsAccount.js +17 -0
- package/dist/cjs/onchain/preview/preview/previewOpenStrategyPosition.js +5 -2
- package/dist/cjs/onchain/validation/bundles/checkCreditOperation.js +2 -1
- package/dist/cjs/onchain/validation/bundles/checkMidasAccountGreenlist.js +44 -0
- package/dist/cjs/onchain/validation/bundles/checkRWAOpening.js +15 -5
- package/dist/cjs/onchain/validation/bundles/index.js +2 -0
- package/dist/cjs/onchain/validation/index.js +2 -0
- package/dist/cjs/sdk/execute/ExecuteApi.js +65 -5
- package/dist/cjs/sdk/prepare/PrepareApi.js +86 -12
- package/dist/esm/dev/index.js +3 -3
- package/dist/esm/dev/kycUtils.js +17 -33
- package/dist/esm/dev/midasUtils.js +80 -18
- package/dist/esm/dev/securitizeUtils.js +15 -11
- package/dist/esm/dev/withdrawalUtils.js +3 -6
- package/dist/esm/model/errors/index.js +2 -2
- package/dist/esm/model/errors/operation-errors.js +9 -1
- package/dist/esm/model/index.js +2 -2
- package/dist/esm/onchain/accounts/intents/borrow.js +137 -0
- package/dist/esm/onchain/accounts/intents/{collateral-money.js → collateral-valuation.js} +7 -7
- package/dist/esm/onchain/accounts/intents/index.js +86 -2
- package/dist/esm/onchain/accounts/intents/leverage-band.js +2 -12
- package/dist/esm/onchain/accounts/intents/maxBorrow.js +87 -0
- package/dist/esm/onchain/accounts/intents/maxWithdrawCollateral.js +14 -14
- package/dist/esm/onchain/accounts/intents/open-strategy.js +6 -45
- package/dist/esm/onchain/accounts/intents/realize.js +44 -0
- package/dist/esm/onchain/accounts/intents/testing/sdk-mock.js +1 -0
- package/dist/esm/onchain/accounts/intents/utils/common.js +19 -1
- package/dist/esm/onchain/accounts/intents/utils/credit-account-slice.js +21 -1
- package/dist/esm/onchain/accounts/intents/utils/index.js +3 -3
- package/dist/esm/onchain/accounts/intents/utils/price-impact.js +3 -3
- package/dist/esm/onchain/accounts/intents/withdraw-limits.js +8 -8
- package/dist/esm/onchain/accounts/utils/midasUtils.js +8 -2
- package/dist/esm/onchain/core/createAddressProvider.js +2 -5
- package/dist/esm/onchain/index.js +3 -1
- package/dist/esm/onchain/market/adapters/contracts/MidasGatewayAdapterContract.js +11 -3
- package/dist/esm/onchain/positions/calcHealthFactor.js +3 -3
- package/dist/esm/onchain/preview/index.js +2 -1
- package/dist/esm/onchain/preview/preview/index.js +2 -1
- package/dist/esm/onchain/preview/preview/midasGreenlistsAccount.js +16 -0
- package/dist/esm/onchain/preview/preview/previewOpenStrategyPosition.js +5 -2
- package/dist/esm/onchain/validation/bundles/checkCreditOperation.js +2 -1
- package/dist/esm/onchain/validation/bundles/checkMidasAccountGreenlist.js +43 -0
- package/dist/esm/onchain/validation/bundles/checkRWAOpening.js +15 -5
- package/dist/esm/onchain/validation/bundles/index.js +2 -1
- package/dist/esm/onchain/validation/index.js +2 -1
- package/dist/esm/sdk/execute/ExecuteApi.js +65 -5
- package/dist/esm/sdk/prepare/PrepareApi.js +86 -12
- package/dist/types/dev/index.d.ts +3 -3
- package/dist/types/dev/kycUtils.d.ts +1 -5
- package/dist/types/dev/midasUtils.d.ts +15 -4
- package/dist/types/model/errors/index.d.ts +2 -2
- package/dist/types/model/errors/operation-errors.d.ts +14 -1
- package/dist/types/model/index.d.ts +2 -2
- package/dist/types/model/previews.d.ts +17 -2
- package/dist/types/onchain/accounts/index.d.ts +4 -3
- package/dist/types/onchain/accounts/intents/borrow.d.ts +141 -0
- package/dist/types/onchain/accounts/intents/{collateral-money.d.ts → collateral-valuation.d.ts} +8 -8
- package/dist/types/onchain/accounts/intents/index.d.ts +81 -2
- package/dist/types/onchain/accounts/intents/maxBorrow.d.ts +54 -0
- package/dist/types/onchain/accounts/intents/maxWithdrawCollateral.d.ts +3 -3
- package/dist/types/onchain/accounts/intents/open-strategy.d.ts +3 -17
- package/dist/types/onchain/accounts/intents/testing/sdk-mock.d.ts +2 -0
- package/dist/types/onchain/accounts/intents/tests/open-strategy.fixtures.d.ts +2 -2
- package/dist/types/onchain/accounts/intents/types.d.ts +15 -1
- package/dist/types/onchain/accounts/intents/utils/common.d.ts +15 -1
- package/dist/types/onchain/accounts/intents/utils/credit-account-slice.d.ts +14 -1
- package/dist/types/onchain/accounts/intents/utils/index.d.ts +3 -3
- package/dist/types/onchain/accounts/intents/withdraw-limits.d.ts +1 -1
- package/dist/types/onchain/accounts/utils/midasUtils.d.ts +2 -1
- package/dist/types/onchain/index.d.ts +7 -4
- package/dist/types/onchain/market/adapters/contracts/MidasGatewayAdapterContract.d.ts +8 -2
- package/dist/types/onchain/preview/index.d.ts +2 -1
- package/dist/types/onchain/preview/preview/index.d.ts +2 -1
- package/dist/types/onchain/preview/preview/midasGreenlistsAccount.d.ts +13 -0
- package/dist/types/onchain/validation/bundles/checkCreditOperation.d.ts +2 -2
- package/dist/types/onchain/validation/bundles/checkMidasAccountGreenlist.d.ts +22 -0
- package/dist/types/onchain/validation/bundles/checkRWAOpening.d.ts +6 -4
- package/dist/types/onchain/validation/bundles/index.d.ts +3 -2
- package/dist/types/onchain/validation/checks/checkDebtLimits.d.ts +2 -2
- package/dist/types/onchain/validation/index.d.ts +3 -2
- package/dist/types/sdk/execute/index.d.ts +2 -2
- package/dist/types/sdk/execute/types.d.ts +48 -6
- package/dist/types/sdk/index.d.ts +5 -4
- package/dist/types/sdk/prepare/PrepareApi.d.ts +15 -3
- package/dist/types/sdk/prepare/index.d.ts +4 -3
- package/dist/types/sdk/prepare/types.d.ts +176 -49
- package/package.json +1 -1
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_abi_iVersion = require("../../abi/iVersion.js");
|
|
3
|
-
|
|
3
|
+
require("../constants/address-provider.js");
|
|
4
4
|
const require_onchain_constants_versions = require("../constants/versions.js");
|
|
5
5
|
require("../constants/index.js");
|
|
6
6
|
const require_onchain_utils_hex = require("../utils/hex.js");
|
|
7
7
|
const require_onchain_core_AddressProviderV310Contract = require("./AddressProviderV310Contract.js");
|
|
8
8
|
//#region src/onchain/core/createAddressProvider.ts
|
|
9
|
-
const OVERRIDE_ADDRESSES = {
|
|
10
|
-
[require_onchain_constants_address_provider.AP_PRICE_FEED_COMPRESSOR]: { 311: "0x1fA2637B9fab0CD14290A7EE908DDc9688a15120" },
|
|
11
|
-
[require_onchain_constants_address_provider.AP_MARKET_COMPRESSOR]: { 311: "0x0C27F242f6e9F2A9AD3261bE6e439De3B948bcA2" }
|
|
12
|
-
} };
|
|
9
|
+
const OVERRIDE_ADDRESSES = {};
|
|
13
10
|
async function createAddressProvider(sdk, address) {
|
|
14
11
|
let v;
|
|
15
12
|
if (require_onchain_utils_hex.hexEq(address, "0xF7f0a609BfAb9a0A98786951ef10e5FE26cC1E38")) v = 310n;
|
|
@@ -223,6 +223,7 @@ const require_onchain_validation_bundles_checkIncreaseDebt = require("./validati
|
|
|
223
223
|
const require_onchain_validation_bundles_checkIncreaseQuota = require("./validation/bundles/checkIncreaseQuota.js");
|
|
224
224
|
const require_onchain_validation_bundles_checkMarket = require("./validation/bundles/checkMarket.js");
|
|
225
225
|
const require_onchain_validation_bundles_checkObtained = require("./validation/bundles/checkObtained.js");
|
|
226
|
+
const require_onchain_validation_bundles_checkMidasAccountGreenlist = require("./validation/bundles/checkMidasAccountGreenlist.js");
|
|
226
227
|
const require_onchain_validation_bundles_checkRWAOpenRequirements = require("./validation/bundles/checkRWAOpenRequirements.js");
|
|
227
228
|
const require_onchain_validation_bundles_checkRWAOpening = require("./validation/bundles/checkRWAOpening.js");
|
|
228
229
|
const require_onchain_validation_bundles_checkCreditOperation = require("./validation/bundles/checkCreditOperation.js");
|
|
@@ -293,6 +294,7 @@ const require_onchain_preview_preview_detectCloseOrRepay = require("./preview/pr
|
|
|
293
294
|
const require_onchain_preview_preview_detectDelayedClaim = require("./preview/preview/detectDelayedClaim.js");
|
|
294
295
|
const require_onchain_preview_preview_detectDelayedOperation = require("./preview/preview/detectDelayedOperation.js");
|
|
295
296
|
const require_onchain_preview_preview_estimateClaimableAt = require("./preview/preview/estimateClaimableAt.js");
|
|
297
|
+
const require_onchain_preview_preview_midasGreenlistsAccount = require("./preview/preview/midasGreenlistsAccount.js");
|
|
296
298
|
const require_onchain_preview_preview_previewAdjustStrategyPosition = require("./preview/preview/previewAdjustStrategyPosition.js");
|
|
297
299
|
const require_onchain_preview_preview_previewExitOrRepayStrategyPosition = require("./preview/preview/previewExitOrRepayStrategyPosition.js");
|
|
298
300
|
const require_onchain_preview_preview_replayInnerOperations = require("./preview/preview/replayInnerOperations.js");
|
|
@@ -576,6 +578,7 @@ exports.checkLiquidationFunding = require_onchain_validation_bundles_checkLiquid
|
|
|
576
578
|
exports.checkLiquidatorEligible = require_onchain_validation_checks_checkLiquidatorEligible.checkLiquidatorEligible;
|
|
577
579
|
exports.checkMarket = require_onchain_validation_bundles_checkMarket.checkMarket;
|
|
578
580
|
exports.checkMarketExpired = require_onchain_validation_checks_checkMarketExpired.checkMarketExpired;
|
|
581
|
+
exports.checkMidasAccountGreenlist = require_onchain_validation_bundles_checkMidasAccountGreenlist.checkMidasAccountGreenlist;
|
|
579
582
|
exports.checkObtained = require_onchain_validation_bundles_checkObtained.checkObtained;
|
|
580
583
|
exports.checkOperation = require_onchain_validation_checkOperation.checkOperation;
|
|
581
584
|
exports.checkPoolFunding = require_onchain_validation_bundles_checkPoolFunding.checkPoolFunding;
|
|
@@ -755,6 +758,7 @@ exports.json_stringify = require_onchain_utils_json.json_stringify;
|
|
|
755
758
|
exports.lidoV1_WETHGatewayAbi = require_onchain_market_adapters_abi_targetContractAbi.lidoV1_WETHGatewayAbi;
|
|
756
759
|
exports.makeReplayState = require_onchain_preview_preview_replayInnerOperations.makeReplayState;
|
|
757
760
|
exports.mellowDvvAdapterAbi = require_onchain_market_adapters_abi_adapters_mellowDvvAdapter.mellowDvvAdapterAbi;
|
|
761
|
+
exports.midasGreenlistsAccount = require_onchain_preview_preview_midasGreenlistsAccount.midasGreenlistsAccount;
|
|
758
762
|
exports.minSeizedAmount = require_onchain_market_math.minSeizedAmount;
|
|
759
763
|
exports.numberWithCommas = require_onchain_utils_formatter.numberWithCommas;
|
|
760
764
|
exports.onchainSDKOptionsSchema = require_onchain_options.onchainSDKOptionsSchema;
|
|
@@ -170,13 +170,21 @@ var MidasGatewayAdapterContract = class extends require_onchain_market_adapters_
|
|
|
170
170
|
return { redeemer };
|
|
171
171
|
}
|
|
172
172
|
/**
|
|
173
|
+
* Whether `calldata` is `receiveGreenlist()`, the call that grants the
|
|
174
|
+
* Midas greenlisted role to the credit account.
|
|
175
|
+
*/
|
|
176
|
+
isReceiveGreenlist(calldata) {
|
|
177
|
+
return calldata === receiveGreenlistCalldata;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
173
180
|
* `receiveGreenlist()` is prepended by `prependMidasReceiveGreenlist`
|
|
174
181
|
* before the balance bracket when the multicall mints a permissioned
|
|
175
|
-
* mToken: it only
|
|
176
|
-
* so it is legal outside a bracket and
|
|
182
|
+
* mToken: it only grants the Midas greenlisted role to the credit
|
|
183
|
+
* account and is balance-neutral, so it is legal outside a bracket and
|
|
184
|
+
* leaves balances untouched.
|
|
177
185
|
*/
|
|
178
186
|
replayOutOfBracketCall(_balances, calldata) {
|
|
179
|
-
return calldata
|
|
187
|
+
return this.isReceiveGreenlist(calldata);
|
|
180
188
|
}
|
|
181
189
|
applyBalanceChanges(balances, decoded) {
|
|
182
190
|
switch (decoded.functionName) {
|
|
@@ -36,7 +36,7 @@ function calcHealthFactor(props) {
|
|
|
36
36
|
const scale = 10n ** BigInt(decimalsByToken.get(token) ?? 18);
|
|
37
37
|
return amount * price / scale;
|
|
38
38
|
};
|
|
39
|
-
const
|
|
39
|
+
const assetValue = snapshot.assets.reduce((acc, { token, balance }) => {
|
|
40
40
|
if (balance <= 10n) return acc;
|
|
41
41
|
const lt = BigInt(lts.get(token) ?? 0);
|
|
42
42
|
const tokenLtWeighted = (convertToUSD(token, balance, true) ?? 0n) * lt;
|
|
@@ -45,8 +45,8 @@ function calcHealthFactor(props) {
|
|
|
45
45
|
const quotaWeighted = (convertToUSD(underlying, quotaBalance) ?? 0n) * require_onchain_constants_math.PERCENTAGE_FACTOR;
|
|
46
46
|
return acc + (quota ? require_onchain_utils_bigint_math.BigIntMath.min(quotaWeighted, tokenLtWeighted) : tokenLtWeighted);
|
|
47
47
|
}, 0n);
|
|
48
|
-
const
|
|
49
|
-
const hf =
|
|
48
|
+
const borrowedValue = convertToUSD(underlying, snapshot.totalDebt) ?? 0n;
|
|
49
|
+
const hf = borrowedValue > 0n ? assetValue / borrowedValue : 0n;
|
|
50
50
|
return Number(hf);
|
|
51
51
|
}
|
|
52
52
|
//#endregion
|
|
@@ -12,6 +12,7 @@ const require_onchain_preview_preview_detectCloseOrRepay = require("./preview/de
|
|
|
12
12
|
const require_onchain_preview_preview_detectDelayedClaim = require("./preview/detectDelayedClaim.js");
|
|
13
13
|
const require_onchain_preview_preview_detectDelayedOperation = require("./preview/detectDelayedOperation.js");
|
|
14
14
|
const require_onchain_preview_preview_estimateClaimableAt = require("./preview/estimateClaimableAt.js");
|
|
15
|
+
const require_onchain_preview_preview_midasGreenlistsAccount = require("./preview/midasGreenlistsAccount.js");
|
|
15
16
|
const require_onchain_preview_preview_previewAdjustStrategyPosition = require("./preview/previewAdjustStrategyPosition.js");
|
|
16
17
|
const require_onchain_preview_preview_previewExitOrRepayStrategyPosition = require("./preview/previewExitOrRepayStrategyPosition.js");
|
|
17
18
|
const require_onchain_preview_preview_replayInnerOperations = require("./preview/replayInnerOperations.js");
|
|
@@ -29,6 +30,7 @@ exports.isCloseOrRepay = require_onchain_preview_preview_detectCloseOrRepay.isCl
|
|
|
29
30
|
exports.isPoolOperation = require_onchain_preview_parse_types.isPoolOperation;
|
|
30
31
|
exports.isRWAOperation = require_onchain_preview_parse_types.isRWAOperation;
|
|
31
32
|
exports.makeReplayState = require_onchain_preview_preview_replayInnerOperations.makeReplayState;
|
|
33
|
+
exports.midasGreenlistsAccount = require_onchain_preview_preview_midasGreenlistsAccount.midasGreenlistsAccount;
|
|
32
34
|
exports.parseFacadeOperationCalldata = require_onchain_preview_parse_parseFacadeOperationCalldata.parseFacadeOperationCalldata;
|
|
33
35
|
exports.parseOperationCalldata = require_onchain_preview_parse_parseOperationCalldata.parseOperationCalldata;
|
|
34
36
|
exports.parsePoolOperationCalldata = require_onchain_preview_parse_parsePoolOperationCalldata.parsePoolOperationCalldata;
|
|
@@ -5,6 +5,7 @@ const require_onchain_preview_preview_detectCloseOrRepay = require("./detectClos
|
|
|
5
5
|
const require_onchain_preview_preview_detectDelayedClaim = require("./detectDelayedClaim.js");
|
|
6
6
|
const require_onchain_preview_preview_detectDelayedOperation = require("./detectDelayedOperation.js");
|
|
7
7
|
const require_onchain_preview_preview_estimateClaimableAt = require("./estimateClaimableAt.js");
|
|
8
|
+
const require_onchain_preview_preview_midasGreenlistsAccount = require("./midasGreenlistsAccount.js");
|
|
8
9
|
const require_onchain_preview_preview_previewAdjustStrategyPosition = require("./previewAdjustStrategyPosition.js");
|
|
9
10
|
const require_onchain_preview_preview_previewExitOrRepayStrategyPosition = require("./previewExitOrRepayStrategyPosition.js");
|
|
10
11
|
const require_onchain_preview_preview_replayInnerOperations = require("./replayInnerOperations.js");
|
|
@@ -18,6 +19,7 @@ exports.detectDelayedOperation = require_onchain_preview_preview_detectDelayedOp
|
|
|
18
19
|
exports.estimateClaimableAt = require_onchain_preview_preview_estimateClaimableAt.estimateClaimableAt;
|
|
19
20
|
exports.isCloseOrRepay = require_onchain_preview_preview_detectCloseOrRepay.isCloseOrRepay;
|
|
20
21
|
exports.makeReplayState = require_onchain_preview_preview_replayInnerOperations.makeReplayState;
|
|
22
|
+
exports.midasGreenlistsAccount = require_onchain_preview_preview_midasGreenlistsAccount.midasGreenlistsAccount;
|
|
21
23
|
exports.previewAdjustStrategyPosition = require_onchain_preview_preview_previewAdjustStrategyPosition.previewAdjustStrategyPosition;
|
|
22
24
|
exports.previewExitOrRepayStrategyPosition = require_onchain_preview_preview_previewExitOrRepayStrategyPosition.previewExitOrRepayStrategyPosition;
|
|
23
25
|
exports.previewOperation = require_onchain_preview_preview_previewOperation.previewOperation;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_onchain_market_adapters_contracts_MidasGatewayAdapterContract = require("../../market/adapters/contracts/MidasGatewayAdapterContract.js");
|
|
3
|
+
//#region src/onchain/preview/preview/midasGreenlistsAccount.ts
|
|
4
|
+
/**
|
|
5
|
+
* Whether the multicall grants the Midas greenlisted role to the credit
|
|
6
|
+
* account via `receiveGreenlist()`.
|
|
7
|
+
*/
|
|
8
|
+
function midasGreenlistsAccount(sdk, multicall) {
|
|
9
|
+
for (const op of multicall) {
|
|
10
|
+
if (op.operation !== "Execute") continue;
|
|
11
|
+
const adapter = sdk.getContract(op.adapter);
|
|
12
|
+
if (adapter instanceof require_onchain_market_adapters_contracts_MidasGatewayAdapterContract.MidasGatewayAdapterContract && adapter.isReceiveGreenlist(op.calldata)) return true;
|
|
13
|
+
}
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
//#endregion
|
|
17
|
+
exports.midasGreenlistsAccount = midasGreenlistsAccount;
|
|
@@ -3,6 +3,7 @@ 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_midasGreenlistsAccount = require("./midasGreenlistsAccount.js");
|
|
6
7
|
const require_onchain_preview_preview_unwrapNativeCollateral = require("./unwrapNativeCollateral.js");
|
|
7
8
|
//#region src/onchain/preview/preview/previewOpenStrategyPosition.ts
|
|
8
9
|
function previewOpenStrategyPosition(sdk, input, operation, replay) {
|
|
@@ -17,7 +18,7 @@ function previewOpenStrategyPosition(sdk, input, operation, replay) {
|
|
|
17
18
|
warning ??= priced.error;
|
|
18
19
|
return priced.value;
|
|
19
20
|
};
|
|
20
|
-
const netValue = before.balances.sum(price) + after.collateralAdded.sum(price);
|
|
21
|
+
const netValue = before.balances.sum(price) + after.collateralAdded.sum(price) - after.collateralWithdrawn.sum(price);
|
|
21
22
|
const unwrapped = require_onchain_preview_preview_unwrapNativeCollateral.unwrapNativeCollateral(after.collateralAdded.toAssets(), value, sdk.addressProvider.getAddress(require_onchain_constants_address_provider.AP_WETH_TOKEN, 0));
|
|
22
23
|
if (!unwrapped.ok) return unwrapped;
|
|
23
24
|
const collateral = unwrapped.data;
|
|
@@ -27,13 +28,15 @@ function previewOpenStrategyPosition(sdk, input, operation, replay) {
|
|
|
27
28
|
...require_model_previews.asEstimated(sdk.positions.projection(snap, { availableLiquidityChange: -account.totalDebt })),
|
|
28
29
|
targetCollateral: targetAsset ? oracle.toTokenAmount(targetAsset.token, targetAsset.balance) : void 0,
|
|
29
30
|
collateralAdded: collateral.map((a) => oracle.toTokenAmount(a.token, a.balance)),
|
|
31
|
+
collateralWithdrawn: after.collateralWithdrawn.toAssets().map((a) => oracle.toTokenAmount(a.token, a.balance)),
|
|
30
32
|
warning
|
|
31
33
|
};
|
|
32
34
|
return require_model_result.sdkOk({
|
|
33
35
|
...projection,
|
|
34
36
|
operation: "OpenCreditAccount",
|
|
35
37
|
...operation.operation === "MultiCall" || operation.operation === "BotMulticall" || operation.operation === "RWAMulticall" ? { creditAccount: operation.creditAccount } : {},
|
|
36
|
-
..."args" in operation ? { rwaArgs: operation.args } : {}
|
|
38
|
+
..."args" in operation ? { rwaArgs: operation.args } : {},
|
|
39
|
+
midasGreenlistsAccount: require_onchain_preview_preview_midasGreenlistsAccount.midasGreenlistsAccount(sdk, operation.multicall)
|
|
37
40
|
});
|
|
38
41
|
}
|
|
39
42
|
/**
|
|
@@ -27,6 +27,7 @@ async function checkCreditOperation(args) {
|
|
|
27
27
|
const market = suite.market;
|
|
28
28
|
const underlying = require_onchain_validation_helpers_token.toToken(sdk, market.pool.underlying);
|
|
29
29
|
const isOpening = preview.operation === "OpenCreditAccount";
|
|
30
|
+
const isEmptyOpening = preview.operation === "OpenCreditAccount" && preview.totalDebt.value === 0n && preview.collateralAdded.length === 0 && preview.quotas.length === 0;
|
|
30
31
|
const protocol = [
|
|
31
32
|
...require_onchain_validation_bundles_checkMarket.checkMarket(suite),
|
|
32
33
|
...require_onchain_validation_checks_checkDebtLimits.checkDebtLimits({
|
|
@@ -34,7 +35,7 @@ async function checkCreditOperation(args) {
|
|
|
34
35
|
minDebt: suite.creditFacade.minDebt,
|
|
35
36
|
maxDebt: suite.creditFacade.maxDebt,
|
|
36
37
|
underlying,
|
|
37
|
-
allowZero: !isOpening,
|
|
38
|
+
allowZero: !isOpening || isEmptyOpening,
|
|
38
39
|
maxBorrowAmount: suite.maxBorrowAmount()
|
|
39
40
|
}),
|
|
40
41
|
...require_onchain_validation_bundles_checkIncreaseDebt.checkIncreaseDebt(suite, preview, underlying),
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_model_errors_operation_errors = require("../../../model/errors/operation-errors.js");
|
|
3
|
+
const require_model_errors_prepare_errors = require("../../../model/errors/prepare-errors.js");
|
|
4
|
+
require("../../../model/index.js");
|
|
5
|
+
const require_onchain_validation_helpers_token = require("../helpers/token.js");
|
|
6
|
+
require("../helpers/index.js");
|
|
7
|
+
//#region src/onchain/validation/bundles/checkMidasAccountGreenlist.ts
|
|
8
|
+
/**
|
|
9
|
+
* Whether the credit account already holds the Midas greenlisted role
|
|
10
|
+
* this permissioned mToken requires of its holder.
|
|
11
|
+
*/
|
|
12
|
+
async function checkMidasAccountGreenlist(input) {
|
|
13
|
+
const { sdk, preview, nft, tokens } = input;
|
|
14
|
+
if (nft.protocol !== "midas") return [];
|
|
15
|
+
if (tokens.length === 0) return [];
|
|
16
|
+
const account = preview.creditAccount;
|
|
17
|
+
if (!account) return tokens.map((token) => require_model_errors_operation_errors.accountNotMidasGreenlisted({
|
|
18
|
+
token: require_onchain_validation_helpers_token.toToken(sdk, token),
|
|
19
|
+
creditManager: preview.creditManager
|
|
20
|
+
}));
|
|
21
|
+
return (await Promise.all(tokens.map((token) => checkAccountRole({
|
|
22
|
+
sdk,
|
|
23
|
+
nft,
|
|
24
|
+
account,
|
|
25
|
+
token,
|
|
26
|
+
preview
|
|
27
|
+
})))).flat();
|
|
28
|
+
}
|
|
29
|
+
async function checkAccountRole(input) {
|
|
30
|
+
const { sdk, nft, account, token, preview } = input;
|
|
31
|
+
try {
|
|
32
|
+
const requirements = await nft.getOpenAccountRequirements(account, { tokenOutAddress: token });
|
|
33
|
+
if (nft.isRegistered(requirements)) return [];
|
|
34
|
+
return [require_model_errors_operation_errors.accountNotMidasGreenlisted({
|
|
35
|
+
token: require_onchain_validation_helpers_token.toToken(sdk, token),
|
|
36
|
+
creditManager: preview.creditManager,
|
|
37
|
+
creditAccount: account
|
|
38
|
+
})];
|
|
39
|
+
} catch (cause) {
|
|
40
|
+
return [require_model_errors_prepare_errors.unexpectedFailure(cause, "read the Midas account greenlist")];
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//#endregion
|
|
44
|
+
exports.checkMidasAccountGreenlist = checkMidasAccountGreenlist;
|
|
@@ -1,24 +1,34 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_onchain_utils_AddressSet = require("../../utils/AddressSet.js");
|
|
3
|
+
const require_onchain_validation_bundles_checkMidasAccountGreenlist = require("./checkMidasAccountGreenlist.js");
|
|
3
4
|
const require_onchain_validation_bundles_checkRWAOpenRequirements = require("./checkRWAOpenRequirements.js");
|
|
4
5
|
//#region src/onchain/validation/bundles/checkRWAOpening.ts
|
|
5
6
|
/**
|
|
6
7
|
* Per KYC-gated token among `collateralAdded ∪ quotas`, whether the
|
|
7
|
-
* borrower still has to register or sign before this opening can land
|
|
8
|
+
* borrower still has to register or sign before this opening can land,
|
|
9
|
+
* and whether a Midas credit account may hold the mToken.
|
|
8
10
|
*/
|
|
9
11
|
async function checkRWAOpening(input) {
|
|
10
12
|
const { sdk, preview, sender } = input;
|
|
11
13
|
const nft = await sdk.marketRegister.findCreditManager(preview.creditManager).degenNFT();
|
|
12
14
|
if (!nft) return [];
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
const nftTokens = new require_onchain_utils_AddressSet.AddressSet(await nft.getTokens());
|
|
16
|
+
let candidates = new require_onchain_utils_AddressSet.AddressSet([...preview.collateralAdded.map((a) => a.token.address), ...preview.quotas.map((q) => q.token.address)]).asArray();
|
|
17
|
+
candidates = candidates.filter((token) => nftTokens.has(token));
|
|
18
|
+
let tokensToCheck = candidates;
|
|
19
|
+
if (tokensToCheck.length === 0 && !preview.creditAccount && nft.protocol === "midas") tokensToCheck = nftTokens.asArray();
|
|
20
|
+
return (await Promise.all([...tokensToCheck.map((token) => require_onchain_validation_bundles_checkRWAOpenRequirements.checkRWAOpenRequirements({
|
|
16
21
|
sdk,
|
|
17
22
|
wallet: sender,
|
|
18
23
|
creditManager: preview.creditManager,
|
|
19
24
|
token,
|
|
20
25
|
providedArgs: preview.rwaArgs
|
|
21
|
-
}))
|
|
26
|
+
})), require_onchain_validation_bundles_checkMidasAccountGreenlist.checkMidasAccountGreenlist({
|
|
27
|
+
sdk,
|
|
28
|
+
preview,
|
|
29
|
+
nft,
|
|
30
|
+
tokens: candidates
|
|
31
|
+
})])).flat();
|
|
22
32
|
}
|
|
23
33
|
//#endregion
|
|
24
34
|
exports.checkRWAOpening = checkRWAOpening;
|
|
@@ -8,6 +8,7 @@ const require_onchain_validation_bundles_checkIncreaseDebt = require("./checkInc
|
|
|
8
8
|
const require_onchain_validation_bundles_checkIncreaseQuota = require("./checkIncreaseQuota.js");
|
|
9
9
|
const require_onchain_validation_bundles_checkMarket = require("./checkMarket.js");
|
|
10
10
|
const require_onchain_validation_bundles_checkObtained = require("./checkObtained.js");
|
|
11
|
+
const require_onchain_validation_bundles_checkMidasAccountGreenlist = require("./checkMidasAccountGreenlist.js");
|
|
11
12
|
const require_onchain_validation_bundles_checkRWAOpenRequirements = require("./checkRWAOpenRequirements.js");
|
|
12
13
|
const require_onchain_validation_bundles_checkRWAOpening = require("./checkRWAOpening.js");
|
|
13
14
|
const require_onchain_validation_bundles_checkCreditOperation = require("./checkCreditOperation.js");
|
|
@@ -25,6 +26,7 @@ exports.checkIncreaseQuota = require_onchain_validation_bundles_checkIncreaseQuo
|
|
|
25
26
|
exports.checkLiquidationEligibility = require_onchain_validation_bundles_checkLiquidationEligibility.checkLiquidationEligibility;
|
|
26
27
|
exports.checkLiquidationFunding = require_onchain_validation_bundles_checkLiquidationFunding.checkLiquidationFunding;
|
|
27
28
|
exports.checkMarket = require_onchain_validation_bundles_checkMarket.checkMarket;
|
|
29
|
+
exports.checkMidasAccountGreenlist = require_onchain_validation_bundles_checkMidasAccountGreenlist.checkMidasAccountGreenlist;
|
|
28
30
|
exports.checkObtained = require_onchain_validation_bundles_checkObtained.checkObtained;
|
|
29
31
|
exports.checkPoolFunding = require_onchain_validation_bundles_checkPoolFunding.checkPoolFunding;
|
|
30
32
|
exports.checkPoolOperation = require_onchain_validation_bundles_checkPoolOperation.checkPoolOperation;
|
|
@@ -29,6 +29,7 @@ const require_onchain_validation_bundles_checkIncreaseDebt = require("./bundles/
|
|
|
29
29
|
const require_onchain_validation_bundles_checkIncreaseQuota = require("./bundles/checkIncreaseQuota.js");
|
|
30
30
|
const require_onchain_validation_bundles_checkMarket = require("./bundles/checkMarket.js");
|
|
31
31
|
const require_onchain_validation_bundles_checkObtained = require("./bundles/checkObtained.js");
|
|
32
|
+
const require_onchain_validation_bundles_checkMidasAccountGreenlist = require("./bundles/checkMidasAccountGreenlist.js");
|
|
32
33
|
const require_onchain_validation_bundles_checkRWAOpenRequirements = require("./bundles/checkRWAOpenRequirements.js");
|
|
33
34
|
const require_onchain_validation_bundles_checkRWAOpening = require("./bundles/checkRWAOpening.js");
|
|
34
35
|
const require_onchain_validation_bundles_checkCreditOperation = require("./bundles/checkCreditOperation.js");
|
|
@@ -67,6 +68,7 @@ exports.checkLiquidationFunding = require_onchain_validation_bundles_checkLiquid
|
|
|
67
68
|
exports.checkLiquidatorEligible = require_onchain_validation_checks_checkLiquidatorEligible.checkLiquidatorEligible;
|
|
68
69
|
exports.checkMarket = require_onchain_validation_bundles_checkMarket.checkMarket;
|
|
69
70
|
exports.checkMarketExpired = require_onchain_validation_checks_checkMarketExpired.checkMarketExpired;
|
|
71
|
+
exports.checkMidasAccountGreenlist = require_onchain_validation_bundles_checkMidasAccountGreenlist.checkMidasAccountGreenlist;
|
|
70
72
|
exports.checkObtained = require_onchain_validation_bundles_checkObtained.checkObtained;
|
|
71
73
|
exports.checkOperation = require_onchain_validation_checkOperation.checkOperation;
|
|
72
74
|
exports.checkPoolFunding = require_onchain_validation_bundles_checkPoolFunding.checkPoolFunding;
|
|
@@ -17,6 +17,8 @@ var ExecuteApi = class {
|
|
|
17
17
|
switch (request.kind) {
|
|
18
18
|
case "pool": return poolTx(sdk, request);
|
|
19
19
|
case "open": return openTx(sdk, request);
|
|
20
|
+
case "openEmpty": return openEmptyTx(sdk, request);
|
|
21
|
+
case "borrow": return borrowTx(sdk, request);
|
|
20
22
|
case "account": return accountTx(sdk, request);
|
|
21
23
|
}
|
|
22
24
|
}
|
|
@@ -63,17 +65,75 @@ async function openTx(sdk, request) {
|
|
|
63
65
|
reopenCreditAccount: state.creditAccount,
|
|
64
66
|
permits: {},
|
|
65
67
|
referralCode: 0n,
|
|
66
|
-
rwaOptions: await openRwaOptions(sdk, request)
|
|
68
|
+
rwaOptions: await openRwaOptions(sdk, request, request.targetToken)
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The opening with nothing in it: no debt to draw, no collateral to take, no
|
|
73
|
+
* path to run and no quota to buy, so `openCA` is left with the price updates
|
|
74
|
+
* the market demands and the facade's own `openCreditAccount`.
|
|
75
|
+
*
|
|
76
|
+
* Nothing is read off the preparation because there is nothing on it. The
|
|
77
|
+
* account holds no token, so an RWA market has none to gate on either.
|
|
78
|
+
**/
|
|
79
|
+
function openEmptyTx(sdk, request) {
|
|
80
|
+
return sdk.accounts.openCA({
|
|
81
|
+
creditManager: request.creditManager,
|
|
82
|
+
to: request.wallet,
|
|
83
|
+
collateral: [],
|
|
84
|
+
ethAmount: 0n,
|
|
85
|
+
debt: 0n,
|
|
86
|
+
calls: [],
|
|
87
|
+
averageQuota: [],
|
|
88
|
+
minQuota: [],
|
|
89
|
+
permits: {},
|
|
90
|
+
referralCode: 0n
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* A loan is an opening whose debt leaves again, so it is the same `openCA`
|
|
95
|
+
* with `withdrawToken` set: the facade draws the debt, takes the collateral,
|
|
96
|
+
* runs whatever path buys the payout, and sweeps that payout to the wallet.
|
|
97
|
+
*
|
|
98
|
+
* Both quota branches are the one the state carries. An opening has two
|
|
99
|
+
* because the balances it lands on are a router quote; here the account is
|
|
100
|
+
* left holding the collateral the caller named, and a named amount has no
|
|
101
|
+
* floor to differ from.
|
|
102
|
+
**/
|
|
103
|
+
async function borrowTx(sdk, request) {
|
|
104
|
+
const { creditManager, wallet, ethAmount, sim } = request;
|
|
105
|
+
const { state } = sim.data;
|
|
106
|
+
const collateral = {
|
|
107
|
+
token: state.collateral.token.address,
|
|
108
|
+
balance: state.collateral.value
|
|
109
|
+
};
|
|
110
|
+
return sdk.accounts.openCA({
|
|
111
|
+
creditManager,
|
|
112
|
+
to: wallet,
|
|
113
|
+
collateral: [collateral],
|
|
114
|
+
ethAmount,
|
|
115
|
+
debt: state.totalDebt.value,
|
|
116
|
+
calls: state.calls,
|
|
117
|
+
withdrawToken: state.borrowed.token.address,
|
|
118
|
+
averageQuota: state.quotaIncrease,
|
|
119
|
+
minQuota: state.quotaIncrease,
|
|
120
|
+
reopenCreditAccount: state.creditAccount,
|
|
121
|
+
permits: {},
|
|
122
|
+
referralCode: 0n,
|
|
123
|
+
rwaOptions: await openRwaOptions(sdk, request, collateral.token)
|
|
67
124
|
});
|
|
68
125
|
}
|
|
69
126
|
/**
|
|
70
127
|
* The documented `openCA` contract: ask the market for its open requirements
|
|
71
128
|
* and hand them back as operation args, with the caller's cached signatures
|
|
72
|
-
* attached. `undefined` on non-RWA markets and when no
|
|
129
|
+
* attached. `undefined` on non-RWA markets and when no token is named.
|
|
130
|
+
*
|
|
131
|
+
* `token` is the one the account ends up holding, which is what an RWA market
|
|
132
|
+
* gates on: the opening's target, and the borrow's collateral.
|
|
73
133
|
**/
|
|
74
|
-
async function openRwaOptions(sdk, request) {
|
|
75
|
-
if (!
|
|
76
|
-
const requirements = await sdk.accounts.getOpenAccountRequirements(request.wallet, request.creditManager, { tokenOutAddress:
|
|
134
|
+
async function openRwaOptions(sdk, request, token) {
|
|
135
|
+
if (!token) return;
|
|
136
|
+
const requirements = await sdk.accounts.getOpenAccountRequirements(request.wallet, request.creditManager, { tokenOutAddress: token });
|
|
77
137
|
if (requirements?.protocol !== "securitize") return;
|
|
78
138
|
return {
|
|
79
139
|
protocol: "securitize",
|
|
@@ -196,26 +196,33 @@ var PrepareApi = class extends require_onchain_base_MultichainConstruct.Multicha
|
|
|
196
196
|
}
|
|
197
197
|
}
|
|
198
198
|
/**
|
|
199
|
+
* {@inheritDoc IOpportunitiesPrepare.openEmptyCreditAccount}
|
|
200
|
+
**/
|
|
201
|
+
async openEmptyCreditAccount(strategy) {
|
|
202
|
+
try {
|
|
203
|
+
const sdk = await this.#chain(strategy.chainId);
|
|
204
|
+
const at = stateBlock(sdk);
|
|
205
|
+
const result = await service(sdk).openEmptyAccountIntent({
|
|
206
|
+
sdk,
|
|
207
|
+
creditManager: strategy.creditManager
|
|
208
|
+
});
|
|
209
|
+
return result.ok ? require_model_result.sdkOk(at) : methodError(result);
|
|
210
|
+
} catch (e) {
|
|
211
|
+
return require_model_result.sdkErr(require_model_errors_prepare_errors.unexpectedFailure(e));
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
199
215
|
* {@inheritDoc IOpportunitiesPrepare.openNewStrategy}
|
|
200
216
|
**/
|
|
201
217
|
async openNewStrategy(strategy, params) {
|
|
202
218
|
try {
|
|
203
219
|
const sdk = await this.#chain(strategy.chainId);
|
|
204
220
|
const at = stateBlock(sdk);
|
|
205
|
-
if (params.empty) return opened(await service(sdk).openStrategyIntent({
|
|
206
|
-
sdk,
|
|
207
|
-
creditManager: strategy.creditManager,
|
|
208
|
-
empty: true
|
|
209
|
-
}), at);
|
|
210
221
|
const targetToken = params.targetToken ?? sdk.marketRegister.findCreditManager(strategy.creditManager).strategyTargetCollateral;
|
|
211
222
|
if (!targetToken) return require_model_result.sdkErr(require_model_errors_prepare_errors.noStrategyTargetCollateral(strategy.creditManager));
|
|
212
|
-
|
|
213
|
-
if (
|
|
214
|
-
|
|
215
|
-
if (!reused || !(0, viem.isAddressEqual)(reused.creditManager, strategy.creditManager)) return require_model_result.sdkErr(require_model_errors_prepare_errors.creditAccountNotFound(params.creditAccount));
|
|
216
|
-
if (reused.totalDebt > 0n || reused.tokens.some((t) => t.quota > 0n)) return require_model_result.sdkErr(require_model_errors_prepare_errors.creditAccountNotEmpty(params.creditAccount));
|
|
217
|
-
creditAccount = reused;
|
|
218
|
-
}
|
|
223
|
+
const reused = await reusable(sdk, strategy, params.creditAccount);
|
|
224
|
+
if (reused && "error" in reused) return reused;
|
|
225
|
+
const creditAccount = reused?.account;
|
|
219
226
|
return opened(await service(sdk).openStrategyIntent({
|
|
220
227
|
sdk,
|
|
221
228
|
creditManager: strategy.creditManager,
|
|
@@ -232,6 +239,30 @@ var PrepareApi = class extends require_onchain_base_MultichainConstruct.Multicha
|
|
|
232
239
|
}
|
|
233
240
|
}
|
|
234
241
|
/**
|
|
242
|
+
* {@inheritDoc IOpportunitiesPrepare.borrow}
|
|
243
|
+
**/
|
|
244
|
+
async borrow(strategy, params) {
|
|
245
|
+
try {
|
|
246
|
+
const sdk = await this.#chain(strategy.chainId);
|
|
247
|
+
const at = stateBlock(sdk);
|
|
248
|
+
const reused = await reusable(sdk, strategy, params.creditAccount);
|
|
249
|
+
if (reused && "error" in reused) return reused;
|
|
250
|
+
return borrowed(await service(sdk).borrowIntent({
|
|
251
|
+
sdk,
|
|
252
|
+
creditManager: strategy.creditManager,
|
|
253
|
+
collateralToken: params.collateralToken,
|
|
254
|
+
collateralAmount: params.collateralAmount,
|
|
255
|
+
borrowToken: params.borrowToken,
|
|
256
|
+
borrowAmount: params.borrowAmount,
|
|
257
|
+
slippage: params.slippage,
|
|
258
|
+
quotaReserve: params.quotaReserve,
|
|
259
|
+
creditAccount: reused?.account
|
|
260
|
+
}), at);
|
|
261
|
+
} catch (e) {
|
|
262
|
+
return require_model_result.sdkErr(require_model_errors_prepare_errors.unexpectedFailure(e));
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
235
266
|
* {@inheritDoc IOpportunitiesPrepare.depositStrategy}
|
|
236
267
|
**/
|
|
237
268
|
async depositStrategy(position, params) {
|
|
@@ -354,6 +385,21 @@ var PrepareApi = class extends require_onchain_base_MultichainConstruct.Multicha
|
|
|
354
385
|
});
|
|
355
386
|
}
|
|
356
387
|
/**
|
|
388
|
+
* {@inheritDoc IOpportunitiesPrepare.maxBorrow}
|
|
389
|
+
**/
|
|
390
|
+
maxBorrow(strategy, params) {
|
|
391
|
+
const sdk = this.sdk.chain(strategy.chainId);
|
|
392
|
+
return service(sdk).maxBorrow({
|
|
393
|
+
sdk,
|
|
394
|
+
creditManager: strategy.creditManager,
|
|
395
|
+
collateralToken: params.collateralToken,
|
|
396
|
+
collateralAmount: params.collateralAmount,
|
|
397
|
+
borrowToken: params.borrowToken,
|
|
398
|
+
targetHF: params.targetHF,
|
|
399
|
+
quotaReserve: params.quotaReserve
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
357
403
|
* The account a bare `max*` read weighs. These reads answer a number, not
|
|
358
404
|
* an envelope, so an account the markets do not hold is thrown rather than
|
|
359
405
|
* described, see {@link IOpportunitiesPrepare.maxWithdraw}.
|
|
@@ -439,6 +485,25 @@ async function slice(sdk, creditAccount) {
|
|
|
439
485
|
return data && require_onchain_accounts_intents_utils_credit_account_slice.toCreditAccountSlice(data);
|
|
440
486
|
}
|
|
441
487
|
/**
|
|
488
|
+
* The pre-opened account a request asks to be run on, held to what "pre-opened"
|
|
489
|
+
* means: this manager's, owing nothing and holding no quota.
|
|
490
|
+
*
|
|
491
|
+
* Shared by the two flows that put something on a fresh account — an opening
|
|
492
|
+
* and a borrow — so both hold a reused one to the same terms. Whatever
|
|
493
|
+
* balances sit on it are left to the flow: an opening routes them, a borrow
|
|
494
|
+
* leaves them where they are.
|
|
495
|
+
*
|
|
496
|
+
* @returns Nothing when the request named no account, the refusal to answer
|
|
497
|
+
* with when it named one that does not qualify, and the slice otherwise
|
|
498
|
+
**/
|
|
499
|
+
async function reusable(sdk, strategy, creditAccount) {
|
|
500
|
+
if (!creditAccount) return;
|
|
501
|
+
const account = await slice(sdk, creditAccount);
|
|
502
|
+
if (!account || !(0, viem.isAddressEqual)(account.creditManager, strategy.creditManager)) return require_model_result.sdkErr(require_model_errors_prepare_errors.creditAccountNotFound(creditAccount));
|
|
503
|
+
if (account.totalDebt > 0n || account.tokens.some((t) => t.quota > 0n)) return require_model_result.sdkErr(require_model_errors_prepare_errors.creditAccountNotEmpty(creditAccount));
|
|
504
|
+
return { account };
|
|
505
|
+
}
|
|
506
|
+
/**
|
|
442
507
|
* The operation a claim resumes, or `undefined` when there is none to resume:
|
|
443
508
|
* a withdrawal requested without an intent, or one read through a compressor
|
|
444
509
|
* too old to report it. Every intent the engine records can be finished,
|
|
@@ -538,6 +603,15 @@ function opened(result, at) {
|
|
|
538
603
|
}
|
|
539
604
|
/**
|
|
540
605
|
* {@inheritDoc planned}
|
|
606
|
+
**/
|
|
607
|
+
function borrowed(result, at) {
|
|
608
|
+
return result.ok ? require_model_result.sdkOk({
|
|
609
|
+
state: result.state,
|
|
610
|
+
...at
|
|
611
|
+
}) : methodError(result);
|
|
612
|
+
}
|
|
613
|
+
/**
|
|
614
|
+
* {@inheritDoc planned}
|
|
541
615
|
*
|
|
542
616
|
* Both routes are payload, error and all: `errors` says why a missing one is
|
|
543
617
|
* missing, and it stays on the error when neither route answered, since that is
|
package/dist/esm/dev/index.js
CHANGED
|
@@ -13,10 +13,10 @@ import { detectChain } from "./detectChain.js";
|
|
|
13
13
|
import { isOutOfSyncError } from "./isOutOfSyncError.js";
|
|
14
14
|
import { isRateLimitError } from "./isRateLimitError.js";
|
|
15
15
|
import { isTransientError } from "./isTransientError.js";
|
|
16
|
-
import {
|
|
16
|
+
import { collectMidasGateways, collectMidasMTokens, unpauseMidasIssuanceVault } from "./midasUtils.js";
|
|
17
|
+
import { greenlistMidasGateway, registerMidasInvestor, registerRWAInvestor, registerSecuritizeInvestor } from "./kycUtils.js";
|
|
17
18
|
import { isRangeError, logSplitterTransport } from "./logSplitterTransport.js";
|
|
18
19
|
import { setLTZero, setLTs } from "./ltUtils.js";
|
|
19
|
-
import { unpauseMidasIssuanceVault } from "./midasUtils.js";
|
|
20
20
|
import { migrateFaucet } from "./migrateFaucet.js";
|
|
21
21
|
import { SUPPORTED_RPC_PROVIDERS, getAlchemyUrl, getAnkrUrl, getDrpcUrl, getErpcKey, getRpcProviderUrl, getThirdWebUrl, rpcProvidersSchema } from "./providers.js";
|
|
22
22
|
import { replaceStorage } from "./replaceStorage.js";
|
|
@@ -25,4 +25,4 @@ import { claimDSToken, claimDSTokens, enableDSTokenBackDating } from "./securiti
|
|
|
25
25
|
import "./types.js";
|
|
26
26
|
import { ONCHAIN_EXECUTION_ID_ADDRESS, verifyTestnet } from "./verifyTestnet.js";
|
|
27
27
|
import { makePendingWithdrawalsClaimable } from "./withdrawalUtils.js";
|
|
28
|
-
export { AccountOpener, Create2Deployer, DEFAULT_CREATE2_SALT, EthCallSpy, NoAvailableTransportsError, ONCHAIN_EXECUTION_ID_ADDRESS, OpenTxRevertedError, PUBLIC_CREATE2_FACTORY, RevolverTransport, SUPPORTED_RPC_PROVIDERS, SelectionStrategy, anvilNodeInfo, calcLiquidatableLTs, claimDSToken, claimDSTokens, claimFromFaucet, createAnvilClient, createMinter, deployUsingPublicCreate2, detectChain, enableDSTokenBackDating, evmMineDetailed, extendAnvilClient, getAlchemyUrl, getAnkrUrl, getDrpcUrl, getErpcKey, getPublicCreate2Address, getRpcProviderUrl, getThirdWebUrl, greenlistMidasGateway, httpTransportOptionsSchema, iDegenNftv2Abi, iFaucetAbi, iOnchainExecutionIdAbi, iOwnableAbi, iaclTraitAbi, isAnvil, isDeployedUsingPublicCreate2, isOutOfSyncError, isRangeError, isRateLimitError, isTransientError, logSplitterTransport, makePendingWithdrawalsClaimable, migrateFaucet, providerConfigSchema, registerMidasInvestor, registerRWAInvestor, registerSecuritizeInvestor, replaceStorage, resilientTransport, resilientTransportOptionsSchema, revolverTransportConfigBaseSchema, revolverTransportConfigSchema, rpcProvidersSchema, setLTZero, setLTs, unpauseMidasIssuanceVault, verifyTestnet
|
|
28
|
+
export { AccountOpener, Create2Deployer, DEFAULT_CREATE2_SALT, EthCallSpy, NoAvailableTransportsError, ONCHAIN_EXECUTION_ID_ADDRESS, OpenTxRevertedError, PUBLIC_CREATE2_FACTORY, RevolverTransport, SUPPORTED_RPC_PROVIDERS, SelectionStrategy, anvilNodeInfo, calcLiquidatableLTs, claimDSToken, claimDSTokens, claimFromFaucet, collectMidasGateways, collectMidasMTokens, createAnvilClient, createMinter, deployUsingPublicCreate2, detectChain, enableDSTokenBackDating, evmMineDetailed, extendAnvilClient, getAlchemyUrl, getAnkrUrl, getDrpcUrl, getErpcKey, getPublicCreate2Address, getRpcProviderUrl, getThirdWebUrl, greenlistMidasGateway, httpTransportOptionsSchema, iDegenNftv2Abi, iFaucetAbi, iOnchainExecutionIdAbi, iOwnableAbi, iaclTraitAbi, isAnvil, isDeployedUsingPublicCreate2, isOutOfSyncError, isRangeError, isRateLimitError, isTransientError, logSplitterTransport, makePendingWithdrawalsClaimable, migrateFaucet, providerConfigSchema, registerMidasInvestor, registerRWAInvestor, registerSecuritizeInvestor, replaceStorage, resilientTransport, resilientTransportOptionsSchema, revolverTransportConfigBaseSchema, revolverTransportConfigSchema, rpcProvidersSchema, setLTZero, setLTs, unpauseMidasIssuanceVault, verifyTestnet };
|