-
Notifications
You must be signed in to change notification settings - Fork 1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
skip calls to hooks when msg.sender is hook contract + test #503
Merged
Merged
Changes from 8 commits
Commits
Show all changes
19 commits
Select commit
Hold shift + click to select a range
1b71d99
skip calls to hooks when msg.sender is hook contract + test
dianakocsis cc849f5
move into callHook
dianakocsis 5c7e31d
changes
dianakocsis 87032f6
linting
dianakocsis f51464b
merge main into skip-calls-to-hooks
dianakocsis 43c5d97
re-add forge snapshots
dianakocsis 4f917fc
switch back to self instead of hook
dianakocsis cd9bff9
merge main
dianakocsis 4bf9249
more tests
dianakocsis c956195
merge main
dianakocsis c399dc1
call again and assert counter is 2
dianakocsis 5461d44
merge main
dianakocsis a55b9c1
make more clear
dianakocsis 192694f
merge main
dianakocsis aeb2dae
clearAllHookPermisssionsMask
dianakocsis 6a7251d
add comments and switch back to uint256 for now
dianakocsis 6db559e
allowance does not get decremented if the sender address is the contr…
dianakocsis 7941046
fix claims
dianakocsis 632c546
remove import console.sol
dianakocsis File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
311243 | ||
311305 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
191422 | ||
191404 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
191403 | ||
191385 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
131137 | ||
131119 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
175960 | ||
175942 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
22875 | ||
22863 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
98020 | ||
98002 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
199393 | ||
199375 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
195670 | ||
195652 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
186039 | ||
185948 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
194579 | ||
194488 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
116698 | ||
116607 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
104165 | ||
104074 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
124314 | ||
124223 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
120267 | ||
120176 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
188597 | ||
188506 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
205406 | ||
205315 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
137470 | ||
137379 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
104143 | ||
104052 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
188472 | ||
188421 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
// SPDX-License-Identifier: UNLICENSED | ||
pragma solidity ^0.8.24; | ||
|
||
import {Hooks} from "../libraries/Hooks.sol"; | ||
import {BaseTestHooks} from "./BaseTestHooks.sol"; | ||
import {IHooks} from "../interfaces/IHooks.sol"; | ||
import {IPoolManager} from "../interfaces/IPoolManager.sol"; | ||
import {PoolKey} from "../types/PoolKey.sol"; | ||
import {BalanceDelta} from "../types/BalanceDelta.sol"; | ||
import {PoolId, PoolIdLibrary} from "../types/PoolId.sol"; | ||
import {IERC20Minimal} from "../interfaces/external/IERC20Minimal.sol"; | ||
import {CurrencyLibrary, Currency} from "../types/Currency.sol"; | ||
import {PoolTestBase} from "./PoolTestBase.sol"; | ||
import {Test} from "forge-std/Test.sol"; | ||
|
||
contract SkipCallsTestHook is BaseTestHooks, Test { | ||
using PoolIdLibrary for PoolKey; | ||
using Hooks for IHooks; | ||
|
||
uint256 public counter; | ||
IPoolManager manager; | ||
uint24 internal fee; | ||
|
||
function setManager(IPoolManager _manager) external { | ||
manager = _manager; | ||
} | ||
|
||
function beforeSwap(address, PoolKey calldata key, IPoolManager.SwapParams calldata params, bytes calldata hookData) | ||
external | ||
override | ||
returns (bytes4) | ||
{ | ||
counter++; | ||
callSwap(key, params, hookData); | ||
return IHooks.beforeSwap.selector; | ||
} | ||
|
||
function callSwap(PoolKey calldata key, IPoolManager.SwapParams calldata params, bytes calldata hookData) public { | ||
IPoolManager(manager).swap(key, params, hookData); | ||
address payer = abi.decode(hookData, (address)); | ||
int256 delta0 = IPoolManager(manager).currencyDelta(address(this), key.currency0); | ||
assertEq(delta0, params.amountSpecified); | ||
int256 delta1 = IPoolManager(manager).currencyDelta(address(this), key.currency1); | ||
assert(delta1 > 0); | ||
IERC20Minimal(Currency.unwrap(key.currency0)).transferFrom(payer, address(manager), uint256(-delta0)); | ||
manager.settle(key.currency0); | ||
manager.take(key.currency1, payer, uint256(delta1)); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
// SPDX-License-Identifier: UNLICENSED | ||
pragma solidity ^0.8.20; | ||
|
||
import {Test} from "forge-std/Test.sol"; | ||
import {Vm} from "forge-std/Vm.sol"; | ||
import {PoolId, PoolIdLibrary} from "../src/types/PoolId.sol"; | ||
import {Hooks} from "../src/libraries/Hooks.sol"; | ||
import {SwapFeeLibrary} from "../src/libraries/SwapFeeLibrary.sol"; | ||
import {IPoolManager} from "../src/interfaces/IPoolManager.sol"; | ||
import {IProtocolFees} from "../src/interfaces/IProtocolFees.sol"; | ||
import {IHooks} from "../src/interfaces/IHooks.sol"; | ||
import {PoolKey} from "../src/types/PoolKey.sol"; | ||
import {PoolManager} from "../src/PoolManager.sol"; | ||
import {PoolSwapTest} from "../src/test/PoolSwapTest.sol"; | ||
import {Deployers} from "./utils/Deployers.sol"; | ||
import {GasSnapshot} from "forge-gas-snapshot/GasSnapshot.sol"; | ||
import {Currency, CurrencyLibrary} from "../src/types/Currency.sol"; | ||
import {MockERC20} from "solmate/test/utils/mocks/MockERC20.sol"; | ||
import {Constants} from "../test/utils/Constants.sol"; | ||
import {SkipCallsTestHook} from "../src/test/SkipCallsTestHook.sol"; | ||
|
||
contract SkipCallsTest is Test, Deployers, GasSnapshot { | ||
using PoolIdLibrary for PoolKey; | ||
|
||
SkipCallsTestHook skipCallsTestHook = SkipCallsTestHook(address(uint160(Hooks.BEFORE_SWAP_FLAG))); | ||
|
||
function setUp() public { | ||
SkipCallsTestHook impl = new SkipCallsTestHook(); | ||
vm.etch(address(skipCallsTestHook), address(impl).code); | ||
deployFreshManagerAndRouters(); | ||
skipCallsTestHook.setManager(IPoolManager(manager)); | ||
|
||
(currency0, currency1) = deployMintAndApprove2Currencies(); | ||
(key,) = initPoolAndAddLiquidity( | ||
currency0, currency1, IHooks(address(skipCallsTestHook)), 3000, SQRT_RATIO_1_1, ZERO_BYTES | ||
); | ||
} | ||
|
||
function test_beforeSwap_skipIfCalledByHook() public { | ||
IPoolManager.SwapParams memory swapParams = | ||
IPoolManager.SwapParams({zeroForOne: true, amountSpecified: -100, sqrtPriceLimitX96: SQRT_RATIO_1_2}); | ||
|
||
PoolSwapTest.TestSettings memory testSettings = | ||
PoolSwapTest.TestSettings({withdrawTokens: true, settleUsingTransfer: true, currencyAlreadySent: false}); | ||
|
||
MockERC20(Currency.unwrap(key.currency0)).approve(address(skipCallsTestHook), Constants.MAX_UINT256); | ||
|
||
assertEq(skipCallsTestHook.counter(), 0); | ||
swapRouter.swap(key, swapParams, testSettings, abi.encode(address(this))); | ||
assertEq(skipCallsTestHook.counter(), 1); | ||
} | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Could we add a test where we call again on the pool and the counter should be 2 but not 4? |
Oops, something went wrong.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why not just put all of this in setUp and then do the init/addLiq as needed in each of the test cases? I think it may be a bit easier to follow what exactly is being called to understand the expected count amount. And I dont think the hook address needs to change each time ie all of this can just happen once? Unless Im missing something
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
so make one hook and turn all flags on? and check that count is total 10 at the end?