fix: blockchain RPC mapper errors and missing contract stubs

- Fix SQLAlchemy relationship references in base_models.py (models.Transaction -> base_models.Transaction)
- Create contracts_stub.py for when contract_service module is unavailable
- Wire up contracts_stub as fallback in router.py imports
- Blockchain RPC now returns data instead of 503 errors
This commit is contained in:
aitbc
2026-05-25 18:16:38 +02:00
parent e28a192a76
commit 2b0e16267e
3 changed files with 43 additions and 4 deletions

View File

@@ -47,8 +47,8 @@ class Block(SQLModel, table=True):
back_populates="block",
sa_relationship_kwargs={
"lazy": "selectin",
"primaryjoin": "and_(aitbc_chain.models.Transaction.block_height==Block.height, aitbc_chain.models.Transaction.chain_id==Block.chain_id)",
"foreign_keys": "[aitbc_chain.models.Transaction.block_height, aitbc_chain.models.Transaction.chain_id]"
"primaryjoin": "and_(aitbc_chain.base_models.Transaction.block_height==Block.height, aitbc_chain.base_models.Transaction.chain_id==Block.chain_id)",
"foreign_keys": "[aitbc_chain.base_models.Transaction.block_height, aitbc_chain.base_models.Transaction.chain_id]"
}
)
receipts: List["Receipt"] = Relationship(
@@ -108,8 +108,8 @@ class Transaction(SQLModel, table=True):
block: Optional["Block"] = Relationship(
back_populates="transactions",
sa_relationship_kwargs={
"primaryjoin": "and_(aitbc_chain.models.Transaction.block_height==Block.height, aitbc_chain.models.Transaction.chain_id==Block.chain_id)",
"foreign_keys": "[aitbc_chain.models.Transaction.block_height, aitbc_chain.models.Transaction.chain_id]"
"primaryjoin": "and_(aitbc_chain.base_models.Transaction.block_height==Block.height, aitbc_chain.base_models.Transaction.chain_id==Block.chain_id)",
"foreign_keys": "[aitbc_chain.base_models.Transaction.block_height, aitbc_chain.base_models.Transaction.chain_id]"
}
)

View File

@@ -0,0 +1,23 @@
"""Stub contracts module for when contract_service is not available."""
from typing import Any, Dict
from fastapi import Request
async def _stub(request: Request, *args, **kwargs) -> Dict[str, Any]:
return {"error": "Contract service not available", "status": "unavailable"}
deploy_messaging_contract = _stub
list_contracts = _stub
deploy_contract = _stub
call_contract = _stub
verify_contract = _stub
get_messaging_contract_state = _stub
get_forum_topics = _stub
create_forum_topic = _stub
get_topic_messages = _stub
post_message = _stub
vote_message = _stub
search_messages = _stub
get_agent_reputation = _stub
moderate_message = _stub

View File

@@ -111,6 +111,22 @@ try:
)
except ImportError:
_logger.warning("Contracts module not available")
from .contracts_stub import ( # type: ignore[assignment]
deploy_messaging_contract,
list_contracts,
deploy_contract,
call_contract,
verify_contract,
get_messaging_contract_state,
get_forum_topics,
create_forum_topic,
get_topic_messages,
post_message,
vote_message,
search_messages,
get_agent_reputation,
moderate_message,
)
from .sync import (
export_chain,
import_chain,