ts client: fix getMaxWithdrawWithBorrowForToken (#664)

* fix max withdraw amount, wasnt taking into account scaled weights

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

* Fixes from review

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>

---------

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
This commit is contained in:
microwavedcola1 2023-08-07 13:12:37 +02:00 committed by GitHub
parent a7247ad7e7
commit 4c083a9a56
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 4 deletions

View File

@ -352,6 +352,14 @@ export class Bank implements BankForHealth {
);
}
getAssetPrice(): I80F48 {
return this.price.min(I80F48.fromNumber(this.stablePriceModel.stablePrice));
}
getLiabPrice(): I80F48 {
return this.price.max(I80F48.fromNumber(this.stablePriceModel.stablePrice));
}
get price(): I80F48 {
if (this._price === undefined) {
throw new Error(

View File

@ -537,8 +537,8 @@ export class MangoAccount {
let existingPositionHealthContrib = ZERO_I80F48();
if (existingTokenDeposits.gt(ZERO_I80F48())) {
existingPositionHealthContrib = existingTokenDeposits
.mul(tokenBank.price)
.imul(tokenBank.initAssetWeight);
.mul(tokenBank.getAssetPrice())
.imul(tokenBank.scaledInitAssetWeight(tokenBank.getAssetPrice()));
}
// Case 2: token deposits have higher contribution than initHealth,
@ -546,8 +546,8 @@ export class MangoAccount {
if (existingPositionHealthContrib.gt(initHealth)) {
const withdrawAbleExistingPositionHealthContrib = initHealth;
return withdrawAbleExistingPositionHealthContrib
.div(tokenBank.initAssetWeight)
.div(tokenBank.price);
.div(tokenBank.scaledInitAssetWeight(tokenBank.getAssetPrice()))
.div(tokenBank.getAssetPrice());
}
// Case 3: withdraw = withdraw existing deposits + borrows until initHealth reaches 0