@gearbox-protocol/sdk 14.12.0-next.22 → 14.12.0-next.24

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.
Files changed (148) hide show
  1. package/dist/cjs/abi/IWithdrawalCompressorV313.js +2 -1
  2. package/dist/cjs/abi/compressors/withdrawalCompressor.js +2 -1
  3. package/dist/cjs/plugins/adapters/contracts/AbstractAdapter.js +31 -9
  4. package/dist/cjs/plugins/adapters/contracts/AbstractCurveAdapter.js +8 -5
  5. package/dist/cjs/plugins/adapters/contracts/BalancerV3RouterAdapterContract.js +6 -4
  6. package/dist/cjs/plugins/adapters/contracts/BalancerV3WrapperAdapterContract.js +6 -4
  7. package/dist/cjs/plugins/adapters/contracts/CamelotV3AdapterContract.js +6 -9
  8. package/dist/cjs/plugins/adapters/contracts/ConvexV1BaseRewardPoolAdapterContract.js +7 -5
  9. package/dist/cjs/plugins/adapters/contracts/ConvexV1BoosterAdapterContract.js +6 -4
  10. package/dist/cjs/plugins/adapters/contracts/DaiUsdsAdapterContract.js +6 -4
  11. package/dist/cjs/plugins/adapters/contracts/ERC4626AdapterContract.js +13 -4
  12. package/dist/cjs/plugins/adapters/contracts/ERC4626ReferralAdapterContract.js +6 -4
  13. package/dist/cjs/plugins/adapters/contracts/FluidDexAdapterContract.js +8 -8
  14. package/dist/cjs/plugins/adapters/contracts/InfinifiGatewayAdapterContract.js +8 -5
  15. package/dist/cjs/plugins/adapters/contracts/KelpLRTDepositPoolAdapterContract.js +4 -3
  16. package/dist/cjs/plugins/adapters/contracts/LidoV1AdapterContract.js +4 -3
  17. package/dist/cjs/plugins/adapters/contracts/MellowClaimerAdapterContract.js +29 -0
  18. package/dist/cjs/plugins/adapters/contracts/MellowDVVAdapterContract.js +6 -4
  19. package/dist/cjs/plugins/adapters/contracts/MellowERC4626VaultAdapterContract.js +11 -4
  20. package/dist/cjs/plugins/adapters/contracts/MellowWrapperAdapterContract.js +4 -3
  21. package/dist/cjs/plugins/adapters/contracts/MidasGatewayAdapterContract.js +31 -4
  22. package/dist/cjs/plugins/adapters/contracts/MidasIssuanceVaultAdapterContract.js +4 -3
  23. package/dist/cjs/plugins/adapters/contracts/MidasRedemptionVaultAdapterContract.js +4 -3
  24. package/dist/cjs/plugins/adapters/contracts/PendleRouterAdapterContract.js +14 -16
  25. package/dist/cjs/plugins/adapters/contracts/SecuritizeOnRampAdapterContract.js +4 -3
  26. package/dist/cjs/plugins/adapters/contracts/SecuritizeRedemptionGatewayAdapterContract.js +14 -13
  27. package/dist/cjs/plugins/adapters/contracts/StakingRewardsAdapterContract.js +7 -5
  28. package/dist/cjs/plugins/adapters/contracts/TraderJoeRouterAdapterContract.js +4 -3
  29. package/dist/cjs/plugins/adapters/contracts/UniswapV2AdapterContract.js +4 -3
  30. package/dist/cjs/plugins/adapters/contracts/UniswapV3AdapterContract.js +6 -9
  31. package/dist/cjs/plugins/adapters/contracts/UniswapV4AdapterContract.js +8 -8
  32. package/dist/cjs/plugins/adapters/contracts/UpshiftVaultAdapterContract.js +6 -4
  33. package/dist/cjs/plugins/adapters/contracts/VelodromeV2AdapterContract.js +4 -3
  34. package/dist/cjs/plugins/adapters/contracts/WstETHV1AdapterContract.js +6 -4
  35. package/dist/cjs/plugins/delayed-withdrawal/DelayedWithdrawalPlugin.js +1 -5
  36. package/dist/cjs/preview/preview/applyInnerOperations.js +83 -58
  37. package/dist/cjs/preview/preview/applyQuotaChanges.js +43 -0
  38. package/dist/cjs/preview/preview/errors.js +0 -16
  39. package/dist/cjs/preview/preview/index.js +2 -0
  40. package/dist/cjs/preview/preview/previewAdjustCreditAccount.js +19 -8
  41. package/dist/cjs/preview/preview/previewCloseOrRepayCreditAccount.js +18 -7
  42. package/dist/cjs/preview/preview/previewOpenCreditAccount.js +18 -6
  43. package/dist/cjs/preview/preview/types.js +30 -0
  44. package/dist/cjs/preview/preview/unwrapNativeCollateral.js +10 -4
  45. package/dist/cjs/sdk/OnchainSDK.js +3 -6
  46. package/dist/cjs/sdk/accounts/CreditAccountsServiceV310.js +2 -4
  47. package/dist/cjs/sdk/accounts/withdrawal-compressor/AbstractWithdrawalCompressorContract.js +14 -22
  48. package/dist/cjs/sdk/accounts/withdrawal-compressor/addresses.js +6 -18
  49. package/dist/cjs/sdk/accounts/withdrawal-compressor/createWithdrawalCompressor.js +3 -5
  50. package/dist/esm/abi/IWithdrawalCompressorV313.js +2 -1
  51. package/dist/esm/abi/compressors/withdrawalCompressor.js +2 -1
  52. package/dist/esm/plugins/adapters/contracts/AbstractAdapter.js +31 -9
  53. package/dist/esm/plugins/adapters/contracts/AbstractCurveAdapter.js +8 -5
  54. package/dist/esm/plugins/adapters/contracts/BalancerV3RouterAdapterContract.js +6 -4
  55. package/dist/esm/plugins/adapters/contracts/BalancerV3WrapperAdapterContract.js +6 -4
  56. package/dist/esm/plugins/adapters/contracts/CamelotV3AdapterContract.js +6 -9
  57. package/dist/esm/plugins/adapters/contracts/ConvexV1BaseRewardPoolAdapterContract.js +7 -5
  58. package/dist/esm/plugins/adapters/contracts/ConvexV1BoosterAdapterContract.js +6 -4
  59. package/dist/esm/plugins/adapters/contracts/DaiUsdsAdapterContract.js +6 -4
  60. package/dist/esm/plugins/adapters/contracts/ERC4626AdapterContract.js +13 -4
  61. package/dist/esm/plugins/adapters/contracts/ERC4626ReferralAdapterContract.js +6 -4
  62. package/dist/esm/plugins/adapters/contracts/FluidDexAdapterContract.js +8 -8
  63. package/dist/esm/plugins/adapters/contracts/InfinifiGatewayAdapterContract.js +8 -5
  64. package/dist/esm/plugins/adapters/contracts/KelpLRTDepositPoolAdapterContract.js +4 -3
  65. package/dist/esm/plugins/adapters/contracts/LidoV1AdapterContract.js +4 -3
  66. package/dist/esm/plugins/adapters/contracts/MellowClaimerAdapterContract.js +32 -1
  67. package/dist/esm/plugins/adapters/contracts/MellowDVVAdapterContract.js +6 -4
  68. package/dist/esm/plugins/adapters/contracts/MellowERC4626VaultAdapterContract.js +11 -4
  69. package/dist/esm/plugins/adapters/contracts/MellowWrapperAdapterContract.js +4 -3
  70. package/dist/esm/plugins/adapters/contracts/MidasGatewayAdapterContract.js +33 -5
  71. package/dist/esm/plugins/adapters/contracts/MidasIssuanceVaultAdapterContract.js +4 -3
  72. package/dist/esm/plugins/adapters/contracts/MidasRedemptionVaultAdapterContract.js +4 -3
  73. package/dist/esm/plugins/adapters/contracts/PendleRouterAdapterContract.js +14 -16
  74. package/dist/esm/plugins/adapters/contracts/SecuritizeOnRampAdapterContract.js +4 -3
  75. package/dist/esm/plugins/adapters/contracts/SecuritizeRedemptionGatewayAdapterContract.js +14 -13
  76. package/dist/esm/plugins/adapters/contracts/StakingRewardsAdapterContract.js +7 -5
  77. package/dist/esm/plugins/adapters/contracts/TraderJoeRouterAdapterContract.js +4 -3
  78. package/dist/esm/plugins/adapters/contracts/UniswapV2AdapterContract.js +4 -3
  79. package/dist/esm/plugins/adapters/contracts/UniswapV3AdapterContract.js +6 -9
  80. package/dist/esm/plugins/adapters/contracts/UniswapV4AdapterContract.js +8 -8
  81. package/dist/esm/plugins/adapters/contracts/UpshiftVaultAdapterContract.js +6 -4
  82. package/dist/esm/plugins/adapters/contracts/VelodromeV2AdapterContract.js +4 -3
  83. package/dist/esm/plugins/adapters/contracts/WstETHV1AdapterContract.js +6 -4
  84. package/dist/esm/plugins/delayed-withdrawal/DelayedWithdrawalPlugin.js +2 -9
  85. package/dist/esm/preview/preview/applyInnerOperations.js +90 -59
  86. package/dist/esm/preview/preview/applyQuotaChanges.js +19 -0
  87. package/dist/esm/preview/preview/errors.js +0 -15
  88. package/dist/esm/preview/preview/index.js +1 -0
  89. package/dist/esm/preview/preview/previewAdjustCreditAccount.js +20 -8
  90. package/dist/esm/preview/preview/previewCloseOrRepayCreditAccount.js +18 -7
  91. package/dist/esm/preview/preview/previewOpenCreditAccount.js +20 -6
  92. package/dist/esm/preview/preview/types.js +16 -0
  93. package/dist/esm/preview/preview/unwrapNativeCollateral.js +12 -4
  94. package/dist/esm/sdk/OnchainSDK.js +3 -6
  95. package/dist/esm/sdk/accounts/CreditAccountsServiceV310.js +2 -4
  96. package/dist/esm/sdk/accounts/withdrawal-compressor/AbstractWithdrawalCompressorContract.js +14 -22
  97. package/dist/esm/sdk/accounts/withdrawal-compressor/addresses.js +6 -18
  98. package/dist/esm/sdk/accounts/withdrawal-compressor/createWithdrawalCompressor.js +3 -5
  99. package/dist/types/abi/IWithdrawalCompressorV313.d.ts +4 -0
  100. package/dist/types/abi/compressors/withdrawalCompressor.d.ts +4 -0
  101. package/dist/types/permissionless/bindings/compressors/withdrawal-compressor.d.ts +4 -0
  102. package/dist/types/plugins/adapters/contracts/AbstractAdapter.d.ts +27 -7
  103. package/dist/types/plugins/adapters/contracts/AbstractCurveAdapter.d.ts +2 -3
  104. package/dist/types/plugins/adapters/contracts/BalancerV3RouterAdapterContract.d.ts +2 -3
  105. package/dist/types/plugins/adapters/contracts/BalancerV3WrapperAdapterContract.d.ts +2 -3
  106. package/dist/types/plugins/adapters/contracts/CamelotV3AdapterContract.d.ts +2 -3
  107. package/dist/types/plugins/adapters/contracts/ConvexV1BaseRewardPoolAdapterContract.d.ts +2 -3
  108. package/dist/types/plugins/adapters/contracts/ConvexV1BoosterAdapterContract.d.ts +2 -3
  109. package/dist/types/plugins/adapters/contracts/DaiUsdsAdapterContract.d.ts +2 -3
  110. package/dist/types/plugins/adapters/contracts/ERC4626AdapterContract.d.ts +2 -3
  111. package/dist/types/plugins/adapters/contracts/ERC4626ReferralAdapterContract.d.ts +2 -3
  112. package/dist/types/plugins/adapters/contracts/FluidDexAdapterContract.d.ts +2 -3
  113. package/dist/types/plugins/adapters/contracts/InfinifiGatewayAdapterContract.d.ts +2 -3
  114. package/dist/types/plugins/adapters/contracts/KelpLRTDepositPoolAdapterContract.d.ts +2 -3
  115. package/dist/types/plugins/adapters/contracts/LidoV1AdapterContract.d.ts +2 -3
  116. package/dist/types/plugins/adapters/contracts/MellowClaimerAdapterContract.d.ts +3 -2
  117. package/dist/types/plugins/adapters/contracts/MellowDVVAdapterContract.d.ts +2 -3
  118. package/dist/types/plugins/adapters/contracts/MellowERC4626VaultAdapterContract.d.ts +2 -3
  119. package/dist/types/plugins/adapters/contracts/MellowWrapperAdapterContract.d.ts +2 -3
  120. package/dist/types/plugins/adapters/contracts/MidasGatewayAdapterContract.d.ts +2 -3
  121. package/dist/types/plugins/adapters/contracts/MidasIssuanceVaultAdapterContract.d.ts +2 -3
  122. package/dist/types/plugins/adapters/contracts/MidasRedemptionVaultAdapterContract.d.ts +2 -3
  123. package/dist/types/plugins/adapters/contracts/PendleRouterAdapterContract.d.ts +2 -3
  124. package/dist/types/plugins/adapters/contracts/SecuritizeOnRampAdapterContract.d.ts +2 -3
  125. package/dist/types/plugins/adapters/contracts/SecuritizeRedemptionGatewayAdapterContract.d.ts +2 -3
  126. package/dist/types/plugins/adapters/contracts/StakingRewardsAdapterContract.d.ts +2 -3
  127. package/dist/types/plugins/adapters/contracts/TraderJoeRouterAdapterContract.d.ts +2 -3
  128. package/dist/types/plugins/adapters/contracts/UniswapV2AdapterContract.d.ts +2 -3
  129. package/dist/types/plugins/adapters/contracts/UniswapV3AdapterContract.d.ts +2 -3
  130. package/dist/types/plugins/adapters/contracts/UniswapV4AdapterContract.d.ts +2 -3
  131. package/dist/types/plugins/adapters/contracts/UpshiftVaultAdapterContract.d.ts +2 -3
  132. package/dist/types/plugins/adapters/contracts/VelodromeV2AdapterContract.d.ts +2 -3
  133. package/dist/types/plugins/adapters/contracts/WstETHV1AdapterContract.d.ts +2 -3
  134. package/dist/types/plugins/adapters/types.d.ts +0 -10
  135. package/dist/types/preview/preview/applyInnerOperations.d.ts +8 -33
  136. package/dist/types/preview/preview/applyQuotaChanges.d.ts +24 -0
  137. package/dist/types/preview/preview/errors.d.ts +0 -12
  138. package/dist/types/preview/preview/index.d.ts +1 -0
  139. package/dist/types/preview/preview/previewAdjustCreditAccount.d.ts +1 -1
  140. package/dist/types/preview/preview/previewOpenCreditAccount.d.ts +1 -1
  141. package/dist/types/preview/preview/types.d.ts +81 -0
  142. package/dist/types/preview/preview/unwrapNativeCollateral.d.ts +19 -4
  143. package/dist/types/sdk/OnchainSDK.d.ts +3 -6
  144. package/dist/types/sdk/accounts/withdrawal-compressor/WithdrawalCompressorV313Contract.d.ts +4 -0
  145. package/dist/types/sdk/accounts/withdrawal-compressor/addresses.d.ts +1 -2
  146. package/dist/types/sdk/accounts/withdrawal-compressor/createWithdrawalCompressor.d.ts +2 -4
  147. package/dist/types/sdk/accounts/withdrawal-compressor/types.d.ts +7 -0
  148. package/package.json +1 -1
@@ -77,16 +77,17 @@ class MidasRedemptionVaultAdapterContract extends import_AbstractAdapter.Abstrac
77
77
  }))
78
78
  };
79
79
  }
80
- decodeDiffLeftovers(decoded, balances) {
80
+ applyBalanceChanges(balances, decoded) {
81
81
  switch (decoded.functionName) {
82
82
  // redemption spends the mToken down to the leftover, tokenOut arg is
83
83
  // the received token
84
84
  case "redeemInstantDiff": {
85
85
  const [, leftoverAmount] = decoded.args;
86
- return [{ tokenIn: this.mToken, leftoverAmount }];
86
+ this.setLeftover(balances, this.mToken, leftoverAmount);
87
+ break;
87
88
  }
88
89
  default:
89
- return super.decodeDiffLeftovers(decoded, balances);
90
+ super.applyBalanceChanges(balances, decoded);
90
91
  }
91
92
  }
92
93
  }
@@ -117,27 +117,29 @@ class PendleRouterAdapterContract extends import_AbstractAdapter.AbstractAdapter
117
117
  }))
118
118
  };
119
119
  }
120
- decodeDiffLeftovers(decoded, balances) {
120
+ applyBalanceChanges(balances, decoded) {
121
121
  switch (decoded.functionName) {
122
122
  case "swapDiffTokenForPt":
123
123
  case "addLiquiditySingleTokenDiff": {
124
124
  const [, , , diffInput] = decoded.args;
125
- return [
126
- {
127
- tokenIn: diffInput.tokenIn,
128
- leftoverAmount: diffInput.leftoverTokenIn
129
- }
130
- ];
125
+ this.setLeftover(
126
+ balances,
127
+ diffInput.tokenIn,
128
+ diffInput.leftoverTokenIn
129
+ );
130
+ break;
131
131
  }
132
132
  case "swapDiffPtForToken": {
133
133
  const [market, leftoverPt] = decoded.args;
134
134
  const pt = this.#mustFindPendleToken(market, 0 /* PT */);
135
- return [{ tokenIn: pt, leftoverAmount: leftoverPt }];
135
+ this.setLeftover(balances, pt, leftoverPt);
136
+ break;
136
137
  }
137
138
  case "removeLiquiditySingleTokenDiff": {
138
139
  const [market, leftoverLp] = decoded.args;
139
140
  const lp = this.#mustFindPendleToken(market, 1 /* LP */);
140
- return [{ tokenIn: lp, leftoverAmount: leftoverLp }];
141
+ this.setLeftover(balances, lp, leftoverLp);
142
+ break;
141
143
  }
142
144
  case "redeemDiffPyToToken": {
143
145
  const candidates = this.allowedPairs.filter(
@@ -152,15 +154,11 @@ class PendleRouterAdapterContract extends import_AbstractAdapter.AbstractAdapter
152
154
  );
153
155
  }
154
156
  const [, leftoverPt] = decoded.args;
155
- return [
156
- {
157
- tokenIn: candidates[0].pendleToken,
158
- leftoverAmount: leftoverPt
159
- }
160
- ];
157
+ this.setLeftover(balances, candidates[0].pendleToken, leftoverPt);
158
+ break;
161
159
  }
162
160
  default:
163
- return super.decodeDiffLeftovers(decoded, balances);
161
+ super.applyBalanceChanges(balances, decoded);
164
162
  }
165
163
  }
166
164
  #mustFindPendleToken(market, type) {
@@ -64,15 +64,16 @@ class SecuritizeOnRampAdapterContract extends import_AbstractAdapter.AbstractAda
64
64
  liquidityToken: this.#liquidityToken ? this.labelAddress(this.#liquidityToken) : void 0
65
65
  };
66
66
  }
67
- decodeDiffLeftovers(decoded, balances) {
67
+ applyBalanceChanges(balances, decoded) {
68
68
  switch (decoded.functionName) {
69
69
  // swaps the liquidity token into dsToken
70
70
  case "swapDiff": {
71
71
  const [leftoverAmount] = decoded.args;
72
- return [{ tokenIn: this.liquidityToken, leftoverAmount }];
72
+ this.setLeftover(balances, this.liquidityToken, leftoverAmount);
73
+ break;
73
74
  }
74
75
  default:
75
- return super.decodeDiffLeftovers(decoded, balances);
76
+ super.applyBalanceChanges(balances, decoded);
76
77
  }
77
78
  }
78
79
  }
@@ -72,28 +72,29 @@ class SecuritizeRedemptionGatewayAdapterContract extends import_AbstractAdapter.
72
72
  redemptionPhantomToken: this.#redemptionPhantomToken ? this.labelAddress(this.#redemptionPhantomToken) : void 0
73
73
  };
74
74
  }
75
- decodeDiffLeftovers(decoded, balances) {
75
+ applyBalanceChanges(balances, decoded) {
76
76
  switch (decoded.functionName) {
77
- // exact-input redemption: burns dsTokenAmount of the DS token in
78
- // exchange for the redemption phantom token (which is credited by the
79
- // storeExpectedBalances bracket delta, not here)
80
77
  case "redeem": {
81
78
  const [dsTokenAmount] = decoded.args;
82
- const balance = balances.get(this.dsToken) ?? 0n;
83
- return [
84
- {
85
- tokenIn: this.dsToken,
86
- leftoverAmount: balance > dsTokenAmount ? balance - dsTokenAmount : 0n
87
- }
88
- ];
79
+ this.spendExact(balances, this.dsToken, dsTokenAmount);
80
+ break;
89
81
  }
90
82
  // diff-style redemption: spends the DS token down to the leftover
91
83
  case "redeemDiff": {
92
84
  const [leftoverAmount] = decoded.args;
93
- return [{ tokenIn: this.dsToken, leftoverAmount }];
85
+ this.setLeftover(balances, this.dsToken, leftoverAmount);
86
+ break;
94
87
  }
88
+ // TODO:
89
+ // `claim(address[] redeemers)` (the claim call emitted by the
90
+ // withdrawal compressor) cannot be previewed offline: the redemption
91
+ // phantom token burn (the compressor's `withdrawalTokenSpent`, i.e.
92
+ // each redeemer's `getRedemptionAmount()`) lives in per-redeemer clone
93
+ // contracts and is not recoverable from calldata. For claimable
94
+ // redeemers it equals the stablecoin credit, but that value is not in
95
+ // calldata either.
95
96
  default:
96
- return super.decodeDiffLeftovers(decoded, balances);
97
+ super.applyBalanceChanges(balances, decoded);
97
98
  }
98
99
  }
99
100
  }
@@ -100,21 +100,23 @@ class StakingRewardsAdapterContract extends import_AbstractAdapter.AbstractAdapt
100
100
  referral: this.#referral
101
101
  };
102
102
  }
103
- decodeDiffLeftovers(decoded, balances) {
103
+ applyBalanceChanges(balances, decoded) {
104
104
  switch (decoded.functionName) {
105
105
  case "stakeDiff": {
106
106
  const [leftoverAmount] = decoded.args;
107
- return [{ tokenIn: this.stakingToken, leftoverAmount }];
107
+ this.setLeftover(balances, this.stakingToken, leftoverAmount);
108
+ break;
108
109
  }
109
110
  case "withdrawDiff": {
110
111
  const [leftoverAmount] = decoded.args;
111
- return [{ tokenIn: this.stakedPhantomToken, leftoverAmount }];
112
+ this.setLeftover(balances, this.stakedPhantomToken, leftoverAmount);
113
+ break;
112
114
  }
113
115
  // no accrued rewards on a freshly opened account
114
116
  case "getReward":
115
- return [];
117
+ break;
116
118
  default:
117
- return super.decodeDiffLeftovers(decoded, balances);
119
+ super.applyBalanceChanges(balances, decoded);
118
120
  }
119
121
  }
120
122
  }
@@ -82,14 +82,15 @@ class TraderJoeRouterAdapterContract extends import_AbstractAdapter.AbstractAdap
82
82
  }))
83
83
  };
84
84
  }
85
- decodeDiffLeftovers(decoded, balances) {
85
+ applyBalanceChanges(balances, decoded) {
86
86
  switch (decoded.functionName) {
87
87
  case "swapDiffTokensForTokens": {
88
88
  const [leftoverAmount, , path] = decoded.args;
89
- return [{ tokenIn: path.tokenPath[0], leftoverAmount }];
89
+ this.setLeftover(balances, path.tokenPath[0], leftoverAmount);
90
+ break;
90
91
  }
91
92
  default:
92
- return super.decodeDiffLeftovers(decoded, balances);
93
+ super.applyBalanceChanges(balances, decoded);
93
94
  }
94
95
  }
95
96
  }
@@ -93,14 +93,15 @@ class UniswapV2AdapterContract extends import_AbstractAdapter.AbstractAdapterCon
93
93
  classifyLegacyOperation(_parsed, transfers) {
94
94
  return { operation: "UniswapSwap", ...(0, import_transferHelpers.swapFromTransfers)(transfers) };
95
95
  }
96
- decodeDiffLeftovers(decoded, balances) {
96
+ applyBalanceChanges(balances, decoded) {
97
97
  switch (decoded.functionName) {
98
98
  case "swapDiffTokensForTokens": {
99
99
  const [leftoverAmount, , path] = decoded.args;
100
- return [{ tokenIn: path[0], leftoverAmount }];
100
+ this.setLeftover(balances, path[0], leftoverAmount);
101
+ break;
101
102
  }
102
103
  default:
103
- return super.decodeDiffLeftovers(decoded, balances);
104
+ super.applyBalanceChanges(balances, decoded);
104
105
  }
105
106
  }
106
107
  }
@@ -71,24 +71,21 @@ class UniswapV3AdapterContract extends import_AbstractAdapter.AbstractAdapterCon
71
71
  }))
72
72
  };
73
73
  }
74
- decodeDiffLeftovers(decoded, balances) {
74
+ applyBalanceChanges(balances, decoded) {
75
75
  switch (decoded.functionName) {
76
76
  case "exactDiffInputSingle": {
77
77
  const [params] = decoded.args;
78
- return [
79
- {
80
- tokenIn: params.tokenIn,
81
- leftoverAmount: params.leftoverAmount
82
- }
83
- ];
78
+ this.setLeftover(balances, params.tokenIn, params.leftoverAmount);
79
+ break;
84
80
  }
85
81
  case "exactDiffInput": {
86
82
  const [params] = decoded.args;
87
83
  const tokenIn = `0x${params.path.replace("0x", "").slice(0, 40)}`;
88
- return [{ tokenIn, leftoverAmount: params.leftoverAmount }];
84
+ this.setLeftover(balances, tokenIn, params.leftoverAmount);
85
+ break;
89
86
  }
90
87
  default:
91
- return super.decodeDiffLeftovers(decoded, balances);
88
+ super.applyBalanceChanges(balances, decoded);
92
89
  }
93
90
  }
94
91
  stringifyFunctionParams(params) {
@@ -81,19 +81,19 @@ class UniswapV4AdapterContract extends import_AbstractAdapter.AbstractAdapterCon
81
81
  classifyLegacyOperation(_parsed, transfers) {
82
82
  return { operation: "UniswapSwap", ...(0, import_transferHelpers.swapFromTransfers)(transfers) };
83
83
  }
84
- decodeDiffLeftovers(decoded, balances) {
84
+ applyBalanceChanges(balances, decoded) {
85
85
  switch (decoded.functionName) {
86
86
  case "swapExactInputSingleDiff": {
87
87
  const [poolKey, zeroForOne, leftoverAmount] = decoded.args;
88
- return [
89
- {
90
- tokenIn: zeroForOne ? poolKey.token0 : poolKey.token1,
91
- leftoverAmount
92
- }
93
- ];
88
+ this.setLeftover(
89
+ balances,
90
+ zeroForOne ? poolKey.token0 : poolKey.token1,
91
+ leftoverAmount
92
+ );
93
+ break;
94
94
  }
95
95
  default:
96
- return super.decodeDiffLeftovers(decoded, balances);
96
+ super.applyBalanceChanges(balances, decoded);
97
97
  }
98
98
  }
99
99
  }
@@ -70,18 +70,20 @@ class UpshiftVaultAdapterContract extends import_AbstractAdapter.AbstractAdapter
70
70
  stakedPhantomToken: this.#stakedPhantomToken ? this.labelAddress(this.#stakedPhantomToken) : void 0
71
71
  };
72
72
  }
73
- decodeDiffLeftovers(decoded, balances) {
73
+ applyBalanceChanges(balances, decoded) {
74
74
  switch (decoded.functionName) {
75
75
  case "depositDiff": {
76
76
  const [leftoverAmount] = decoded.args;
77
- return [{ tokenIn: this.asset, leftoverAmount }];
77
+ this.setLeftover(balances, this.asset, leftoverAmount);
78
+ break;
78
79
  }
79
80
  case "redeemDiff": {
80
81
  const [leftoverAmount] = decoded.args;
81
- return [{ tokenIn: this.vault, leftoverAmount }];
82
+ this.setLeftover(balances, this.vault, leftoverAmount);
83
+ break;
82
84
  }
83
85
  default:
84
- return super.decodeDiffLeftovers(decoded, balances);
86
+ super.applyBalanceChanges(balances, decoded);
85
87
  }
86
88
  }
87
89
  }
@@ -74,14 +74,15 @@ class VelodromeV2RouterAdapterContract extends import_AbstractAdapter.AbstractAd
74
74
  }))
75
75
  };
76
76
  }
77
- decodeDiffLeftovers(decoded, balances) {
77
+ applyBalanceChanges(balances, decoded) {
78
78
  switch (decoded.functionName) {
79
79
  case "swapDiffTokensForTokens": {
80
80
  const [leftoverAmount, , routes] = decoded.args;
81
- return [{ tokenIn: routes[0].from, leftoverAmount }];
81
+ this.setLeftover(balances, routes[0].from, leftoverAmount);
82
+ break;
82
83
  }
83
84
  default:
84
- return super.decodeDiffLeftovers(decoded, balances);
85
+ super.applyBalanceChanges(balances, decoded);
85
86
  }
86
87
  }
87
88
  }
@@ -65,19 +65,21 @@ class WstETHV1AdapterContract extends import_AbstractAdapter.AbstractAdapterCont
65
65
  }
66
66
  return super.classifyLegacyOperation(parsed, transfers);
67
67
  }
68
- decodeDiffLeftovers(decoded, balances) {
68
+ applyBalanceChanges(balances, decoded) {
69
69
  switch (decoded.functionName) {
70
70
  case "wrapDiff": {
71
71
  const [leftoverAmount] = decoded.args;
72
- return [{ tokenIn: this.stETH, leftoverAmount }];
72
+ this.setLeftover(balances, this.stETH, leftoverAmount);
73
+ break;
73
74
  }
74
75
  // wstETH is the adapter's target contract
75
76
  case "unwrapDiff": {
76
77
  const [leftoverAmount] = decoded.args;
77
- return [{ tokenIn: this.targetContract, leftoverAmount }];
78
+ this.setLeftover(balances, this.targetContract, leftoverAmount);
79
+ break;
78
80
  }
79
81
  default:
80
- return super.decodeDiffLeftovers(decoded, balances);
82
+ super.applyBalanceChanges(balances, decoded);
81
83
  }
82
84
  }
83
85
  }
@@ -30,11 +30,7 @@ class DelayedWithdrawalPlugin extends import_sdk.BasePlugin {
30
30
  return this.state;
31
31
  }
32
32
  this.#withdrawableAssets = new import_sdk.AddressMap(void 0, MAP_LABEL);
33
- const compressor = this.sdk.withdrawalCompressor();
34
- this.sdk.logger?.debug(
35
- `loading delayed withdrawal plugin with compressor ${compressor.address}`
36
- );
37
- const resp = await compressor.getWithdrawableAssetsBatch();
33
+ const resp = await this.sdk.withdrawalCompressor.getWithdrawableAssetsBatch();
38
34
  const byCreditManager = /* @__PURE__ */ new Map();
39
35
  for (const cfg of resp) {
40
36
  const assets = byCreditManager.get(cfg.creditManager) ?? [];
@@ -19,13 +19,13 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
19
19
  var applyInnerOperations_exports = {};
20
20
  __export(applyInnerOperations_exports, {
21
21
  applyInnerOperations: () => applyInnerOperations,
22
- applyQuotaChanges: () => applyQuotaChanges,
23
22
  makeInnerOperationsState: () => makeInnerOperationsState
24
23
  });
25
24
  module.exports = __toCommonJS(applyInnerOperations_exports);
26
25
  var import_adapters = require("../../plugins/adapters/index.js");
27
26
  var import_sdk = require("../../sdk/index.js");
28
27
  var import_applyRWAWrapUnwrap = require("./applyRWAWrapUnwrap.js");
28
+ var import_types = require("./types.js");
29
29
  function makeInnerOperationsState() {
30
30
  return {
31
31
  balances: new import_sdk.AssetsMap(),
@@ -39,41 +39,31 @@ function makeInnerOperationsState() {
39
39
  function applyInnerOperations(sdk, multicall, state) {
40
40
  let inBracket = false;
41
41
  let storeSeen = false;
42
+ let error;
42
43
  for (const op of multicall) {
44
+ let opError;
43
45
  switch (op.operation) {
44
46
  case "AddCollateral":
45
- state.collateralAdded.inc(op.token, op.amount);
46
- state.balances.inc(op.token, op.amount);
47
+ applyAddCollateral(state, op);
47
48
  break;
48
- case "WithdrawCollateral": {
49
- const running = state.balances.getOrZero(op.token);
50
- const amount = op.amount === import_sdk.MAX_UINT256 ? running > 0n ? running : 0n : op.amount;
51
- state.balances.dec(op.token, amount);
52
- state.collateralWithdrawn.inc(op.token, amount);
49
+ case "WithdrawCollateral":
50
+ applyWithdrawCollateral(state, op);
53
51
  break;
54
- }
55
52
  case "IncreaseBorrowedAmount":
56
- state.debt += op.amount;
57
- state.totalDebt += op.amount;
58
- state.balances.inc(op.token, op.amount);
53
+ applyIncreaseDebt(state, op);
59
54
  break;
60
- case "DecreaseBorrowedAmount": {
61
- const repaid = op.amount > state.totalDebt ? state.totalDebt : op.amount;
62
- state.balances.dec(op.token, repaid);
63
- state.totalDebt -= repaid;
64
- if (state.debt > state.totalDebt) {
65
- state.debt = state.totalDebt;
66
- }
55
+ case "DecreaseBorrowedAmount":
56
+ applyDecreaseDebt(state, op);
67
57
  break;
68
- }
69
58
  case "UpdateQuota":
70
59
  state.quotaChanges.push({ token: op.token, balance: op.change });
71
60
  break;
72
61
  case "StoreExpectedBalances":
73
62
  if (storeSeen) {
74
- throw new Error(
75
- "malformed multicall: duplicate storeExpectedBalances call"
76
- );
63
+ opError = {
64
+ code: import_types.ERROR_MALFORMED_BRACKET,
65
+ message: "duplicate storeExpectedBalances call"
66
+ };
77
67
  }
78
68
  storeSeen = true;
79
69
  inBracket = true;
@@ -83,32 +73,83 @@ function applyInnerOperations(sdk, multicall, state) {
83
73
  break;
84
74
  case "CompareBalances":
85
75
  if (!inBracket) {
86
- throw new Error(
87
- "malformed multicall: compareBalances without a preceding storeExpectedBalances"
88
- );
76
+ opError = {
77
+ code: import_types.ERROR_MALFORMED_BRACKET,
78
+ message: "compareBalances without a preceding storeExpectedBalances"
79
+ };
89
80
  }
90
81
  inBracket = false;
91
82
  break;
92
- case "Execute": {
93
- const adapter = sdk.getContract(op.adapter);
94
- if (inBracket) {
95
- if (!(adapter instanceof import_adapters.AbstractAdapterContract)) {
96
- throw new Error(
97
- `call to ${op.adapter} between storeExpectedBalances and compareBalances is not an adapter call`
98
- );
99
- }
100
- adapter.previewBalanceChanges(state.balances, op.calldata);
101
- } else if (isRWAShare(sdk, adapter)) {
102
- (0, import_applyRWAWrapUnwrap.applyRWAWrapUnwrap)(adapter, op.calldata, state.balances);
103
- }
83
+ case "Execute":
84
+ opError = applyExecute(sdk, op, inBracket, state.balances);
104
85
  break;
105
- }
106
86
  }
87
+ error ??= opError;
107
88
  }
108
89
  if (inBracket) {
109
- throw new Error(
110
- "malformed multicall: storeExpectedBalances without a matching compareBalances"
111
- );
90
+ error ??= {
91
+ code: import_types.ERROR_MALFORMED_BRACKET,
92
+ message: "storeExpectedBalances without a matching compareBalances"
93
+ };
94
+ }
95
+ return error;
96
+ }
97
+ function applyAddCollateral(state, op) {
98
+ state.collateralAdded.inc(op.token, op.amount);
99
+ state.balances.inc(op.token, op.amount);
100
+ }
101
+ function applyWithdrawCollateral(state, op) {
102
+ const running = state.balances.getOrZero(op.token);
103
+ const amount = op.amount === import_sdk.MAX_UINT256 ? running > 0n ? running : 0n : op.amount;
104
+ state.balances.dec(op.token, amount);
105
+ state.collateralWithdrawn.inc(op.token, amount);
106
+ }
107
+ function applyIncreaseDebt(state, op) {
108
+ state.debt += op.amount;
109
+ state.totalDebt += op.amount;
110
+ state.balances.inc(op.token, op.amount);
111
+ }
112
+ function applyDecreaseDebt(state, op) {
113
+ const repaid = op.amount > state.totalDebt ? state.totalDebt : op.amount;
114
+ state.balances.dec(op.token, repaid);
115
+ state.totalDebt -= repaid;
116
+ if (state.debt > state.totalDebt) {
117
+ state.debt = state.totalDebt;
118
+ }
119
+ }
120
+ function applyExecute(sdk, op, inBracket, balances) {
121
+ const adapter = sdk.getContract(op.adapter);
122
+ if (!inBracket) {
123
+ if (!isRWAShare(sdk, adapter)) {
124
+ return {
125
+ code: import_types.ERROR_ADAPTER_CALL_OUTSIDE_BRACKET,
126
+ message: `call to ${op.adapter} outside of a storeExpectedBalances/compareBalances bracket`
127
+ };
128
+ }
129
+ try {
130
+ (0, import_applyRWAWrapUnwrap.applyRWAWrapUnwrap)(adapter, op.calldata, balances);
131
+ return void 0;
132
+ } catch (e) {
133
+ return {
134
+ code: import_types.ERROR_UNPREVIEWABLE_RWA_WRAP_UNWRAP,
135
+ message: e instanceof Error ? e.message : String(e)
136
+ };
137
+ }
138
+ }
139
+ if (!(adapter instanceof import_adapters.AbstractAdapterContract)) {
140
+ return {
141
+ code: import_types.ERROR_NON_ADAPTER_CALL_IN_BRACKET,
142
+ message: `call to ${op.adapter} between storeExpectedBalances and compareBalances is not an adapter call`
143
+ };
144
+ }
145
+ try {
146
+ adapter.previewBalanceChanges(balances, op.calldata);
147
+ return void 0;
148
+ } catch (e) {
149
+ return {
150
+ code: import_types.ERROR_UNPREVIEWABLE_ADAPTER_CALL,
151
+ message: e instanceof Error ? e.message : String(e)
152
+ };
112
153
  }
113
154
  }
114
155
  function isRWAShare(sdk, adapter) {
@@ -118,24 +159,8 @@ function isRWAShare(sdk, adapter) {
118
159
  }
119
160
  return false;
120
161
  }
121
- function applyQuotaChanges(initialQuotas, changes) {
122
- const final = initialQuotas.clone();
123
- for (const { token, balance: change } of changes) {
124
- if (change === import_sdk.MIN_INT96) {
125
- final.upsert(token, 0n);
126
- } else {
127
- const next = final.getOrZero(token) + change;
128
- final.upsert(token, next > 0n ? next : 0n);
129
- }
130
- }
131
- return {
132
- quotas: final.toAssets(0n),
133
- quotasChange: final.difference(initialQuotas).toAssets()
134
- };
135
- }
136
162
  // Annotate the CommonJS export names for ESM import in node:
137
163
  0 && (module.exports = {
138
164
  applyInnerOperations,
139
- applyQuotaChanges,
140
165
  makeInnerOperationsState
141
166
  });
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var applyQuotaChanges_exports = {};
20
+ __export(applyQuotaChanges_exports, {
21
+ applyQuotaChanges: () => applyQuotaChanges
22
+ });
23
+ module.exports = __toCommonJS(applyQuotaChanges_exports);
24
+ var import_sdk = require("../../sdk/index.js");
25
+ function applyQuotaChanges(initialQuotas, changes) {
26
+ const final = initialQuotas.clone();
27
+ for (const { token, balance: change } of changes) {
28
+ if (change === import_sdk.MIN_INT96) {
29
+ final.upsert(token, 0n);
30
+ } else {
31
+ const next = final.getOrZero(token) + change;
32
+ final.upsert(token, next > 0n ? next : 0n);
33
+ }
34
+ }
35
+ return {
36
+ quotas: final.toAssets(0n),
37
+ quotasChange: final.difference(initialQuotas).toAssets()
38
+ };
39
+ }
40
+ // Annotate the CommonJS export names for ESM import in node:
41
+ 0 && (module.exports = {
42
+ applyQuotaChanges
43
+ });
@@ -18,24 +18,9 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var errors_exports = {};
20
20
  __export(errors_exports, {
21
- InvalidTransactionValueError: () => InvalidTransactionValueError,
22
21
  UnsupportedOperationError: () => UnsupportedOperationError
23
22
  });
24
23
  module.exports = __toCommonJS(errors_exports);
25
- class InvalidTransactionValueError extends Error {
26
- /** Transaction `msg.value`. */
27
- value;
28
- /** Amount of wrapped native token added as collateral. */
29
- wethCollateral;
30
- constructor(value, wethCollateral) {
31
- super(
32
- `transaction value ${value} exceeds WETH collateral ${wethCollateral}`
33
- );
34
- this.name = "InvalidTransactionValueError";
35
- this.value = value;
36
- this.wethCollateral = wethCollateral;
37
- }
38
- }
39
24
  class UnsupportedOperationError extends Error {
40
25
  /** The parsed operation kind (the `operation` discriminant). */
41
26
  operation;
@@ -47,6 +32,5 @@ class UnsupportedOperationError extends Error {
47
32
  }
48
33
  // Annotate the CommonJS export names for ESM import in node:
49
34
  0 && (module.exports = {
50
- InvalidTransactionValueError,
51
35
  UnsupportedOperationError
52
36
  });
@@ -16,6 +16,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
16
16
  var preview_exports = {};
17
17
  module.exports = __toCommonJS(preview_exports);
18
18
  __reExport(preview_exports, require("./applyInnerOperations.js"), module.exports);
19
+ __reExport(preview_exports, require("./applyQuotaChanges.js"), module.exports);
19
20
  __reExport(preview_exports, require("./detectCloseOrRepay.js"), module.exports);
20
21
  __reExport(preview_exports, require("./errors.js"), module.exports);
21
22
  __reExport(preview_exports, require("./previewAdjustCreditAccount.js"), module.exports);
@@ -25,6 +26,7 @@ __reExport(preview_exports, require("./types.js"), module.exports);
25
26
  // Annotate the CommonJS export names for ESM import in node:
26
27
  0 && (module.exports = {
27
28
  ...require("./applyInnerOperations.js"),
29
+ ...require("./applyQuotaChanges.js"),
28
30
  ...require("./detectCloseOrRepay.js"),
29
31
  ...require("./errors.js"),
30
32
  ...require("./previewAdjustCreditAccount.js"),