aere-research/aips/AIP-3.md
Aere Network 4a0b48588c Initial public release
Aere Network public source. Everything here can be checked against the live
chain (chain id 2800, https://rpc.aere.network).

Scope note, stated up front rather than buried: consensus on chain 2800 is
classical secp256k1 ECDSA QBFT. The post-quantum work in this repository is at
the signature, precompile, account and transport layers. Nothing here makes the
consensus post-quantum, and no document in it should be read as claiming so.
2026-07-20 01:02:30 +03:00

5.4 KiB

AIP-3: Sub-Second Block Period (500 ms QBFT)

Preamble

Field Value
AIP 3
Title Sub-Second Block Period (500 ms QBFT)
Author AERE Foundation
Type Standards Track
Category Core
Status Final
Created 2026-07-11
Requires None
Ratification Foundation-ratified (pre-decentralization)

Abstract

This AIP documents the mid-chain transition of AERE's block period from one second to 500 milliseconds, performed as a QBFT configuration transition rather than a chain restart, so that all history, state, and validator keys were preserved. It is a retro-filed record of a change that is already live on chain 2800.

Motivation

AERE targets settlement-grade latency. A one-second block period puts a hard floor of about one second on inclusion latency and worst-case finality. Halving the block period to 500 ms roughly halves both, which materially improves the feel of interactive flows (swaps, payments, wallet confirmations) without any change to the EVM or to application code.

The change had to be done without re-genesising the chain. AERE had already been forced through one full re-genesis (genesis-v2 on 2026-05-07), and losing history again was not acceptable. QBFT supports timed configuration transitions, so the block period could be reduced at a scheduled block with continuity of state and validator identity.

Specification

Mechanism

Hyperledger Besu QBFT reads the block period from the genesis QBFT config and supports scheduled overrides via a transitions block. The transition key is xblockperiodmilliseconds (note: milliseconds, not the seconds-based blockperiodseconds used for the initial value). The correct, and easily mis-typed, form is:

{
  "config": {
    "qbft": {
      "blockperiodseconds": 1,
      "transitions": {
        "qbft": [
          { "block": 2138451, "xblockperiodmilliseconds": 500 }
        ]
      }
    }
  }
}

Activation

The 500 ms period activated at block 2,138,451 on chain 2800. Before that block the network produced one-second blocks; from that block onward it produces 500 ms blocks. State, account balances, contract code, and the validator set were unchanged across the transition.

Operational note for fresh nodes

A node synced from genesis against this config applies the transition automatically. A brand-new isolated chain started from a config like this needs --sync-min-peers=1 to begin producing, which is an operational detail of bootstrapping, not part of the consensus rule.

Rationale

A configuration transition was chosen over a re-genesis because it preserves the chain's entire history and, critically, the validator keys and account state. Re-genesis was rejected: it destroys history and forces every integrator to re-point. QBFT's timed transition is purpose-built for exactly this kind of parameter change and avoids a client fork.

500 ms was chosen as a conservative first step below one second. It roughly halves latency while staying comfortably within what a small, low-latency, Foundation-operated validator set can sustain. Going lower (for example 250 ms or 100 ms) is possible in principle but was deliberately not attempted here, because tighter periods increase the rate of missed-proposal rounds and stress peer-to-peer timing, and there is no need to push that limit with the current validator topology.

Backwards Compatibility

None at the application layer. Block time is not part of the EVM; contracts do not observe it directly. Note the second-order effect: any code that assumed a one-second block period to convert block counts to wall-clock time (for example a naive per-block reward constant) is now wrong by 2x. AERE hit exactly this: the original staking contract computed rewards against a hardcoded blocks-per-year constant and under-paid once blocks sped up. That was fixed in AereStakingV2 (0x1D95eF6D17aeAB732dF914Ba2d018c270BC155FC) by moving reward accrual to timestamps, which is block-time-immune. New code MUST use block.timestamp, not block height, for wall-clock math.

Security Considerations

Reducing the block period narrows the timing margin for each consensus round. With the current seven validators under a single operator this is low-risk because network latency between the nodes is small and predictable, and QBFT finalizes within the round among a small set. The honest caveats:

  • Small, single-operator validator set. Sub-second finality here is a property of a seven-node, one-operator topology, not of a large decentralized set. It should not be read as a claim about behavior under a geographically dispersed, independently operated validator set. Reassessing the block period will be part of decentralizing the validator set.
  • No consensus-layer change beyond the parameter. This is a timing parameter, not a new consensus algorithm. It does not alter QBFT's fault tolerance assumptions.

Reference Implementation and On-Chain Deployment

This is a chain-configuration change, so there is no contract address. The authoritative artifacts are the Besu QBFT genesis/config carrying the xblockperiodmilliseconds: 500 transition at block 2,138,451, and the chain history itself: block intervals before 2,138,451 are approximately 1000 ms and after are approximately 500 ms, verifiable via eth_getBlockByNumber timestamp deltas on https://rpc.aere.network. Chain ID is 2800.

Released to the public domain (CC0). No rights reserved.