fix(server): recheck inclusion instead of re-broadcasting on watch stop#307
fix(server): recheck inclusion instead of re-broadcasting on watch stop#307valentinfernandez1 wants to merge 4 commits into
Conversation
nightly clippy (result_large_err) rejects the bare 240-byte subxt::Error in block_inclusion_outcome's Err variant.
|
Question: instead of re-signing and re-submitting. why not re-trying the already signed tx? build/sign Only rebuild after proving the original expired or was never included and its nonce remains unused. Can you comment on whether it make sense or not |
Yes, I avoided it as it was a bigger refactoring on the logic as we need better detection logic. For example if the first transaction is successful the identical re submit will be rejected with something like I can work on implementing this and couple it with this PR or we can just merge this and do it as a follow up, whatever you prefer |
…ulletin-inclusion-recheck
What
A
chainHead_followstopaborts subxt's transaction watch without saying anything about the transaction itself, which may already be on chain.Before,
Preimage.submittreated this like any other uncertain watch failure: retry once by re-signing and re-broadcasting. If the first transaction had actually landed, that stored the preimage twice and burned allowance for nothing; if the retry also errored, the call failed even though the submission had succeeded.Now, when the watch dies without a verdict, the extrinsic is looked up in the next few finalized blocks first. Found on chain: its dispatch outcome is taken from the block events and nothing is re-broadcast. Not found: the old single-retry behavior applies unchanged. Definitive node verdicts (invalid, dropped) skip the re-check entirely.