Commit Graph

87 Commits

Author SHA1 Message Date
Diana Carvalho
e79347842f fix(Bebop): Fix encoding and tests
Misc: Fix revert condition in UniswapXFiller

Took 1 hour 20 minutes
2025-08-13 15:11:43 +01:00
Diana Carvalho
76a09d0402 fix: Simplify the BebopExecutor and fix Single tests
Make specific quotes that are expected to be used by the TychoRouter for the tests. Do not use the BebopHarness
Commented out Aggregate tests

Took 6 hours 40 minutes
2025-08-12 16:11:42 +01:00
Diana Carvalho
003ab7cea8 fix: After merging main fixes
Took 10 minutes
2025-08-08 14:54:40 +01:00
Diana Carvalho
42609df650 Merge branch 'refs/heads/main' into feat/bebop-rfq-encoder-and-executor
# Conflicts:
#	config/executor_addresses.json
#	foundry/scripts/deploy-executors.js
#	foundry/test/TychoRouterSequentialSwap.t.sol
#	foundry/test/assets/calldata.txt
#	src/encoding/models.rs
#	tests/common/mod.rs

Took 21 minutes
2025-08-08 14:40:03 +01:00
TAMARA LIPOWSKI
95c51247f7 fix: Replace smart pointer with regular pointer
Apparently was not necessary and was causing clippy warnings.

```
warning: you seem to be trying to use `&Box<T>`. Consider using just `&T`
  --> src/encoding/models.rs:91:32
   |
91 |     pub protocol_state: Option<&'a Box<dyn ProtocolSim>>,
   |                                ^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&'a dyn ProtocolSim`
   |
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box
   = note: `#[warn(clippy::borrowed_box)]` on by default
   ```
2025-07-22 12:18:54 -04:00
TAMARA LIPOWSKI
c217702560 feat: Add protocol state to Swap object
- This consists of lots of necessary battles with lifetimes.
2025-07-22 12:13:39 -04:00
Diana Carvalho
2c25b5a18f feat: Use Chain from tycho-core and remove current implementation
--- don't change below this line ---
ENG-4705 Took 29 minutes
2025-07-10 17:20:53 +01:00
Diana Carvalho
f1281eb703 Merge branch 'refs/heads/main' into feat/bebop-rfq-encoder-and-executor
# Conflicts:
#	foundry/test/TychoRouterProtocolIntegration.t.sol
#	foundry/test/TychoRouterTestSetup.sol
#	foundry/test/assets/calldata.txt
#	foundry/test/protocols/BebopExecutor.t.sol
#	src/encoding/evm/tycho_encoders.rs

Took 4 minutes
2025-06-24 10:17:33 +01:00
Diana Carvalho
e704151404 fix: Remove unnecessary clones from encoding
Use references if possible

Took 3 minutes
2025-06-23 12:54:09 +01:00
pedrobergamini
84fbe0ded6 refactor: update Rust encoding to remove Multi order type 2025-06-16 15:32:42 -03:00
pedrobergamini
0106c5c425 chore: move BebopOrderType to models.rs 2025-06-08 01:01:51 -03:00
Diana Carvalho
eec50f8822 feat: Extend Swap to hold user_data: Option<Bytes>
Took 25 minutes
2025-06-05 15:47:40 +01:00
Diana Carvalho
73c1a2db6a chore: Rename selector to function signature
Took 8 minutes
2025-05-27 09:37:24 +01:00
Diana Carvalho
c62af2f232 feat: Don't sign permit2 objects
We don't want to be responsible for holding private keys -> the user is the one that should do this outside of tycho-execution

Done:
- Remove signature from EncodedSolution
- Introduce UserTransferType and pass that everywhere instead of is_permit2_active and token_in_already_in_router
- Remove signing from permit2. Added it to the encoding_utils.rs only
- Mark encode_full_calldata as deprecated
- Backwards compatibility: still accept a signer for the encode_full_calldata case
- Update all tests

Took 2 hours 10 minutes


Took 13 minutes
2025-05-26 12:50:11 +01:00
Diana Carvalho
75f2c3a1c5 feat: Create non alloy specific Permit and PermitDetails structs
- Add try_from methods to convert them to the corresponding Solidity representations
- Update tests

Took 56 seconds
2025-05-23 11:31:05 +01:00
Diana Carvalho
facdf716bd feat: Add interacting_with to EncodedSolution
- Remove encode_full_calldata from the TychoEncoder trait
- Make the TychoExecutorEncoder use encode_solutions instead of encode_full_calldata
- Update tycho-encode.rs accordingly

Took 1 hour 3 minutes


Took 12 seconds
2025-05-22 14:43:12 +01:00
Diana Carvalho
08056c4a6c feat: Remove slippage and expected_amount from Solution
The user is responsible for coming up with a sensible value for this themselves

Took 37 minutes
2025-05-22 14:43:12 +01:00
Diana Carvalho
4e8c6ddc8c feat: Separate encoding swaps from encoding txs
This way the user is responsible for encoding the Tycho Router method inputs that are used as guardrails in execution.

Interface changes:
- Create EncodedSolution
- StrategyEncoder
  - don't need to know have permit2 or token_in_already_in_router as attributes anymore
  - encode_strategy returns EncodedSolution now (no method encoding done here now)
- TychoEncoder
  - add encode_solution() method. This is the recommended method for users
  - needs to have permit2, token_in_already_in_router and router_address as attributes
  - permit creation is made in the router now

Also:
- create encoding_utils.rs
- update all tests

Took 2 hours 42 minutes


Took 3 minutes

Took 13 minutes
2025-05-22 14:43:12 +01:00
Diana Carvalho
cc9e88cfed feat: Add transferFromNeeded to non permit2 methods
This will block an attempt to transfer from the user when we expect the funds to already be in the router.

chores:
- add docs
- in EncodingContext, rename transfer to transfer_type

Took 58 minutes
2025-05-19 12:02:57 +01:00
Diana Carvalho
38748925b3 feat: Bring back TransferType and simplify encoding logic
Took 1 hour 53 minutes
2025-05-16 16:59:35 +01:00
Diana Carvalho
09ff7691f8 chore: Make naming consistent: transfer_needed, approval_needed, etc
Took 46 minutes
2025-05-15 14:52:43 +01:00
Diana Carvalho
0f9af65846 feat: Support new transfer logic in encoding
The transfer from the user into the router is supposed to happen in the router (we only support this in the executors for callback constrained protocols). This is necessary because of some security concerns that were found in the audit. This way we reduce the space of attack.
- Refactored TransferOptimization not to handle TransferTypes anymore but just return bools.
- Split get_transfer_type into get_transfers and get_in_between_transfer. Updates tests
- Updated the strategies to use this
- Updated function signatures to pass transfer_from and funds_receiver
- Updated SwapEncoders to handle this
- SplitSwapStrategy just assumes all tokens are sent to and from the router at all times

Took 2 hours 46 minutes
2025-05-14 18:00:19 +01:00
TAMARA LIPOWSKI
30dc3f7682 chore: renamings for clarity
- Also added a check for length in the Curve executor.
2025-04-23 12:31:41 +01:00
TAMARA LIPOWSKI
a301a1cef3 feat: (WIP) Support selection of transfer into router
- For protocols like Balancer and Curve, which expect funds to be in the router at the time of swap, we must support also transferring funds from the user into the router. Doing this in the router would mean we are dealing with transfers in two different places: in the router main methods and in the executors. To avoid this, we are now performing transfers just in the executors, and two transfer types have been added to support transfers into the router.

TODO:
- Add this for Balancer and Curve (only added for USV4 atm).
- TODO consider renaming TRANSFER_FROM and TRANSFER_PERMIT2 to include "pool" in the name
2025-04-23 12:31:41 +01:00
TAMARA LIPOWSKI
59a80dc392 feat: Optimize transfer to first pool
TODO: Update integration tests on solidity side, since a few were now updated on the encoding side to use a transferFrom.
2025-04-23 12:31:41 +01:00
Diana Carvalho
f5e712e0ff feat(tycho-router-encoder): Select strategy depending on the solution
- The tycho router address default is set at the EncoderBuilder level (not inside the strategies)
- Rename TychoCoreChain to TychoCommonChain
- Only take TychoCommonChain as an argument at the outermost level: EncoderBuilder. Everywhere else we use the execution Chain right away

--- don't change below this line ---
ENG-4332 Took 1 hour 10 minutes
2025-04-23 12:30:13 +01:00
TAMARA LIPOWSKI
4878229e1d fix: Set native and wrapped tokens for Unichain 2025-04-02 16:06:26 +02:00
TAMARA LIPOWSKI
8865e22116 feat: Make EncodingContext.router_address optional 2025-04-02 11:24:04 +02:00
TAMARA LIPOWSKI
d5c589d2c0 feat: Remove router_address from Solution, set default
- The router address can be set when creating the SplitSwapStrategy, which now takes an Option<Bytes> as input during initialization (another breaking interface change)
- This change allows us to change our router address in the future with minimal effect on the users. Users should only pass the router address in the split swap initialization if they intend to use their own router for execution.
- This change also means that the router address does not need to be passed with the solution, even when using the executor strategy (which was pointless).
- I thought of having a router_address() method to set this in the encoder builder - but it seemed too messy, since we don't need the router address for execution for example. We would then potentially unnecessarily load and set the default router address when not needed. It is also not even used at the highest level EVMTychoEncoder, so it makes more sense for it to be directly associated with the swap strategy instead.
- Users will now not be able to encode for different routers without re-initializing the strategy. We assumed this use case to be very rare and not worth supporting.
2025-04-02 11:18:30 +02:00
kayibal
379858bfca fix: Handle unichain chain id 2025-03-27 16:58:34 +01:00
kayibal
0836bf7d53 feat: switch to tycho_commons 2025-03-27 16:58:34 +01:00
royvardhan
0e049b7c44 chore: rm selector from Transaction 2025-02-24 22:20:51 +05:30
TAMARA LIPOWSKI
2c92596681 chore: merge main 2025-02-20 12:33:59 -05:00
Tamara
be21d10a41 Merge branch 'main' into router/tnl/ENG-4253-usv4-integration 2025-02-20 12:16:07 -05:00
royvardhan
29bc662ba9 refactor: use chain and protocol component from tycho_core::models 2025-02-20 22:36:50 +05:30
royvardhan
7dd59dbe34 fix: add decode_hex to models 2025-02-20 21:54:33 +05:30
royvardhan
dc38f108c3 refactor: simplify chain object and move decode_hex to utils 2025-02-20 21:54:33 +05:30
royvardhan
83f1955094 feat: add native and weth addresses for supported networks 2025-02-20 21:54:33 +05:30
TAMARA LIPOWSKI
81c8a04cbb fix: Pass proper group tokens in EncodingContext...
Also:
- Remove amount_out_min. Our reasoning is that we perform high-level final amount checks anyway (and expect users to do the same). Lower-level USV4 min amount checks are redundant.
2025-02-19 16:27:56 -05:00
Harsh Vardhan Roy
6c4bb376fd Merge branch 'main' into router/hr/ENG-4239-usv4-swap-encoder 2025-02-20 00:07:43 +05:30
royvardhan
c472cda697 refactor: make group tokens and amount out min non optional 2025-02-20 00:05:47 +05:30
Diana Carvalho
8537d27469 feat: Remove direct_execution from Solution
This is handled when creating a new TychoEncoder

--- don't change below this line ---
ENG-4246 Took 4 minutes
2025-02-19 17:03:13 +00:00
royvardhan
1bfe656e6b feat: add new attributes in encoding context, update usv4 swap encoder and tests 2025-02-19 08:39:21 +05:30
TAMARA LIPOWSKI
e94154bc2d fix: Do not count intermediary tokens in indices
To achieve this, a small refactor was necessary with the introduction of a SwapGroup object, and a separate method to create a vec of these objects. This then separates all logic related to combining protocol data nicely and cleanly into its own method with its own tests.

TODO:
- Deal with split swaps and add test for split swap scenario
- Clean up all existing PR comments
2025-02-14 18:48:39 -05:00
TAMARA LIPOWSKI
1c565deb57 refactor: (Solution) replace check_amount with checked_amount
- This is to have consistency with checked_token
2025-02-11 11:25:58 -05:00
Diana Carvalho
dd7ecac324 feat: Add selector to Transaction
Return selector in the StrategyEncoder. This is needed for the ExecutorStrategyEncoder

--- don't change below this line ---
ENG-4088 Took 12 minutes


Took 13 seconds
2025-02-11 12:20:47 +00:00
Diana Carvalho
a234ff701f feat: Remove router_address from TychoEncoder
Make the router address mandatory for the Solution attribute instead

--- don't change below this line ---
ENG-4088 Took 30 minutes
2025-02-07 14:58:09 +00:00
Diana Carvalho
bef4740a1d fix: After rebase fixes
--- don't change below this line ---
ENG-4088 Took 2 minutes
2025-02-07 12:16:46 +00:00
royvardhan
3bb5b0c7c6 fix: fmt 2025-02-06 22:44:18 +05:30
Harsh Vardhan Roy
0e3ce00698 Merge branch 'main' into encoder/hr/ENG-4093-bin 2025-02-06 22:41:23 +05:30