- This was originally remaining if no callback was performed, possible resulting in unexpected behaviour and an increased attack surface.
- Also specify nonzero slot for transient storage in order to reduce the risk of dangerous slot collision.
- Store the executor address when deploying instead.
- We would like to keep all instances of tload and tstore within the callback mechanism of our main TychoRouter contract for security reasons and to prevent any unexpected behaviour
- This way it's easy to reason that UniswapV4Executor will only ever execute a delegatecall to itself. Before it could in theory execute a delegatecall to any address. One had to look at all occurences of tstore(0, x) to ensure the address was constrained.
## [1.0.0](https://github.com/propeller-heads/tycho-execution/compare/0.81.0...1.0.0) (2025-04-22)
### Features
* (WIP) Support selection of transfer into router ([528bd74](528bd746f7))
* Add sequential swap methods ([2e3ffa2](2e3ffa2c70))
* Add SequentialSwap integration test with regular approvals ([8836598](8836598e53))
* Add SingleSwap integration test and fix bug in method signatures ([9c4dfef](9c4dfef80d))
* Add TokenTransfer class to BalancerV2 ([8e7dd0b](8e7dd0b9e7))
* Add TokenTransfer class to Curve ([0e0dff7](0e0dff7f5a))
* Add transfer out for Curve ([005c5a6](005c5a6207))
* Add transfer out for Uniswap V4 ([534e4f0](534e4f00db))
* Allow for token_in_already_in_router ([655c0b2](655c0b2635))
* allow to pass msg.sender to USV3 callback ([bf4b229](bf4b229268))
* allow to pass msg.sender to USV3 callback ([e71a0bb](e71a0bb354))
* Decode single and sequential swaps in LibSwap ([9be4845](9be48456e5))
* Delete EVMStrategyEncoder (this is now unnecessary) ([1fabef7](1fabef7a97))
* Do not use V4Router for uniswap v4 ([09b5a73](09b5a732ef))
* ExecutorTransferMethods helper contract ([abd9db9](abd9db937d))
* ExecutorTransferMethods in UniswapV3Executor ([dbbd30e](dbbd30e596))
* ExecutorTransferMethods in UniswapV3Executor ([e5426f3](e5426f3038))
* Fix rollFork usage for Ekubo test ([d7b5e6d](d7b5e6dba5))
* Make USV3 callback work with direct executor call ([51a7910](51a7910844))
* No more fee taking ([89f9121](89f9121e4c))
* Optimize transfer to first pool ([bf63696](bf63696142))
* Proper USV2Executor transfer decoding + tests ([b7ff870](b7ff870a7c))
* Proper USV2Executor transfer decoding + tests ([9dce2c7](9dce2c7465))
* Proper USV3Executor transfer decoding + tests ([1e37320](1e37320087))
* Refactor callback for pancakeV3 and Ekubo to use transient storage ([deb10b8](deb10b82de))
* Refactor callback to use transient storage ([af44956](af449562b0))
* Refactor TychoEncoder ([1996fd3](1996fd39e8))
* sequential swap solution validation ([efa5096](efa5096661))
* Single swap methods. ([72ccadc](72ccadcaae))
* SingleSwapStrategyEncoder ([5efeb8b](5efeb8b305))
* SingleSwapStrategyEncoder ([03f6961](03f6961b13))
* SingleSwapStrategyEncoder ([dbf5d1d](dbf5d1ddda))
* Support in between swaps optimizations ([83d3721](83d3721bf1))
* Support out transfer straight to the receiver ([d28c254](d28c254225))
* Support returning values from the callback ([fb35a53](fb35a5305a))
* Support using the TransferType in uniswap v4 ([2ecbabe](2ecbabeafc))
* **tycho-router-encoder:** Select strategy depending on the solution ([7f14f1a](7f14f1a4ff))
* Use TokenTransfer optimization helper in Ekubo ([d4e8642](d4e864272d))
### Bug Fixes
* Add slither ignore for loop call ([15f4ed5](15f4ed5d36))
* After rebase fixes ([ae30218](ae30218842))
* bad merge ([03ef744](03ef744373))
* Bring back receiver address zero check ([8e60b6b](8e60b6beba))
* Calldata size for Ekubo pay callback ([fb855d0](fb855d00a4))
* Conscious slither silencing ([a645fc7](a645fc72ab))
* consider wrapping scenario when getting transfer type ([028e860](028e8605a1))
* Fix after merge with main ([3de5a19](3de5a192b6))
* Fix executor address in test and remove duplicated test ([9456dc7](9456dc7b0b))
* Fix integration tests with transfer in method support ([0f3a910](0f3a9101b9))
* fix slither CI action ([7431b26](7431b266e1))
* Fixes after merge with feature branch ([26e6c6c](26e6c6c266))
* Integration tests after merge ([55242fb](55242fb8c4))
* No more EVMStrategyEncoder ([fbbc4c5](fbbc4c5277))
* Post rebase fixes ([01483c4](01483c4407))
* Prevent multiple callbacks ([f91b101](f91b101a94))
* properly add ekubo_v2 to constants ([24dd814](24dd814098))
* Remove --ignore-compile flag for slither ([353667e](353667e565))
* Remove router_address from Solution object ([9eb18f4](9eb18f4474))
* Rename constants and update docstrings for clarity ([11dffdc](11dffdcb28))
* test fix after rebase ([e05ffed](e05ffedd5d))
* Test+formatting fixes after rebase. ([6cf0f52](6cf0f523c1))
* TransferType renaming after rebase ([12c410b](12c410bb03))
* unsupported protocols for chained swaps are always unsupported ([9ce6fc0](9ce6fc0153))
* USV3 encoding/decoding after rebase ([2d0a3ac](2d0a3ac3fd))
- Needed to add ekubo and uniswap v4 to callback-limited protocols.
- I had to bump the fork block in all of our integration tests: The way it was before meant that certain integration tests were using certain executor addresses, and others were using different ones, because of the redeployment. This was a pain to account for on the rust side. Instead, all tests now use an Ekubo-compatible fork block. Values needed to be updated because of price changes between blocks.
- This fee is not the same depending on the fork. For example, Pancake V2 uses a 0.25% fee, while the USV2 fee is 0.3%. We were wrongly hard-coding this fee to 0.3%.
- We have decided to now support calling our executors normally (without using delegatecalls) since they now support specifying token transfers.
- This was disabled for UniswapV3 in the past also because of data decoding issues. This seems to be the solution, though.
Do our own implementation. In the end this is much cleaner than I expected and I was able to do a few improvements:
- we don't need to use actions. using function selectors and delegate call instead
- we don't need to convert into V4 Router types
- we don't need to check balances to get the amount out, we can just use the returned value
--- don't change below this line ---
ENG-4437 Took 3 hours 56 minutes
Took 3 minutes
Took 11 minutes