Commit Graph

377 Commits

Author SHA1 Message Date
Diana Carvalho
de1c782bc1 fix: Calculate min_amount_out correctly and extend test to prove this
--- don't change below this line ---
ENG-4087 Took 1 minute
2025-01-31 18:42:09 +00:00
Diana Carvalho
1a8e0f102c chore: Make objects public
Remove dead_code check and leftover file after a merge
Improve some docstrings

--- don't change below this line ---
ENG-4087 Took 1 hour 39 minutes
2025-01-31 18:40:59 +00:00
TAMARA LIPOWSKI
5a81ed6be5 fix: Expect decimal during encoding, add assert to test
- The util function was previously expecting a value between 0 and 100, which we felt was a weird UI.
- In integration test - make sure we spent all input tokens
2025-01-31 12:04:53 -05:00
TAMARA LIPOWSKI
ff3c7aa629 test: Split swap integration test 2025-01-31 11:34:50 -05: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
TAMARA LIPOWSKI
b01fa4cf04 test: Change some addresses to match contract test
- Use Alice's PK to match our router test, set her as the receiver too
- Component id should be a usv2 pool
- Use our router test's router address as the test's router address
- Use our test's contract (address(this)) as the sender
2025-01-31 15:34:12 +00:00
TAMARA LIPOWSKI
5d6f0c1673 fix: Fix selector - shouldn't contain spaces
I found this because I kept hitting the fallback function, meaning the selector wasn't recognized
2025-01-31 15:34:12 +00:00
Diana Carvalho
b047d9762e test: Add test for tycho encoder
Rename RouterEncoder to TychoEncoder

--- don't change below this line ---
ENG-4081 Took 21 minutes
2025-01-31 12:41:37 +00:00
TAMARA LIPOWSKI
5f3d4406bd fix: replace all unwraps with proper error handling
- Or more elegant assignments in place of the `.is_some()` and `.unwrap()` method.
2025-01-30 17:19:54 -05:00
Diana Carvalho
01d101acb5 chore: Move ple_encode to EVMStrategyEncoder
--- don't change below this line ---
ENG-4081 Took 3 minutes
2025-01-30 19:47:36 +00:00
Diana Carvalho
575c5bea5e fix: Use max instead of min to get the min_amount_out
between slippaged amount and checked amount
Save router's address as Bytes and not String

--- don't change below this line ---
ENG-4081 Took 7 minutes
2025-01-30 19:44:57 +00:00
Diana Carvalho
a28b54888e fix: Post merge's fixes
Because of the renaming, git couldn't identify the new files and handle the conflicts gracefully.
Copied implementation for ExecutorStrategyEncoder from main

Rollbacked on decision to encode the executor address and selector inside the SwapEncoders. This is only necessary for certain strategies. So it should be done at the strategy level

--- don't change below this line ---
ENG-4081 Took 35 minutes
2025-01-30 19:38:22 +00:00
Diana Carvalho
01df08deaa Merge remote-tracking branch 'origin/encoding/dc/ENG-4081-split-swap-strategy' into encoding/dc/ENG-4081-split-swap-strategy 2025-01-30 19:01:32 +00:00
TAMARA LIPOWSKI
5b86ae4ac5 docs: (split strategy test) better calldata comments
...for clarity and debugging purposes.
2025-01-30 12:45:36 -05:00
Diana Carvalho
8fd3deba70 Merge branch 'refs/heads/main' into encoding/dc/ENG-4081-split-swap-strategy
# Conflicts:
#	src/encoding/evm/router_encoder.rs
#	src/encoding/evm/strategy_encoder/encoder.rs
#	src/encoding/evm/strategy_encoder/selector.rs
#	src/encoding/strategy_encoder.rs

Took 2 minutes
2025-01-30 16:08:08 +00:00
royvardhan
9c35da0760 chore: rename straight_to_pool to direct_execution 2025-01-30 21:17:25 +05:30
royvardhan
8cb95f0950 feat: remove exact_out from USV2 2025-01-30 21:17:25 +05:30
royvardhan
95d45975ad chore: encoder test naming 2025-01-30 21:17:25 +05:30
royvardhan
4ef9b0b82f chore: use Bytes 2025-01-30 21:17:25 +05:30
royvardhan
1b8bf56c75 feat: resolve pr comments 2025-01-30 21:17:25 +05:30
royvardhan
0196767eff feat: add swap test with hex for univ2 executor 2025-01-30 21:17:25 +05:30
royvardhan
c482e21a5f feat: add univ2 executor test with hex 2025-01-30 21:17:25 +05:30
royvardhan
0007c4924c chore: update executor encoder tests 2025-01-30 21:17:25 +05:30
royvardhan
d2289c3765 chore: update test 2025-01-30 21:17:25 +05:30
royvardhan
ad70a0d5a8 feat: add executor encoder test 2025-01-30 21:17:25 +05:30
royvardhan
5c396512cf feat: update ExecutorEncoder interface and relevant types 2025-01-30 21:17:25 +05:30
Diana Carvalho
82e671df39 fix: Use abi_encode_packed in ple_encode()
--- don't change below this line ---
ENG-4081 Took 17 minutes
2025-01-30 15:39:07 +00: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
Diana Carvalho
6e8d2ede59 feat: Simplify router encoder
Don't make selector() a member of the StrategyEncoder trait. It is needed only for certain strategies. The strategy should manage it itself.

--- don't change below this line ---
ENG-4081 Took 17 minutes
2025-01-30 15:19:09 +00:00
Diana Carvalho
089e7d2e0f feat: Add ChainId model
Remove to_chain_id helper method

--- don't change below this line ---
ENG-4081 Took 28 minutes
2025-01-30 15:01:53 +00:00
Diana Carvalho
0e70e827a0 chore: Rename encoder to strategy/swap_encoder
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
2025-01-30 13:19:09 +00:00
Diana Carvalho
7a8872cc41 fix: Don't leak evm specific code to interfaces(PrivateKeySigner, Chain)
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
2025-01-30 13:17:23 +00:00
Diana Carvalho
feb91cc639 feat: Implement SplitSwapStrategyEncoder
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
2025-01-30 11:23:32 +00:00
Diana Carvalho
3a69bbf603 feat: Remove generalisation on user approvals manager
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
2025-01-30 11:23:32 +00:00
TAMARA LIPOWSKI
d8b44f623b fix: Remove exactOut from USV3 encoding
- We don't support exactOut atm
2025-01-29 16:56:45 -05:00
royvardhan
877f625efc fix: clippy 2025-01-28 22:27:26 +05:30
Harsh Vardhan Roy
5f5f30ee2d Merge branch 'main' into router/hr/ENG-4035-Balancer-V2-Executor 2025-01-28 22:17:05 +05:30
TAMARA LIPOWSKI
d95b74bb4e chore: small improvements
- Easier less convoluted way to decode address from string
- No more tokio test (not necessary)
- zero_for_one -> zero_to_one for consistency
2025-01-28 09:54:49 -05:00
royvardhan
a6a624b740 fix: balancer v2 encoder bug 2025-01-28 19:49:08 +05:30
TAMARA LIPOWSKI
9c63e099a9 feat: UniswapV3SwapEncoder
- No more supply owed action type or action data - we will always transfer from our router using a regular transfer in the callback.
- The receiver will always be sent with the actual swap call, meaning that no forward received action type or data is necessary either.
- We decode the pool fee as le-bytes and not be-bytes because that's how it's stored: 3c08359cf1/substreams/ethereum-uniswap-v3/src/modules/1_map_pool_created.rs (L64)
2025-01-27 14:25:57 -05:00
royvardhan
7c198fff92 fix: async 2025-01-27 13:44:03 +05:30
royvardhan
9cecea8968 feat: add balance v2 encoder test 2025-01-27 13:44:03 +05:30
Diana Carvalho
b9cfc4a35b fix: Small improvements
- Rename test
- Improve error messages
- Remove unnecessary asserts

--- don't change below this line ---
ENG-4063 Took 52 seconds
2025-01-23 15:53:13 +00:00
Diana Carvalho
04e925fe81 fix: Correct encoding of the approvals
- Add data validations similar to the ones done in the Permit2 SDK
- Fix Domain main (!!!) It's Permit2 not Permit
- Return the whole function signature data (owner, permit_single, signature) encoded

test improvements:
- Don't compare the timestamps, this was making the test fail sometimes and pass other times
- Add a test to run on an anvil fork and actually call permit2 contract to double check the encoded data works

misc:
Rename get_allowance_data -> get_existing_allowance

--- don't change below this line ---
ENG-4063 Took 5 hours 19 minutes


Took 11 seconds
2025-01-23 15:52:19 +00:00
Diana Carvalho
ce9ae49e6f feat: Implement Permit2
- Retrieve allowance data from an RPC
- Encode approvals:
  - Create PermitSingle (and PermitDetails)
  - Use alloy eip712 to get signing hash on typed data
  - Sign data
- Add chrono and alloy eip712 and signer-local to Cargo.toml

--- don't change below this line ---
ENG-4063 Took 1 hour 58 minutes

Took 18 seconds

Took 32 seconds

Took 9 seconds

Took 1 minute


Took 32 minutes
2025-01-23 15:52:19 +00:00
TAMARA LIPOWSKI
ef07f49698 chore: merge main 2025-01-22 09:51:50 -05:00
TAMARA LIPOWSKI
748a3f06c3 chore: Renamings for clarity 2025-01-22 09:33:08 -05:00
TAMARA LIPOWSKI
cc979880e2 chore: Rename address_for_approvals -> router_address
When will this not be the router address that we use for approvals? It will always be the router address. address_for_approvals sounds to me very vague (which approvals?).
2025-01-21 16:35:19 -05:00
TAMARA LIPOWSKI
7b4bf0205d feat: UniswapV2 Swap Encoder 2025-01-21 16:35:19 -05:00