{"record":{"id":"475a5ce1cec3aa3b","repo":"nautechsystems/nautilus_trader","slug":"signed-transaction-gas-limit-exceeds-configured","errorCode":null,"errorMessage":"Signed transaction gas limit {} exceeds configured ceiling {}","messagePattern":"Signed transaction gas limit (.+?) exceeds configured ceiling (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/adapters/blockchain/src/execution/transaction.rs","lineNumber":308,"sourceCode":"        \"Signed transaction destination {} does not match persisted destination {}\",\n        tx.to,\n        intent.to\n    );\n    anyhow::ensure!(\n        tx.value == intent.value,\n        \"Signed transaction value does not match persisted value\"\n    );\n    anyhow::ensure!(\n        tx.input == intent.input,\n        \"Signed transaction calldata does not match persisted calldata\"\n    );\n    anyhow::ensure!(\n        tx.gas_limit <= intent.gas_limit,\n        \"Signed transaction gas limit {} exceeds configured ceiling {}\",\n        tx.gas_limit,\n        intent.gas_limit\n    );\n    anyhow::ensure!(\n        tx.max_fee_per_gas <= u128::from(intent.max_fee_per_gas),\n        \"Signed transaction max fee per gas {} wei exceeds configured ceiling {} wei\",\n        tx.max_fee_per_gas,\n        intent.max_fee_per_gas\n    );\n    anyhow::ensure!(\n        tx.max_priority_fee_per_gas <= tx.max_fee_per_gas,\n        \"Signed transaction priority fee per gas {} wei exceeds max fee per gas {} wei\",\n        tx.max_priority_fee_per_gas,\n        tx.max_fee_per_gas\n    );\n\n    Ok(())\n}\n\n/// Applies `gas_buffer_bps` over the `eth_estimateGas` result.\n///\n/// A buffered estimate above `gas_limit` rejects the transaction rather than clamping to the","sourceCodeStart":290,"sourceCodeEnd":326,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/blockchain/src/execution/transaction.rs#L290-L326","documentation":"validate_signed_transaction checks a signed EVM transaction against the policy ceilings declared in its intent. This error fires when the signed transaction's gas limit exceeds the intent's configured gas_limit ceiling. It exists to ensure builder-produced or user-signed transactions can never spend more gas than the strategy authorized.","triggerScenarios":"A signed transaction is decoded in validate_signed_transaction and its tx.gas_limit is strictly greater than intent.gas_limit; raised via anyhow::ensure! before the transaction is accepted (authenticate_payload_identity_with_signer path).","commonSituations":"A transaction builder estimates gas higher than the ceiling configured in the intent; a signer wallet auto-estimates and raises the gas limit; the intent's gas ceiling was set too low for the current contract workload; stale intents replayed after gas costs grew.","solutions":["Raise the intent's gas_limit ceiling to cover the transaction's estimated gas, with headroom","Re-generate the signed transaction with gas_limit set at or below the intent ceiling","Check why gas estimation inflated (new contract code, increased loop iterations) and adjust policy","Verify the intent used for signing is the current one, not a stale/replayed one"],"exampleFix":"// before\nintent.gas_limit = 50_000; // too low for the swap\n// after\nintent.gas_limit = 120_000; // ceiling >= estimated gas with headroom","handlingStrategy":"validation","validationCode":"if let Some(tx) = decoded_tx {\n    assert!(tx.gas_limit <= intent.gas_limit, \"tx gas_limit {} exceeds ceiling {}\", tx.gas_limit, intent.gas_limit);\n}","typeGuard":"fn within_gas_ceiling(tx_gas_limit: u64, intent_gas_limit: u64) -> bool {\n    tx_gas_limit <= intent_gas_limit\n}","tryCatchPattern":null,"preventionTips":["Set intent gas ceilings from live estimates plus a fixed headroom multiplier","Simulate the transaction before signing and reject it if gas exceeds the ceiling","Keep intents short-lived so gas assumptions do not go stale"],"tags":["gas-limit","policy-violation","transaction-validation","evm"],"backgroundTag":"value-out-of-range","analyzedSha":"18893faf8b356be3320add8de2f861b0b647cf06","analyzedAt":"2026-09-08T20:49:34.690Z","contentChangedAt":"2026-09-08T20:49:34.690Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}