# Rollups from appchains to L2s

In this example, we'll use Supersonic, a Bitcoin L2, as the base layer. However, you can use any Bitcoin L2 as a base layer.&#x20;

An application (Bitcoin L3) first rolls up to Supersonic. Then Supersonic itself rolls up to Bitcoin.

Let's zoom in on the architecture below and examine rollup flows step by step.

<figure><img src="https://824077807-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4LrpKdKCJA4rekyqoMPj%2Fuploads%2Fgyd8ukoktSR3oYDNjaED%2Fimage.png?alt=media&#x26;token=ae497086-9237-4031-87a1-79cdf8617fb0" alt=""><figcaption></figcaption></figure>

&#x20;

The steps to do a ZK rollup from a Bitcoin L3 to Supersonic (a Bitcoin L2) are as follows:&#x20;

1. A user submits a transaction to the Bitcoin L3 Sequencer
2. The Bitcoin L3 Sequencer executes the transaction and provides a soft confirmation&#x20;
3. If the user chooses, they can force the Bitcoin L3 Sequencer to include their transaction&#x20;
4. The Bitcoin L3 Sequencer executes the block of transactions and sends it over to the Bitcoin L3 Prover&#x20;
5. The Bitcoin L3 Prover creates a cryptographic proof of the block’s execution and sends it to the smart contract on Supersonic.&#x20;
6. The smart contract verifies that the proof is valid and all the data has been submitted and then updates the rollup’s state in the contract.&#x20;
7. The Bitcoin L3 Sequencer sends the block’s data to one of the Data Availability layers supported by BVM, such as Celestia, Near DA, Polygon, Avail DA, Filecoin, or Eigen DA.
