percli_chain/commands/
deploy.rs1use anyhow::{bail, Result};
2
3use crate::config::ChainConfig;
4use crate::ix::{self, InitializeMarketArgs, RiskParamsInput};
5use crate::rpc::ChainRpc;
6
7pub fn run(config: &ChainConfig) -> Result<()> {
8 let rpc = ChainRpc::new(&config.rpc_url);
9 let (market_pda, _bump) = config.market_pda();
10
11 if rpc.account_exists(&market_pda)? {
12 bail!("Market already exists at {market_pda}");
13 }
14
15 let slot = rpc.get_slot()?;
16
17 let params = RiskParamsInput {
19 maintenance_margin_bps: 500,
20 initial_margin_bps: 1000,
21 liquidation_fee_bps: 50,
22 insurance_fee_bps: 25,
23 adl_threshold_bps: 200,
24 max_leverage_q: 20,
25 min_order_size_q: 1,
26 tick_size: 1,
27 max_oi_imbalance_q: 1_000_000,
28 haircut_start_bps: 100,
29 haircut_end_bps: 500,
30 haircut_maturity_slots: 1000,
31 matured_haircut_bps: 300,
32 max_accounts: 4096,
33 min_nonzero_mm_req: 100,
34 min_nonzero_im_req: 200,
35 };
36
37 let args = InitializeMarketArgs {
38 init_slot: slot,
39 init_oracle_price: 1000, params,
41 };
42
43 let ix = ix::initialize_market_ix(&config.program_id, &market_pda, &config.authority(), args);
44
45 println!("Deploying market...");
46 println!(" Authority: {}", config.authority());
47 println!(" Market PDA: {market_pda}");
48 println!(" RPC: {}", config.rpc_url);
49
50 let sig = rpc.send_tx(&[ix], &config.keypair)?;
51 println!(" Tx: {sig}");
52 println!("Market deployed.");
53
54 Ok(())
55}