whisky_provider/maestro/utils/
transaction_utils.rs

1use crate::maestro::models::transaction::TransactionDetail;
2
3use whisky_common::{models::TransactionInfo, WError};
4
5use super::utxo_utils::to_utxo;
6
7pub fn transaction_detail_to_info(
8    transaction_detail: TransactionDetail,
9) -> Result<TransactionInfo, WError> {
10    let tx_info = TransactionInfo {
11        index: transaction_detail.block_tx_index as u32,
12        block: transaction_detail.block_hash,
13        hash: transaction_detail.tx_hash,
14        slot: transaction_detail.block_absolute_slot.to_string(),
15        fees: transaction_detail.fee.to_string(),
16        size: transaction_detail.size as u32,
17        deposit: transaction_detail.deposit.to_string(),
18        invalid_before: match transaction_detail.invalid_before {
19            Some(i) => i.to_string(),
20            None => "".to_string(),
21        },
22        invalid_after: transaction_detail
23            .invalid_hereafter
24            .unwrap_or(0)
25            .to_string(),
26        inputs: transaction_detail
27            .inputs
28            .iter()
29            .map(to_utxo)
30            .collect::<Result<Vec<_>, _>>()?,
31        outputs: transaction_detail
32            .outputs
33            .iter()
34            .map(to_utxo)
35            .collect::<Result<Vec<_>, _>>()?,
36        block_height: Some(transaction_detail.block_height as u32),
37        block_time: Some(transaction_detail.block_timestamp as u64),
38    };
39    Ok(tx_info)
40}