1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
use crate::{
    chaintypes::HeaderId, testing::data::AddressData, transaction::TransactionSignDataHash,
};
use chain_addr::Kind;

pub use crate::transaction::Witness;

pub fn make_witnesses(
    block0: &HeaderId,
    addresses_data: Vec<&AddressData>,
    transaction_hash: &TransactionSignDataHash,
) -> Vec<Witness> {
    addresses_data
        .iter()
        .map(|x| make_witness(block0, x, transaction_hash))
        .collect()
}

pub fn make_witness(
    block0: &HeaderId,
    addres_data: &AddressData,
    transaction_hash: &TransactionSignDataHash,
) -> Witness {
    match addres_data.address.kind() {
        Kind::Account(_) => Witness::new_account(
            block0,
            transaction_hash,
            addres_data.spending_counter.get_valid_counter(),
            |d| addres_data.private_key().sign(d),
        ),
        _ => Witness::new_utxo(block0, transaction_hash, |d| {
            addres_data.private_key().sign(d)
        }),
    }
}

pub fn make_witness_with_lane(
    block0: &HeaderId,
    addres_data: &AddressData,
    lane: usize,
    transaction_hash: &TransactionSignDataHash,
) -> Witness {
    match addres_data.address.kind() {
        Kind::Account(_) => Witness::new_account(
            block0,
            transaction_hash,
            addres_data.spending_counter_at_lane(lane).unwrap(),
            |d| addres_data.private_key().sign(d),
        ),
        _ => Witness::new_utxo(block0, transaction_hash, |d| {
            addres_data.private_key().sign(d)
        }),
    }
}