## Keyboard shortcuts

Press `←` or `→` to navigate between chapters

Press `S` or `/` to search in the book

Press `?` to show this help

Press `Esc` to hide this help

- Auto
- Light
- Dark

# Algorand Specifications

The following section offers a non-normative overview of the Algorand Virtual Machine (AVM). It is meant to complement the AVM [normative specification](https://specs.algorand.co/avm/avm), helping readers and implementers develop a complete, high-level, holistic understanding of how the AVM works.

The following diagram provides an overview of the full AVM architecture.

At a high level, the Algorand Virtual Machine (AVM) architecture is composed of four main components:

1. [Transactions](https://specs.algorand.co/ledger/ledger-transactions), which act as inputs to AVM programs. These include various fields and optional arguments. For _Logic Signatures_, arguments can be provided as byte arrays. This forms the _stateless execution environment_.

2. The [Application Call Context](https://specs.algorand.co/ledger/ledger-applications), which supplies references from the [Ledger](https://specs.algorand.co/ledger/ledger) to any data that must be prefetched (such as Boxes, ASAs, foreign Apps, and Accounts). This defines the _stateful execution_ environment.

3. The [Ledger](https://specs.algorand.co/ledger/ledger) state, which offers global, runtime-accessible information recorded on the Ledger.

4. A _processing_ component, responsible for executing the programs and approving or rejecting their effects on the Ledger.

Together, these components define the _Evaluation Context_, encapsulating everything needed to evaluate a program.

Outside this architecture diagram, an _Assembler_ component compiles programs into executable AVM bytecode.
