diff --git a/crates/wallet/src/test_utils.rs b/crates/wallet/src/test_utils.rs index 050b9fb19..ab18987ab 100644 --- a/crates/wallet/src/test_utils.rs +++ b/crates/wallet/src/test_utils.rs @@ -160,6 +160,13 @@ pub fn get_test_single_sig_cltv() -> &'static str { "wsh(and_v(v:pk(cVpPVruEDdmutPzisEsYvtST1usBR3ntr8pXSyt6D2YYqXRyPcFW),after(100000)))" } +/// `wsh` descriptor with policy `and(pk(A),after(500_000_000))` +/// the parameter passed to miniscript fragment `after` has to equal or grather than 500_000_000 +/// in order to use a lock based on unix time +pub fn get_test_single_sig_cltv_for_specific_time() -> &'static str { + "wsh(and_v(v:pk(cVpPVruEDdmutPzisEsYvtST1usBR3ntr8pXSyt6D2YYqXRyPcFW),after(500000000)))" +} + /// taproot single key descriptor pub fn get_test_tr_single_sig() -> &'static str { "tr(cNJmN3fH9DDbDt131fQNkVakkpzawJBSeybCUNmP1BovpmGQ45xG)" diff --git a/crates/wallet/tests/wallet.rs b/crates/wallet/tests/wallet.rs index 6bfae2ec7..0d41f2533 100644 --- a/crates/wallet/tests/wallet.rs +++ b/crates/wallet/tests/wallet.rs @@ -553,6 +553,21 @@ fn test_create_tx_default_locktime_cltv() { assert_eq!(psbt.unsigned_tx.lock_time.to_consensus_u32(), 100_000); } +#[test] +fn test_create_tx_locktime_cltv_for_specific_time() { + let (mut wallet, _) = get_funded_wallet_single(get_test_single_sig_cltv_for_specific_time()); + let addr = wallet.next_unused_address(KeychainKind::External); + let mut builder = wallet.build_tx(); + builder.add_recipient(addr.script_pubkey(), Amount::from_sat(25_000)); + let mut psbt = builder.finish().unwrap(); + + assert_eq!(psbt.unsigned_tx.lock_time.to_consensus_u32(), 500_000_000); + + let finalized = wallet.sign(&mut psbt, SignOptions::default()).unwrap(); + + assert!(finalized); +} + #[test] fn test_create_tx_custom_locktime() { let (mut wallet, _) = get_funded_wallet_wpkh();