pub struct ContractInvokeError {
pub energy_used: Energy,
pub transaction_fee: Amount,
pub trace_elements: Vec<DebugTraceElement>,
pub kind: ContractInvokeErrorKind,
}
Expand description
An error that occurred during a Chain::contract_update
or
Chain::contract_invoke
.
Fields§
§energy_used: Energy
The energy used.
transaction_fee: Amount
The transaction fee. For Chain::contract_update
, this is the amount
charged to the invoker
account.
trace_elements: Vec<DebugTraceElement>
Trace elements that occurred before the contract failed.
kind: ContractInvokeErrorKind
The specific reason for why the invocation failed.
Implementations§
source§impl ContractInvokeError
impl ContractInvokeError
sourcepub fn return_value(&self) -> Option<&[u8]>
pub fn return_value(&self) -> Option<&[u8]>
Try to extract the value returned.
This only returns Some
if the contract rejected on its own.
As opposed to when it runs out of energy, traps, or similar, in which
case there won’t be a return value.
sourcepub fn reject_code(&self) -> Option<i32>
pub fn reject_code(&self) -> Option<i32>
If the contract execution rejected the transaction, this returns the code the contract used to signal the rejection.
sourcepub fn parse_return_value<T: Deserial>(&self) -> ParseResult<T>
pub fn parse_return_value<T: Deserial>(&self) -> ParseResult<T>
Try to extract and parse the value returned into a type that implements
Deserial
.
Returns an error if the return value:
- isn’t present
- see
Self::return_value
for details about when this happens
- see
- is present
- but could not be parsed into
T
- could parse into
T
, but there were leftover bytes
- but could not be parsed into
Trait Implementations§
source§impl Debug for ContractInvokeError
impl Debug for ContractInvokeError
source§impl DebugInfoExt for ContractInvokeError
impl DebugInfoExt for ContractInvokeError
source§fn debug_events(&self) -> Box<dyn Iterator<Item = DebugItem<'_>> + '_>
fn debug_events(&self) -> Box<dyn Iterator<Item = DebugItem<'_>> + '_>
Get an iterator over all the debug traces emitted by the execution.
source§fn print_debug(self, level: DebugOutputKind) -> Self
fn print_debug(self, level: DebugOutputKind) -> Self
Print the desired level of debug information that was recorded.
This function is meant to be used in a method-chaining style.
source§fn print_emitted_events(self) -> Self
fn print_emitted_events(self) -> Self
Print (to stderr) all the events generated by
concordium_dbg!
statements.source§fn host_calls(&self) -> Box<dyn Iterator<Item = HostCallInfo<'_>> + '_>
fn host_calls(&self) -> Box<dyn Iterator<Item = HostCallInfo<'_>> + '_>
Get an iterator over all host calls that have occurred, both in the
remaining trace and in the rolled back part.
source§fn emitted_debug_prints(
&self
) -> Box<dyn Iterator<Item = (ContractAddress, &EmittedDebugStatement)> + '_>
fn emitted_debug_prints( &self ) -> Box<dyn Iterator<Item = (ContractAddress, &EmittedDebugStatement)> + '_>
Get an iterator over all the emitted
concordium_dbg!
events.source§fn host_calls_summary(
&self
) -> BTreeMap<ContractAddress, BTreeMap<HostFunctionV1, (usize, InterpreterEnergy)>>
fn host_calls_summary( &self ) -> BTreeMap<ContractAddress, BTreeMap<HostFunctionV1, (usize, InterpreterEnergy)>>
Get host function calls grouped by contract address that
generated them. The value at each address and host function is the
pair of the number of times the host function was called, and the total
amount of interpreter energy that was used by all the calls.
source§fn host_calls_summary_per_entrypoint(
&self
) -> BTreeMap<(ContractAddress, EntrypointName<'_>), BTreeMap<HostFunctionV1, (usize, InterpreterEnergy)>>
fn host_calls_summary_per_entrypoint( &self ) -> BTreeMap<(ContractAddress, EntrypointName<'_>), BTreeMap<HostFunctionV1, (usize, InterpreterEnergy)>>
Get host function calls grouped by contract address and entrypoint that
generated them. The value at each address and host function is the
pair of the number of times the host function was called, and the total
amount of interpreter energy that was used by all the calls.
source§impl Display for ContractInvokeError
impl Display for ContractInvokeError
source§impl Error for ContractInvokeError
impl Error for ContractInvokeError
1.30.0 · source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
The lower-level source of this error, if any. Read more
1.0.0 · source§fn description(&self) -> &str
fn description(&self) -> &str
👎Deprecated since 1.42.0: use the Display impl or to_string()
Auto Trait Implementations§
impl Freeze for ContractInvokeError
impl RefUnwindSafe for ContractInvokeError
impl Send for ContractInvokeError
impl Sync for ContractInvokeError
impl Unpin for ContractInvokeError
impl UnwindSafe for ContractInvokeError
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> FmtForward for T
impl<T> FmtForward for T
source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
Causes
self
to use its Binary
implementation when Debug
-formatted.source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
Causes
self
to use its Display
implementation when
Debug
-formatted.source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
Causes
self
to use its LowerExp
implementation when
Debug
-formatted.source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
Causes
self
to use its LowerHex
implementation when
Debug
-formatted.source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
Causes
self
to use its Octal
implementation when Debug
-formatted.source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
Causes
self
to use its Pointer
implementation when
Debug
-formatted.source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
Causes
self
to use its UpperExp
implementation when
Debug
-formatted.source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
Causes
self
to use its UpperHex
implementation when
Debug
-formatted.source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T
in a tonic::Request
source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Pipes by value. This is generally the method you want to use. Read more
source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
Borrows
self
and passes that borrow into the pipe function. Read moresource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
Mutably borrows
self
and passes that borrow into the pipe function. Read moresource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> R
source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
Borrows
self
, then passes self.as_ref()
into the pipe function.source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
Mutably borrows
self
, then passes self.as_mut()
into the pipe
function.source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
Borrows
self
, then passes self.deref()
into the pipe function.source§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<T> Tap for T
impl<T> Tap for T
source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Immutable access to the
Borrow<B>
of a value. Read moresource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
Mutable access to the
BorrowMut<B>
of a value. Read moresource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
Immutable access to the
AsRef<R>
view of a value. Read moresource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
Mutable access to the
AsMut<R>
view of a value. Read moresource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Immutable access to the
Deref::Target
of a value. Read moresource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Mutable access to the
Deref::Target
of a value. Read moresource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
Calls
.tap()
only in debug builds, and is erased in release builds.source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
Calls
.tap_mut()
only in debug builds, and is erased in release
builds.source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
Calls
.tap_borrow()
only in debug builds, and is erased in release
builds.source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
Calls
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
Calls
.tap_ref()
only in debug builds, and is erased in release
builds.source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
Calls
.tap_ref_mut()
only in debug builds, and is erased in release
builds.source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
Calls
.tap_deref()
only in debug builds, and is erased in release
builds.