[experimental] identify transaction we sent according to commitment value

This commit is contained in:
Sosthene 2024-05-27 15:59:29 +02:00
parent 1f689d33c3
commit de133cc0a3

View File

@ -508,9 +508,33 @@ fn handle_recover_transaction(
} else { } else {
// We are sender of a transaction // We are sender of a transaction
// We only need to return the message // We only need to return the message
// eiter this is notification, a challenge, or response to a challenge
// if notification, commitment is the same than in the message
// if challenge or response, commitment is H(commitment | b_scan), b_scan being different depending on who we are
if let Some(message) = messages if let Some(message) = messages
.iter() .iter()
.find(|m| m.commitment.as_ref() == Some(&commitment_str)) .find(|m| {
if commitment.is_empty() || m.commitment.is_none() { return false }
match m.status {
CachedMessageStatus::SentWaitingConfirmation => {
// commitment we're looking for is simply what's in the message
m.commitment.as_ref().map(|c| Vec::from_hex(&c).unwrap()).unwrap() == commitment
},
CachedMessageStatus::MustSpendConfirmation | CachedMessageStatus::ReceivedMustConfirm => {
// we compute the potential commitment
let m_commitment = m.commitment.as_ref().map(|c| Vec::from_hex(&c).unwrap()).unwrap();
let mut buf = [0u8;64];
buf[..32].copy_from_slice(&m_commitment);
buf[32..].copy_from_slice(&sp_wallet.get_client().get_scan_key().secret_bytes());
let mut engine = sha256::HashEngine::default();
engine.write_all(&buf).unwrap();
let hash = sha256::Hash::from_engine(engine);
hash.to_byte_array().to_vec() == commitment
},
_ => return false
}
})
{ {
return Ok(message.clone()); return Ok(message.clone());
} else { } else {