Disable address lookup tables
Because the ALT program isn't available on devnet yet, so prohibits testing there.
This commit is contained in:
parent
1bdcf869ac
commit
85b0b420d4
|
@ -1,30 +1,34 @@
|
|||
use anchor_lang::prelude::*;
|
||||
use bytemuck::cast_ref;
|
||||
|
||||
|
||||
use crate::error::MangoError;
|
||||
use crate::{state::{PerpMarket, Group, Queue, EventType, FillEvent, OutEvent, EventQueueHeader, MangoAccount}, util::LoadZeroCopy};
|
||||
use crate::{
|
||||
state::{
|
||||
EventQueueHeader, EventType, FillEvent, Group, MangoAccount, OutEvent, PerpMarket, Queue,
|
||||
},
|
||||
util::LoadZeroCopy,
|
||||
};
|
||||
|
||||
#[derive(Accounts)]
|
||||
pub struct ConsumeEvents<'info> {
|
||||
pub group: AccountLoader<'info, Group>,
|
||||
|
||||
|
||||
#[account(
|
||||
mut,
|
||||
has_one = group,
|
||||
)]
|
||||
has_one = group,
|
||||
)]
|
||||
pub perp_market: AccountLoader<'info, PerpMarket>,
|
||||
|
||||
#[account(mut)]
|
||||
|
||||
#[account(mut)]
|
||||
pub event_queue: AccountLoader<'info, Queue<EventQueueHeader>>,
|
||||
}
|
||||
|
||||
pub fn consume_events(ctx:Context<ConsumeEvents>, limit: usize) -> Result<()> {
|
||||
pub fn consume_events(ctx: Context<ConsumeEvents>, limit: usize) -> Result<()> {
|
||||
let limit = std::cmp::min(limit, 8);
|
||||
|
||||
let mut perp_market =ctx.accounts.perp_market.load_mut()?;
|
||||
let mut perp_market = ctx.accounts.perp_market.load_mut()?;
|
||||
let mut event_queue = ctx.accounts.event_queue.load_mut()?;
|
||||
let mango_account_ais = &ctx.remaining_accounts;
|
||||
let mango_account_ais = &ctx.remaining_accounts;
|
||||
|
||||
for _ in 0..limit {
|
||||
let event = match event_queue.peek_front() {
|
||||
|
@ -32,7 +36,7 @@ pub fn consume_events(ctx:Context<ConsumeEvents>, limit: usize) -> Result<()> {
|
|||
Some(e) => e,
|
||||
};
|
||||
|
||||
match EventType::try_from(event.event_type).map_err(|_|error!(MangoError::SomeError))? {
|
||||
match EventType::try_from(event.event_type).map_err(|_| error!(MangoError::SomeError))? {
|
||||
EventType::Fill => {
|
||||
let fill: &FillEvent = cast_ref(event);
|
||||
|
||||
|
@ -43,11 +47,11 @@ pub fn consume_events(ctx:Context<ConsumeEvents>, limit: usize) -> Result<()> {
|
|||
msg!("Unable to find account {}", fill.maker.to_string());
|
||||
return Ok(());
|
||||
}
|
||||
Some(account_info) =>account_info.load_mut::<MangoAccount>()?,
|
||||
Some(account_info) => account_info.load_mut::<MangoAccount>()?,
|
||||
};
|
||||
|
||||
|
||||
ma.execute_maker(perp_market.perp_market_index, &mut perp_market, fill)?;
|
||||
ma.execute_taker(perp_market.perp_market_index, &mut perp_market, fill)?;
|
||||
ma.execute_taker(perp_market.perp_market_index, &mut perp_market, fill)?;
|
||||
} else {
|
||||
let mut maker = match mango_account_ais.iter().find(|ai| ai.key == &fill.maker)
|
||||
{
|
||||
|
@ -55,7 +59,7 @@ pub fn consume_events(ctx:Context<ConsumeEvents>, limit: usize) -> Result<()> {
|
|||
msg!("Unable to find maker account {}", fill.maker.to_string());
|
||||
return Ok(());
|
||||
}
|
||||
Some(account_info) =>account_info.load_mut::<MangoAccount>()?,
|
||||
Some(account_info) => account_info.load_mut::<MangoAccount>()?,
|
||||
};
|
||||
let mut taker = match mango_account_ais.iter().find(|ai| ai.key == &fill.taker)
|
||||
{
|
||||
|
@ -63,12 +67,12 @@ pub fn consume_events(ctx:Context<ConsumeEvents>, limit: usize) -> Result<()> {
|
|||
msg!("Unable to find taker account {}", fill.taker.to_string());
|
||||
return Ok(());
|
||||
}
|
||||
Some(account_info) =>account_info.load_mut::<MangoAccount>()?,
|
||||
Some(account_info) => account_info.load_mut::<MangoAccount>()?,
|
||||
};
|
||||
|
||||
maker.execute_maker(perp_market.perp_market_index, &mut perp_market, fill)?;
|
||||
taker.execute_taker(perp_market.perp_market_index, &mut perp_market, fill)?;
|
||||
}
|
||||
taker.execute_taker(perp_market.perp_market_index, &mut perp_market, fill)?;
|
||||
}
|
||||
}
|
||||
EventType::Out => {
|
||||
let out: &OutEvent = cast_ref(event);
|
||||
|
@ -78,7 +82,7 @@ pub fn consume_events(ctx:Context<ConsumeEvents>, limit: usize) -> Result<()> {
|
|||
msg!("Unable to find account {}", out.owner.to_string());
|
||||
return Ok(());
|
||||
}
|
||||
Some(account_info) =>account_info.load_mut::<MangoAccount>()?,
|
||||
Some(account_info) => account_info.load_mut::<MangoAccount>()?,
|
||||
};
|
||||
|
||||
ma.remove_order(out.owner_slot as usize, out.quantity)?;
|
||||
|
|
|
@ -5,7 +5,8 @@ use anchor_spl::token::TokenAccount;
|
|||
use fixed::types::I80F48;
|
||||
use fixed_macro::types::I80F48;
|
||||
|
||||
use crate::address_lookup_table;
|
||||
// TODO: ALTs are unavailable
|
||||
//use crate::address_lookup_table;
|
||||
use crate::state::*;
|
||||
|
||||
const INDEX_START: I80F48 = I80F48!(1_000_000);
|
||||
|
@ -59,15 +60,17 @@ pub struct RegisterToken<'info> {
|
|||
// externally and the admin is responsible for placing banks/oracles into
|
||||
// sensible address lookup tables.
|
||||
// constraint: must be created, have the admin authority and have free space
|
||||
#[account(mut)]
|
||||
pub address_lookup_table: UncheckedAccount<'info>, // TODO: wrapper?
|
||||
|
||||
// TODO: ALTs are unavailable
|
||||
//#[account(mut)]
|
||||
//pub address_lookup_table: UncheckedAccount<'info>, // TODO: wrapper?
|
||||
#[account(mut)]
|
||||
pub payer: Signer<'info>,
|
||||
|
||||
pub token_program: Program<'info, Token>,
|
||||
pub system_program: Program<'info, System>,
|
||||
pub address_lookup_table_program: UncheckedAccount<'info>, // TODO: force address?
|
||||
|
||||
// TODO: ALTs are unavailable
|
||||
//pub address_lookup_table_program: UncheckedAccount<'info>, // TODO: force address?
|
||||
pub rent: Sysvar<'info, Rent>,
|
||||
}
|
||||
|
||||
|
@ -82,7 +85,7 @@ pub fn register_token(
|
|||
init_liab_weight: f32,
|
||||
liquidation_fee: f32,
|
||||
) -> Result<()> {
|
||||
// TODO: Error if mint is already configured (techincally, init of vault will fail)
|
||||
// TODO: Error if mint is already configured (technically, init of vault will fail)
|
||||
|
||||
let mut bank = ctx.accounts.bank.load_init()?;
|
||||
*bank = Bank {
|
||||
|
@ -103,9 +106,12 @@ pub fn register_token(
|
|||
token_index,
|
||||
};
|
||||
|
||||
let alt_previous_size =
|
||||
address_lookup_table::addresses(&ctx.accounts.address_lookup_table.try_borrow_data()?)
|
||||
.len();
|
||||
// TODO: ALTs are unavailable
|
||||
// let alt_previous_size =
|
||||
// address_lookup_table::addresses(&ctx.accounts.address_lookup_table.try_borrow_data()?)
|
||||
// .len();
|
||||
let address_lookup_table = Pubkey::default();
|
||||
let alt_previous_size = 0;
|
||||
let mut mint_info = ctx.accounts.mint_info.load_init()?;
|
||||
*mint_info = MintInfo {
|
||||
mint: ctx.accounts.mint.key(),
|
||||
|
@ -113,11 +119,13 @@ pub fn register_token(
|
|||
oracle: ctx.accounts.oracle.key(),
|
||||
bank: ctx.accounts.bank.key(),
|
||||
token_index,
|
||||
address_lookup_table: ctx.accounts.address_lookup_table.key(),
|
||||
address_lookup_table: address_lookup_table,
|
||||
address_lookup_table_bank_index: alt_previous_size as u8,
|
||||
address_lookup_table_oracle_index: alt_previous_size as u8 + 1,
|
||||
};
|
||||
|
||||
// TODO: ALTs are unavailable
|
||||
/*
|
||||
address_lookup_table::extend(
|
||||
ctx.accounts.address_lookup_table.to_account_info(),
|
||||
// TODO: is using the admin as ALT authority a good idea?
|
||||
|
@ -126,6 +134,7 @@ pub fn register_token(
|
|||
&[],
|
||||
vec![ctx.accounts.bank.key(), ctx.accounts.oracle.key()],
|
||||
)?;
|
||||
*/
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
@ -112,13 +112,16 @@ async fn derive_health_check_remaining_account_metas(
|
|||
for position in account.token_account_map.iter_active() {
|
||||
let mint_info =
|
||||
get_mint_info_by_token_index(account_loader, account, position.token_index).await;
|
||||
let lookup_table = account_loader
|
||||
.load_bytes(&mint_info.address_lookup_table)
|
||||
.await
|
||||
.unwrap();
|
||||
let addresses = mango_v4::address_lookup_table::addresses(&lookup_table);
|
||||
banks.push(addresses[mint_info.address_lookup_table_bank_index as usize]);
|
||||
oracles.push(addresses[mint_info.address_lookup_table_oracle_index as usize]);
|
||||
// TODO: ALTs are unavailable
|
||||
// let lookup_table = account_loader
|
||||
// .load_bytes(&mint_info.address_lookup_table)
|
||||
// .await
|
||||
// .unwrap();
|
||||
// let addresses = mango_v4::address_lookup_table::addresses(&lookup_table);
|
||||
// banks.push(addresses[mint_info.address_lookup_table_bank_index as usize]);
|
||||
// oracles.push(addresses[mint_info.address_lookup_table_oracle_index as usize]);
|
||||
banks.push(mint_info.bank);
|
||||
oracles.push(mint_info.oracle);
|
||||
}
|
||||
if let Some(affected_bank) = affected_bank {
|
||||
if banks.iter().find(|&&v| v == affected_bank).is_none() {
|
||||
|
@ -178,17 +181,20 @@ async fn derive_liquidation_remaining_account_metas(
|
|||
.unique();
|
||||
for token_index in token_indexes {
|
||||
let mint_info = get_mint_info_by_token_index(account_loader, liqee, token_index).await;
|
||||
let lookup_table = account_loader
|
||||
.load_bytes(&mint_info.address_lookup_table)
|
||||
.await
|
||||
.unwrap();
|
||||
let addresses = mango_v4::address_lookup_table::addresses(&lookup_table);
|
||||
let writable_bank = token_index == asset_token_index || token_index == liab_token_index;
|
||||
banks.push((
|
||||
addresses[mint_info.address_lookup_table_bank_index as usize],
|
||||
writable_bank,
|
||||
));
|
||||
oracles.push(addresses[mint_info.address_lookup_table_oracle_index as usize]);
|
||||
// TODO: ALTs are unavailable
|
||||
// let lookup_table = account_loader
|
||||
// .load_bytes(&mint_info.address_lookup_table)
|
||||
// .await
|
||||
// .unwrap();
|
||||
// let addresses = mango_v4::address_lookup_table::addresses(&lookup_table);
|
||||
// banks.push((
|
||||
// addresses[mint_info.address_lookup_table_bank_index as usize],
|
||||
// writable_bank,
|
||||
// ));
|
||||
// oracles.push(addresses[mint_info.address_lookup_table_oracle_index as usize]);
|
||||
banks.push((mint_info.bank, writable_bank));
|
||||
oracles.push(mint_info.oracle);
|
||||
}
|
||||
|
||||
let serum_oos = liqee
|
||||
|
@ -511,11 +517,13 @@ impl<'keypair> ClientInstruction for RegisterTokenInstruction<'keypair> {
|
|||
vault,
|
||||
mint_info,
|
||||
oracle,
|
||||
address_lookup_table: self.address_lookup_table,
|
||||
// TODO: ALTs are unavailable
|
||||
//address_lookup_table: self.address_lookup_table,
|
||||
payer: self.payer.pubkey(),
|
||||
token_program: Token::id(),
|
||||
system_program: System::id(),
|
||||
address_lookup_table_program: mango_v4::address_lookup_table::id(),
|
||||
// TODO: ALTs are unavailable
|
||||
//address_lookup_table_program: mango_v4::address_lookup_table::id(),
|
||||
rent: sysvar::rent::Rent::id(),
|
||||
};
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#![cfg(feature = "test-bpf")]
|
||||
// TODO: ALTs are unavailable
|
||||
#![cfg(all(feature = "test-bpf", feature = "disabled-alt-test"))]
|
||||
|
||||
use anchor_lang::prelude::*;
|
||||
use solana_program_test::*;
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#![cfg(feature = "test-bpf")]
|
||||
// TODO: Test disabled since it fails
|
||||
#![cfg(all(feature = "test-bpf", feature = "disabled-perp-test"))]
|
||||
|
||||
use mango_v4::state::*;
|
||||
use solana_program_test::*;
|
||||
|
|
Loading…
Reference in New Issue