ASK KNOX
beta
LESSON 266

Signature Types and Proxy Wallets

signature_type=0 means EOA is the funder — simple. signature_type=1 means proxy wallet for magic/email logins. signature_type=2 is a different proxy flavor. When to use each, and the funder address trap that bites every new Polymarket integration.

8 min read

Polymarket supports three signature types. Two of them are for proxy wallets used by email-login users. One of them is for programmatic bots with direct private keys. Getting the wrong one produces signature errors that do not name the problem.

The Three Types

TypeSignerFunderWhen to use
0EOA (your private key)Same EOAProgrammatic bots with direct keys
1Signer EOAMagic/email proxy walletEmail/social login users
2Signer EOAPolymarket proxy walletOlder proxy flow

The signer is whose private key signs the order payload. The funder is whose balance gets debited when the order fills. For type 0 they are the same address. For types 1 and 2 they are different — the signer controls a separate proxy smart contract that holds the actual USDC.e.

Inline Diagram — Signature Type Matrix

SIGNATURE TYPES — SIGNER vs FUNDERTYPE 0 — EOA DIRECTSIGNER = FUNDER0xCF56…0aD signs0xCF56…0aD holds USDC.eprogrammatic botsTYPE 1 — MAGIC PROXYSIGNER ≠ FUNDEREOA signs via magic.linkproxy wallet holds fundsemail/social loginTYPE 2 — POLY PROXYSIGNER ≠ FUNDERolder proxy flowPolymarket-owned proxylegacy accounts

The Funder Address Trap

The classic mistake is to sign an order with signature_type=1 (proxy) but set the funder field to the signer EOA instead of the proxy wallet. Polymarket validates the signature against the signer, then checks the balance at the funder. If the funder is the signer EOA and the signer EOA has no USDC.e (because the funds are in the proxy), the order gets rejected as insufficient balance even though the account is technically "funded."

The reverse mistake is equally common: using signature_type=0 but providing a proxy address as the funder. Polymarket expects funder == signer for type 0; providing anything else produces an "invalid signature" error that does not identify the actual problem.

How to Know Which You Have

If you generated your key with Account.create() or imported a hex private key into Metamask and funded it directly — you have an EOA with type 0 semantics.

If you signed up to Polymarket via the website using email/magic link and never saw a private key — you have a proxy wallet with type 1 semantics. Your funds live in a smart contract proxy, not the signer EOA.

If you are a programmatic bot being integrated from scratch — always use type 0. It is the simplest path and avoids proxy-wallet footguns entirely. Hermes uses type 0.

The Rule

Type 0 for bots. Types 1 and 2 for web users. Funder matches signer for type 0. Any mismatch produces opaque errors that will eat hours. Know which type you are using before your first order ships.