This was confusing me when I had all of them open at the same time. Better to be extra explicit
--- don't change below this line ---
ENG-4081 Took 2 minutes
Pass the signer's private key as a string around and only create a PrivateKeySigner inside Permit2 (where it's needed)
Use tycho-core Chain instead of Alloy ChainID. Create a temp method to convert between them
Create a EVMSwapEncoder that implements the executor_selector (that is evm specific)
--- don't change below this line ---
ENG-4081 Took 1 hour 7 minutes
The strategy works as follows:
- Manage approvals needed
- Compute min amount (if check amount is any):
- if slippage is defined, apply slippage on the expected amount and take the min value between that and the check amount
- if not, it's just the check amount
- Iterate through the swaps
- call the corresponding swap encoder to encode the swap
- add swap header (tokens indexes and split)
- ple encode the swaps
- Add extra inputs (amounts, token addresses, min amount, (un)wrap, number of tokens and receiver)
Misc:
- Move executor address and selector encoding inside the SwapEncoder
- Add default executor_selector to SwapEncoder
- Pass router address inside the SplitSwapStrategyEncoder
- Move Permit2 inside the SplitSwapStrategyEncoder. It is a responsibility and a specificity of the strategy to need permit2 approvals
--- don't change below this line ---
ENG-4081 Took 1 hour 21 minutes
This is a too early over generalisation. We need to encode the permit and the signature all together with the other method input variables. This way the return type will be specific to permit2 (instead Vec<u8>) anyway. For simplicity, decided to remove the generalisation and keep things simple
--- don't change below this line ---
ENG-4081 Took 2 hours 23 minutes
Took 9 seconds
Took 1 minute
- 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?
- 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
- 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
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
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