From d19dc0b7d57a7af11ce5f9a9a69d1d8940cda596 Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 8 Jul 2024 16:21:33 -0700 Subject: [PATCH 01/18] pubkeys --- api/src/consts.rs | 6 ++++-- api/src/lib.rs | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/api/src/consts.rs b/api/src/consts.rs index 2161b55..c08b49a 100644 --- a/api/src/consts.rs +++ b/api/src/consts.rs @@ -6,7 +6,8 @@ use solana_program::{pubkey, pubkey::Pubkey}; pub const INITIAL_BASE_REWARD_RATE: u64 = 10u64.pow(3u32); /// The admin allowed to initialize the program. -pub const INITIAL_ADMIN: Pubkey = pubkey!("HBUh9g46wk2X89CvaNN15UmsznP59rh6od1h8JwYAopk"); +// pub const INITIAL_ADMIN: Pubkey = pubkey!("HBUh9g46wk2X89CvaNN15UmsznP59rh6od1h8JwYAopk"); +pub const INITIAL_ADMIN: Pubkey = pubkey!("DEuG4JnzvMVxMFPoBVvf2GH38mn3ybunMxtfmVU3ms86"); /// The spam/liveness tolerance in seconds. pub const TOLERANCE: i64 = 5; @@ -123,7 +124,8 @@ pub const MINT_ADDRESS: Pubkey = Pubkey::new_from_array(ed25519::derive_program_address(&[MINT, &MINT_NOISE], &PROGRAM_ID).0); /// The address of the v1 mint account. -pub const MINT_V1_ADDRESS: Pubkey = pubkey!("oreoN2tQbHXVaZsr3pf66A48miqcBXCDJozganhEJgz"); +// pub const MINT_V1_ADDRESS: Pubkey = pubkey!("oreoN2tQbHXVaZsr3pf66A48miqcBXCDJozganhEJgz"); +pub const MINT_V1_ADDRESS: Pubkey = pubkey!("2Hr9iaAd7a5q9V4XmLHPBtSZcfhff8RBrvaG6zf2bEae"); /// The address of the treasury account. pub const TREASURY_ADDRESS: Pubkey = diff --git a/api/src/lib.rs b/api/src/lib.rs index 80f2952..e4d9d72 100644 --- a/api/src/lib.rs +++ b/api/src/lib.rs @@ -9,4 +9,5 @@ pub(crate) use ore_utils as utils; use solana_program::declare_id; -declare_id!("mineRHF5r6S7HyD9SppBfVMXMavDkJsxwGesEvxZr2A"); +// declare_id!("mineRHF5r6S7HyD9SppBfVMXMavDkJsxwGesEvxZr2A"); +declare_id!("D79kvBCKwUJxQjrVk1Jf34R1erLTAaAmFW9eqmYbGDqp"); From 087b83131ca7f393652082255a4412a0f11d995d Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 9 Jul 2024 11:16:27 -0700 Subject: [PATCH 02/18] error + 300 --- api/src/error.rs | 3 ++- api/src/lib.rs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/api/src/error.rs b/api/src/error.rs index e3d8ee0..9aa70c4 100644 --- a/api/src/error.rs +++ b/api/src/error.rs @@ -31,6 +31,7 @@ pub enum OreError { impl From for ProgramError { fn from(e: OreError) -> Self { - ProgramError::Custom(e as u32) + let f = (e as u32) + 300; + ProgramError::Custom(f) } } diff --git a/api/src/lib.rs b/api/src/lib.rs index e4d9d72..d03a02d 100644 --- a/api/src/lib.rs +++ b/api/src/lib.rs @@ -10,4 +10,4 @@ pub(crate) use ore_utils as utils; use solana_program::declare_id; // declare_id!("mineRHF5r6S7HyD9SppBfVMXMavDkJsxwGesEvxZr2A"); -declare_id!("D79kvBCKwUJxQjrVk1Jf34R1erLTAaAmFW9eqmYbGDqp"); +declare_id!("7LARaw2QJCftkGR14QVV6NSj3MFZM9iUL4GfSKySXphJ"); From 32a43cbd8dab0308fecf7e4675dc109315043176 Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 9 Jul 2024 11:38:05 -0700 Subject: [PATCH 03/18] bumped drillx dep --- Cargo.toml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index b2fcdb1..715dc8a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,7 +16,9 @@ keywords = ["solana", "crypto", "mining"] array-const-fn-init = "0.1.1" bytemuck = "1.14.3" const-crypto = "0.1.0" -drillx = { git = "https://github.com/regolith-labs/drillx", branch = "master", features = ["solana"] } +drillx = { git = "https://github.com/regolith-labs/drillx", branch = "relayer-integration", features = [ + "solana", +] } mpl-token-metadata = "4.1.2" num_enum = "0.7.2" ore-api = { path = "api" } @@ -24,6 +26,8 @@ ore-utils = { path = "utils", features = ["spl"] } shank = "0.3.0" solana-program = "1.18" spl-token = { version = "^4", features = ["no-entrypoint"] } -spl-associated-token-account = { version = "^2.2", features = [ "no-entrypoint" ] } +spl-associated-token-account = { version = "^2.2", features = [ + "no-entrypoint", +] } static_assertions = "1.1.0" thiserror = "1.0.57" From bef48eb36fef5f59b4325b1b852848fc571c55f7 Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 9 Jul 2024 11:56:40 -0700 Subject: [PATCH 04/18] bumped drillx dep --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index bfe82ca..e5120dd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1247,7 +1247,7 @@ checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" [[package]] name = "drillx" version = "0.2.0" -source = "git+https://github.com/regolith-labs/drillx?branch=master#ce0330957a2153c9191bdbcbcf4acce031ccd6bf" +source = "git+https://github.com/regolith-labs/drillx?branch=relayer-integration#ce0330957a2153c9191bdbcbcf4acce031ccd6bf" dependencies = [ "blake3", "equix", From 89ee9f1bea12c55acec88072cce63a143b270c24 Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 9 Jul 2024 16:23:25 -0700 Subject: [PATCH 05/18] payer for open ix --- api/src/instruction.rs | 3 ++- api/src/lib.rs | 2 +- program/src/open.rs | 6 ++++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/api/src/instruction.rs b/api/src/instruction.rs index 5d00d43..d402b69 100644 --- a/api/src/instruction.rs +++ b/api/src/instruction.rs @@ -256,12 +256,13 @@ pub fn mine(signer: Pubkey, bus: Pubkey, solution: Solution) -> Instruction { } /// Builds an open instruction. -pub fn open(signer: Pubkey, miner: Pubkey) -> Instruction { +pub fn open(signer: Pubkey, miner: Pubkey, payer: Pubkey) -> Instruction { let proof_pda = Pubkey::find_program_address(&[PROOF, signer.as_ref()], &crate::id()); Instruction { program_id: crate::id(), accounts: vec![ AccountMeta::new(signer, true), + AccountMeta::new(payer, true), AccountMeta::new_readonly(miner, false), AccountMeta::new(proof_pda.0, false), AccountMeta::new_readonly(solana_program::system_program::id(), false), diff --git a/api/src/lib.rs b/api/src/lib.rs index d03a02d..514f1e3 100644 --- a/api/src/lib.rs +++ b/api/src/lib.rs @@ -10,4 +10,4 @@ pub(crate) use ore_utils as utils; use solana_program::declare_id; // declare_id!("mineRHF5r6S7HyD9SppBfVMXMavDkJsxwGesEvxZr2A"); -declare_id!("7LARaw2QJCftkGR14QVV6NSj3MFZM9iUL4GfSKySXphJ"); +declare_id!("CWZk6C3fGbpr1UprdCGaLvnW2ogh7okEmeXaS161RxUg"); diff --git a/program/src/open.rs b/program/src/open.rs index fc6e570..4535e8c 100644 --- a/program/src/open.rs +++ b/program/src/open.rs @@ -33,10 +33,12 @@ pub fn process_open<'a, 'info>( let args = OpenArgs::try_from_bytes(data)?; // Load accounts - let [signer, miner_info, proof_info, system_program, slot_hashes_info] = accounts else { + let [signer, payer_info, miner_info, proof_info, system_program, slot_hashes_info] = accounts + else { return Err(ProgramError::NotEnoughAccountKeys); }; load_signer(signer)?; + load_signer(payer_info)?; load_system_account(miner_info, false)?; load_uninitialized_pda( proof_info, @@ -54,7 +56,7 @@ pub fn process_open<'a, 'info>( 8 + size_of::(), &[PROOF, signer.key.as_ref(), &[args.bump]], system_program, - signer, + payer_info, )?; let clock = Clock::get().or(Err(ProgramError::InvalidAccountData))?; let mut proof_data = proof_info.data.borrow_mut(); From be147d17de39a6185057820bd61189a763f01608 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 10 Jul 2024 09:52:31 -0700 Subject: [PATCH 06/18] log pda validations --- api/src/lib.rs | 2 +- api/src/loaders.rs | 16 ++++++++++++++-- program/src/reset.rs | 15 ++++++++++++++- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/api/src/lib.rs b/api/src/lib.rs index 514f1e3..04f97c6 100644 --- a/api/src/lib.rs +++ b/api/src/lib.rs @@ -10,4 +10,4 @@ pub(crate) use ore_utils as utils; use solana_program::declare_id; // declare_id!("mineRHF5r6S7HyD9SppBfVMXMavDkJsxwGesEvxZr2A"); -declare_id!("CWZk6C3fGbpr1UprdCGaLvnW2ogh7okEmeXaS161RxUg"); +declare_id!("EcZSwrCoS7bgstnUMdELZGno2riZ6mhW8hvRbq6vUCNm"); diff --git a/api/src/loaders.rs b/api/src/loaders.rs index 90f13ed..ebcd1dc 100644 --- a/api/src/loaders.rs +++ b/api/src/loaders.rs @@ -1,6 +1,6 @@ use solana_program::{ - account_info::AccountInfo, program_error::ProgramError, program_pack::Pack, pubkey::Pubkey, - system_program, sysvar, + account_info::AccountInfo, log::sol_log, program_error::ProgramError, program_pack::Pack, + pubkey::Pubkey, system_program, sysvar, }; use spl_token::state::Mint; @@ -36,6 +36,11 @@ pub fn load_bus<'a, 'info>( return Err(ProgramError::InvalidAccountOwner); } + sol_log(&format!("key: {}", info.key.to_string())); + sol_log(&format!( + "bus address: {}", + BUS_ADDRESSES[id as usize].to_string() + )); if info.key.ne(&BUS_ADDRESSES[id as usize]) { return Err(ProgramError::InvalidSeeds); } @@ -106,6 +111,8 @@ pub fn load_config<'a, 'info>( return Err(ProgramError::InvalidAccountOwner); } + sol_log(&format!("key: {}", info.key.to_string())); + sol_log(&format!("config address: {}", CONFIG_ADDRESS.to_string())); if info.key.ne(&CONFIG_ADDRESS) { return Err(ProgramError::InvalidSeeds); } @@ -233,6 +240,11 @@ pub fn load_treasury<'a, 'info>( return Err(ProgramError::InvalidAccountOwner); } + sol_log(&format!("key: {}", info.key.to_string())); + sol_log(&format!( + "treasury address: {}", + TREASURY_ADDRESS.to_string() + )); if info.key.ne(&TREASURY_ADDRESS) { return Err(ProgramError::InvalidSeeds); } diff --git a/program/src/reset.rs b/program/src/reset.rs index 716190e..d3b8a11 100644 --- a/program/src/reset.rs +++ b/program/src/reset.rs @@ -5,7 +5,7 @@ use ore_api::{ state::{Bus, Config}, }; use solana_program::{ - account_info::AccountInfo, clock::Clock, entrypoint::ProgramResult, + account_info::AccountInfo, clock::Clock, entrypoint::ProgramResult, log::sol_log, program_error::ProgramError, program_pack::Pack, pubkey::Pubkey, sysvar::Sysvar, }; use spl_token::state::Mint; @@ -42,18 +42,31 @@ pub fn process_reset<'a, 'info>( else { return Err(ProgramError::NotEnoughAccountKeys); }; + sol_log("loading signer"); load_signer(signer)?; + sol_log("loading bus 0"); load_bus(bus_0_info, 0, true)?; + sol_log("loading bus 1"); load_bus(bus_1_info, 1, true)?; + sol_log("loading bus 2"); load_bus(bus_2_info, 2, true)?; + sol_log("loading bus 3"); load_bus(bus_3_info, 3, true)?; + sol_log("loading bus 4"); load_bus(bus_4_info, 4, true)?; + sol_log("loading bus 5"); load_bus(bus_5_info, 5, true)?; + sol_log("loading bus 6"); load_bus(bus_6_info, 6, true)?; + sol_log("loading bus 7"); load_bus(bus_7_info, 7, true)?; + sol_log("loading config"); load_config(config_info, true)?; + sol_log("loading mint"); load_mint(mint_info, MINT_ADDRESS, true)?; + sol_log("loading treasury"); load_treasury(treasury_info, true)?; + sol_log("loading treasury tokens"); load_treasury_tokens(treasury_tokens_info, true)?; load_program(token_program, spl_token::id())?; let busses: [&AccountInfo; BUS_COUNT] = [ From 26303d25e60fdf7b78dabe0a4cb33532f0c65f4c Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 10 Jul 2024 10:06:09 -0700 Subject: [PATCH 07/18] log load treasury tokens --- api/src/lib.rs | 2 +- api/src/loaders.rs | 6 ++++++ program/src/reset.rs | 2 ++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/api/src/lib.rs b/api/src/lib.rs index 04f97c6..152cff8 100644 --- a/api/src/lib.rs +++ b/api/src/lib.rs @@ -10,4 +10,4 @@ pub(crate) use ore_utils as utils; use solana_program::declare_id; // declare_id!("mineRHF5r6S7HyD9SppBfVMXMavDkJsxwGesEvxZr2A"); -declare_id!("EcZSwrCoS7bgstnUMdELZGno2riZ6mhW8hvRbq6vUCNm"); +declare_id!("2LL8td7HYkNk2TMEREpkAgGk7dUxp1QmDaoypDRHkuj5"); diff --git a/api/src/loaders.rs b/api/src/loaders.rs index ebcd1dc..8c5cdf3 100644 --- a/api/src/loaders.rs +++ b/api/src/loaders.rs @@ -271,9 +271,15 @@ pub fn load_treasury_tokens<'a, 'info>( info: &'a AccountInfo<'info>, is_writable: bool, ) -> Result<(), ProgramError> { + sol_log(&format!("key: {}", info.key.to_string())); + sol_log(&format!( + "treasury tokens address: {}", + TREASURY_TOKENS_ADDRESS.to_string() + )); if info.key.ne(&TREASURY_TOKENS_ADDRESS) { return Err(ProgramError::InvalidSeeds); } + sol_log("validated"); load_token_account(info, Some(&TREASURY_ADDRESS), &MINT_ADDRESS, is_writable) } diff --git a/program/src/reset.rs b/program/src/reset.rs index d3b8a11..0042d63 100644 --- a/program/src/reset.rs +++ b/program/src/reset.rs @@ -113,6 +113,8 @@ pub fn process_reset<'a, 'info>( return Err(OreError::MaxSupply.into()); } + sol_log("funding treasury token account"); + // Fund treasury token account let amount = MAX_SUPPLY .saturating_sub(mint.supply) From ee2877a19836fecd87e9403214b9f2a9a09b3dd1 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 10 Jul 2024 10:35:22 -0700 Subject: [PATCH 08/18] treasury tokens ata --- api/src/consts.rs | 2 +- api/src/lib.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/api/src/consts.rs b/api/src/consts.rs index c08b49a..b754947 100644 --- a/api/src/consts.rs +++ b/api/src/consts.rs @@ -142,7 +142,7 @@ pub const TREASURY_TOKENS_ADDRESS: Pubkey = Pubkey::new_from_array( unsafe { &*(&spl_token::id() as *const Pubkey as *const [u8; 32]) }, unsafe { &*(&MINT_ADDRESS as *const Pubkey as *const [u8; 32]) }, ], - unsafe { &*(&spl_token::id() as *const Pubkey as *const [u8; 32]) }, + unsafe { &*(&spl_associated_token_account::id() as *const Pubkey as *const [u8; 32]) }, ) .0, ); diff --git a/api/src/lib.rs b/api/src/lib.rs index 152cff8..a64187f 100644 --- a/api/src/lib.rs +++ b/api/src/lib.rs @@ -10,4 +10,4 @@ pub(crate) use ore_utils as utils; use solana_program::declare_id; // declare_id!("mineRHF5r6S7HyD9SppBfVMXMavDkJsxwGesEvxZr2A"); -declare_id!("2LL8td7HYkNk2TMEREpkAgGk7dUxp1QmDaoypDRHkuj5"); +declare_id!("5vBA1LwxxiobFsVHZeHgWS5mdUTjRDjo7e7xSFk25LVr"); From 1ad89987c47cde70c58b3ea9e6610581f500adb7 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 10 Jul 2024 11:05:26 -0700 Subject: [PATCH 09/18] dropped loggers --- api/src/loaders.rs | 23 ++--------------------- program/src/reset.rs | 17 +---------------- 2 files changed, 3 insertions(+), 37 deletions(-) diff --git a/api/src/loaders.rs b/api/src/loaders.rs index 8c5cdf3..0f68979 100644 --- a/api/src/loaders.rs +++ b/api/src/loaders.rs @@ -1,6 +1,6 @@ use solana_program::{ - account_info::AccountInfo, log::sol_log, program_error::ProgramError, program_pack::Pack, - pubkey::Pubkey, system_program, sysvar, + account_info::AccountInfo, program_error::ProgramError, program_pack::Pack, pubkey::Pubkey, + system_program, sysvar, }; use spl_token::state::Mint; @@ -36,11 +36,6 @@ pub fn load_bus<'a, 'info>( return Err(ProgramError::InvalidAccountOwner); } - sol_log(&format!("key: {}", info.key.to_string())); - sol_log(&format!( - "bus address: {}", - BUS_ADDRESSES[id as usize].to_string() - )); if info.key.ne(&BUS_ADDRESSES[id as usize]) { return Err(ProgramError::InvalidSeeds); } @@ -111,8 +106,6 @@ pub fn load_config<'a, 'info>( return Err(ProgramError::InvalidAccountOwner); } - sol_log(&format!("key: {}", info.key.to_string())); - sol_log(&format!("config address: {}", CONFIG_ADDRESS.to_string())); if info.key.ne(&CONFIG_ADDRESS) { return Err(ProgramError::InvalidSeeds); } @@ -240,11 +233,6 @@ pub fn load_treasury<'a, 'info>( return Err(ProgramError::InvalidAccountOwner); } - sol_log(&format!("key: {}", info.key.to_string())); - sol_log(&format!( - "treasury address: {}", - TREASURY_ADDRESS.to_string() - )); if info.key.ne(&TREASURY_ADDRESS) { return Err(ProgramError::InvalidSeeds); } @@ -271,16 +259,9 @@ pub fn load_treasury_tokens<'a, 'info>( info: &'a AccountInfo<'info>, is_writable: bool, ) -> Result<(), ProgramError> { - sol_log(&format!("key: {}", info.key.to_string())); - sol_log(&format!( - "treasury tokens address: {}", - TREASURY_TOKENS_ADDRESS.to_string() - )); if info.key.ne(&TREASURY_TOKENS_ADDRESS) { return Err(ProgramError::InvalidSeeds); } - sol_log("validated"); - load_token_account(info, Some(&TREASURY_ADDRESS), &MINT_ADDRESS, is_writable) } diff --git a/program/src/reset.rs b/program/src/reset.rs index 0042d63..716190e 100644 --- a/program/src/reset.rs +++ b/program/src/reset.rs @@ -5,7 +5,7 @@ use ore_api::{ state::{Bus, Config}, }; use solana_program::{ - account_info::AccountInfo, clock::Clock, entrypoint::ProgramResult, log::sol_log, + account_info::AccountInfo, clock::Clock, entrypoint::ProgramResult, program_error::ProgramError, program_pack::Pack, pubkey::Pubkey, sysvar::Sysvar, }; use spl_token::state::Mint; @@ -42,31 +42,18 @@ pub fn process_reset<'a, 'info>( else { return Err(ProgramError::NotEnoughAccountKeys); }; - sol_log("loading signer"); load_signer(signer)?; - sol_log("loading bus 0"); load_bus(bus_0_info, 0, true)?; - sol_log("loading bus 1"); load_bus(bus_1_info, 1, true)?; - sol_log("loading bus 2"); load_bus(bus_2_info, 2, true)?; - sol_log("loading bus 3"); load_bus(bus_3_info, 3, true)?; - sol_log("loading bus 4"); load_bus(bus_4_info, 4, true)?; - sol_log("loading bus 5"); load_bus(bus_5_info, 5, true)?; - sol_log("loading bus 6"); load_bus(bus_6_info, 6, true)?; - sol_log("loading bus 7"); load_bus(bus_7_info, 7, true)?; - sol_log("loading config"); load_config(config_info, true)?; - sol_log("loading mint"); load_mint(mint_info, MINT_ADDRESS, true)?; - sol_log("loading treasury"); load_treasury(treasury_info, true)?; - sol_log("loading treasury tokens"); load_treasury_tokens(treasury_tokens_info, true)?; load_program(token_program, spl_token::id())?; let busses: [&AccountInfo; BUS_COUNT] = [ @@ -113,8 +100,6 @@ pub fn process_reset<'a, 'info>( return Err(OreError::MaxSupply.into()); } - sol_log("funding treasury token account"); - // Fund treasury token account let amount = MAX_SUPPLY .saturating_sub(mint.supply) From b602b532a65d80218d71b4304366ff71c38442ab Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 10 Jul 2024 11:13:04 -0700 Subject: [PATCH 10/18] log math --- api/src/lib.rs | 2 +- program/src/mine.rs | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/api/src/lib.rs b/api/src/lib.rs index a64187f..b4c2f23 100644 --- a/api/src/lib.rs +++ b/api/src/lib.rs @@ -10,4 +10,4 @@ pub(crate) use ore_utils as utils; use solana_program::declare_id; // declare_id!("mineRHF5r6S7HyD9SppBfVMXMavDkJsxwGesEvxZr2A"); -declare_id!("5vBA1LwxxiobFsVHZeHgWS5mdUTjRDjo7e7xSFk25LVr"); +declare_id!("EarRpm6FCvs7biAjL1F6yTugqUvLoXtYUvPKb2tHNh8w"); diff --git a/program/src/mine.rs b/program/src/mine.rs index 4fec55b..9e1a90e 100644 --- a/program/src/mine.rs +++ b/program/src/mine.rs @@ -97,6 +97,7 @@ pub fn process_mine<'a, 'info>( .base_reward_rate .checked_mul(2u64.checked_pow(difficulty).unwrap()) .unwrap(); + sol_log(&format!("reward: {}", reward)); // Apply staking multiplier. // If user has greater than or equal to the max stake on the network, they receive 2x multiplier. @@ -123,16 +124,16 @@ pub fn process_mine<'a, 'info>( // Apply liveness penalty. let t_liveness = t_target.saturating_add(TOLERANCE); + let ratio = reward + .checked_mul(t.checked_sub(t_liveness).unwrap() as u64) + .unwrap() + .checked_div(ONE_MINUTE as u64) + .unwrap(); + sol_log(&format!("ratio: {}", ratio)); if t.gt(&t_liveness) { - reward = reward - .checked_sub( - reward - .checked_mul(t.checked_sub(t_liveness).unwrap() as u64) - .unwrap() - .checked_div(ONE_MINUTE as u64) - .unwrap(), - ) - .unwrap(); + let reward_diff = reward.checked_sub(ratio).unwrap(); + sol_log(&format!("reward_diff: {}", reward_diff)); + reward = reward_diff; } // Limit payout amount to whatever is left in the bus From 70fb0bcfb86eb400abcbd33e5d61b2dc8a17d8c1 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 10 Jul 2024 11:41:47 -0700 Subject: [PATCH 11/18] miner as fee payer --- api/src/instruction.rs | 5 ++--- api/src/lib.rs | 2 +- program/src/open.rs | 8 +++----- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/api/src/instruction.rs b/api/src/instruction.rs index d402b69..5d4e25b 100644 --- a/api/src/instruction.rs +++ b/api/src/instruction.rs @@ -256,14 +256,13 @@ pub fn mine(signer: Pubkey, bus: Pubkey, solution: Solution) -> Instruction { } /// Builds an open instruction. -pub fn open(signer: Pubkey, miner: Pubkey, payer: Pubkey) -> Instruction { +pub fn open(signer: Pubkey, miner: Pubkey) -> Instruction { let proof_pda = Pubkey::find_program_address(&[PROOF, signer.as_ref()], &crate::id()); Instruction { program_id: crate::id(), accounts: vec![ AccountMeta::new(signer, true), - AccountMeta::new(payer, true), - AccountMeta::new_readonly(miner, false), + AccountMeta::new(miner, true), AccountMeta::new(proof_pda.0, false), AccountMeta::new_readonly(solana_program::system_program::id(), false), AccountMeta::new_readonly(sysvar::slot_hashes::id(), false), diff --git a/api/src/lib.rs b/api/src/lib.rs index b4c2f23..84c6b71 100644 --- a/api/src/lib.rs +++ b/api/src/lib.rs @@ -10,4 +10,4 @@ pub(crate) use ore_utils as utils; use solana_program::declare_id; // declare_id!("mineRHF5r6S7HyD9SppBfVMXMavDkJsxwGesEvxZr2A"); -declare_id!("EarRpm6FCvs7biAjL1F6yTugqUvLoXtYUvPKb2tHNh8w"); +declare_id!("6NSA5s2mk5fJctfoKxWoewFpT4uwtZpBAVd6DHyMk8Zi"); diff --git a/program/src/open.rs b/program/src/open.rs index 4535e8c..89728ca 100644 --- a/program/src/open.rs +++ b/program/src/open.rs @@ -33,13 +33,11 @@ pub fn process_open<'a, 'info>( let args = OpenArgs::try_from_bytes(data)?; // Load accounts - let [signer, payer_info, miner_info, proof_info, system_program, slot_hashes_info] = accounts - else { + let [signer, miner_info, proof_info, system_program, slot_hashes_info] = accounts else { return Err(ProgramError::NotEnoughAccountKeys); }; load_signer(signer)?; - load_signer(payer_info)?; - load_system_account(miner_info, false)?; + load_signer(miner_info)?; load_uninitialized_pda( proof_info, &[PROOF, signer.key.as_ref()], @@ -56,7 +54,7 @@ pub fn process_open<'a, 'info>( 8 + size_of::(), &[PROOF, signer.key.as_ref(), &[args.bump]], system_program, - payer_info, + miner_info, )?; let clock = Clock::get().or(Err(ProgramError::InvalidAccountData))?; let mut proof_data = proof_info.data.borrow_mut(); From 0cf37e81ec0e790887b0d4a875af3328ccd195dc Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 10 Jul 2024 13:49:50 -0700 Subject: [PATCH 12/18] build mine ix with proof authority --- api/src/instruction.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/api/src/instruction.rs b/api/src/instruction.rs index 5d4e25b..e2b9f49 100644 --- a/api/src/instruction.rs +++ b/api/src/instruction.rs @@ -230,12 +230,17 @@ pub fn close(signer: Pubkey) -> Instruction { } /// Builds a mine instruction. -pub fn mine(signer: Pubkey, bus: Pubkey, solution: Solution) -> Instruction { - let proof = Pubkey::find_program_address(&[PROOF, signer.as_ref()], &crate::id()).0; +pub fn mine( + miner: Pubkey, + proof_authority: Pubkey, + bus: Pubkey, + solution: Solution, +) -> Instruction { + let proof = Pubkey::find_program_address(&[PROOF, proof_authority.as_ref()], &crate::id()).0; Instruction { program_id: crate::id(), accounts: vec![ - AccountMeta::new(signer, true), + AccountMeta::new(miner, true), AccountMeta::new(bus, false), AccountMeta::new_readonly(CONFIG_ADDRESS, false), AccountMeta::new(proof, false), From a1d906a88c4fadea27d84275e760fb7ee53e78e9 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 10 Jul 2024 14:48:49 -0700 Subject: [PATCH 13/18] saturating sub --- api/src/lib.rs | 2 +- program/src/mine.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/api/src/lib.rs b/api/src/lib.rs index 84c6b71..d8812f8 100644 --- a/api/src/lib.rs +++ b/api/src/lib.rs @@ -10,4 +10,4 @@ pub(crate) use ore_utils as utils; use solana_program::declare_id; // declare_id!("mineRHF5r6S7HyD9SppBfVMXMavDkJsxwGesEvxZr2A"); -declare_id!("6NSA5s2mk5fJctfoKxWoewFpT4uwtZpBAVd6DHyMk8Zi"); +declare_id!("Fb9XVEimYj5KzVL6mLdbah3CGYmGP881uddBahui5RHt"); diff --git a/program/src/mine.rs b/program/src/mine.rs index 9e1a90e..314d6b4 100644 --- a/program/src/mine.rs +++ b/program/src/mine.rs @@ -131,7 +131,7 @@ pub fn process_mine<'a, 'info>( .unwrap(); sol_log(&format!("ratio: {}", ratio)); if t.gt(&t_liveness) { - let reward_diff = reward.checked_sub(ratio).unwrap(); + let reward_diff = reward.saturating_sub(ratio); sol_log(&format!("reward_diff: {}", reward_diff)); reward = reward_diff; } From f73073f0f373bb15ad214e30f3a71e521877b7b5 Mon Sep 17 00:00:00 2001 From: alex Date: Thu, 11 Jul 2024 17:45:55 -0700 Subject: [PATCH 14/18] update api --- api/src/instruction.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/api/src/instruction.rs b/api/src/instruction.rs index e2b9f49..a1d6fde 100644 --- a/api/src/instruction.rs +++ b/api/src/instruction.rs @@ -197,7 +197,6 @@ pub fn claim(signer: Pubkey, beneficiary: Pubkey, amount: u64) -> Instruction { accounts: vec![ AccountMeta::new(signer, true), AccountMeta::new(beneficiary, false), - AccountMeta::new(MINT_ADDRESS, false), AccountMeta::new(proof, false), AccountMeta::new_readonly(TREASURY_ADDRESS, false), AccountMeta::new(treasury_tokens, false), From 70a8c596888a4632270e2d8157526dc1903642f2 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 12 Jul 2024 15:35:10 -0700 Subject: [PATCH 15/18] open ix builder with payer --- api/src/instruction.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/api/src/instruction.rs b/api/src/instruction.rs index 4aa285b..a6d5ec3 100644 --- a/api/src/instruction.rs +++ b/api/src/instruction.rs @@ -278,13 +278,14 @@ pub fn mine( } /// Builds an open instruction. -pub fn open(signer: Pubkey, miner: Pubkey) -> Instruction { +pub fn open(signer: Pubkey, miner: Pubkey, payer: Pubkey) -> Instruction { let proof_pda = Pubkey::find_program_address(&[PROOF, signer.as_ref()], &crate::id()); Instruction { program_id: crate::id(), accounts: vec![ AccountMeta::new(signer, true), - AccountMeta::new(miner, true), + AccountMeta::new_readonly(miner, false), + AccountMeta::new(payer, true), AccountMeta::new(proof_pda.0, false), AccountMeta::new_readonly(solana_program::system_program::id(), false), AccountMeta::new_readonly(sysvar::slot_hashes::id(), false), From f10d1757073457cc217973c8ac90233855e9a2e8 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 12 Jul 2024 15:37:50 -0700 Subject: [PATCH 16/18] Code TLC --- api/src/instruction.rs | 4 ++-- api/src/loaders.rs | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/api/src/instruction.rs b/api/src/instruction.rs index a6d5ec3..01c9ff0 100644 --- a/api/src/instruction.rs +++ b/api/src/instruction.rs @@ -248,7 +248,7 @@ pub fn crown(signer: Pubkey, current_top_staker: Pubkey) -> Instruction { /// Builds a mine instruction. pub fn mine( - miner: Pubkey, + signer: Pubkey, proof_authority: Pubkey, bus: Pubkey, solution: Solution, @@ -257,7 +257,7 @@ pub fn mine( Instruction { program_id: crate::id(), accounts: vec![ - AccountMeta::new(miner, true), + AccountMeta::new(signer, true), AccountMeta::new(bus, false), AccountMeta::new_readonly(CONFIG_ADDRESS, false), AccountMeta::new(proof, false), diff --git a/api/src/loaders.rs b/api/src/loaders.rs index 0f68979..90f13ed 100644 --- a/api/src/loaders.rs +++ b/api/src/loaders.rs @@ -262,6 +262,7 @@ pub fn load_treasury_tokens<'a, 'info>( if info.key.ne(&TREASURY_TOKENS_ADDRESS) { return Err(ProgramError::InvalidSeeds); } + load_token_account(info, Some(&TREASURY_ADDRESS), &MINT_ADDRESS, is_writable) } From dce5eb49cb0913d0d38259439860f354292cc245 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 12 Jul 2024 15:54:01 -0700 Subject: [PATCH 17/18] new program-id --- api/src/lib.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/api/src/lib.rs b/api/src/lib.rs index 66c37d9..05b0e90 100644 --- a/api/src/lib.rs +++ b/api/src/lib.rs @@ -9,4 +9,5 @@ pub(crate) use ore_utils as utils; use solana_program::declare_id; -declare_id!("oreV2ZymfyeXgNgBdqMkumTqqAprVqgBWQfoYkrtKWQ"); +// declare_id!("oreV2ZymfyeXgNgBdqMkumTqqAprVqgBWQfoYkrtKWQ"); +declare_id!("6XpUkLPF2t28er1Mx89ry5QFJ4piDTJZiEFVRRG3HbS7"); From 96461232165b09bbf599f23d6fd8206f31855333 Mon Sep 17 00:00:00 2001 From: alex Date: Sun, 14 Jul 2024 13:09:17 -0700 Subject: [PATCH 18/18] Code TLC --- api/src/consts.rs | 6 ++---- api/src/error.rs | 3 +-- api/src/lib.rs | 3 +-- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/api/src/consts.rs b/api/src/consts.rs index 3d41aba..c22a4d4 100644 --- a/api/src/consts.rs +++ b/api/src/consts.rs @@ -6,8 +6,7 @@ use solana_program::{pubkey, pubkey::Pubkey}; pub const INITIAL_BASE_REWARD_RATE: u64 = 10u64.pow(3u32); /// The admin allowed to initialize the program. -// pub const INITIAL_ADMIN: Pubkey = pubkey!("HBUh9g46wk2X89CvaNN15UmsznP59rh6od1h8JwYAopk"); -pub const INITIAL_ADMIN: Pubkey = pubkey!("DEuG4JnzvMVxMFPoBVvf2GH38mn3ybunMxtfmVU3ms86"); +pub const INITIAL_ADMIN: Pubkey = pubkey!("HBUh9g46wk2X89CvaNN15UmsznP59rh6od1h8JwYAopk"); /// The spam/liveness tolerance in seconds. pub const TOLERANCE: i64 = 5; @@ -124,8 +123,7 @@ pub const MINT_ADDRESS: Pubkey = Pubkey::new_from_array(ed25519::derive_program_address(&[MINT, &MINT_NOISE], &PROGRAM_ID).0); /// The address of the v1 mint account. -// pub const MINT_V1_ADDRESS: Pubkey = pubkey!("oreoN2tQbHXVaZsr3pf66A48miqcBXCDJozganhEJgz"); -pub const MINT_V1_ADDRESS: Pubkey = pubkey!("2Hr9iaAd7a5q9V4XmLHPBtSZcfhff8RBrvaG6zf2bEae"); +pub const MINT_V1_ADDRESS: Pubkey = pubkey!("oreoN2tQbHXVaZsr3pf66A48miqcBXCDJozganhEJgz"); /// The address of the treasury account. pub const TREASURY_ADDRESS: Pubkey = diff --git a/api/src/error.rs b/api/src/error.rs index 9aa70c4..e3d8ee0 100644 --- a/api/src/error.rs +++ b/api/src/error.rs @@ -31,7 +31,6 @@ pub enum OreError { impl From for ProgramError { fn from(e: OreError) -> Self { - let f = (e as u32) + 300; - ProgramError::Custom(f) + ProgramError::Custom(e as u32) } } diff --git a/api/src/lib.rs b/api/src/lib.rs index 05b0e90..66c37d9 100644 --- a/api/src/lib.rs +++ b/api/src/lib.rs @@ -9,5 +9,4 @@ pub(crate) use ore_utils as utils; use solana_program::declare_id; -// declare_id!("oreV2ZymfyeXgNgBdqMkumTqqAprVqgBWQfoYkrtKWQ"); -declare_id!("6XpUkLPF2t28er1Mx89ry5QFJ4piDTJZiEFVRRG3HbS7"); +declare_id!("oreV2ZymfyeXgNgBdqMkumTqqAprVqgBWQfoYkrtKWQ");