diff --git a/Cargo.lock b/Cargo.lock index 7ae3a0f2..1839cc98 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8143,6 +8143,7 @@ dependencies = [ "serai-processor-primitives", "serai-processor-scanner", "serai-processor-scheduler-primitives", + "serai-processor-signers", "serai-processor-transaction-chaining-scheduler", "serai-processor-utxo-scheduler-primitives", "tokio", diff --git a/processor/bitcoin/Cargo.toml b/processor/bitcoin/Cargo.toml index 91813bac..54ace26f 100644 --- a/processor/bitcoin/Cargo.toml +++ b/processor/bitcoin/Cargo.toml @@ -47,6 +47,7 @@ scheduler = { package = "serai-processor-scheduler-primitives", path = "../sched scanner = { package = "serai-processor-scanner", path = "../scanner" } utxo-scheduler = { package = "serai-processor-utxo-scheduler-primitives", path = "../scheduler/utxo/primitives" } transaction-chaining-scheduler = { package = "serai-processor-transaction-chaining-scheduler", path = "../scheduler/utxo/transaction-chaining" } +signers = { package = "serai-processor-signers", path = "../signers" } message-queue = { package = "serai-message-queue", path = "../../message-queue" } diff --git a/processor/bitcoin/src/lib.rs b/processor/bitcoin/src/lib.rs index cbf65093..281b7358 100644 --- a/processor/bitcoin/src/lib.rs +++ b/processor/bitcoin/src/lib.rs @@ -15,7 +15,7 @@ mod transaction; mod block; // App-logic trait satisfactions -mod scanner_feed; +mod rpc; mod scheduler; pub(crate) fn hash_bytes(hash: bitcoin_serai::bitcoin::hashes::sha256d::Hash) -> [u8; 32] { diff --git a/processor/bitcoin/src/scanner_feed.rs b/processor/bitcoin/src/rpc.rs similarity index 88% rename from processor/bitcoin/src/scanner_feed.rs rename to processor/bitcoin/src/rpc.rs index 5a3c491c..8af82121 100644 --- a/processor/bitcoin/src/scanner_feed.rs +++ b/processor/bitcoin/src/rpc.rs @@ -3,8 +3,12 @@ use bitcoin_serai::rpc::{RpcError, Rpc as BRpc}; use serai_client::primitives::{NetworkId, Coin, Amount}; use scanner::ScannerFeed; +use signers::TransactionPublisher; -use crate::block::{BlockHeader, Block}; +use crate::{ + transaction::Transaction, + block::{BlockHeader, Block}, +}; #[derive(Clone)] pub(crate) struct Rpc(BRpc); @@ -92,3 +96,12 @@ impl ScannerFeed for Rpc { Ok(Amount(0)) } } + +#[async_trait::async_trait] +impl TransactionPublisher for Rpc { + type EphemeralError = RpcError; + + async fn publish(&self, tx: Transaction) -> Result<(), Self::EphemeralError> { + self.0.send_raw_transaction(&tx.0).await.map(|_| ()) + } +} diff --git a/processor/bitcoin/src/scheduler.rs b/processor/bitcoin/src/scheduler.rs index 0c1debdb..c48f9a69 100644 --- a/processor/bitcoin/src/scheduler.rs +++ b/processor/bitcoin/src/scheduler.rs @@ -19,7 +19,7 @@ use crate::{ scan::{offsets_for_key, scanner}, output::Output, transaction::{SignableTransaction, Eventuality}, - scanner_feed::Rpc, + rpc::Rpc, }; fn address_from_serai_key(key: ::G, kind: OutputType) -> Address { diff --git a/processor/bitcoin/src/transaction.rs b/processor/bitcoin/src/transaction.rs index f529b178..5fca0b91 100644 --- a/processor/bitcoin/src/transaction.rs +++ b/processor/bitcoin/src/transaction.rs @@ -24,7 +24,7 @@ use serai_client::networks::bitcoin::Address; use crate::output::OutputId; #[derive(Clone, Debug)] -pub(crate) struct Transaction(BTransaction); +pub(crate) struct Transaction(pub(crate) BTransaction); impl From for Transaction { fn from(tx: BTransaction) -> Self {