feat: integrate actual blockchain mining with PoA consensus and fix CLI wallet operations
All checks were successful
CLI Tests / test-cli (push) Successful in 42s
Integration Tests / test-service-integration (push) Successful in 45s
Python Tests / test-python (push) Successful in 1m16s
Security Scanning / security-scan (push) Successful in 1m27s

🔗 Mining Integration:
• Connect mining RPC endpoints to PoA proposer for real block production
• Initialize PoA proposer in app lifespan for mining integration
• Add mining status, start, stop, and stats endpoints with blockchain data
• Track actual block production rate and mining statistics
• Support 1-8 mining threads with proper validation

🔧 PoA Consensus Integration:
• Set global PoA proposer reference for mining operations
• Start
This commit is contained in:
aitbc1
2026-03-29 17:30:04 +02:00
parent 8251853cbd
commit 1e60fd010c
7 changed files with 372 additions and 54 deletions

View File

@@ -14,7 +14,7 @@ from .gossip import create_backend, gossip_broker
from .logger import get_logger
from .mempool import init_mempool
from .metrics import metrics_registry
from .rpc.router import router as rpc_router
from .rpc.router import router as rpc_router, set_poa_proposer
from .rpc.websocket import router as websocket_router
# from .escrow_routes import router as escrow_router # Not yet implemented
@@ -99,6 +99,33 @@ async def lifespan(app: FastAPI):
broadcast_url=settings.gossip_broadcast_url,
)
await gossip_broker.set_backend(backend)
# Initialize PoA proposer for mining integration
if settings.enable_block_production and settings.proposer_id:
try:
from .consensus import PoAProposer, ProposerConfig
proposer_config = ProposerConfig(
chain_id=settings.chain_id,
proposer_id=settings.proposer_id,
interval_seconds=settings.block_time_seconds,
max_block_size_bytes=settings.max_block_size_bytes,
max_txs_per_block=settings.max_txs_per_block,
)
proposer = PoAProposer(config=proposer_config, session_factory=session_scope)
# Set the proposer for mining integration
set_poa_proposer(proposer)
# Start the proposer if block production is enabled
asyncio.create_task(proposer.start())
_app_logger.info("PoA proposer initialized for mining integration", extra={
"proposer_id": settings.proposer_id,
"chain_id": settings.chain_id
})
except Exception as e:
_app_logger.warning(f"Failed to initialize PoA proposer for mining: {e}")
_app_logger.info("Blockchain node started", extra={"supported_chains": settings.supported_chains})
try:
yield