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:
parent
a7247ad7e7
commit
4c083a9a56
|
@ -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(
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue