Read native EraVM value transfers without double-counting trace frames

A trace of a value-bearing call on native EraVM can include a system-contract frame that mediates the transfer. Summing call values across every nested frame can count one payment more than once.

Follow the protocol’s value simulation path

Identify the application sender and intended target, then inspect the MsgValueSimulator step. Native EraVM uses system contracts to apply the balance change and invoke the destination with the intended call value. Preserve both the application-level intent and the underlying system frames for debugging.

application call with value → MsgValueSimulator → target call

If a user requests a transfer of five base-token units and the trace shows mediation followed by entry into the target, reconcile the actual balance change before recording two transfers of five. Separate fees and independent nested transfers from this path.

Check outcome and mode

A reverted call can roll back the transfer. Compare receipt status, nested outcomes and state changes at the same execution point. Tracers and EVM-interpreted paths can present frames differently, so do not filter every frame solely by a display name. docs.zksync.io ZKsync documentation