use super::{
transaction::{Certificate, NativeScript, PlutusContract, ProposalProcedure, VotingProcedure},
AssetItem, PaymentAddress, TransactionOutput, Withdrawal,
};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Block {
pub hash: String,
pub epoch_no: u64,
pub abs_slot: u64,
pub epoch_slot: u64,
#[serde(skip_serializing_if = "Option::is_none")]
pub block_height: Option<u64>,
pub block_size: u64,
pub block_time: u64,
pub tx_count: u64,
pub vrf_key: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub pool: Option<String>,
pub op_cert_counter: u64,
pub proto_major: u64,
pub proto_minor: u64,
pub parent_hash: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BlockInfo {
pub hash: String,
pub epoch_no: u64,
pub abs_slot: u64,
pub epoch_slot: u64,
#[serde(skip_serializing_if = "Option::is_none")]
pub block_height: Option<u64>,
pub block_size: u64,
pub block_time: u64,
pub tx_count: u64,
pub vrf_key: String,
pub op_cert: String,
pub op_cert_counter: u64,
#[serde(skip_serializing_if = "Option::is_none")]
pub pool: Option<String>,
pub proto_major: u64,
pub proto_minor: u64,
#[serde(skip_serializing_if = "Option::is_none")]
pub total_output: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub total_fees: Option<String>,
pub num_confirmations: u64,
pub parent_hash: String,
pub child_hash: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BlockTransaction {
pub block_hash: String,
pub tx_hash: String,
pub epoch_no: u64,
pub block_height: u64,
pub block_time: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BlockTransactionCbor {
pub tx_hash: String,
pub block_hash: String,
pub block_height: u64,
pub epoch_no: u64,
pub absolute_slot: u64,
pub tx_timestamp: u64,
pub cbor: String,
}
impl Block {
pub fn new(
hash: String,
epoch_no: u64,
abs_slot: u64,
epoch_slot: u64,
block_height: Option<u64>,
block_size: u64,
block_time: u64,
tx_count: u64,
vrf_key: String,
pool: Option<String>,
op_cert_counter: u64,
proto_major: u64,
proto_minor: u64,
parent_hash: String,
) -> Self {
Self {
hash,
epoch_no,
abs_slot,
epoch_slot,
block_height,
block_size,
block_time,
tx_count,
vrf_key,
pool,
op_cert_counter,
proto_major,
proto_minor,
parent_hash,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BlockTxInfo {
pub tx_hash: String,
pub block_hash: String,
pub block_height: u64,
pub epoch_no: u64,
pub epoch_slot: u64,
pub absolute_slot: u64,
pub tx_timestamp: u64,
pub tx_block_index: u64,
pub tx_size: u64,
pub total_output: String,
pub fee: String,
pub treasury_donation: String,
pub deposit: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub invalid_before: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub invalid_after: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub collateral_inputs: Option<Vec<TransactionOutput>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub collateral_output: Option<Vec<TransactionOutput>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reference_inputs: Option<Vec<TransactionOutput>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub inputs: Option<Vec<TransactionOutput>>,
pub outputs: Vec<TransactionOutput>,
#[serde(skip_serializing_if = "Option::is_none")]
pub withdrawals: Option<Vec<Withdrawal>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub assets_minted: Option<Vec<AssetItem>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub certificates: Option<Vec<Certificate>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub native_scripts: Option<Vec<NativeScript>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub plutus_contracts: Option<Vec<PlutusContract>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub voting_procedures: Option<Vec<VotingProcedure>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub proposal_procedures: Option<Vec<ProposalProcedure>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TxOutput {
pub payment_addr: PaymentAddress,
#[serde(skip_serializing_if = "Option::is_none")]
pub stake_addr: Option<String>,
pub tx_hash: String,
pub tx_index: u64,
pub value: String,
}