@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,402 @@
|
|
|
1
|
+
import { POS, POS2, RWA_ASSET, UND, WALLET, buildFixtureCreditAccount, buildMarketSdk, caToken } from "../testing/market.js";
|
|
2
|
+
//#region src/sdk/accounts/intents/tests/withdraw.fixtures.ts
|
|
3
|
+
/**
|
|
4
|
+
* Start withdraw fixtures (intent 2.1) — one per row of the S/T matrix.
|
|
5
|
+
*
|
|
6
|
+
* Every case starts from 2000 UND of TVL against 1000 UND of debt: 1000 UND of
|
|
7
|
+
* collateral at 2x. Withdrawing 100 UND of value therefore repays 100 of debt
|
|
8
|
+
* (`dD = D0 * W / C0`), so 200 UND of value must be liquidated in total and the
|
|
9
|
+
* account settles at 1800 TVL / 900 debt — still 2x.
|
|
10
|
+
*
|
|
11
|
+
* `POS` and `POS2` both convert 1:1 with `UND`, keeping swap amounts honest
|
|
12
|
+
* against the mock router, which echoes its input amount.
|
|
13
|
+
*/
|
|
14
|
+
const LT = 9200n;
|
|
15
|
+
const quotaOf = (balance) => balance * LT / 10000n;
|
|
16
|
+
/** 100 UND of value leaving the account. */
|
|
17
|
+
const W = 10000000000n;
|
|
18
|
+
/** Payout plus proportional repayment. */
|
|
19
|
+
const SPEND = 2n * W;
|
|
20
|
+
const TVL_BEFORE = 200000000000n;
|
|
21
|
+
const DEBT_BEFORE = 100000000000n;
|
|
22
|
+
const TVL_AFTER = TVL_BEFORE - SPEND;
|
|
23
|
+
const DEBT_AFTER = DEBT_BEFORE - W;
|
|
24
|
+
const QUOTA_BEFORE = quotaOf(TVL_BEFORE);
|
|
25
|
+
const QUOTA_AFTER = quotaOf(TVL_AFTER);
|
|
26
|
+
/** Quota ops carry signed deltas. */
|
|
27
|
+
const QUOTA_DELTA = QUOTA_AFTER - QUOTA_BEFORE;
|
|
28
|
+
const base = {
|
|
29
|
+
accountDebt: DEBT_BEFORE,
|
|
30
|
+
totalValue: TVL_AFTER,
|
|
31
|
+
accountDebtAfter: DEBT_AFTER
|
|
32
|
+
};
|
|
33
|
+
/** Row 1 — S = U, T = U: repay, then hand over the underlying. */
|
|
34
|
+
const case_und_und = {
|
|
35
|
+
...base,
|
|
36
|
+
intent: {
|
|
37
|
+
type: "WITHDRAW",
|
|
38
|
+
amount: W,
|
|
39
|
+
to: WALLET
|
|
40
|
+
},
|
|
41
|
+
tokens: [caToken(UND, TVL_BEFORE)],
|
|
42
|
+
ops: [{
|
|
43
|
+
type: "decreaseDebt",
|
|
44
|
+
amount: W
|
|
45
|
+
}, {
|
|
46
|
+
type: "withdrawCollateral",
|
|
47
|
+
token: UND,
|
|
48
|
+
amount: W,
|
|
49
|
+
to: WALLET
|
|
50
|
+
}]
|
|
51
|
+
};
|
|
52
|
+
/** Row 2 — S = U, T = POS: repay, then route the payout out of the underlying. */
|
|
53
|
+
const case_und_pos = {
|
|
54
|
+
...base,
|
|
55
|
+
intent: {
|
|
56
|
+
type: "WITHDRAW",
|
|
57
|
+
amount: W,
|
|
58
|
+
to: WALLET,
|
|
59
|
+
tokenOut: POS
|
|
60
|
+
},
|
|
61
|
+
tokens: [caToken(UND, TVL_BEFORE)],
|
|
62
|
+
ops: [
|
|
63
|
+
{
|
|
64
|
+
type: "decreaseDebt",
|
|
65
|
+
amount: W
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
type: "swap",
|
|
69
|
+
from: [{
|
|
70
|
+
token: UND,
|
|
71
|
+
balance: W
|
|
72
|
+
}],
|
|
73
|
+
tokenOut: POS,
|
|
74
|
+
amountOut: W
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
type: "withdrawCollateral",
|
|
78
|
+
token: POS,
|
|
79
|
+
amount: W,
|
|
80
|
+
to: WALLET
|
|
81
|
+
}
|
|
82
|
+
]
|
|
83
|
+
};
|
|
84
|
+
/** Row 3 — S = POS, T = U: both legs land in the underlying, so one swap covers them. */
|
|
85
|
+
const case_pos_und = {
|
|
86
|
+
...base,
|
|
87
|
+
intent: {
|
|
88
|
+
type: "WITHDRAW",
|
|
89
|
+
amount: W,
|
|
90
|
+
to: WALLET,
|
|
91
|
+
sourceToken: POS
|
|
92
|
+
},
|
|
93
|
+
tokens: [caToken(POS, TVL_BEFORE, QUOTA_BEFORE)],
|
|
94
|
+
ops: [
|
|
95
|
+
{
|
|
96
|
+
type: "swap",
|
|
97
|
+
from: [{
|
|
98
|
+
token: POS,
|
|
99
|
+
balance: SPEND
|
|
100
|
+
}],
|
|
101
|
+
tokenOut: UND,
|
|
102
|
+
amountOut: SPEND
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
type: "decreaseDebt",
|
|
106
|
+
amount: W
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
type: "withdrawCollateral",
|
|
110
|
+
token: UND,
|
|
111
|
+
amount: W,
|
|
112
|
+
to: WALLET
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
type: "changeQuota",
|
|
116
|
+
quotaIncrease: [],
|
|
117
|
+
quotaDecrease: [{
|
|
118
|
+
token: POS,
|
|
119
|
+
balance: QUOTA_DELTA
|
|
120
|
+
}],
|
|
121
|
+
desiredQuota: {}
|
|
122
|
+
}
|
|
123
|
+
]
|
|
124
|
+
};
|
|
125
|
+
/** Row 4 — S = T = POS: only the repayment needs routing. */
|
|
126
|
+
const case_pos_pos = {
|
|
127
|
+
...base,
|
|
128
|
+
intent: {
|
|
129
|
+
type: "WITHDRAW",
|
|
130
|
+
amount: W,
|
|
131
|
+
to: WALLET,
|
|
132
|
+
sourceToken: POS,
|
|
133
|
+
tokenOut: POS
|
|
134
|
+
},
|
|
135
|
+
tokens: [caToken(POS, TVL_BEFORE, QUOTA_BEFORE)],
|
|
136
|
+
ops: [
|
|
137
|
+
{
|
|
138
|
+
type: "swap",
|
|
139
|
+
from: [{
|
|
140
|
+
token: POS,
|
|
141
|
+
balance: W
|
|
142
|
+
}],
|
|
143
|
+
tokenOut: UND,
|
|
144
|
+
amountOut: W
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
type: "decreaseDebt",
|
|
148
|
+
amount: W
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
type: "withdrawCollateral",
|
|
152
|
+
token: POS,
|
|
153
|
+
amount: W,
|
|
154
|
+
to: WALLET
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: "changeQuota",
|
|
158
|
+
quotaIncrease: [],
|
|
159
|
+
quotaDecrease: [{
|
|
160
|
+
token: POS,
|
|
161
|
+
balance: QUOTA_DELTA
|
|
162
|
+
}],
|
|
163
|
+
desiredQuota: {}
|
|
164
|
+
}
|
|
165
|
+
]
|
|
166
|
+
};
|
|
167
|
+
/** Row 5 — S = POS, T = POS2: two independent legs out of the same source. */
|
|
168
|
+
const case_pos_pos2 = {
|
|
169
|
+
...base,
|
|
170
|
+
intent: {
|
|
171
|
+
type: "WITHDRAW",
|
|
172
|
+
amount: W,
|
|
173
|
+
to: WALLET,
|
|
174
|
+
sourceToken: POS,
|
|
175
|
+
tokenOut: POS2
|
|
176
|
+
},
|
|
177
|
+
tokens: [caToken(POS, TVL_BEFORE, QUOTA_BEFORE)],
|
|
178
|
+
ops: [
|
|
179
|
+
{
|
|
180
|
+
type: "swap",
|
|
181
|
+
from: [{
|
|
182
|
+
token: POS,
|
|
183
|
+
balance: W
|
|
184
|
+
}],
|
|
185
|
+
tokenOut: UND,
|
|
186
|
+
amountOut: W
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
type: "decreaseDebt",
|
|
190
|
+
amount: W
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
type: "swap",
|
|
194
|
+
from: [{
|
|
195
|
+
token: POS,
|
|
196
|
+
balance: W
|
|
197
|
+
}],
|
|
198
|
+
tokenOut: POS2,
|
|
199
|
+
amountOut: W
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
type: "withdrawCollateral",
|
|
203
|
+
token: POS2,
|
|
204
|
+
amount: W,
|
|
205
|
+
to: WALLET
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
type: "changeQuota",
|
|
209
|
+
quotaIncrease: [],
|
|
210
|
+
quotaDecrease: [{
|
|
211
|
+
token: POS,
|
|
212
|
+
balance: QUOTA_DELTA
|
|
213
|
+
}],
|
|
214
|
+
desiredQuota: {}
|
|
215
|
+
}
|
|
216
|
+
]
|
|
217
|
+
};
|
|
218
|
+
/** RWA market: the underlying payout is force-unwrapped to the asset. */
|
|
219
|
+
const case_rwa_payout = {
|
|
220
|
+
...base,
|
|
221
|
+
intent: {
|
|
222
|
+
type: "WITHDRAW",
|
|
223
|
+
amount: W,
|
|
224
|
+
to: WALLET,
|
|
225
|
+
sourceToken: POS
|
|
226
|
+
},
|
|
227
|
+
tokens: [caToken(POS, TVL_BEFORE, QUOTA_BEFORE)],
|
|
228
|
+
ops: [
|
|
229
|
+
{
|
|
230
|
+
type: "swap",
|
|
231
|
+
from: [{
|
|
232
|
+
token: POS,
|
|
233
|
+
balance: SPEND
|
|
234
|
+
}],
|
|
235
|
+
tokenOut: UND,
|
|
236
|
+
amountOut: SPEND
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
type: "decreaseDebt",
|
|
240
|
+
amount: W
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
type: "unwrapRwaCollateral",
|
|
244
|
+
tokenIn: UND,
|
|
245
|
+
amount: W,
|
|
246
|
+
tokenOut: RWA_ASSET,
|
|
247
|
+
amountOut: W
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
type: "withdrawCollateral",
|
|
251
|
+
token: RWA_ASSET,
|
|
252
|
+
amount: W,
|
|
253
|
+
to: WALLET
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
type: "changeQuota",
|
|
257
|
+
quotaIncrease: [],
|
|
258
|
+
quotaDecrease: [{
|
|
259
|
+
token: POS,
|
|
260
|
+
balance: QUOTA_DELTA
|
|
261
|
+
}],
|
|
262
|
+
desiredQuota: {}
|
|
263
|
+
}
|
|
264
|
+
],
|
|
265
|
+
rwaAssets: { [UND]: RWA_ASSET }
|
|
266
|
+
};
|
|
267
|
+
/** Matrix baseline: 10A of position against 8U of debt (2U collateral at 5x). */
|
|
268
|
+
const M4_BALANCE = 1000000000n;
|
|
269
|
+
const M4_DEBT = 800000000n;
|
|
270
|
+
/** Matrix payout W: 1U. */
|
|
271
|
+
const M4_W = 100000000n;
|
|
272
|
+
/** Proportional repayment `dD = D0 * W / C0` = 4U. */
|
|
273
|
+
const M4_DD = 400000000n;
|
|
274
|
+
/** Payout plus repayment: 5U liquidated in total. */
|
|
275
|
+
const M4_SPEND = 500000000n;
|
|
276
|
+
/**
|
|
277
|
+
* Matrix 4.1 — withdraw 1U, source `POS`, payout `UND`.
|
|
278
|
+
*
|
|
279
|
+
* MATRIX MISMATCH: the matrix pays out first — `swap → withdrawCollateral →
|
|
280
|
+
* decreaseDebt → changeQuota`. The engine repays before paying out
|
|
281
|
+
* (`repay(dD, keep: W)` precedes the payout leg in `planWithdraw`):
|
|
282
|
+
* `swap → decreaseDebt → withdrawCollateral → changeQuota`. Amounts are
|
|
283
|
+
* identical; only the order differs.
|
|
284
|
+
*/
|
|
285
|
+
const case_matrix_4_1 = {
|
|
286
|
+
intent: {
|
|
287
|
+
type: "WITHDRAW",
|
|
288
|
+
amount: M4_W,
|
|
289
|
+
to: WALLET,
|
|
290
|
+
sourceToken: POS
|
|
291
|
+
},
|
|
292
|
+
tokens: [caToken(POS, M4_BALANCE, quotaOf(M4_BALANCE))],
|
|
293
|
+
accountDebt: M4_DEBT,
|
|
294
|
+
totalValue: M4_SPEND,
|
|
295
|
+
accountDebtAfter: M4_DD,
|
|
296
|
+
ops: [
|
|
297
|
+
{
|
|
298
|
+
type: "swap",
|
|
299
|
+
from: [{
|
|
300
|
+
token: POS,
|
|
301
|
+
balance: M4_SPEND
|
|
302
|
+
}],
|
|
303
|
+
tokenOut: UND,
|
|
304
|
+
amountOut: M4_SPEND
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
type: "decreaseDebt",
|
|
308
|
+
amount: M4_DD
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
type: "withdrawCollateral",
|
|
312
|
+
token: UND,
|
|
313
|
+
amount: M4_W,
|
|
314
|
+
to: WALLET
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
type: "changeQuota",
|
|
318
|
+
quotaIncrease: [],
|
|
319
|
+
quotaDecrease: [{
|
|
320
|
+
token: POS,
|
|
321
|
+
balance: quotaOf(M4_SPEND) - quotaOf(M4_BALANCE)
|
|
322
|
+
}],
|
|
323
|
+
desiredQuota: {}
|
|
324
|
+
}
|
|
325
|
+
]
|
|
326
|
+
};
|
|
327
|
+
/**
|
|
328
|
+
* Matrix 4.2 — 4.1 on the RWA market: the payout is unwrapped on the way out.
|
|
329
|
+
*
|
|
330
|
+
* MATRIX MISMATCH: same ordering divergence as 4.1 — the matrix expects
|
|
331
|
+
* `swap → unwrapRwaCollateral → withdrawCollateral(RWA) → decreaseDebt →
|
|
332
|
+
* changeQuota`, the engine repays first:
|
|
333
|
+
* `swap → decreaseDebt → unwrapRwaCollateral → withdrawCollateral(RWA) →
|
|
334
|
+
* changeQuota`.
|
|
335
|
+
*/
|
|
336
|
+
const case_matrix_4_2 = {
|
|
337
|
+
intent: {
|
|
338
|
+
type: "WITHDRAW",
|
|
339
|
+
amount: M4_W,
|
|
340
|
+
to: WALLET,
|
|
341
|
+
sourceToken: POS
|
|
342
|
+
},
|
|
343
|
+
tokens: [caToken(POS, M4_BALANCE, quotaOf(M4_BALANCE))],
|
|
344
|
+
accountDebt: M4_DEBT,
|
|
345
|
+
totalValue: M4_SPEND,
|
|
346
|
+
accountDebtAfter: M4_DD,
|
|
347
|
+
ops: [
|
|
348
|
+
{
|
|
349
|
+
type: "swap",
|
|
350
|
+
from: [{
|
|
351
|
+
token: POS,
|
|
352
|
+
balance: M4_SPEND
|
|
353
|
+
}],
|
|
354
|
+
tokenOut: UND,
|
|
355
|
+
amountOut: M4_SPEND
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
type: "decreaseDebt",
|
|
359
|
+
amount: M4_DD
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
type: "unwrapRwaCollateral",
|
|
363
|
+
tokenIn: UND,
|
|
364
|
+
amount: M4_W,
|
|
365
|
+
tokenOut: RWA_ASSET,
|
|
366
|
+
amountOut: M4_W
|
|
367
|
+
},
|
|
368
|
+
{
|
|
369
|
+
type: "withdrawCollateral",
|
|
370
|
+
token: RWA_ASSET,
|
|
371
|
+
amount: M4_W,
|
|
372
|
+
to: WALLET
|
|
373
|
+
},
|
|
374
|
+
{
|
|
375
|
+
type: "changeQuota",
|
|
376
|
+
quotaIncrease: [],
|
|
377
|
+
quotaDecrease: [{
|
|
378
|
+
token: POS,
|
|
379
|
+
balance: quotaOf(M4_SPEND) - quotaOf(M4_BALANCE)
|
|
380
|
+
}],
|
|
381
|
+
desiredQuota: {}
|
|
382
|
+
}
|
|
383
|
+
],
|
|
384
|
+
rwaAssets: { [UND]: RWA_ASSET }
|
|
385
|
+
};
|
|
386
|
+
function buildWithdrawSdk(c) {
|
|
387
|
+
return buildMarketSdk({ rwaAssets: c.rwaAssets });
|
|
388
|
+
}
|
|
389
|
+
function buildWithdrawProps(c, sdk) {
|
|
390
|
+
return {
|
|
391
|
+
intent: c.intent,
|
|
392
|
+
creditAccount: buildFixtureCreditAccount({
|
|
393
|
+
accountDebt: c.accountDebt,
|
|
394
|
+
tokens: c.tokens
|
|
395
|
+
}),
|
|
396
|
+
sdk,
|
|
397
|
+
quotaReserve: void 0,
|
|
398
|
+
slippage: void 0
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
//#endregion
|
|
402
|
+
export { DEBT_AFTER, DEBT_BEFORE, M4_BALANCE, M4_DD, M4_DEBT, M4_SPEND, M4_W, QUOTA_AFTER, QUOTA_BEFORE, QUOTA_DELTA, SPEND, TVL_AFTER, TVL_BEFORE, W, buildWithdrawProps, buildWithdrawSdk, case_matrix_4_1, case_matrix_4_2, case_pos_pos, case_pos_pos2, case_pos_und, case_rwa_payout, case_und_pos, case_und_und };
|
|
@@ -1 +1,16 @@
|
|
|
1
|
-
|
|
1
|
+
//#region src/sdk/accounts/intents/types.ts
|
|
2
|
+
/**
|
|
3
|
+
* Validation failure that maps onto {@link PreviewErrorReason} rather than
|
|
4
|
+
* crashing the caller: thrown by builders, converted to `{ ok: false }` by
|
|
5
|
+
* `CreditAccountOperationsService.startIntent`.
|
|
6
|
+
*/
|
|
7
|
+
var IntentPreviewError = class extends Error {
|
|
8
|
+
reason;
|
|
9
|
+
constructor(reason, message) {
|
|
10
|
+
super(message ?? reason);
|
|
11
|
+
this.name = "IntentPreviewError";
|
|
12
|
+
this.reason = reason;
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
//#endregion
|
|
16
|
+
export { IntentPreviewError };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/sdk/accounts/intents/utils/adjust-state-to-snapshot.ts
|
|
2
|
+
/**
|
|
3
|
+
* Maps an intents {@link OperationState} onto the {@link AccountSnapshot} that
|
|
4
|
+
* position-metric functions take. `accountDebt` is treated as total debt
|
|
5
|
+
* (principal plus accrued interest and fees).
|
|
6
|
+
**/
|
|
7
|
+
function adjustStateToSnapshot(creditManager, state) {
|
|
8
|
+
return {
|
|
9
|
+
creditManager,
|
|
10
|
+
assets: state.assets,
|
|
11
|
+
quotas: Object.values(state.quotas),
|
|
12
|
+
totalDebt: state.accountDebt,
|
|
13
|
+
totalValue: state.totalValue
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
//#endregion
|
|
17
|
+
export { adjustStateToSnapshot };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { calcBorrowedAmountPlusInterestAndFees } from "./borrowed-amount-plus-interest-and-fees.js";
|
|
2
|
+
//#region src/sdk/accounts/intents/utils/credit-account-slice.ts
|
|
3
|
+
/**
|
|
4
|
+
* Narrows full account data down to the slice the intent engine operates on.
|
|
5
|
+
*
|
|
6
|
+
* `accountDebt` is the total repayable debt (principal + accrued interest +
|
|
7
|
+
* accrued fees) rather than the principal, because every debt-touching intent
|
|
8
|
+
* settles the full outstanding amount.
|
|
9
|
+
*
|
|
10
|
+
* Addresses are lowercased so that `eq` comparisons and `AddressMap` lookups
|
|
11
|
+
* behave consistently everywhere downstream.
|
|
12
|
+
*/
|
|
13
|
+
function toCreditAccountSlice(ca) {
|
|
14
|
+
return {
|
|
15
|
+
creditAccount: ca.creditAccount.toLowerCase(),
|
|
16
|
+
creditManager: ca.creditManager.toLowerCase(),
|
|
17
|
+
creditFacade: ca.creditFacade.toLowerCase(),
|
|
18
|
+
underlying: ca.underlying.toLowerCase(),
|
|
19
|
+
enabledTokensMask: ca.enabledTokensMask,
|
|
20
|
+
totalDebtUSD: ca.totalDebtUSD,
|
|
21
|
+
accountDebt: calcBorrowedAmountPlusInterestAndFees(ca),
|
|
22
|
+
tokens: ca.tokens.map((t) => ({
|
|
23
|
+
...t,
|
|
24
|
+
token: t.token.toLowerCase()
|
|
25
|
+
}))
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Reads an account by address and narrows it to {@link CreditAccountSlice}.
|
|
30
|
+
*
|
|
31
|
+
* The shared read model's `StrategyPosition` carries neither `tokens` nor
|
|
32
|
+
* `enabledTokensMask` / `creditFacade` / `totalDebtUSD`, so simulating against
|
|
33
|
+
* an existing position costs one account read.
|
|
34
|
+
*
|
|
35
|
+
* @throws When the account is not found in the connected markets.
|
|
36
|
+
*/
|
|
37
|
+
async function fetchCreditAccountSlice(sdk, creditAccount) {
|
|
38
|
+
const data = await sdk.accounts.getCreditAccountData(creditAccount);
|
|
39
|
+
if (!data) throw new Error(`credit account not found: ${creditAccount}`);
|
|
40
|
+
return toCreditAccountSlice(data);
|
|
41
|
+
}
|
|
42
|
+
//#endregion
|
|
43
|
+
export { fetchCreditAccountSlice, toCreditAccountSlice };
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import { assembleOperationCalls } from "./assemble-operation-calls.js";
|
|
2
|
-
import { calcBorrowedAmountPlusInterestAndFees } from "./borrowed-amount-plus-interest-and-fees.js";
|
|
3
1
|
import { eq, toRouterCaSlice, toTargetDecimals } from "./common.js";
|
|
4
2
|
import { convertAmount } from "./convert-amount.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
3
|
+
import { isPhantomToken, isRedemptionPhantomToken, pickFattestNonPhantomToken, rankAccountTokens } from "./pick-token.js";
|
|
4
|
+
import { adjustStateToSnapshot } from "./adjust-state-to-snapshot.js";
|
|
5
|
+
import { assembleOperationCalls } from "./assemble-operation-calls.js";
|
|
6
|
+
import { calcBorrowedAmountPlusInterestAndFees } from "./borrowed-amount-plus-interest-and-fees.js";
|
|
7
|
+
import { fetchCreditAccountSlice, toCreditAccountSlice } from "./credit-account-slice.js";
|
|
8
|
+
import { OperationLedger } from "./ledger.js";
|
|
9
|
+
import { clearedQuotas, getQuotasForUpdate } from "./quotas-for-update.js";
|
|
10
|
+
import { createRouterPaths } from "./router-path.js";
|
|
11
|
+
export { OperationLedger, adjustStateToSnapshot, assembleOperationCalls, calcBorrowedAmountPlusInterestAndFees, clearedQuotas, convertAmount, createRouterPaths, eq, fetchCreditAccountSlice, getQuotasForUpdate, isPhantomToken, isRedemptionPhantomToken, pickFattestNonPhantomToken, rankAccountTokens, toCreditAccountSlice, toRouterCaSlice, toTargetDecimals };
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { BigIntMath } from "../../../utils/bigint-math.js";
|
|
2
|
+
//#region src/sdk/accounts/intents/utils/ledger.ts
|
|
3
|
+
/**
|
|
4
|
+
* Running account state, advanced one operation at a time.
|
|
5
|
+
*
|
|
6
|
+
* Exists because the amounts an operation is built from depend on the balances
|
|
7
|
+
* the previous ones left behind: a swap has to know how much of its input token
|
|
8
|
+
* is genuinely swap input, so the router does not sweep collateral that must
|
|
9
|
+
* stay put. Applying each op as it is built keeps that a single forward pass —
|
|
10
|
+
* a builder that re-simulated the chain from the start for every leg would be
|
|
11
|
+
* quadratic in the number of legs and easy to desynchronise.
|
|
12
|
+
*/
|
|
13
|
+
var OperationLedger = class {
|
|
14
|
+
#balances = /* @__PURE__ */ new Map();
|
|
15
|
+
#underlying;
|
|
16
|
+
#convert;
|
|
17
|
+
#debt;
|
|
18
|
+
constructor(args) {
|
|
19
|
+
this.#underlying = args.underlying;
|
|
20
|
+
this.#convert = args.convert;
|
|
21
|
+
this.#debt = args.debt;
|
|
22
|
+
for (const asset of args.initialAssets) {
|
|
23
|
+
const token = asset.token.toLowerCase();
|
|
24
|
+
this.#balances.set(token, (this.#balances.get(token) ?? 0n) + asset.balance);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
get debt() {
|
|
28
|
+
return this.#debt;
|
|
29
|
+
}
|
|
30
|
+
balanceOf(token) {
|
|
31
|
+
return this.#balances.get(token.toLowerCase()) ?? 0n;
|
|
32
|
+
}
|
|
33
|
+
applyAll(operations) {
|
|
34
|
+
for (const op of operations) this.apply(op);
|
|
35
|
+
return this;
|
|
36
|
+
}
|
|
37
|
+
snapshot() {
|
|
38
|
+
const assets = [...this.#balances.entries()].map(([token, balance]) => ({
|
|
39
|
+
token,
|
|
40
|
+
balance
|
|
41
|
+
}));
|
|
42
|
+
return {
|
|
43
|
+
assets,
|
|
44
|
+
totalValue: assets.reduce((acc, a) => acc + this.#convert(a.token, this.#underlying, a.balance), 0n),
|
|
45
|
+
debt: this.#debt
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/** Advances the state by one operation; quota changes move no balance. */
|
|
49
|
+
apply(op) {
|
|
50
|
+
switch (op.type) {
|
|
51
|
+
case "changeQuota": break;
|
|
52
|
+
case "increaseDebt":
|
|
53
|
+
this.#debt += op.amount;
|
|
54
|
+
this.#add(this.#underlying, op.amount);
|
|
55
|
+
break;
|
|
56
|
+
case "decreaseDebt":
|
|
57
|
+
this.#debt = BigIntMath.max(0n, this.#debt - op.amount);
|
|
58
|
+
this.#add(this.#underlying, -op.amount);
|
|
59
|
+
break;
|
|
60
|
+
case "addCollateral":
|
|
61
|
+
this.#add(op.token, op.amount);
|
|
62
|
+
break;
|
|
63
|
+
case "withdrawCollateral":
|
|
64
|
+
this.#add(op.token, -op.amount);
|
|
65
|
+
break;
|
|
66
|
+
case "swap":
|
|
67
|
+
for (const input of op.from) this.#add(input.token, -input.balance);
|
|
68
|
+
this.#add(op.tokenOut, op.amountOut);
|
|
69
|
+
break;
|
|
70
|
+
case "wrapRwaCollateral":
|
|
71
|
+
case "unwrapRwaCollateral":
|
|
72
|
+
this.#add(op.tokenIn, -op.amount);
|
|
73
|
+
this.#add(op.tokenOut, op.amountOut);
|
|
74
|
+
break;
|
|
75
|
+
case "startDelayedWithdrawal":
|
|
76
|
+
this.#add(op.token, -op.amountIn);
|
|
77
|
+
for (const out of op.outputs) this.#add(out.token, out.amount);
|
|
78
|
+
break;
|
|
79
|
+
case "claimDelayedWithdrawal":
|
|
80
|
+
this.#add(op.withdrawalPhantomToken, -op.withdrawalTokenSpent);
|
|
81
|
+
for (const out of op.outputs) this.#add(out.token, out.amount);
|
|
82
|
+
}
|
|
83
|
+
return this;
|
|
84
|
+
}
|
|
85
|
+
#add(token, delta) {
|
|
86
|
+
const key = token.toLowerCase();
|
|
87
|
+
const balance = (this.#balances.get(key) ?? 0n) + delta;
|
|
88
|
+
if (balance <= 0n) this.#balances.delete(key);
|
|
89
|
+
else this.#balances.set(key, balance);
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
//#endregion
|
|
93
|
+
export { OperationLedger };
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { NON_STRATEGY_PHANTOM_TOKEN_TYPES } from "../../../market/credit/isStrategyCollateral.js";
|
|
2
|
+
import { eq } from "./common.js";
|
|
3
|
+
import { convertAmount } from "./convert-amount.js";
|
|
4
|
+
//#region src/sdk/accounts/intents/utils/pick-token.ts
|
|
5
|
+
/** Prefix marking every phantom-token contract type in the registry. */
|
|
6
|
+
const PHANTOM_TOKEN_PREFIX = "PHANTOM_TOKEN::";
|
|
7
|
+
/**
|
|
8
|
+
* Whether `token` is a phantom (a non-transferable position marker such as a
|
|
9
|
+
* pending delayed withdrawal).
|
|
10
|
+
*
|
|
11
|
+
* Reads `contractType` directly instead of going through
|
|
12
|
+
* `TokensMeta.isPhantomToken`, which throws when extended token data has not
|
|
13
|
+
* been loaded. Here an unknown token is simply treated as non-phantom.
|
|
14
|
+
*/
|
|
15
|
+
function isPhantomToken(sdk, token) {
|
|
16
|
+
return !!sdk.tokensMeta.get(token)?.contractType?.startsWith(PHANTOM_TOKEN_PREFIX);
|
|
17
|
+
}
|
|
18
|
+
const REDEMPTION_PHANTOM_TOKEN_TYPES = new Set(NON_STRATEGY_PHANTOM_TOKEN_TYPES);
|
|
19
|
+
/**
|
|
20
|
+
* Whether `token` is the phantom of a redemption in flight, rather than one of
|
|
21
|
+
* the phantoms a position is simply held in (Convex, Infrared, staking
|
|
22
|
+
* rewards), which the router sells like any other balance.
|
|
23
|
+
*
|
|
24
|
+
* Only the former stands between an account and being emptied: it cannot be
|
|
25
|
+
* sold and it cannot leave until its claim has landed.
|
|
26
|
+
*/
|
|
27
|
+
function isRedemptionPhantomToken(sdk, token) {
|
|
28
|
+
const contractType = sdk.tokensMeta.get(token)?.contractType;
|
|
29
|
+
return !!contractType && REDEMPTION_PHANTOM_TOKEN_TYPES.has(contractType);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Account balances that can actually back an operation, richest first.
|
|
33
|
+
*
|
|
34
|
+
* Phantoms are dropped because a pending delayed withdrawal cannot be spent:
|
|
35
|
+
* it has to be claimed first, in a transaction of its own.
|
|
36
|
+
*/
|
|
37
|
+
function rankAccountTokens(args) {
|
|
38
|
+
const { creditAccount, sdk, exclude = [] } = args;
|
|
39
|
+
const convert = convertAmount(sdk, creditAccount.creditManager);
|
|
40
|
+
const candidates = [];
|
|
41
|
+
for (const t of creditAccount.tokens) {
|
|
42
|
+
if (t.balance <= 0n) continue;
|
|
43
|
+
if (exclude.some((e) => eq(e, t.token))) continue;
|
|
44
|
+
if (isPhantomToken(sdk, t.token)) continue;
|
|
45
|
+
candidates.push({
|
|
46
|
+
token: t.token,
|
|
47
|
+
balance: t.balance,
|
|
48
|
+
valueInUnderlying: convert(t.token, creditAccount.underlying, t.balance)
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
candidates.sort((a, b) => {
|
|
52
|
+
if (a.valueInUnderlying !== b.valueInUnderlying) return a.valueInUnderlying > b.valueInUnderlying ? -1 : 1;
|
|
53
|
+
return a.token < b.token ? -1 : a.token > b.token ? 1 : 0;
|
|
54
|
+
});
|
|
55
|
+
return candidates;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Default working token for flows that do not get one from the caller: the
|
|
59
|
+
* most valuable non-phantom balance on the account.
|
|
60
|
+
*
|
|
61
|
+
* Used for the source of a partial withdraw and the position leg of a leverage
|
|
62
|
+
* adjustment, both of which the caller may override explicitly.
|
|
63
|
+
*/
|
|
64
|
+
function pickFattestNonPhantomToken(args) {
|
|
65
|
+
return rankAccountTokens(args)[0];
|
|
66
|
+
}
|
|
67
|
+
//#endregion
|
|
68
|
+
export { isPhantomToken, isRedemptionPhantomToken, pickFattestNonPhantomToken, rankAccountTokens };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { TypedObjectUtils } from "../../../utils/mappers.js";
|
|
2
|
+
import { MIN_INT96 } from "../../../constants/math.js";
|
|
2
3
|
import { calcQuotaUpdate } from "../../../../common-utils/utils/creditAccount/quota-utils.js";
|
|
3
4
|
//#region src/sdk/accounts/intents/utils/quotas-for-update.ts
|
|
4
5
|
function getQuotasForUpdate({ assetsBefore, assetsAfter, initialQuotas, quotaReserve = 0, liquidationThresholds: liquidationThresholdsMap, quotas: quotasMap, maxDebt, underlyingToken, convert }) {
|
|
@@ -51,6 +52,31 @@ function getQuotasForUpdate({ assetsBefore, assetsAfter, initialQuotas, quotaRes
|
|
|
51
52
|
});
|
|
52
53
|
return filterQuotaUpdates(quotaResult.desiredQuota, quotaResult.quotaIncrease, quotaResult.quotaDecrease, [...new Set([...spend, ...obtain].map((q) => q.token)).values()]);
|
|
53
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* The update that leaves the account holding no quota at all.
|
|
57
|
+
*
|
|
58
|
+
* Sits beside {@link getQuotasForUpdate} rather than inside it because the two
|
|
59
|
+
* answer different questions: that one sizes quotas to the balances an
|
|
60
|
+
* operation leaves behind, this one is asked for by a plan that ends the loan,
|
|
61
|
+
* where the right size is none whatever the balances are.
|
|
62
|
+
*
|
|
63
|
+
* `MIN_INT96` is the protocol's "reset" sentinel, which is how a decrease says
|
|
64
|
+
* "all of it" instead of naming an amount that interest may have moved.
|
|
65
|
+
*/
|
|
66
|
+
function clearedQuotas(initialQuotas) {
|
|
67
|
+
const quoted = initialQuotas.filter((q) => q.quota > 0n).map((q) => q.token.toLowerCase());
|
|
68
|
+
return {
|
|
69
|
+
desiredQuota: TypedObjectUtils.fromEntries(quoted.map((token) => [token, {
|
|
70
|
+
token,
|
|
71
|
+
balance: 0n
|
|
72
|
+
}])),
|
|
73
|
+
quotaIncrease: [],
|
|
74
|
+
quotaDecrease: quoted.map((token) => ({
|
|
75
|
+
token,
|
|
76
|
+
balance: MIN_INT96
|
|
77
|
+
}))
|
|
78
|
+
};
|
|
79
|
+
}
|
|
54
80
|
function collectQuotaChange(assetsBefore, assetsAfter) {
|
|
55
81
|
const before = new Map(assetsBefore.map((a) => [a.token, a.balance]));
|
|
56
82
|
const after = new Map(assetsAfter.map((a) => [a.token, a.balance]));
|
|
@@ -118,4 +144,4 @@ function constructAssetRecord(a) {
|
|
|
118
144
|
}, {});
|
|
119
145
|
}
|
|
120
146
|
//#endregion
|
|
121
|
-
export { getQuotasForUpdate };
|
|
147
|
+
export { clearedQuotas, getQuotasForUpdate };
|