Refs #44
File: crates/charon-executor/src/submit.rs
Problem
submit() retries once on timeout. 6s timeout + 1 retry = 12s wait window = 4 BSC blocks. After the first timeout, the opportunity's health factor, gas ceiling, and competitor liquidation status are all stale. The submitter cannot know whether retrying is safe — only the pipeline, which holds the opportunity snapshot, deadline, and current chain head, can make that decision.
The retry also masks transient connectivity issues that the pipeline should observe via metrics.
Fix
Remove internal retry. Return SubmitError::Timeout on first 6s timeout. Caller decides whether to re-simulate, re-broadcast with bumped fee, or drop. Document that submit() is single-shot.
Refs #44
File: crates/charon-executor/src/submit.rs
Problem
submit() retries once on timeout. 6s timeout + 1 retry = 12s wait window = 4 BSC blocks. After the first timeout, the opportunity's health factor, gas ceiling, and competitor liquidation status are all stale. The submitter cannot know whether retrying is safe — only the pipeline, which holds the opportunity snapshot, deadline, and current chain head, can make that decision.
The retry also masks transient connectivity issues that the pipeline should observe via metrics.
Fix
Remove internal retry. Return SubmitError::Timeout on first 6s timeout. Caller decides whether to re-simulate, re-broadcast with bumped fee, or drop. Document that submit() is single-shot.