1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
// Copyright 2019-2022 ChainSafe Systems
// SPDX-License-Identifier: Apache-2.0, MIT
use encoding::repr::*;
use num_derive::FromPrimitive;
/// ExitCode defines the exit code from the VM execution.
#[repr(u64)]
#[derive(PartialEq, Eq, Debug, Clone, Copy, FromPrimitive, Serialize_repr, Deserialize_repr)]
pub enum ExitCode {
Ok = 0,
/// Indicates failure to find an actor in the state tree.
SysErrSenderInvalid = 1,
/// Indicates failure to find the code for an actor.
SysErrSenderStateInvalid = 2,
/// Indicates failure to find a method in an actor.
SysErrInvalidMethod = 3,
/// Used for catching panics currently. (marked as unused/SysErrReserved1 in go impl though)
SysErrActorPanic = 4,
/// Indicates a message sender has insufficient funds for a message's execution.
SysErrInvalidReceiver = 5,
/// Indicates a message invocation out of sequence.
SysErrInsufficientFunds = 6,
/// Indicates message execution (including subcalls) used more gas than the specified limit.
SysErrOutOfGas = 7,
/// Indicates a message execution is forbidden for the caller.
SysErrForbidden = 8,
/// Indicates actor code performed a disallowed operation. Disallowed operations include:
/// - mutating state outside of a state acquisition block
/// - failing to invoke caller validation
/// - aborting with a reserved exit code (including success or a system error).
SysErrIllegalActor = 9,
/// Indicates an invalid argument passed to a runtime method.
SysErrIllegalArgument = 10,
/// Reserved exit codes, do not use.
SysErrReserved2 = 11,
SysErrReserved3 = 12,
SysErrReserved4 = 13,
SysErrReserved5 = 14,
SysErrReserved6 = 15,
// -------Actor Error Codes-------
/// Indicates a method parameter is invalid.
ErrIllegalArgument = 16,
/// Indicates a requested resource does not exist.
ErrNotFound = 17,
/// Indicates an action is disallowed.
ErrForbidden = 18,
/// Indicates a balance of funds is insufficient.
ErrInsufficientFunds = 19,
/// Indicates an actor's internal state is invalid.
ErrIllegalState = 20,
/// Indicates de/serialization failure within actor code.
ErrSerialization = 21,
/// Power actor specific exit code.
// * remove this and support custom codes if there is overlap on actor specific codes in future
ErrTooManyProveCommits = 32,
ErrPlaceholder = 1000,
}
impl ExitCode {
/// returns true if the exit code was a success
pub fn is_success(self) -> bool {
matches!(self, ExitCode::Ok)
}
}