Tests: Unify group + tokens setup
This commit is contained in:
parent
75ac224b6e
commit
a6a31f226c
|
@ -0,0 +1,98 @@
|
|||
#![allow(dead_code)]
|
||||
|
||||
use anchor_lang::prelude::*;
|
||||
use solana_sdk::signature::Keypair;
|
||||
|
||||
use super::mango_client::*;
|
||||
use super::solana::SolanaCookie;
|
||||
use super::{send_tx, MintCookie};
|
||||
|
||||
pub struct GroupWithTokensConfig<'a> {
|
||||
pub admin: &'a Keypair,
|
||||
pub payer: &'a Keypair,
|
||||
pub mints: &'a [MintCookie],
|
||||
}
|
||||
|
||||
pub struct Token {
|
||||
pub index: u16,
|
||||
pub mint: MintCookie,
|
||||
pub oracle: Pubkey,
|
||||
pub bank: Pubkey,
|
||||
pub vault: Pubkey,
|
||||
}
|
||||
|
||||
pub struct GroupWithTokens {
|
||||
pub group: Pubkey,
|
||||
pub tokens: Vec<Token>,
|
||||
}
|
||||
|
||||
impl<'a> GroupWithTokensConfig<'a> {
|
||||
pub async fn create(self, solana: &SolanaCookie) -> GroupWithTokens {
|
||||
let GroupWithTokensConfig {
|
||||
admin,
|
||||
payer,
|
||||
mints,
|
||||
} = self;
|
||||
let group = send_tx(solana, CreateGroupInstruction { admin, payer })
|
||||
.await
|
||||
.unwrap()
|
||||
.group;
|
||||
|
||||
let address_lookup_table = solana.create_address_lookup_table(admin, payer).await;
|
||||
|
||||
let mut tokens = vec![];
|
||||
for (index, mint) in mints.iter().enumerate() {
|
||||
let create_stub_oracle_accounts = send_tx(
|
||||
solana,
|
||||
CreateStubOracle {
|
||||
mint: mint.pubkey,
|
||||
payer,
|
||||
},
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
let oracle = create_stub_oracle_accounts.oracle;
|
||||
send_tx(
|
||||
solana,
|
||||
SetStubOracle {
|
||||
mint: mint.pubkey,
|
||||
payer,
|
||||
price: "1.0",
|
||||
},
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
let token_index = index as u16;
|
||||
let register_token_accounts = send_tx(
|
||||
solana,
|
||||
RegisterTokenInstruction {
|
||||
token_index,
|
||||
decimals: mint.decimals,
|
||||
maint_asset_weight: 0.9,
|
||||
init_asset_weight: 0.8,
|
||||
maint_liab_weight: 1.1,
|
||||
init_liab_weight: 1.2,
|
||||
group,
|
||||
admin,
|
||||
mint: mint.pubkey,
|
||||
address_lookup_table,
|
||||
payer,
|
||||
},
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
let bank = register_token_accounts.bank;
|
||||
let vault = register_token_accounts.vault;
|
||||
|
||||
tokens.push(Token {
|
||||
index: token_index,
|
||||
mint: mint.clone(),
|
||||
oracle,
|
||||
bank,
|
||||
vault,
|
||||
});
|
||||
}
|
||||
|
||||
GroupWithTokens { group, tokens }
|
||||
}
|
||||
}
|
|
@ -18,6 +18,7 @@ pub use utils::*;
|
|||
|
||||
pub mod cookies;
|
||||
pub mod mango_client;
|
||||
pub mod mango_setup;
|
||||
pub mod serum;
|
||||
pub mod solana;
|
||||
pub mod utils;
|
||||
|
|
|
@ -19,7 +19,7 @@ async fn test_basic() -> Result<(), TransportError> {
|
|||
let admin = &Keypair::new();
|
||||
let owner = &context.users[0].key;
|
||||
let payer = &context.users[1].key;
|
||||
let mint0 = &context.mints[0];
|
||||
let mints = &context.mints[0..1];
|
||||
let payer_mint0_account = context.users[1].token_accounts[0];
|
||||
let dust_threshold = 0.01;
|
||||
|
||||
|
@ -27,10 +27,15 @@ async fn test_basic() -> Result<(), TransportError> {
|
|||
// SETUP: Create a group, account, register a token (mint0)
|
||||
//
|
||||
|
||||
let group = send_tx(solana, CreateGroupInstruction { admin, payer })
|
||||
.await
|
||||
.unwrap()
|
||||
.group;
|
||||
let mango_setup::GroupWithTokens { group, tokens } = mango_setup::GroupWithTokensConfig {
|
||||
admin,
|
||||
payer,
|
||||
mints,
|
||||
}
|
||||
.create(solana)
|
||||
.await;
|
||||
let bank = tokens[0].bank;
|
||||
let vault = tokens[0].vault;
|
||||
|
||||
let account = send_tx(
|
||||
solana,
|
||||
|
@ -45,51 +50,6 @@ async fn test_basic() -> Result<(), TransportError> {
|
|||
.unwrap()
|
||||
.account;
|
||||
|
||||
let create_stub_oracle_accounts = send_tx(
|
||||
solana,
|
||||
CreateStubOracle {
|
||||
mint: mint0.pubkey,
|
||||
payer,
|
||||
},
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
let _oracle = create_stub_oracle_accounts.oracle;
|
||||
|
||||
send_tx(
|
||||
solana,
|
||||
SetStubOracle {
|
||||
mint: mint0.pubkey,
|
||||
payer,
|
||||
price: "1.0",
|
||||
},
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
let address_lookup_table = solana.create_address_lookup_table(admin, payer).await;
|
||||
|
||||
let register_token_accounts = send_tx(
|
||||
solana,
|
||||
RegisterTokenInstruction {
|
||||
token_index: 0,
|
||||
decimals: mint0.decimals,
|
||||
maint_asset_weight: 0.9,
|
||||
init_asset_weight: 0.8,
|
||||
maint_liab_weight: 1.1,
|
||||
init_liab_weight: 1.2,
|
||||
group,
|
||||
admin,
|
||||
mint: mint0.pubkey,
|
||||
address_lookup_table,
|
||||
payer,
|
||||
},
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
let bank = register_token_accounts.bank;
|
||||
let vault = register_token_accounts.vault;
|
||||
|
||||
//
|
||||
// TEST: Deposit funds
|
||||
//
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
#![cfg(feature = "test-bpf")]
|
||||
|
||||
use solana_program::pubkey::Pubkey;
|
||||
use solana_program_test::*;
|
||||
use solana_sdk::{signature::Keypair, transport::TransportError};
|
||||
|
||||
use mango_v4::state::*;
|
||||
use program_test::*;
|
||||
|
||||
mod program_test;
|
||||
|
@ -25,10 +23,13 @@ async fn test_health_compute_tokens() -> Result<(), TransportError> {
|
|||
// SETUP: Create a group and an account
|
||||
//
|
||||
|
||||
let group = send_tx(solana, CreateGroupInstruction { admin, payer })
|
||||
.await
|
||||
.unwrap()
|
||||
.group;
|
||||
let mango_setup::GroupWithTokens { group, .. } = mango_setup::GroupWithTokensConfig {
|
||||
admin,
|
||||
payer,
|
||||
mints,
|
||||
}
|
||||
.create(solana)
|
||||
.await;
|
||||
|
||||
let account = send_tx(
|
||||
solana,
|
||||
|
@ -43,59 +44,6 @@ async fn test_health_compute_tokens() -> Result<(), TransportError> {
|
|||
.unwrap()
|
||||
.account;
|
||||
|
||||
//
|
||||
// SETUP: Register mints (and make oracles for them)
|
||||
//
|
||||
|
||||
let register_mint = |index: TokenIndex, mint: MintCookie, address_lookup_table: Pubkey| async move {
|
||||
let create_stub_oracle_accounts = send_tx(
|
||||
solana,
|
||||
CreateStubOracle {
|
||||
mint: mint.pubkey,
|
||||
payer,
|
||||
},
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
let oracle = create_stub_oracle_accounts.oracle;
|
||||
send_tx(
|
||||
solana,
|
||||
SetStubOracle {
|
||||
mint: mint.pubkey,
|
||||
payer,
|
||||
price: "1.0",
|
||||
},
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
let register_token_accounts = send_tx(
|
||||
solana,
|
||||
RegisterTokenInstruction {
|
||||
token_index: index,
|
||||
decimals: mint.decimals,
|
||||
maint_asset_weight: 0.9,
|
||||
init_asset_weight: 0.8,
|
||||
maint_liab_weight: 1.1,
|
||||
init_liab_weight: 1.2,
|
||||
group,
|
||||
admin,
|
||||
mint: mint.pubkey,
|
||||
address_lookup_table,
|
||||
payer,
|
||||
},
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
let bank = register_token_accounts.bank;
|
||||
|
||||
(oracle, bank)
|
||||
};
|
||||
|
||||
let address_lookup_table = solana.create_address_lookup_table(admin, payer).await;
|
||||
for mint in mints {
|
||||
register_mint(mint.index as u16, mint.clone(), address_lookup_table).await;
|
||||
}
|
||||
|
||||
//
|
||||
// TEST: Deposit user funds for all the mints
|
||||
// each deposit will end with a health check
|
||||
|
@ -138,10 +86,13 @@ async fn test_health_compute_serum() -> Result<(), TransportError> {
|
|||
// SETUP: Create a group and an account
|
||||
//
|
||||
|
||||
let group = send_tx(solana, CreateGroupInstruction { admin, payer })
|
||||
.await
|
||||
.unwrap()
|
||||
.group;
|
||||
let mango_setup::GroupWithTokens { group, .. } = mango_setup::GroupWithTokensConfig {
|
||||
admin,
|
||||
payer,
|
||||
mints,
|
||||
}
|
||||
.create(solana)
|
||||
.await;
|
||||
|
||||
let account = send_tx(
|
||||
solana,
|
||||
|
@ -156,59 +107,6 @@ async fn test_health_compute_serum() -> Result<(), TransportError> {
|
|||
.unwrap()
|
||||
.account;
|
||||
|
||||
//
|
||||
// SETUP: Register mints (and make oracles for them)
|
||||
//
|
||||
|
||||
let register_mint = |index: TokenIndex, mint: MintCookie, address_lookup_table: Pubkey| async move {
|
||||
let create_stub_oracle_accounts = send_tx(
|
||||
solana,
|
||||
CreateStubOracle {
|
||||
mint: mint.pubkey,
|
||||
payer,
|
||||
},
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
let oracle = create_stub_oracle_accounts.oracle;
|
||||
send_tx(
|
||||
solana,
|
||||
SetStubOracle {
|
||||
mint: mint.pubkey,
|
||||
payer,
|
||||
price: "1.0",
|
||||
},
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
let register_token_accounts = send_tx(
|
||||
solana,
|
||||
RegisterTokenInstruction {
|
||||
token_index: index,
|
||||
decimals: mint.decimals,
|
||||
maint_asset_weight: 0.9,
|
||||
init_asset_weight: 0.8,
|
||||
maint_liab_weight: 1.1,
|
||||
init_liab_weight: 1.2,
|
||||
group,
|
||||
admin,
|
||||
mint: mint.pubkey,
|
||||
address_lookup_table,
|
||||
payer,
|
||||
},
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
let bank = register_token_accounts.bank;
|
||||
|
||||
(oracle, bank)
|
||||
};
|
||||
|
||||
let address_lookup_table = solana.create_address_lookup_table(admin, payer).await;
|
||||
for mint in mints {
|
||||
register_mint(mint.index as u16, mint.clone(), address_lookup_table).await;
|
||||
}
|
||||
|
||||
//
|
||||
// SETUP: Create serum markets and register them
|
||||
//
|
||||
|
|
|
@ -34,7 +34,7 @@ async fn test_margin_trade() -> Result<(), TransportError> {
|
|||
let admin = &Keypair::new();
|
||||
let owner = &context.users[0].key;
|
||||
let payer = &context.users[1].key;
|
||||
let mint0 = &context.mints[0];
|
||||
let mints = &context.mints[0..1];
|
||||
let payer_mint0_account = context.users[1].token_accounts[0];
|
||||
let dust_threshold = 0.01;
|
||||
|
||||
|
@ -42,10 +42,15 @@ async fn test_margin_trade() -> Result<(), TransportError> {
|
|||
// SETUP: Create a group, account, register a token (mint0)
|
||||
//
|
||||
|
||||
let group = send_tx(solana, CreateGroupInstruction { admin, payer })
|
||||
.await
|
||||
.unwrap()
|
||||
.group;
|
||||
let mango_setup::GroupWithTokens { group, tokens } = mango_setup::GroupWithTokensConfig {
|
||||
admin,
|
||||
payer,
|
||||
mints,
|
||||
}
|
||||
.create(solana)
|
||||
.await;
|
||||
let bank = tokens[0].bank;
|
||||
let vault = tokens[0].vault;
|
||||
|
||||
let account = send_tx(
|
||||
solana,
|
||||
|
@ -60,51 +65,6 @@ async fn test_margin_trade() -> Result<(), TransportError> {
|
|||
.unwrap()
|
||||
.account;
|
||||
|
||||
let create_stub_oracle_accounts = send_tx(
|
||||
solana,
|
||||
CreateStubOracle {
|
||||
mint: mint0.pubkey,
|
||||
payer,
|
||||
},
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
let _oracle = create_stub_oracle_accounts.oracle;
|
||||
|
||||
send_tx(
|
||||
solana,
|
||||
SetStubOracle {
|
||||
mint: mint0.pubkey,
|
||||
payer,
|
||||
price: "1.0",
|
||||
},
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
let address_lookup_table = solana.create_address_lookup_table(admin, payer).await;
|
||||
|
||||
let register_token_accounts = send_tx(
|
||||
solana,
|
||||
RegisterTokenInstruction {
|
||||
token_index: 0,
|
||||
decimals: mint0.decimals,
|
||||
maint_asset_weight: 0.9,
|
||||
init_asset_weight: 0.8,
|
||||
maint_liab_weight: 1.1,
|
||||
init_liab_weight: 1.2,
|
||||
group,
|
||||
admin,
|
||||
mint: mint0.pubkey,
|
||||
address_lookup_table,
|
||||
payer,
|
||||
},
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
let bank = register_token_accounts.bank;
|
||||
let vault = register_token_accounts.vault;
|
||||
|
||||
//
|
||||
// TEST: Deposit funds
|
||||
//
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
#![cfg(feature = "test-bpf")]
|
||||
|
||||
use solana_program::pubkey::Pubkey;
|
||||
use solana_program_test::*;
|
||||
use solana_sdk::{signature::Keypair, transport::TransportError};
|
||||
|
||||
use mango_v4::state::*;
|
||||
use program_test::*;
|
||||
|
||||
mod program_test;
|
||||
|
@ -17,18 +15,20 @@ async fn test_perp() -> Result<(), TransportError> {
|
|||
let admin = &Keypair::new();
|
||||
let owner = &context.users[0].key;
|
||||
let payer = &context.users[1].key;
|
||||
let mint0 = &context.mints[0];
|
||||
let mint1 = &context.mints[1];
|
||||
let mints = &context.mints[0..2];
|
||||
let payer_mint_accounts = &context.users[1].token_accounts[0..=2];
|
||||
|
||||
//
|
||||
// SETUP: Create a group and an account
|
||||
//
|
||||
|
||||
let group = send_tx(solana, CreateGroupInstruction { admin, payer })
|
||||
.await
|
||||
.unwrap()
|
||||
.group;
|
||||
let mango_setup::GroupWithTokens { group, tokens } = mango_setup::GroupWithTokensConfig {
|
||||
admin,
|
||||
payer,
|
||||
mints,
|
||||
}
|
||||
.create(solana)
|
||||
.await;
|
||||
|
||||
let account = send_tx(
|
||||
solana,
|
||||
|
@ -43,62 +43,6 @@ async fn test_perp() -> Result<(), TransportError> {
|
|||
.unwrap()
|
||||
.account;
|
||||
|
||||
//
|
||||
// SETUP: Register mints (and make oracles for them)
|
||||
//
|
||||
|
||||
let register_mint = |index: TokenIndex, mint: MintCookie, address_lookup_table: Pubkey| async move {
|
||||
let create_stub_oracle_accounts = send_tx(
|
||||
solana,
|
||||
CreateStubOracle {
|
||||
mint: mint.pubkey,
|
||||
payer,
|
||||
},
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
let oracle = create_stub_oracle_accounts.oracle;
|
||||
send_tx(
|
||||
solana,
|
||||
SetStubOracle {
|
||||
mint: mint.pubkey,
|
||||
payer,
|
||||
price: "1.0",
|
||||
},
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
let register_token_accounts = send_tx(
|
||||
solana,
|
||||
RegisterTokenInstruction {
|
||||
token_index: index,
|
||||
decimals: mint.decimals,
|
||||
maint_asset_weight: 0.9,
|
||||
init_asset_weight: 0.8,
|
||||
maint_liab_weight: 1.1,
|
||||
init_liab_weight: 1.2,
|
||||
group,
|
||||
admin,
|
||||
mint: mint.pubkey,
|
||||
address_lookup_table,
|
||||
payer,
|
||||
},
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
let bank = register_token_accounts.bank;
|
||||
|
||||
(oracle, bank)
|
||||
};
|
||||
|
||||
let address_lookup_table = solana.create_address_lookup_table(admin, payer).await;
|
||||
let base_token_index = 0;
|
||||
let (_oracle0, _bank0) =
|
||||
register_mint(base_token_index, mint0.clone(), address_lookup_table).await;
|
||||
let quote_token_index = 1;
|
||||
let (_oracle1, _bank1) =
|
||||
register_mint(quote_token_index, mint1.clone(), address_lookup_table).await;
|
||||
|
||||
//
|
||||
// SETUP: Deposit user funds
|
||||
//
|
||||
|
@ -139,10 +83,10 @@ async fn test_perp() -> Result<(), TransportError> {
|
|||
group,
|
||||
admin,
|
||||
payer,
|
||||
mint: mint0.pubkey,
|
||||
mint: mints[0].pubkey,
|
||||
perp_market_index: 0,
|
||||
base_token_index,
|
||||
quote_token_index,
|
||||
base_token_index: tokens[0].index,
|
||||
quote_token_index: tokens[1].index,
|
||||
// e.g. BTC mango-v3 mainnet.1
|
||||
quote_lot_size: 10,
|
||||
base_lot_size: 100,
|
||||
|
|
|
@ -18,9 +18,7 @@ async fn test_position_lifetime() -> Result<()> {
|
|||
let admin = &Keypair::new();
|
||||
let owner = &context.users[0].key;
|
||||
let payer = &context.users[1].key;
|
||||
let mint0 = &context.mints[0];
|
||||
let mint1 = &context.mints[1];
|
||||
let mint2 = &context.mints[2];
|
||||
let mints = &context.mints[0..3];
|
||||
|
||||
let payer_mint_accounts = &context.users[1].token_accounts[0..=2];
|
||||
|
||||
|
@ -28,10 +26,13 @@ async fn test_position_lifetime() -> Result<()> {
|
|||
// SETUP: Create a group and accounts
|
||||
//
|
||||
|
||||
let group = send_tx(solana, CreateGroupInstruction { admin, payer })
|
||||
.await
|
||||
.unwrap()
|
||||
.group;
|
||||
let mango_setup::GroupWithTokens { group, tokens } = mango_setup::GroupWithTokensConfig {
|
||||
admin,
|
||||
payer,
|
||||
mints,
|
||||
}
|
||||
.create(solana)
|
||||
.await;
|
||||
|
||||
let account = send_tx(
|
||||
solana,
|
||||
|
@ -59,59 +60,6 @@ async fn test_position_lifetime() -> Result<()> {
|
|||
.unwrap()
|
||||
.account;
|
||||
|
||||
//
|
||||
// SETUP: Register three mints (and make oracles for them)
|
||||
//
|
||||
|
||||
let address_lookup_table = solana.create_address_lookup_table(admin, payer).await;
|
||||
|
||||
let register_mint = |index: TokenIndex, mint: MintCookie| async move {
|
||||
let create_stub_oracle_accounts = send_tx(
|
||||
solana,
|
||||
CreateStubOracle {
|
||||
mint: mint.pubkey,
|
||||
payer,
|
||||
},
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
let oracle = create_stub_oracle_accounts.oracle;
|
||||
send_tx(
|
||||
solana,
|
||||
SetStubOracle {
|
||||
mint: mint.pubkey,
|
||||
payer,
|
||||
price: "1.0",
|
||||
},
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
let register_token_accounts = send_tx(
|
||||
solana,
|
||||
RegisterTokenInstruction {
|
||||
token_index: index,
|
||||
decimals: mint.decimals,
|
||||
maint_asset_weight: 0.9,
|
||||
init_asset_weight: 0.8,
|
||||
maint_liab_weight: 1.1,
|
||||
init_liab_weight: 1.2,
|
||||
group,
|
||||
admin,
|
||||
mint: mint.pubkey,
|
||||
address_lookup_table,
|
||||
payer,
|
||||
},
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
let bank = register_token_accounts.bank;
|
||||
|
||||
(oracle, bank)
|
||||
};
|
||||
register_mint(0, mint0.clone()).await;
|
||||
let (_oracle1, bank1) = register_mint(1, mint1.clone()).await;
|
||||
register_mint(2, mint2.clone()).await;
|
||||
|
||||
//
|
||||
// SETUP: Put some tokens into the funding account to allow borrowing
|
||||
//
|
||||
|
@ -218,7 +166,7 @@ async fn test_position_lifetime() -> Result<()> {
|
|||
.await
|
||||
.unwrap();
|
||||
assert_eq!(
|
||||
account_position(solana, account, bank1).await,
|
||||
account_position(solana, account, tokens[1].bank).await,
|
||||
-(borrow_amount as i64)
|
||||
);
|
||||
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
#![cfg(feature = "test-bpf")]
|
||||
|
||||
use anchor_spl::dex::serum_dex;
|
||||
use solana_program::pubkey::Pubkey;
|
||||
use solana_program_test::*;
|
||||
use solana_sdk::{signature::Keypair, transport::TransportError};
|
||||
|
||||
|
@ -18,23 +17,22 @@ async fn test_serum() -> Result<(), TransportError> {
|
|||
let admin = &Keypair::new();
|
||||
let owner = &context.users[0].key;
|
||||
let payer = &context.users[1].key;
|
||||
let mint0 = &context.mints[0];
|
||||
let mint1 = &context.mints[1];
|
||||
let mints = &context.mints[0..2];
|
||||
let payer_mint_accounts = &context.users[1].token_accounts[0..=2];
|
||||
|
||||
//
|
||||
// SETUP: Create serum market
|
||||
//
|
||||
let serum_market_cookie = context.serum.list_spot_market(mint0, mint1).await;
|
||||
|
||||
//
|
||||
// SETUP: Create a group and an account
|
||||
//
|
||||
|
||||
let group = send_tx(solana, CreateGroupInstruction { admin, payer })
|
||||
.await
|
||||
.unwrap()
|
||||
.group;
|
||||
let mango_setup::GroupWithTokens { group, tokens } = mango_setup::GroupWithTokensConfig {
|
||||
admin,
|
||||
payer,
|
||||
mints,
|
||||
}
|
||||
.create(solana)
|
||||
.await;
|
||||
let base_token = &tokens[0];
|
||||
let quote_token = &tokens[1];
|
||||
|
||||
let account = send_tx(
|
||||
solana,
|
||||
|
@ -50,60 +48,12 @@ async fn test_serum() -> Result<(), TransportError> {
|
|||
.account;
|
||||
|
||||
//
|
||||
// SETUP: Register mints (and make oracles for them)
|
||||
// SETUP: Create serum market
|
||||
//
|
||||
|
||||
let register_mint = |index: TokenIndex, mint: MintCookie, address_lookup_table: Pubkey| async move {
|
||||
let create_stub_oracle_accounts = send_tx(
|
||||
solana,
|
||||
CreateStubOracle {
|
||||
mint: mint.pubkey,
|
||||
payer,
|
||||
},
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
let oracle = create_stub_oracle_accounts.oracle;
|
||||
send_tx(
|
||||
solana,
|
||||
SetStubOracle {
|
||||
mint: mint.pubkey,
|
||||
payer,
|
||||
price: "1.0",
|
||||
},
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
let register_token_accounts = send_tx(
|
||||
solana,
|
||||
RegisterTokenInstruction {
|
||||
token_index: index,
|
||||
decimals: mint.decimals,
|
||||
maint_asset_weight: 0.9,
|
||||
init_asset_weight: 0.8,
|
||||
maint_liab_weight: 1.1,
|
||||
init_liab_weight: 1.2,
|
||||
group,
|
||||
admin,
|
||||
mint: mint.pubkey,
|
||||
address_lookup_table,
|
||||
payer,
|
||||
},
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
let bank = register_token_accounts.bank;
|
||||
|
||||
(oracle, bank)
|
||||
};
|
||||
|
||||
let address_lookup_table = solana.create_address_lookup_table(admin, payer).await;
|
||||
let base_token_index = 0;
|
||||
let (_oracle0, bank0) =
|
||||
register_mint(base_token_index, mint0.clone(), address_lookup_table).await;
|
||||
let quote_token_index = 1;
|
||||
let (_oracle1, bank1) =
|
||||
register_mint(quote_token_index, mint1.clone(), address_lookup_table).await;
|
||||
let serum_market_cookie = context
|
||||
.serum
|
||||
.list_spot_market(&base_token.mint, "e_token.mint)
|
||||
.await;
|
||||
|
||||
//
|
||||
// SETUP: Deposit user funds
|
||||
|
@ -147,8 +97,8 @@ async fn test_serum() -> Result<(), TransportError> {
|
|||
serum_program: context.serum.program_id,
|
||||
serum_market_external: serum_market_cookie.market,
|
||||
market_index: 0,
|
||||
base_token_index,
|
||||
quote_token_index,
|
||||
base_token_index: base_token.index,
|
||||
quote_token_index: quote_token.index,
|
||||
payer,
|
||||
},
|
||||
)
|
||||
|
@ -204,8 +154,8 @@ async fn test_serum() -> Result<(), TransportError> {
|
|||
.await
|
||||
.unwrap();
|
||||
|
||||
let native0 = account_position(solana, account, bank0).await;
|
||||
let native1 = account_position(solana, account, bank1).await;
|
||||
let native0 = account_position(solana, account, base_token.bank).await;
|
||||
let native1 = account_position(solana, account, quote_token.bank).await;
|
||||
assert_eq!(native0, 1000);
|
||||
assert_eq!(native1, 900);
|
||||
|
||||
|
@ -247,8 +197,8 @@ async fn test_serum() -> Result<(), TransportError> {
|
|||
.await
|
||||
.unwrap();
|
||||
|
||||
let native0 = account_position(solana, account, bank0).await;
|
||||
let native1 = account_position(solana, account, bank1).await;
|
||||
let native0 = account_position(solana, account, base_token.bank).await;
|
||||
let native1 = account_position(solana, account, quote_token.bank).await;
|
||||
assert_eq!(native0, 1000);
|
||||
assert_eq!(native1, 1000);
|
||||
|
||||
|
|
Loading…
Reference in New Issue