From f06ac1142d12a47f8d3d07046cbd6ff0f2fd46ad Mon Sep 17 00:00:00 2001 From: aitbc Date: Tue, 26 May 2026 19:38:58 +0200 Subject: [PATCH] Add genesis block existence check to PoA proposer start() method - Block production now requires a genesis block to exist before starting - Prevents automatic local genesis creation and subsequent chain divergence - Follower nodes without genesis will not produce blocks even if proposer_id is present --- apps/blockchain-node/src/aitbc_chain/consensus/poa.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/apps/blockchain-node/src/aitbc_chain/consensus/poa.py b/apps/blockchain-node/src/aitbc_chain/consensus/poa.py index e617a2c4..522fb2d2 100755 --- a/apps/blockchain-node/src/aitbc_chain/consensus/poa.py +++ b/apps/blockchain-node/src/aitbc_chain/consensus/poa.py @@ -124,6 +124,14 @@ class PoAProposer: if not getattr(settings, "enable_block_production", True): self._logger.info("Block production disabled, skipping PoA proposer loop") return + # Check if genesis block exists before starting proposer loop + with self._session_factory() as session: + genesis = session.exec( + select(Block).where(Block.chain_id == self._config.chain_id).where(Block.height == 0).limit(1) + ).first() + if genesis is None: + self._logger.warning("No genesis block found, skipping PoA proposer loop. Block production requires a genesis block.") + return self._logger.info("Starting PoA proposer loop", extra={"interval": self._config.interval_seconds}) await self._ensure_genesis_block()