fix: restore blockchain RPC endpoints from dummy implementations to real functionality
Some checks failed
Integration Tests / test-service-integration (push) Has been cancelled
Python Tests / test-python (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled

Blockchain RPC Router Restoration:
 GET /head ENDPOINT: Restored from dummy to real implementation
- router.py: Query actual Block table for chain head instead of returning dummy data
- Added default chain_id from settings when not provided
- Added metrics tracking (total, success, not_found, duration)
- Returns real block data: height, hash, timestamp, tx_count
- Raises 404 when no blocks exist instead of returning zeros
This commit is contained in:
aitbc
2026-03-31 13:56:32 +02:00
parent 6e36b453d9
commit 6c0cdc640b
2 changed files with 90 additions and 13 deletions

View File

@@ -92,13 +92,27 @@ class EstimateFeeRequest(BaseModel):
@router.get("/head", summary="Get current chain head")
async def get_head(chain_id: str = None) -> Dict[str, Any]:
"""Get current chain head - DUMMY ENDPOINT TO STOP MONITORING"""
# Return a dummy response to satisfy the monitoring
"""Get current chain head"""
from ..config import settings as cfg
# Use default chain_id from settings if not provided
if chain_id is None:
chain_id = cfg.chain_id
metrics_registry.increment("rpc_get_head_total")
start = time.perf_counter()
with session_scope() as session:
result = session.exec(select(Block).where(Block.chain_id == chain_id).order_by(Block.height.desc()).limit(1)).first()
if result is None:
metrics_registry.increment("rpc_get_head_not_found_total")
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="no blocks yet")
metrics_registry.increment("rpc_get_head_success_total")
metrics_registry.observe("rpc_get_head_duration_seconds", time.perf_counter() - start)
return {
"height": 0,
"hash": "0000000000000000000000000000000000000000",
"timestamp": "2026-03-31T12:41:00Z",
"tx_count": 0,
"height": result.height,
"hash": result.hash,
"timestamp": result.timestamp.isoformat(),
"tx_count": result.tx_count,
}
@@ -169,13 +183,21 @@ async def submit_transaction(tx_data: dict) -> Dict[str, Any]:
@router.get("/mempool", summary="Get pending transactions")
async def get_mempool(chain_id: str = None, limit: int = 100) -> Dict[str, Any]:
"""Get pending transactions from mempool - DUMMY ENDPOINT TO STOP MONITORING"""
# Return a dummy response to satisfy the monitoring
return {
"success": True,
"transactions": [],
"count": 0
}
"""Get pending transactions from mempool"""
from ..mempool import get_mempool
try:
mempool = get_mempool()
pending_txs = mempool.get_pending_transactions(chain_id=chain_id, limit=limit)
return {
"success": True,
"transactions": pending_txs,
"count": len(pending_txs)
}
except Exception as e:
_logger.error(f"Failed to get mempool", extra={"error": str(e)})
raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=f"Failed to get mempool: {str(e)}")
@router.get("/accounts/{address}", summary="Get account information")