@gearbox-protocol/sdk 16.3.0-next.5 → 17.0.0-next.2
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/model/errors/operation-errors.js +1 -1
- package/dist/cjs/model/index.js +2 -2
- package/dist/cjs/model/rwa.js +4 -4
- package/dist/cjs/model/rwa.schema.js +4 -4
- package/dist/cjs/offchain/opportunities/OffchainOpportunities.js +1 -1
- package/dist/cjs/onchain/accounts/CreditAccountsServiceV310.js +3 -1
- package/dist/cjs/onchain/accounts/intents/guards.js +4 -4
- package/dist/cjs/onchain/accounts/liquidations/LiquidationsService.js +1 -1
- package/dist/cjs/onchain/index.js +4 -4
- package/dist/cjs/onchain/market/credit/CreditSuite.js +12 -26
- package/dist/cjs/onchain/market/rwa/midas/MidasDegenNFT.js +5 -45
- package/dist/cjs/onchain/market/rwa/securitize/SecuritizeDegenNFT.js +12 -56
- package/dist/cjs/onchain/market/rwa/securitize/SecuritizeRWAFactory.js +37 -0
- package/dist/cjs/onchain/opportunities/MultichainOpportunitiesService.js +2 -8
- package/dist/cjs/onchain/opportunities/OpportunitiesService.js +4 -16
- package/dist/cjs/onchain/preview/parse/parseRWAFactoryOperationCalldata.js +2 -2
- package/dist/cjs/onchain/validation/bundles/checkCreditOperation.js +8 -9
- package/dist/cjs/onchain/validation/bundles/checkDraw.js +28 -0
- package/dist/cjs/onchain/validation/bundles/{checkIncreaseQuota.js → checkQuotasAsked.js} +3 -3
- package/dist/cjs/onchain/validation/bundles/checkRWAOpenRequirements.js +9 -9
- package/dist/cjs/onchain/validation/bundles/checkRWAOpening.js +5 -6
- package/dist/cjs/onchain/validation/bundles/index.js +4 -4
- package/dist/cjs/onchain/validation/checkSimulation.js +4 -10
- package/dist/cjs/onchain/validation/checks/checkBorrowLimit.js +1 -1
- package/dist/cjs/onchain/validation/checks/checkDebtLimits.js +5 -2
- package/dist/cjs/onchain/validation/checks/checkPoolLiquidity.js +1 -1
- package/dist/cjs/onchain/validation/index.js +4 -4
- package/dist/cjs/sdk/execute/ExecuteApi.js +2 -2
- package/dist/cjs/sdk/opportunities/OpportunitiesNamespace.js +3 -9
- 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/model/errors/operation-errors.js +1 -1
- package/dist/esm/model/index.js +3 -3
- package/dist/esm/model/rwa.js +4 -4
- package/dist/esm/model/rwa.schema.js +5 -5
- package/dist/esm/offchain/opportunities/OffchainOpportunities.js +1 -1
- package/dist/esm/onchain/accounts/CreditAccountsServiceV310.js +5 -3
- package/dist/esm/onchain/accounts/intents/guards.js +4 -4
- package/dist/esm/onchain/accounts/liquidations/LiquidationsService.js +2 -2
- 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/index.js +3 -3
- 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/credit/CreditSuite.js +12 -26
- 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/rwa/midas/MidasDegenNFT.js +5 -45
- package/dist/esm/onchain/market/rwa/securitize/SecuritizeDegenNFT.js +10 -55
- package/dist/esm/onchain/market/rwa/securitize/SecuritizeRWAFactory.js +37 -0
- package/dist/esm/onchain/market/zapper/IETHZapperContract.js +1 -1
- package/dist/esm/onchain/market/zapper/ZapperContract.js +1 -1
- package/dist/esm/onchain/opportunities/MultichainOpportunitiesService.js +2 -8
- package/dist/esm/onchain/opportunities/OpportunitiesService.js +4 -16
- package/dist/esm/onchain/preview/parse/parseRWAFactoryOperationCalldata.js +2 -2
- package/dist/esm/onchain/preview/preview/previewPoolPositionOperation.js +2 -2
- package/dist/esm/onchain/utils/viem/simulateWithPriceUpdates.js +1 -1
- package/dist/esm/onchain/validation/bundles/checkCreditOperation.js +8 -9
- package/dist/esm/onchain/validation/bundles/checkDraw.js +27 -0
- package/dist/esm/onchain/validation/bundles/{checkIncreaseQuota.js → checkQuotasAsked.js} +3 -3
- package/dist/esm/onchain/validation/bundles/checkRWAOpenRequirements.js +9 -9
- package/dist/esm/onchain/validation/bundles/checkRWAOpening.js +5 -6
- package/dist/esm/onchain/validation/bundles/index.js +3 -3
- package/dist/esm/onchain/validation/checkSimulation.js +4 -10
- package/dist/esm/onchain/validation/checks/checkBorrowLimit.js +1 -1
- package/dist/esm/onchain/validation/checks/checkDebtLimits.js +5 -2
- package/dist/esm/onchain/validation/checks/checkPoolLiquidity.js +1 -1
- package/dist/esm/onchain/validation/index.js +3 -3
- package/dist/esm/sdk/execute/ExecuteApi.js +2 -2
- package/dist/esm/sdk/opportunities/OpportunitiesNamespace.js +3 -9
- package/dist/types/model/errors/operation-errors.d.ts +10 -11
- package/dist/types/model/index.d.ts +3 -3
- package/dist/types/model/opportunities.d.ts +7 -6
- package/dist/types/model/rwa.d.ts +27 -47
- package/dist/types/model/rwa.schema.d.ts +3 -3
- package/dist/types/offchain/opportunities/OffchainOpportunities.d.ts +2 -1
- package/dist/types/offchain/opportunities/types.d.ts +4 -1
- package/dist/types/onchain/accounts/types.d.ts +2 -4
- package/dist/types/onchain/index.d.ts +4 -4
- package/dist/types/onchain/market/credit/CreditSuite.d.ts +3 -8
- package/dist/types/onchain/market/credit/types.d.ts +2 -2
- package/dist/types/onchain/market/index.d.ts +2 -2
- package/dist/types/onchain/market/pool/types.d.ts +1 -1
- package/dist/types/onchain/market/rwa/index.d.ts +2 -2
- package/dist/types/onchain/market/rwa/midas/MidasDegenNFT.d.ts +4 -19
- package/dist/types/onchain/market/rwa/securitize/SecuritizeDegenNFT.d.ts +4 -24
- package/dist/types/onchain/market/rwa/securitize/SecuritizeRWAFactory.d.ts +14 -2
- package/dist/types/onchain/market/rwa/types.d.ts +37 -39
- package/dist/types/onchain/opportunities/MultichainOpportunitiesService.d.ts +1 -5
- package/dist/types/onchain/opportunities/OpportunitiesService.d.ts +3 -10
- package/dist/types/onchain/opportunities/types.d.ts +1 -6
- package/dist/types/onchain/validation/bundles/checkCreditOperation.d.ts +2 -3
- package/dist/types/onchain/validation/bundles/{checkIncreaseDebt.d.ts → checkDraw.d.ts} +7 -7
- package/dist/types/onchain/validation/bundles/{checkIncreaseQuota.d.ts → checkQuotasAsked.d.ts} +3 -3
- package/dist/types/onchain/validation/bundles/checkRWAOpenRequirements.d.ts +2 -2
- package/dist/types/onchain/validation/bundles/checkRWAOpening.d.ts +3 -3
- package/dist/types/onchain/validation/bundles/index.d.ts +3 -3
- package/dist/types/onchain/validation/checkSimulation.d.ts +3 -6
- package/dist/types/onchain/validation/checks/checkBorrowLimit.d.ts +1 -1
- package/dist/types/onchain/validation/checks/checkDebtLimits.d.ts +1 -1
- package/dist/types/onchain/validation/checks/checkPoolLiquidity.d.ts +1 -1
- package/dist/types/onchain/validation/index.d.ts +3 -3
- package/dist/types/sdk/opportunities/OpportunitiesNamespace.d.ts +1 -5
- package/dist/types/sdk/opportunities/types.d.ts +3 -9
- package/package.json +1 -1
- package/dist/cjs/onchain/validation/bundles/checkIncreaseDebt.js +0 -28
- package/dist/esm/onchain/validation/bundles/checkIncreaseDebt.js +0 -27
|
@@ -216,11 +216,11 @@ import { checkAccountQuotas } from "./validation/bundles/checkAccountQuotas.js";
|
|
|
216
216
|
import { checkWalletAllowance } from "./validation/bundles/checkWalletAllowance.js";
|
|
217
217
|
import { checkWalletBalance } from "./validation/bundles/checkWalletBalance.js";
|
|
218
218
|
import { checkCollateralFunding } from "./validation/bundles/checkCollateralFunding.js";
|
|
219
|
+
import { checkDraw } from "./validation/bundles/checkDraw.js";
|
|
219
220
|
import { checkHealthFactors } from "./validation/bundles/checkHealthFactors.js";
|
|
220
|
-
import { checkIncreaseDebt } from "./validation/bundles/checkIncreaseDebt.js";
|
|
221
|
-
import { checkIncreaseQuota } from "./validation/bundles/checkIncreaseQuota.js";
|
|
222
221
|
import { checkMarket } from "./validation/bundles/checkMarket.js";
|
|
223
222
|
import { checkObtained } from "./validation/bundles/checkObtained.js";
|
|
223
|
+
import { checkQuotasAsked } from "./validation/bundles/checkQuotasAsked.js";
|
|
224
224
|
import { checkRWAOpenRequirements } from "./validation/bundles/checkRWAOpenRequirements.js";
|
|
225
225
|
import { checkRWAOpening } from "./validation/bundles/checkRWAOpening.js";
|
|
226
226
|
import { checkCreditOperation } from "./validation/bundles/checkCreditOperation.js";
|
|
@@ -298,4 +298,4 @@ import { replayMulticall } from "./preview/preview/replayMulticall.js";
|
|
|
298
298
|
import { previewOperation } from "./preview/preview/previewOperation.js";
|
|
299
299
|
import "./preview/index.js";
|
|
300
300
|
import "./types/index.js";
|
|
301
|
-
export { ADDRESS_0X0, ADDRESS_PROVIDER_V310, AP_ACCOUNT_FACTORY, AP_ACL, AP_BOT_LIST, AP_BYTECODE_REPOSITORY, AP_CONTRACTS_REGISTER, AP_CONTROLLER_TIMELOCK, AP_CREDIT_ACCOUNT_COMPRESSOR, AP_CREDIT_SUITE_COMPRESSOR, AP_DATA_COMPRESSOR, AP_DELEVERAGE_BOT_HV, AP_DELEVERAGE_BOT_LV, AP_DELEVERAGE_BOT_PEGGED, AP_GAUGE_COMPRESSOR, AP_GEAR_STAKING, AP_GEAR_TOKEN, AP_INFLATION_ATTACK_BLOCKER, AP_INSOLVENCY_CHECKER, AP_MARKET_COMPRESSOR, AP_MARKET_CONFIGURATOR, AP_PARTIAL_LIQUIDATION_BOT, AP_PERIPHERY_COMPRESSOR, AP_PRICE_FEED_COMPRESSOR, AP_PRICE_FEED_STORE, AP_PRICE_ORACLE, AP_REDEMPTION_LOGGER, AP_REWARDS_COMPRESSOR, AP_ROUTER, AP_RWA_COMPRESSOR, AP_TOKEN_COMPRESSOR, AP_TREASURY, AP_WETH_GATEWAY, AP_WETH_TOKEN, AP_ZAPPER_REGISTER, AP_ZERO_PRICE_FEED, AbstractAdapterContract, AbstractLPPriceFeedContract, AbstractPriceFeedContract, AbstractWithdrawalCompressorContract, AccountBotsService, AccountMigratorAdapterContract, AdapterType, AddressMap, AddressProviderV310Contract, AddressSet, AssetsMap, BLOCKS_PER_WEEK_BY_NETWORK, BalancerStablePriceFeedContract, BalancerV3PoolStatus, BalancerV3RouterAdapterContract, BalancerV3WrapperAdapterContract, BalancerWeightedPriceFeedContract, BaseContract, BasePlugin, BigIntMath, BotPermissions, BoundedPriceFeedContract, CamelotV3AdapterContract, ChainContractsRegister, ChainNotConfiguredError, CompositePriceFeedContract, Construct, ContractParseError, ConvexV1BaseRewardPoolAdapterContract, ConvexV1BoosterAdapterContract, CreditAccountCompressor, CreditAccountCompressorV310Contract, CreditAccountOperationsService, CreditAccountState, CreditAccountsServiceV310, CreditConfiguratorV310Contract, CreditFacadeV310BaseContract, CreditFacadeV310Contract, CreditManagerV310Contract, CreditSuite, Curve2AssetsAdapterContract, Curve3AssetsAdapterContract, Curve4AssetsAdapterContract, CurveCryptoPriceFeedContract, CurveStablePriceFeedContract, CurveUSDPriceFeedContract, CurveV1AdapterStETHContract, CurveV1StableNGAdapterContract, DEFAULT_QUOTA_BUFFER_BPS, DEGEN_NFT_MIDAS, DEGEN_NFT_SECURITIZE, DELAYED_INTENT_TYPES, DELAYED_INTENT_VERSION, DUST_THRESHOLD, DaiUsdsAdapterContract, ERC4626AdapterContract, ERC4626ReferralAdapterContract, EXECUTE_BYTES_SELECTOR, Erc4626PriceFeedContract, ExternalPriceFeedContract, FluidDexAdapterContract, GaugeContract, IERC20ZapperContract, IETHZapperContract, InfinifiGatewayAdapterContract, InfinifiUnwindingGatewayAdapterContract, KelpLRTDepositPoolAdapterContract, KelpLRTWithdrawalManagerAdapterContract, LEVERAGE_DECIMALS, LIQUIDATION_APPROVAL_BUFFER, LIQUIDATION_COMPRESSOR_V313_ADDRESS, LidoV1AdapterContract, LinearInterestRateModelContract, LiquidationsService, MAX_INT, MAX_LEVERAGE_BUFFER_BPS, MAX_UINT16, MAX_UINT256, MIN_HEALTH_FACTOR_FACADE, MIN_HEALTH_FACTOR_FORM, MIN_HF_LIMITED, MIN_INT96, MIN_SAFE_HEALTH_FACTOR_FORM, MULTICALL_ADDRESS, MarketRegister, MarketSuite, MellowClaimerAdapterContract, MellowDVVAdapterContract, MellowERC4626VaultAdapterContract, MellowLRTPriceFeedContract, MellowWrapperAdapterContract, MidasDegenNFT, MidasGatewayAdapterContract, MidasIssuanceVaultAdapterContract, MidasLiquidatorContract, MidasRedemptionVaultAdapterContract, MissingSerializedParamsError, MultichainConstruct, MultichainLiquidationsService, MultichainOpportunitiesService, MultichainPositionsService, MultichainSDK, NATIVE_ADDRESS, NON_STRATEGY_PHANTOM_TOKEN_TYPES, NOT_DEPLOYED, NO_VERSION, NetworkType, OnchainSDK, OpportunitiesService, PARTIAL_LIQUIDATION_BUFFER_BPS, PERCENTAGE_DECIMALS, PERCENTAGE_FACTOR, PERCENTAGE_FACTOR_1KK, PERIPHERY_CONTRACTS, PHANTOM_TOKEN_CONTRACT_TYPES, PHANTOM_TOKEN_MIDAS_REDEMPTION, PHANTOM_TOKEN_SECURITIZE_REDEMPTION, PRICE_DECIMALS, PRICE_DECIMALS_POW, PartialPriceFeedInitError, PendlePairStatus, PendleRouterAdapterContract, PendleTWAPPTPriceFeed, PendleTokenType, PeripheryCompressorV310Contract, PluginStateVersionError, PoolService, PoolSuite, PoolV310Contract, PositionsService, PriceFeedRef, PriceFeedRegister, PriceOracleV310Contract, PythPriceFeed, RAMP_DURATION_BY_NETWORK, RAY, RAY_DECIMALS_POW, RWARegistry, RWA_LIQUIDATOR_MIDAS, RWA_LIQUIDATOR_SECURITIZE, RWA_ON_DEMAND_LP_MONOPOLIZED, RWA_UNDERLYING_DEFAULT, RWA_UNDERLYING_ON_DEMAND, RedemptionLoggerV310Contract, RedstonePriceFeedContract, RouterV310Contract, SDKConstruct, SECONDS_PER_YEAR, SLIPPAGE_DECIMALS, STATE_VERSION, SUPPORTED_NETWORKS, SdkAlreadyAttachedError, SdkChainMismatchError, SdkMissingChainStateError, SdkNotAttachedError, SdkRWADataNotLoadedError, SdkStateVersionMismatchError, SdkSyncFailedError, SecuritizeDegenNFT, SecuritizeLiquidatorContract, SecuritizeOnRampAdapterContract, SecuritizeRWAFactory, SecuritizeRedemptionGatewayAdapterContract, SimulateWithPriceUpdatesError, SimulationError, StakingRewardsAdapterContract, TokensMeta, TraderJoePoolVersion, TraderJoeRouterAdapterContract, TypedObjectUtils, UniswapV2AdapterContract, UniswapV3AdapterContract, UniswapV4AdapterContract, UpshiftVaultAdapterContract, VERSION_RANGE_310, VelodromeV2RouterAdapterContract, VotingContractStatus, WAD, WAD_DECIMALS_POW, WithdrawalCompressorV310Contract, WithdrawalCompressorV311Contract, WithdrawalCompressorV313Contract, WstETHPriceFeedContract, WstETHV1AdapterContract, YearnPriceFeedContract, ZapperContract, ZeroPriceFeedContract, ZodAddress, ZodBigInt, ZodHex, accountSnapshotFromCreditAccountData, adapterActionAbi, adapterActionSelectors, adapterActionSignatures, adapterConstructorAbi, allTransfersAsTokenAmounts, amountOf, assetsMap, attachOptionsSchema, botPermissionsToString, bpsToRay, buildDelayedStrategyPositionOperationPreview, bytes32ToString, calcBorrowApy, calcBorrowRate, calcDefaultQuota, calcEffectiveBorrowApy, calcHealthFactor, calcLiquidationPrice, calcLiquidationPriceForTarget, calcMaxLeverage, calcNetStrategyApy, calcPositionLeverage, calcQuotaRate, calcQuotaUpdate, calcRecommendedQuota, calcTimeToLiquidationMs, calcUtilization, calcUtilizationRaw, chains, checkAccountQuotas, checkBorrowLimit, checkCollateralFunding, checkCollateralised, checkCreditAccountFrozen, checkCreditManagerPaused, checkCreditOperation, checkDebtLimits, checkEmergencyLiquidator, checkForbiddenToken, checkHealthFactors, checkIncreaseDebt, checkIncreaseQuota, checkLeverage, checkLiquidation, checkLiquidationEligibility, checkLiquidationFunding, checkLiquidatorEligible, checkMarket, checkMarketExpired, checkObtained, checkOperation, checkPoolFunding, checkPoolLiquidity, checkPoolOperation, checkPoolPaused, checkPoolSunset, checkQuotaCount, checkQuotaLimit, checkRWAOpenRequirements, checkRWAOpening, checkSimulation, checkWallet, checkWalletAllowance, checkWalletBalance, childLogger, classifyCloseOrRepay, classifyCurveOperation, classifyInnerOperations, collateralPriceInUnderlying, collectTraces, createAdapter, createAddressProvider, createPriceOracle, createRawTx, createRedemptionLogger, createRouter, createWithdrawalCompressor, createZapper, abi as creditFacadeV310Abi, curveAddLiquidityFromTransfers, curveRemoveLiquidityFromTransfers, decodeDelayedIntent, detectDelayedClaim, detectDelayedOperation, detectNetwork, dominantCollateral, encodeDelayedIntent, erc4626ReferralAdapterAbi, estimateClaimableAt, estimateRawTxGas, etherscanApiUrl, etherscanUrl, executeDelegatedMulticalls, executeMulticallBatches, expectedBalanceDeltas, fetchCreditAccountSlice, fetchRedstonePayloads, filterDust, filterDustUSD, findCallTo, findCallWithInput, findCuratorMarketConfigurator, findExecuteBytes, fmtBinaryMask, fnSigToName, formatBN, formatBNvalue, formatDuration, formatLeverage, formatNumberToString_, formatPercentage, formatTimestamp, functionArgsToMap, functionArgsToRecord, generateCastTraceCall, getAccountTargetCollateral, getAdapterActionAbi, getAdapterDeployParamsAbi, getAdapterType, getAssetType, getCastTraceArgs, getChain, getCuratorName, getFunctionSignature, getLegacyStrategyTarget, getNetworkType, getRawPriceUpdates, getSimulateWithPriceUpdatesError, getWithdrawalCompressorAddress, halfRAY, hasAdapterDeployParamsAbi, healthFactorBps, hexEq, hydrateAddressProvider, iBalancerV3RouterAbi, iBalancerV3RouterAdapterAbi, iBalancerV3WrapperAbi, iBalancerV3WrapperAdapterAbi, iBaseOnRampAbi, iBaseRewardPoolAbi, iBoosterAbi, iCamelotV3AdapterAbi, iCamelotV3RouterAbi, iConvexV1BaseRewardPoolAdapterAbi, iConvexV1BoosterAdapterAbi, iCreditAccountAbi, iCurvePoolAbi, iCurvePoolStableNGAbi, iCurvePool_2Abi, iCurvePool_3Abi, iCurvePool_4Abi, iCurveV1StableNgAdapterAbi, iCurveV1_2AssetsAdapterAbi, iCurveV1_3AssetsAdapterAbi, iCurveV1_4AssetsAdapterAbi, iDaiUsdsAbi, iDaiUsdsAdapterAbi, iERC4626Abi, iERC4626ReferralAbi, iFluidDexAbi, iFluidDexAdapterAbi, iInfinifiGatewayAbi, iInfinifiGatewayAdapterAbi, iInfinifiUnwindingGatewayAbi, iInfinifiUnwindingGatewayAdapterAbi, iKelpLRTDepositPoolGatewayAbi, iKelpLRTWithdrawalManagerGatewayAbi, iKelpLrtDepositPoolAdapterAbi, iKelpLrtDepositPoolGatewayAbi, iKelpLrtWithdrawalManagerAdapterAbi, iKelpLrtWithdrawalManagerGatewayAbi, iLidoV1AdapterAbi, iMellow4626VaultAdapterAbi, iMellowClaimerAbi, iMellowClaimerAdapterAbi, iMellowWrapperAbi, iMellowWrapperAdapterAbi, iMidasGatewayAdapterV311Abi, iMidasGatewayV311Abi, iMidasIssuanceVaultAdapterV310Abi, iMidasIssuanceVaultV310Abi, iMidasRedemptionVaultAdapterV310Abi, iMidasRedemptionVaultGatewayV310Abi, iPendleRouterAbi, iPendleRouterAdapterAbi, iSecuritizeOnRampAbi, iSecuritizeOnRampAdapterV310Abi, iSecuritizeRedemptionGatewayAdapterV311Abi, iSecuritizeRedemptionGatewayV311Abi, iStakingRewardsAbi, iStakingRewardsAdapterAbi, iTraderJoeRouterAbi, iTraderJoeRouterAdapterAbi, iUniswapV2AdapterAbi, iUniswapV2Router02Abi, iUniswapV3Abi, iUniswapV3AdapterAbi, iUniswapV4AdapterAbi, iUniswapV4GatewayAbi, iUpshiftVaultAdapterAbi, iUpshiftVaultGatewayAbi, iVelodromeV2RouterAbi, iVelodromeV2RouterAdapterAbi, isCloseOrRepay, isDust, isLPPriceFeed, isPhantomToken, isPoolOperation, isPublicNetwork, isRWAFactory, isRWAOperation, isRWAToken, isStrategyCollateral, isSunsetPool, isSunsetStrategy, isSupportedNetwork, isUpdatablePriceFeed, isV310, isVersionRange, isZeroBalance, iwstETHAbi, iwstEthv1AdapterAbi, json_parse, json_stringify, lidoV1_WETHGatewayAbi, makeReplayState, mellowDvvAdapterAbi, minSeizedAmount, numberWithCommas, onchainSDKOptionsSchema, optimalHFForPartialLiquidation, optimalRepaidAmount, parseAdapterAction, parseAdapterDeployParams, parseFacadeOperationCalldata, parseOperationCalldata, parsePoolOperationCalldata, parsePosNegAmount, parseRWAFactoryOperationCalldata, percentFmt, pickStrategyTargetCollateral, previewAdjustStrategyPosition, previewExitOrRepayStrategyPosition, previewOperation, raise, rayToBps, rayToNumber, replayInnerOperations, replayMulticall, resolveDelayedClaimIntent, resolveProtocolCall, retry, rewardsFromTransfers, roundUpQuota, sendRawTx, shortAddress, shortHash, simulateCall, simulateMulticall, simulateWithPriceUpdates, soleNonUnderlyingCollateral, strategyName, swapFromTransfers, toAddress, toBN, toBigInt, toChainIds, toClaimableWithdrawal, toCreditAccountSlice, toNetTransfers, toPendingWithdrawal, toRequestableWithdrawal, toSignificant, toToken, toTokenAmount, toWithdrawalStatus, usdToNumber, watchBlocksAsync };
|
|
301
|
+
export { ADDRESS_0X0, ADDRESS_PROVIDER_V310, AP_ACCOUNT_FACTORY, AP_ACL, AP_BOT_LIST, AP_BYTECODE_REPOSITORY, AP_CONTRACTS_REGISTER, AP_CONTROLLER_TIMELOCK, AP_CREDIT_ACCOUNT_COMPRESSOR, AP_CREDIT_SUITE_COMPRESSOR, AP_DATA_COMPRESSOR, AP_DELEVERAGE_BOT_HV, AP_DELEVERAGE_BOT_LV, AP_DELEVERAGE_BOT_PEGGED, AP_GAUGE_COMPRESSOR, AP_GEAR_STAKING, AP_GEAR_TOKEN, AP_INFLATION_ATTACK_BLOCKER, AP_INSOLVENCY_CHECKER, AP_MARKET_COMPRESSOR, AP_MARKET_CONFIGURATOR, AP_PARTIAL_LIQUIDATION_BOT, AP_PERIPHERY_COMPRESSOR, AP_PRICE_FEED_COMPRESSOR, AP_PRICE_FEED_STORE, AP_PRICE_ORACLE, AP_REDEMPTION_LOGGER, AP_REWARDS_COMPRESSOR, AP_ROUTER, AP_RWA_COMPRESSOR, AP_TOKEN_COMPRESSOR, AP_TREASURY, AP_WETH_GATEWAY, AP_WETH_TOKEN, AP_ZAPPER_REGISTER, AP_ZERO_PRICE_FEED, AbstractAdapterContract, AbstractLPPriceFeedContract, AbstractPriceFeedContract, AbstractWithdrawalCompressorContract, AccountBotsService, AccountMigratorAdapterContract, AdapterType, AddressMap, AddressProviderV310Contract, AddressSet, AssetsMap, BLOCKS_PER_WEEK_BY_NETWORK, BalancerStablePriceFeedContract, BalancerV3PoolStatus, BalancerV3RouterAdapterContract, BalancerV3WrapperAdapterContract, BalancerWeightedPriceFeedContract, BaseContract, BasePlugin, BigIntMath, BotPermissions, BoundedPriceFeedContract, CamelotV3AdapterContract, ChainContractsRegister, ChainNotConfiguredError, CompositePriceFeedContract, Construct, ContractParseError, ConvexV1BaseRewardPoolAdapterContract, ConvexV1BoosterAdapterContract, CreditAccountCompressor, CreditAccountCompressorV310Contract, CreditAccountOperationsService, CreditAccountState, CreditAccountsServiceV310, CreditConfiguratorV310Contract, CreditFacadeV310BaseContract, CreditFacadeV310Contract, CreditManagerV310Contract, CreditSuite, Curve2AssetsAdapterContract, Curve3AssetsAdapterContract, Curve4AssetsAdapterContract, CurveCryptoPriceFeedContract, CurveStablePriceFeedContract, CurveUSDPriceFeedContract, CurveV1AdapterStETHContract, CurveV1StableNGAdapterContract, DEFAULT_QUOTA_BUFFER_BPS, DEGEN_NFT_MIDAS, DEGEN_NFT_SECURITIZE, DELAYED_INTENT_TYPES, DELAYED_INTENT_VERSION, DUST_THRESHOLD, DaiUsdsAdapterContract, ERC4626AdapterContract, ERC4626ReferralAdapterContract, EXECUTE_BYTES_SELECTOR, Erc4626PriceFeedContract, ExternalPriceFeedContract, FluidDexAdapterContract, GaugeContract, IERC20ZapperContract, IETHZapperContract, InfinifiGatewayAdapterContract, InfinifiUnwindingGatewayAdapterContract, KelpLRTDepositPoolAdapterContract, KelpLRTWithdrawalManagerAdapterContract, LEVERAGE_DECIMALS, LIQUIDATION_APPROVAL_BUFFER, LIQUIDATION_COMPRESSOR_V313_ADDRESS, LidoV1AdapterContract, LinearInterestRateModelContract, LiquidationsService, MAX_INT, MAX_LEVERAGE_BUFFER_BPS, MAX_UINT16, MAX_UINT256, MIN_HEALTH_FACTOR_FACADE, MIN_HEALTH_FACTOR_FORM, MIN_HF_LIMITED, MIN_INT96, MIN_SAFE_HEALTH_FACTOR_FORM, MULTICALL_ADDRESS, MarketRegister, MarketSuite, MellowClaimerAdapterContract, MellowDVVAdapterContract, MellowERC4626VaultAdapterContract, MellowLRTPriceFeedContract, MellowWrapperAdapterContract, MidasDegenNFT, MidasGatewayAdapterContract, MidasIssuanceVaultAdapterContract, MidasLiquidatorContract, MidasRedemptionVaultAdapterContract, MissingSerializedParamsError, MultichainConstruct, MultichainLiquidationsService, MultichainOpportunitiesService, MultichainPositionsService, MultichainSDK, NATIVE_ADDRESS, NON_STRATEGY_PHANTOM_TOKEN_TYPES, NOT_DEPLOYED, NO_VERSION, NetworkType, OnchainSDK, OpportunitiesService, PARTIAL_LIQUIDATION_BUFFER_BPS, PERCENTAGE_DECIMALS, PERCENTAGE_FACTOR, PERCENTAGE_FACTOR_1KK, PERIPHERY_CONTRACTS, PHANTOM_TOKEN_CONTRACT_TYPES, PHANTOM_TOKEN_MIDAS_REDEMPTION, PHANTOM_TOKEN_SECURITIZE_REDEMPTION, PRICE_DECIMALS, PRICE_DECIMALS_POW, PartialPriceFeedInitError, PendlePairStatus, PendleRouterAdapterContract, PendleTWAPPTPriceFeed, PendleTokenType, PeripheryCompressorV310Contract, PluginStateVersionError, PoolService, PoolSuite, PoolV310Contract, PositionsService, PriceFeedRef, PriceFeedRegister, PriceOracleV310Contract, PythPriceFeed, RAMP_DURATION_BY_NETWORK, RAY, RAY_DECIMALS_POW, RWARegistry, RWA_LIQUIDATOR_MIDAS, RWA_LIQUIDATOR_SECURITIZE, RWA_ON_DEMAND_LP_MONOPOLIZED, RWA_UNDERLYING_DEFAULT, RWA_UNDERLYING_ON_DEMAND, RedemptionLoggerV310Contract, RedstonePriceFeedContract, RouterV310Contract, SDKConstruct, SECONDS_PER_YEAR, SLIPPAGE_DECIMALS, STATE_VERSION, SUPPORTED_NETWORKS, SdkAlreadyAttachedError, SdkChainMismatchError, SdkMissingChainStateError, SdkNotAttachedError, SdkRWADataNotLoadedError, SdkStateVersionMismatchError, SdkSyncFailedError, SecuritizeDegenNFT, SecuritizeLiquidatorContract, SecuritizeOnRampAdapterContract, SecuritizeRWAFactory, SecuritizeRedemptionGatewayAdapterContract, SimulateWithPriceUpdatesError, SimulationError, StakingRewardsAdapterContract, TokensMeta, TraderJoePoolVersion, TraderJoeRouterAdapterContract, TypedObjectUtils, UniswapV2AdapterContract, UniswapV3AdapterContract, UniswapV4AdapterContract, UpshiftVaultAdapterContract, VERSION_RANGE_310, VelodromeV2RouterAdapterContract, VotingContractStatus, WAD, WAD_DECIMALS_POW, WithdrawalCompressorV310Contract, WithdrawalCompressorV311Contract, WithdrawalCompressorV313Contract, WstETHPriceFeedContract, WstETHV1AdapterContract, YearnPriceFeedContract, ZapperContract, ZeroPriceFeedContract, ZodAddress, ZodBigInt, ZodHex, accountSnapshotFromCreditAccountData, adapterActionAbi, adapterActionSelectors, adapterActionSignatures, adapterConstructorAbi, allTransfersAsTokenAmounts, amountOf, assetsMap, attachOptionsSchema, botPermissionsToString, bpsToRay, buildDelayedStrategyPositionOperationPreview, bytes32ToString, calcBorrowApy, calcBorrowRate, calcDefaultQuota, calcEffectiveBorrowApy, calcHealthFactor, calcLiquidationPrice, calcLiquidationPriceForTarget, calcMaxLeverage, calcNetStrategyApy, calcPositionLeverage, calcQuotaRate, calcQuotaUpdate, calcRecommendedQuota, calcTimeToLiquidationMs, calcUtilization, calcUtilizationRaw, chains, checkAccountQuotas, checkBorrowLimit, checkCollateralFunding, checkCollateralised, checkCreditAccountFrozen, checkCreditManagerPaused, checkCreditOperation, checkDebtLimits, checkDraw, checkEmergencyLiquidator, checkForbiddenToken, checkHealthFactors, checkLeverage, checkLiquidation, checkLiquidationEligibility, checkLiquidationFunding, checkLiquidatorEligible, checkMarket, checkMarketExpired, checkObtained, checkOperation, checkPoolFunding, checkPoolLiquidity, checkPoolOperation, checkPoolPaused, checkPoolSunset, checkQuotaCount, checkQuotaLimit, checkQuotasAsked, checkRWAOpenRequirements, checkRWAOpening, checkSimulation, checkWallet, checkWalletAllowance, checkWalletBalance, childLogger, classifyCloseOrRepay, classifyCurveOperation, classifyInnerOperations, collateralPriceInUnderlying, collectTraces, createAdapter, createAddressProvider, createPriceOracle, createRawTx, createRedemptionLogger, createRouter, createWithdrawalCompressor, createZapper, abi as creditFacadeV310Abi, curveAddLiquidityFromTransfers, curveRemoveLiquidityFromTransfers, decodeDelayedIntent, detectDelayedClaim, detectDelayedOperation, detectNetwork, dominantCollateral, encodeDelayedIntent, erc4626ReferralAdapterAbi, estimateClaimableAt, estimateRawTxGas, etherscanApiUrl, etherscanUrl, executeDelegatedMulticalls, executeMulticallBatches, expectedBalanceDeltas, fetchCreditAccountSlice, fetchRedstonePayloads, filterDust, filterDustUSD, findCallTo, findCallWithInput, findCuratorMarketConfigurator, findExecuteBytes, fmtBinaryMask, fnSigToName, formatBN, formatBNvalue, formatDuration, formatLeverage, formatNumberToString_, formatPercentage, formatTimestamp, functionArgsToMap, functionArgsToRecord, generateCastTraceCall, getAccountTargetCollateral, getAdapterActionAbi, getAdapterDeployParamsAbi, getAdapterType, getAssetType, getCastTraceArgs, getChain, getCuratorName, getFunctionSignature, getLegacyStrategyTarget, getNetworkType, getRawPriceUpdates, getSimulateWithPriceUpdatesError, getWithdrawalCompressorAddress, halfRAY, hasAdapterDeployParamsAbi, healthFactorBps, hexEq, hydrateAddressProvider, iBalancerV3RouterAbi, iBalancerV3RouterAdapterAbi, iBalancerV3WrapperAbi, iBalancerV3WrapperAdapterAbi, iBaseOnRampAbi, iBaseRewardPoolAbi, iBoosterAbi, iCamelotV3AdapterAbi, iCamelotV3RouterAbi, iConvexV1BaseRewardPoolAdapterAbi, iConvexV1BoosterAdapterAbi, iCreditAccountAbi, iCurvePoolAbi, iCurvePoolStableNGAbi, iCurvePool_2Abi, iCurvePool_3Abi, iCurvePool_4Abi, iCurveV1StableNgAdapterAbi, iCurveV1_2AssetsAdapterAbi, iCurveV1_3AssetsAdapterAbi, iCurveV1_4AssetsAdapterAbi, iDaiUsdsAbi, iDaiUsdsAdapterAbi, iERC4626Abi, iERC4626ReferralAbi, iFluidDexAbi, iFluidDexAdapterAbi, iInfinifiGatewayAbi, iInfinifiGatewayAdapterAbi, iInfinifiUnwindingGatewayAbi, iInfinifiUnwindingGatewayAdapterAbi, iKelpLRTDepositPoolGatewayAbi, iKelpLRTWithdrawalManagerGatewayAbi, iKelpLrtDepositPoolAdapterAbi, iKelpLrtDepositPoolGatewayAbi, iKelpLrtWithdrawalManagerAdapterAbi, iKelpLrtWithdrawalManagerGatewayAbi, iLidoV1AdapterAbi, iMellow4626VaultAdapterAbi, iMellowClaimerAbi, iMellowClaimerAdapterAbi, iMellowWrapperAbi, iMellowWrapperAdapterAbi, iMidasGatewayAdapterV311Abi, iMidasGatewayV311Abi, iMidasIssuanceVaultAdapterV310Abi, iMidasIssuanceVaultV310Abi, iMidasRedemptionVaultAdapterV310Abi, iMidasRedemptionVaultGatewayV310Abi, iPendleRouterAbi, iPendleRouterAdapterAbi, iSecuritizeOnRampAbi, iSecuritizeOnRampAdapterV310Abi, iSecuritizeRedemptionGatewayAdapterV311Abi, iSecuritizeRedemptionGatewayV311Abi, iStakingRewardsAbi, iStakingRewardsAdapterAbi, iTraderJoeRouterAbi, iTraderJoeRouterAdapterAbi, iUniswapV2AdapterAbi, iUniswapV2Router02Abi, iUniswapV3Abi, iUniswapV3AdapterAbi, iUniswapV4AdapterAbi, iUniswapV4GatewayAbi, iUpshiftVaultAdapterAbi, iUpshiftVaultGatewayAbi, iVelodromeV2RouterAbi, iVelodromeV2RouterAdapterAbi, isCloseOrRepay, isDust, isLPPriceFeed, isPhantomToken, isPoolOperation, isPublicNetwork, isRWAFactory, isRWAOperation, isRWAToken, isStrategyCollateral, isSunsetPool, isSunsetStrategy, isSupportedNetwork, isUpdatablePriceFeed, isV310, isVersionRange, isZeroBalance, iwstETHAbi, iwstEthv1AdapterAbi, json_parse, json_stringify, lidoV1_WETHGatewayAbi, makeReplayState, mellowDvvAdapterAbi, minSeizedAmount, numberWithCommas, onchainSDKOptionsSchema, optimalHFForPartialLiquidation, optimalRepaidAmount, parseAdapterAction, parseAdapterDeployParams, parseFacadeOperationCalldata, parseOperationCalldata, parsePoolOperationCalldata, parsePosNegAmount, parseRWAFactoryOperationCalldata, percentFmt, pickStrategyTargetCollateral, previewAdjustStrategyPosition, previewExitOrRepayStrategyPosition, previewOperation, raise, rayToBps, rayToNumber, replayInnerOperations, replayMulticall, resolveDelayedClaimIntent, resolveProtocolCall, retry, rewardsFromTransfers, roundUpQuota, sendRawTx, shortAddress, shortHash, simulateCall, simulateMulticall, simulateWithPriceUpdates, soleNonUnderlyingCollateral, strategyName, swapFromTransfers, toAddress, toBN, toBigInt, toChainIds, toClaimableWithdrawal, toCreditAccountSlice, toNetTransfers, toPendingWithdrawal, toRequestableWithdrawal, toSignificant, toToken, toTokenAmount, toWithdrawalStatus, usdToNumber, watchBlocksAsync };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { accountMigratorAbi } from "../../../../abi/AccountMigrator.js";
|
|
2
1
|
import { AbstractAdapterContract } from "./AbstractAdapter.js";
|
|
2
|
+
import { accountMigratorAbi } from "../../../../abi/AccountMigrator.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";
|
|
2
1
|
import { MissingSerializedParamsError } from "../../../base/errors.js";
|
|
3
2
|
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";
|
|
2
1
|
import { iCreditFacadeMulticallV310Abi, iCreditFacadeV310Abi } from "../../../abi/310/generated.js";
|
|
3
2
|
import { BaseContract } from "../../base/BaseContract.js";
|
|
4
3
|
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,
|
|
@@ -7,6 +7,8 @@ import "../../utils/index.js";
|
|
|
7
7
|
import { SDKConstruct } from "../../base/SDKConstruct.js";
|
|
8
8
|
import "../../base/index.js";
|
|
9
9
|
import { calcBorrowApy, calcQuotaRate, minSeizedAmount, optimalHFForPartialLiquidation, optimalRepaidAmount } from "../math.js";
|
|
10
|
+
import { KYC_REGISTRATION_LINKS } from "../../../model/rwa.js";
|
|
11
|
+
import "../../../model/index.js";
|
|
10
12
|
import { createDegenNFT } from "../rwa/createDegenNFT.js";
|
|
11
13
|
import { strategyName } from "../strategyName.js";
|
|
12
14
|
import { dominantCollateral, isStrategyCollateral, pickStrategyTargetCollateral } from "./collateralUtils.js";
|
|
@@ -123,37 +125,25 @@ var CreditSuite = class extends SDKConstruct {
|
|
|
123
125
|
degenNFT() {
|
|
124
126
|
const address = this.creditFacade.degenNFT;
|
|
125
127
|
if (isAddressEqual(address, "0x0000000000000000000000000000000000000000")) return Promise.resolve(void 0);
|
|
126
|
-
const factoryNft = this.rwaFactory?.degenNFT;
|
|
127
|
-
if (factoryNft && isAddressEqual(factoryNft.address, address)) return Promise.resolve(factoryNft);
|
|
128
128
|
if (!this.#degenNFT) this.#degenNFT = createDegenNFT(this.sdk, address);
|
|
129
129
|
return this.#degenNFT;
|
|
130
130
|
}
|
|
131
131
|
/**
|
|
132
|
-
*
|
|
133
|
-
*
|
|
132
|
+
* What `wallet` still has to do before the facade lets it open an account;
|
|
133
|
+
* `null` when nothing (no degen NFT, not a KYC gate, or already eligible).
|
|
134
134
|
*/
|
|
135
|
-
async kycRequirement(targetCollateral) {
|
|
135
|
+
async kycRequirement(wallet, targetCollateral) {
|
|
136
136
|
const nft = await this.degenNFT();
|
|
137
137
|
if (!nft) return null;
|
|
138
|
-
const
|
|
139
|
-
|
|
138
|
+
const { eligible, token } = await nft.checkKyc(wallet, targetCollateral);
|
|
139
|
+
if (eligible) return null;
|
|
140
140
|
return {
|
|
141
141
|
protocol: nft.protocol,
|
|
142
|
-
token:
|
|
143
|
-
registrationLink: nft.
|
|
142
|
+
token: this.tokensMeta.getToken(token),
|
|
143
|
+
registrationLink: KYC_REGISTRATION_LINKS[nft.protocol]
|
|
144
144
|
};
|
|
145
145
|
}
|
|
146
146
|
/**
|
|
147
|
-
* Whether `wallet` may open this suite's strategy today; `true` when there
|
|
148
|
-
* is no KYC gate.
|
|
149
|
-
*/
|
|
150
|
-
async isEligibleForStrategy(wallet, targetCollateral) {
|
|
151
|
-
const nft = await this.degenNFT();
|
|
152
|
-
if (!nft) return true;
|
|
153
|
-
const requirements = await nft.getOpenAccountRequirements(wallet, { tokenOutAddress: targetCollateral });
|
|
154
|
-
return nft.isRegistered(requirements);
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
147
|
* Builds a transaction that executes a multicall on one of this suite's
|
|
158
148
|
* credit accounts.
|
|
159
149
|
*
|
|
@@ -288,11 +278,11 @@ var CreditSuite = class extends SDKConstruct {
|
|
|
288
278
|
const { pool } = this.market.pool;
|
|
289
279
|
const { maxDebtPerBlockMultiplier, maxDebt } = this.creditFacade;
|
|
290
280
|
if (maxDebtPerBlockMultiplier === 0) return {
|
|
291
|
-
|
|
281
|
+
value: 0n,
|
|
292
282
|
limit: "debtPerBlockLimit"
|
|
293
283
|
};
|
|
294
284
|
const available = pool.creditManagerDebtParams.get(this.creditManager.address)?.available;
|
|
295
|
-
|
|
285
|
+
return [
|
|
296
286
|
{
|
|
297
287
|
value: pool.availableLiquidity,
|
|
298
288
|
limit: "poolAvailableLiquidity"
|
|
@@ -306,10 +296,6 @@ var CreditSuite = class extends SDKConstruct {
|
|
|
306
296
|
limit: "maxDebt"
|
|
307
297
|
}
|
|
308
298
|
].reduce((a, b) => b.value < a.value ? b : a);
|
|
309
|
-
return {
|
|
310
|
-
amount: this.market.toUnderlyingAmount(value),
|
|
311
|
-
limit
|
|
312
|
-
};
|
|
313
299
|
}
|
|
314
300
|
/**
|
|
315
301
|
* The single target collateral of this suite's strategy, or `undefined` when
|
|
@@ -368,7 +354,7 @@ var CreditSuite = class extends SDKConstruct {
|
|
|
368
354
|
* or `undefined` when credit suite does not offer a strategy opportunity.
|
|
369
355
|
*/
|
|
370
356
|
strategyOpportunity() {
|
|
371
|
-
const maxBorrowAmount = this.maxBorrowAmount().
|
|
357
|
+
const maxBorrowAmount = this.maxBorrowAmount().value;
|
|
372
358
|
if (maxBorrowAmount <= MIN_STRATEGY_BORROW_AMOUNT) return;
|
|
373
359
|
const collateral = this.strategyTargetCollateral;
|
|
374
360
|
if (!collateral) return;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { iPausableAbi } from "../../../abi/iPausable.js";
|
|
2
1
|
import { iPoolV310Abi } from "../../../abi/310/generated.js";
|
|
3
2
|
import { AddressMap } from "../../utils/AddressMap.js";
|
|
4
3
|
import { RAY } from "../../constants/math.js";
|
|
@@ -8,6 +7,7 @@ import "../../utils/index.js";
|
|
|
8
7
|
import { SdkRWADataNotLoadedError } from "../../core/errors.js";
|
|
9
8
|
import { BaseContract } from "../../base/BaseContract.js";
|
|
10
9
|
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";
|
|
2
1
|
import { bytes32ToString } from "../../utils/bytes32ToString.js";
|
|
3
2
|
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";
|
|
@@ -5,23 +5,14 @@ import "../../adapters/abi/index.js";
|
|
|
5
5
|
import { iMidasDegenNFTAbi } from "../../../../abi/rwa/iMidasDegenNFT.js";
|
|
6
6
|
import "./constants.js";
|
|
7
7
|
import { iMidasAccessControlAbi } from "../../../../abi/rwa/iMidasAccessControl.js";
|
|
8
|
-
import { KYC_REGISTRATION_LINKS } from "../../../../model/rwa.js";
|
|
9
|
-
import "../../../../model/index.js";
|
|
10
8
|
import { decodeAbiParameters } from "viem";
|
|
11
9
|
//#region src/onchain/market/rwa/midas/MidasDegenNFT.ts
|
|
12
10
|
const abi = iMidasDegenNFTAbi;
|
|
13
|
-
/**
|
|
14
|
-
* Midas is an RWA protocol without a factory: accounts open through the plain
|
|
15
|
-
* facade. Only a Permissioned-mode gateway deploys a degen NFT, so a Midas
|
|
16
|
-
* strategy that does not require KYC has no NFT at all.
|
|
17
|
-
*/
|
|
18
11
|
var MidasDegenNFT = class extends BaseContract {
|
|
19
12
|
protocol = "midas";
|
|
20
|
-
registrationLink = KYC_REGISTRATION_LINKS.midas;
|
|
21
13
|
gateway;
|
|
22
14
|
accessControl;
|
|
23
15
|
greenlistedRole;
|
|
24
|
-
#mToken;
|
|
25
16
|
constructor(sdk, baseParams) {
|
|
26
17
|
super(sdk, {
|
|
27
18
|
...baseParams,
|
|
@@ -39,26 +30,9 @@ var MidasDegenNFT = class extends BaseContract {
|
|
|
39
30
|
this.accessControl = accessControl;
|
|
40
31
|
this.greenlistedRole = greenlistedRole;
|
|
41
32
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Same predicate `MidasDegenNFT.burn` reverts on; the mToken rides along in
|
|
47
|
-
* the batch until it is cached.
|
|
48
|
-
*/
|
|
49
|
-
async getOpenAccountRequirements(wallet, _props) {
|
|
50
|
-
const token = this.#mToken;
|
|
51
|
-
if (token !== void 0) return {
|
|
52
|
-
protocol: "midas",
|
|
53
|
-
token,
|
|
54
|
-
greenlisted: await this.client.readContract({
|
|
55
|
-
abi: iMidasAccessControlAbi,
|
|
56
|
-
address: this.accessControl,
|
|
57
|
-
functionName: "hasRole",
|
|
58
|
-
args: [this.greenlistedRole, wallet]
|
|
59
|
-
})
|
|
60
|
-
};
|
|
61
|
-
const [greenlisted, mToken] = await this.client.multicall({
|
|
33
|
+
/** Same predicate `MidasDegenNFT.burn` reverts on; the mToken rides along in the batch. */
|
|
34
|
+
async checkKyc(wallet, _targetCollateral) {
|
|
35
|
+
const [eligible, token] = await this.client.multicall({
|
|
62
36
|
allowFailure: false,
|
|
63
37
|
contracts: [{
|
|
64
38
|
abi: iMidasAccessControlAbi,
|
|
@@ -71,25 +45,11 @@ var MidasDegenNFT = class extends BaseContract {
|
|
|
71
45
|
functionName: "mToken"
|
|
72
46
|
}]
|
|
73
47
|
});
|
|
74
|
-
this.#mToken = mToken;
|
|
75
48
|
return {
|
|
76
|
-
|
|
77
|
-
token
|
|
78
|
-
greenlisted
|
|
49
|
+
eligible,
|
|
50
|
+
token
|
|
79
51
|
};
|
|
80
52
|
}
|
|
81
|
-
isRegistered(requirements) {
|
|
82
|
-
return requirements.greenlisted;
|
|
83
|
-
}
|
|
84
|
-
getMissingRequirements() {}
|
|
85
|
-
async #mTokenAddress() {
|
|
86
|
-
if (this.#mToken === void 0) this.#mToken = await this.client.readContract({
|
|
87
|
-
abi: iMidasGatewayV311Abi,
|
|
88
|
-
address: this.gateway,
|
|
89
|
-
functionName: "mToken"
|
|
90
|
-
});
|
|
91
|
-
return this.#mToken;
|
|
92
|
-
}
|
|
93
53
|
};
|
|
94
54
|
//#endregion
|
|
95
55
|
export { MidasDegenNFT };
|
|
@@ -1,23 +1,13 @@
|
|
|
1
|
-
import { AddressSet } from "../../../utils/AddressSet.js";
|
|
2
|
-
import "../../../utils/index.js";
|
|
3
1
|
import { BaseContract } from "../../../base/BaseContract.js";
|
|
4
2
|
import "../../../base/index.js";
|
|
5
|
-
import { KYC_REGISTRATION_LINKS } from "../../../../model/rwa.js";
|
|
6
|
-
import "../../../../model/index.js";
|
|
7
3
|
import { DEGEN_NFT_SECURITIZE } from "./constants.js";
|
|
8
4
|
import { iSecuritizeDegenNFTAbi } from "../../../../abi/rwa/iSecuritizeDegenNFT.js";
|
|
5
|
+
import { isAddressEqual } from "viem";
|
|
9
6
|
//#region src/onchain/market/rwa/securitize/SecuritizeDegenNFT.ts
|
|
10
7
|
const abi = iSecuritizeDegenNFTAbi;
|
|
11
|
-
/**
|
|
12
|
-
* Securitize always has a factory, which deploys this NFT. DS-token data,
|
|
13
|
-
* registrars and cached signatures live here; the factory only builds txs
|
|
14
|
-
* and looks up investor/wallet addresses.
|
|
15
|
-
*/
|
|
16
8
|
var SecuritizeDegenNFT = class extends BaseContract {
|
|
17
9
|
protocol = "securitize";
|
|
18
|
-
registrationLink = KYC_REGISTRATION_LINKS.securitize;
|
|
19
10
|
factory;
|
|
20
|
-
#sdk;
|
|
21
11
|
constructor(sdk, address, factory) {
|
|
22
12
|
super(sdk, {
|
|
23
13
|
addr: address,
|
|
@@ -26,54 +16,19 @@ var SecuritizeDegenNFT = class extends BaseContract {
|
|
|
26
16
|
name: "SecuritizeDegenNFT",
|
|
27
17
|
abi
|
|
28
18
|
});
|
|
29
|
-
this.#sdk = sdk;
|
|
30
19
|
this.factory = factory;
|
|
31
20
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
*/
|
|
39
|
-
async getOpenAccountRequirements(wallet, props) {
|
|
40
|
-
const tokensToRegister = new AddressSet(this.factory.getTokens()).has(props.tokenOutAddress) ? new AddressSet([props.tokenOutAddress]) : new AddressSet();
|
|
41
|
-
if (tokensToRegister.size === 0) return {
|
|
42
|
-
protocol: "securitize",
|
|
43
|
-
factory: this.factory.address,
|
|
44
|
-
securitizeTokensToRegister: [],
|
|
45
|
-
tokensToRegister: [],
|
|
46
|
-
requiredSignatures: []
|
|
47
|
-
};
|
|
48
|
-
const [investorData] = await this.#sdk.rwa.getInvestorData(wallet, [this.factory.address]);
|
|
49
|
-
const registredTokens = new AddressSet(investorData.registeredTokens);
|
|
50
|
-
const signedTokens = new AddressSet(investorData.cachedSignatures.map((s) => s.token));
|
|
51
|
-
const unsignedTokens = tokensToRegister.difference(signedTokens);
|
|
52
|
-
const securitizeTokensToRegister = tokensToRegister.difference(registredTokens);
|
|
53
|
-
const requiredSignatures = investorData.registerVaultMessages.filter((m) => unsignedTokens.has(m.message.token));
|
|
54
|
-
return {
|
|
55
|
-
protocol: "securitize",
|
|
56
|
-
factory: this.factory.address,
|
|
57
|
-
securitizeTokensToRegister: Array.from(securitizeTokensToRegister),
|
|
58
|
-
tokensToRegister: Array.from(tokensToRegister),
|
|
59
|
-
requiredSignatures
|
|
21
|
+
/** Registration on Securitize is the only KYC step; pending EIP-712 signatures are not. */
|
|
22
|
+
async checkKyc(wallet, targetCollateral) {
|
|
23
|
+
const { factory } = this;
|
|
24
|
+
if (!factory.getTokens().some((t) => isAddressEqual(t, targetCollateral))) return {
|
|
25
|
+
eligible: true,
|
|
26
|
+
token: targetCollateral
|
|
60
27
|
};
|
|
61
|
-
|
|
62
|
-
isRegistered(requirements) {
|
|
63
|
-
return requirements.securitizeTokensToRegister.length === 0;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* A required signature is omitted when `providedArgs.signaturesToCache`
|
|
67
|
-
* already carries a signature for the same token: the transaction caches it
|
|
68
|
-
* on-chain as part of the operation.
|
|
69
|
-
*/
|
|
70
|
-
getMissingRequirements(requirements, providedArgs) {
|
|
71
|
-
const providedTokens = new AddressSet((providedArgs?.signaturesToCache ?? []).map((s) => s.token));
|
|
72
|
-
const requiredSignatures = requirements.requiredSignatures.filter((message) => !providedTokens.has(message.message.token));
|
|
73
|
-
if (requiredSignatures.length === 0) return;
|
|
28
|
+
const req = await factory.getOpenAccountRequirements(wallet, { tokenOutAddress: targetCollateral });
|
|
74
29
|
return {
|
|
75
|
-
|
|
76
|
-
|
|
30
|
+
eligible: !req || req.securitizeTokensToRegister.length === 0,
|
|
31
|
+
token: req?.securitizeTokensToRegister[0] ?? targetCollateral
|
|
77
32
|
};
|
|
78
33
|
}
|
|
79
34
|
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { AddressMap } from "../../../utils/AddressMap.js";
|
|
2
|
+
import { AddressSet } from "../../../utils/AddressSet.js";
|
|
2
3
|
import "../../../utils/index.js";
|
|
3
4
|
import { BaseContract } from "../../../base/BaseContract.js";
|
|
4
5
|
import "../../../base/index.js";
|
|
@@ -10,6 +11,7 @@ import { decodeAbiParameters } from "viem";
|
|
|
10
11
|
//#region src/onchain/market/rwa/securitize/SecuritizeRWAFactory.ts
|
|
11
12
|
const abi = iSecuritizeRWAFactoryAbi;
|
|
12
13
|
var SecuritizeRWAFactory = class extends BaseContract {
|
|
14
|
+
#sdk;
|
|
13
15
|
#investorCache = new AddressMap();
|
|
14
16
|
degenNFT;
|
|
15
17
|
owner;
|
|
@@ -21,6 +23,7 @@ var SecuritizeRWAFactory = class extends BaseContract {
|
|
|
21
23
|
name: "SecuritizeRWAFactory",
|
|
22
24
|
abi
|
|
23
25
|
});
|
|
26
|
+
this.#sdk = sdk;
|
|
24
27
|
const decoded = decodeAbiParameters([
|
|
25
28
|
{
|
|
26
29
|
name: "owner",
|
|
@@ -181,6 +184,40 @@ var SecuritizeRWAFactory = class extends BaseContract {
|
|
|
181
184
|
});
|
|
182
185
|
}
|
|
183
186
|
/**
|
|
187
|
+
* {@inheritDoc IRWAFactory.getOpenAccountRequirements}
|
|
188
|
+
*/
|
|
189
|
+
async getOpenAccountRequirements(investor, props) {
|
|
190
|
+
const [investorData] = await this.#sdk.rwa.getInvestorData(investor, [this.address]);
|
|
191
|
+
const tokensToRegister = new AddressSet([props.tokenOutAddress]);
|
|
192
|
+
const registredTokens = new AddressSet(investorData.registeredTokens);
|
|
193
|
+
const signedTokens = new AddressSet(investorData.cachedSignatures.map((s) => s.token));
|
|
194
|
+
const unsignedTokens = tokensToRegister.difference(signedTokens);
|
|
195
|
+
const securitizeTokensToRegister = tokensToRegister.difference(registredTokens);
|
|
196
|
+
const requiredSignatures = investorData.registerVaultMessages.filter((m) => unsignedTokens.has(m.message.token));
|
|
197
|
+
return {
|
|
198
|
+
type: RWA_FACTORY_SECURITIZE,
|
|
199
|
+
securitizeTokensToRegister: Array.from(securitizeTokensToRegister),
|
|
200
|
+
tokensToRegister: Array.from(tokensToRegister),
|
|
201
|
+
requiredSignatures
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* {@inheritDoc IRWAFactory.getMissingRequirements}
|
|
206
|
+
*
|
|
207
|
+
* A required signature is omitted when `providedArgs.signaturesToCache`
|
|
208
|
+
* already carries a signature for the same token: the transaction caches it
|
|
209
|
+
* on-chain as part of the operation.
|
|
210
|
+
*/
|
|
211
|
+
getMissingRequirements(requirements, providedArgs) {
|
|
212
|
+
const providedTokens = new AddressSet((providedArgs?.signaturesToCache ?? []).map((s) => s.token));
|
|
213
|
+
const requiredSignatures = requirements.requiredSignatures.filter((message) => !providedTokens.has(message.message.token));
|
|
214
|
+
if (requiredSignatures.length === 0) return;
|
|
215
|
+
return {
|
|
216
|
+
type: RWA_FACTORY_SECURITIZE,
|
|
217
|
+
requiredSignatures
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
184
221
|
* {@inheritDoc IRWAFactory.openCreditAccount}
|
|
185
222
|
*/
|
|
186
223
|
openCreditAccount(creditManager, calls, args) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { iethZapperAbi } from "../../../abi/iETHZapper.js";
|
|
2
1
|
import { ZapperContract } from "./ZapperContract.js";
|
|
2
|
+
import { iethZapperAbi } from "../../../abi/iETHZapper.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";
|
|
2
1
|
import { BaseContract } from "../../base/BaseContract.js";
|
|
3
2
|
import "../../base/index.js";
|
|
4
3
|
import { sdkErr, sdkOk } from "../../../model/result.js";
|
|
5
4
|
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.
|
|
@@ -37,18 +37,12 @@ var MultichainOpportunitiesService = class extends MultichainConstruct {
|
|
|
37
37
|
*
|
|
38
38
|
* See {@link MultichainOpportunitiesService.getPool}.
|
|
39
39
|
**/
|
|
40
|
-
async getStrategy(key) {
|
|
40
|
+
async getStrategy(key, wallet) {
|
|
41
41
|
return this.queryChain({
|
|
42
42
|
network: key.chainId,
|
|
43
|
-
run: (sdk) => sdk.opportunities.getStrategy(key)
|
|
43
|
+
run: (sdk) => sdk.opportunities.getStrategy(key, wallet)
|
|
44
44
|
});
|
|
45
45
|
}
|
|
46
|
-
/**
|
|
47
|
-
* {@inheritDoc OpportunitiesService.isEligibleForStrategy}
|
|
48
|
-
**/
|
|
49
|
-
async isEligibleForStrategy(key, wallet) {
|
|
50
|
-
return this.sdk.chain(key.chainId).opportunities.isEligibleForStrategy(key, wallet);
|
|
51
|
-
}
|
|
52
46
|
};
|
|
53
47
|
//#endregion
|
|
54
48
|
export { MultichainOpportunitiesService };
|
|
@@ -36,34 +36,22 @@ var OpportunitiesService = class extends SDKConstruct {
|
|
|
36
36
|
* A single strategy opportunity plus the rate curve of the pool it borrows
|
|
37
37
|
* from and the price feeds its liquidation price depends on.
|
|
38
38
|
*
|
|
39
|
-
*
|
|
39
|
+
* @param wallet - When given, `kyc` says whether this wallet must register
|
|
40
|
+
* with the strategy's KYC provider first; `null` otherwise.
|
|
40
41
|
*
|
|
41
42
|
* @throws If the credit manager is unknown, or does not currently offer a
|
|
42
43
|
* strategy.
|
|
43
44
|
**/
|
|
44
|
-
async getStrategy(key) {
|
|
45
|
+
async getStrategy(key, wallet) {
|
|
45
46
|
const suite = this.sdk.marketRegister.findCreditManager(key.creditManager);
|
|
46
47
|
const detail = suite.strategyOpportunityDetail();
|
|
47
48
|
if (!detail) throw new Error(`credit manager ${key.creditManager} does not currently offer a strategy`);
|
|
48
|
-
const kyc = await suite.kycRequirement(detail.targetCollateral.address);
|
|
49
|
+
const kyc = wallet ? await suite.kycRequirement(wallet, detail.targetCollateral.address) : null;
|
|
49
50
|
return {
|
|
50
51
|
...detail,
|
|
51
52
|
kyc
|
|
52
53
|
};
|
|
53
54
|
}
|
|
54
|
-
/**
|
|
55
|
-
* Whether `wallet` may open this strategy today: `true` when it is not
|
|
56
|
-
* KYC-gated or the wallet already passed the gate.
|
|
57
|
-
*
|
|
58
|
-
* @throws If the credit manager is unknown, or does not currently offer a
|
|
59
|
-
* strategy.
|
|
60
|
-
**/
|
|
61
|
-
async isEligibleForStrategy(key, wallet) {
|
|
62
|
-
const suite = this.sdk.marketRegister.findCreditManager(key.creditManager);
|
|
63
|
-
const opportunity = suite.strategyOpportunity();
|
|
64
|
-
if (!opportunity) throw new Error(`credit manager ${key.creditManager} does not currently offer a strategy`);
|
|
65
|
-
return suite.isEligibleForStrategy(wallet, opportunity.targetCollateral.address);
|
|
66
|
-
}
|
|
67
55
|
};
|
|
68
56
|
//#endregion
|
|
69
57
|
export { OpportunitiesService };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { hexEq } from "../../utils/hex.js";
|
|
2
2
|
import { AbstractAdapterContract } from "../../market/adapters/contracts/AbstractAdapter.js";
|
|
3
3
|
import { CreditFacadeV310Contract } from "../../market/credit/CreditFacadeV310Contract.js";
|
|
4
|
-
import "../../../model/rwa.js";
|
|
4
|
+
import { RWA_FACTORY_SECURITIZE } from "../../../model/rwa.js";
|
|
5
5
|
import "../../../model/index.js";
|
|
6
6
|
import { isRWAFactory } from "../../market/rwa/types.js";
|
|
7
7
|
import { classifyInnerOperations } from "./classifyInnerOperations.js";
|
|
@@ -32,7 +32,7 @@ function parseSecuritizeOperationCalldata(sdk, factory, calldata) {
|
|
|
32
32
|
const { rawArgs } = parsed;
|
|
33
33
|
const innerCalls = rawArgs.calls ?? [];
|
|
34
34
|
const args = {
|
|
35
|
-
|
|
35
|
+
type: RWA_FACTORY_SECURITIZE,
|
|
36
36
|
tokensToRegister: [...rawArgs.tokensToRegister ?? []],
|
|
37
37
|
signaturesToCache: [...rawArgs.signaturesToCache ?? []]
|
|
38
38
|
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { ierc20Abi } from "../../../abi/iERC20.js";
|
|
2
|
-
import { iZapperAbi } from "../../../abi/iZapper.js";
|
|
3
1
|
import { iPoolV310Abi } from "../../../abi/310/generated.js";
|
|
2
|
+
import { ierc20Abi } from "../../../abi/iERC20.js";
|
|
4
3
|
import { sdkErr, sdkOk } from "../../../model/result.js";
|
|
5
4
|
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) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { errorAbis } from "../../../abi/errors.js";
|
|
2
|
-
import { iUpdatablePriceFeedAbi } from "../../../abi/iUpdatablePriceFeed.js";
|
|
3
2
|
import { generateCastTraceCall } from "./cast.js";
|
|
3
|
+
import { iUpdatablePriceFeedAbi } from "../../../abi/iUpdatablePriceFeed.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";
|
|
@@ -4,11 +4,11 @@ import { checkDebtLimits } from "../checks/checkDebtLimits.js";
|
|
|
4
4
|
import "../checks/index.js";
|
|
5
5
|
import { checkAccountQuotas } from "./checkAccountQuotas.js";
|
|
6
6
|
import { checkCollateralFunding } from "./checkCollateralFunding.js";
|
|
7
|
+
import { checkDraw } from "./checkDraw.js";
|
|
7
8
|
import { checkHealthFactors } from "./checkHealthFactors.js";
|
|
8
|
-
import { checkIncreaseDebt } from "./checkIncreaseDebt.js";
|
|
9
|
-
import { checkIncreaseQuota } from "./checkIncreaseQuota.js";
|
|
10
9
|
import { checkMarket } from "./checkMarket.js";
|
|
11
10
|
import { checkObtained } from "./checkObtained.js";
|
|
11
|
+
import { checkQuotasAsked } from "./checkQuotasAsked.js";
|
|
12
12
|
import { checkRWAOpening } from "./checkRWAOpening.js";
|
|
13
13
|
//#region src/onchain/validation/bundles/checkCreditOperation.ts
|
|
14
14
|
/**
|
|
@@ -16,9 +16,8 @@ import { checkRWAOpening } from "./checkRWAOpening.js";
|
|
|
16
16
|
* has to hold, approve or sign.
|
|
17
17
|
*
|
|
18
18
|
* The array is in check order, most fundamental first: the market's own state,
|
|
19
|
-
* then what the facade would revert on, then what the operation
|
|
20
|
-
*
|
|
21
|
-
* side.
|
|
19
|
+
* then what the facade would revert on, then what the operation asks the
|
|
20
|
+
* market for, then the account it leaves behind, and last the wallet's side.
|
|
22
21
|
*/
|
|
23
22
|
async function checkCreditOperation(args) {
|
|
24
23
|
const { sdk, preview, sender, blockNumber, ...thresholds } = args;
|
|
@@ -34,12 +33,12 @@ async function checkCreditOperation(args) {
|
|
|
34
33
|
maxDebt: suite.creditFacade.maxDebt,
|
|
35
34
|
underlying,
|
|
36
35
|
allowZero: !isOpening,
|
|
37
|
-
|
|
36
|
+
ceiling: suite.maxBorrowAmount()
|
|
38
37
|
}),
|
|
39
|
-
...
|
|
38
|
+
...checkDraw(suite, preview, underlying),
|
|
40
39
|
...checkObtained(suite, preview),
|
|
41
40
|
...checkAccountQuotas(suite, preview),
|
|
42
|
-
...
|
|
41
|
+
...checkQuotasAsked(market, preview, underlying),
|
|
43
42
|
...checkHealthFactors({
|
|
44
43
|
totalDebt: preview.totalDebt,
|
|
45
44
|
healthFactor: preview.estHealthFactor,
|
|
@@ -51,7 +50,7 @@ async function checkCreditOperation(args) {
|
|
|
51
50
|
preview,
|
|
52
51
|
sender,
|
|
53
52
|
blockNumber
|
|
54
|
-
}), preview.operation === "
|
|
53
|
+
}), preview.operation === "RWAOpenCreditAccount" ? checkRWAOpening({
|
|
55
54
|
sdk,
|
|
56
55
|
preview,
|
|
57
56
|
sender
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { checkBorrowLimit } from "../checks/checkBorrowLimit.js";
|
|
2
|
+
import "../checks/index.js";
|
|
3
|
+
//#region src/onchain/validation/bundles/checkDraw.ts
|
|
4
|
+
/**
|
|
5
|
+
* What the transaction draws, against what the market can lend right now.
|
|
6
|
+
*
|
|
7
|
+
* Only a draw is weighed: repaying, or leaving the debt alone, can never exceed
|
|
8
|
+
* a ceiling. Opening borrows the whole debt; adjusting borrows
|
|
9
|
+
* `totalDebtChange`.
|
|
10
|
+
*
|
|
11
|
+
* The engine holds every simulation to this already (`assertCanBorrow`), so
|
|
12
|
+
* this is here for the transactions it never saw — a pasted calldata reaches
|
|
13
|
+
* the confirm screen with nothing else standing between it and a revert.
|
|
14
|
+
*/
|
|
15
|
+
function checkDraw(suite, preview, underlying) {
|
|
16
|
+
const drawn = preview.operation === "AdjustCreditAccount" ? preview.totalDebtChange.value : preview.totalDebt.value;
|
|
17
|
+
if (drawn <= 0n) return [];
|
|
18
|
+
const { value, limit } = suite.maxBorrowAmount();
|
|
19
|
+
return checkBorrowLimit({
|
|
20
|
+
requested: drawn,
|
|
21
|
+
available: value,
|
|
22
|
+
limit,
|
|
23
|
+
underlying
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
export { checkDraw };
|