Commit Graph

68 Commits

Author SHA1 Message Date
TAMARA LIPOWSKI
c3482a509a feat: TychoRouter swap method not requiring Permit2
- Assume the tokens have been transferred into our router beforehand.
2025-02-19 16:15:57 -05:00
Diana Carvalho
c940d8b536 docs(univ3): Add comment explaining msg.data
Took 55 minutes
2025-02-18 14:59:26 +00:00
Diana Carvalho
2aa63d7ec0 feat: Change signature of _handleCallback to take only bytes calldata
The selector and executor are decoded inside this function now.
For Uniswap V3 I had to manually slice the msg.data from uniswapV3SwapCallback to get the data that matters for the callback

Took 3 hours 12 minutes
2025-02-18 11:11:43 +00:00
royvardhan
2604935609 chore: update unlockCallback and uniswapV3SwapCallback 2025-02-17 22:51:40 +05:30
royvardhan
076586d776 feat: update _handleCallback, add verifyCallback with docs 2025-02-17 21:51:09 +05:30
royvardhan
14e5c127c6 chore: rm safecallback from router 2025-02-15 01:06:23 +05:30
royvardhan
9b8175aff9 chore: cleanup 2025-02-15 01:01:16 +05:30
royvardhan
ad91e485d3 feat: rename execution dispatcher to dispatcher and use dispatcher for USV4 callback 2025-02-15 00:44:28 +05:30
royvardhan
9d3b96f997 feat: add uniswapV3SwapCallback in USV3 executor 2025-02-15 00:34:07 +05:30
royvardhan
d0027e6cf2 refactor: rm callback verifier dispatcher 2025-02-14 23:11:01 +05:30
royvardhan
260f9d866f feat: add back uniswapV3SwapCallback in router 2025-02-14 23:00:23 +05:30
royvardhan
80500e615e feat: fix input decoding in usv3 executor and execution dispatcher 2025-02-14 00:53:43 +05:30
royvardhan
bd1971334e feat: update new interface in codebase 2025-02-13 20:54:54 +05:30
royvardhan
a309825769 refactor: rm usv3 callback from router and add generic callback to executor 2025-02-13 20:31:21 +05:30
Diana Carvalho
4c5e3bf6a9 fix: Verify that the executor exists in the uni v4 callback
--- don't change below this line ---
ENG-4223 Took 10 minutes
2025-02-13 12:00:59 +00:00
Diana Carvalho
591d73ba71 feat: Support uniswap v4 callback in TychoRouter
Make TychoRouter inherit from SafeCallback and then delegatecall to the UniswapV4 executor
Add a test for this. I had to update the block of our forked network in the tests. Because of this I had to update all the asserts in previous tests

Had to change the optimizer_runs in foundry.toml because of weird Yul errors when compiling

--- don't change below this line ---
ENG-4223 Took 1 hour 21 minutes

Took 7 seconds


Took 35 seconds
2025-02-13 12:00:59 +00:00
royvardhan
bdd3daffba feat: update solc and add V4Router into UniswapV4Executor 2025-02-13 00:25:25 +05:30
Diana Carvalho
582533fa31 fix: Miscellaneous audit remarks
- Move pause functions together
- Add missing zero checks
- Use openzepplin's sendValues instead of transfer

--- don't change below this line ---
ENG-4226 Took 25 minutes


Took 2 minutes
2025-02-11 16:35:26 +00:00
TAMARA LIPOWSKI
37efe52c10 fix: (TychoRouter) Revert if empty swaps
- This is for security purposes. Max uncovered a vulnerability where funds could be stolen if we don't ether the while loop (i.e. if we have empty swaps).
2025-02-10 23:49:01 -05:00
Tamara
9980170fe5 Merge branch 'main' into encoding/tnl/fix-wrapping-indices 2025-02-04 10:35:53 -05:00
TAMARA LIPOWSKI
3f4e27a348 fix: Fix bug with token indexing when wrapping/unwrapping
The issue was that we weren't indexing WETH properly since it was looking for the WETH address in tokens, when only native ETH would be in there

- Found by adding integration tests for the wrapping and unwrapping cases.
2025-02-03 22:46:20 -05:00
Diana Carvalho
2aa1df9b0d chore: Move methods around and improve docstrings
--- don't change below this line ---
ENG-4087 Took 30 seconds


Took 5 seconds
2025-02-03 16:52:31 +00:00
Diana Carvalho
0860d67d7a feat: Verify that no amount in is left in the router
--- don't change below this line ---
ENG-4087 Took 1 hour 41 minutes


Took 2 minutes
2025-02-03 16:52:26 +00:00
dianacarvalho1
81e0859c10 Merge branch 'main' into router/dc/return-eth 2025-01-31 16:47:53 +00:00
Diana Carvalho
3245ea7295 fix: transfer ETH if tokenOut is ETH
And not only if unwrapETH is true
There might be pools that deal in ETH directly

--- don't change below this line ---
ENG-4081 Took 7 minutes
2025-01-31 15:58:23 +00:00
Diana Carvalho
c85c353e34 fix: Fix token index order in strategy encoding.
The contract relies on this order!!

Remove TODOs and comments

--- don't change below this line ---
ENG-4081 Took 1 hour 12 minutes


Took 12 seconds
2025-01-31 15:34:12 +00:00
TAMARA LIPOWSKI
4d697bfebf test: Router integration test with many TODOs 2025-01-31 15:34:12 +00:00
Harsh Vardhan Roy
8c4e48b32a Merge branch 'main' into router/hr/ENG-4194-Batch-Set-Executor 2025-01-30 21:21:52 +05:30
Tamara
94b214384b Merge branch 'main' into router/tnl/ENG-4034-usv3-executor 2025-01-30 10:33:18 -05:00
TAMARA LIPOWSKI
83bbabddd1 chore: rename amountOwed -> amountIn
...for consistency.

Also remove comment. We will keep exact_out to avoid future interface changes.
2025-01-30 10:33:09 -05:00
royvardhan
c653062027 feat: rename batchSetExecutor to setExecutors 2025-01-30 19:29:24 +05:30
royvardhan
719a15c0e5 chore: fmt 2025-01-30 19:00:15 +05:30
royvardhan
ea504faca1 feat: replace setExecutor with batchSetExecutor 2025-01-30 18:58:54 +05:30
TAMARA LIPOWSKI
ca32446a9e feat: UniswapV3Executor and integration tests
- Note: I think we can get the fee straight from the pool... why did we always encode this and send it from the solver? Is this bound to change sometimes?
2025-01-29 19:51:17 -05:00
Diana Carvalho
63b94b5584 fix: Remove amountReceived and dataOffset from the callback verification
--- don't change below this line ---
ENG-4047 Took 20 minutes
2025-01-29 20:19:34 +00:00
Diana Carvalho
fafeba9248 feat: Implement generic callback
--- don't change below this line ---
ENG-4047 Took 26 minutes


Took 4 minutes

Took 8 seconds

Took 59 seconds

Took 22 seconds
2025-01-29 20:19:34 +00:00
TAMARA LIPOWSKI
96af542923 feat: fixed USV3 Verification
- We cannot use the regular v3-periphery library because of outdated solc versions. I've copied the v3-updated library which we have used in our previous project
2025-01-29 12:12:58 -05:00
TAMARA LIPOWSKI
7822c4f913 feat: USV3 verification 2025-01-29 10:10:13 -05:00
Diana Carvalho
655cf91984 feat: Assume that funds will never go straight from a pool to the receiver
- The funds will always go through the router
- Rename splitSwap for Swap
- Improve tests

--- don't change below this line ---
ENG-4041 Took 24 minutes


Took 23 seconds

Took 42 seconds
2025-01-28 17:10:15 +00:00
Diana Carvalho
dfa7033d2e feat: Smother slither and add a reentrancy guard in swap()
--- don't change below this line ---
ENG-4041 Took 34 minutes
2025-01-28 16:59:29 +00:00
Diana Carvalho
c2347ac79e feat: Add executor and selector to Swap
Add tests to Swap
Modify ExecutionDispatcher and TychoRouter to account for these changes

--- don't change below this line ---
ENG-4041 Took 57 minutes


Took 10 seconds
2025-01-28 16:59:29 +00:00
Diana Carvalho
dfa0f7d176 chore: Address compilers warnings and use EXECUTOR_SETTER instead of Bob in tests
--- don't change below this line ---
ENG-4041 Took 48 seconds


Took 18 seconds
2025-01-28 16:59:29 +00:00
Diana Carvalho
d8de65aedf fix: Remove checkMinAmount
If minAmountOut == 0, then skip the check

--- don't change below this line ---
ENG-4041 Took 35 minutes
2025-01-28 16:59:29 +00:00
Diana Carvalho
50429ad05c feat: Add swap method with tests
Changes:
- If the tokenIn is ETH, skip permit2 approval
- Make executors payable: When using delegatecall the executor inherits the execution context of whoever calls it. Our main swap function can accept ETH, it needs to be payable so by consequence the executors also need to be.
- Set uniswap v2 executor in test router
- Add tests for all possible cases of swap
- Add tests for all cases of splitSwap
- Add test functions to handle permit2 and encode swaps

--- don't change below this line ---
ENG-4041 Took 3 hours 50 minutes

Took 49 seconds


Took 14 seconds
2025-01-28 16:59:29 +00:00
Diana Carvalho
a8f6fc1eec feat: Add swap method (first attempt)
Will add tests and fullproof it in a future PR

--- don't change below this line ---
ENG-4041 Took 8 minutes

Took 42 seconds

Took 5 seconds
2025-01-28 16:59:29 +00:00
Diana Carvalho
3b2d9fcbdf feat: Wrap and unwrap ETH
--- don't change below this line ---
ENG-4041 Took 2 hours 28 minutes

Took 14 seconds

Took 11 seconds

Took 2 minutes

Took 1 minute


Took 7 minutes
2025-01-28 16:59:29 +00:00
Tamara
cb38be7ad6 Merge branch 'main' into router/tnl/ENG-4046-static-call-verifier 2025-01-27 10:21:15 -05:00
royvardhan
4ee337d1ee fix: ci 2025-01-27 20:44:01 +05:30
Harsh Vardhan Roy
68f07b1852 Merge branch 'main' into router/hr/ENG-4171-Implement-Pause 2025-01-27 20:40:36 +05:30
TAMARA LIPOWSKI
8ef061fd75 refactor: Move code check to CallbackVerificationDispatcher
[copied from exact same reasoning with execution code-checking]

I was inspired to do this because, when disabling the slither check for the staticcall when calling the callback verifier, I realized it's not clear from the same contract that we have already checked for contract code existence when setting the verifier. This made me feel uneasy, as this contract can then not stand alone and must rely on the higher level contract to safely check for code existence, otherwise the staticcall is unsafe. Keeping this logic in a separate contract seems error-prone to me, as we may remove the check for code existence without immediately realizing the implications of doing so.

For this reason I have organized it as follows:
- Logic/tests relating to proper roles/access control in the main TychoRouter.
- Lower-level logic/tests that check contract validity before setting the callback verifier in the CallbackVerificationDispatcher
2025-01-24 17:17:10 -05:00