sui_analytics_indexer/handlers/tables/
transaction_bcs.rs1use std::sync::Arc;
5
6use anyhow::Result;
7use async_trait::async_trait;
8use fastcrypto::encoding::Base64;
9use fastcrypto::encoding::Encoding;
10use sui_indexer_alt_framework::pipeline::Processor;
11use sui_types::base_types::EpochId;
12use sui_types::effects::TransactionEffectsAPI;
13use sui_types::full_checkpoint_content::Checkpoint;
14
15use crate::Row;
16use crate::pipeline::Pipeline;
17use crate::tables::TransactionBCSRow;
18
19pub struct TransactionBCSProcessor;
20
21impl Row for TransactionBCSRow {
22 fn get_epoch(&self) -> EpochId {
23 self.epoch
24 }
25
26 fn get_checkpoint(&self) -> u64 {
27 self.checkpoint
28 }
29}
30
31#[async_trait]
32impl Processor for TransactionBCSProcessor {
33 const NAME: &'static str = Pipeline::TransactionBCS.name();
34 type Value = TransactionBCSRow;
35
36 async fn process(&self, checkpoint: &Arc<Checkpoint>) -> Result<Vec<Self::Value>> {
37 let epoch = checkpoint.summary.data().epoch;
38 let checkpoint_seq = checkpoint.summary.data().sequence_number;
39 let timestamp_ms = checkpoint.summary.data().timestamp_ms;
40
41 let mut entries = Vec::with_capacity(checkpoint.transactions.len());
42
43 for checkpoint_transaction in &checkpoint.transactions {
44 let txn = &checkpoint_transaction.transaction;
45 let transaction_digest = checkpoint_transaction
46 .effects
47 .transaction_digest()
48 .base58_encode();
49
50 entries.push(TransactionBCSRow {
51 transaction_digest,
52 checkpoint: checkpoint_seq,
53 epoch,
54 timestamp_ms,
55 bcs: Base64::encode(bcs::to_bytes(txn)?),
56 });
57 }
58
59 Ok(entries)
60 }
61}