Remove unused `InstructionRecorder` and some `SanitizedMessage` methods (#23723)

This commit is contained in:
Justin Starry 2022-03-17 20:25:12 +08:00 committed by GitHub
parent 0eccacbd5b
commit 9ed056424c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 2 additions and 142 deletions

View File

@ -1,32 +0,0 @@
use {
solana_sdk::instruction::CompiledInstruction,
std::{cell::RefCell, rc::Rc},
};
/// Records and compiles cross-program invoked instructions
#[derive(Clone)]
pub struct InstructionRecorder {
records: Vec<Vec<CompiledInstruction>>,
}
impl InstructionRecorder {
pub fn new_ref(instructions_in_message: usize) -> Rc<RefCell<Self>> {
Rc::new(RefCell::new(Self {
records: Vec::with_capacity(instructions_in_message),
}))
}
pub fn deconstruct(self) -> Vec<Vec<CompiledInstruction>> {
self.records
}
pub fn begin_next_recording(&mut self) {
self.records.push(Vec::new());
}
pub fn record_compiled_instruction(&mut self, instruction: CompiledInstruction) {
if let Some(records) = self.records.last_mut() {
records.push(instruction);
}
}
}

View File

@ -1,7 +1,7 @@
use {
crate::{
hash::Hash,
instruction::{CompiledInstruction, Instruction},
instruction::CompiledInstruction,
message::{
legacy::Message as LegacyMessage,
v0::{self, LoadedAddresses},
@ -190,25 +190,6 @@ impl SanitizedMessage {
.saturating_add(usize::from(self.header().num_readonly_unsigned_accounts))
}
fn try_position(&self, key: &Pubkey) -> Option<u8> {
u8::try_from(self.account_keys().iter().position(|k| k == key)?).ok()
}
/// Try to compile an instruction using the account keys in this message.
pub fn try_compile_instruction(&self, ix: &Instruction) -> Option<CompiledInstruction> {
let accounts: Vec<_> = ix
.accounts
.iter()
.map(|account_meta| self.try_position(&account_meta.pubkey))
.collect::<Option<_>>()?;
Some(CompiledInstruction {
program_id_index: self.try_position(&ix.program_id)?,
data: ix.data.clone(),
accounts,
})
}
/// Decompile message instructions without cloning account keys
pub fn decompile_instructions(&self) -> Vec<BorrowedInstruction> {
let account_keys = self.account_keys();
@ -275,13 +256,7 @@ impl SanitizedMessage {
#[cfg(test)]
mod tests {
use {
super::*,
crate::{
instruction::{AccountMeta, Instruction},
message::v0,
},
};
use {super::*, crate::message::v0};
#[test]
fn test_try_from_message() {
@ -361,87 +336,4 @@ mod tests {
assert_eq!(v0_message.num_readonly_accounts(), 3);
}
#[test]
fn test_try_compile_instruction() {
let key0 = Pubkey::new_unique();
let key1 = Pubkey::new_unique();
let key2 = Pubkey::new_unique();
let program_id = Pubkey::new_unique();
let valid_instruction = Instruction {
program_id,
accounts: vec![
AccountMeta::new_readonly(key0, false),
AccountMeta::new_readonly(key1, false),
AccountMeta::new_readonly(key2, false),
],
data: vec![],
};
let invalid_program_id_instruction = Instruction {
program_id: Pubkey::new_unique(),
accounts: vec![
AccountMeta::new_readonly(key0, false),
AccountMeta::new_readonly(key1, false),
AccountMeta::new_readonly(key2, false),
],
data: vec![],
};
let invalid_account_key_instruction = Instruction {
program_id: Pubkey::new_unique(),
accounts: vec![
AccountMeta::new_readonly(key0, false),
AccountMeta::new_readonly(key1, false),
AccountMeta::new_readonly(Pubkey::new_unique(), false),
],
data: vec![],
};
let legacy_message = SanitizedMessage::try_from(LegacyMessage {
header: MessageHeader {
num_required_signatures: 1,
num_readonly_signed_accounts: 0,
num_readonly_unsigned_accounts: 0,
},
account_keys: vec![key0, key1, key2, program_id],
..LegacyMessage::default()
})
.unwrap();
let v0_message = SanitizedMessage::V0(v0::LoadedMessage::new(
v0::Message {
header: MessageHeader {
num_required_signatures: 1,
num_readonly_signed_accounts: 0,
num_readonly_unsigned_accounts: 0,
},
account_keys: vec![key0, key1],
..v0::Message::default()
},
LoadedAddresses {
writable: vec![key2],
readonly: vec![program_id],
},
));
for message in vec![legacy_message, v0_message] {
assert_eq!(
message.try_compile_instruction(&valid_instruction),
Some(CompiledInstruction {
program_id_index: 3,
accounts: vec![0, 1, 2],
data: vec![],
})
);
assert!(message
.try_compile_instruction(&invalid_program_id_instruction)
.is_none());
assert!(message
.try_compile_instruction(&invalid_account_key_instruction)
.is_none());
}
}
}