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

# Performance

> Measured throughput and L1 cost of the Sundial L2 node: 1,000 transactions per second sustained, with more than 1.5 million transactions committed.

This page reports what the scalability harness measured on the reference node. Every figure comes from the whitepaper's benchmark runs.

## Method

The harness drives the node through `POST /submit` with a replayable set of one-to-one transfer transactions, at a fixed target rate for a fixed duration, then watches a recovery window.

The harness distinguishes three counts:

* **Enqueued:** accepted onto the ingress queue.
* **Durably accepted:** inserted into the mempool.
* **Committed:** included in a committed block.

## Throughput

The node sustained 1,000 transactions per second for 30 minutes and committed more than 1.5 million transactions, with zero commitment failures and zero merge failures.

Runs made on 27 to 29 May 2026:

| Run | Target TPS | Duration | Accepted tx/s | Committed tx/s | Result |
| - | -: | - | -: | -: | - |
| Step ramp, tier 1 | 200 | 180 s | 205 | 197 | Completed |
| Step ramp, tier 2 | 400 | 180 s | 411 | 375 | Completed |
| Step ramp, tier 3 | 800 | 180 s | 813 | 522 | Completed |
| Sustained 800 | 800 | 30 min | 798 | 718 | Passed |
| Sustained 1,000 | 1,000 | 30 min | 998 | 873 | Passed |
| Warm-up | 100 | 10 min | 99 | 97 | Passed |

* The sustained 800 TPS run committed 1,292,478 transactions. The sustained 1,000 TPS run committed 1,571,744.
* Both had zero commitment failures and zero merge failures.
* Every run ended with an empty mempool and queue after its recovery window.

A run passes when the node stays available, the mempool and queue recover within the recovery window, and commitment and merge failures stay below the configured thresholds.

## L1 cost per block

Each L1 commitment transaction costs a fixed fee, whatever the number of L2 transactions in the block. In these runs that was 229,155 lovelace. So the L1 cost per L2 transaction falls as blocks fill:

| Load | L1 cost per L2 transaction |
| - | -: |
| 100 TPS, small blocks | 944 lovelace |
| 200 TPS | 158 lovelace |
| 400 TPS | 63 lovelace |
| 800 TPS (step ramp) | 17 lovelace |

### Batching

The node can defer a block to fill it. In a paired run at 100 TPS on the same host, batching cut the number of blocks from 508 to 91 for the same transactions. Total L1 commitment fees fell by 82%, at unchanged throughput.

## Where the time goes

A transaction passes through five hops from submission to confirmation:

| Hop | What happens | Timing |
| - | - | - |
| Ingress | `POST /submit` queues the transaction and answers | Under 1 s |
| Queue to mempool | The transaction is decoded, validated and inserted | Cycles of at most 250 ms, in batches of 100 |
| Mempool to block | The next commitment cycle selects it | 500 ms between cycles, plus any batching delay |
| Block to L1 | The commitment is signed and submitted | 1 s between runs, plus L1 inclusion time |
| L1 to confirmation | The block matures and is merged | The maturity period |

The first three hops come before a transaction is in a committed block. Confirmation takes the full maturity period. See [Protocol parameters](https://docs.sundialprotocol.com/reference/parameters.md).

## Reproducing the runs

The harness and the reports of every run are in the [monorepo](https://github.com/sundial-protocol/sundial-monorepo/tree/main/demo/midgard-manager/packages/scalability-harness).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.