Polymarket Bot Tutorial · Bölüm 6 / 32

Polymarket bot authentication ve wallet setup: proxy wallets vs EOA, SDK üzerinden API key oluşturma, Gnosis Safe için sigType 2, key storage best practices ve Magic-to-Privy migration.

Bu bölüm neleri kapsıyor

Polymarket'in wallet modeli üç hareketli parçadan oluşur: order'ları imzalayan externally owned account (EOA), funds tutan smart-contract proxy ve HTTP request'lerini authenticate eden Polymarket CLOB API key'i. Bu üçünün doğru şekilde bağlanması, yeni builders için ilk günde yaşanan en yaygın başarısızlıktır ve August 2025 Magic Labs to Privy migration'ından sonra daha da kafa karıştırıcı hale geldi. Bu bölüm, production code'un ihtiyaç duyduğu belirli environment variable'lar ve signature-type flag'iyle birlikte her parçayı kurulum sırasına göre anlatır.

  • Proxy wallet vs EOA: hangisiyle bot çalıştırmalı
  • API key oluşturma (SDK adımları)
  • Gnosis Safe için sigType 2 ve POLY_FUNDER_ADDRESS
  • Key storage: .env, vault, KMS
  • Magic Labs'ten Privy'ye migration
  • USDC/pUSD spending onayı verme
  • Wallet recovery ve backup

Proxy wallet vs EOA: hangisiyle bot çalıştırmalı

Polymarket bir smart-contract proxy wallet modeli kullanır. Private key'inize bağlı address olan EOA'nız transaction'ları ve order'ları imzalar. Deterministic bir address'e deploy edilmiş Gnosis Safe, gerçek pUSD ve outcome share'leri tutar. Proxy address, Polymarket UI'sının "wallet" panelinde görünen address'tir; EOA ise imzayı atan taraftır.

Bot'lar için her zaman EOA ile imza atarsınız (PRIVATE_KEY env içinde) ve proxy address'i CLOB client config içinde POLY_FUNDER_ADDRESS olarak kullanırsınız. EOA'yı funder olarak kullanarak order göndermek, proxy fund edilmiş olsa bile "insufficient balance" hatası üretir.

EOA ile tek başına bot çalıştıramazsınız - Polymarket'in web flow'u signup sırasında her zaman bir proxy oluşturur. Her iki address'i de CLI'dan polymarket wallet show ile doğrulayın veya proxy address'i Polymarket UI ayarlarından okuyun.

API key oluşturma (SDK adımları)

CLOB API üç kimlik bilgisi ister: key, secret, passphrase. Bunlar wallet private key'iniz değildir - wallet'ınıza bağlı, yalnızca HTTP request authentication için kullanılan HMAC-style bir credential set'idir.

Bunları bir kez SDK ile oluşturun:

# 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)

Çıktıyı bir JSON dosyasında saklayın ve bot her başlatıldığında yükleyin; session başına yeniden oluşturmayın - API server credential set'i cache'ler ve sık sık rotate etmek rate-limit logic'i tetikleyebilir. Bu credentials otomatik olarak süresi dolmaz. Sadece bir sızıntıdan şüpheleniyorsanız rotate edin.

sigType 2 ve POLY_FUNDER_ADDRESS (Gnosis Safe)

signature_type argümanı, CLOB'un order imzalarınızı nasıl doğruladığını kontrol eder. Üç değer vardır; ikisi gerçektir:

  • 0 / EOA: EOA hem signer hem funder'dır. Private key'i doğrudan import eden kullanıcıların yaptığı sıra dışı kurulumlarda kullanılır.
  • 1 / POLY_PROXY: legacy Magic Labs proxy contract. 2025 öncesi çoğu hesap.
  • 2 / POLY_GNOSIS_SAFE: mevcut standart. Funds Gnosis Safe içinde, EOA imzalar.

August 2025'ten sonra oluşturulan herhangi bir hesapta (Privy migration) veya Polymarket UI'da bir Gnosis Safe address'i görebildiğiniz herhangi bir hesapta signature_type=2 kullanın. POLY_FUNDER_ADDRESS env var'ı Safe address'i olmalıdır, EOA değil. signature_type ile funder type'ın uyuşmaması, "insufficient allowance" veya "balance: 0" gibi görünen ve sessizce order reddine yol açan hatalar üretir - hata mesajı yanıltıcıdır.

Key storage: .env, vault, KMS

EOA private key'i saklamak için üç makul seviye vardır.

  1. .env file (tek makinede development). File VPS'te durur, bot başlangıçta okur, key host dışına çıkmaz. <$1k wallet'lar için yeterlidir. chmod 600 .env kullanın ve repo'nuzun .gitignore dosyasının bunu dışladığından emin olun.
  2. Self-hosted vault (HashiCorp Vault, age-encrypted file veya systemd-creds). Bot başlangıcında bir unlock adımı ekler. $1k-$10k arası wallet'lar için değerlidir.
  3. Cloud KMS (AWS KMS, GCP KMS). Bot, key'i memory'de decrypt etmek için KMS'i çağırır; key asla disk'e dokunmaz. Operasyonel karmaşıklığa ancak $10k üzeri veya çoklu-bot fleet'lerinde değer.

Asla yapmamanız gerekenler: private key'i git'e commit etmek, bir chat'e yapıştırmak, local-only mode olmadan cloud service'lere senkronize olan bir password manager'da saklamak. Polymarket EOA sızıntısının on-chain blast radius'u, tüm pUSD balance'ınız ve outcome share inventory'nizdir.

Magic Labs'ten Privy'ye migration

August 2025'te Polymarket, birincil embedded-wallet provider'ını Magic Labs'ten Privy'ye migrate etti. Bot tarafındaki etkisi küçüktür ama nettir.

Migration öncesi hesaplar (Magic üzerinden oluşturulanlar) tipik olarak signature_type=1 (POLY_PROXY) kullanır. Migration sonrası hesaplar signature_type=2 (POLY_GNOSIS_SAFE) kullanır. Bazı kullanıcılar eski hesaplarını migrate etti; bazıları orijinali korudu. Public API'den hesabınızın hangi type'ı kullandığını anlamanın bir yolu yoktur - order imzalamayı deneyip reddi gözlemleyerek kontrol edersiniz.

Migration ayrıca UI'nın funder address'i nasıl gösterdiğini de değiştirdi. Eski Polymarket UI flow'ları dashboard'da proxy address'i gösterirdi; mevcut flow bunu account settings içine gömüyor. Hesap ne zaman oluşturulmuş olursa olsun, her iki değeri doğrulamanın en temiz yolu polymarket wallet show komutudur.

USDC/pUSD spending onayı verme

CLOB'un order match sırasında pUSD'nizi hareket ettirebilmesi için proxy'nin Polymarket exchange contract'larını spender olarak approve etmiş olması gerekir. Polymarket UI bu approval'ları ilk deposit sırasında ayarlar. Proxy'yi doğrudan fonlayan bot'lar için bunları manuel olarak ayarlamanız gerekir.

Her wallet için bir kez ayarlanacak üç approval:

  1. pUSD (ERC-20) → exchange contract
  2. Conditional Tokens (ERC-1155) → exchange contract (share satışı için)
  3. Conditional Tokens (ERC-1155) → NegRisk exchange contract (NegRisk share satışı için)

İlk kurulumda CLI'dan polymarket approve çalıştırın. Transaction birkaç sentlik MATIC gas maliyeti oluşturur. polymarket approve check ile doğrulayın - üçünün de "approved" döndürmesi gerekir. Yeni builders için en yaygın sessiz bug, NegRisk approval'ının eksik olmasıdır; bu hata yalnızca çok sonuçlu market'lerden share satarken çıkar ve bir balance hatası gibi görünür.

Wallet recovery ve backup

Bot'un wallet'ında iki kurtarılabilir öğe vardır: EOA private key ve Polymarket account password'u (bu, web UI üzerinden erişimi kontrol eder ama SDK üzerinden etkilemez).

Bot için önemli olan tek şey EOA private key'dir. Kaybı = proxy içindeki her şeyin kaybı. Soğuk backup: kağıda yazın, zarf içine mühürleyin, site dışında saklayın. Sıcak backup: şifrelenmiş USB stick. Asla kendinize e-posta ile göndermeyin; asla cloud storage'da şifrelenmemiş halde tutmayın.

Polymarket account password'u, hâlâ orijinal signup email'ini kontrol ettiğiniz sürece Magic Labs / Privy email recovery ile kurtarılabilir. Bot erişimini kontrol etmez - bot doğrudan EOA private key'i kullanır.

Bir key sızıntısından şüpheleniyorsanız: hemen pUSD ve outcome token'ları yeni bir wallet'a çekin, yeni bir EOA oluşturun, bot'u yeni key ile yeniden deploy edin. Sızan key revoke edilemez; yalnızca boşaltılabilir.

Sık sorulan sorular

Bot'um için ayrı bir wallet'a ihtiyacım var mı?
Kesinlikle evet, tavsiye edilir. Bot'a ayırdığınız sermayeyi בלבד tutan yeni bir EOA veya yeni bir email-account-derived proxy wallet kullanın. Bot key'i sızarsa yalnızca bot funds risk altındadır - ana varlıklarınız güvende kalır.
Polymarket API'sinde sigType 2 nedir?
sigType 2, email/Google ile giriş yaptığınızda ve Polymarket sizin için proxy oluşturduğunda kullanılan bir Gnosis Safe (proxy wallet) imzasını ifade eder. sigType 2 için POLY_FUNDER_ADDRESS environment variable'ı PROXY address olmalıdır (Polymarket UI'da gösterilen), alttaki EOA değil. Bu yaygın bir yapılandırma hatasıdır.
Polymarket API key'ini nasıl oluştururum?
SDK kullanın. Python'da: wallet'ınızla authenticate olduktan sonra client.create_api_key() tarafından döndürülen ApiCreds. Node.js'te: @polymarket/clob-client-v2 üzerinden benzer şekilde client.createApiKey(). Dönen key/secret/passphrase'i .env dosyanıza kaydedin (asla git'e commit etmeyin).
Polymarket API key'leri revoke edilebilir mi?
Evet. SDK aracılığıyla istediğiniz zaman yeni key'ler türetebilirsiniz; eski key'ler, client.deleteApiKey(creds) ile açıkça revoke edilene kadar geçerli kalır. En iyi uygulama, key'leri düzenli olarak rotate etmek ve compromise olmuş bir makineye dokunan tüm key'leri revoke etmektir.
Polymarket Magic Labs'ten Privy'ye migration yapınca ne değişti?
Login OTP kodları 3 haneli olmaktan çıktı (brute force'a açıktı, December 2025 hack'inde exploit edildi) ve Privy üzerinden device binding ile daha uzun kodlara dönüştü. Bot'lar için pratik değişiklik auth ceremony'dir - SDK bunun büyük bölümünü soyutlar. Bot'unuz Magic Labs API endpoint'lerine hard-coded ise (nadir), Privy flow'a güncelleyin.
Key'leri .env dosyasında mı saklamalıyım?
Tek bir VPS bot'u için - evet, uygun file permissions ile (chmod 600 .env, bot user'a ait). Çok makineli kurulumlar veya production-grade ops için - bir secrets manager'a geçin (AWS Secrets Manager, Vault, doppler.com). .env'yi asla git'e commit etmeyin, hiçbir zaman.