liquidator: fix withdraws on rebalance (#929)
- always allow them, now that v0.22 is deployed and delegates can withdraw small token amounts to the owner's ata - increase the dust amount to $0.001 to avoid issues where the logic is a few lamports off
This commit is contained in:
parent
8108b31ff9
commit
3937590fd1
|
@ -17,7 +17,6 @@ use mango_v4_client::{
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
use solana_sdk::commitment_config::CommitmentConfig;
|
use solana_sdk::commitment_config::CommitmentConfig;
|
||||||
use solana_sdk::pubkey::Pubkey;
|
use solana_sdk::pubkey::Pubkey;
|
||||||
use solana_sdk::signer::Signer;
|
|
||||||
use tracing::*;
|
use tracing::*;
|
||||||
|
|
||||||
pub mod cli_args;
|
pub mod cli_args;
|
||||||
|
@ -106,11 +105,6 @@ async fn main() -> anyhow::Result<()> {
|
||||||
.await?;
|
.await?;
|
||||||
let mango_group = mango_account.fixed.group;
|
let mango_group = mango_account.fixed.group;
|
||||||
|
|
||||||
let signer_is_owner = mango_account.fixed.owner == liqor_owner.pubkey();
|
|
||||||
if cli.rebalance == BoolArg::True && !signer_is_owner {
|
|
||||||
warn!("rebalancing on delegated accounts will be unable to free token positions reliably, withdraw dust manually");
|
|
||||||
}
|
|
||||||
|
|
||||||
let group_context = MangoGroupContext::new_from_rpc(client.rpc_async(), mango_group).await?;
|
let group_context = MangoGroupContext::new_from_rpc(client.rpc_async(), mango_group).await?;
|
||||||
|
|
||||||
let mango_oracles = group_context
|
let mango_oracles = group_context
|
||||||
|
@ -246,7 +240,7 @@ async fn main() -> anyhow::Result<()> {
|
||||||
alternate_jupiter_route_tokens: cli
|
alternate_jupiter_route_tokens: cli
|
||||||
.rebalance_alternate_jupiter_route_tokens
|
.rebalance_alternate_jupiter_route_tokens
|
||||||
.unwrap_or_default(),
|
.unwrap_or_default(),
|
||||||
allow_withdraws: signer_is_owner,
|
allow_withdraws: true,
|
||||||
};
|
};
|
||||||
rebalance_config.validate(&mango_client.context);
|
rebalance_config.validate(&mango_client.context);
|
||||||
|
|
||||||
|
|
|
@ -295,11 +295,12 @@ impl Rebalancer {
|
||||||
// Imagine SOL at 0.04 USDC-native per SOL-native: Any amounts below 25 SOL-native
|
// Imagine SOL at 0.04 USDC-native per SOL-native: Any amounts below 25 SOL-native
|
||||||
// would not be worth a single USDC-native.
|
// would not be worth a single USDC-native.
|
||||||
//
|
//
|
||||||
// To avoid errors, we consider all amounts below 2 * (1/oracle) dust and don't try
|
// To avoid errors, we consider all amounts below 1000 * (1/oracle) dust and don't try
|
||||||
// to sell them. Instead they will be withdrawn at the end.
|
// to sell them. Instead they will be withdrawn at the end.
|
||||||
// Purchases will aim to purchase slightly more than is needed, such that we can
|
// Purchases will aim to purchase slightly more than is needed, such that we can
|
||||||
// again withdraw the dust at the end.
|
// again withdraw the dust at the end.
|
||||||
let dust_threshold = I80F48::from(2) / token_price;
|
// 1000 USD-native is $0.001; note that delegates are allowed to withdraw up to DELEGATE_WITHDRAW_MAX ($0.1)
|
||||||
|
let dust_threshold = I80F48::from(1_000) / token_price;
|
||||||
|
|
||||||
// Some rebalancing can actually change non-USDC positions (rebalancing to SOL)
|
// Some rebalancing can actually change non-USDC positions (rebalancing to SOL)
|
||||||
// So re-fetch the current token position amount
|
// So re-fetch the current token position amount
|
||||||
|
|
Loading…
Reference in New Issue