Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion bitcoin-core-sv2/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,5 @@ bitcoin_capnp_types_v31 = { package = "bitcoin-capnp-types", version = "0.2.1" }
# fetching from github enables synchronizing development workflows across sv2-apps and stratum repos
# it MUST be changed before bitcoin-core-sv2 is published to crates.io
# with the proper version of stratum-core being fetched from crates.io as well
stratum-core = { git = "https://github.com/stratum-mining/stratum", branch = "main" }
stratum-core = { git = "https://github.com/Shourya742/stratum", branch = "2026-07-13-split-inner" }

10 changes: 5 additions & 5 deletions bitcoin-core-sv2/examples/tdp_logger.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ use std::path::Path;

use async_channel::unbounded;
use stratum_core::{
parsers_sv2::TemplateDistribution,
template_distribution_sv2::{CoinbaseOutputConstraints, RequestTransactionData},
parsers_sv2::TemplateDistributionOwned,
template_distribution_sv2::{CoinbaseOutputConstraintsOwned, RequestTransactionDataOwned},
};
use tokio_util::sync::CancellationToken;
use tracing::{error, info};
Expand Down Expand Up @@ -137,9 +137,9 @@ async fn main() {
info!("Message received: {}", template_distribution_message);

// send a RequestTransactionData every time a NewTemplate message is received
if let TemplateDistribution::NewTemplate(new_template) = template_distribution_message {
if let TemplateDistributionOwned::NewTemplate(new_template) = template_distribution_message {
let template_id = new_template.template_id;
let request_transaction_data = TemplateDistribution::RequestTransactionData(RequestTransactionData {
let request_transaction_data = TemplateDistributionOwned::RequestTransactionData(RequestTransactionDataOwned {
template_id,
});

Expand All @@ -162,7 +162,7 @@ async fn main() {
// `BitcoinCoreSv2TDP` will not start distributing new templates until it receives the first
// `CoinbaseOutputConstraints` message.
let new_coinbase_output_constraints =
TemplateDistribution::CoinbaseOutputConstraints(CoinbaseOutputConstraints {
TemplateDistributionOwned::CoinbaseOutputConstraints(CoinbaseOutputConstraintsOwned {
coinbase_output_max_additional_size: 2,
coinbase_output_max_additional_sigops: 2,
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

use stratum_core::{
bitcoin::{BlockHash, CompactTarget, Transaction, Txid, Wtxid, block::Version},
job_declaration_sv2::PushSolution,
job_declaration_sv2::PushSolutionOwned,
};
use tokio::sync::oneshot;

Expand Down Expand Up @@ -34,9 +34,7 @@ pub enum JdRequest {
response_tx: oneshot::Sender<JdResponse>,
},
/// Submit a mining solution to Bitcoin Core (fire-and-forget).
PushSolution {
push_solution: PushSolution<'static>,
},
PushSolution { push_solution: PushSolutionOwned },
}

/// The result of trying to handle a DeclareMiningJob request.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ use crate::{
};
use async_channel::{Receiver, Sender};
use std::path::Path;
use stratum_core::parsers_sv2::TemplateDistribution;
use stratum_core::parsers_sv2::TemplateDistributionOwned;
pub use tokio_util::sync::CancellationToken;

/// Version-agnostic TDP runtime handle.
Expand Down Expand Up @@ -48,8 +48,8 @@ pub async fn new<P>(
bitcoin_core_unix_socket_path: P,
fee_threshold: u64,
min_interval: u8,
incoming_messages: Receiver<TemplateDistribution<'static>>,
outgoing_messages: Sender<TemplateDistribution<'static>>,
incoming_messages: Receiver<TemplateDistributionOwned>,
outgoing_messages: Sender<TemplateDistributionOwned>,
global_cancellation_token: CancellationToken,
) -> Result<BitcoinCoreSv2TDP, BitcoinCoreSv2TDPError>
where
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ use stratum_core::{
},
job_declaration_sv2::{
ERROR_CODE_DECLARE_MINING_JOB_INTERNAL_ERROR, ERROR_CODE_DECLARE_MINING_JOB_INVALID_JOB,
ERROR_CODE_DECLARE_MINING_JOB_STALE_CHAIN_TIP, PushSolution,
ERROR_CODE_DECLARE_MINING_JOB_STALE_CHAIN_TIP, PushSolutionOwned,
},
};
use tokio::sync::oneshot;
Expand Down Expand Up @@ -314,7 +314,7 @@ impl BitcoinCoreSv2JDP {
/// Submits a mining solution to Bitcoin Core.
///
/// Not yet implemented — deliberately left as a stub for future work.
pub(crate) async fn handle_push_solution(&self, _push_solution: PushSolution<'_>) {
pub(crate) async fn handle_push_solution(&self, _push_solution: PushSolutionOwned) {
// todo
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ use crate::unix_capnp::v30x::template_distribution_protocol::{
BitcoinCoreSv2TDP, error::BitcoinCoreSv2TDPError,
};
use stratum_core::{
parsers_sv2::TemplateDistribution,
parsers_sv2::TemplateDistributionOwned,
template_distribution_sv2::{
CoinbaseOutputConstraints, RequestTransactionData, RequestTransactionDataError,
SubmitSolution,
CoinbaseOutputConstraintsOwned, RequestTransactionDataErrorOwned,
RequestTransactionDataOwned, SubmitSolutionOwned,
},
};
use tokio_util::sync::CancellationToken;
Expand All @@ -16,7 +16,7 @@ use tracing::{debug, error};
impl BitcoinCoreSv2TDP {
pub(crate) async fn handle_coinbase_output_constraints(
&mut self,
coinbase_output_constraints: CoinbaseOutputConstraints,
coinbase_output_constraints: CoinbaseOutputConstraintsOwned,
) -> Result<(), BitcoinCoreSv2TDPError> {
debug!("handle_coinbase_output_constraints() called");

Expand Down Expand Up @@ -63,7 +63,7 @@ impl BitcoinCoreSv2TDP {

pub(crate) async fn handle_request_transaction_data(
&self,
request_transaction_data: RequestTransactionData,
request_transaction_data: RequestTransactionDataOwned,
) -> Result<(), BitcoinCoreSv2TDPError> {
debug!(
"handle_request_transaction_data() called for template_id: {}",
Expand All @@ -82,7 +82,7 @@ impl BitcoinCoreSv2TDP {
"Template {} is stale, sending error response",
request_transaction_data.template_id
);
let request_transaction_data_error = RequestTransactionDataError {
let request_transaction_data_error = RequestTransactionDataErrorOwned {
template_id: request_transaction_data.template_id,
error_code: "stale-template-id"
.to_string()
Expand All @@ -92,7 +92,7 @@ impl BitcoinCoreSv2TDP {

if let Err(e) = self
.outgoing_messages
.send(TemplateDistribution::RequestTransactionDataError(
.send(TemplateDistributionOwned::RequestTransactionDataError(
request_transaction_data_error.clone(),
))
.await
Expand Down Expand Up @@ -139,7 +139,7 @@ impl BitcoinCoreSv2TDP {
return Err(BitcoinCoreSv2TDPError::FailedToFetchTemplateTxData);
}
};
TemplateDistribution::RequestTransactionDataSuccess(
TemplateDistributionOwned::RequestTransactionDataSuccess(
request_transaction_data_success,
)
}
Expand All @@ -148,13 +148,15 @@ impl BitcoinCoreSv2TDP {
"Template {} not found, sending error response",
request_transaction_data.template_id
);
TemplateDistribution::RequestTransactionDataError(RequestTransactionDataError {
template_id: request_transaction_data.template_id,
error_code: "template-id-not-found"
.to_string()
.try_into()
.expect("error code must be valid string"),
})
TemplateDistributionOwned::RequestTransactionDataError(
RequestTransactionDataErrorOwned {
template_id: request_transaction_data.template_id,
error_code: "template-id-not-found"
.to_string()
.try_into()
.expect("error code must be valid string"),
},
)
}
}
};
Expand All @@ -169,7 +171,7 @@ impl BitcoinCoreSv2TDP {

pub(crate) async fn handle_submit_solution(
&self,
submit_solution: SubmitSolution<'static>,
submit_solution: SubmitSolutionOwned,
) -> Result<(), BitcoinCoreSv2TDPError> {
debug!(
"handle_submit_solution() called for template_id: {}",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,10 @@ use std::{
time::Instant,
};
use stratum_core::{
binary_sv2::U256,
binary_sv2::U256Owned,
bitcoin::{Transaction, block::Header, consensus::deserialize},
parsers_sv2::TemplateDistribution,
template_distribution_sv2::CoinbaseOutputConstraints,
parsers_sv2::TemplateDistributionOwned,
template_distribution_sv2::CoinbaseOutputConstraintsOwned,
};

use std::sync::RwLock;
Expand Down Expand Up @@ -91,12 +91,12 @@ pub struct BitcoinCoreSv2TDP {
mining_ipc_client: MiningIpcClient,
monitor_ipc_templates_handle: Rc<RefCell<Option<JoinHandle<()>>>>,
current_template_ipc_client: Rc<RefCell<Option<BlockTemplateIpcClient>>>,
current_prev_hash: Rc<RefCell<Option<U256<'static>>>>,
current_prev_hash: Rc<RefCell<Option<U256Owned>>>,
template_data: Rc<RwLock<HashMap<u64, TemplateData>>>,
stale_template_ids: Rc<RwLock<HashSet<u64>>>,
template_id_factory: Rc<AtomicU64>,
incoming_messages: Receiver<TemplateDistribution<'static>>,
outgoing_messages: Sender<TemplateDistribution<'static>>,
incoming_messages: Receiver<TemplateDistributionOwned>,
outgoing_messages: Sender<TemplateDistributionOwned>,
global_cancellation_token: CancellationToken,
template_ipc_client_cancellation_token: CancellationToken,
last_sent_template_instant: Option<Instant>,
Expand All @@ -110,8 +110,8 @@ impl BitcoinCoreSv2TDP {
bitcoin_core_unix_socket_path: P,
fee_threshold: u64,
min_interval: u8,
incoming_messages: Receiver<TemplateDistribution<'static>>,
outgoing_messages: Sender<TemplateDistribution<'static>>,
incoming_messages: Receiver<TemplateDistributionOwned>,
outgoing_messages: Sender<TemplateDistributionOwned>,
global_cancellation_token: CancellationToken,
) -> Result<Self, BitcoinCoreSv2TDPError>
where
Expand Down Expand Up @@ -217,7 +217,7 @@ impl BitcoinCoreSv2TDP {
Ok(message) = self.incoming_messages.recv() => {
debug!("run() received message during initial loop: {:?}", message);
match message {
TemplateDistribution::CoinbaseOutputConstraints(coinbase_output_constraints) => {
TemplateDistributionOwned::CoinbaseOutputConstraints(coinbase_output_constraints) => {
info!("Received: {:?}", coinbase_output_constraints);
debug!("First CoinbaseOutputConstraints received - max_additional_size: {}, max_additional_sigops: {}",
coinbase_output_constraints.coinbase_output_max_additional_size,
Expand Down Expand Up @@ -466,7 +466,7 @@ impl BitcoinCoreSv2TDP {
template_data.get_template_id()
);
self.outgoing_messages
.send(TemplateDistribution::NewTemplate(new_template))
.send(TemplateDistributionOwned::NewTemplate(new_template))
.await
.map_err(|e| {
error!("Failed to send NewTemplate message: {:?}", e);
Expand All @@ -480,7 +480,7 @@ impl BitcoinCoreSv2TDP {
template_data.get_prev_hash()
);
self.outgoing_messages
.send(TemplateDistribution::SetNewPrevHash(set_new_prev_hash))
.send(TemplateDistributionOwned::SetNewPrevHash(set_new_prev_hash))
.await
.map_err(|e| {
error!("Failed to send SetNewPrevHash message: {:?}", e);
Expand Down Expand Up @@ -511,7 +511,7 @@ impl BitcoinCoreSv2TDP {
/// - stores the client as `current_template_ipc_client`
async fn bootstrap_template_ipc_client_from_coinbase_output_constraints(
&mut self,
coinbase_output_constraints: CoinbaseOutputConstraints,
coinbase_output_constraints: CoinbaseOutputConstraintsOwned,
) -> Result<(), BitcoinCoreSv2TDPError> {
debug!(
"bootstrap_template_ipc_client_from_coinbase_output_constraints() called - max_size: {}, max_sigops: {}",
Expand Down
Loading
Loading