Native rollups must at some point consume data from L1. The most straightforward example is deposits, but there might be many other use cases.
Then, the question is: How can the native rollup access L1 data in a verifiable way?
Implementing Deposits by Passing Arbitrary L1 Context
tl;dr: The L1 rollup contract constructs l1Context (a subset of L1 state) in memory and passes it to EXECUTE. L2 contracts can read this data and process it in any way.
We add a new argument l1Context to EXECUTE:
// on L1