From a007347cb5bfdcd96e5685cc9ede1ec53330dbca Mon Sep 17 00:00:00 2001 From: iurage Date: Tue, 13 Aug 2024 23:07:56 +0800 Subject: [PATCH 1/2] Add proof_authority arg --- src/args.rs | 7 +++++++ src/mine.rs | 16 +++++++++++----- src/open.rs | 5 +++-- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/args.rs b/src/args.rs index 756aecc1..1f0c13d3 100644 --- a/src/args.rs +++ b/src/args.rs @@ -69,6 +69,13 @@ pub struct MineArgs { default_value = "5" )] pub buffer_time: u64, + + #[arg( + long, + value_name = "PROOF_AUTHORITY", + help = "Authority of the Proof to mine for, if different from signer keypair." + )] + pub proof_authority: Option, } #[derive(Parser, Debug)] diff --git a/src/mine.rs b/src/mine.rs index 90e597a1..5c8411a6 100644 --- a/src/mine.rs +++ b/src/mine.rs @@ -1,4 +1,4 @@ -use std::{sync::Arc, sync::RwLock, time::Instant}; +use std::{sync::Arc, sync::RwLock, time::Instant, str::FromStr}; use colored::*; use drillx::{ equix::{self}, @@ -25,9 +25,15 @@ use crate::{ impl Miner { pub async fn mine(&self, args: MineArgs) { + let proof_authority = if let Some(v) = &args.proof_authority { + Pubkey::from_str(v).unwrap() + } else { + self.signer().pubkey() + }; + // Open account, if needed. let signer = self.signer(); - self.open().await; + self.open(proof_authority).await; // Check num threads self.check_num_cores(args.cores); @@ -39,7 +45,7 @@ impl Miner { // Fetch proof let config = get_config(&self.rpc_client).await; let proof = - get_updated_proof_with_authority(&self.rpc_client, signer.pubkey(), last_hash_at) + get_updated_proof_with_authority(&self.rpc_client, proof_authority, last_hash_at) .await; println!( "\n\nStake: {} ORE\n{} Multiplier: {:12}x", @@ -66,7 +72,7 @@ impl Miner { .await; // Build instruction set - let mut ixs = vec![ore_api::instruction::auth(proof_pubkey(signer.pubkey()))]; + let mut ixs = vec![ore_api::instruction::auth(proof_pubkey(proof_authority))]; let mut compute_budget = 500_000; if self.should_reset(config).await && rand::thread_rng().gen_range(0..100).eq(&0) { compute_budget += 100_000; @@ -76,7 +82,7 @@ impl Miner { // Build mine ix ixs.push(ore_api::instruction::mine( signer.pubkey(), - signer.pubkey(), + proof_authority, self.find_bus().await, solution, )); diff --git a/src/open.rs b/src/open.rs index e132847e..5d7d3aa7 100644 --- a/src/open.rs +++ b/src/open.rs @@ -1,13 +1,14 @@ +use solana_program::pubkey::Pubkey; use solana_sdk::signature::Signer; use crate::{send_and_confirm::ComputeBudget, utils::proof_pubkey, Miner}; impl Miner { - pub async fn open(&self) { + pub async fn open(&self, proof_authority: Pubkey) { // Return early if miner is already registered let signer = self.signer(); let fee_payer = self.fee_payer(); - let proof_address = proof_pubkey(signer.pubkey()); + let proof_address = proof_pubkey(proof_authority); if self.rpc_client.get_account(&proof_address).await.is_ok() { return; } From d946507324bc2daafb4c7bf115f10bb169d8001e Mon Sep 17 00:00:00 2001 From: iurage Date: Sun, 18 Aug 2024 16:22:09 +0800 Subject: [PATCH 2/2] Fix imports --- src/mine.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mine.rs b/src/mine.rs index ac797c85..48a00aad 100644 --- a/src/mine.rs +++ b/src/mine.rs @@ -1,4 +1,4 @@ -use std::{sync::Arc, sync::RwLock, time::Instant}; +use std::{sync::Arc, sync::RwLock, time::Instant, str::FromStr}; use colored::*; use drillx::{