pub struct ContractInvokeSuccess {
pub trace_elements: Vec<DebugTraceElement>,
pub energy_used: Energy,
pub transaction_fee: Amount,
pub return_value: ReturnValue,
pub state_changed: bool,
pub new_balance: Amount,
}
Expand description
Represents a successful contract update (or invocation).
Fields§
§trace_elements: Vec<DebugTraceElement>
Host events that occurred. This includes interrupts, resumes, and upgrades.
energy_used: Energy
Energy used.
transaction_fee: Amount
Cost of transaction.
return_value: ReturnValue
The returned value.
state_changed: bool
Whether the state of the invoked contract was changed.
new_balance: Amount
The new balance of the smart contract.
Implementations§
source§impl ContractInvokeSuccess
impl ContractInvokeSuccess
sourcepub fn events(
&self
) -> impl Iterator<Item = (ContractAddress, &[ContractEvent])>
pub fn events( &self ) -> impl Iterator<Item = (ContractAddress, &[ContractEvent])>
Extract all the events logged by all the contracts in the invocation. The events are returned in the order that they are emitted, and are paired with the address of the contract that emitted it.
Only events from effective trace elements are included. See
Self::effective_trace_elements
for more details.
sourcepub fn account_transfers(
&self
) -> impl Iterator<Item = (ContractAddress, Amount, AccountAddress)> + '_
pub fn account_transfers( &self ) -> impl Iterator<Item = (ContractAddress, Amount, AccountAddress)> + '_
Extract the transfers to accounts that occurred during
invocation. The return value is an iterator over triples (from, amount, to)
where from
is the sender contract, and to
is the receiver
account. The transfers are returned in the order that they occurred.
Only tranfers from effective trace elements are included. See
Self::effective_trace_elements
for more details.
sourcepub fn effective_trace_elements(
&self
) -> impl Iterator<Item = &ContractTraceElement>
pub fn effective_trace_elements( &self ) -> impl Iterator<Item = &ContractTraceElement>
Get an iterator over references of all the ContractTraceElement
s
that have not been rolled back.
The trace elements returned here corresponds to the ones returned by the node.
See also Self::effective_trace_elements_cloned
for a version with
clones.
sourcepub fn effective_trace_elements_cloned(&self) -> Vec<ContractTraceElement>
pub fn effective_trace_elements_cloned(&self) -> Vec<ContractTraceElement>
Get an iterator over clones of all the ContractTraceElement
s that
have not been rolled back.
The trace elements returned here corresponds to the ones returned by the node.
See also Self::effective_trace_elements
for a version with
references.
sourcepub fn trace_elements(
&self
) -> BTreeMap<ContractAddress, Vec<ContractTraceElement>>
pub fn trace_elements( &self ) -> BTreeMap<ContractAddress, Vec<ContractTraceElement>>
Get the successful trace elements grouped by which contract they originated from.
sourcepub fn updates(&self) -> impl Iterator<Item = &InstanceUpdatedEvent>
pub fn updates(&self) -> impl Iterator<Item = &InstanceUpdatedEvent>
Get the successful contract updates that happened in the transaction. The order is the order of returns. Concretely, if A calls B (and no other calls are made) then first there will be “B updated” event, followed by “A updated”, assuming the invocation of both succeeded.
sourcepub fn rollbacks_occurred(&self) -> bool
pub fn rollbacks_occurred(&self) -> bool
Check whether any rollbacks occurred.
That is, whether any contract calls failed which lead to state and balances being rolled back.
If true
is returned, the relevant traces can be seen in the
self.trace_elements
vector.
sourcepub fn parse_return_value<T: Deserial>(&self) -> ParseResult<T>
pub fn parse_return_value<T: Deserial>(&self) -> ParseResult<T>
Try to parse the return value into a type that implements Deserial
.
Ensures that all bytes of the return value are read.
Trait Implementations§
source§impl Debug for ContractInvokeSuccess
impl Debug for ContractInvokeSuccess
source§impl DebugInfoExt for ContractInvokeSuccess
impl DebugInfoExt for ContractInvokeSuccess
source§fn debug_events(&self) -> Box<dyn Iterator<Item = DebugItem<'_>> + '_>
fn debug_events(&self) -> Box<dyn Iterator<Item = DebugItem<'_>> + '_>
source§fn print_debug(self, level: DebugOutputKind) -> Self
fn print_debug(self, level: DebugOutputKind) -> Self
source§fn print_emitted_events(self) -> Self
fn print_emitted_events(self) -> Self
concordium_dbg!
statements.source§fn host_calls(&self) -> Box<dyn Iterator<Item = HostCallInfo<'_>> + '_>
fn host_calls(&self) -> Box<dyn Iterator<Item = HostCallInfo<'_>> + '_>
source§fn emitted_debug_prints(
&self
) -> Box<dyn Iterator<Item = (ContractAddress, &EmittedDebugStatement)> + '_>
fn emitted_debug_prints( &self ) -> Box<dyn Iterator<Item = (ContractAddress, &EmittedDebugStatement)> + '_>
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)>>
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)>>
Auto Trait Implementations§
impl Freeze for ContractInvokeSuccess
impl RefUnwindSafe for ContractInvokeSuccess
impl Send for ContractInvokeSuccess
impl Sync for ContractInvokeSuccess
impl Unpin for ContractInvokeSuccess
impl UnwindSafe for ContractInvokeSuccess
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
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,
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,
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,
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,
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,
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,
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,
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,
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>
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,
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,
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,
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
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
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
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
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
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
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
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
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
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
.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
.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
.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
.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
.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
.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
.tap_deref()
only in debug builds, and is erased in release
builds.