@@ -19,6 +19,7 @@ import {
1919 MAX_UINT256 ,
2020 sendRawTx ,
2121} from "../sdk" ;
22+ import { PERCENTAGE_FACTOR } from "../sdk/constants" ;
2223import { type AnvilClient , createAnvilClient } from "./createAnvilClient" ;
2324
2425export interface AccountOpenerOptions {
@@ -114,13 +115,32 @@ export class AccountOpener {
114115 slippage,
115116 target : collateral ,
116117 } ) ;
117- logger ?. debug ( "found open strategy" ) ;
118+ logger ?. debug ( strategy , "found open strategy" ) ;
119+ const debt = minDebt * BigInt ( leverage - 1 ) ;
118120 const { tx, calls } = await this . #service. openCA ( {
119121 creditManager : cm . creditManager . address ,
120- averageQuota : [ ] ,
121- minQuota : [ ] ,
122+ averageQuota : [
123+ {
124+ token : collateral ,
125+ balance : this . #calcQuota(
126+ strategy . amount ,
127+ debt ,
128+ BigInt ( cm . collateralTokens [ collateral ] ) ,
129+ ) ,
130+ } ,
131+ ] ,
132+ minQuota : [
133+ {
134+ token : collateral ,
135+ balance : this . #calcQuota(
136+ strategy . minAmount ,
137+ debt ,
138+ BigInt ( cm . collateralTokens [ collateral ] ) ,
139+ ) ,
140+ } ,
141+ ] ,
122142 collateral : [ { token : underlying , balance : minDebt } ] ,
123- debt : minDebt * BigInt ( leverage - 1 ) ,
143+ debt,
124144 calls : strategy . calls ,
125145 ethAmount : 0n ,
126146 permits : { } ,
@@ -340,6 +360,15 @@ export class AccountOpener {
340360 return this . #borrower;
341361 }
342362
363+ #calcQuota( amount : bigint , debt : bigint , lt : bigint ) : bigint {
364+ let quota = ( amount * lt ) / PERCENTAGE_FACTOR ;
365+ quota = debt < quota ? debt : quota ;
366+
367+ quota = ( quota * ( PERCENTAGE_FACTOR + 500n ) ) / PERCENTAGE_FACTOR ;
368+
369+ return ( quota / PERCENTAGE_FACTOR ) * PERCENTAGE_FACTOR ;
370+ }
371+
343372 private get sdk ( ) : GearboxSDK {
344373 return this . #service. sdk ;
345374 }
0 commit comments