Problem
PickTxForSend() prioritizes transactions with fewer send attempts. A transaction that has been waiting 1 hour with 5 attempts loses to a fresh transaction with 1 attempt. This can result in long-waiting transactions being perpetually deprioritized.
Solution
Add an urgency factor to the priority function based on elapsed time since the first send attempt. Urgency is placed last in the comparison tuple so it only breaks ties between transactions with equal send history.
Changes
src/private_broadcast.h: addurgencyfield toPrioritystructsrc/private_broadcast.cpp: updateDerivePriority()to track oldest pick time and calculate urgencysrc/test/private_broadcast_tests.cpp: addurgency_tie_breakandurgency_secondary_to_send_counttest cases
Behavior
| Scenario | Result |
|---|---|
| TxA: 5 picks, 60min waiting vs TxB: 1 pick, 0min | TxB wins |
| TxA: 3 picks, 30min waiting vs TxB: 3 picks, 20min | TxA wins (urgency) |
| TxA: 0 picks, 10min waiting vs TxB: 0 picks, 0min | TxA wins (urgency) |
No behavior change for transactions with different send attempt counts.