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
16pub 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 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 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}