@gearbox-protocol/sdk 15.1.0-next.1 → 15.1.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/abi/iExpirable.js +15 -0
- package/dist/cjs/common-utils/utils/apy/get-single-quota-borrow-rate.js +2 -0
- package/dist/cjs/common-utils/utils/creditAccount/calc-health-factor.js +24 -22
- package/dist/cjs/common-utils/utils/creditAccount/calc-quota-borrow-rate.js +2 -0
- package/dist/cjs/common-utils/utils/creditAccount/get-time-to-liquidation.js +8 -5
- package/dist/cjs/common-utils/utils/creditAccount/liquidation-price.js +21 -11
- package/dist/cjs/dev/AccountOpener.js +0 -1
- package/dist/cjs/dev/compareOpportunities.js +137 -0
- package/dist/cjs/dev/comparePositions.js +183 -0
- package/dist/cjs/dev/fieldDiff.js +241 -0
- package/dist/cjs/model/charts.js +147 -0
- package/dist/cjs/model/charts.schema.js +240 -0
- package/dist/cjs/model/index.js +35 -22
- package/dist/cjs/model/liquidations.schema.js +1 -1
- package/dist/cjs/model/notices.schema.js +25 -0
- package/dist/cjs/model/opportunities.schema.js +1 -1
- package/dist/cjs/model/positions.schema.js +48 -2
- package/dist/cjs/new-sdk/AbstractNamespace.js +34 -4
- package/dist/cjs/new-sdk/GearboxSDK.js +72 -3
- package/dist/cjs/new-sdk/execute/ExecuteApi.js +95 -0
- package/dist/cjs/new-sdk/execute/index.js +3 -0
- package/dist/cjs/new-sdk/index.js +7 -0
- package/dist/cjs/new-sdk/opportunities/OpportunitiesNamespace.js +29 -6
- package/dist/cjs/new-sdk/positions/PositionsNamespace.js +3 -6
- package/dist/cjs/new-sdk/simulate/SimulateApi.js +361 -0
- package/dist/cjs/new-sdk/simulate/index.js +4 -0
- package/dist/cjs/new-sdk/utils/index.js +0 -1
- package/dist/cjs/offchain/AbstractOffchainNamespace.js +10 -7
- package/dist/cjs/offchain/GearboxAPI.js +7 -0
- package/dist/cjs/offchain/index.js +3 -0
- package/dist/cjs/offchain/notices/OffchainNotices.js +27 -0
- package/dist/cjs/offchain/notices/index.js +3 -0
- package/dist/cjs/offchain/opportunities/OffchainOpportunities.js +4 -8
- package/dist/cjs/offchain/positions/OffchainPositions.js +12 -12
- package/dist/cjs/preview/preview/CreditAccountState.js +14 -1
- package/dist/cjs/preview/preview/buildDelayedPreview.js +16 -6
- package/dist/cjs/preview/preview/previewAdjustCreditAccount.js +9 -2
- package/dist/cjs/preview/preview/previewOpenCreditAccount.js +11 -3
- package/dist/cjs/preview/preview/previewOperation.js +1 -1
- package/dist/cjs/sdk/MultichainSDK.js +3 -4
- package/dist/cjs/sdk/OnchainSDK.js +42 -13
- package/dist/cjs/sdk/accounts/CreditAccountsServiceV310.js +2 -8
- package/dist/cjs/sdk/accounts/credit-account-compressor/CreditAccountCompressor.js +2 -90
- package/dist/cjs/sdk/accounts/index.js +5 -2
- package/dist/cjs/sdk/accounts/intents/guards.js +114 -0
- package/dist/cjs/sdk/accounts/intents/index.js +216 -358
- package/dist/cjs/sdk/accounts/intents/math.js +56 -0
- package/dist/cjs/sdk/accounts/intents/open-strategy.js +133 -0
- package/dist/cjs/sdk/accounts/intents/operations.js +165 -0
- package/dist/cjs/sdk/accounts/intents/plan.js +373 -0
- package/dist/cjs/sdk/accounts/intents/realize.js +301 -0
- package/dist/cjs/sdk/accounts/intents/testing/delayed.js +50 -0
- package/dist/cjs/sdk/accounts/intents/testing/market.js +166 -0
- package/dist/cjs/sdk/accounts/intents/testing/sdk-mock.js +194 -35
- package/dist/cjs/sdk/accounts/intents/tests/add-collateral.fixtures.js +123 -0
- package/dist/cjs/sdk/accounts/intents/tests/adjust-leverage.fixtures.js +254 -0
- package/dist/cjs/sdk/accounts/intents/tests/deposit.fixtures.js +324 -0
- package/dist/cjs/sdk/accounts/intents/tests/finish-decrease-leverage.fixtures.js +242 -0
- package/dist/cjs/sdk/accounts/intents/tests/finish-withdraw.fixtures.js +383 -0
- package/dist/cjs/sdk/accounts/intents/tests/open-strategy.fixtures.js +133 -0
- package/dist/cjs/sdk/accounts/intents/tests/withdraw-asset.fixtures.js +131 -0
- package/dist/cjs/sdk/accounts/intents/tests/withdraw.fixtures.js +426 -0
- package/dist/cjs/sdk/accounts/intents/types.js +16 -0
- package/dist/cjs/sdk/accounts/intents/utils/adjust-state-to-snapshot.js +18 -0
- package/dist/cjs/sdk/accounts/intents/utils/credit-account-slice.js +45 -0
- package/dist/cjs/sdk/accounts/intents/utils/index.js +17 -8
- package/dist/cjs/sdk/accounts/intents/utils/ledger.js +94 -0
- package/dist/cjs/sdk/accounts/intents/utils/pick-token.js +72 -0
- package/dist/cjs/sdk/accounts/intents/utils/quotas-for-update.js +27 -0
- package/dist/cjs/sdk/accounts/intents/utils/router-path.js +86 -0
- package/dist/cjs/sdk/accounts/intents/view.js +38 -0
- package/dist/cjs/sdk/accounts/liquidations/LiquidationsService.js +0 -3
- package/dist/cjs/sdk/accounts/withdrawal-compressor/AbstractWithdrawalCompressorContract.js +29 -18
- package/dist/cjs/sdk/base/BaseContract.js +1 -1
- package/dist/cjs/sdk/base/TokensMeta.js +78 -27
- package/dist/cjs/sdk/index.js +30 -7
- package/dist/cjs/sdk/market/MarketRegister.js +16 -7
- package/dist/cjs/sdk/market/ZapperRegister.js +56 -25
- package/dist/cjs/sdk/market/credit/CreditManagerV310Contract.js +1 -12
- package/dist/cjs/sdk/market/credit/CreditSuite.js +28 -9
- package/dist/cjs/sdk/market/credit/index.js +3 -0
- package/dist/cjs/sdk/market/credit/isStrategyCollateral.js +50 -0
- package/dist/cjs/sdk/market/index.js +17 -0
- package/dist/cjs/sdk/market/math.js +65 -45
- package/dist/cjs/sdk/market/oracle/PriceOracleBaseContract.js +10 -3
- package/dist/cjs/sdk/market/pool/PoolV310Contract.js +15 -1
- package/dist/cjs/sdk/market/rwa/RWARegistry.js +22 -0
- package/dist/cjs/sdk/opportunities/index.js +0 -13
- package/dist/cjs/sdk/options.js +1 -5
- package/dist/cjs/sdk/pools/PoolService.js +133 -4
- package/dist/cjs/sdk/pools/index.js +2 -0
- package/dist/cjs/sdk/positions/PositionsService.js +218 -1
- package/dist/cjs/sdk/positions/calcBorrowRate.js +43 -0
- package/dist/cjs/sdk/positions/calcHealthFactor.js +52 -0
- package/dist/cjs/sdk/positions/calcLiquidationPrice.js +23 -0
- package/dist/cjs/sdk/positions/calcLiquidationPriceForTarget.js +30 -0
- package/dist/cjs/sdk/positions/calcTimeToLiquidationMs.js +19 -0
- package/dist/cjs/sdk/positions/index.js +12 -1
- package/dist/cjs/sdk/positions/types.js +31 -0
- package/dist/cjs/sdk/utils/abi-decode.js +2 -2
- package/dist/cjs/sdk/utils/viem/executeMulticallBatches.js +32 -0
- package/dist/cjs/sdk/utils/viem/index.js +2 -0
- package/dist/esm/abi/iExpirable.js +14 -0
- package/dist/esm/common-utils/utils/apy/get-single-quota-borrow-rate.js +2 -0
- package/dist/esm/common-utils/utils/creditAccount/calc-health-factor.js +24 -22
- package/dist/esm/common-utils/utils/creditAccount/calc-quota-borrow-rate.js +2 -0
- package/dist/esm/common-utils/utils/creditAccount/get-time-to-liquidation.js +8 -5
- package/dist/esm/common-utils/utils/creditAccount/liquidation-price.js +21 -11
- package/dist/esm/dev/AccountOpener.js +0 -1
- package/dist/esm/dev/compareOpportunities.js +135 -0
- package/dist/esm/dev/comparePositions.js +181 -0
- package/dist/esm/dev/fieldDiff.js +224 -0
- package/dist/esm/model/charts.js +140 -0
- package/dist/esm/model/charts.schema.js +226 -0
- package/dist/esm/model/index.js +9 -7
- package/dist/esm/model/liquidations.schema.js +1 -1
- package/dist/esm/model/notices.schema.js +23 -0
- package/dist/esm/model/opportunities.schema.js +1 -1
- package/dist/esm/model/positions.schema.js +46 -4
- package/dist/esm/new-sdk/AbstractNamespace.js +34 -4
- package/dist/esm/new-sdk/GearboxSDK.js +72 -4
- package/dist/esm/new-sdk/execute/ExecuteApi.js +94 -0
- package/dist/esm/new-sdk/execute/index.js +2 -0
- package/dist/esm/new-sdk/index.js +6 -2
- package/dist/esm/new-sdk/opportunities/OpportunitiesNamespace.js +29 -6
- package/dist/esm/new-sdk/positions/PositionsNamespace.js +3 -6
- package/dist/esm/new-sdk/simulate/SimulateApi.js +360 -0
- package/dist/esm/new-sdk/simulate/index.js +3 -0
- package/dist/esm/new-sdk/utils/index.js +0 -1
- package/dist/esm/offchain/AbstractOffchainNamespace.js +10 -7
- package/dist/esm/offchain/GearboxAPI.js +7 -0
- package/dist/esm/offchain/index.js +3 -1
- package/dist/esm/offchain/notices/OffchainNotices.js +26 -0
- package/dist/esm/offchain/notices/index.js +2 -0
- package/dist/esm/offchain/opportunities/OffchainOpportunities.js +4 -8
- package/dist/esm/offchain/positions/OffchainPositions.js +12 -12
- package/dist/esm/preview/preview/CreditAccountState.js +14 -1
- package/dist/esm/preview/preview/buildDelayedPreview.js +16 -6
- package/dist/esm/preview/preview/previewAdjustCreditAccount.js +9 -2
- package/dist/esm/preview/preview/previewOpenCreditAccount.js +11 -3
- package/dist/esm/preview/preview/previewOperation.js +1 -1
- package/dist/esm/sdk/MultichainSDK.js +3 -4
- package/dist/esm/sdk/OnchainSDK.js +42 -13
- package/dist/esm/sdk/accounts/CreditAccountsServiceV310.js +2 -8
- package/dist/esm/sdk/accounts/credit-account-compressor/CreditAccountCompressor.js +2 -90
- package/dist/esm/sdk/accounts/index.js +3 -2
- package/dist/esm/sdk/accounts/intents/guards.js +108 -0
- package/dist/esm/sdk/accounts/intents/index.js +214 -358
- package/dist/esm/sdk/accounts/intents/math.js +51 -0
- package/dist/esm/sdk/accounts/intents/open-strategy.js +132 -0
- package/dist/esm/sdk/accounts/intents/operations.js +153 -0
- package/dist/esm/sdk/accounts/intents/plan.js +361 -0
- package/dist/esm/sdk/accounts/intents/realize.js +300 -0
- package/dist/esm/sdk/accounts/intents/testing/delayed.js +38 -0
- package/dist/esm/sdk/accounts/intents/testing/market.js +148 -0
- package/dist/esm/sdk/accounts/intents/testing/sdk-mock.js +194 -35
- package/dist/esm/sdk/accounts/intents/tests/add-collateral.fixtures.js +110 -0
- package/dist/esm/sdk/accounts/intents/tests/adjust-leverage.fixtures.js +234 -0
- package/dist/esm/sdk/accounts/intents/tests/deposit.fixtures.js +302 -0
- package/dist/esm/sdk/accounts/intents/tests/finish-decrease-leverage.fixtures.js +220 -0
- package/dist/esm/sdk/accounts/intents/tests/finish-withdraw.fixtures.js +355 -0
- package/dist/esm/sdk/accounts/intents/tests/open-strategy.fixtures.js +119 -0
- package/dist/esm/sdk/accounts/intents/tests/withdraw-asset.fixtures.js +117 -0
- package/dist/esm/sdk/accounts/intents/tests/withdraw.fixtures.js +402 -0
- package/dist/esm/sdk/accounts/intents/types.js +16 -1
- package/dist/esm/sdk/accounts/intents/utils/adjust-state-to-snapshot.js +17 -0
- package/dist/esm/sdk/accounts/intents/utils/credit-account-slice.js +43 -0
- package/dist/esm/sdk/accounts/intents/utils/index.js +9 -7
- package/dist/esm/sdk/accounts/intents/utils/ledger.js +93 -0
- package/dist/esm/sdk/accounts/intents/utils/pick-token.js +68 -0
- package/dist/esm/sdk/accounts/intents/utils/quotas-for-update.js +27 -1
- package/dist/esm/sdk/accounts/intents/utils/router-path.js +85 -0
- package/dist/esm/sdk/accounts/intents/view.js +37 -0
- package/dist/esm/sdk/accounts/liquidations/LiquidationsService.js +0 -3
- package/dist/esm/sdk/accounts/withdrawal-compressor/AbstractWithdrawalCompressorContract.js +29 -18
- package/dist/esm/sdk/base/BaseContract.js +1 -1
- package/dist/esm/sdk/base/TokensMeta.js +78 -27
- package/dist/esm/sdk/index.js +13 -4
- package/dist/esm/sdk/market/MarketRegister.js +16 -7
- package/dist/esm/sdk/market/ZapperRegister.js +56 -25
- package/dist/esm/sdk/market/credit/CreditManagerV310Contract.js +2 -13
- package/dist/esm/sdk/market/credit/CreditSuite.js +29 -10
- package/dist/esm/sdk/market/credit/index.js +2 -1
- package/dist/esm/sdk/market/credit/isStrategyCollateral.js +48 -0
- package/dist/esm/sdk/market/index.js +3 -1
- package/dist/esm/sdk/market/math.js +60 -41
- package/dist/esm/sdk/market/oracle/PriceOracleBaseContract.js +10 -3
- package/dist/esm/sdk/market/pool/PoolV310Contract.js +16 -2
- package/dist/esm/sdk/market/rwa/RWARegistry.js +22 -0
- package/dist/esm/sdk/opportunities/index.js +1 -2
- package/dist/esm/sdk/options.js +1 -5
- package/dist/esm/sdk/pools/PoolService.js +133 -6
- package/dist/esm/sdk/pools/index.js +2 -2
- package/dist/esm/sdk/positions/PositionsService.js +218 -1
- package/dist/esm/sdk/positions/calcBorrowRate.js +42 -0
- package/dist/esm/sdk/positions/calcHealthFactor.js +51 -0
- package/dist/esm/sdk/positions/calcLiquidationPrice.js +22 -0
- package/dist/esm/sdk/positions/calcLiquidationPriceForTarget.js +29 -0
- package/dist/esm/sdk/positions/calcTimeToLiquidationMs.js +18 -0
- package/dist/esm/sdk/positions/index.js +7 -2
- package/dist/esm/sdk/positions/types.js +31 -1
- package/dist/esm/sdk/utils/abi-decode.js +2 -2
- package/dist/esm/sdk/utils/viem/executeMulticallBatches.js +31 -0
- package/dist/esm/sdk/utils/viem/index.js +2 -1
- package/dist/types/abi/iExpirable.d.ts +14 -0
- package/dist/types/common-utils/utils/apy/get-single-quota-borrow-rate.d.ts +2 -0
- package/dist/types/common-utils/utils/creditAccount/calc-health-factor.d.ts +3 -0
- package/dist/types/common-utils/utils/creditAccount/calc-quota-borrow-rate.d.ts +2 -0
- package/dist/types/common-utils/utils/creditAccount/get-time-to-liquidation.d.ts +6 -1
- package/dist/types/common-utils/utils/creditAccount/liquidation-price.d.ts +3 -0
- package/dist/types/dev/compareOpportunities.d.ts +105 -0
- package/dist/types/dev/comparePositions.d.ts +149 -0
- package/dist/types/dev/fieldDiff.d.ts +167 -0
- package/dist/types/model/charts.d.ts +349 -0
- package/dist/types/model/charts.schema.d.ts +364 -0
- package/dist/types/model/index.d.ts +8 -6
- package/dist/types/model/notices.d.ts +29 -0
- package/dist/types/model/notices.schema.d.ts +23 -0
- package/dist/types/model/opportunities.d.ts +9 -9
- package/dist/types/model/positions.d.ts +133 -7
- package/dist/types/model/positions.schema.d.ts +128 -1
- package/dist/types/new-sdk/AbstractNamespace.d.ts +15 -2
- package/dist/types/new-sdk/GearboxSDK.d.ts +14 -2
- package/dist/types/new-sdk/execute/ExecuteApi.d.ts +108 -0
- package/dist/types/new-sdk/execute/index.d.ts +2 -0
- package/dist/types/new-sdk/index.d.ts +8 -4
- package/dist/types/new-sdk/opportunities/OpportunitiesNamespace.d.ts +19 -7
- package/dist/types/new-sdk/opportunities/types.d.ts +30 -9
- package/dist/types/new-sdk/positions/PositionsNamespace.d.ts +4 -5
- package/dist/types/new-sdk/positions/types.d.ts +9 -9
- package/dist/types/new-sdk/simulate/SimulateApi.d.ts +90 -0
- package/dist/types/new-sdk/simulate/index.d.ts +3 -0
- package/dist/types/new-sdk/simulate/types.d.ts +508 -0
- package/dist/types/new-sdk/types.d.ts +35 -1
- package/dist/types/new-sdk/utils/index.d.ts +1 -2
- package/dist/types/offchain/AbstractOffchainNamespace.d.ts +5 -21
- package/dist/types/offchain/GearboxAPI.d.ts +6 -0
- package/dist/types/offchain/index.d.ts +4 -2
- package/dist/types/offchain/notices/OffchainNotices.d.ts +19 -0
- package/dist/types/offchain/notices/index.d.ts +2 -0
- package/dist/types/offchain/opportunities/OffchainOpportunities.d.ts +8 -4
- package/dist/types/offchain/positions/OffchainPositions.d.ts +8 -6
- package/dist/types/preview/preview/CreditAccountState.d.ts +6 -0
- package/dist/types/preview/preview/buildDelayedPreview.d.ts +5 -1
- package/dist/types/preview/preview/types.d.ts +4 -2
- package/dist/types/sdk/MultichainSDK.d.ts +0 -5
- package/dist/types/sdk/OnchainSDK.d.ts +1 -5
- package/dist/types/sdk/accounts/CreditAccountsServiceV310.d.ts +1 -7
- package/dist/types/sdk/accounts/credit-account-compressor/CreditAccountCompressor.d.ts +3 -12
- package/dist/types/sdk/accounts/credit-account-compressor/index.d.ts +2 -2
- package/dist/types/sdk/accounts/credit-account-compressor/types.d.ts +1 -19
- package/dist/types/sdk/accounts/index.d.ts +7 -5
- package/dist/types/sdk/accounts/intents/guards.d.ts +72 -0
- package/dist/types/sdk/accounts/intents/index.d.ts +130 -15
- package/dist/types/sdk/accounts/intents/math.d.ts +46 -0
- package/dist/types/sdk/accounts/intents/open-strategy.d.ts +64 -0
- package/dist/types/sdk/accounts/intents/operations.d.ts +215 -0
- package/dist/types/sdk/accounts/intents/plan.d.ts +189 -0
- package/dist/types/sdk/accounts/intents/realize.d.ts +35 -0
- package/dist/types/sdk/accounts/intents/testing/delayed.d.ts +50 -0
- package/dist/types/sdk/accounts/intents/testing/expect.d.ts +17 -21
- package/dist/types/sdk/accounts/intents/testing/market.d.ts +91 -0
- package/dist/types/sdk/accounts/intents/testing/sdk-mock.d.ts +64 -16
- package/dist/types/sdk/accounts/intents/tests/add-collateral.fixtures.d.ts +45 -0
- package/dist/types/sdk/accounts/intents/tests/adjust-leverage.fixtures.d.ts +56 -0
- package/dist/types/sdk/accounts/intents/tests/deposit.fixtures.d.ts +64 -0
- package/dist/types/sdk/accounts/intents/tests/finish-decrease-leverage.fixtures.d.ts +107 -0
- package/dist/types/sdk/accounts/intents/tests/finish-withdraw.fixtures.d.ts +136 -0
- package/dist/types/sdk/accounts/intents/tests/open-strategy.fixtures.d.ts +56 -0
- package/dist/types/sdk/accounts/intents/tests/withdraw-asset.fixtures.d.ts +60 -0
- package/dist/types/sdk/accounts/intents/tests/withdraw.fixtures.d.ts +79 -0
- package/dist/types/sdk/accounts/intents/types.d.ts +369 -43
- package/dist/types/sdk/accounts/intents/utils/adjust-state-to-snapshot.d.ts +13 -0
- package/dist/types/sdk/accounts/intents/utils/assemble-operation-calls.d.ts +1 -1
- package/dist/types/sdk/accounts/intents/utils/credit-account-slice.d.ts +29 -0
- package/dist/types/sdk/accounts/intents/utils/index.d.ts +7 -5
- package/dist/types/sdk/accounts/intents/utils/ledger.d.ts +41 -0
- package/dist/types/sdk/accounts/intents/utils/pick-token.d.ts +55 -0
- package/dist/types/sdk/accounts/intents/utils/quotas-for-update.d.ts +15 -4
- package/dist/types/sdk/accounts/intents/utils/router-path.d.ts +70 -0
- package/dist/types/sdk/accounts/intents/view.d.ts +15 -0
- package/dist/types/sdk/accounts/types.d.ts +17 -14
- package/dist/types/sdk/accounts/withdrawal-compressor/AbstractWithdrawalCompressorContract.d.ts +6 -0
- package/dist/types/sdk/accounts/withdrawal-compressor/types.d.ts +18 -0
- package/dist/types/sdk/base/TokensMeta.d.ts +44 -1
- package/dist/types/sdk/base/index.d.ts +2 -2
- package/dist/types/sdk/base/token-types.d.ts +12 -1
- package/dist/types/sdk/index.d.ts +28 -19
- package/dist/types/sdk/market/MarketRegister.d.ts +7 -3
- package/dist/types/sdk/market/ZapperRegister.d.ts +20 -2
- package/dist/types/sdk/market/credit/CreditManagerV310Contract.d.ts +0 -4
- package/dist/types/sdk/market/credit/CreditSuite.d.ts +6 -3
- package/dist/types/sdk/market/credit/index.d.ts +2 -1
- package/dist/types/sdk/market/credit/isStrategyCollateral.d.ts +74 -0
- package/dist/types/sdk/market/credit/types.d.ts +2 -9
- package/dist/types/sdk/market/index.d.ts +4 -2
- package/dist/types/sdk/market/math.d.ts +46 -34
- package/dist/types/sdk/market/oracle/PriceOracleBaseContract.d.ts +6 -2
- package/dist/types/sdk/market/oracle/types.d.ts +10 -2
- package/dist/types/sdk/market/pool/PoolV310Contract.d.ts +5 -0
- package/dist/types/sdk/market/pool/types.d.ts +5 -0
- package/dist/types/sdk/market/rwa/RWARegistry.d.ts +13 -0
- package/dist/types/sdk/market/types.d.ts +5 -1
- package/dist/types/sdk/opportunities/index.d.ts +1 -2
- package/dist/types/sdk/options.d.ts +0 -1
- package/dist/types/sdk/pools/PoolService.d.ts +32 -2
- package/dist/types/sdk/pools/index.d.ts +3 -3
- package/dist/types/sdk/pools/types.d.ts +109 -4
- package/dist/types/sdk/positions/PositionsService.d.ts +33 -2
- package/dist/types/sdk/positions/calcBorrowRate.d.ts +40 -0
- package/dist/types/sdk/positions/calcHealthFactor.d.ts +55 -0
- package/dist/types/sdk/positions/calcLiquidationPrice.d.ts +12 -0
- package/dist/types/sdk/positions/calcLiquidationPriceForTarget.d.ts +43 -0
- package/dist/types/sdk/positions/calcTimeToLiquidationMs.d.ts +16 -0
- package/dist/types/sdk/positions/index.d.ts +7 -2
- package/dist/types/sdk/positions/types.d.ts +58 -1
- package/dist/types/sdk/types/state.d.ts +6 -0
- package/dist/types/sdk/utils/viem/executeMulticallBatches.d.ts +39 -0
- package/dist/types/sdk/utils/viem/index.d.ts +3 -2
- package/package.json +2 -1
- package/dist/cjs/model/history.js +0 -53
- package/dist/cjs/model/history.schema.js +0 -128
- package/dist/cjs/sdk/accounts/intents/intents/index.js +0 -14
- package/dist/cjs/sdk/accounts/intents/intents/resume/add-collateral/add-collateral.fixtures.js +0 -121
- package/dist/cjs/sdk/accounts/intents/intents/resume/add-collateral/add-collateral.js +0 -15
- package/dist/cjs/sdk/accounts/intents/intents/resume/close/close.fixtures.js +0 -108
- package/dist/cjs/sdk/accounts/intents/intents/resume/close/close.js +0 -51
- package/dist/cjs/sdk/accounts/intents/intents/resume/decrease-leverage/decrease-leverage.fixtures.js +0 -130
- package/dist/cjs/sdk/accounts/intents/intents/resume/decrease-leverage/decrease-leverage.js +0 -83
- package/dist/cjs/sdk/accounts/intents/intents/resume/deposit/deposit.fixtures.js +0 -117
- package/dist/cjs/sdk/accounts/intents/intents/resume/deposit/deposit.js +0 -15
- package/dist/cjs/sdk/accounts/intents/intents/resume/increase-leverage/increase-leverage.fixtures.js +0 -95
- package/dist/cjs/sdk/accounts/intents/intents/resume/increase-leverage/increase-leverage.js +0 -15
- package/dist/cjs/sdk/accounts/intents/intents/resume/index.js +0 -13
- package/dist/cjs/sdk/accounts/intents/intents/resume/withdraw/withdraw.fixtures.js +0 -138
- package/dist/cjs/sdk/accounts/intents/intents/resume/withdraw/withdraw.js +0 -161
- package/dist/cjs/sdk/accounts/intents/operations/add-collateral/index.js +0 -17
- package/dist/cjs/sdk/accounts/intents/operations/claim-delayed/index.js +0 -54
- package/dist/cjs/sdk/accounts/intents/operations/close-credit-account/index.js +0 -26
- package/dist/cjs/sdk/accounts/intents/operations/decrease-debt/index.js +0 -12
- package/dist/cjs/sdk/accounts/intents/operations/increase-debt/index.js +0 -12
- package/dist/cjs/sdk/accounts/intents/operations/index.js +0 -27
- package/dist/cjs/sdk/accounts/intents/operations/quota-update/index.js +0 -22
- package/dist/cjs/sdk/accounts/intents/operations/repay-credit-account/index.js +0 -22
- package/dist/cjs/sdk/accounts/intents/operations/start-delayed-withdrawal/index.js +0 -18
- package/dist/cjs/sdk/accounts/intents/operations/swap/index.js +0 -18
- package/dist/cjs/sdk/accounts/intents/operations/unwrap-rwa-collateral/index.js +0 -27
- package/dist/cjs/sdk/accounts/intents/operations/withdraw-collateral/index.js +0 -43
- package/dist/cjs/sdk/accounts/intents/operations/wrap-rwa-collateral/index.js +0 -27
- package/dist/cjs/sdk/accounts/intents/quoters/close.js +0 -58
- package/dist/cjs/sdk/accounts/intents/quoters/index.js +0 -7
- package/dist/cjs/sdk/accounts/intents/quoters/swap.js +0 -79
- package/dist/cjs/sdk/accounts/intents/testing/expect.js +0 -167
- package/dist/cjs/sdk/accounts/intents/testing/resume.js +0 -172
- package/dist/cjs/sdk/accounts/intents/utils/simulate-adjust-state.js +0 -39
- package/dist/cjs/sdk/accounts/intents/utils/simulate-assets.js +0 -69
- package/dist/cjs/sdk/accounts/intents/utils/with-quota-update.js +0 -13
- package/dist/esm/model/history.js +0 -49
- package/dist/esm/model/history.schema.js +0 -116
- package/dist/esm/sdk/accounts/intents/intents/index.js +0 -8
- package/dist/esm/sdk/accounts/intents/intents/resume/add-collateral/add-collateral.fixtures.js +0 -107
- package/dist/esm/sdk/accounts/intents/intents/resume/add-collateral/add-collateral.js +0 -14
- package/dist/esm/sdk/accounts/intents/intents/resume/close/close.fixtures.js +0 -94
- package/dist/esm/sdk/accounts/intents/intents/resume/close/close.js +0 -50
- package/dist/esm/sdk/accounts/intents/intents/resume/decrease-leverage/decrease-leverage.fixtures.js +0 -114
- package/dist/esm/sdk/accounts/intents/intents/resume/decrease-leverage/decrease-leverage.js +0 -82
- package/dist/esm/sdk/accounts/intents/intents/resume/deposit/deposit.fixtures.js +0 -110
- package/dist/esm/sdk/accounts/intents/intents/resume/deposit/deposit.js +0 -14
- package/dist/esm/sdk/accounts/intents/intents/resume/increase-leverage/increase-leverage.fixtures.js +0 -88
- package/dist/esm/sdk/accounts/intents/intents/resume/increase-leverage/increase-leverage.js +0 -14
- package/dist/esm/sdk/accounts/intents/intents/resume/index.js +0 -7
- package/dist/esm/sdk/accounts/intents/intents/resume/withdraw/withdraw.fixtures.js +0 -121
- package/dist/esm/sdk/accounts/intents/intents/resume/withdraw/withdraw.js +0 -160
- package/dist/esm/sdk/accounts/intents/operations/add-collateral/index.js +0 -16
- package/dist/esm/sdk/accounts/intents/operations/claim-delayed/index.js +0 -52
- package/dist/esm/sdk/accounts/intents/operations/close-credit-account/index.js +0 -25
- package/dist/esm/sdk/accounts/intents/operations/decrease-debt/index.js +0 -11
- package/dist/esm/sdk/accounts/intents/operations/increase-debt/index.js +0 -11
- package/dist/esm/sdk/accounts/intents/operations/index.js +0 -14
- package/dist/esm/sdk/accounts/intents/operations/quota-update/index.js +0 -21
- package/dist/esm/sdk/accounts/intents/operations/repay-credit-account/index.js +0 -21
- package/dist/esm/sdk/accounts/intents/operations/start-delayed-withdrawal/index.js +0 -17
- package/dist/esm/sdk/accounts/intents/operations/swap/index.js +0 -17
- package/dist/esm/sdk/accounts/intents/operations/unwrap-rwa-collateral/index.js +0 -26
- package/dist/esm/sdk/accounts/intents/operations/withdraw-collateral/index.js +0 -42
- package/dist/esm/sdk/accounts/intents/operations/wrap-rwa-collateral/index.js +0 -26
- package/dist/esm/sdk/accounts/intents/quoters/close.js +0 -56
- package/dist/esm/sdk/accounts/intents/quoters/index.js +0 -3
- package/dist/esm/sdk/accounts/intents/quoters/swap.js +0 -77
- package/dist/esm/sdk/accounts/intents/testing/expect.js +0 -162
- package/dist/esm/sdk/accounts/intents/testing/resume.js +0 -157
- package/dist/esm/sdk/accounts/intents/utils/simulate-adjust-state.js +0 -38
- package/dist/esm/sdk/accounts/intents/utils/simulate-assets.js +0 -68
- package/dist/esm/sdk/accounts/intents/utils/with-quota-update.js +0 -12
- package/dist/types/model/history.d.ts +0 -153
- package/dist/types/model/history.schema.d.ts +0 -95
- package/dist/types/new-sdk/utils/history.d.ts +0 -18
- package/dist/types/sdk/accounts/intents/intents/index.d.ts +0 -8
- package/dist/types/sdk/accounts/intents/intents/resume/add-collateral/add-collateral.d.ts +0 -13
- package/dist/types/sdk/accounts/intents/intents/resume/add-collateral/add-collateral.fixtures.d.ts +0 -38
- package/dist/types/sdk/accounts/intents/intents/resume/close/close.d.ts +0 -26
- package/dist/types/sdk/accounts/intents/intents/resume/close/close.fixtures.d.ts +0 -63
- package/dist/types/sdk/accounts/intents/intents/resume/decrease-leverage/decrease-leverage.d.ts +0 -26
- package/dist/types/sdk/accounts/intents/intents/resume/decrease-leverage/decrease-leverage.fixtures.d.ts +0 -86
- package/dist/types/sdk/accounts/intents/intents/resume/deposit/deposit.d.ts +0 -13
- package/dist/types/sdk/accounts/intents/intents/resume/deposit/deposit.fixtures.d.ts +0 -48
- package/dist/types/sdk/accounts/intents/intents/resume/increase-leverage/increase-leverage.d.ts +0 -13
- package/dist/types/sdk/accounts/intents/intents/resume/increase-leverage/increase-leverage.fixtures.d.ts +0 -46
- package/dist/types/sdk/accounts/intents/intents/resume/index.d.ts +0 -7
- package/dist/types/sdk/accounts/intents/intents/resume/withdraw/withdraw.d.ts +0 -33
- package/dist/types/sdk/accounts/intents/intents/resume/withdraw/withdraw.fixtures.d.ts +0 -68
- package/dist/types/sdk/accounts/intents/operations/add-collateral/index.d.ts +0 -23
- package/dist/types/sdk/accounts/intents/operations/claim-delayed/index.d.ts +0 -55
- package/dist/types/sdk/accounts/intents/operations/close-credit-account/index.d.ts +0 -22
- package/dist/types/sdk/accounts/intents/operations/decrease-debt/index.d.ts +0 -18
- package/dist/types/sdk/accounts/intents/operations/increase-debt/index.d.ts +0 -18
- package/dist/types/sdk/accounts/intents/operations/index.d.ts +0 -14
- package/dist/types/sdk/accounts/intents/operations/quota-update/index.d.ts +0 -24
- package/dist/types/sdk/accounts/intents/operations/repay-credit-account/index.d.ts +0 -31
- package/dist/types/sdk/accounts/intents/operations/start-delayed-withdrawal/index.d.ts +0 -23
- package/dist/types/sdk/accounts/intents/operations/swap/index.d.ts +0 -28
- package/dist/types/sdk/accounts/intents/operations/types.d.ts +0 -21
- package/dist/types/sdk/accounts/intents/operations/unwrap-rwa-collateral/index.d.ts +0 -30
- package/dist/types/sdk/accounts/intents/operations/withdraw-collateral/index.d.ts +0 -36
- package/dist/types/sdk/accounts/intents/operations/wrap-rwa-collateral/index.d.ts +0 -30
- package/dist/types/sdk/accounts/intents/quoters/close.d.ts +0 -43
- package/dist/types/sdk/accounts/intents/quoters/index.d.ts +0 -3
- package/dist/types/sdk/accounts/intents/quoters/swap.d.ts +0 -43
- package/dist/types/sdk/accounts/intents/testing/resume.d.ts +0 -84
- package/dist/types/sdk/accounts/intents/utils/simulate-adjust-state.d.ts +0 -19
- package/dist/types/sdk/accounts/intents/utils/simulate-assets.d.ts +0 -21
- package/dist/types/sdk/accounts/intents/utils/with-quota-update.d.ts +0 -16
- /package/dist/cjs/{new-sdk/utils/history.js → model/notices.js} +0 -0
- /package/dist/cjs/{sdk/accounts/intents/operations → new-sdk/simulate}/types.js +0 -0
- /package/dist/esm/{new-sdk/utils/history.js → model/notices.js} +0 -0
- /package/dist/esm/{sdk/accounts/intents/operations → new-sdk/simulate}/types.js +0 -0
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_sdk_constants_math = require("../../constants/math.js");
|
|
3
|
+
require("../../constants/index.js");
|
|
4
|
+
const require_sdk_accounts_intents_types = require("./types.js");
|
|
5
|
+
const require_sdk_accounts_intents_utils_common = require("./utils/common.js");
|
|
6
|
+
const require_sdk_accounts_intents_math = require("./math.js");
|
|
7
|
+
//#region src/sdk/accounts/intents/plan.ts
|
|
8
|
+
/** Whatever the previous convert produced. */
|
|
9
|
+
const RAISED = { raised: true };
|
|
10
|
+
/** Intent 5: the token lands as is; debt is untouched. */
|
|
11
|
+
function planAddCollateral(intent) {
|
|
12
|
+
assertPositive(intent.amount, "addCollateral");
|
|
13
|
+
return [add(intent.token, intent.amount, intent.value)];
|
|
14
|
+
}
|
|
15
|
+
/** Intent 4: one asset out at fixed debt. */
|
|
16
|
+
function planWithdrawAsset(intent, view) {
|
|
17
|
+
assertPositive(intent.amount, "withdrawAsset");
|
|
18
|
+
return payout(view, intent.token, intent.amount, intent.to);
|
|
19
|
+
}
|
|
20
|
+
/** Intent 6: collateral fixed, debt retargeted to `C0 · (L1 − 1)`. */
|
|
21
|
+
function planAdjustLeverage(intent, view) {
|
|
22
|
+
const { U, delta } = leverageShape(intent, view);
|
|
23
|
+
if (delta === 0n) return [];
|
|
24
|
+
const T = intent.token ?? positionToken(view, "adjustLeverage");
|
|
25
|
+
if (delta > 0n) return [borrow(delta), convert(U, T, delta)];
|
|
26
|
+
const shortfall = -delta - view.balanceOf(U);
|
|
27
|
+
if (shortfall > 0n && require_sdk_accounts_intents_utils_common.eq(T, U)) throw new require_sdk_accounts_intents_types.IntentPreviewError("insufficientSourceBalance", `adjustLeverage: needs ${-delta} underlying, account holds ${view.balanceOf(U)}`);
|
|
28
|
+
return [...shortfall > 0n ? [convert(T, U, view.price(U, T, shortfall))] : [], repay(-delta)];
|
|
29
|
+
}
|
|
30
|
+
/** Intents 1.1 / 1.2: collateral grows by `a`, debt grows to match. */
|
|
31
|
+
function planDeposit(intent, view) {
|
|
32
|
+
assertPositive(intent.amount, "deposit");
|
|
33
|
+
const U = view.underlying;
|
|
34
|
+
if (!require_sdk_accounts_intents_utils_common.eq(intent.token, U) && !(view.rwaAsset && require_sdk_accounts_intents_utils_common.eq(intent.token, view.rwaAsset))) throw new require_sdk_accounts_intents_types.IntentPreviewError("unsupportedCollateralToken", `deposit: only ${U}${view.rwaAsset ? ` or ${view.rwaAsset}` : ""} can be deposited, got ${intent.token}`);
|
|
35
|
+
const aU = view.price(intent.token, U, intent.amount);
|
|
36
|
+
const debtDelta = intent.targetLeverage === void 0 ? require_sdk_accounts_intents_math.proportionalDebt(view, aU) : require_sdk_accounts_intents_math.debtForLeverage(view.collateral + aU, intent.targetLeverage) - view.debt;
|
|
37
|
+
if (debtDelta < 0n) throw new require_sdk_accounts_intents_types.IntentPreviewError("leverageOutOfRange", `deposit: target leverage ${intent.targetLeverage} would require repaying debt`);
|
|
38
|
+
require_sdk_accounts_intents_math.assertDebtInBand(view.debt + debtDelta, view.band);
|
|
39
|
+
const T = intent.positionToken ?? positionToken(view, "deposit");
|
|
40
|
+
const depositStays = require_sdk_accounts_intents_utils_common.eq(intent.token, T);
|
|
41
|
+
return [
|
|
42
|
+
add(intent.token, intent.amount, intent.value),
|
|
43
|
+
...depositStays ? [] : [convert(intent.token, U, intent.amount)],
|
|
44
|
+
...debtDelta > 0n ? [borrow(debtDelta)] : [],
|
|
45
|
+
convert(U, T, debtDelta + (depositStays ? 0n : aU))
|
|
46
|
+
].filter((s) => s.kind !== "convert" || s.amount !== 0n);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Intent 3: funding comes in from the wallet and goes straight into the debt.
|
|
50
|
+
* Collateral never moves, so the whole plan is the funding's way to `U`.
|
|
51
|
+
*
|
|
52
|
+
* Funding in `U` needs no way there: it lands and is repaid, which is the whole
|
|
53
|
+
* plan. An RWA market also takes the raw asset behind its underlying, and that
|
|
54
|
+
* one is wrapped on the way in.
|
|
55
|
+
*
|
|
56
|
+
* `MAX_UINT256` settles the loan: the wallet is asked for the debt as it stands
|
|
57
|
+
* plus the headroom {@link SETTLE_MARGIN} allows for the interest of the blocks
|
|
58
|
+
* still to come, since the facade is told to repay everything outstanding
|
|
59
|
+
* rather than the amount quoted here.
|
|
60
|
+
*/
|
|
61
|
+
function planRepay(intent, view) {
|
|
62
|
+
assertPositive(intent.amount, "repay");
|
|
63
|
+
const U = view.underlying;
|
|
64
|
+
const fundsInU = require_sdk_accounts_intents_utils_common.eq(intent.token, U);
|
|
65
|
+
if (!fundsInU && !(view.rwaAsset && require_sdk_accounts_intents_utils_common.eq(intent.token, view.rwaAsset))) throw new require_sdk_accounts_intents_types.IntentPreviewError("unsupportedCollateralToken", `repay: only ${U}${view.rwaAsset ? ` or ${view.rwaAsset}` : ""} can be repaid with, got ${intent.token}`);
|
|
66
|
+
if (view.debt <= 0n) throw new require_sdk_accounts_intents_types.IntentPreviewError("debtOutOfRange", "repay: the account owes nothing");
|
|
67
|
+
const funding = everything(intent.amount) ? view.price(U, intent.token, withMargin(view.debt)) : intent.amount;
|
|
68
|
+
const repaid = min(view.price(intent.token, U, funding), view.debt);
|
|
69
|
+
require_sdk_accounts_intents_math.assertDebtInBand(view.debt - repaid, view.band);
|
|
70
|
+
return [
|
|
71
|
+
add(intent.token, funding, intent.value),
|
|
72
|
+
...fundsInU ? [] : [convert(intent.token, U, funding)],
|
|
73
|
+
...repaid === view.debt ? [clearQuotas()] : [],
|
|
74
|
+
repay(repaid)
|
|
75
|
+
];
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Intent 2.1: `W` of value leaves, debt shrinks by `D0 · W / C0` so leverage
|
|
79
|
+
* holds. Both are funded by the source `S`.
|
|
80
|
+
*/
|
|
81
|
+
function planWithdraw(intent, view) {
|
|
82
|
+
const { U, T, S, WU, dD, all } = withdrawShape(intent, view);
|
|
83
|
+
if (all) return [
|
|
84
|
+
clearQuotas(),
|
|
85
|
+
{ kind: "closeAll" },
|
|
86
|
+
...view.debt > 0n ? [repay(view.debt)] : [],
|
|
87
|
+
{
|
|
88
|
+
kind: "sweep",
|
|
89
|
+
to: intent.to
|
|
90
|
+
}
|
|
91
|
+
];
|
|
92
|
+
if (require_sdk_accounts_intents_utils_common.eq(T, U)) return [
|
|
93
|
+
convert(S, U, view.price(U, S, WU + dD)),
|
|
94
|
+
repay(dD, intent.amount),
|
|
95
|
+
...payout(view, U, intent.amount, intent.to)
|
|
96
|
+
];
|
|
97
|
+
return [
|
|
98
|
+
convert(S, U, view.price(U, S, dD)),
|
|
99
|
+
repay(dD),
|
|
100
|
+
convert(S, T, view.price(U, S, WU)),
|
|
101
|
+
...payout(view, T, RAISED, intent.to)
|
|
102
|
+
];
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Intent 2.1 against a source that cannot be sold on a DEX.
|
|
106
|
+
*
|
|
107
|
+
* Some collateral only converts through its issuer — a Securitize dsToken, a
|
|
108
|
+
* Mellow share — which answers a redemption request now and pays out days
|
|
109
|
+
* later. The trade is unchanged; what changes is that the proceeds do not exist
|
|
110
|
+
* yet, so this half only requests the redemption:
|
|
111
|
+
*
|
|
112
|
+
* ```
|
|
113
|
+
* request(S, W + dD) → [days] → claim → convert → repay → withdraw
|
|
114
|
+
* ```
|
|
115
|
+
*
|
|
116
|
+
* The tail is planned at claim time by {@link planFinishWithdraw}, from the
|
|
117
|
+
* intent this request records — only then is the claimed amount, and the token
|
|
118
|
+
* it arrived in, known.
|
|
119
|
+
*/
|
|
120
|
+
function planWithdrawDelayed(intent, view) {
|
|
121
|
+
const { U, T, S, WU, dD, all } = withdrawShape(intent, view);
|
|
122
|
+
if (all) throw new require_sdk_accounts_intents_types.IntentPreviewError("noDelayedRoute", "withdraw: taking the whole net value cannot be started as a redemption");
|
|
123
|
+
if (!require_sdk_accounts_intents_utils_common.eq(T, U) && !(view.rwaAsset && require_sdk_accounts_intents_utils_common.eq(T, view.rwaAsset))) throw new require_sdk_accounts_intents_types.IntentPreviewError("noDelayedRoute", `withdraw: a delayed route cannot pay out in ${T}`);
|
|
124
|
+
const payoutIsSource = require_sdk_accounts_intents_utils_common.eq(T, S);
|
|
125
|
+
return [{
|
|
126
|
+
kind: "request",
|
|
127
|
+
token: S,
|
|
128
|
+
amount: view.price(U, S, payoutIsSource ? dD : WU + dD),
|
|
129
|
+
reserve: payoutIsSource ? intent.amount : 0n,
|
|
130
|
+
record: {
|
|
131
|
+
type: "WITHDRAW_COLLATERAL",
|
|
132
|
+
to: intent.to,
|
|
133
|
+
withdrawToken: T,
|
|
134
|
+
withdrawAmount: intent.amount,
|
|
135
|
+
sourceToken: S,
|
|
136
|
+
debtRepaid: dD
|
|
137
|
+
}
|
|
138
|
+
}];
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Intent 6.2 against a position token that only redeems through its issuer.
|
|
142
|
+
*
|
|
143
|
+
* Only deleveraging can be delayed: raising leverage borrows and buys, both of
|
|
144
|
+
* which settle at once. The request covers whatever idle underlying does not
|
|
145
|
+
* already, and the tail repays from the claim.
|
|
146
|
+
*/
|
|
147
|
+
function planAdjustLeverageDelayed(intent, view) {
|
|
148
|
+
const { U, delta } = leverageShape(intent, view);
|
|
149
|
+
if (delta >= 0n) throw new require_sdk_accounts_intents_types.IntentPreviewError("noDelayedRoute", "adjustLeverage: only deleveraging can settle with a delay");
|
|
150
|
+
const shortfall = -delta - view.balanceOf(U);
|
|
151
|
+
if (shortfall <= 0n) throw new require_sdk_accounts_intents_types.IntentPreviewError("noDelayedRoute", "adjustLeverage: idle underlying covers the repayment, nothing to redeem");
|
|
152
|
+
const T = intent.token ?? positionToken(view, "adjustLeverage");
|
|
153
|
+
return [{
|
|
154
|
+
kind: "request",
|
|
155
|
+
token: T,
|
|
156
|
+
amount: view.price(U, T, shortfall),
|
|
157
|
+
reserve: 0n,
|
|
158
|
+
record: { type: "DECREASE_LEVERAGE" }
|
|
159
|
+
}];
|
|
160
|
+
}
|
|
161
|
+
/** Everything claimed goes into the debt. */
|
|
162
|
+
function planFinishDecreaseLeverage(claimable, claimed, view) {
|
|
163
|
+
return [
|
|
164
|
+
claim(claimable),
|
|
165
|
+
convert(claimed.token, view.underlying, claimed.amount),
|
|
166
|
+
repay(RAISED)
|
|
167
|
+
];
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* The claim is split between the promised payout `W` and the debt the leading
|
|
171
|
+
* half deferred: the payout is served first, the debt gets what is left, so a
|
|
172
|
+
* routing shortfall shows as leverage a touch above target rather than as a
|
|
173
|
+
* payout the wallet was promised and did not get.
|
|
174
|
+
*/
|
|
175
|
+
function planFinishWithdraw(intent, claimable, claimed, view) {
|
|
176
|
+
const U = view.underlying;
|
|
177
|
+
const T = intent.withdrawToken;
|
|
178
|
+
const W = intent.withdrawAmount;
|
|
179
|
+
if (!require_sdk_accounts_intents_utils_common.eq(T, U) && !(view.rwaAsset && require_sdk_accounts_intents_utils_common.eq(T, view.rwaAsset))) throw new require_sdk_accounts_intents_types.IntentPreviewError("noDelayedRoute", `finishWithdraw: cannot pay out in ${T}`);
|
|
180
|
+
if (intent.debtRepaid === 0n) return [
|
|
181
|
+
claim(claimable),
|
|
182
|
+
convert(claimed.token, T, claimed.amount),
|
|
183
|
+
...payout(view, T, {
|
|
184
|
+
raised: true,
|
|
185
|
+
max: W
|
|
186
|
+
}, intent.to)
|
|
187
|
+
];
|
|
188
|
+
if (require_sdk_accounts_intents_utils_common.eq(intent.sourceToken, T)) return [
|
|
189
|
+
claim(claimable),
|
|
190
|
+
convert(claimed.token, U, claimed.amount),
|
|
191
|
+
repay({
|
|
192
|
+
raised: true,
|
|
193
|
+
max: intent.debtRepaid
|
|
194
|
+
}),
|
|
195
|
+
...payout(view, T, W, intent.to)
|
|
196
|
+
];
|
|
197
|
+
if (require_sdk_accounts_intents_utils_common.eq(T, U)) return [
|
|
198
|
+
claim(claimable),
|
|
199
|
+
convert(claimed.token, U, claimed.amount),
|
|
200
|
+
repay(intent.debtRepaid, W),
|
|
201
|
+
...payout(view, U, {
|
|
202
|
+
raised: true,
|
|
203
|
+
max: W
|
|
204
|
+
}, intent.to)
|
|
205
|
+
];
|
|
206
|
+
const reserved = min(view.price(T, claimed.token, W), claimed.amount);
|
|
207
|
+
return [
|
|
208
|
+
claim(claimable),
|
|
209
|
+
convert(claimed.token, U, claimed.amount - reserved),
|
|
210
|
+
repay({
|
|
211
|
+
raised: true,
|
|
212
|
+
max: intent.debtRepaid
|
|
213
|
+
}),
|
|
214
|
+
convert(claimed.token, T, reserved),
|
|
215
|
+
...payout(view, T, {
|
|
216
|
+
raised: true,
|
|
217
|
+
max: W
|
|
218
|
+
}, intent.to)
|
|
219
|
+
];
|
|
220
|
+
}
|
|
221
|
+
/** Nothing is owed beyond the claim: the tokens land and quotas catch up. */
|
|
222
|
+
function planFinishClaimOnly(claimable) {
|
|
223
|
+
return [claim(claimable)];
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* What a withdrawal comes down to: the payout `W` of `T` priced in the
|
|
227
|
+
* underlying, the debt `dD` that keeps leverage flat, and the source `S` both
|
|
228
|
+
* are funded from. Shared so that the instant and the delayed leading half
|
|
229
|
+
* cannot disagree on the amounts.
|
|
230
|
+
*/
|
|
231
|
+
function withdrawShape(intent, view) {
|
|
232
|
+
assertPositive(intent.amount, "withdraw");
|
|
233
|
+
const U = view.underlying;
|
|
234
|
+
const T = intent.tokenOut ?? U;
|
|
235
|
+
const S = intent.sourceToken ?? sourceToken(view);
|
|
236
|
+
if (everything(intent.amount)) {
|
|
237
|
+
assertHasValue(view);
|
|
238
|
+
return {
|
|
239
|
+
U,
|
|
240
|
+
T,
|
|
241
|
+
S,
|
|
242
|
+
WU: view.collateral,
|
|
243
|
+
dD: view.debt,
|
|
244
|
+
all: true
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
const WU = view.price(T, U, intent.amount);
|
|
248
|
+
if (WU <= 0n) throw new require_sdk_accounts_intents_types.IntentPreviewError("insufficientSourceBalance", `withdraw: cannot price ${intent.amount} of ${T}`);
|
|
249
|
+
if (WU >= view.collateral) {
|
|
250
|
+
assertHasValue(view);
|
|
251
|
+
return {
|
|
252
|
+
U,
|
|
253
|
+
T,
|
|
254
|
+
S,
|
|
255
|
+
WU,
|
|
256
|
+
dD: view.debt,
|
|
257
|
+
all: true
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
const dD = require_sdk_accounts_intents_math.proportionalDebt(view, WU);
|
|
261
|
+
require_sdk_accounts_intents_math.assertDebtInBand(view.debt - dD, view.band);
|
|
262
|
+
return {
|
|
263
|
+
U,
|
|
264
|
+
T,
|
|
265
|
+
S,
|
|
266
|
+
WU,
|
|
267
|
+
dD,
|
|
268
|
+
all: false
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* The debt move a leverage target implies. Shared by the instant and the
|
|
273
|
+
* delayed leading half; the token that funds it is resolved by the caller,
|
|
274
|
+
* once it knows the move needs one at all.
|
|
275
|
+
*/
|
|
276
|
+
function leverageShape(intent, view) {
|
|
277
|
+
require_sdk_accounts_intents_math.assertLeverageAtLeastOne(intent.targetLeverage);
|
|
278
|
+
if (view.collateral <= 0n) throw new require_sdk_accounts_intents_types.IntentPreviewError("insufficientSourceBalance", "adjustLeverage: account has no collateral to lever");
|
|
279
|
+
const target = require_sdk_accounts_intents_math.debtForLeverage(view.collateral, intent.targetLeverage);
|
|
280
|
+
require_sdk_accounts_intents_math.assertDebtInBand(target, view.band);
|
|
281
|
+
return {
|
|
282
|
+
U: view.underlying,
|
|
283
|
+
delta: target - view.debt
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
const add = (token, amount, value) => ({
|
|
287
|
+
kind: "add",
|
|
288
|
+
token,
|
|
289
|
+
amount,
|
|
290
|
+
value
|
|
291
|
+
});
|
|
292
|
+
const borrow = (amount) => ({
|
|
293
|
+
kind: "borrow",
|
|
294
|
+
amount
|
|
295
|
+
});
|
|
296
|
+
const repay = (amount, keep) => keep === void 0 ? {
|
|
297
|
+
kind: "repay",
|
|
298
|
+
amount
|
|
299
|
+
} : {
|
|
300
|
+
kind: "repay",
|
|
301
|
+
amount,
|
|
302
|
+
keep
|
|
303
|
+
};
|
|
304
|
+
const convert = (from, to, amount) => ({
|
|
305
|
+
kind: "convert",
|
|
306
|
+
from,
|
|
307
|
+
to,
|
|
308
|
+
amount
|
|
309
|
+
});
|
|
310
|
+
const claim = (claimable) => ({
|
|
311
|
+
kind: "claim",
|
|
312
|
+
claimable
|
|
313
|
+
});
|
|
314
|
+
const clearQuotas = () => ({ kind: "clearQuotas" });
|
|
315
|
+
/**
|
|
316
|
+
* Headroom a settlement raises on top of the debt it read, in
|
|
317
|
+
* `PERCENTAGE_FACTOR`: enough interest for the transaction to sit in the
|
|
318
|
+
* mempool for hours at any sane borrow rate, small enough not to matter to the
|
|
319
|
+
* wallet that fronts it.
|
|
320
|
+
*/
|
|
321
|
+
const SETTLE_MARGIN = 10n;
|
|
322
|
+
const withMargin = (debt) => debt + debt * SETTLE_MARGIN / require_sdk_constants_math.PERCENTAGE_FACTOR;
|
|
323
|
+
/** The amount that asks for all of it, whatever "all" turns out to be. */
|
|
324
|
+
const everything = (amount) => amount >= require_sdk_constants_math.MAX_UINT256;
|
|
325
|
+
const min = (a, b) => a < b ? a : b;
|
|
326
|
+
/**
|
|
327
|
+
* Hands `amount` of `token` to `to`. The wrapped underlying of an RWA market
|
|
328
|
+
* cannot leave the account, so it is unwrapped into the raw asset on the way.
|
|
329
|
+
*/
|
|
330
|
+
function payout(view, token, amount, to) {
|
|
331
|
+
if (view.rwaAsset && require_sdk_accounts_intents_utils_common.eq(token, view.underlying)) return [convert(view.underlying, view.rwaAsset, amount), {
|
|
332
|
+
kind: "withdraw",
|
|
333
|
+
token: view.rwaAsset,
|
|
334
|
+
amount: RAISED,
|
|
335
|
+
to
|
|
336
|
+
}];
|
|
337
|
+
return [{
|
|
338
|
+
kind: "withdraw",
|
|
339
|
+
token,
|
|
340
|
+
amount,
|
|
341
|
+
to
|
|
342
|
+
}];
|
|
343
|
+
}
|
|
344
|
+
function positionToken(view, flow) {
|
|
345
|
+
const pick = view.fattest([view.underlying]);
|
|
346
|
+
if (!pick) throw new require_sdk_accounts_intents_types.IntentPreviewError("insufficientSourceBalance", `${flow}: no position token on the account`);
|
|
347
|
+
return pick;
|
|
348
|
+
}
|
|
349
|
+
function sourceToken(view) {
|
|
350
|
+
const pick = view.fattest();
|
|
351
|
+
if (!pick) throw new require_sdk_accounts_intents_types.IntentPreviewError("insufficientSourceBalance", "withdraw: account has no spendable balance");
|
|
352
|
+
return pick;
|
|
353
|
+
}
|
|
354
|
+
/** An account whose debt has eaten its collateral has nothing to hand over. */
|
|
355
|
+
function assertHasValue(view) {
|
|
356
|
+
if (view.collateral <= 0n) throw new require_sdk_accounts_intents_types.IntentPreviewError("insufficientSourceBalance", `withdraw: nothing to withdraw, net value is ${view.collateral}`);
|
|
357
|
+
}
|
|
358
|
+
function assertPositive(amount, flow) {
|
|
359
|
+
if (amount <= 0n) throw new require_sdk_accounts_intents_types.IntentPreviewError("insufficientSourceBalance", `${flow}: amount must be positive`);
|
|
360
|
+
}
|
|
361
|
+
//#endregion
|
|
362
|
+
exports.RAISED = RAISED;
|
|
363
|
+
exports.planAddCollateral = planAddCollateral;
|
|
364
|
+
exports.planAdjustLeverage = planAdjustLeverage;
|
|
365
|
+
exports.planAdjustLeverageDelayed = planAdjustLeverageDelayed;
|
|
366
|
+
exports.planDeposit = planDeposit;
|
|
367
|
+
exports.planFinishClaimOnly = planFinishClaimOnly;
|
|
368
|
+
exports.planFinishDecreaseLeverage = planFinishDecreaseLeverage;
|
|
369
|
+
exports.planFinishWithdraw = planFinishWithdraw;
|
|
370
|
+
exports.planRepay = planRepay;
|
|
371
|
+
exports.planWithdraw = planWithdraw;
|
|
372
|
+
exports.planWithdrawAsset = planWithdrawAsset;
|
|
373
|
+
exports.planWithdrawDelayed = planWithdrawDelayed;
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_sdk_market_math = require("../../market/math.js");
|
|
3
|
+
const require_sdk_accounts_intents_types = require("./types.js");
|
|
4
|
+
const require_sdk_accounts_intents_utils_common = require("./utils/common.js");
|
|
5
|
+
const require_sdk_accounts_intents_utils_convert_amount = require("./utils/convert-amount.js");
|
|
6
|
+
const require_sdk_accounts_intents_utils_pick_token = require("./utils/pick-token.js");
|
|
7
|
+
const require_sdk_accounts_intents_guards = require("./guards.js");
|
|
8
|
+
const require_sdk_accounts_intents_utils_ledger = require("./utils/ledger.js");
|
|
9
|
+
const require_sdk_accounts_intents_utils_quotas_for_update = require("./utils/quotas-for-update.js");
|
|
10
|
+
const require_sdk_accounts_intents_utils_router_path = require("./utils/router-path.js");
|
|
11
|
+
const require_sdk_accounts_intents_operations = require("./operations.js");
|
|
12
|
+
//#region src/sdk/accounts/intents/realize.ts
|
|
13
|
+
/**
|
|
14
|
+
* Turns a plan into operations: the one place that talks to the router, knows
|
|
15
|
+
* how an RWA leg differs from a swap, and keeps the running balances.
|
|
16
|
+
*
|
|
17
|
+
* Steps are applied to a ledger as they are built, so every leg sees the
|
|
18
|
+
* balances the previous ones left behind: a swap only spends what the plan
|
|
19
|
+
* says and keeps the rest of its input token in place, a repayment never
|
|
20
|
+
* exceeds the underlying actually raised. Once the walk is done the projected
|
|
21
|
+
* balances yield the quota update and the reported state.
|
|
22
|
+
*/
|
|
23
|
+
async function realize(steps, props) {
|
|
24
|
+
const { creditAccount, sdk, slippage, quotaReserve } = props;
|
|
25
|
+
const { underlying } = creditAccount;
|
|
26
|
+
const rwaAsset = sdk.tokensMeta.rwaUnderlyings.get(underlying)?.asset;
|
|
27
|
+
const price = require_sdk_accounts_intents_utils_convert_amount.convertAmount(sdk, creditAccount.creditManager);
|
|
28
|
+
const paths = require_sdk_accounts_intents_utils_router_path.createRouterPaths({
|
|
29
|
+
sdk,
|
|
30
|
+
creditAccount,
|
|
31
|
+
slippage
|
|
32
|
+
});
|
|
33
|
+
const market = sdk.marketRegister.findByCreditManager(creditAccount.creditManager);
|
|
34
|
+
const suite = sdk.marketRegister.findCreditManager(creditAccount.creditManager);
|
|
35
|
+
const ledger = new require_sdk_accounts_intents_utils_ledger.OperationLedger({
|
|
36
|
+
initialAssets: creditAccount.tokens,
|
|
37
|
+
underlying,
|
|
38
|
+
debt: creditAccount.accountDebt,
|
|
39
|
+
convert: price
|
|
40
|
+
});
|
|
41
|
+
const operations = [];
|
|
42
|
+
const push = (op) => {
|
|
43
|
+
operations.push(op);
|
|
44
|
+
ledger.apply(op);
|
|
45
|
+
};
|
|
46
|
+
/** Output of the last convert or claim, for `RAISED` amounts. */
|
|
47
|
+
let raised = 0n;
|
|
48
|
+
let delayed;
|
|
49
|
+
/**
|
|
50
|
+
* Set by a `clearQuotas` step, which settles the quotas mid-walk instead of
|
|
51
|
+
* at the end — and settles them at none, whatever the balances turn out to be.
|
|
52
|
+
*/
|
|
53
|
+
let cleared;
|
|
54
|
+
/**
|
|
55
|
+
* Whether anything leaves the account, which is what makes the credit manager
|
|
56
|
+
* judge the closing collateral check at safe prices.
|
|
57
|
+
*/
|
|
58
|
+
let paysOut = false;
|
|
59
|
+
const amountOf = (a) => typeof a === "bigint" ? a : min(raised, a.max ?? raised);
|
|
60
|
+
const assertHolds = (token, amount, what) => {
|
|
61
|
+
const held = ledger.balanceOf(token);
|
|
62
|
+
if (amount <= 0n || held < amount) throw new require_sdk_accounts_intents_types.IntentPreviewError("insufficientSourceBalance", `${what}: needs ${amount} of ${token}, account holds ${held}`);
|
|
63
|
+
};
|
|
64
|
+
for (const step of steps) switch (step.kind) {
|
|
65
|
+
case "add":
|
|
66
|
+
push(require_sdk_accounts_intents_operations.buildAddCollateralOperation({
|
|
67
|
+
token: step.token,
|
|
68
|
+
amount: step.amount,
|
|
69
|
+
value: step.value,
|
|
70
|
+
creditAccount,
|
|
71
|
+
sdk
|
|
72
|
+
}));
|
|
73
|
+
break;
|
|
74
|
+
case "borrow":
|
|
75
|
+
require_sdk_accounts_intents_guards.assertCanBorrow(suite, step.amount);
|
|
76
|
+
push(require_sdk_accounts_intents_operations.buildIncreaseDebtOperation({
|
|
77
|
+
amount: step.amount,
|
|
78
|
+
creditAccount,
|
|
79
|
+
sdk
|
|
80
|
+
}));
|
|
81
|
+
break;
|
|
82
|
+
case "repay": {
|
|
83
|
+
const amount = min(amountOf(step.amount), ledger.balanceOf(underlying) - (step.keep ?? 0n));
|
|
84
|
+
if (amount > 0n) push(require_sdk_accounts_intents_operations.buildDecreaseDebtOperation({
|
|
85
|
+
amount,
|
|
86
|
+
full: amount >= ledger.debt,
|
|
87
|
+
creditAccount,
|
|
88
|
+
sdk
|
|
89
|
+
}));
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
case "clearQuotas":
|
|
93
|
+
cleared = require_sdk_accounts_intents_utils_quotas_for_update.clearedQuotas(creditAccount.tokens);
|
|
94
|
+
if (cleared.quotaDecrease.length > 0) push(require_sdk_accounts_intents_operations.buildQuotaUpdateOperation({
|
|
95
|
+
update: cleared,
|
|
96
|
+
creditAccount,
|
|
97
|
+
sdk
|
|
98
|
+
}));
|
|
99
|
+
break;
|
|
100
|
+
case "convert": {
|
|
101
|
+
const amount = amountOf(step.amount);
|
|
102
|
+
if (amount <= 0n) {
|
|
103
|
+
raised = 0n;
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
assertHolds(step.from, amount, "convert");
|
|
107
|
+
if (require_sdk_accounts_intents_utils_common.eq(step.from, step.to)) {
|
|
108
|
+
raised = amount;
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
const wrap = rwaAsset && require_sdk_accounts_intents_utils_common.eq(step.from, rwaAsset) && require_sdk_accounts_intents_utils_common.eq(step.to, underlying);
|
|
112
|
+
const unwrap = rwaAsset && require_sdk_accounts_intents_utils_common.eq(step.from, underlying) && require_sdk_accounts_intents_utils_common.eq(step.to, rwaAsset);
|
|
113
|
+
if (wrap || unwrap) {
|
|
114
|
+
const amountOut = require_sdk_accounts_intents_utils_common.toTargetDecimals(amount, step.from, step.to, sdk);
|
|
115
|
+
push(await (wrap ? require_sdk_accounts_intents_operations.buildWrapRwaCollateralOperation : require_sdk_accounts_intents_operations.buildUnwrapRwaCollateralOperation)({
|
|
116
|
+
tokenIn: step.from,
|
|
117
|
+
amountIn: amount,
|
|
118
|
+
tokenOut: step.to,
|
|
119
|
+
amountOut,
|
|
120
|
+
creditAccount,
|
|
121
|
+
sdk
|
|
122
|
+
}));
|
|
123
|
+
raised = amountOut;
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
const held = ledger.balanceOf(step.from);
|
|
127
|
+
const leg = await paths.swap({
|
|
128
|
+
tokenIn: step.from,
|
|
129
|
+
tokenOut: step.to,
|
|
130
|
+
amount,
|
|
131
|
+
keep: held - amount
|
|
132
|
+
});
|
|
133
|
+
push(require_sdk_accounts_intents_operations.buildSwapOperation({
|
|
134
|
+
tokenIn: step.from,
|
|
135
|
+
amountIn: amount,
|
|
136
|
+
tokenOut: step.to,
|
|
137
|
+
amountOut: leg.minAmount,
|
|
138
|
+
calls: leg.calls
|
|
139
|
+
}));
|
|
140
|
+
raised = leg.minAmount;
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
case "closeAll": {
|
|
144
|
+
const balances = ledger.snapshot().assets.filter((a) => !require_sdk_accounts_intents_utils_common.eq(a.token, underlying) && a.balance > DUST);
|
|
145
|
+
const pending = balances.find((a) => require_sdk_accounts_intents_utils_pick_token.isRedemptionPhantomToken(sdk, a.token));
|
|
146
|
+
if (pending) throw new require_sdk_accounts_intents_types.IntentPreviewError("withdrawalInProgress", `closeAll: ${pending.token} is a pending withdrawal, claim it first`);
|
|
147
|
+
if (balances.length > 0) {
|
|
148
|
+
const leg = await paths.closeAll({ balances });
|
|
149
|
+
if (leg.calls.length > 0) push(require_sdk_accounts_intents_operations.buildCloseSwapOperation({
|
|
150
|
+
from: balances,
|
|
151
|
+
tokenOut: underlying,
|
|
152
|
+
amountOut: leg.minAmount,
|
|
153
|
+
calls: leg.calls
|
|
154
|
+
}));
|
|
155
|
+
}
|
|
156
|
+
raised = ledger.balanceOf(underlying);
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
case "withdraw": {
|
|
160
|
+
const amount = amountOf(step.amount);
|
|
161
|
+
assertHolds(step.token, amount, "withdraw");
|
|
162
|
+
paysOut = true;
|
|
163
|
+
push(require_sdk_accounts_intents_operations.buildWithdrawCollateralOperation({
|
|
164
|
+
token: step.token,
|
|
165
|
+
amount,
|
|
166
|
+
to: step.to,
|
|
167
|
+
creditAccount,
|
|
168
|
+
sdk
|
|
169
|
+
}));
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
case "request": {
|
|
173
|
+
const asset = await delayedConfig(sdk, creditAccount, step.token);
|
|
174
|
+
if (ledger.balanceOf(asset.withdrawalPhantomToken) > 0n) throw new require_sdk_accounts_intents_types.IntentPreviewError("withdrawalInProgress", `request: ${asset.withdrawalPhantomToken} already holds a pending withdrawal`);
|
|
175
|
+
assertHolds(step.token, step.amount + step.reserve, "request");
|
|
176
|
+
const preview = await sdk.accounts.previewDelayedWithdrawal({
|
|
177
|
+
creditAccount: creditAccount.creditAccount,
|
|
178
|
+
token: step.token,
|
|
179
|
+
amount: step.amount,
|
|
180
|
+
withdrawalPhantomToken: asset.withdrawalPhantomToken,
|
|
181
|
+
intent: step.record
|
|
182
|
+
});
|
|
183
|
+
push(require_sdk_accounts_intents_operations.buildStartDelayedWithdrawalOperation({
|
|
184
|
+
preview,
|
|
185
|
+
creditAccount,
|
|
186
|
+
sdk
|
|
187
|
+
}));
|
|
188
|
+
delayed = {
|
|
189
|
+
record: step.record,
|
|
190
|
+
claimableAt: preview.claimableAt,
|
|
191
|
+
settlement: preview.outputs.some((o) => o.isDelayed) ? "delayed" : "instant"
|
|
192
|
+
};
|
|
193
|
+
raised = require_sdk_accounts_intents_operations.instantOutput(preview.outputs)?.amount ?? 0n;
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
case "claim":
|
|
197
|
+
push(require_sdk_accounts_intents_operations.buildClaimDelayedWithdrawalOperation({
|
|
198
|
+
claimable: step.claimable,
|
|
199
|
+
creditAccount,
|
|
200
|
+
sdk
|
|
201
|
+
}));
|
|
202
|
+
raised = require_sdk_accounts_intents_operations.instantOutput(step.claimable.outputs)?.amount ?? 0n;
|
|
203
|
+
break;
|
|
204
|
+
case "sweep": {
|
|
205
|
+
paysOut = true;
|
|
206
|
+
const wrapped = ledger.balanceOf(underlying);
|
|
207
|
+
if (rwaAsset && wrapped > 0n) push(await require_sdk_accounts_intents_operations.buildUnwrapRwaCollateralOperation({
|
|
208
|
+
tokenIn: underlying,
|
|
209
|
+
amountIn: wrapped,
|
|
210
|
+
tokenOut: rwaAsset,
|
|
211
|
+
amountOut: require_sdk_accounts_intents_utils_common.toTargetDecimals(wrapped, underlying, rwaAsset, sdk),
|
|
212
|
+
creditAccount,
|
|
213
|
+
sdk
|
|
214
|
+
}));
|
|
215
|
+
for (const { token, balance } of ledger.snapshot().assets) push(require_sdk_accounts_intents_operations.buildWithdrawCollateralOperation({
|
|
216
|
+
token,
|
|
217
|
+
amount: balance,
|
|
218
|
+
to: step.to,
|
|
219
|
+
all: true,
|
|
220
|
+
creditAccount,
|
|
221
|
+
sdk
|
|
222
|
+
}));
|
|
223
|
+
break;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
const { assets, totalValue, debt } = ledger.snapshot();
|
|
227
|
+
require_sdk_accounts_intents_guards.assertGrowthAllowed({
|
|
228
|
+
sdk,
|
|
229
|
+
suite,
|
|
230
|
+
market,
|
|
231
|
+
before: creditAccount.tokens,
|
|
232
|
+
after: assets
|
|
233
|
+
});
|
|
234
|
+
const quotas = cleared ?? require_sdk_accounts_intents_utils_quotas_for_update.getQuotasForUpdate({
|
|
235
|
+
assetsBefore: creditAccount.tokens,
|
|
236
|
+
assetsAfter: assets,
|
|
237
|
+
initialQuotas: creditAccount.tokens,
|
|
238
|
+
quotaReserve,
|
|
239
|
+
underlyingToken: underlying,
|
|
240
|
+
liquidationThresholds: suite.creditManager.liquidationThresholds,
|
|
241
|
+
quotas: market.pool.pqk.quotas,
|
|
242
|
+
maxDebt: suite.creditFacade.maxDebt,
|
|
243
|
+
convert: price
|
|
244
|
+
});
|
|
245
|
+
if (!cleared && quotas.quotaIncrease.length + quotas.quotaDecrease.length > 0) {
|
|
246
|
+
require_sdk_accounts_intents_guards.assertQuotaHeadroom(market, quotas.quotaIncrease);
|
|
247
|
+
push(require_sdk_accounts_intents_operations.buildQuotaUpdateOperation({
|
|
248
|
+
update: quotas,
|
|
249
|
+
creditAccount,
|
|
250
|
+
sdk
|
|
251
|
+
}));
|
|
252
|
+
}
|
|
253
|
+
const snapshot = {
|
|
254
|
+
creditManager: creditAccount.creditManager,
|
|
255
|
+
assets,
|
|
256
|
+
quotas: Object.values(quotas.desiredQuota),
|
|
257
|
+
totalDebt: debt,
|
|
258
|
+
totalValue
|
|
259
|
+
};
|
|
260
|
+
const metrics = {
|
|
261
|
+
healthFactor: sdk.positions.healthFactor(snapshot),
|
|
262
|
+
overallApy: 0,
|
|
263
|
+
borrowRate: sdk.positions.borrowRate(snapshot),
|
|
264
|
+
timeToLiquidation: sdk.positions.timeToLiquidation(snapshot),
|
|
265
|
+
liquidationPrice: sdk.positions.liquidationPrice(snapshot)
|
|
266
|
+
};
|
|
267
|
+
require_sdk_accounts_intents_guards.assertCollateralised(paysOut ? sdk.positions.healthFactor(snapshot, { safePrices: true }) : metrics.healthFactor);
|
|
268
|
+
return {
|
|
269
|
+
operations,
|
|
270
|
+
state: {
|
|
271
|
+
totalValue,
|
|
272
|
+
accountDebt: debt,
|
|
273
|
+
leverage: require_sdk_market_math.calcPositionLeverage(totalValue, debt),
|
|
274
|
+
assets,
|
|
275
|
+
quotas: quotas.desiredQuota,
|
|
276
|
+
...metrics
|
|
277
|
+
},
|
|
278
|
+
calls: callsOf(operations),
|
|
279
|
+
delayed
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* The redemption config for `token`, when the credit manager offers exactly one.
|
|
284
|
+
*
|
|
285
|
+
* Several configs mean several venues with different delays and outputs, and
|
|
286
|
+
* nothing in the intent says which one was meant.
|
|
287
|
+
*/
|
|
288
|
+
async function delayedConfig(sdk, creditAccount, token) {
|
|
289
|
+
const compressor = sdk.withdrawalCompressor;
|
|
290
|
+
if (!compressor) throw new require_sdk_accounts_intents_types.IntentPreviewError("noDelayedRoute", "request: chain has no withdrawal compressor");
|
|
291
|
+
const assets = await compressor.findWithdrawableAssets(creditAccount.creditManager, token);
|
|
292
|
+
if (assets.length === 0) throw new require_sdk_accounts_intents_types.IntentPreviewError("noDelayedRoute", `request: ${token} has no delayed withdrawal config`);
|
|
293
|
+
if (assets.length > 1) throw new require_sdk_accounts_intents_types.IntentPreviewError("multipleDelayedWithdrawals", `request: ${token} has ${assets.length} delayed withdrawal configs`);
|
|
294
|
+
return assets[0];
|
|
295
|
+
}
|
|
296
|
+
const callsOf = (operations) => operations.flatMap((op) => op.calls);
|
|
297
|
+
const min = (a, b) => a < b ? a : b;
|
|
298
|
+
/** Balance the router's close path refuses to route, and leaves in place. */
|
|
299
|
+
const DUST = 10n;
|
|
300
|
+
//#endregion
|
|
301
|
+
exports.realize = realize;
|