Tutorial de Bot de Polymarket · Capítulo 6 de 32
Autenticación del bot de Polymarket y configuración de la wallet: wallets proxy vs EOA, generación de API key vía SDK, sigType 2 para Gnosis Safe, mejores prácticas de almacenamiento de claves y la migración de Magic a Privy.
Qué cubre este capítulo
El modelo de wallet de Polymarket tiene tres partes móviles: una cuenta de propiedad externa (EOA) que firma órdenes, un proxy de smart contract que mantiene los fondos y la API key de Polymarket CLOB que autentica las solicitudes HTTP. Lograr que las tres estén conectadas correctamente es, por lejos, el fallo más común del primer día para quienes construyen por primera vez, y se volvió más confuso después de la migración de Magic Labs a Privy en agosto de 2025. Este capítulo recorre cada pieza en orden de configuración, con las variables de entorno específicas y el flag de tipo de firma que necesita el código de producción.
- Wallet proxy vs EOA: cuál usar para botear
- Generar una API key (pasos del SDK)
- sigType 2 y POLY_FUNDER_ADDRESS (Gnosis Safe)
- Almacenamiento de claves: .env, vault, KMS
- La migración de Magic Labs a Privy
- Aprobar gasto de USDC/pUSD
- Recuperación y respaldo de la wallet
Wallet proxy vs EOA: cuál usar para botear
Polymarket usa un patrón de wallet proxy de smart contract. Tu EOA - la dirección vinculada a tu clave privada - firma transacciones y órdenes. Un Gnosis Safe desplegado en una dirección determinística mantiene el pUSD y las shares de resultados reales. La dirección proxy es la que aparece en el panel de "wallet" de la UI de Polymarket; la EOA es la que firma.
Para bots, siempre firmas con la EOA (PRIVATE_KEY en env) y referencias la dirección proxy como POLY_FUNDER_ADDRESS en la configuración del cliente CLOB. Enviar órdenes usando la EOA como funder produce errores de "insufficient balance" incluso cuando el proxy está fondeado.
No puedes botear solo con la EOA: el flujo web de Polymarket siempre crea un proxy al registrarte. Confirma ambas direcciones con polymarket wallet show desde la CLI, o lee la dirección proxy desde la configuración de la UI de Polymarket.
Generar una API key (pasos del SDK)
La API de CLOB requiere tres credenciales: key, secret, passphrase. Estas no son la clave privada de tu wallet - son un conjunto de credenciales estilo HMAC vinculadas a tu wallet, usadas solo para autenticación de solicitudes HTTP.
Genéralas una sola vez con el 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)
Guarda la salida en un archivo JSON y cárgalo en cada arranque del bot; no lo regeneres por sesión - el servidor de la API cachea el conjunto de credenciales, y rotarlas con frecuencia puede activar la lógica de rate-limit. Las credenciales no vencen automáticamente. Rótalas solo si sospechas una filtración.
sigType 2 y POLY_FUNDER_ADDRESS (Gnosis Safe)
El argumento signature_type controla cómo CLOB valida las firmas de tus órdenes. Existen tres valores; dos son reales:
- 0 / EOA: la EOA es tanto la firmante como la funder. Se usa para configuraciones poco comunes donde los usuarios importaron una clave privada directamente.
- 1 / POLY_PROXY: contrato proxy heredado de Magic Labs. La mayoría de las cuentas pre-2025.
- 2 / POLY_GNOSIS_SAFE: estándar actual. Los fondos están en un Gnosis Safe, la EOA firma.
Usa signature_type=2 para cualquier cuenta creada después de agosto de 2025 (la migración a Privy) o para cualquier cuenta en la que veas una dirección Gnosis Safe en la UI de Polymarket. La variable de entorno POLY_FUNDER_ADDRESS debe ser la dirección del Safe, no la EOA. Un signature_type que no coincide con el tipo de funder produce rechazos de órdenes que parecen "insufficient allowance" o "balance: 0" - el mensaje de error es engañoso.
Almacenamiento de claves: .env, vault, KMS
Tres niveles razonables de almacenamiento para la clave privada de la EOA.
- Archivo .env (desarrollo en una sola máquina). El archivo vive en el VPS, el bot lo lee al iniciar, la clave nunca sale del host. Adecuado para wallets de <$1k. Usa
chmod 600 .envy asegúrate de que el.gitignoredel repo lo excluya. - Vault autohospedado (HashiCorp Vault, archivo cifrado con age o systemd-creds). Agrega un paso de desbloqueo al iniciar el bot. Vale la pena para wallets en el rango de $1k-$10k.
- KMS en la nube (AWS KMS, GCP KMS). El bot llama a KMS para descifrar la clave en memoria; la clave nunca toca el disco. Solo vale la complejidad operativa por encima de $10k o para flotas de múltiples bots.
Lo que nunca debes hacer: commitear una clave privada a git, pegarla en un chat, guardarla en un gestor de contraseñas que sincronice a servicios en la nube sin modo local-only. El radio de explosión on-chain de una filtración de la EOA de Polymarket es todo tu saldo de pUSD y tu inventario de shares de resultados.
La migración de Magic Labs a Privy
En agosto de 2025 Polymarket migró su proveedor principal de embedded wallet de Magic Labs a Privy. El efecto de cara al bot es pequeño pero específico.
Las cuentas pre-migración (creadas vía Magic) normalmente usan signature_type=1 (POLY_PROXY). Las cuentas post-migración usan signature_type=2 (POLY_GNOSIS_SAFE). Algunos usuarios migraron su cuenta vieja; otros conservaron la original. No hay forma de saber desde la API pública qué tipo usa tu cuenta - lo verificas intentando firmar una orden y observando el rechazo.
La migración también cambió cómo la UI expone la dirección funder. Los flujos viejos de la UI de Polymarket mostraban la dirección proxy en el dashboard; el flujo actual la oculta dentro de la configuración de la cuenta. El comando de CLI polymarket wallet show es la forma más limpia de confirmar ambos valores, sin importar cuándo se creó la cuenta.
Aprobar gasto de USDC/pUSD
Para que CLOB mueva tu pUSD al ejecutarse una orden, el proxy debe haber aprobado a los contratos del exchange de Polymarket como spenders. La UI de Polymarket configura estas aprobaciones durante el primer depósito. Para bots que fondean el proxy directamente, debes configurarlas manualmente.
Tres aprobaciones para configurar, una sola vez por wallet:
- pUSD (ERC-20) → contrato del exchange
- Conditional Tokens (ERC-1155) → contrato del exchange (para vender shares)
- Conditional Tokens (ERC-1155) → contrato de exchange NegRisk (para vender shares NegRisk)
Ejecuta polymarket approve desde la CLI en la configuración inicial. La transacción cuesta unos pocos centavos en gas de MATIC. Verifica con polymarket approve check - las tres deberían devolver "approved." El bug silencioso más común para quienes construyen por primera vez es la aprobación faltante de NegRisk, que falla solo al vender shares de mercados multioutcome y parece un error de saldo.
Recuperación y respaldo de la wallet
La wallet del bot tiene dos elementos recuperables: la clave privada de la EOA y la contraseña de la cuenta de Polymarket (que controla el acceso a través de la UI web, pero no por medio del SDK).
La clave privada de la EOA es lo único que importa para el bot. Pérdida = pérdida de todo lo que está en el proxy. Respaldo en frío: escríbela en papel, sella el papel en un sobre, guárdalo fuera del sitio. Respaldo en caliente: memoria USB cifrada. Nunca te la envíes por email; nunca la guardes sin cifrar en almacenamiento en la nube.
La contraseña de la cuenta de Polymarket se puede recuperar vía Magic Labs / Privy email recovery siempre que aún controles el email original de registro. No controla el acceso del bot - el bot usa directamente la clave privada de la EOA.
Si sospechas de una filtración de la clave: de inmediato retira pUSD y los tokens de resultados a una wallet nueva, genera una nueva EOA, y vuelve a desplegar el bot con la nueva clave. La clave filtrada no se puede revocar; solo se puede vaciar.









