From d8b8ce9837eb1372d167d60ed8f758ed5480854f Mon Sep 17 00:00:00 2001 From: Boog900 <54e72d8a-345f-4599-bd90-c6b9bc7d0ec5@aleeas.com> Date: Tue, 30 May 2023 21:05:45 +0100 Subject: [PATCH] fix non-miner v1 txs --- coins/monero/src/transaction.rs | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/coins/monero/src/transaction.rs b/coins/monero/src/transaction.rs index 68936611..0053bec8 100644 --- a/coins/monero/src/transaction.rs +++ b/coins/monero/src/transaction.rs @@ -207,7 +207,7 @@ impl TransactionPrefix { #[derive(Clone, PartialEq, Eq, Debug)] pub struct Transaction { pub prefix: TransactionPrefix, - pub signatures: Vec<(Scalar, Scalar)>, + pub signatures: Vec>, pub rct_signatures: RctSignatures, } @@ -225,9 +225,11 @@ impl Transaction { pub fn write(&self, w: &mut W) -> io::Result<()> { self.prefix.write(w)?; if self.prefix.version == 1 { - for sig in &self.signatures { - write_scalar(&sig.0, w)?; - write_scalar(&sig.1, w)?; + for sigs in &self.signatures { + for sig in sigs { + write_scalar(&sig.0, w)?; + write_scalar(&sig.1, w)?; + } } Ok(()) } else if self.prefix.version == 2 { @@ -252,11 +254,18 @@ impl Transaction { }; if prefix.version == 1 { - if !matches!(prefix.inputs[0], Input::Gen(_)) { - for _ in 0 .. prefix.inputs.len() { - signatures.push((read_scalar(r)?, read_scalar(r)?)); - } - } + let read_sig = + |r: &mut R| -> io::Result<(Scalar, Scalar)> { Ok((read_scalar(r)?, read_scalar(r)?)) }; + signatures = prefix + .inputs + .iter() + .filter_map(|input| match input { + Input::ToKey { key_offsets, .. } => { + Some(key_offsets.iter().map(|_| (read_sig(r))).collect::, _>>()) + } + _ => None, + }) + .collect::>, _>>()?; rct_signatures.base.fee = prefix .inputs