Polymarket Bot Tutorial · Chapter 6 of 32
Аутентифікація Polymarket bot і налаштування wallet: proxy wallets vs EOA, генерація API key через SDK, sigType 2 для Gnosis Safe, best practices для зберігання key і міграція з Magic на Privy.
Що охоплює ця chapter
Wallet model Polymarket має три складові: externally owned account (EOA), який підписує orders, smart-contract proxy, що зберігає funds, і Polymarket CLOB API key, який аутентифікує HTTP requests. Коректно зв’язати всі три - це найпоширеніша Day 1 помилка для нових builders, і після міграції Magic Labs до Privy в серпні 2025 року це стало ще заплутанішим. У цій chapter ми розберемо кожен елемент у порядку налаштування, разом із конкретними environment variables і signature-type flag, які потрібні production code.
- Proxy wallet vs EOA: з чим botити
- Generating an API key (SDK steps)
- sigType 2 and POLY_FUNDER_ADDRESS (Gnosis Safe)
- Key storage: .env, vault, KMS
- The Magic Labs to Privy migration
- Approving USDC/pUSD spending
- Wallet recovery and backup
Proxy wallet vs EOA: з чим botити
Polymarket використовує pattern smart-contract proxy wallet. Ваш EOA - адреса, прив’язана до вашого private key, - підписує transactions і orders. Gnosis Safe, розгорнутий за детермінованою адресою, зберігає фактичні pUSD і outcome shares. Proxy address - це те, що відображається в панелі "wallet" у UI Polymarket; EOA - це те, що підписує.
Для bot завжди підписуйте через EOA (PRIVATE_KEY в env) і вказуйте proxy address як POLY_FUNDER_ADDRESS у config CLOB client. Надсилання orders із EOA як funder спричиняє помилки "insufficient balance" навіть тоді, коли proxy поповнений.
Botити лише з EOA не можна - web flow Polymarket завжди створює proxy під час signup. Підтвердьте обидві адреси через polymarket wallet show з CLI або прочитайте proxy address у settings UI Polymarket.
Generating an API key (SDK steps)
CLOB API вимагає три credentials: key, secret, passphrase. Це не ваш wallet private key - це набір credentials у стилі HMAC, прив’язаний до вашого wallet, який використовується лише для HTTP request authentication.
Згенеруйте їх один раз за допомогою SDK:
# Python
from py_clob_client.client import ClobClient
c = ClobClient(host="https://clob.polymarket.com", chain_id=137,
key="<PRIVATE_KEY>", signature_type=2,
funder="<PROXY_ADDRESS>")
creds = c.create_or_derive_api_creds()
print(creds.api_key, creds.api_secret, creds.api_passphrase)
Збережіть output у JSON file і завантажуйте його під час кожного запуску bot; не регенеруйте його для кожної session - API server кешує набір credentials, і часта ротація може спровокувати rate-limit logic. Ці credentials не закінчуються автоматично. Ротуйте їх лише якщо підозрюєте leak.
sigType 2 and POLY_FUNDER_ADDRESS (Gnosis Safe)
Аргумент signature_type визначає, як CLOB валідуює ваші order signatures. Існує три значення; два з них реальні:
- 0 / EOA: EOA є і signer, і funder. Використовується для незвичних setups, де користувачі імпортували private key напряму.
- 1 / POLY_PROXY: legacy Magic Labs proxy contract. Більшість accounts до 2025 року.
- 2 / POLY_GNOSIS_SAFE: поточний standard. Funds зберігаються в Gnosis Safe, EOA підписує.
Використовуйте signature_type=2 для будь-якого account, створеного після серпня 2025 року (міграція Privy) або для будь-якого account, де в UI Polymarket видно адресу Gnosis Safe. Env var POLY_FUNDER_ADDRESS має містити адресу Safe, а не EOA. Невідповідність signature_type типу funder тихо спричиняє відхилення orders, які виглядають як "insufficient allowance" або "balance: 0" - повідомлення про помилку вводить в оману.
Key storage: .env, vault, KMS
Три розумні рівні зберігання для EOA private key.
- .env file (single-machine development). File знаходиться на VPS, bot читає його під час запуску, key ніколи не залишає host. Достатньо для wallet менше ніж на <$1k.
chmod 600 .envі переконайтеся, що .gitignore вашого repo виключає його. - Self-hosted vault (HashiCorp Vault, age-encrypted file, або systemd-creds). Додає unlock step під час запуску bot. Варто використовувати для wallet у діапазоні $1k-$10k.
- Cloud KMS (AWS KMS, GCP KMS). Bot звертається до KMS, щоб розшифрувати key в memory; key ніколи не потрапляє на disk. Варто операційної складності лише понад $10k або для multi-bot fleets.
Чого ніколи не робити: не комітити private key у git, не вставляти його в chat, не зберігати його в password manager, який синхронізується з cloud services без local-only mode. On-chain blast radius витоку Polymarket EOA - це весь ваш pUSD balance і inventory outcome shares.
The Magic Labs to Privy migration
У серпні 2025 року Polymarket мігрував свого основного embedded-wallet provider з Magic Labs на Privy. Для bot вплив невеликий, але конкретний.
Облікові записи до міграції (створені через Magic) зазвичай використовують signature_type=1 (POLY_PROXY). Облікові записи після міграції використовують signature_type=2 (POLY_GNOSIS_SAFE). Деякі користувачі мігрували старий account; інші залишили початковий. Немає способу дізнатися з public API, який тип використовує ваш account - це перевіряють, намагаючись підписати order і спостерігаючи rejection.
Міграція також змінила спосіб, у який UI показує funder address. Старі flow UI Polymarket показували proxy address у dashboard; поточний flow ховає його в account settings. Команда CLI polymarket wallet show - найчистіший спосіб підтвердити обидва значення, незалежно від того, коли було створено account.
Approving USDC/pUSD spending
Щоб CLOB міг переміщувати ваш pUSD під час match order, proxy має надати approval exchange contracts Polymarket як spenders. UI Polymarket встановлює ці approvals під час першого deposit. Для bot, які поповнюють proxy напряму, їх потрібно встановити вручну.
Три approval, які треба встановити один раз на wallet:
- pUSD (ERC-20) → exchange contract
- Conditional Tokens (ERC-1155) → exchange contract (для selling shares)
- Conditional Tokens (ERC-1155) → NegRisk exchange contract (для selling NegRisk shares)
Запустіть polymarket approve з CLI під час першого setup. Transaction коштує кілька центів у MATIC gas. Перевірте через polymarket approve check - усі три мають повернути "approved." Найпоширеніший silent bug для нових builders - відсутній NegRisk approval, який проявляється лише під час selling shares із multi-outcome markets і виглядає як balance error.
Wallet recovery and backup
Wallet bot має два відновлювані елементи: EOA private key і password облікового запису Polymarket (який обмежує доступ через web UI, але не через SDK).
EOA private key - це єдине, що має значення для bot. Втрата = втрата всього, що є в proxy. Cold backup: запишіть його на папері, запечатайте в конверт, зберігайте поза офісом. Hot backup: зашифрована USB-флешка. Ніколи не надсилайте його собі email; ніколи не зберігайте незашифрованим у cloud storage.
Password облікового запису Polymarket можна відновити через Magic Labs / Privy email recovery, якщо ви досі контролюєте original signup email. Він не обмежує доступ ботові - bot використовує EOA private key напряму.
Якщо ви підозрюєте leak key: негайно виведіть pUSD і outcome tokens на новий wallet, згенеруйте новий EOA, розгорніть bot заново з новим key. Витіклий key не можна відкликати; його можна лише вичерпати.











