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
- Set the funder address in the adapter config to the Polymarket proxy wallet address distinct from the signing key address
- Verify signature_type matches your account setup (EOA for plain wallets, proxy type for email/magic wallets)
- Check the funder env/config value isn't accidentally the same as the signer's
- 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
- Always set the funder explicitly in config; never rely on fallback to signer
- Validate config at startup before any network calls
- Confirm your account type: EOA wallets need no funder; email/magic wallets use a proxy address
- Compare addresses case-insensitively when validating
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
- signature_expiry_secs {signature_expiry_secs}s must be great
- event_slug_builder.interval_mins must be positive
- event_slug_builder.periods must be positive
- event_slug_builder.assets must include at least one non-empt
- event_slug_builder offset resolves before the Unix epoch
AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08).
Data as JSON: /api/errors/6576ee6fa1a34cb4.
Report an issue: GitHub.