Various minor fixes
This commit is contained in:
parent
cadc098883
commit
8868529963
@ -5,10 +5,9 @@ use tsify::Tsify;
|
|||||||
use wasm_bindgen::prelude::*;
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
use sp_client::{
|
use sp_client::{
|
||||||
bitcoin::{absolute::Height, secp256k1::PublicKey, Amount, OutPoint, Transaction, XOnlyPublicKey},
|
bitcoin::{absolute::Height, hashes::Hash, secp256k1::PublicKey, Amount, OutPoint, Transaction, XOnlyPublicKey},
|
||||||
silentpayments::{
|
silentpayments::{
|
||||||
utils::receiving::calculate_ecdh_shared_secret,
|
utils::receiving::calculate_ecdh_shared_secret, SilentPaymentAddress
|
||||||
SilentPaymentAddress
|
|
||||||
},
|
},
|
||||||
OutputSpendStatus, OwnedOutput, SpClient
|
OutputSpendStatus, OwnedOutput, SpClient
|
||||||
};
|
};
|
||||||
@ -73,7 +72,7 @@ impl Device {
|
|||||||
if let Some(output) = self.sp_wallet.get_outputs().get(&input.previous_output) {
|
if let Some(output) = self.sp_wallet.get_outputs().get(&input.previous_output) {
|
||||||
match &output.spend_status {
|
match &output.spend_status {
|
||||||
OutputSpendStatus::Spent(tx) => {
|
OutputSpendStatus::Spent(tx) => {
|
||||||
if *tx == txid.to_string() {
|
if *tx == txid.as_raw_hash().to_byte_array() {
|
||||||
return Err(anyhow::Error::msg("Transaction already scanned"));
|
return Err(anyhow::Error::msg("Transaction already scanned"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -102,25 +101,18 @@ impl Device {
|
|||||||
.sp_receiver
|
.sp_receiver
|
||||||
.scan_transaction(&shared_secret, pubkeys_to_check.keys().cloned().collect())?;
|
.scan_transaction(&shared_secret, pubkeys_to_check.keys().cloned().collect())?;
|
||||||
let mut new_outputs: HashMap<OutPoint, OwnedOutput> = HashMap::new();
|
let mut new_outputs: HashMap<OutPoint, OwnedOutput> = HashMap::new();
|
||||||
for (label, map) in ours {
|
for (label, map) in ours.iter() {
|
||||||
for (key, scalar) in map {
|
for (key, scalar) in map {
|
||||||
let vout = pubkeys_to_check.get(&key).unwrap().to_owned();
|
let vout = pubkeys_to_check.get(&key).unwrap().to_owned();
|
||||||
let txout = tx.output.get(vout as usize).unwrap();
|
let txout = tx.output.get(vout as usize).unwrap();
|
||||||
|
|
||||||
let label_str: Option<String>;
|
|
||||||
if let Some(ref l) = label {
|
|
||||||
label_str = Some(l.as_string());
|
|
||||||
} else {
|
|
||||||
label_str = None;
|
|
||||||
}
|
|
||||||
|
|
||||||
let outpoint = OutPoint::new(tx.txid(), vout);
|
let outpoint = OutPoint::new(tx.txid(), vout);
|
||||||
let owned = OwnedOutput {
|
let owned = OwnedOutput {
|
||||||
blockheight: Height::from_consensus(blockheight)?,
|
blockheight: Height::from_consensus(blockheight)?,
|
||||||
tweak: scalar.to_be_bytes(),
|
tweak: scalar.to_be_bytes(),
|
||||||
amount: txout.value,
|
amount: txout.value,
|
||||||
script: txout.script_pubkey.to_bytes().try_into()?,
|
script: txout.script_pubkey.to_bytes().try_into()?,
|
||||||
label: label_str,
|
label: label.clone(),
|
||||||
spend_status: OutputSpendStatus::Unspent,
|
spend_status: OutputSpendStatus::Unspent,
|
||||||
};
|
};
|
||||||
new_outputs.insert(outpoint, owned);
|
new_outputs.insert(outpoint, owned);
|
||||||
@ -129,12 +121,12 @@ impl Device {
|
|||||||
let mut res = new_outputs.clone();
|
let mut res = new_outputs.clone();
|
||||||
self.sp_wallet.get_mut_outputs().extend(new_outputs);
|
self.sp_wallet.get_mut_outputs().extend(new_outputs);
|
||||||
|
|
||||||
let txid = tx.txid().to_string();
|
let txid = tx.txid();
|
||||||
// update outputs that we own and that are spent
|
// update outputs that we own and that are spent
|
||||||
for input in tx.input.iter() {
|
for input in tx.input.iter() {
|
||||||
if let Some(prevout) = self.sp_wallet.get_mut_outputs().get_mut(&input.previous_output) {
|
if let Some(prevout) = self.sp_wallet.get_mut_outputs().get_mut(&input.previous_output) {
|
||||||
// This is spent by this tx
|
// This is spent by this tx
|
||||||
prevout.spend_status = OutputSpendStatus::Spent(txid.clone());
|
prevout.spend_status = OutputSpendStatus::Spent(*txid.as_byte_array());
|
||||||
res.insert(input.previous_output, prevout.clone());
|
res.insert(input.previous_output, prevout.clone());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,12 +3,11 @@ use std::collections::HashMap;
|
|||||||
use anyhow::{Error, Result};
|
use anyhow::{Error, Result};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use sp_client::bitcoin::absolute::Height;
|
use sp_client::bitcoin::absolute::Height;
|
||||||
use sp_client::bitcoin::hex::DisplayHex;
|
|
||||||
use sp_client::bitcoin::secp256k1::{PublicKey, SecretKey};
|
use sp_client::bitcoin::secp256k1::{PublicKey, SecretKey};
|
||||||
use tsify::Tsify;
|
use tsify::Tsify;
|
||||||
|
|
||||||
use rand::{thread_rng, Rng};
|
use rand::{thread_rng, Rng};
|
||||||
use sp_client::bitcoin::{Amount, OutPoint, Transaction, XOnlyPublicKey, TxOut};
|
use sp_client::bitcoin::{Amount, OutPoint, Transaction, TxOut, XOnlyPublicKey};
|
||||||
use sp_client::{FeeRate, OutputSpendStatus, OwnedOutput, Recipient, SilentPaymentUnsignedTransaction, SpClient};
|
use sp_client::{FeeRate, OutputSpendStatus, OwnedOutput, Recipient, SilentPaymentUnsignedTransaction, SpClient};
|
||||||
use sp_client::silentpayments::utils::receiving::calculate_ecdh_shared_secret;
|
use sp_client::silentpayments::utils::receiving::calculate_ecdh_shared_secret;
|
||||||
|
|
||||||
@ -96,7 +95,7 @@ impl SpWallet {
|
|||||||
let txid = tx.txid();
|
let txid = tx.txid();
|
||||||
let height = Height::from_consensus(height)?;
|
let height = Height::from_consensus(height)?;
|
||||||
let mut res = HashMap::new();
|
let mut res = HashMap::new();
|
||||||
for (label, map) in ours {
|
for (label, map) in ours.iter() {
|
||||||
res.extend(p2tr_outs.iter().filter_map(|(i, o)| {
|
res.extend(p2tr_outs.iter().filter_map(|(i, o)| {
|
||||||
match XOnlyPublicKey::from_slice(&o.script_pubkey.as_bytes()[2..]) {
|
match XOnlyPublicKey::from_slice(&o.script_pubkey.as_bytes()[2..]) {
|
||||||
Ok(key) => {
|
Ok(key) => {
|
||||||
@ -107,13 +106,6 @@ impl SpWallet {
|
|||||||
txid,
|
txid,
|
||||||
vout: *i as u32,
|
vout: *i as u32,
|
||||||
};
|
};
|
||||||
let label_str: Option<String>;
|
|
||||||
if let Some(l) = &label {
|
|
||||||
label_str =
|
|
||||||
Some(l.as_inner().to_be_bytes().to_lower_hex_string());
|
|
||||||
} else {
|
|
||||||
label_str = None;
|
|
||||||
}
|
|
||||||
return Some((
|
return Some((
|
||||||
outpoint,
|
outpoint,
|
||||||
OwnedOutput {
|
OwnedOutput {
|
||||||
@ -121,7 +113,7 @@ impl SpWallet {
|
|||||||
tweak: tweak.secret_bytes(),
|
tweak: tweak.secret_bytes(),
|
||||||
amount: o.value,
|
amount: o.value,
|
||||||
script: o.script_pubkey.clone(),
|
script: o.script_pubkey.clone(),
|
||||||
label: label_str,
|
label: label.clone(),
|
||||||
spend_status: OutputSpendStatus::Unspent,
|
spend_status: OutputSpendStatus::Unspent,
|
||||||
},
|
},
|
||||||
));
|
));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user