UpgradesSeptember 14, 2026by
EmpoorioChain Core
EmpoorioChain Core

Snapshot: 102,912 Blocks and Zero Signed Transactions

A snapshot of a network is usually a set of healthy-looking numbers. This one is a single number that was not healthy at all, and the story of what it meant.

The number

102,912. Blocks produced by the EmpoorioChain public testnet, from the 31 August relaunch to 7 September 2026, during which the chain carried zero signed transactions. Aura authored a block every six seconds; GRANDPA finalized them; the inherents (timestamps) went in; and nothing else did. Ever.

Not rejected — never sent

The runtime was not refusing transactions. It accepts signatures correctly, and tests prove it. The problem was upstream: no client knew how to build the envelope.

Runtime 208 introduced two custom signed extensions at the front of the transaction's extra field: CheckPqcPolicy (two bytes when no post-quantum signature is attached) and CheckDormantAccount (zero bytes). Substrate's standard eight follow. A client that does not know about the first one does not fail loudly — it omits it. Every subsequent byte shifts by two. The node decodes garbage and answers with the generic Bad input data provided to validate_transaction.

The format and the live chain were born together in one commit on 4 September (spec 203 → 208). There was never a window in which clients worked and then broke. They had never worked.

The five symptoms

What was seenWhat it was
Zero DIDs registered although register_did is permissionlessNo signed extrinsic was getting in
An AI-reward pool of 300 M DMS with TotalDistributed = 0Same
Staking eras 2–5 with frozen budgets and zero work recordedSame
"The sudo key has no permissions"Same
MetaMask and Hardhat could not send anythingA different bug (SelfContainedCall), confused with this one

For weeks these were tracked as five unrelated problems. The first four were a two-byte offset.

The fix

The envelope was documented byte by byte in FORMATO_DE_EXTRINSECOS.md — every extension, its encoded length, what it contributes to the signed-but-not-sent implicit — and an example transaction was built by hand, submitted, included in a block and moved a balance. Verified against spec 213. Eoonia, the Dart SDK and the Rust SDK now encode it; Polkadot.js does so automatically from metadata.

The snapshot a week later

7 Sep14 Sep
Signed transactions in history0first on 7 Sep; Eoonia's 35/43 native operations verified since
DIDs registered01 (14 Sep)
Real DEX swaps01 (14 Sep, after the treasury account was created)
EVM transactions acceptednone (rejected by the runtime)yes, since runtime 211
Runtime208220

What the snapshot teaches

A chain can look perfectly healthy — blocks, finality, uptime — while being unusable, if the metric you watch is the one the chain produces on its own. The number that should have been on the dashboard from day one was signed transactions per day, and it now is. The general rule the ecosystem drew: a feature is not done until it has executed a real transaction on the live chain. The test suite passed the whole time.

Based on FORMATO_DE_EXTRINSECOS.md (2026-09-07), RED.json and the runtime 211–220 records.

Share this article