From a2cbffd26b4ee45ca1efe5660986cbf225b1a02c Mon Sep 17 00:00:00 2001 From: Chris Grady <17553614+CGFixIT@users.noreply.github.com> Date: Mon, 13 Jul 2026 01:22:57 -0400 Subject: [PATCH] fix: refuse unsupported CLOB V1 live startup --- polymarket_copier/main.py | 39 +++---------------------------------- tests/test_main.py | 41 +++++---------------------------------- 2 files changed, 8 insertions(+), 72 deletions(-) diff --git a/polymarket_copier/main.py b/polymarket_copier/main.py index d3482ea..06b88bd 100644 --- a/polymarket_copier/main.py +++ b/polymarket_copier/main.py @@ -4,7 +4,6 @@ import argparse import asyncio -import logging import signal import sys import time @@ -21,7 +20,7 @@ from polymarket_copier.core.portfolio import PortfolioManager from polymarket_copier.core.risk_manager import RiskConfig, RiskManager from polymarket_copier.core.tracker import TrackerClient, TrackerConfig -from polymarket_copier.utils.logger import log_event, setup_logger +from polymarket_copier.utils.logger import setup_logger POLYMARKET_GEOBLOCK_URL = "https://polymarket.com/api/geoblock" @@ -88,43 +87,13 @@ async def _enforce_live_geoblock_preflight(config, session: aiohttp.ClientSessio logger.info("Polymarket geoblock preflight passed for %s%s", country, f"-{region}" if region else "") -def _log_live_mode_readiness_warning(config, logger) -> None: - """Emit a structured startup warning for the current live-mode auth path.""" - if config.mode != "live": - return - - creds = [config.api_key, config.api_secret, config.api_passphrase] - if all(creds): - api_credentials = "provided" - elif any(creds): - api_credentials = "partial" - else: - api_credentials = "derived" - - log_event( - logger, - "live_mode_readiness_warning", - level=logging.WARNING, - msg=( - "Live mode is still experimental: this repo uses py-clob-client while current " - "official docs center py-clob-client-v2 and deposit-wallet signature_type=3 for " - "new API users; startup success is not legal or profitability clearance" - ), - client_sdk="py-clob-client", - docs_sdk="py-clob-client-v2", - docs_recommend_signature_type=3, - signature_type=config.signature_type, - funder_configured=bool(config.funder), - api_credentials=api_credentials, - forward_paper_gate_enabled=config.forward_paper_gate_enabled, - ) - - async def run_bot(config_path: Optional[str] = None, mode: Optional[Literal["paper", "live"]] = None) -> None: config = load_config(config_path=config_path) if mode: config.mode = mode validate_live_config(config) + if config.mode == "live": + raise ConfigError("Live mode is disabled: this build uses unsupported Polymarket CLOB V1 orders") logger = setup_logger(level=config.logging.level, log_file=config.logging.file) @@ -184,8 +153,6 @@ async def run_bot(config_path: Optional[str] = None, mode: Optional[Literal["pap await portfolio.close() await shared_session.close() raise - _log_live_mode_readiness_warning(config, logger) - startup_positions = await portfolio.get_open_positions() gamma_client = GammaClient(session=shared_session) diff --git a/tests/test_main.py b/tests/test_main.py index 664d776..57ef7ec 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -2,7 +2,6 @@ from __future__ import annotations -import logging from types import SimpleNamespace import pytest @@ -14,7 +13,6 @@ POLYMARKET_GEOBLOCK_URL, _enforce_live_geoblock_preflight, _install_shutdown_handlers, - _log_live_mode_readiness_warning, enforce_forward_paper_gate, run_bot, ) @@ -132,41 +130,12 @@ def _fake_signal(sig, handler): # noqa: ARG002 assert registered -def test_live_mode_readiness_warning_is_structured(): - calls: list[tuple[int, str, dict]] = [] - - class _Logger: - def log(self, level, msg, *, extra=None): - calls.append((level, msg, extra or {})) - - cfg = AppConfig( - mode="live", - signature_type=3, - funder="0xfunder", - forward_paper_gate_enabled=True, - ) - _log_live_mode_readiness_warning(cfg, _Logger()) - - assert len(calls) == 1 - level, msg, extra = calls[0] - assert level == logging.WARNING - assert "py-clob-client-v2" in msg - assert extra["data"]["event"] == "live_mode_readiness_warning" - assert extra["data"]["signature_type"] == 3 - assert extra["data"]["funder_configured"] is True - assert extra["data"]["api_credentials"] == "derived" - - -def test_live_mode_readiness_warning_skips_paper_mode(): - calls: list[tuple[int, str, dict]] = [] - - class _Logger: - def log(self, level, msg, *, extra=None): - calls.append((level, msg, extra or {})) - - _log_live_mode_readiness_warning(AppConfig(mode="paper"), _Logger()) +@pytest.mark.asyncio +async def test_live_mode_refuses_unsupported_clob_v1(monkeypatch): + monkeypatch.setattr("polymarket_copier.main.load_config", lambda **_: AppConfig(mode="live")) - assert calls == [] + with pytest.raises(ConfigError, match="unsupported Polymarket CLOB V1"): + await run_bot() class TestForwardPaperGate: