Plumb transaction-level rewards (aka "rent debits") into the getTransaction RPC method

This commit is contained in:
Michael Vines
2021-05-26 14:43:15 -07:00
committed by mergify[bot]
parent 7dfc1d9790
commit 9541411c15
17 changed files with 146 additions and 16 deletions

View File

@ -5985,6 +5985,7 @@ pub mod tests {
log_messages: Some(vec![]),
pre_token_balances: Some(vec![]),
post_token_balances: Some(vec![]),
rewards: Some(vec![]),
}
.into();
ledger
@ -6000,6 +6001,7 @@ pub mod tests {
log_messages: Some(vec![]),
pre_token_balances: Some(vec![]),
post_token_balances: Some(vec![]),
rewards: Some(vec![]),
}
.into();
ledger
@ -6015,6 +6017,7 @@ pub mod tests {
log_messages: Some(vec![]),
pre_token_balances: Some(vec![]),
post_token_balances: Some(vec![]),
rewards: Some(vec![]),
}
.into();
ledger
@ -6032,6 +6035,7 @@ pub mod tests {
log_messages: Some(vec![]),
pre_token_balances: Some(vec![]),
post_token_balances: Some(vec![]),
rewards: Some(vec![]),
}),
}
})
@ -6126,6 +6130,7 @@ pub mod tests {
let log_messages_vec = vec![String::from("Test message\n")];
let pre_token_balances_vec = vec![];
let post_token_balances_vec = vec![];
let rewards_vec = vec![];
// result not found
assert!(transaction_status_cf
@ -6149,6 +6154,7 @@ pub mod tests {
log_messages: Some(log_messages_vec.clone()),
pre_token_balances: Some(pre_token_balances_vec.clone()),
post_token_balances: Some(post_token_balances_vec.clone()),
rewards: Some(rewards_vec.clone()),
}
.into();
assert!(transaction_status_cf
@ -6165,6 +6171,7 @@ pub mod tests {
log_messages,
pre_token_balances,
post_token_balances,
rewards,
} = transaction_status_cf
.get_protobuf_or_bincode::<StoredTransactionStatusMeta>((
0,
@ -6183,6 +6190,7 @@ pub mod tests {
assert_eq!(log_messages.unwrap(), log_messages_vec);
assert_eq!(pre_token_balances.unwrap(), pre_token_balances_vec);
assert_eq!(post_token_balances.unwrap(), post_token_balances_vec);
assert_eq!(rewards.unwrap(), rewards_vec);
// insert value
let status = TransactionStatusMeta {
@ -6194,6 +6202,7 @@ pub mod tests {
log_messages: Some(log_messages_vec.clone()),
pre_token_balances: Some(pre_token_balances_vec.clone()),
post_token_balances: Some(post_token_balances_vec.clone()),
rewards: Some(rewards_vec.clone()),
}
.into();
assert!(transaction_status_cf
@ -6210,6 +6219,7 @@ pub mod tests {
log_messages,
pre_token_balances,
post_token_balances,
rewards,
} = transaction_status_cf
.get_protobuf_or_bincode::<StoredTransactionStatusMeta>((
0,
@ -6230,6 +6240,7 @@ pub mod tests {
assert_eq!(log_messages.unwrap(), log_messages_vec);
assert_eq!(pre_token_balances.unwrap(), pre_token_balances_vec);
assert_eq!(post_token_balances.unwrap(), post_token_balances_vec);
assert_eq!(rewards.unwrap(), rewards_vec);
}
Blockstore::destroy(&blockstore_path).expect("Expected successful database destruction");
}
@ -6460,6 +6471,7 @@ pub mod tests {
log_messages: Some(vec![]),
pre_token_balances: Some(vec![]),
post_token_balances: Some(vec![]),
rewards: Some(vec![]),
}
.into();
@ -6661,6 +6673,7 @@ pub mod tests {
let log_messages = Some(vec![String::from("Test message\n")]);
let pre_token_balances = Some(vec![]);
let post_token_balances = Some(vec![]);
let rewards = Some(vec![]);
let signature = transaction.signatures[0];
let status = TransactionStatusMeta {
status: Ok(()),
@ -6671,6 +6684,7 @@ pub mod tests {
log_messages: log_messages.clone(),
pre_token_balances: pre_token_balances.clone(),
post_token_balances: post_token_balances.clone(),
rewards: rewards.clone(),
}
.into();
blockstore
@ -6688,6 +6702,7 @@ pub mod tests {
log_messages,
pre_token_balances,
post_token_balances,
rewards,
}),
}
})
@ -6757,6 +6772,7 @@ pub mod tests {
let log_messages = Some(vec![String::from("Test message\n")]);
let pre_token_balances = Some(vec![]);
let post_token_balances = Some(vec![]);
let rewards = Some(vec![]);
let signature = transaction.signatures[0];
let status = TransactionStatusMeta {
status: Ok(()),
@ -6767,6 +6783,7 @@ pub mod tests {
log_messages: log_messages.clone(),
pre_token_balances: pre_token_balances.clone(),
post_token_balances: post_token_balances.clone(),
rewards: rewards.clone(),
}
.into();
blockstore
@ -6784,6 +6801,7 @@ pub mod tests {
log_messages,
pre_token_balances,
post_token_balances,
rewards,
}),
}
})
@ -7511,6 +7529,7 @@ pub mod tests {
log_messages: Some(vec![]),
pre_token_balances: Some(vec![]),
post_token_balances: Some(vec![]),
rewards: Some(vec![]),
}
.into();
transaction_status_cf
@ -8045,6 +8064,12 @@ pub mod tests {
ui_amount_string: "1.1".to_string(),
},
}]),
rewards: Some(vec![Reward {
pubkey: "My11111111111111111111111111111111111111111".to_string(),
lamports: -42,
post_balance: 42,
reward_type: Some(RewardType::Rent),
}]),
};
let deprecated_status: StoredTransactionStatusMeta = status.clone().into();
let protobuf_status: generated::TransactionStatusMeta = status.into();

View File

@ -18,7 +18,7 @@ use solana_rayon_threadlimit::get_thread_count;
use solana_runtime::{
accounts_index::AccountSecondaryIndexes,
bank::{
Bank, ExecuteTimings, InnerInstructionsList, TransactionBalancesSet,
Bank, ExecuteTimings, InnerInstructionsList, RentDebits, TransactionBalancesSet,
TransactionExecutionResult, TransactionLogMessages, TransactionResults,
},
bank_forks::BankForks,
@ -130,6 +130,7 @@ fn execute_batch(
let TransactionResults {
fee_collection_results,
execution_results,
rent_debits,
..
} = tx_results;
@ -152,6 +153,7 @@ fn execute_batch(
token_balances,
inner_instructions,
transaction_logs,
rent_debits,
);
}
@ -1164,6 +1166,7 @@ pub struct TransactionStatusBatch {
pub token_balances: TransactionTokenBalancesSet,
pub inner_instructions: Option<Vec<Option<InnerInstructionsList>>>,
pub transaction_logs: Option<Vec<TransactionLogMessages>>,
pub rent_debits: Vec<RentDebits>,
}
#[derive(Clone)]
@ -1182,6 +1185,7 @@ impl TransactionStatusSender {
token_balances: TransactionTokenBalancesSet,
inner_instructions: Vec<Option<InnerInstructionsList>>,
transaction_logs: Vec<TransactionLogMessages>,
rent_debits: Vec<RentDebits>,
) {
let slot = bank.slot();
let (inner_instructions, transaction_logs) = if !self.enable_cpi_and_log_storage {
@ -1199,6 +1203,7 @@ impl TransactionStatusSender {
token_balances,
inner_instructions,
transaction_logs,
rent_debits,
}))
{
trace!(