ark/test/
dummy.rs

1use bitcoin::OutPoint;
2
3use bitcoin::{Amount, TxIn, TxOut, Transaction, Witness, ScriptBuf, Sequence};
4use bitcoin::absolute::LockTime;
5use bitcoin::transaction::Version;
6use bitcoin::secp256k1::Keypair;
7use bitcoin_ext::{BlockHeight, BlockDelta};
8
9use crate::Vtxo;
10use crate::board::BoardBuilder;
11
12#[cfg(test)]
13use crate::SECP;
14
15
16/// Just a utility to write unit tests
17/// It can quickly create a vtxo that matches
18/// some desired parameters
19pub struct DummyTestVtxoSpec {
20	pub amount: Amount,
21	pub expiry_height: BlockHeight,
22	pub exit_delta: BlockDelta,
23	pub user_keypair: Keypair,
24	pub server_keypair: Keypair,
25}
26
27
28impl DummyTestVtxoSpec {
29
30
31	pub fn build(&self) -> (Transaction, Vtxo) {
32		// The board-builder that is used by the user
33		let user_builder = BoardBuilder::new(
34			self.user_keypair.public_key(),
35			self.expiry_height,
36			self.server_keypair.public_key(),
37			self.exit_delta,
38		);
39
40		let funding_tx = Transaction {
41			version: Version(3),
42			lock_time: LockTime::ZERO,
43			input: vec![TxIn {
44				previous_output: OutPoint::null(),
45				script_sig: ScriptBuf::new(),
46				sequence: Sequence::ZERO,
47				witness: Witness::new(),
48			}],
49			output: vec![
50				TxOut {
51					value: self.amount,
52					script_pubkey: user_builder.funding_script_pubkey(),
53				}
54			],
55		};
56
57		let funding_outpoint = OutPoint::new(funding_tx.compute_txid(), 0);
58
59		let user_builder = user_builder
60			.set_funding_details(self.amount, funding_outpoint)
61			.generate_user_nonces();
62
63		let user_pub_nonce = user_builder.user_pub_nonce();
64
65		// The server builder
66		let server_builder = BoardBuilder::new_for_cosign(
67			self.user_keypair.public_key(),
68			self.expiry_height,
69			self.server_keypair.public_key(),
70			self.exit_delta,
71			self.amount,
72			funding_outpoint,
73			*user_pub_nonce,
74		);
75
76		let server_cosign_response = server_builder.server_cosign(&self.server_keypair);
77
78		let vtxo = user_builder.build_vtxo(&server_cosign_response, &self.user_keypair).unwrap();
79		(funding_tx, vtxo)
80	}
81}
82
83#[test]
84fn create_dummy_output() {
85
86	let board = DummyTestVtxoSpec {
87		amount: Amount::from_sat(1000),
88		expiry_height: 100000,
89		exit_delta: 1000,
90		user_keypair: Keypair::new(&SECP, &mut bitcoin::secp256k1::rand::thread_rng()),
91		server_keypair: Keypair::new(&SECP, &mut bitcoin::secp256k1::rand::thread_rng()),
92	};
93
94	board.build();
95}