Commit Graph

182 Commits

Author SHA1 Message Date
pedrobergamini
97a961ecb8 chore: fix single encoding bebop tests 2025-08-10 16:59:06 -03:00
pedrobergamini
a76c35d95e chore: resolve merge conflicts 2025-08-08 11:41:00 -03:00
pedrobergamini
c0d49f95ad chore: commit progress so far on test fixing 2025-08-08 11:35:43 -03: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
pedrobergamini
1336eb5f90 chore: start implementing test changes related to partialFillOffset and encoded receiver 2025-08-05 22:45:48 -03:00
pedrobergamini
504a4db702 chore: include partialFillOffset as part of user_data 2025-08-05 20:32:42 -03:00
pedrobergamini
49754e654e chore: fix filledTakerAmount calldata override logic 2025-08-04 18:12:31 -03:00
pedrobergamini
7ef587575a chore: create internal _swap method for harness usage 2025-08-04 14:51:58 -03:00
pedrobergamini
3c7a846ff4 chore: update filledTakerAmount 0 logic 2025-08-04 14:23:20 -03:00
pedrobergamini
276d611157 chore: update BebopExecutor 2025-08-04 10:25:00 -03:00
greendianasaur
1e499e1e3b Merge branch 'main' into balancer-v3/dc/ENG-4425-deploy 2025-07-01 17:28:36 +01:00
Diana Carvalho
f9ef8e0dbd feat: Deploy BebopExecutor
Took 40 minutes
2025-06-25 10:04:03 +01:00
Diana Carvalho
266e30d1aa feat: Deploy Balancer V3 executor
Took 19 minutes
2025-06-24 11:52:12 +01:00
pedrobergamini
80c2ef7881 chore: improve test assertion and function ordering 2025-06-23 14:38:57 -03:00
pedrobergamini
4c7f33d81b chore: fix _getActualFilledTakerAmount return value 2025-06-18 13:08:50 -03:00
die-herdplatte
b331a43392 forge fmt 2025-06-18 16:22:34 +02:00
pedrobergamini
033a4bfe9f chore: fix slither info warning 2025-06-17 23:30:48 -03:00
pedrobergamini
90ac0a4c98 test: fix all aggregate order tests and a few executor bugs 2025-06-17 23:27:03 -03:00
die-herdplatte
72553bf98d Fix slither issues 2025-06-17 11:34:31 +02:00
die-herdplatte
58ce241c63 Add support for Ekubo MEV-resist extension 2025-06-17 11:02:37 +02:00
pedrobergamini
5418846619 chore: refactor Aggregate orders, fix Single orders integration tests and calldata generation 2025-06-16 23:08:54 -03:00
pedrobergamini
d527479037 refactor: simplify BebopExecutor by removing Multi order type, improve settlement flow 2025-06-16 15:32:07 -03:00
pedrobergamini
8a82dbfe34 chore: test multi and aggregate orders, support all signature types available 2025-06-08 02:58:52 -03:00
pedrobergamini
71a8401670 chore: address merge conflicts, implement user_data for Bebop 2025-06-08 00:36:23 -03:00
pedrobergamini
2124b49a68 test: bebop single encoding integration test 2025-06-07 17:46:08 -03:00
Diana Carvalho
4f58977007 fix(BalancerV3Executor): Do data.length check at the beginning of swap
Took 16 minutes
2025-06-06 17:24:07 +01:00
Diana Carvalho
941879d5d6 fix(BalancerV3Executor): Slice callback data nicely
Make a stricter data validation

Took 35 minutes
2025-06-06 17:01:48 +01:00
Diana Carvalho
269e328b5f feat: Add integration tests for balancer v3
Refactor BalancerV3Executor to have an inner _swapCallback method with the real swapping logic. Then we have two external methods:
- handleCallback: called by the router. Here we need to remove the first 68 bytes (4 selector + 32 dataOffset + 32 dataLength)
- swapCallback: called by the Vault directly if we are swapping against the executor directly (no router involved)

Took 1 minute
2025-06-05 17:22:17 +01:00
Diana Carvalho
806ce4e62c feat: Make BalancerV3Executor inherit from ICallback
Took 37 minutes
2025-06-05 14:59:22 +01:00
Diana Carvalho
f34db52f09 feat: Implement BalancerV3Executor
Took 2 hours 32 minutes


Took 8 seconds

Took 13 minutes
2025-06-05 14:59:22 +01:00
pedrobergamini
17e535494b fix: cargo and forge fmt 2025-06-04 19:57:40 -03:00
pedrobergamini
ad0a9991da feat: support multi and aggregate orders 2025-06-04 19:41:13 -03:00
pedrobergamini
946c4391e8 fix: SafeCast => V4SafeCast to fix build issue 2025-06-04 19:13:13 -03:00
pedrobergamini
af0f4c454e chore: implement correct native ETH support 2025-06-04 19:12:07 -03:00
pedrobergamini
7e7e3f0e01 feat: implement encoder and executor with single order support 2025-06-04 17:57:09 -03:00
TAMARA LIPOWSKI
e0c195f63d fix: Fix remaining tests after latest encoding changes 2025-05-16 14:14:21 -04:00
Diana Carvalho
d4244a7089 fix: Fix tests (not there yet)
Took 58 minutes
2025-05-16 17:57:29 +01:00
TAMARA LIPOWSKI
eeebd51114 feat: perform all transfers in executors
For organization (and thus safety) purposes.

Rename to RestrictTransferFrom.sol so that we can perform multiple transfer froms (upto an allowance) in the case of split swaps (where the split is the first swap).

TODO: Fix tests.
2025-05-16 11:59:54 -04:00
TAMARA LIPOWSKI
9b59b8b434 Revert "chore: Remove permit2 from executor constructor..."
This reverts commit b0b98c5e5d.
2025-05-16 11:23:43 -04:00
Diana Carvalho
fcd85c047f chore: Misc improvements:
- Don't use payable(receiver).transfer(amount) and use OpenZeppelin's Address.sendValue instead
- In Univ4Executor send funds to the poolManager and not msg.sender
- In OneTransferFromOnly:
  - rename method name
  - don't pass the sender but hardcode it to caller() (msg.sender)
  - Move marking the transfer as done up (before we actually transfer) to prevent reentrancy attacks

Took 18 minutes
2025-05-16 10:49:49 +01:00
Diana Carvalho
0b5233ead4 chore: Improve docstrings and decode bools always the same way
Took 26 minutes
2025-05-15 18:01:27 +01:00
TAMARA LIPOWSKI
d21ae45a49 chore: remove unnecessary sender encoding in USV3 2025-05-15 12:59:04 -04:00
Diana Carvalho
09ff7691f8 chore: Make naming consistent: transfer_needed, approval_needed, etc
Took 46 minutes
2025-05-15 14:52:43 +01:00
TAMARA LIPOWSKI
4a0533b8ea chore: Remove transfer flag from curve + balancer
we will never perform a manual transfer into these protocols, as they require the tokens to be in the router contract in order to perform a transferFrom.
2025-05-15 09:15:32 -04:00
TAMARA LIPOWSKI
b0b98c5e5d chore: Remove permit2 from executor constructor...
whenever not needed.
2025-05-15 08:23:55 -04:00
Diana Carvalho
ee687038c5 fix: Make all tests pass!
Delete TokenTransfer.sol
Make slither happy

Bugfixes:
- Executors
  - Ekubo:
    - Fix the POOL_DATA_OFFSET value and remove sender from callback data
    - Use SafeERC20
  - Maverick and Univ2: Use safeTransfer and not safeTransferFrom
  - Univ3: update expected data length
  - Univ4: update the selectors (the signature changed)
- Router:
  - For split swap we don't need to pass the tokenInReceiver, it should always be the router address
  - For single and sequential: change order of the parameters (to be before the permit2 specific objects)
- Encoders:
  - Update selector signatures
  - For split swap pass the transfer_from (we might not need to if the token in is ETH)

Took 2 hours 51 minutes
2025-05-15 13:11:34 +01:00
TAMARA LIPOWSKI
27dfde3118 feat: Support new transfer logic in all executors
TODO:
- Fix failing tests
- Remove permit2 from initialization of contracts
2025-05-14 20:42:19 -04:00
Diana Carvalho
9401ce2620 feat: Sketch for OneTransferFromOnly.sol
Took 49 seconds
2025-05-14 11:22:54 +01:00
Diana Carvalho
444fc2d7b0 docs: Add comment on receive() in CurveExecutor
Took 9 minutes
2025-05-12 10:48:07 +01:00
Diana Carvalho
f14c8ee29b feat: Remove special handling of the Univ4 callback
The problem was that the pool manager was expecting an ABI encoded result to be returned and we were not returning that (we were returning just a result)
Special thanks to Max for figuring this out

Took 31 minutes
2025-05-09 10:48:54 +01:00