nautechsystems/nautilus_trader · error
Signed transaction priority fee per gas {} wei exceeds max f
Error message
Signed transaction priority fee per gas {} wei exceeds max fee per gas {} wei What it means
validate_signed_transaction enforces EIP-1559 fee sanity: the max priority fee per gas (tip) must never exceed the max fee per gas. This error fires when a signed transaction violates that invariant, which would otherwise be invalid or economically nonsensical on-chain.
Source
Thrown at crates/adapters/blockchain/src/execution/transaction.rs:314
"Signed transaction value does not match persisted value"
);
anyhow::ensure!(
tx.input == intent.input,
"Signed transaction calldata does not match persisted calldata"
);
anyhow::ensure!(
tx.gas_limit <= intent.gas_limit,
"Signed transaction gas limit {} exceeds configured ceiling {}",
tx.gas_limit,
intent.gas_limit
);
anyhow::ensure!(
tx.max_fee_per_gas <= u128::from(intent.max_fee_per_gas),
"Signed transaction max fee per gas {} wei exceeds configured ceiling {} wei",
tx.max_fee_per_gas,
intent.max_fee_per_gas
);
anyhow::ensure!(
tx.max_priority_fee_per_gas <= tx.max_fee_per_gas,
"Signed transaction priority fee per gas {} wei exceeds max fee per gas {} wei",
tx.max_priority_fee_per_gas,
tx.max_fee_per_gas
);
Ok(())
}
/// Applies `gas_buffer_bps` over the `eth_estimateGas` result.
///
/// A buffered estimate above `gas_limit` rejects the transaction rather than clamping to the
/// ceiling: on Arbitrum the estimate folds the L1 data fee into gas units, and clamping
/// guarantees a paid-for out-of-gas revert.
///
/// # Errors
///
/// Returns an error if the buffered estimate exceeds `gas_limit` or the arithmetic overflows.View on GitHub (pinned to 18893faf8b)
Solutions
- Set tx.max_priority_fee_per_gas <= tx.max_fee_per_gas before signing
- Raise max_fee_per_gas so it covers the intended priority tip
- Use a standard fee estimator (e.g. eth_maxPriorityFeePerGas) and clamp the tip to the max fee
Example fix
// before let max_fee_per_gas = 20_000_000_000u128; let max_priority_fee_per_gas = 25_000_000_000u128; // tip > cap // after let max_priority_fee_per_gas = max_priority_fee_per_gas.min(max_fee_per_gas);
Defensive patterns
Strategy: validation
Validate before calling
assert!(tx.max_priority_fee_per_gas <= tx.max_fee_per_gas, "priority fee {} exceeds max fee {}", tx.max_priority_fee_per_gas, tx.max_fee_per_gas); Type guard
fn fees_valid(max_fee_per_gas: u128, max_priority_fee_per_gas: u128) -> bool {
max_priority_fee_per_gas <= max_fee_per_gas
} Prevention
- Clamp the priority fee to the max fee right before signing
- Use a shared fee-building helper so fee fields cannot diverge
- Unit-test 1559 fee construction with edge-case values
When it happens
Trigger: tx.max_priority_fee_per_gas > tx.max_fee_per_gas during validation of a signed transaction inside validate_signed_transaction; e.g. a manually built 1559 transaction where the tip cap was raised above the fee cap.
Common situations: Hand-assembled EIP-1559 transactions with inverted fee fields; signing libraries or wallets configured with a fixed tip that exceeds a lowered max fee; unit tests or tooling setting priorityFee > maxFee.
Understand the failure class
Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.
Related errors
- Derived max fee per gas {max_fee} wei exceeds ceiling {max_f
- Signed transaction gas limit {} exceeds configured ceiling {
- Finalized block {} does not contain transaction {}
- No deployed bytecode at {description} address {address}
- Chain ID mismatch at connect: expected {expected_chain_id},
AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08).
Data as JSON: /api/errors/bed710b4c2b88500.
Report an issue: GitHub.