Build an Arbitrum Outbox proof for the intended withdrawal leaf

An L2 transaction can produce several child-to-parent messages. The transaction index within the child block is not the Merkle leaf position used to execute an Outbox message.

Capture the send position from the child event

Find the ArbSys L2ToL1Tx event for the intended message and record its position, sender, destination, value and data. Choose a confirmed send root on the parent whose tree covers that position. Use the child node’s proof facility with the corresponding tree size and leaf index.

child L2ToL1Tx event → message position i
confirmed send root   → proof for leaf i

If a child transaction emitted message positions 18 and 19, a proof for leaf 18 cannot authorize the parameters of message 19. Recompute the leaf with the protocol’s fields and match the root before submitting an Outbox execution.

Check execution and confirmation state

An assertion covering the message must be confirmed before normal parent execution. Check whether the chosen output index has already been spent on the parent. Providing a different relayer account does not permit executing the same withdrawal twice. docs.arbitrum.io Arbitrum documentation