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.
This commit is contained in:
Luke Parker
2025-09-18 19:00:10 -04:00
parent a9b1e5293c
commit 224cf4ea21
9 changed files with 72 additions and 71 deletions

87
Cargo.lock generated
View File

@@ -544,7 +544,7 @@ dependencies = [
"alloy-json-rpc", "alloy-json-rpc",
"alloy-transport", "alloy-transport",
"serde_json", "serde_json",
"simple-request 0.2.0", "simple-request",
"tower 0.5.2", "tower 0.5.2",
] ]
@@ -1461,7 +1461,7 @@ dependencies = [
"secp256k1 0.29.1", "secp256k1 0.29.1",
"serde", "serde",
"serde_json", "serde_json",
"simple-request 0.2.0", "simple-request",
"std-shims 0.1.5", "std-shims 0.1.5",
"subtle", "subtle",
"thiserror 2.0.16", "thiserror 2.0.16",
@@ -6123,7 +6123,7 @@ dependencies = [
[[package]] [[package]]
name = "monero-address" name = "monero-address"
version = "0.1.0" 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 = [ dependencies = [
"curve25519-dalek", "curve25519-dalek",
"monero-base58", "monero-base58",
@@ -6135,7 +6135,7 @@ dependencies = [
[[package]] [[package]]
name = "monero-base58" name = "monero-base58"
version = "0.1.0" 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 = [ dependencies = [
"monero-primitives", "monero-primitives",
"std-shims 0.1.99", "std-shims 0.1.99",
@@ -6144,7 +6144,7 @@ dependencies = [
[[package]] [[package]]
name = "monero-borromean" name = "monero-borromean"
version = "0.1.0" 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 = [ dependencies = [
"curve25519-dalek", "curve25519-dalek",
"monero-generators", "monero-generators",
@@ -6157,7 +6157,7 @@ dependencies = [
[[package]] [[package]]
name = "monero-bulletproofs" name = "monero-bulletproofs"
version = "0.1.0" 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 = [ dependencies = [
"curve25519-dalek", "curve25519-dalek",
"monero-generators", "monero-generators",
@@ -6172,7 +6172,7 @@ dependencies = [
[[package]] [[package]]
name = "monero-clsag" name = "monero-clsag"
version = "0.1.0" 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 = [ dependencies = [
"curve25519-dalek", "curve25519-dalek",
"dalek-ff-group 0.5.99", "dalek-ff-group 0.5.99",
@@ -6190,10 +6190,25 @@ dependencies = [
"zeroize", "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]] [[package]]
name = "monero-generators" name = "monero-generators"
version = "0.4.0" 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 = [ dependencies = [
"crypto-bigint 0.5.5", "crypto-bigint 0.5.5",
"curve25519-dalek", "curve25519-dalek",
@@ -6205,10 +6220,23 @@ dependencies = [
"subtle", "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]] [[package]]
name = "monero-io" name = "monero-io"
version = "0.1.0" 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 = [ dependencies = [
"curve25519-dalek", "curve25519-dalek",
"std-shims 0.1.99", "std-shims 0.1.99",
@@ -6218,7 +6246,7 @@ dependencies = [
[[package]] [[package]]
name = "monero-mlsag" name = "monero-mlsag"
version = "0.1.0" 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 = [ dependencies = [
"curve25519-dalek", "curve25519-dalek",
"monero-generators", "monero-generators",
@@ -6232,7 +6260,7 @@ dependencies = [
[[package]] [[package]]
name = "monero-oxide" name = "monero-oxide"
version = "0.1.4-alpha" 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 = [ dependencies = [
"curve25519-dalek", "curve25519-dalek",
"hex-literal", "hex-literal",
@@ -6250,7 +6278,7 @@ dependencies = [
[[package]] [[package]]
name = "monero-primitives" name = "monero-primitives"
version = "0.1.0" 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 = [ dependencies = [
"curve25519-dalek", "curve25519-dalek",
"monero-generators", "monero-generators",
@@ -6260,31 +6288,15 @@ dependencies = [
"zeroize", "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]] [[package]]
name = "monero-simple-request-rpc" name = "monero-simple-request-rpc"
version = "0.1.0" 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 = [ dependencies = [
"digest_auth", "digest_auth",
"hex", "hex",
"monero-rpc", "monero-daemon-rpc",
"simple-request 0.1.99", "simple-request",
"tokio", "tokio",
"zeroize", "zeroize",
] ]
@@ -6292,7 +6304,7 @@ dependencies = [
[[package]] [[package]]
name = "monero-wallet" name = "monero-wallet"
version = "0.1.0" 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 = [ dependencies = [
"curve25519-dalek", "curve25519-dalek",
"flexible-transcript", "flexible-transcript",
@@ -6300,8 +6312,8 @@ dependencies = [
"modular-frost", "modular-frost",
"monero-address", "monero-address",
"monero-clsag", "monero-clsag",
"monero-interface",
"monero-oxide", "monero-oxide",
"monero-rpc",
"rand 0.8.5", "rand 0.8.5",
"rand_chacha 0.3.1", "rand_chacha 0.3.1",
"rand_core 0.6.4", "rand_core 0.6.4",
@@ -9782,7 +9794,7 @@ dependencies = [
"serai-docker-tests", "serai-docker-tests",
"serde", "serde",
"serde_json", "serde_json",
"simple-request 0.2.0", "simple-request",
"sp-core", "sp-core",
"sp-runtime", "sp-runtime",
"thiserror 2.0.16", "thiserror 2.0.16",
@@ -11063,13 +11075,6 @@ dependencies = [
"wide", "wide",
] ]
[[package]]
name = "simple-request"
version = "0.1.99"
dependencies = [
"simple-request 0.2.0",
]
[[package]] [[package]]
name = "simple-request" name = "simple-request"
version = "0.2.0" version = "0.2.0"

View File

@@ -187,7 +187,7 @@ overflow-checks = true
[patch.crates-io] [patch.crates-io]
# Dependencies from monero-oxide which originate from within our own tree # Dependencies from monero-oxide which originate from within our own tree
std-shims = { path = "patches/std-shims" } std-shims = { path = "patches/std-shims" }
simple-request = { path = "patches/simple-request" } simple-request = { path = "common/request" }
multiexp = { path = "crypto/multiexp" } multiexp = { path = "crypto/multiexp" }
flexible-transcript = { path = "crypto/transcript" } flexible-transcript = { path = "crypto/transcript" }
ciphersuite = { path = "patches/ciphersuite" } ciphersuite = { path = "patches/ciphersuite" }

View File

@@ -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"] } dkg = { package = "dkg-evrf", path = "../../crypto/dkg/evrf", default-features = false, features = ["std", "ed25519"] }
frost = { package = "modular-frost", path = "../../crypto/frost", default-features = false } 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-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 = "2c847f71079a105456376f9957cee86c4b6a9eb8", default-features = false } 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"] } serai-client = { path = "../../substrate/client", default-features = false, features = ["monero"] }

View File

@@ -6,7 +6,7 @@
static ALLOCATOR: zalloc::ZeroizingAlloc<std::alloc::System> = static ALLOCATOR: zalloc::ZeroizingAlloc<std::alloc::System> =
zalloc::ZeroizingAlloc(std::alloc::System); zalloc::ZeroizingAlloc(std::alloc::System);
use monero_simple_request_rpc::SimpleRequestRpc; use monero_simple_request_rpc::SimpleRequestTransport;
mod primitives; mod primitives;
pub(crate) use crate::primitives::*; pub(crate) use crate::primitives::*;
@@ -23,7 +23,7 @@ async fn main() {
let db = bin::init(); let db = bin::init();
let feed = Rpc { let feed = Rpc {
rpc: loop { rpc: loop {
match SimpleRequestRpc::new(bin::url()).await { match SimpleRequestTransport::new(bin::url()).await {
Ok(rpc) => break rpc, Ok(rpc) => break rpc,
Err(e) => { Err(e) => {
log::error!("couldn't connect to the Monero node: {e:?}"); log::error!("couldn't connect to the Monero node: {e:?}");

View File

@@ -4,7 +4,8 @@ use ciphersuite::*;
use dalek_ff_group::Ed25519; use dalek_ff_group::Ed25519;
use monero_wallet::{ 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; use serai_client::networks::monero::Address;

View File

@@ -1,7 +1,6 @@
use core::future::Future; use core::future::Future;
use monero_wallet::rpc::{RpcError, Rpc as RpcTrait}; use monero_simple_request_rpc::{prelude::*, SimpleRequestTransport};
use monero_simple_request_rpc::SimpleRequestRpc;
use serai_client::primitives::{ExternalNetworkId, ExternalCoin, Amount}; use serai_client::primitives::{ExternalNetworkId, ExternalCoin, Amount};
@@ -15,7 +14,7 @@ use crate::{
#[derive(Clone)] #[derive(Clone)]
pub(crate) struct Rpc { pub(crate) struct Rpc {
pub(crate) rpc: SimpleRequestRpc, pub(crate) rpc: MoneroDaemon<SimpleRequestTransport>,
} }
impl ScannerFeed for Rpc { impl ScannerFeed for Rpc {
@@ -31,21 +30,16 @@ impl ScannerFeed for Rpc {
type Block = Block; type Block = Block;
type EphemeralError = RpcError; type EphemeralError = InterfaceError;
fn latest_finalized_block_number( fn latest_finalized_block_number(
&self, &self,
) -> impl Send + Future<Output = Result<u64, Self::EphemeralError>> { ) -> impl Send + Future<Output = Result<u64, Self::EphemeralError>> {
async move { async move {
Ok( Ok(
self u64::try_from(self.rpc.latest_block_number().await?)
.rpc .unwrap()
.get_height() .saturating_sub(Self::CONFIRMATIONS - 1),
.await?
.checked_sub(1)
.expect("connected to an invalid Monero RPC")
.try_into()
.unwrap(),
) )
} }
} }
@@ -64,11 +58,11 @@ impl ScannerFeed for Rpc {
} }
// Fetch all the timestamps within the window // 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 timestamps = vec![block_for_time_of.header.timestamp];
let mut parent = block_for_time_of.header.previous; let mut parent = block_for_time_of.header.previous;
for _ in 1 .. BLOCKCHAIN_TIMESTAMP_CHECK_WINDOW { 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); timestamps.push(parent_block.header.timestamp);
parent = parent_block.header.previous; parent = parent_block.header.previous;
} }
@@ -94,7 +88,7 @@ impl ScannerFeed for Rpc {
) -> impl Send ) -> impl Send
+ Future<Output = Result<<Self::Block as primitives::Block>::Header, Self::EphemeralError>> + Future<Output = Result<<Self::Block as primitives::Block>::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 #[rustfmt::skip] // It wants to improperly format the `async move` to a single line
@@ -103,7 +97,7 @@ impl ScannerFeed for Rpc {
number: u64, number: u64,
) -> impl Send + Future<Output = Result<Self::Block, Self::EphemeralError>> { ) -> impl Send + Future<Output = Result<Self::Block, Self::EphemeralError>> {
async move { 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<Transaction> for Rpc { impl TransactionPublisher<Transaction> for Rpc {
type EphemeralError = RpcError; type EphemeralError = PublishTransactionError;
fn publish( fn publish(
&self, &self,

View File

@@ -7,7 +7,7 @@ use rand_chacha::ChaCha20Rng;
use ciphersuite::*; use ciphersuite::*;
use dalek_ff_group::Ed25519; use dalek_ff_group::Ed25519;
use monero_wallet::rpc::{FeeRate, RpcError}; use monero_wallet::interface::prelude::*;
use serai_client::{ use serai_client::{
primitives::{ExternalCoin, Amount}, primitives::{ExternalCoin, Amount},
@@ -55,7 +55,7 @@ async fn signable_transaction(
inputs: Vec<OutputFor<Rpc>>, inputs: Vec<OutputFor<Rpc>>,
payments: Vec<Payment<AddressFor<Rpc>>>, payments: Vec<Payment<AddressFor<Rpc>>>,
change: Option<KeyFor<Rpc>>, change: Option<KeyFor<Rpc>>,
) -> Result<Result<(SignableTransaction, MSignableTransaction), SendError>, RpcError> { ) -> Result<Result<(SignableTransaction, MSignableTransaction), SendError>, TransactionsError> {
assert!(inputs.len() < <Planner as TransactionPlanner<Rpc, ()>>::MAX_INPUTS); assert!(inputs.len() < <Planner as TransactionPlanner<Rpc, ()>>::MAX_INPUTS);
assert!( assert!(
(payments.len() + usize::from(u8::from(change.is_some()))) < (payments.len() + usize::from(u8::from(change.is_some()))) <
@@ -148,7 +148,7 @@ async fn signable_transaction(
#[derive(Clone)] #[derive(Clone)]
pub(crate) struct Planner(pub(crate) Rpc); pub(crate) struct Planner(pub(crate) Rpc);
impl TransactionPlanner<Rpc, ()> for Planner { impl TransactionPlanner<Rpc, ()> for Planner {
type EphemeralError = RpcError; type EphemeralError = TransactionsError;
type SignableTransaction = SignableTransaction; type SignableTransaction = SignableTransaction;
@@ -221,8 +221,9 @@ impl TransactionPlanner<Rpc, ()> for Planner {
payments: Vec<Payment<AddressFor<Rpc>>>, payments: Vec<Payment<AddressFor<Rpc>>>,
change: Option<KeyFor<Rpc>>, change: Option<KeyFor<Rpc>>,
) -> impl Send ) -> impl Send
+ Future<Output = Result<PlannedTransaction<Rpc, Self::SignableTransaction, ()>, RpcError>> + Future<
{ Output = Result<PlannedTransaction<Rpc, Self::SignableTransaction, ()>, TransactionsError>,
> {
let singular_spent_output = (inputs.len() == 1).then(|| inputs[0].id()); let singular_spent_output = (inputs.len() == 1).then(|| inputs[0].id());
async move { async move {

View File

@@ -43,7 +43,7 @@ bitcoin = { version = "0.32", optional = true }
ciphersuite = { path = "../../crypto/ciphersuite", optional = true } ciphersuite = { path = "../../crypto/ciphersuite", optional = true }
dalek-ff-group = { path = "../../crypto/dalek-ff-group", 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] [dev-dependencies]
rand_core = "0.6" rand_core = "0.6"

View File

@@ -82,7 +82,7 @@ serai-env = { path = "../../common/env" }
curve25519-dalek = { version = "4", default-features = false, features = ["alloc", "zeroize"] } curve25519-dalek = { version = "4", default-features = false, features = ["alloc", "zeroize"] }
bitcoin-serai = { path = "../../networks/bitcoin", default-features = false, features = ["std", "hazmat"] } 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] [build-dependencies]
substrate-build-script-utils = { git = "https://github.com/serai-dex/substrate" } substrate-build-script-utils = { git = "https://github.com/serai-dex/substrate" }