tx-status: Don't assume a memo instruction succeeded
This commit is contained in:
parent
70d75ce4e8
commit
7babf28ef7
|
@ -101,7 +101,7 @@ pub fn parse(
|
||||||
ParsableProgram::SplAssociatedTokenAccount => {
|
ParsableProgram::SplAssociatedTokenAccount => {
|
||||||
serde_json::to_value(parse_associated_token(instruction, account_keys)?)?
|
serde_json::to_value(parse_associated_token(instruction, account_keys)?)?
|
||||||
}
|
}
|
||||||
ParsableProgram::SplMemo => parse_memo(instruction),
|
ParsableProgram::SplMemo => parse_memo(instruction)?,
|
||||||
ParsableProgram::SplToken => serde_json::to_value(parse_token(instruction, account_keys)?)?,
|
ParsableProgram::SplToken => serde_json::to_value(parse_token(instruction, account_keys)?)?,
|
||||||
ParsableProgram::BpfLoader => {
|
ParsableProgram::BpfLoader => {
|
||||||
serde_json::to_value(parse_bpf_loader(instruction, account_keys)?)?
|
serde_json::to_value(parse_bpf_loader(instruction, account_keys)?)?
|
||||||
|
@ -120,8 +120,10 @@ pub fn parse(
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse_memo(instruction: &CompiledInstruction) -> Value {
|
fn parse_memo(instruction: &CompiledInstruction) -> Result<Value, ParseInstructionError> {
|
||||||
Value::String(from_utf8(&instruction.data).unwrap().to_string())
|
from_utf8(&instruction.data)
|
||||||
|
.map(|s| Value::String(s.to_string()))
|
||||||
|
.map_err(|_| ParseInstructionError::InstructionNotParsable(ParsableProgram::SplMemo))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn check_num_accounts(
|
pub(crate) fn check_num_accounts(
|
||||||
|
@ -170,4 +172,27 @@ mod test {
|
||||||
let non_parsable_program_id = Pubkey::new(&[1; 32]);
|
let non_parsable_program_id = Pubkey::new(&[1; 32]);
|
||||||
assert!(parse(&non_parsable_program_id, &memo_instruction, &[]).is_err());
|
assert!(parse(&non_parsable_program_id, &memo_instruction, &[]).is_err());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_parse_memo() {
|
||||||
|
let good_memo = "good memo".to_string();
|
||||||
|
assert_eq!(
|
||||||
|
parse_memo(&CompiledInstruction {
|
||||||
|
program_id_index: 0,
|
||||||
|
accounts: vec![],
|
||||||
|
data: good_memo.as_bytes().to_vec(),
|
||||||
|
})
|
||||||
|
.unwrap(),
|
||||||
|
Value::String(good_memo),
|
||||||
|
);
|
||||||
|
|
||||||
|
let bad_memo = vec![128u8];
|
||||||
|
assert!(std::str::from_utf8(&bad_memo).is_err());
|
||||||
|
assert!(parse_memo(&CompiledInstruction {
|
||||||
|
program_id_index: 0,
|
||||||
|
data: bad_memo,
|
||||||
|
accounts: vec![],
|
||||||
|
})
|
||||||
|
.is_err(),);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue