mirror of
https://github.com/serai-dex/serai.git
synced 2025-12-11 21:49:26 +00:00
Guaranteed addresses are in fact guaranteed even with this due to prefixing key images causing zeroing the ECDH to not zero the shared key.
82 lines
2.3 KiB
Rust
82 lines
2.3 KiB
Rust
use curve25519_dalek::constants::ED25519_BASEPOINT_POINT;
|
|
|
|
use monero_serai::transaction::Transaction;
|
|
use monero_wallet::{
|
|
rpc::Rpc,
|
|
address::{AddressType, MoneroAddress},
|
|
send::Eventuality,
|
|
};
|
|
|
|
mod runner;
|
|
|
|
test!(
|
|
eventuality,
|
|
(
|
|
|_, mut builder: Builder, _| async move {
|
|
// Add a standard address, a payment ID address, a subaddress, and a guaranteed address
|
|
// Each have their own slight implications to eventualities
|
|
builder.add_payment(
|
|
MoneroAddress::new(
|
|
Network::Mainnet,
|
|
AddressType::Legacy,
|
|
ED25519_BASEPOINT_POINT,
|
|
ED25519_BASEPOINT_POINT,
|
|
),
|
|
1,
|
|
);
|
|
builder.add_payment(
|
|
MoneroAddress::new(
|
|
Network::Mainnet,
|
|
AddressType::LegacyIntegrated([0xaa; 8]),
|
|
ED25519_BASEPOINT_POINT,
|
|
ED25519_BASEPOINT_POINT,
|
|
),
|
|
2,
|
|
);
|
|
builder.add_payment(
|
|
MoneroAddress::new(
|
|
Network::Mainnet,
|
|
AddressType::Subaddress,
|
|
ED25519_BASEPOINT_POINT,
|
|
ED25519_BASEPOINT_POINT,
|
|
),
|
|
3,
|
|
);
|
|
builder.add_payment(
|
|
MoneroAddress::new(
|
|
Network::Mainnet,
|
|
AddressType::Featured { subaddress: false, payment_id: None, guaranteed: true },
|
|
ED25519_BASEPOINT_POINT,
|
|
ED25519_BASEPOINT_POINT,
|
|
),
|
|
4,
|
|
);
|
|
let tx = builder.build().unwrap();
|
|
let eventuality = Eventuality::from(tx.clone());
|
|
assert_eq!(
|
|
eventuality,
|
|
Eventuality::read::<&[u8]>(&mut eventuality.serialize().as_ref()).unwrap()
|
|
);
|
|
(tx, eventuality)
|
|
},
|
|
|_, _, mut tx: Transaction, _, eventuality: Eventuality| async move {
|
|
// 4 explicitly outputs added and one change output
|
|
assert_eq!(tx.prefix().outputs.len(), 5);
|
|
|
|
// The eventuality's available extra should be the actual TX's
|
|
assert_eq!(tx.prefix().extra, eventuality.extra());
|
|
|
|
// The TX should match
|
|
assert!(eventuality.matches(&tx));
|
|
|
|
// Mutate the TX
|
|
let Transaction::V2 { proofs: Some(ref mut proofs), .. } = tx else {
|
|
panic!("TX wasn't RingCT")
|
|
};
|
|
proofs.base.commitments[0] += ED25519_BASEPOINT_POINT;
|
|
// Verify it no longer matches
|
|
assert!(!eventuality.matches(&tx));
|
|
},
|
|
),
|
|
);
|