2022-03-20 23:49:51 -07:00
|
|
|
#![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,
|
2022-06-27 02:27:17 -07:00
|
|
|
pub mint_info: Pubkey,
|
2022-03-20 23:49:51 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
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 {
|
2022-04-02 11:42:17 -07:00
|
|
|
group,
|
2022-03-20 23:49:51 -07:00
|
|
|
mint: mint.pubkey,
|
2022-04-02 11:42:17 -07:00
|
|
|
admin,
|
2022-03-20 23:49:51 -07:00
|
|
|
payer,
|
|
|
|
},
|
|
|
|
)
|
|
|
|
.await
|
|
|
|
.unwrap();
|
|
|
|
let oracle = create_stub_oracle_accounts.oracle;
|
|
|
|
send_tx(
|
|
|
|
solana,
|
2022-06-09 09:27:31 -07:00
|
|
|
SetStubOracleInstruction {
|
2022-04-02 11:42:17 -07:00
|
|
|
group,
|
|
|
|
admin,
|
2022-03-20 23:49:51 -07:00
|
|
|
mint: mint.pubkey,
|
|
|
|
payer,
|
|
|
|
price: "1.0",
|
|
|
|
},
|
|
|
|
)
|
|
|
|
.await
|
|
|
|
.unwrap();
|
|
|
|
let token_index = index as u16;
|
|
|
|
let register_token_accounts = send_tx(
|
|
|
|
solana,
|
2022-06-09 09:27:31 -07:00
|
|
|
TokenRegisterInstruction {
|
2022-03-20 23:49:51 -07:00
|
|
|
token_index,
|
|
|
|
decimals: mint.decimals,
|
2022-04-09 08:09:06 -07:00
|
|
|
util0: 0.40,
|
|
|
|
rate0: 0.07,
|
|
|
|
util1: 0.80,
|
|
|
|
rate1: 0.9,
|
2022-04-09 07:53:30 -07:00
|
|
|
max_rate: 1.50,
|
2022-05-09 02:14:50 -07:00
|
|
|
loan_origination_fee_rate: 0.0005,
|
|
|
|
loan_fee_rate: 0.0005,
|
2022-03-29 02:49:26 -07:00
|
|
|
maint_asset_weight: 0.8,
|
|
|
|
init_asset_weight: 0.6,
|
|
|
|
maint_liab_weight: 1.2,
|
|
|
|
init_liab_weight: 1.4,
|
|
|
|
liquidation_fee: 0.02,
|
2022-03-20 23:49:51 -07:00
|
|
|
group,
|
|
|
|
admin,
|
|
|
|
mint: mint.pubkey,
|
|
|
|
address_lookup_table,
|
|
|
|
payer,
|
|
|
|
},
|
|
|
|
)
|
|
|
|
.await
|
|
|
|
.unwrap();
|
2022-06-27 02:27:17 -07:00
|
|
|
let _ = send_tx(
|
|
|
|
solana,
|
|
|
|
TokenAddBankInstruction {
|
|
|
|
token_index,
|
|
|
|
bank_num: 1,
|
|
|
|
group,
|
|
|
|
admin,
|
|
|
|
mint: mint.pubkey,
|
|
|
|
address_lookup_table,
|
|
|
|
payer,
|
|
|
|
},
|
|
|
|
)
|
|
|
|
.await
|
|
|
|
.unwrap();
|
2022-03-20 23:49:51 -07:00
|
|
|
let bank = register_token_accounts.bank;
|
|
|
|
let vault = register_token_accounts.vault;
|
2022-06-27 02:27:17 -07:00
|
|
|
let mint_info = register_token_accounts.mint_info;
|
2022-03-20 23:49:51 -07:00
|
|
|
|
|
|
|
tokens.push(Token {
|
|
|
|
index: token_index,
|
|
|
|
mint: mint.clone(),
|
|
|
|
oracle,
|
|
|
|
bank,
|
|
|
|
vault,
|
2022-06-27 02:27:17 -07:00
|
|
|
mint_info,
|
2022-03-20 23:49:51 -07:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
GroupWithTokens { group, tokens }
|
|
|
|
}
|
|
|
|
}
|