Saving accounts used in json format

This commit is contained in:
godmodegalactus 2023-11-24 13:39:48 +01:00
parent c1a61ab0a6
commit 3ec0a4372d
No known key found for this signature in database
GPG Key ID: 22DA4A30887FDA3C
3 changed files with 19 additions and 14 deletions

View File

@ -9,7 +9,7 @@ CREATE TABLE banking_stage_results.transaction_infos (
cu_requested BIGINT,
prioritization_fees BIGINT,
utc_timestamp TIMESTAMP WITH TIME ZONE NOT NULL,
accounts_used text [],
accounts_used text,
processed_slot BIGINT
);

View File

@ -241,7 +241,7 @@ pub struct PostgresTransactionInfo {
pub cu_requested: Option<i64>,
pub prioritization_fees: Option<i64>,
pub utc_timestamp: DateTime<Utc>,
pub accounts_used: Vec<String>,
pub accounts_used: String,
pub processed_slot: Option<i64>,
}
@ -252,6 +252,12 @@ pub struct TransactionErrorData {
count: usize,
}
#[derive(Serialize, Clone)]
pub struct AccountUsed {
key: String,
writable: bool,
}
impl From<&TransactionInfo> for PostgresTransactionInfo {
fn from(value: &TransactionInfo) -> Self {
let errors = value
@ -266,8 +272,11 @@ impl From<&TransactionInfo> for PostgresTransactionInfo {
let accounts_used = value
.account_used
.iter()
.map(|x| format!("{}({})", x.0, x.1))
.collect();
.map(|(key, writable)| AccountUsed {
key: key.to_string(),
writable: *writable,
})
.collect_vec();
Self {
signature: value.signature.clone(),
errors: serde_json::to_string(&errors).unwrap_or_default(),
@ -277,7 +286,7 @@ impl From<&TransactionInfo> for PostgresTransactionInfo {
first_notification_slot: value.first_notification_slot as i64,
prioritization_fees: value.prioritization_fees.map(|x| x as i64),
utc_timestamp: value.utc_timestamp,
accounts_used,
accounts_used: serde_json::to_string(&accounts_used).unwrap_or_default(),
processed_slot: value.processed_slot.map(|x| x as i64),
}
}

View File

@ -1,6 +1,7 @@
use std::{collections::HashMap, hash::Hash, str::FromStr};
use std::{collections::HashMap, hash::Hash};
use chrono::{DateTime, Utc};
use itertools::Itertools;
use solana_sdk::{
borsh0_10::try_from_slice_unchecked,
compute_budget::{self, ComputeBudgetInstruction},
@ -90,7 +91,7 @@ pub struct TransactionInfo {
pub cu_requested: Option<u64>,
pub prioritization_fees: Option<u64>,
pub utc_timestamp: DateTime<Utc>,
pub account_used: HashMap<Pubkey, char>,
pub account_used: Vec<(String, bool)>,
pub processed_slot: Option<Slot>,
}
@ -116,13 +117,8 @@ impl TransactionInfo {
let account_used = notification
.accounts
.iter()
.map(|x| {
(
Pubkey::from_str(&x.account).unwrap(),
if x.is_writable { 'w' } else { 'r' },
)
})
.collect();
.map(|x| (x.account.clone(), x.is_writable))
.collect_vec();
Self {
signature: notification.signature.clone(),
errors,