dpp/tests/fixtures/
instant_asset_lock_proof_fixture.rs

1use 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
18//3bufpwQjL5qsvuP4fmCKgXJrKG852DDMYfi9J6XKqPAT
19//[198, 23, 40, 120, 58, 93, 0, 165, 27, 49, 4, 117, 107, 204,  67, 46, 164, 216, 230, 135, 201, 92, 31, 155, 62, 131, 211, 177, 139, 175, 163, 237]
20
21pub 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 from_address = Address::p2pkh(&public_key, Network::Testnet);
57    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    // We are going to fund 1 Dash and
63    // assume that input has 100005000
64    // 5000 will be returned back
65
66    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), // 1 Dash
82        script_pubkey: ScriptBuf::new_p2pkh(&one_time_key_hash),
83    };
84
85    let burn_output = TxOut {
86        value: amount.unwrap_or(100000000), // 1 Dash
87        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}