> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abs.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Bootloader

> Learn more about the Bootloader that processes all transactions on Abstract.

The bootloader system contract plays several vital roles on Abstract, responsible for:

* Validating all transactions
* Executing all transactions
* Constructing new blocks for the L2

The bootloader processes transactions in batches that it
receives from the [VM](https://docs.zksync.io/build/developer-reference/era-vm) and puts
them all through the flow outlined in the
[transaction flow](/how-abstract-works/native-account-abstraction/transaction-flow) section.

<CardGroup cols={2}>
  <Card title="View the source code for the bootloader" icon="github" href="https://github.com/matter-labs/era-contracts/blob/main/system-contracts/bootloader/bootloader.yul">
    View the source code for each system contract.
  </Card>

  <Card title="ZK Stack Docs - Bootloader" icon="file-contract" href="https://docs.zksync.io/zk-stack/components/zksync-evm/bootloader#bootloader">
    View in-depth documentation on the Bootloader.
  </Card>
</CardGroup>

## Bootloader Execution Flow

1. As the bootloader receives batches of transactions from the VM, it sends the information
   about the current batch to the [SystemContext system contract](/how-abstract-works/system-contracts/list-of-system-contracts#systemcontext)
   before processing each transaction.

2. As each transaction is processed, it goes through the flow outlined
   in the [gas fees](/how-abstract-works/evm-differences/gas-fees) section.

3. At the end of each batch, the bootloader informs the [L1Messenger system contract](/how-abstract-works/system-contracts/list-of-system-contracts#l1messenger)
   for it to begin sending data to Ethereum about the transactions that were processed.

## BootloaderUtilities System Contract

In addition to the bootloader itself, there is an additional
[BootloaderUtilities system contract](https://github.com/matter-labs/era-contracts/blob/main/system-contracts/contracts/BootloaderUtilities.sol)
that provides utility functions for the bootloader to use.

This separation is simply because the bootloader itself is written in [Yul](https://github.com/matter-labs/era-contracts/blob/main/system-contracts/bootloader/bootloader.yul)
whereas the utility functions are written in Solidity.
