Allow hook storage to persist on pool no op #291
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Related Issue
Currently, hook contracts are unable to persist changes to their storage when they filter, postpone, or otherwise block a user's pool operation. This is caused due to the revert() thrown by the pool manager when it receives a non-matching function selector returned by the hook.
Description of changes
New "Return" bytes4 function selectors have been added for each "before" hook to indicate the hook's intention to persist its storage changes while simultaneously blocking the user's pool operation. The PoolManager has been adjusted so that if it receives one of these selectors then it will return a null value rather than revert with error.
The potential usecases for this are broad and only beginning to be explored. This upgrade will be especially empowering on chains other than Ethereum Mainnet that are conducive to more complex and sophisticated hook design due to their lower gas costs.
Some examples: