magicblock-labs / magicblock-labs/magicblock-validator
Oversized committor transactions leave accounts stuck undelegating
@GabrielePicco is already working on this.
Since Sep 18, 2026.
- Dominant language
- Rust
- Stars
- 58
- Forks
- 58
- Avg merge
- 22h 1m
- Merged PRs (30d)
- 53
Description
## Problem
A buffered commit-and-undelegate intent for 10 accounts failed after three attempts (~6.5 minutes) with `CannotConfirmTransactionSignatureStatus`, leaving all accounts undelegating. Buffer preparation and ALT updates landed; the commit transactions did not. Restart recovery retried the same failing intent, with `stuck_accounts=None` in the recovered-intent warning.
The reported commit transaction referenced 66 distinct account keys (six per account plus six shared), exceeding the deployment’s 64-account lock limit. The original investigation reported devnet simulations succeeding at 64 keys and returning `TooManyAccountLocks` at 65. ALTs reduce wire size, not the number of locked accounts.
`TaskStrategist` and `IntentSizeValidator` check serialized size but not account count. With `skip_preflight: true`, the rejection surfaced as repeated confirmation timeouts. The report also identifies oversized finalize and restart-recovery variants.
## Reproduction
1. Delegate 10 accounts whose commits use the buffer path.
2. Schedule one commit-and-undelegate intent covering all 10 on a base-layer deployment with the 64-account lock limit.
3. Observe repeated confirmation timeouts and accounts remaining undelegating, including after restart.
## Expected
- Transaction fit checks account for both the 64-account lock limit and wire size across commit, finalize, and recovery paths. Oversized intents are split into valid transactions rather than stranded.
- Simulation after the first confirmation timeout exposes deterministic rejection errors instead of repeating doomed attempts.
- Recovered-intent diagnostics identify stuck accounts, with regression coverage for the 10-account buffered case.
## Context
Reported on v0.15.3 (`e0dd09e`), Linux x86_64, using devnet as the base layer. Intent `1262434` took 389.46 seconds to fail.
[ER failure transaction](https://explorer.solana.com/tx/3MzaokuZMwzdnC5cCpAssthMa491Xwf7z1MvvXrzLuQ3yWbfFxnoSbptoBghvQwaJXQiKXPCGiu62zr2a7JzmLwQ?cluster=custom&customUrl=https%3A%2F%2Fdevnet-as.magicblock.app%2F) · [Agave account-lock limit](https://github.com/anza-xyz/agave/blob/v4.2.2/runtime/src/bank.rs#L3621-L3629)
Final unconfirmed base-layer signature: `4moeZBGYbR4F2hQeG3scnxPbfB6iK8XkFbTt85qVJhS8hrHY7PEnUEh3PJRirpr1HWKFapZRJRWKw82ReeWpHo6a`.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.