diff --git a/api/src/consts.rs b/api/src/consts.rs index 37d21f0..663ba4b 100644 --- a/api/src/consts.rs +++ b/api/src/consts.rs @@ -59,7 +59,7 @@ pub const TREASURY_ADDRESS: Pubkey = pub const TREASURY_BUMP: u8 = ed25519::derive_program_address(&[TREASURY], &PROGRAM_ID).1; /// Swap fee in lamports. -pub const FEE_LAMPORTS: u64 = 1_000_000; // 0.001 SOL +pub const FEE_LAMPORTS: u64 = 100_000; // 0.0001 SOL /// Denominator for fee calculations. pub const DENOMINATOR_BPS: u64 = 10_000; diff --git a/api/src/sdk.rs b/api/src/sdk.rs index 7bf19e6..373f268 100644 --- a/api/src/sdk.rs +++ b/api/src/sdk.rs @@ -107,6 +107,7 @@ pub fn claim(signer: Pubkey, amount: u64) -> Instruction { pub fn close(signer: Pubkey, opener: Pubkey, winner: Pubkey, id: u64) -> Instruction { let block_adddress = block_pda(id).0; + let market_address = market_pda().0; let miner_tokens_address = get_associated_token_address(&winner, &MINT_ADDRESS); let mint_address = MINT_ADDRESS; let treasury_address = TREASURY_ADDRESS; @@ -117,6 +118,7 @@ pub fn close(signer: Pubkey, opener: Pubkey, winner: Pubkey, id: u64) -> Instruc AccountMeta::new(signer, true), AccountMeta::new(block_adddress, false), AccountMeta::new(winner, false), + AccountMeta::new_readonly(market_address, false), AccountMeta::new(miner_tokens_address, false), AccountMeta::new(mint_address, false), AccountMeta::new(opener, false), diff --git a/cli/src/main.rs b/cli/src/main.rs index f6a38a0..7bce27f 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -1,3 +1,5 @@ +use std::str::FromStr; + use ore_api::prelude::*; use solana_account_decoder::UiAccountEncoding; use solana_client::{ @@ -65,7 +67,7 @@ async fn main() { reset(&rpc, &payer).await.unwrap(); } "miner" => { - log_miner(&rpc, payer.pubkey()).await.unwrap(); + log_miner(&rpc, &payer).await.unwrap(); } "set_admin" => { set_admin(&rpc, &payer).await.unwrap(); @@ -113,7 +115,9 @@ async fn close_all( ) -> Result<(), anyhow::Error> { let clock = get_clock(rpc).await?; let blocks = get_blocks(rpc).await?; + println!("Closing all blocks... {}", blocks.len()); for (_, block) in blocks { + println!("Closing block {}", block.id); if clock.slot > block.end_slot + MINING_WINDOW { let ix = ore_api::sdk::close( payer.pubkey(), @@ -217,9 +221,16 @@ async fn set_admin( Ok(()) } -async fn log_miner(rpc: &RpcClient, authority: Pubkey) -> Result<(), anyhow::Error> { +async fn log_miner( + rpc: &RpcClient, + payer: &solana_sdk::signer::keypair::Keypair, +) -> Result<(), anyhow::Error> { + let authority = std::env::var("AUTHORITY").unwrap_or(payer.pubkey().to_string()); + let authority = Pubkey::from_str(&authority).expect("Invalid AUTHORITY"); + let miner_address = ore_api::state::miner_pda(authority).0; let miner = get_miner(&rpc, authority).await?; println!("Miner"); + println!(" address: {}", miner_address); println!(" authority: {}", authority); println!(" block_id: {}", miner.block_id); println!(" hashpower: {}", miner.hashpower); diff --git a/program/src/close.rs b/program/src/close.rs index e246159..2363e57 100644 --- a/program/src/close.rs +++ b/program/src/close.rs @@ -5,7 +5,7 @@ use steel::*; pub fn process_close(accounts: &[AccountInfo<'_>], _data: &[u8]) -> ProgramResult { // Load accounts. let clock = Clock::get()?; - let [signer_info, block_info, miner_info, miner_tokens_info, mint_info, opener_info, treasury_info, treasury_tokens_info, system_program, token_program, associated_token_program] = + let [signer_info, block_info, miner_info, market_info, miner_tokens_info, mint_info, opener_info, treasury_info, treasury_tokens_info, system_program, token_program, associated_token_program] = accounts else { return Err(ProgramError::NotEnoughAccountKeys); @@ -14,6 +14,9 @@ pub fn process_close(accounts: &[AccountInfo<'_>], _data: &[u8]) -> ProgramResul let block = block_info .as_account_mut::(&ore_api::ID)? .assert_mut(|b| clock.slot >= b.end_slot + MINING_WINDOW)?; // Window for submitting hashes has closed + market_info + .as_account::(&ore_api::ID)? + .assert(|m| m.block_id > block.id)?; mint_info.has_address(&MINT_ADDRESS)?.as_mint()?; opener_info.is_writable()?.has_address(&block.opener)?; treasury_info.as_account::(&ore_api::ID)?; diff --git a/program/src/reset.rs b/program/src/reset.rs index 55cb101..bef86d1 100644 --- a/program/src/reset.rs +++ b/program/src/reset.rs @@ -158,7 +158,7 @@ fn calculate_block_reward(slot_hash: &[u8]) -> u64 { let r = r1 ^ r2 ^ r3 ^ r4; for (k, v) in block_distribution.iter() { if r <= *v { - return *k; + return *k * ONE_ORE; } } 0