nautechsystems/nautilus_trader · error

Polymarket {signature_type:?} signature type requires a fund

Error message

Polymarket {signature_type:?} signature type requires a funder distinct from the signing address

What it means

Polymarket proxy signature types (e.g. Email/Proxy variants) require the maker/funder address to differ from the address that signs orders. resolve_maker_address validates the resolved funder and rejects configurations where a non-EOA signature type resolves to the signer's own address, since the CLOB would reject such orders.

Source

Thrown at crates/adapters/polymarket/src/execution/mod.rs:252

fn resolve_maker_address(
    signature_type: SignatureType,
    signer_address: &str,
    funder: Option<&str>,
) -> anyhow::Result<String> {
    let maker_address = match signature_type {
        SignatureType::Eoa => funder.unwrap_or(signer_address),
        SignatureType::PolyProxy | SignatureType::PolyGnosisSafe | SignatureType::Poly1271 => {
            funder.ok_or_else(|| {
                anyhow::anyhow!(
                    "Polymarket {signature_type:?} signature type requires a funder wallet address",
                )
            })?
        }
    };

    if signature_type != SignatureType::Eoa && maker_address.eq_ignore_ascii_case(signer_address) {
        anyhow::bail!(
            "Polymarket {signature_type:?} signature type requires a funder distinct from the signing address",
        );
    }

    Ok(maker_address.to_string())
}

#[async_trait(?Send)]
impl ExecutionClient for PolymarketExecutionClient {
    fn is_connected(&self) -> bool {
        self.core.is_connected()
            && (!self.config.heartbeat_enabled
                || self
                    .heartbeat_healthy
                    .load(std::sync::atomic::Ordering::Acquire))
    }

    fn client_id(&self) -> ClientId {

View on GitHub (pinned to 18893faf8b)

Solutions

  1. Set the funder address in the adapter config to the Polymarket proxy wallet address distinct from the signing key address
  2. Verify signature_type matches your account setup (EOA for plain wallets, proxy type for email/magic wallets)
  3. Check the funder env/config value isn't accidentally the same as the signer's
  4. Look up your proxy wallet address from Polymarket account settings and use it as funder

Example fix

// before
PolymarketExecClientConfig(signature_type: PolymarketSignatureType::Email, funder: signer_address)
// after
PolymarketExecClientConfig(signature_type: PolymarketSignatureType::Email, funder: "0xYourProxyWalletAddress")
Defensive patterns

Strategy: validation

Validate before calling

fn funder_is_distinct(cfg: &PolymarketExecClientConfig) -> Result<(), String> {
    if cfg.signature_type != SignatureType::Eoa
        && cfg.funder.eq_ignore_ascii_case(&cfg.signer_address)
    {
        return Err(format!("{:?} signature type requires a funder distinct from the signer", cfg.signature_type));
    }
    Ok(())
}

Try / catch

match PolymarketExecutionClient::new(config).await {
    Err(e) if e.to_string().contains("requires a funder distinct") => {
        error!("config error: set funder to your Polymarket proxy wallet address");
    }
    Err(e) => return Err(e),
    Ok(client) => {},
}

Prevention

When it happens

Trigger: Constructing the execution client (new) or tests calling resolve_maker_address when signature_type is not Eoa and the resolved maker/funder address equals the signer address case-insensitively.

Common situations: Config omits the funder so it falls back to the signer address while a proxy signature type is configured; copy-pasting the signer address into the funder field; environment config where POLYMARKET_FUNDER is unset.

Understand the failure class

Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.

Related errors


AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08). Data as JSON: /api/errors/6576ee6fa1a34cb4. Report an issue: GitHub.