Add support for BPF program custom errors (#5743)

* Add support for BPF program custom errors

* Rename SOL_SUCCESS -> SUCCESS
This commit is contained in:
Justin Starry
2019-09-06 16:05:01 -07:00
committed by GitHub
parent d3052d094c
commit 81c36699c4
26 changed files with 108 additions and 67 deletions

View File

@@ -20,6 +20,7 @@ use solana_sdk::account::KeyedAccount;
use solana_sdk::instruction::InstructionError;
use solana_sdk::loader_instruction::LoaderInstruction;
use solana_sdk::pubkey::Pubkey;
use std::convert::TryFrom;
use std::io::prelude::*;
use std::io::Error;
use std::mem;
@@ -136,12 +137,18 @@ pub fn process_instruction(
let mut v = serialize_parameters(program_id, params, &data);
match vm.execute_program(v.as_mut_slice(), &[], &[heap_region]) {
Ok(status) => {
if 0 == status {
warn!("BPF program failed: {}", status);
Ok(status) => match u32::try_from(status) {
Ok(status) => {
if status > 0 {
warn!("BPF program failed: {}", status);
return Err(InstructionError::CustomError(status));
}
}
Err(e) => {
warn!("BPF VM encountered invalid status: {}", e);
return Err(InstructionError::GenericError);
}
}
},
Err(e) => {
warn!("BPF VM failed to run program: {}", e);
return Err(InstructionError::GenericError);