|
|
|
@ -1,4 +1,7 @@
|
|
|
|
|
use curve25519_dalek::scalar::Scalar;
|
|
|
|
|
use monero::{Address, Network, PrivateKey, PublicKey};
|
|
|
|
|
use monero_harness::Monero;
|
|
|
|
|
use rand::rngs::OsRng;
|
|
|
|
|
use spectral::prelude::*;
|
|
|
|
|
use testcontainers::clients::Cli;
|
|
|
|
|
|
|
|
|
@ -61,3 +64,51 @@ async fn fund_transfer_and_check_tx_key() {
|
|
|
|
|
|
|
|
|
|
assert_that!(res.received).is_equal_to(send_to_bob);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[tokio::test]
|
|
|
|
|
async fn load_watch_only_wallet() {
|
|
|
|
|
let tc = Cli::default();
|
|
|
|
|
let (monero, _containers) = Monero::new(&tc, None, vec!["watch-only".into()])
|
|
|
|
|
.await
|
|
|
|
|
.unwrap();
|
|
|
|
|
let miner_wallet = monero.wallet("miner").unwrap();
|
|
|
|
|
|
|
|
|
|
let (_spend_sk, spend_pk) = {
|
|
|
|
|
let scalar = Scalar::random(&mut OsRng);
|
|
|
|
|
let sk = PrivateKey::from_scalar(scalar);
|
|
|
|
|
let pk = PublicKey::from_private_key(&sk);
|
|
|
|
|
|
|
|
|
|
(sk, pk)
|
|
|
|
|
};
|
|
|
|
|
let (view_sk, view_pk) = {
|
|
|
|
|
let scalar = Scalar::random(&mut OsRng);
|
|
|
|
|
let sk = PrivateKey::from_scalar(scalar);
|
|
|
|
|
let pk = PublicKey::from_private_key(&sk);
|
|
|
|
|
|
|
|
|
|
(sk, pk)
|
|
|
|
|
};
|
|
|
|
|
let address = Address::standard(Network::Mainnet, spend_pk, view_pk);
|
|
|
|
|
|
|
|
|
|
let one_xmr = 1_000_000_000_000;
|
|
|
|
|
|
|
|
|
|
monero.init(Vec::new()).await.unwrap();
|
|
|
|
|
|
|
|
|
|
miner_wallet
|
|
|
|
|
.client()
|
|
|
|
|
.transfer(0, one_xmr, &address.to_string())
|
|
|
|
|
.await
|
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
|
|
let watch_only_wallet = monero.wallet("watch-only").unwrap();
|
|
|
|
|
|
|
|
|
|
watch_only_wallet
|
|
|
|
|
.client()
|
|
|
|
|
.generate_from_keys(&address.to_string(), None, &view_sk.to_string())
|
|
|
|
|
.await
|
|
|
|
|
.unwrap();
|
|
|
|
|
watch_only_wallet.client().refresh().await.unwrap();
|
|
|
|
|
|
|
|
|
|
let balance = watch_only_wallet.client().get_balance(0).await.unwrap();
|
|
|
|
|
|
|
|
|
|
assert_eq!(balance, one_xmr);
|
|
|
|
|
}
|
|
|
|
|