test flow() atomicity on later-transfer failure#445
test flow() atomicity on later-transfer failure#445thedavidmeister wants to merge 1 commit intomainfrom
Conversation
Pins the documented atomicity invariant on `IFlowV5.flow()`: when a later transfer in the same flow reverts, the entire flow reverts and no earlier transfer's effects persist. The test mixes a valid ERC20 transfer with an ERC1155 transfer that fails the from-allowed check; the outer revert reason MUST be the inner failure's selector, which proves the inner revert was not caught and squashed. EVM transaction-level rollback handles the actual state revert; the test exists to lock the revert-propagation invariant against a future change that wraps inner calls in try/catch. Closes #318. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Warning Rate limit exceeded
To keep reviews running without waiting, you can enable usage-based add-on for your organization. This allows additional reviews beyond the hourly cap. Account admins can enable it under billing. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (1)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Summary
Pins the documented atomicity invariant on
IFlowV5.flow(): when a later transfer in the same flow reverts, the entire flow reverts and no earlier transfer's effects persist.The test mixes a valid ERC20 transfer with an ERC1155 transfer that fails the from-allowed check. The outer revert reason MUST be the inner failure's selector — that proves the inner revert was not caught and squashed by a wrapper.
EVM transaction-level rollback handles the actual state revert; this test exists to lock the revert-propagation invariant against a future change that wraps inner calls in try/catch.
Closes #318.
Test plan
testFlowAtomicRollbackOnLaterTransferFailure— 100 fuzz runs🤖 Generated with Claude Code