Mini instruction fixes - #486
Conversation
… manager to determine liquidation action order
|
Repository Guard
Repository GuardCargo dependency pinning
Cross-program Anchor/Solana version consistency
solana-program crate pin
Anchor.toml solana_version
Crate minimum age
Yarn package.json pinning
npm minimum age
Workflow toolchain consistency
GitHub Action SHA pinning
Sensitive program / config changes
Overall status: pass Lockfile freshness (Cargo.lock + yarn.lock) is checked by the workflow directly and cannot be bypassed. The sensitive-diff section is a review hint - CODEOWNERS handles the actual merge gate. |
| dao.liquidator = Some(*liquidator); | ||
|
|
There was a problem hiding this comment.
Later liquidation replaces estate authority
When two hostile-liquidation proposals are launched before either finishes and both pass, each finalization unconditionally assigns its proposed liquidator, causing the second proposal to replace the first estate administrator with a different key. How this was verified: The new finalization branch assigns dao.liquidator without the replay guard present in the removed liquidation instruction, and this field authorizes estate proposal enqueueing.
Greptile Summary
This PR tightens mini-instruction validation, updates DAO and proposal migration behavior, changes buyback scheduling to use a cycle count, and moves hostile-liquidation state changes into proposal finalization.
Confidence Score: 3/5
The PR should not merge until hostile-liquidation finalization preserves the first terminal liquidator instead of allowing later proposals to replace it.
Multiple liquidation proposals can coexist before liquidation, and the new finalization path unconditionally writes each passing proposal's liquidator into the DAO; the resulting identity controls who may enqueue estate transactions.
Files Needing Attention: programs/futarchy/src/instructions/finalize_proposal.rs
Security Review
A later hostile-liquidation proposal can overwrite the terminal liquidator identity established by an earlier passed proposal, transferring estate-management authority. How this was verified: The new finalization branch assigns
dao.liquidatorwithout the replay guard present in the removed liquidation instruction, and that field authorizes estate proposal enqueueing.Important Files Changed
ExecuteArbitraryrepresentation while preserving launched timing and threshold snapshots.Reviews (1): Last reviewed commit: "adjust buyback for jup trigger order" | Re-trigger Greptile