dpp/tests/fixtures/
instant_asset_lock_proof_fixture.rs1use std::str::FromStr;
2
3use dashcore::bls_sig_utils::BLSSignature;
4use dashcore::hash_types::CycleHash;
5
6use crate::balances::credits::Duffs;
7use dashcore::secp256k1::rand::thread_rng;
8use dashcore::secp256k1::Secp256k1;
9use dashcore::transaction::special_transaction::asset_lock::AssetLockPayload;
10use dashcore::transaction::special_transaction::TransactionPayload;
11use dashcore::{
12 secp256k1::SecretKey, InstantLock, Network, OutPoint, PrivateKey, ScriptBuf, Transaction, TxIn,
13 TxOut, Txid,
14};
15
16use crate::identity::state_transition::asset_lock_proof::{AssetLockProof, InstantAssetLockProof};
17
18pub fn raw_instant_asset_lock_proof_fixture(
22 one_time_private_key: Option<PrivateKey>,
23 amount: Option<Duffs>,
24) -> InstantAssetLockProof {
25 let transaction = instant_asset_lock_proof_transaction_fixture(one_time_private_key, amount);
26
27 let instant_lock = instant_asset_lock_is_lock_fixture(transaction.txid());
28
29 InstantAssetLockProof::new(instant_lock, transaction, 0)
30}
31
32pub fn instant_asset_lock_proof_fixture(
33 one_time_private_key: Option<PrivateKey>,
34 amount: Option<Duffs>,
35) -> AssetLockProof {
36 let transaction = instant_asset_lock_proof_transaction_fixture(one_time_private_key, amount);
37
38 let instant_lock = instant_asset_lock_is_lock_fixture(transaction.txid());
39
40 let is_lock_proof = InstantAssetLockProof::new(instant_lock, transaction, 0);
41
42 AssetLockProof::Instant(is_lock_proof)
43}
44
45pub fn instant_asset_lock_proof_transaction_fixture(
46 one_time_private_key: Option<PrivateKey>,
47 amount: Option<Duffs>,
48) -> Transaction {
49 let mut rng = thread_rng();
50 let secp = Secp256k1::new();
51
52 let private_key_hex = "cSBnVM4xvxarwGQuAfQFwqDg9k5tErHUHzgWsEfD4zdwUasvqRVY";
53 let private_key = PrivateKey::from_str(private_key_hex).unwrap();
54 let public_key = private_key.public_key(&secp);
55 let public_key_hash = public_key.pubkey_hash();
56 let secret_key = SecretKey::new(&mut rng);
58 let one_time_private_key =
59 one_time_private_key.unwrap_or_else(|| PrivateKey::new(secret_key, Network::Testnet));
60 let one_time_public_key = one_time_private_key.public_key(&secp);
61
62 let input_txid =
67 Txid::from_str("a477af6b2667c29670467e4e0728b685ee07b240235771862318e29ddbe58458").unwrap();
68
69 let input_outpoint = OutPoint::new(input_txid, 0);
70
71 let input = TxIn {
72 previous_output: input_outpoint,
73 script_sig: ScriptBuf::new_p2pkh(&public_key_hash),
74 sequence: 0,
75 witness: Default::default(),
76 };
77
78 let one_time_key_hash = one_time_public_key.pubkey_hash();
79
80 let funding_output = TxOut {
81 value: amount.unwrap_or(100000000), script_pubkey: ScriptBuf::new_p2pkh(&one_time_key_hash),
83 };
84
85 let burn_output = TxOut {
86 value: amount.unwrap_or(100000000), script_pubkey: ScriptBuf::new_op_return(&[]),
88 };
89
90 let change_output = TxOut {
91 value: 5000,
92 script_pubkey: ScriptBuf::new_p2pkh(&public_key_hash),
93 };
94
95 let payload = TransactionPayload::AssetLockPayloadType(AssetLockPayload {
96 version: 0,
97 credit_outputs: vec![funding_output],
98 });
99
100 Transaction {
101 version: 0,
102 lock_time: 0,
103 input: vec![input],
104 output: vec![burn_output, change_output],
105 special_transaction_payload: Some(payload),
106 }
107}
108
109pub fn instant_asset_lock_is_lock_fixture(tx_id: Txid) -> InstantLock {
110 InstantLock {
111 version: 1,
112 inputs: vec![
113 OutPoint { txid: Txid::from_str("6e200d059fb567ba19e92f5c2dcd3dde522fd4e0a50af223752db16158dabb1d").unwrap(), vout: 0 }
114 ],
115 txid: tx_id,
116 cyclehash: CycleHash::from_str("7c30826123d0f29fe4c4a8895d7ba4eb469b1fafa6ad7b23896a1a591766a536").unwrap(),
117 signature: BLSSignature::from_str("8967c46529a967b3822e1ba8a173066296d02593f0f59b3a78a30a7eef9c8a120847729e62e4a32954339286b79fe7590221331cd28d576887a263f45b595d499272f656c3f5176987c976239cac16f972d796ad82931d532102a4f95eec7d80").unwrap(),
118 }
119}