* SPL token balance in transaction metadata (#13673)
* feat: store pre / post token balances
* move helper functions into separate include
* move token balance functionality to transaction-status crate
* fix blockstore processor test
* fix bigtable legacy test
* add caching to decimals
(cherry picked from commit 13db3eca9f
)
# Conflicts:
# core/src/banking_stage.rs
# storage-proto/Cargo.toml
# storage-proto/src/convert.rs
* resolve merges storage-proto banking_stage
* fix bpf tests with token deltas
Co-authored-by: Josh <josh.hundley@gmail.com>
This commit is contained in:
@@ -36,10 +36,10 @@ use solana_sdk::{
|
||||
transaction::{Transaction, TransactionError},
|
||||
};
|
||||
use solana_transaction_status::{
|
||||
ConfirmedTransaction, InnerInstructions, TransactionStatusMeta, TransactionWithStatusMeta,
|
||||
UiTransactionEncoding,
|
||||
token_balances::collect_token_balances, ConfirmedTransaction, InnerInstructions,
|
||||
TransactionStatusMeta, TransactionWithStatusMeta, UiTransactionEncoding,
|
||||
};
|
||||
use std::{cell::RefCell, env, fs::File, io::Read, path::PathBuf, sync::Arc};
|
||||
use std::{cell::RefCell, collections::HashMap, env, fs::File, io::Read, path::PathBuf, sync::Arc};
|
||||
|
||||
/// BPF program file extension
|
||||
const PLATFORM_FILE_EXTENSION_BPF: &str = "so";
|
||||
@@ -222,6 +222,8 @@ fn process_transaction_and_record_inner(
|
||||
fn execute_transactions(bank: &Bank, txs: &[Transaction]) -> Vec<ConfirmedTransaction> {
|
||||
let batch = bank.prepare_batch(txs, None);
|
||||
let mut timings = ExecuteTimings::default();
|
||||
let mut mint_decimals = HashMap::new();
|
||||
let tx_pre_token_balances = collect_token_balances(&bank, &batch, &mut mint_decimals);
|
||||
let (
|
||||
TransactionResults {
|
||||
execution_results, ..
|
||||
@@ -241,6 +243,7 @@ fn execute_transactions(bank: &Bank, txs: &[Transaction]) -> Vec<ConfirmedTransa
|
||||
true,
|
||||
&mut timings,
|
||||
);
|
||||
let tx_post_token_balances = collect_token_balances(&bank, &batch, &mut mint_decimals);
|
||||
|
||||
for _ in 0..(txs.len() - transaction_logs.len()) {
|
||||
transaction_logs.push(vec![]);
|
||||
@@ -255,6 +258,8 @@ fn execute_transactions(bank: &Bank, txs: &[Transaction]) -> Vec<ConfirmedTransa
|
||||
inner_instructions.into_iter(),
|
||||
pre_balances.into_iter(),
|
||||
post_balances.into_iter(),
|
||||
tx_pre_token_balances.into_iter(),
|
||||
tx_post_token_balances.into_iter(),
|
||||
transaction_logs.into_iter(),
|
||||
)
|
||||
.map(
|
||||
@@ -264,6 +269,8 @@ fn execute_transactions(bank: &Bank, txs: &[Transaction]) -> Vec<ConfirmedTransa
|
||||
inner_instructions,
|
||||
pre_balances,
|
||||
post_balances,
|
||||
pre_token_balances,
|
||||
post_token_balances,
|
||||
log_messages,
|
||||
)| {
|
||||
let fee_calculator = nonce_rollback
|
||||
@@ -289,6 +296,8 @@ fn execute_transactions(bank: &Bank, txs: &[Transaction]) -> Vec<ConfirmedTransa
|
||||
fee,
|
||||
pre_balances,
|
||||
post_balances,
|
||||
pre_token_balances: Some(pre_token_balances),
|
||||
post_token_balances: Some(post_token_balances),
|
||||
inner_instructions,
|
||||
log_messages: Some(log_messages),
|
||||
};
|
||||
|
Reference in New Issue
Block a user