@@ -150,79 +150,79 @@ export class LeverageZapV2Module {
150150 maxLeverage : string ,
151151 avgPrice : string ,
152152 } > > => {
153- this . _checkLeverageZap ( ) ;
154- const _userCollateral = parseUnits ( userCollateral , this . market . collateral_token . decimals ) ;
155- const contract = this . llamalend . contracts [ this . llamalend . constants . ALIASES . leverage_zap_v2 ] . multicallContract ;
156-
157- const oraclePriceBand = await this . market . oraclePriceBand ( ) ;
158- const pAvgApproxBN = BN ( await this . market . calcTickPrice ( oraclePriceBand ) ) ; // upper tick of oracle price band
159- let pAvgBN : BigNumber | null = null ;
160- const arrLength = this . market . maxBands - this . market . minBands + 1 ;
161- let maxLeverageCollateralBN : BigNumber [ ] = new Array ( arrLength ) . fill ( BN ( 0 ) ) ;
162- let _maxLeverageCollateral : bigint [ ] = new Array ( arrLength ) . fill ( BigInt ( 0 ) ) ;
163- let maxBorrowablePrevBN : BigNumber [ ] = new Array ( arrLength ) . fill ( BN ( 0 ) ) ;
164- let maxBorrowableBN : BigNumber [ ] = new Array ( arrLength ) . fill ( BN ( 0 ) ) ;
165- let _maxBorrowable : bigint [ ] = new Array ( arrLength ) . fill ( BigInt ( 0 ) ) ;
166-
167- for ( let i = 0 ; i < 5 ; i ++ ) {
168- const pBN = pAvgBN ?? pAvgApproxBN ;
169- maxBorrowablePrevBN = maxBorrowableBN ;
170- const _userEffectiveCollateral : bigint = _userCollateral + fromBN ( BN ( userBorrowed ) . div ( pBN ) , this . market . collateral_token . decimals ) ;
171- const calls = [ ] ;
172- for ( let N = this . market . minBands ; N <= this . market . maxBands ; N ++ ) {
173- const j = N - this . market . minBands ;
174- calls . push ( contract . max_borrowable ( this . market . addresses . controller , _userEffectiveCollateral , _maxLeverageCollateral [ j ] , N , fromBN ( pBN ) ) ) ;
175- }
176- _maxBorrowable = ( await this . llamalend . multicallProvider . all ( calls ) as bigint [ ] ) . map ( ( _mb ) => _mb * BigInt ( 998 ) / BigInt ( 1000 ) ) ;
177- maxBorrowableBN = _maxBorrowable . map ( ( _mb ) => toBN ( _mb , this . market . borrowed_token . decimals ) ) ;
178-
179- const deltaBN = maxBorrowableBN . map ( ( mb , l ) => mb . minus ( maxBorrowablePrevBN [ l ] ) . abs ( ) . div ( mb ) ) ;
180- if ( BigNumber . max ( ...deltaBN ) . lt ( 0.0005 ) ) {
181- maxBorrowableBN = maxBorrowablePrevBN ;
182- break ;
183- }
184-
185- if ( pAvgBN === null ) {
186- const _y = BigInt ( ( await getExpected (
187- this . market . addresses . borrowed_token ,
188- this . market . addresses . collateral_token ,
189- _maxBorrowable [ 0 ] ,
190- this . market . addresses . amm
191- ) ) . outAmount ) ;
192- const yBN = toBN ( _y , this . market . collateral_token . decimals ) ;
193- pAvgBN = maxBorrowableBN [ 0 ] . div ( yBN ) ;
194- }
195-
196- maxLeverageCollateralBN = maxBorrowableBN . map ( ( mb ) => mb . div ( pAvgBN as BigNumber ) ) ;
197- _maxLeverageCollateral = maxLeverageCollateralBN . map ( ( mlc ) => fromBN ( mlc , this . market . collateral_token . decimals ) ) ;
198- }
153+ this . _checkLeverageZap ( ) ;
154+ const _userCollateral = parseUnits ( userCollateral , this . market . collateral_token . decimals ) ;
155+ const contract = this . llamalend . contracts [ this . llamalend . constants . ALIASES . leverage_zap_v2 ] . multicallContract ;
199156
200- const userEffectiveCollateralBN = BN ( userCollateral ) . plus ( BN ( userBorrowed ) . div ( pAvgBN as BigNumber ) ) ;
201-
202- const res : IDict < {
203- maxDebt : string ,
204- maxTotalCollateral : string ,
205- userCollateral : string ,
206- collateralFromUserBorrowed : string ,
207- collateralFromMaxDebt : string ,
208- maxLeverage : string ,
209- avgPrice : string ,
210- } > = { } ;
157+ const oraclePriceBand = await this . market . oraclePriceBand ( ) ;
158+ const pAvgApproxBN = BN ( await this . market . calcTickPrice ( oraclePriceBand ) ) ; // upper tick of oracle price band
159+ let pAvgBN : BigNumber | null = null ;
160+ const arrLength = this . market . maxBands - this . market . minBands + 1 ;
161+ let maxLeverageCollateralBN : BigNumber [ ] = new Array ( arrLength ) . fill ( BN ( 0 ) ) ;
162+ let _maxLeverageCollateral : bigint [ ] = new Array ( arrLength ) . fill ( BigInt ( 0 ) ) ;
163+ let maxBorrowablePrevBN : BigNumber [ ] = new Array ( arrLength ) . fill ( BN ( 0 ) ) ;
164+ let maxBorrowableBN : BigNumber [ ] = new Array ( arrLength ) . fill ( BN ( 0 ) ) ;
165+ let _maxBorrowable : bigint [ ] = new Array ( arrLength ) . fill ( BigInt ( 0 ) ) ;
166+
167+ for ( let i = 0 ; i < 5 ; i ++ ) {
168+ const pBN = pAvgBN ?? pAvgApproxBN ;
169+ maxBorrowablePrevBN = maxBorrowableBN ;
170+ const _userEffectiveCollateral : bigint = _userCollateral + fromBN ( BN ( userBorrowed ) . div ( pBN ) , this . market . collateral_token . decimals ) ;
171+ const calls = [ ] ;
211172 for ( let N = this . market . minBands ; N <= this . market . maxBands ; N ++ ) {
212173 const j = N - this . market . minBands ;
213- res [ N ] = {
214- maxDebt : formatNumber ( maxBorrowableBN [ j ] . toString ( ) , this . market . borrowed_token . decimals ) ,
215- maxTotalCollateral : formatNumber ( maxLeverageCollateralBN [ j ] . plus ( userEffectiveCollateralBN ) . toString ( ) , this . market . collateral_token . decimals ) ,
216- userCollateral : formatNumber ( userCollateral , this . market . collateral_token . decimals ) ,
217- collateralFromUserBorrowed : formatNumber ( BN ( userBorrowed ) . div ( pAvgBN as BigNumber ) . toString ( ) , this . market . collateral_token . decimals ) ,
218- collateralFromMaxDebt : formatNumber ( maxLeverageCollateralBN [ j ] . toString ( ) , this . market . collateral_token . decimals ) ,
219- maxLeverage : maxLeverageCollateralBN [ j ] . plus ( userEffectiveCollateralBN ) . div ( userEffectiveCollateralBN ) . toString ( ) ,
220- avgPrice : ( pAvgBN as BigNumber ) . toString ( ) ,
221- } ;
174+ calls . push ( contract . max_borrowable ( this . market . addresses . controller , _userEffectiveCollateral , _maxLeverageCollateral [ j ] , N , fromBN ( pBN ) ) ) ;
222175 }
176+ _maxBorrowable = ( await this . llamalend . multicallProvider . all ( calls ) as bigint [ ] ) . map ( ( _mb ) => _mb * BigInt ( 998 ) / BigInt ( 1000 ) ) ;
177+ maxBorrowableBN = _maxBorrowable . map ( ( _mb ) => toBN ( _mb , this . market . borrowed_token . decimals ) ) ;
223178
224- return res ;
225- } ,
179+ const deltaBN = maxBorrowableBN . map ( ( mb , l ) => mb . minus ( maxBorrowablePrevBN [ l ] ) . abs ( ) . div ( mb ) ) ;
180+ if ( BigNumber . max ( ...deltaBN ) . lt ( 0.0005 ) ) {
181+ maxBorrowableBN = maxBorrowablePrevBN ;
182+ break ;
183+ }
184+
185+ if ( pAvgBN === null ) {
186+ const _y = BigInt ( ( await getExpected (
187+ this . market . addresses . borrowed_token ,
188+ this . market . addresses . collateral_token ,
189+ _maxBorrowable [ 0 ] ,
190+ this . market . addresses . amm
191+ ) ) . outAmount ) ;
192+ const yBN = toBN ( _y , this . market . collateral_token . decimals ) ;
193+ pAvgBN = maxBorrowableBN [ 0 ] . div ( yBN ) ;
194+ }
195+
196+ maxLeverageCollateralBN = maxBorrowableBN . map ( ( mb ) => mb . div ( pAvgBN as BigNumber ) ) ;
197+ _maxLeverageCollateral = maxLeverageCollateralBN . map ( ( mlc ) => fromBN ( mlc , this . market . collateral_token . decimals ) ) ;
198+ }
199+
200+ const userEffectiveCollateralBN = BN ( userCollateral ) . plus ( BN ( userBorrowed ) . div ( pAvgBN as BigNumber ) ) ;
201+
202+ const res : IDict < {
203+ maxDebt : string ,
204+ maxTotalCollateral : string ,
205+ userCollateral : string ,
206+ collateralFromUserBorrowed : string ,
207+ collateralFromMaxDebt : string ,
208+ maxLeverage : string ,
209+ avgPrice : string ,
210+ } > = { } ;
211+ for ( let N = this . market . minBands ; N <= this . market . maxBands ; N ++ ) {
212+ const j = N - this . market . minBands ;
213+ res [ N ] = {
214+ maxDebt : formatNumber ( maxBorrowableBN [ j ] . toString ( ) , this . market . borrowed_token . decimals ) ,
215+ maxTotalCollateral : formatNumber ( maxLeverageCollateralBN [ j ] . plus ( userEffectiveCollateralBN ) . toString ( ) , this . market . collateral_token . decimals ) ,
216+ userCollateral : formatNumber ( userCollateral , this . market . collateral_token . decimals ) ,
217+ collateralFromUserBorrowed : formatNumber ( BN ( userBorrowed ) . div ( pAvgBN as BigNumber ) . toString ( ) , this . market . collateral_token . decimals ) ,
218+ collateralFromMaxDebt : formatNumber ( maxLeverageCollateralBN [ j ] . toString ( ) , this . market . collateral_token . decimals ) ,
219+ maxLeverage : maxLeverageCollateralBN [ j ] . plus ( userEffectiveCollateralBN ) . div ( userEffectiveCollateralBN ) . toString ( ) ,
220+ avgPrice : ( pAvgBN as BigNumber ) . toString ( ) ,
221+ } ;
222+ }
223+
224+ return res ;
225+ } ,
226226 {
227227 promise : true ,
228228 maxAge : 60 * 1000 , // 1m
0 commit comments