From 224cf4ea21bb707d9a7fc6884bf67c1c1afefbac Mon Sep 17 00:00:00 2001 From: Luke Parker Date: Thu, 18 Sep 2025 19:00:10 -0400 Subject: [PATCH] Update `monero-oxide` to the branch with the new RPC See https://github.com/monero-oxide/monero-oxide/pull/66. Allows us to remove the shim `simple-request 0.1` we had to define as we now have `simple-request 0.2` in tree. --- Cargo.lock | 87 +++++++++++++----------- Cargo.toml | 2 +- processor/monero/Cargo.toml | 4 +- processor/monero/src/main.rs | 4 +- processor/monero/src/primitives/block.rs | 3 +- processor/monero/src/rpc.rs | 28 +++----- processor/monero/src/scheduler.rs | 11 +-- substrate/client/Cargo.toml | 2 +- substrate/node/Cargo.toml | 2 +- 9 files changed, 72 insertions(+), 71 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3c7e4985..446d57e7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -544,7 +544,7 @@ dependencies = [ "alloy-json-rpc", "alloy-transport", "serde_json", - "simple-request 0.2.0", + "simple-request", "tower 0.5.2", ] @@ -1461,7 +1461,7 @@ dependencies = [ "secp256k1 0.29.1", "serde", "serde_json", - "simple-request 0.2.0", + "simple-request", "std-shims 0.1.5", "subtle", "thiserror 2.0.16", @@ -6123,7 +6123,7 @@ dependencies = [ [[package]] name = "monero-address" version = "0.1.0" -source = "git+https://github.com/monero-oxide/monero-oxide?rev=2c847f71079a105456376f9957cee86c4b6a9eb8#2c847f71079a105456376f9957cee86c4b6a9eb8" +source = "git+https://github.com/monero-oxide/monero-oxide?rev=f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c#f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c" dependencies = [ "curve25519-dalek", "monero-base58", @@ -6135,7 +6135,7 @@ dependencies = [ [[package]] name = "monero-base58" version = "0.1.0" -source = "git+https://github.com/monero-oxide/monero-oxide?rev=2c847f71079a105456376f9957cee86c4b6a9eb8#2c847f71079a105456376f9957cee86c4b6a9eb8" +source = "git+https://github.com/monero-oxide/monero-oxide?rev=f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c#f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c" dependencies = [ "monero-primitives", "std-shims 0.1.99", @@ -6144,7 +6144,7 @@ dependencies = [ [[package]] name = "monero-borromean" version = "0.1.0" -source = "git+https://github.com/monero-oxide/monero-oxide?rev=2c847f71079a105456376f9957cee86c4b6a9eb8#2c847f71079a105456376f9957cee86c4b6a9eb8" +source = "git+https://github.com/monero-oxide/monero-oxide?rev=f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c#f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c" dependencies = [ "curve25519-dalek", "monero-generators", @@ -6157,7 +6157,7 @@ dependencies = [ [[package]] name = "monero-bulletproofs" version = "0.1.0" -source = "git+https://github.com/monero-oxide/monero-oxide?rev=2c847f71079a105456376f9957cee86c4b6a9eb8#2c847f71079a105456376f9957cee86c4b6a9eb8" +source = "git+https://github.com/monero-oxide/monero-oxide?rev=f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c#f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c" dependencies = [ "curve25519-dalek", "monero-generators", @@ -6172,7 +6172,7 @@ dependencies = [ [[package]] name = "monero-clsag" version = "0.1.0" -source = "git+https://github.com/monero-oxide/monero-oxide?rev=2c847f71079a105456376f9957cee86c4b6a9eb8#2c847f71079a105456376f9957cee86c4b6a9eb8" +source = "git+https://github.com/monero-oxide/monero-oxide?rev=f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c#f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c" dependencies = [ "curve25519-dalek", "dalek-ff-group 0.5.99", @@ -6190,10 +6190,25 @@ dependencies = [ "zeroize", ] +[[package]] +name = "monero-daemon-rpc" +version = "0.1.0" +source = "git+https://github.com/monero-oxide/monero-oxide?rev=f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c#f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c" +dependencies = [ + "curve25519-dalek", + "hex", + "monero-address", + "monero-interface", + "monero-oxide", + "serde", + "serde_json", + "std-shims 0.1.99", +] + [[package]] name = "monero-generators" version = "0.4.0" -source = "git+https://github.com/monero-oxide/monero-oxide?rev=2c847f71079a105456376f9957cee86c4b6a9eb8#2c847f71079a105456376f9957cee86c4b6a9eb8" +source = "git+https://github.com/monero-oxide/monero-oxide?rev=f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c#f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c" dependencies = [ "crypto-bigint 0.5.5", "curve25519-dalek", @@ -6205,10 +6220,23 @@ dependencies = [ "subtle", ] +[[package]] +name = "monero-interface" +version = "0.1.0" +source = "git+https://github.com/monero-oxide/monero-oxide?rev=f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c#f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c" +dependencies = [ + "curve25519-dalek", + "hex", + "monero-oxide", + "std-shims 0.1.99", + "thiserror 2.0.16", + "zeroize", +] + [[package]] name = "monero-io" version = "0.1.0" -source = "git+https://github.com/monero-oxide/monero-oxide?rev=2c847f71079a105456376f9957cee86c4b6a9eb8#2c847f71079a105456376f9957cee86c4b6a9eb8" +source = "git+https://github.com/monero-oxide/monero-oxide?rev=f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c#f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c" dependencies = [ "curve25519-dalek", "std-shims 0.1.99", @@ -6218,7 +6246,7 @@ dependencies = [ [[package]] name = "monero-mlsag" version = "0.1.0" -source = "git+https://github.com/monero-oxide/monero-oxide?rev=2c847f71079a105456376f9957cee86c4b6a9eb8#2c847f71079a105456376f9957cee86c4b6a9eb8" +source = "git+https://github.com/monero-oxide/monero-oxide?rev=f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c#f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c" dependencies = [ "curve25519-dalek", "monero-generators", @@ -6232,7 +6260,7 @@ dependencies = [ [[package]] name = "monero-oxide" version = "0.1.4-alpha" -source = "git+https://github.com/monero-oxide/monero-oxide?rev=2c847f71079a105456376f9957cee86c4b6a9eb8#2c847f71079a105456376f9957cee86c4b6a9eb8" +source = "git+https://github.com/monero-oxide/monero-oxide?rev=f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c#f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c" dependencies = [ "curve25519-dalek", "hex-literal", @@ -6250,7 +6278,7 @@ dependencies = [ [[package]] name = "monero-primitives" version = "0.1.0" -source = "git+https://github.com/monero-oxide/monero-oxide?rev=2c847f71079a105456376f9957cee86c4b6a9eb8#2c847f71079a105456376f9957cee86c4b6a9eb8" +source = "git+https://github.com/monero-oxide/monero-oxide?rev=f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c#f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c" dependencies = [ "curve25519-dalek", "monero-generators", @@ -6260,31 +6288,15 @@ dependencies = [ "zeroize", ] -[[package]] -name = "monero-rpc" -version = "0.1.0" -source = "git+https://github.com/monero-oxide/monero-oxide?rev=2c847f71079a105456376f9957cee86c4b6a9eb8#2c847f71079a105456376f9957cee86c4b6a9eb8" -dependencies = [ - "curve25519-dalek", - "hex", - "monero-address", - "monero-oxide", - "serde", - "serde_json", - "std-shims 0.1.99", - "thiserror 2.0.16", - "zeroize", -] - [[package]] name = "monero-simple-request-rpc" version = "0.1.0" -source = "git+https://github.com/monero-oxide/monero-oxide?rev=2c847f71079a105456376f9957cee86c4b6a9eb8#2c847f71079a105456376f9957cee86c4b6a9eb8" +source = "git+https://github.com/monero-oxide/monero-oxide?rev=f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c#f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c" dependencies = [ "digest_auth", "hex", - "monero-rpc", - "simple-request 0.1.99", + "monero-daemon-rpc", + "simple-request", "tokio", "zeroize", ] @@ -6292,7 +6304,7 @@ dependencies = [ [[package]] name = "monero-wallet" version = "0.1.0" -source = "git+https://github.com/monero-oxide/monero-oxide?rev=2c847f71079a105456376f9957cee86c4b6a9eb8#2c847f71079a105456376f9957cee86c4b6a9eb8" +source = "git+https://github.com/monero-oxide/monero-oxide?rev=f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c#f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c" dependencies = [ "curve25519-dalek", "flexible-transcript", @@ -6300,8 +6312,8 @@ dependencies = [ "modular-frost", "monero-address", "monero-clsag", + "monero-interface", "monero-oxide", - "monero-rpc", "rand 0.8.5", "rand_chacha 0.3.1", "rand_core 0.6.4", @@ -9782,7 +9794,7 @@ dependencies = [ "serai-docker-tests", "serde", "serde_json", - "simple-request 0.2.0", + "simple-request", "sp-core", "sp-runtime", "thiserror 2.0.16", @@ -11063,13 +11075,6 @@ dependencies = [ "wide", ] -[[package]] -name = "simple-request" -version = "0.1.99" -dependencies = [ - "simple-request 0.2.0", -] - [[package]] name = "simple-request" version = "0.2.0" diff --git a/Cargo.toml b/Cargo.toml index 3285abd1..3cec31d5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -187,7 +187,7 @@ overflow-checks = true [patch.crates-io] # Dependencies from monero-oxide which originate from within our own tree std-shims = { path = "patches/std-shims" } -simple-request = { path = "patches/simple-request" } +simple-request = { path = "common/request" } multiexp = { path = "crypto/multiexp" } flexible-transcript = { path = "crypto/transcript" } ciphersuite = { path = "patches/ciphersuite" } diff --git a/processor/monero/Cargo.toml b/processor/monero/Cargo.toml index d4949dd9..9d2a1f57 100644 --- a/processor/monero/Cargo.toml +++ b/processor/monero/Cargo.toml @@ -29,8 +29,8 @@ dalek-ff-group = { path = "../../crypto/dalek-ff-group", default-features = fals dkg = { package = "dkg-evrf", path = "../../crypto/dkg/evrf", default-features = false, features = ["std", "ed25519"] } frost = { package = "modular-frost", path = "../../crypto/frost", default-features = false } -monero-wallet = { git = "https://github.com/monero-oxide/monero-oxide", rev = "2c847f71079a105456376f9957cee86c4b6a9eb8", default-features = false, features = ["std", "multisig"] } -monero-simple-request-rpc = { git = "https://github.com/monero-oxide/monero-oxide", rev = "2c847f71079a105456376f9957cee86c4b6a9eb8", default-features = false } +monero-wallet = { git = "https://github.com/monero-oxide/monero-oxide", rev = "f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c", default-features = false, features = ["std", "multisig"] } +monero-simple-request-rpc = { git = "https://github.com/monero-oxide/monero-oxide", rev = "f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c", default-features = false } serai-client = { path = "../../substrate/client", default-features = false, features = ["monero"] } diff --git a/processor/monero/src/main.rs b/processor/monero/src/main.rs index b5c67f12..535a0bcd 100644 --- a/processor/monero/src/main.rs +++ b/processor/monero/src/main.rs @@ -6,7 +6,7 @@ static ALLOCATOR: zalloc::ZeroizingAlloc = zalloc::ZeroizingAlloc(std::alloc::System); -use monero_simple_request_rpc::SimpleRequestRpc; +use monero_simple_request_rpc::SimpleRequestTransport; mod primitives; pub(crate) use crate::primitives::*; @@ -23,7 +23,7 @@ async fn main() { let db = bin::init(); let feed = Rpc { rpc: loop { - match SimpleRequestRpc::new(bin::url()).await { + match SimpleRequestTransport::new(bin::url()).await { Ok(rpc) => break rpc, Err(e) => { log::error!("couldn't connect to the Monero node: {e:?}"); diff --git a/processor/monero/src/primitives/block.rs b/processor/monero/src/primitives/block.rs index 5132ffbb..f449746a 100644 --- a/processor/monero/src/primitives/block.rs +++ b/processor/monero/src/primitives/block.rs @@ -4,7 +4,8 @@ use ciphersuite::*; use dalek_ff_group::Ed25519; use monero_wallet::{ - block::Block as MBlock, rpc::ScannableBlock as MScannableBlock, ScanError, GuaranteedScanner, + block::Block as MBlock, interface::ScannableBlock as MScannableBlock, ScanError, + GuaranteedScanner, }; use serai_client::networks::monero::Address; diff --git a/processor/monero/src/rpc.rs b/processor/monero/src/rpc.rs index 5ca74d02..e8e44133 100644 --- a/processor/monero/src/rpc.rs +++ b/processor/monero/src/rpc.rs @@ -1,7 +1,6 @@ use core::future::Future; -use monero_wallet::rpc::{RpcError, Rpc as RpcTrait}; -use monero_simple_request_rpc::SimpleRequestRpc; +use monero_simple_request_rpc::{prelude::*, SimpleRequestTransport}; use serai_client::primitives::{ExternalNetworkId, ExternalCoin, Amount}; @@ -15,7 +14,7 @@ use crate::{ #[derive(Clone)] pub(crate) struct Rpc { - pub(crate) rpc: SimpleRequestRpc, + pub(crate) rpc: MoneroDaemon, } impl ScannerFeed for Rpc { @@ -31,21 +30,16 @@ impl ScannerFeed for Rpc { type Block = Block; - type EphemeralError = RpcError; + type EphemeralError = InterfaceError; fn latest_finalized_block_number( &self, ) -> impl Send + Future> { async move { Ok( - self - .rpc - .get_height() - .await? - .checked_sub(1) - .expect("connected to an invalid Monero RPC") - .try_into() - .unwrap(), + u64::try_from(self.rpc.latest_block_number().await?) + .unwrap() + .saturating_sub(Self::CONFIRMATIONS - 1), ) } } @@ -64,11 +58,11 @@ impl ScannerFeed for Rpc { } // Fetch all the timestamps within the window - let block_for_time_of = self.rpc.get_block_by_number(number.try_into().unwrap()).await?; + let block_for_time_of = self.rpc.block_by_number(number.try_into().unwrap()).await?; let mut timestamps = vec![block_for_time_of.header.timestamp]; let mut parent = block_for_time_of.header.previous; for _ in 1 .. BLOCKCHAIN_TIMESTAMP_CHECK_WINDOW { - let parent_block = self.rpc.get_block(parent).await?; + let parent_block = self.rpc.block(parent).await?; timestamps.push(parent_block.header.timestamp); parent = parent_block.header.previous; } @@ -94,7 +88,7 @@ impl ScannerFeed for Rpc { ) -> impl Send + Future::Header, Self::EphemeralError>> { - async move { Ok(BlockHeader(self.rpc.get_block_by_number(number.try_into().unwrap()).await?)) } + async move { Ok(BlockHeader(self.rpc.block_by_number(number.try_into().unwrap()).await?)) } } #[rustfmt::skip] // It wants to improperly format the `async move` to a single line @@ -103,7 +97,7 @@ impl ScannerFeed for Rpc { number: u64, ) -> impl Send + Future> { async move { - Ok(Block(self.rpc.get_scannable_block_by_number(number.try_into().unwrap()).await?)) + Ok(Block(self.rpc.scannable_block_by_number(number.try_into().unwrap()).await?)) } } @@ -128,7 +122,7 @@ impl ScannerFeed for Rpc { } impl TransactionPublisher for Rpc { - type EphemeralError = RpcError; + type EphemeralError = PublishTransactionError; fn publish( &self, diff --git a/processor/monero/src/scheduler.rs b/processor/monero/src/scheduler.rs index 77a2af1c..182f97c2 100644 --- a/processor/monero/src/scheduler.rs +++ b/processor/monero/src/scheduler.rs @@ -7,7 +7,7 @@ use rand_chacha::ChaCha20Rng; use ciphersuite::*; use dalek_ff_group::Ed25519; -use monero_wallet::rpc::{FeeRate, RpcError}; +use monero_wallet::interface::prelude::*; use serai_client::{ primitives::{ExternalCoin, Amount}, @@ -55,7 +55,7 @@ async fn signable_transaction( inputs: Vec>, payments: Vec>>, change: Option>, -) -> Result, RpcError> { +) -> Result, TransactionsError> { assert!(inputs.len() < >::MAX_INPUTS); assert!( (payments.len() + usize::from(u8::from(change.is_some()))) < @@ -148,7 +148,7 @@ async fn signable_transaction( #[derive(Clone)] pub(crate) struct Planner(pub(crate) Rpc); impl TransactionPlanner for Planner { - type EphemeralError = RpcError; + type EphemeralError = TransactionsError; type SignableTransaction = SignableTransaction; @@ -221,8 +221,9 @@ impl TransactionPlanner for Planner { payments: Vec>>, change: Option>, ) -> impl Send - + Future, RpcError>> - { + + Future< + Output = Result, TransactionsError>, + > { let singular_spent_output = (inputs.len() == 1).then(|| inputs[0].id()); async move { diff --git a/substrate/client/Cargo.toml b/substrate/client/Cargo.toml index 641ccbc9..16b7d28b 100644 --- a/substrate/client/Cargo.toml +++ b/substrate/client/Cargo.toml @@ -43,7 +43,7 @@ bitcoin = { version = "0.32", optional = true } ciphersuite = { path = "../../crypto/ciphersuite", optional = true } dalek-ff-group = { path = "../../crypto/dalek-ff-group", optional = true } -monero-address = { git = "https://github.com/monero-oxide/monero-oxide", rev = "2c847f71079a105456376f9957cee86c4b6a9eb8", version = "0.1.0", default-features = false, features = ["std"], optional = true } +monero-address = { git = "https://github.com/monero-oxide/monero-oxide", rev = "f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c", version = "0.1.0", default-features = false, features = ["std"], optional = true } [dev-dependencies] rand_core = "0.6" diff --git a/substrate/node/Cargo.toml b/substrate/node/Cargo.toml index 758ba34e..75b8d2c4 100644 --- a/substrate/node/Cargo.toml +++ b/substrate/node/Cargo.toml @@ -82,7 +82,7 @@ serai-env = { path = "../../common/env" } curve25519-dalek = { version = "4", default-features = false, features = ["alloc", "zeroize"] } bitcoin-serai = { path = "../../networks/bitcoin", default-features = false, features = ["std", "hazmat"] } -monero-address = { git = "https://github.com/monero-oxide/monero-oxide", rev = "2c847f71079a105456376f9957cee86c4b6a9eb8", default-features = false, features = ["std"] } +monero-address = { git = "https://github.com/monero-oxide/monero-oxide", rev = "f6f4dd7dc5b7c6e057b2eac2ec4980bb7a1c707c", default-features = false, features = ["std"] } [build-dependencies] substrate-build-script-utils = { git = "https://github.com/serai-dex/substrate" }