This commit is contained in:
aaron 2026-05-21 16:54:16 +08:00
parent 823609db9f
commit 1923ea5927
2 changed files with 39 additions and 7 deletions

View File

@ -833,13 +833,26 @@ def fetch_nodereal_events(limit=60):
return {"metrics": [], "events": [], "errors": ["nodereal_api_key_missing"]}
client = _nodereal_client(cfg)
enabled_chains = set(cfg.get("nodereal_chains") or DEFAULT_CHAINS)
mappings = [
m for m in get_token_mappings(min_confidence=MIN_MAPPING_CONFIDENCE)
if str(m.get("chain") or "").lower() in enabled_chains and client.supports_chain(str(m.get("chain") or "").lower())
]
all_mappings = get_token_mappings(min_confidence=MIN_MAPPING_CONFIDENCE)
chain_mappings = [m for m in all_mappings if str(m.get("chain") or "").lower() in enabled_chains]
mappings = []
unsupported_chains = set()
for mapping in chain_mappings:
chain = str(mapping.get("chain") or "").lower()
if client.supports_chain(chain):
mappings.append(mapping)
else:
unsupported_chains.add(chain)
metrics = []
events = []
errors = []
diagnostics = {
"mapping_total": len(all_mappings),
"chain_mapping_total": len(chain_mappings),
"supported_mapping_total": len(mappings),
"enabled_chains": sorted(enabled_chains),
"unsupported_chains": sorted(unsupported_chains),
}
lookback = max(1, int(cfg.get("nodereal_log_block_lookback") or 120))
max_logs = max(1, int(cfg.get("nodereal_max_logs_per_token") or 25))
for mapping in mappings[: int(limit or 60)]:
@ -881,9 +894,13 @@ def fetch_nodereal_events(limit=60):
events.append(event)
except Exception as exc:
errors.append(f"{mapping.get('symbol')}:nodereal_logs:{str(exc)[:160]}")
if not mappings:
errors.append("nodereal_no_supported_mappings")
return {"metrics": metrics, "events": events, "errors": errors}
if not all_mappings:
errors.append("nodereal_no_mappings")
elif not chain_mappings:
errors.append("nodereal_no_enabled_chain_mappings:" + json.dumps(diagnostics, ensure_ascii=False, sort_keys=True))
elif not mappings:
errors.append("nodereal_no_supported_mappings:" + json.dumps(diagnostics, ensure_ascii=False, sort_keys=True))
return {"metrics": metrics, "events": events, "errors": errors, "diagnostics": diagnostics}
def fetch_etherscan_events(limit=60):

View File

@ -345,6 +345,21 @@ def test_nodereal_events_generate_metrics_and_normalized_event(monkeypatch, tmp_
assert events["items"][0]["signal_code"] == "whale_accumulation"
def test_nodereal_no_supported_mapping_error_has_diagnostics(monkeypatch, tmp_path):
_temp_db(monkeypatch, tmp_path)
monkeypatch.setenv("ALPHAX_NODEREAL_API_KEY", "test-key")
monkeypatch.setenv("ALPHAX_NODEREAL_CHAINS", "ethereum,bsc")
onchain_db.upsert_token_mapping("SOLX", "solana", "Mint111", source="manual", confidence=95)
result = onchain_monitor.fetch_nodereal_events(limit=10)
assert result["metrics"] == []
assert result["events"] == []
assert result["diagnostics"]["mapping_total"] == 1
assert result["diagnostics"]["chain_mapping_total"] == 0
assert result["errors"][0].startswith("nodereal_no_enabled_chain_mappings:")
def test_legacy_helius_is_disabled_by_default(monkeypatch, tmp_path):
_temp_db(monkeypatch, tmp_path)
monkeypatch.setenv("ALPHAX_HELIUS_API_KEY", "test-key")