Continuous Execution

Learn how Continuous Execution (ACP-194) decouples consensus from execution to achieve higher throughput and lower latency.

Continuous Execution (formerly known as Streaming Asynchronous Execution, or SAE) is a fundamental architectural change that decouples consensus from execution. By allowing these two critical processes to run concurrently, AvalancheGo can achieve significantly higher throughput without sacrificing security guarantees.

Specification: Continuous Execution is defined in ACP-194. The reference implementation is vms/saevm in AvalancheGo. Continuous Execution became active on the C-Chain with the Helicon upgrade: on Fuji on July 28, 2026, and on Mainnet on September 22, 2026, both at 15:00 UTC. It does not run on Subnet-EVM L1s.

Summary

In traditional synchronous execution, a block must be fully executed before it can be accepted by consensus. Continuous Execution introduces a queue upon which consensus is performed, with a concurrent execution stream responsible for clearing the queue and reporting state roots to later consensus rounds.

Key benefits:

  • Concurrent processing: Consensus and execution no longer block each other
  • Reduced latency: Blocks are accepted faster
  • Bursty throughput: Transactions can be eagerly accepted
  • Future features: Enables encrypted mempools and real-time VRF

The Problem with Synchronous Execution

In synchronous execution models, the block lifecycle is tightly coupled:

This creates several bottlenecks:

  1. Context switching: Nodes constantly switch between consensus and execution work
  2. Latency accumulation: Execution time directly adds to block acceptance time
  3. Resource contention: CPU-intensive execution competes with network-intensive consensus
  4. Stop-the-world events: Database compaction or GC pauses affect both consensus and execution

How Continuous Execution Works

Continuous Execution separates the block lifecycle into distinct phases:

Block Lifecycle

PhaseDescription
ProposedBlock builder creates a block with transactions
ValidatedValidators check that transactions can eventually be paid for
AcceptedBlock is accepted by consensus and enqueued for execution
ExecutedBlock is executed by the concurrent execution stream
SettledExecution results are recorded in a later block

Lightweight Validation

Before accepting a block, validators perform lightweight validation to ensure all transactions can eventually be executed. This validation:

  • Checks sender balances against worst-case bounds
  • Verifies the maximum required base fee
  • Does not execute transactions or compute state

Note

The worst-case bounds guarantee that transactions can pay for their fees, but do not guarantee that transactions won't revert or run out of gas during execution.

The Execution Queue

Once accepted, blocks enter a FIFO execution queue:

The block executor runs in parallel with consensus, constantly processing blocks from the queue.

Settlement

Executed blocks are settled when a later block includes their execution results. The settlement includes:

  • State root: The root hash after executing the block
  • Receipt root: Merkle root of all receipts since last settlement

A constant time delay (τ\tau seconds) ensures that sporadic execution slowdowns are amortized.

Technical Specification

Gas Charging

Continuous Execution introduces a new gas charging formula that accounts for the gas limit:

gC:=max⁡(gU,gL/λ)g_C := \max(g_U, g_L / \lambda)

Where:

  • gCg_C = gas charged
  • gUg_U = gas used
  • gLg_L = gas limit
  • λ\lambda = limit factor (enforces minimum charge based on limit)

This prevents transactions from reserving large gas limits without paying proportionally.

Block Size Limits

The maximum block size is constrained by the settlement delay:

ωB:=R⋅τ⋅λ\omega_B := R \cdot \tau \cdot \lambda

Where:

  • ωB\omega_B = maximum block size (gas)
  • RR = gas capacity per second
  • τ\tau = settlement delay
  • λ\lambda = limit factor

Queue Size Limits

The execution queue has a maximum size to prevent unbounded growth:

ωQ:=2⋅ωB\omega_Q := 2 \cdot \omega_B

A block is invalid if the queue already holds more than ωQ\omega_Q gas when the block is enqueued. The new block itself can take the queue above ωQ\omega_Q.

Performance Implications

Concurrent Execution Streams

The primary benefit is that "VM time" more closely aligns with wall time:

TimeSynchronousContinuous Execution
0-2sConsensusConsensus
1-5s-Execution (overlapping)
2-4sExecutionConsensus
3-7s-Execution (overlapping)
4-6sConsensus-
6-8sExecution-

In synchronous mode, consensus and execution alternate. In Continuous Execution, they overlap, increasing throughput.

Lean Execution Clients

Continuous Execution enables specialized execution-only clients that can:

  • Rapidly execute the agreed-upon queue
  • Skip expensive Merkle data structure computation
  • Provide accelerated receipt issuance

This is valuable for:

  • High-frequency trading applications
  • Custodial platforms monitoring deposits
  • Indexers tracking specific addresses

Amortized Overhead

Irregular events like database compaction are spread across multiple blocks instead of causing individual block delays.

Future Features

Continuous Execution provides a foundation for additional optimizations:

Encrypted Mempools

By performing execution after consensus sequencing, transactions can remain encrypted until their order is finalized. This reduces:

  • Front-running attacks
  • MEV extraction
  • Transaction censorship

Real-Time VRF

Consensus artifacts become available during execution, enabling:

  • Verifiable random functions during execution
  • Fair on-chain randomness
  • Gaming and lottery applications

Warning

These features are not yet implemented but require Continuous Execution as a prerequisite.

Implementation

saevm

The reference implementation of Continuous Execution is vms/saevm in AvalancheGo. The C-Chain VM, vms/saevm/cchain, is built on it. The StreVM repository is archived, and its code moved to AvalancheGo.

Note

Continuous Execution runs only on the C-Chain. It became active with the Helicon upgrade: on Fuji on July 28, 2026 at 15:00 UTC, and on Mainnet on September 22, 2026 at 15:00 UTC. Subnet-EVM L1s still execute blocks synchronously.

Integration with AvalancheGo

Continuous Execution integrates with AvalancheGo's existing architecture:

Is this guide helpful?