cat_gateway/db/index/block/txo/
insert_txo.rs1use std::sync::Arc;
6
7use cardano_blockchain_types::{Slot, StakeAddress, TransactionId, TxnIndex, TxnOutputOffset};
8use scylla::{SerializeRow, Session};
9use tracing::error;
10
11use crate::{
12 db::{
13 index::queries::{PreparedQueries, SizedBatch},
14 types::{DbSlot, DbStakeAddress, DbTransactionId, DbTxnIndex, DbTxnOutputOffset},
15 },
16 settings::cassandra_db,
17};
18
19const INSERT_TXO_QUERY: &str = include_str!("./cql/insert_txo.cql");
21
22#[derive(SerializeRow, Debug)]
25pub(crate) struct Params {
26 stake_address: DbStakeAddress,
28 slot_no: DbSlot,
30 txn_index: DbTxnIndex,
32 txo: DbTxnOutputOffset,
34 address: String,
36 value: num_bigint::BigInt,
38 txn_hash: DbTransactionId,
40}
41
42impl Params {
43 pub(crate) fn new(
45 stake_address: StakeAddress, slot_no: Slot, txn_index: TxnIndex, txo: TxnOutputOffset,
46 address: &str, value: u64, txn_hash: TransactionId,
47 ) -> Self {
48 Self {
49 stake_address: stake_address.into(),
50 slot_no: slot_no.into(),
51 txn_index: txn_index.into(),
52 txo: txo.into(),
53 address: address.to_string(),
54 value: value.into(),
55 txn_hash: txn_hash.into(),
56 }
57 }
58
59 pub(crate) async fn prepare_batch(
61 session: &Arc<Session>, cfg: &cassandra_db::EnvVars,
62 ) -> anyhow::Result<SizedBatch> {
63 PreparedQueries::prepare_batch(
64 session.clone(),
65 INSERT_TXO_QUERY,
66 cfg,
67 scylla::statement::Consistency::Any,
68 true,
69 false,
70 )
71 .await
72 .inspect_err(|error| error!(error=%error,"Failed to prepare Insert TXO Query."))
73 .map_err(|error| anyhow::anyhow!("{error}\n--\n{INSERT_TXO_QUERY}"))
74 }
75}