Skip to main content

Call Traces

Walnut Call Trace supports three types of calls: CALL, DELEGATE, and FUNCTION. Each represents a specific type of contract interaction on Starknet.

Starknet-specific

This page describes call trace semantics on Starknet. EVM transactions also surface CALL, DELEGATE, and FUNCTION frames in the Walnut debugger, but their meanings differ. EVM call trace semantics are not yet documented.

Frames

Each call item in a Walnut Call Trace is a "Frame." Frames represent the sequence of calls within a transaction.

CALL

CALL represents a regular contract call: a direct interaction between two contracts.

See an example transaction with a CALL frame.

CALL Example

For example, in the screenshot above, the function mint_and_deposit on the Ekubo:Positions contract calls the mint function on the Ekubo:PositionsNFT contract and lets it do the minting. The Ekubo:PositionsNFT contract creates the NFT, updates its own storage, and returns the newly minted token ID (type u64).

DELEGATE

DELEGATE represents a call to a function in a library from another contract class, using the storage of the caller contract. Any state changes made during this call affect the caller's storage, not the callee's (in this case, the library).

See an example transaction with a DELEGATE frame.

DELEGATE Example

For example, in the screenshot above, IExchange.multi_route_swap initiates a sequence of calls to the Realms:LORDS Token contract to query balances (balanceOf) and perform token transfers (transferFrom). A delegate call is then made to the ISwapAdapter class to execute the logic for the swap. Any state changes made during this swap execution affect the storage of the caller contract (IExchange), not the ISwapAdapter contract.

FUNCTION

FUNCTION represents function calls that are internal to a given contract. These calls reveal the internal logic and computations within the contract, which is useful for debugging and auditing.

See an example transaction with a FUNCTION frame.

FUNCTION Example

info

Public explorers typically don't display FUNCTION calls in their Call Trace components because blockchain nodes don't provide this data. Walnut works around this by re-simulating each transaction to reconstruct the full trace, including internal operations, and displays the entire execution flow.