Туторіал з бота Полімаркет · Розділ 6 із 32
Аутентифікація Полімаркет bot і налаштування wallet: proxy wallets vs EOA, генерація API key через SDK, sigType 2 для Gnosis Safe, best practices для зберігання key і міграція з Magic на Privy.
Що охоплює ця chapter
Wallet model Полімаркет має три складові: externally owned account (EOA), який підписує orders, smart-contract proxy, що зберігає funds, і Полімаркет CLOB API key, який аутентифікує HTTP requests. Коректно зв’язати всі три - це найпоширеніша Day 1 помилка для нових builders, і після міграції Magic Labs до Privy в серпні 2025 року це стало ще заплутанішим. У цій chapter ми розберемо кожен елемент у порядку налаштування, разом із конкретними environment variables і signature-type flag, які потрібні production code.
- Proxy wallet проти EOA: з чим запускати бота
- Генерація API key (кроки SDK)
- sigType 2 і POLY_FUNDER_ADDRESS (Gnosis Safe)
- Зберігання key: .env, vault, KMS
- Міграція з Magic Labs на Privy
- Надання дозволу на витрати USDC/pUSD
- Відновлення та резервна копія wallet
Proxy wallet vs EOA: з чим botити
Полімаркет використовує pattern smart-contract proxy wallet. Ваш EOA - адреса, прив’язана до вашого private key, - підписує transactions і orders. Gnosis Safe, розгорнутий за детермінованою адресою, зберігає фактичні pUSD і outcome shares. Proxy address - це те, що відображається в панелі "wallet" у UI Полімаркет; EOA - це те, що підписує.
Для bot завжди підписуйте через EOA (PRIVATE_KEY в env) і вказуйте proxy address як POLY_FUNDER_ADDRESS у config CLOB client. Надсилання orders із EOA як funder спричиняє помилки "insufficient balance" навіть тоді, коли proxy поповнений.
Botити лише з EOA не можна - web flow Полімаркет завжди створює proxy під час signup. Підтвердьте обидві адреси через polymarket wallet show з CLI або прочитайте proxy address у settings UI Полімаркет.
Генерація API key (кроки SDK)
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 і 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 Полімаркет видно адресу Gnosis Safe. Env var POLY_FUNDER_ADDRESS має містити адресу Safe, а не EOA. Невідповідність signature_type типу funder тихо спричиняє відхилення orders, які виглядають як "insufficient allowance" або "balance: 0" - повідомлення про помилку вводить в оману.
Зберігання key: .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 витоку Полімаркет EOA - це весь ваш pUSD balance і inventory outcome shares.
Міграція з Magic Labs на Privy
У серпні 2025 року Полімаркет мігрував свого основного 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 Полімаркет показували proxy address у dashboard; поточний flow ховає його в account settings. Команда CLI polymarket wallet show - найчистіший спосіб підтвердити обидва значення, незалежно від того, коли було створено account.
Approving USDC/pUSD spending
Щоб CLOB міг переміщувати ваш pUSD під час match order, proxy має надати approval exchange contracts Полімаркет як spenders. UI Полімаркет встановлює ці approvals під час першого deposit. Для bot, які поповнюють proxy напряму, їх потрібно встановити вручну.
Три approval, які треба встановити один раз на wallet:
- pUSD (ERC-20) → exchange contract
- Conditional Tokens (ERC-1155) → exchange contract (для продажу shares)
- Conditional Tokens (ERC-1155) → NegRisk exchange contract (для продажу 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
Wallet bot має два відновлювані елементи: EOA private key і password облікового запису Полімаркет (який обмежує доступ через web UI, але не через SDK).
EOA private key - це єдине, що має значення для bot. Втрата = втрата всього, що є в proxy. Cold backup: запишіть його на папері, запечатайте в конверт, зберігайте поза офісом. Hot backup: зашифрована USB-флешка. Ніколи не надсилайте його собі email; ніколи не зберігайте незашифрованим у cloud storage.
Password облікового запису Полімаркет можна відновити через Magic Labs / Privy email recovery, якщо ви досі контролюєте original signup email. Він не обмежує доступ ботові - bot використовує EOA private key напряму.
Якщо ви підозрюєте leak key: негайно виведіть pUSD і outcome tokens на новий wallet, згенеруйте новий EOA, розгорніть bot заново з новим key. Витіклий key не можна відкликати; його можна лише вичерпати.



