nautechsystems/nautilus_trader · error

Polymarket {signature_type:?} signature type requires a fund

Error message

Polymarket {signature_type:?} signature type requires a funder wallet address

What it means

`resolve_maker_address` maps a `SignatureType` plus optional funder address to the maker (wallet) address used for order signing. EOA signature types fall back to the signer address, but proxy-based types (PolyProxy, PolyGnosisSafe, Poly1271) trade from a separate funder/proxy wallet, so a funder address is mandatory. This error is thrown when a proxy signature type is configured without any funder wallet address.

Source

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

            pending_submits: PendingSubmitTracker::default(),
            pending_cancels: PendingCancelTracker::default(),
            order_contexts: Arc::new(OrderContextRegistry::default()),
            fill_tracker: Arc::new(OrderFillTrackerMap::new()),
            ws_dispatch_state: Arc::new(Mutex::new(WsDispatchState::default())),
        })
    }
}

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 {

View on GitHub (pinned to 18893faf8b)

Solutions

  1. Set the funder wallet address (your Polymarket proxy / Safe address) in the config or secrets for proxy signature types
  2. Or switch signature_type to Eoa if you trade directly from the signer's EOA wallet
  3. Verify the funder address is the account holding USDC collateral on Polymarket, not the EOA signing key
  4. Check config docs for the correct funder field name for your adapter version

Example fix

// before
signature_type: SignatureType::PolyGnosisSafe,
funder: None,
// after
signature_type: SignatureType::PolyGnosisSafe,
funder: Some("0xYourSafeWalletAddress".to_string()),
Defensive patterns

Strategy: validation

Validate before calling

fn require_funder_for_proxy_types(sig_type: SignatureType, funder: Option<&str>) -> Result<(), String> {
    match sig_type {
        SignatureType::Eoa => Ok(()),
        _ if funder.map(|f| f.is_empty()).unwrap_or(true) =>
            Err(format!("{sig_type:?} requires a funder wallet address")),
        _ => Ok(()),
    }
}

Try / catch

let client = PolymarketExecutionClient::new(...)
    .map_err(|e| { tracing::error!("config: {e:#}"); e })?;

Prevention

When it happens

Trigger: Building the execution client with signature_type = PolyProxy, PolyGnosisSafe, or Poly1271 while secrets/config supply no funder address; EOA with funder unset is fine, proxy types are not.

Common situations: Users with a Polymarket proxy or Gnosis Safe account who copy an EOA-style config and omit the funder/proxy wallet field; migrating configs between account types; funder field named differently across config versions.

Understand the failure class

Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.

Related errors


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