Commit Graph

54 Commits

Author SHA1 Message Date
Louise Poole
58324a199f chore: fix typos 2025-06-26 12:33:31 +02:00
mrBovo
fc0fb1e540 BalancerV3: SwapAdapter and Substreams (#126)
* feat: add balancer swapAdapter and Substreams

* fix: undo tycho-substreams logs, ignore abi on rustmft

* ci: prevent warnings from failing CI

* ci: skip size check on CI

* chore: forge fmt

* feat: vault balance from storage

Vault contract tokenBalance message are set according to the vault
storage changes in the `_reserveOf` storage variable VaultStorage.sol
contract
This was the culprit that caused the failure in simulation since
balancer enforces the invariant that `token.balanceOf(vault_addr) == _reservesOf[token]`

* ci: warnings

* fix: avoid duplicated balance changes

* fix: order by ordinal

* chore: format

* feat: extract new contracts before extracting balance changes

* feat: skip unnecessary steps if no balance change is found

* refactor: filter out account balances for tokens that aren't part of any protocol components.

On the indexer side, when we receive an account balance, we need to know about the token. This commit ensure that the token was introduced before we emit any account balance with it.

* refactor: don't index liquidity buffers.

Liquidity buffers rely on rate providers. Therefore we need DCI (feature to be able to index previously created contract) to deal with them.

* refactor: cleanup tests and add docstrings

* chore: lock tycho-substreams version

* ci: set Foundry workflow to use stable foundry

* feat(DCI): Add DCI Entrypoints to BalancerV3 components (#218)

* refactor: fix typo in weighted_pool_factory_contract name

* feat: add rate_providers static attributes

* feat: add DCI entrypoints to BalancerV3 components

* fix: set default trade price to Fraction(0, 1)

* feat: remove buffers as components

Buffers are to be used internally by Boosted pools (stable/weighted pools that use ERC4626 tokens). They are not to be treated as a separate swap component.

* test: update test blocks

Extend tests some tests block range to ensure liquidity was added to the pool and can be simulated on

* feat: remove buffers as components

Remove balance updates for buffer components

* feat: listen for pool pause/unpause events

* chore: formating

* fix: encoding call data

* test: update Balancer V3 tests to use DCI

* test: set indexer log level to info

* docs: add comment on support of boosted pools

* feat: update balancer v3 package version

---------

Co-authored-by: Thales <thales@datarevenue.com>
Co-authored-by: zizou <111426680+flopell@users.noreply.github.com>
Co-authored-by: Louise Poole <louise@datarevenue.com>
Co-authored-by: Louise Poole <louisecarmenpoole@gmail.com>
2025-06-26 12:19:39 +02:00
Louise Poole
1c6c2c53c7 chore: bump tycho-substreams crate version (#223)
* chore: bump tycho-substreams crate version

* chore: update cargo.lock
2025-06-25 17:48:46 +02:00
Zizou
27f178de59 fix(sdk): properly handle deletion -> creation -> deletion sequence (#213)
* fix(sdk): properly handle deletion -> creation -> deletion sequence

This commit resolves a bug that occurred when an attribute underwent a deletion, followed by creation, and then another deletion. The system would incorrectly ignore the final deletion because the attribute was mistakenly marked as newly created during the process.

* docs: fix typo

Co-authored-by: Louise Poole <louisecarmenpoole@gmail.com>

---------

Co-authored-by: zizou <111426680+flopell@users.noreply.github.com>
Co-authored-by: Louise Poole <louisecarmenpoole@gmail.com>
2025-06-24 09:41:10 +00:00
tvinagre
3f1beeab7c fix: Make get_block_storage_changes public (#214)
* fix: Make get_block_storage_changes public

* Make RpcTraceData caller optional

* feat: Create function to decode list of addresses
2025-06-16 21:40:39 +00:00
dianacarvalho1
a7841af383 feat: Add entrypoint utils and define EntryPointParams (#211)
* feat: Add entrypoint utils and define EntryPointParams

#time 23m


#time 0m

* fix: Make TraceData mandatory

#time 2m

* fix: Make component_id in EntryPointParams optional

#time 1m
2025-05-20 17:47:25 +01:00
Louise Poole
c778e7dee2 feat: extend DCI message structs (#210)
* feat: extend DCI message structs

* chore: add entrypoint params placeholder to transaction builder

* fix: rename call_data as calldata
2025-05-16 11:04:55 +02:00
Louise Poole
b13360c92b fix: change Entrypoint signature type to string (#209) 2025-05-14 15:42:44 +02:00
dianacarvalho1
edee4b0b6b feat: Add get_block_storage_changes (#203)
* feat: add DCI message definitions

#time 4m

#time 2m

* fix: Make entrypoints into a HashSet instead of Vec

#time 0m

* fix: Rollback on message index change in ContractSlot

#time 5m

* feat: Add get_block_storage_changes

#time 34m


#time 0m

* Update substreams/crates/tycho-substreams/src/block_storage.rs

Co-authored-by: Louise Poole <louisecarmenpoole@gmail.com>

* Update substreams/crates/tycho-substreams/src/block_storage.rs

Co-authored-by: Louise Poole <louisecarmenpoole@gmail.com>

* fix: Filter out calls that are reverted and sort change by ordinal

#time 0m

* fix: Improve performance of get_block_storage_changes

We expect this util function to collect and handle a lot of information repeatedly (on every single block). So top performance optimisation (both memory and computation) is vital to minimise substream lags.

#time 6m

* fix: Use filter and flat_map instead of if and for loops

#time 1m

---------

Co-authored-by: Louise Poole <louise@datarevenue.com>
Co-authored-by: Louise Poole <louisecarmenpoole@gmail.com>
2025-05-14 09:18:07 +00:00
dianacarvalho1
2a77cf965c feat: Add entrypoint (#202)
* feat: add DCI message definitions


#time 4m

#time 0m

* feat: Add add_entrypoint to TransactionChangesBuilder

#time 15m


#time 0m

* fix: Make entrypoints into a HashSet instead of Vec

#time 0m

* fix: Rollback on message index change in ContractSlot

#time 5m

* fix: Ignore examples in docstrings when running cargo test

---------

Co-authored-by: Louise Poole <louise@datarevenue.com>
2025-05-13 11:31:36 +00:00
Zizou
52d502198e fix: stop using buggy account_creations for creation tagging. (#201)
the `call.account_creations` field had been deprecated by Substreams because of some edge cases where a new account wasn't detected.
This commit removes the usage of this field in our sdk contract extraction logic and some others specific places. We decided to rely on the call type instead. This approach should be much more robust.

Co-authored-by: zizou <111426680+flopell@users.noreply.github.com>
2025-05-13 12:25:14 +02:00
Louise Poole
409cf15864 Revert "chore: update format! macro use to satisfy latest clippy version (#194)" (#196)
This reverts commit f29de67f1f.
2025-04-25 18:09:38 +02:00
Louise Poole
f29de67f1f chore: update format! macro use to satisfy latest clippy version (#194) 2025-04-25 15:13:01 +00:00
die-herdplatte
e4609bed0b Ekubo Integration (#172)
* fix: Implement ethereum-ekubo

* fix: Remove unnecessary store

* fix: Correct balance accounting

* Adjust deltas by fee at PositionUpdated event

* Add partial Ekubo integration

* Generalize Hexable

* Native Ekubo integration

* cargo fmt & clippy

---------

Co-authored-by: kayibal <alan@datarevenue.com>
Co-authored-by: Zizou <111426680+zizou0x@users.noreply.github.com>
2025-03-27 12:29:39 +01:00
kayibal
0313c9b498 chore: Publish tycho-substreams to crates.io 2025-03-26 17:47:26 +01:00
Louise Poole
aa378e6ef5 fix: handle token balances on add_contract_changes (#181) 2025-03-21 11:34:37 +02:00
Louise Poole
ae10195bca chore: remove unused substreams protobuf files (#171) 2025-03-06 12:07:29 +02:00
Louise Poole
04d14db719 feat: publicly expose protobuf module (#170) 2025-03-04 16:48:14 +02:00
kayibal
22f70ca110 formatting & lints 2025-02-06 11:04:39 -06:00
Louise Poole
3c08359cf1 fix: allow setting of tokens balances on InterimContractChanges (#139) 2025-01-27 16:06:19 +02:00
Louise Poole
ad0a391f72 chore: clean up ambient (#136)
* fix: remove unnecessary tx field in ProtocolComponent

* chore: move ambient protobuf files to ambient module

* chore: remove dependency on common message types

This allows us to isolate the ambient specific messages within the ambient module

* feat: update ambient substream with new message structs

* chore: update substream configs

And remove use of deprecated BlockContractChanges.

* feat: implement From for AmbientProtocolComponent to ProtocolComponent
2025-01-27 10:36:13 +02:00
Louise Poole
28dd2fc858 feat: add AccountBalanceChange proto message (#137) 2025-01-23 11:00:12 +02:00
Zizou
1400fd413a refactor(substreams): reexport ABIs in tycho-substreams (#138)
Co-authored-by: zizou <111426680+flopell@users.noreply.github.com>
2025-01-22 14:26:49 +00:00
Zizou
98c63c685f refactor: stop using private pypi (#132)
* refactor: stop using private pypi

This was required because our repos were not public. Now that they are, people can directly access our Python packages and therefore they don't need access to our private codeartifact anymore

* docs: add a list of dependencies in the readme and early check in the setup env script

---------

Co-authored-by: zizou <111426680+flopell@users.noreply.github.com>
2025-01-16 09:07:57 +00:00
Zizou
39934347b3 refactor(substreams): remove workspace dependencies (#129)
This is to make each substreams completely independent, before when we would need a new version of a dependency, we would have to change it for every crate which would lead to a change of every substreams module hash. We want to make every Substreams completely independant and frozen, this also helps to maintain a correct versionning.

Co-authored-by: zizou <111426680+flopell@users.noreply.github.com>
2025-01-07 16:04:17 +00:00
Zizou
4d4d05203a fix(curve-substreams): miscellaneous fixes for balances extractions in Curve (#118)
* fix(curve-substreams): filter out reverted calls in `emit_eth_deltas`

* feat(substreams-sdk): extract balances from `Deposit` events in `extract_balance_deltas_from_tx`

* ci: ignore fmt for abi files

* feat(sdk): also account for `Withdrawal` event from WETH

* chore: reorder mod.rs, remove unused import

* chore: cargo fmt

---------

Co-authored-by: zizou <111426680+flopell@users.noreply.github.com>
Co-authored-by: Thales <thales@datarevenue.com>
2024-12-06 18:21:07 -03:00
Zizou
d766116421 fix: contract creation/update tagging (#117)
* chore: add sfrax to rust fmt ignore

* fix(substreams-sdk): correctly mark contract creation.

Previously we would mark a contract as created if it was created in any transaction in this block. This would lead to some unexpected behavior if the contract was created and updated in the same block but in different transactions. In that case the update would be tagged as creation.

* feat: extract asset types for ng factory

This will allow us to detect pools with rebasing tokens and blacklist them until we can support them in `tycho-simulation`

* fix: correctly index math implementation for twocrypto factory

This implementation is immutable and not dynamic.

* fix: index cryptopool factory

This factory is needed for simulations by pools that have admin fees.

* chore: fix build sfrax abi contract

* Bump curve version

---------

Co-authored-by: zizou <111426680+flopell@users.noreply.github.com>
Co-authored-by: tvinagre <tvinagre@gmail.com>
Co-authored-by: Thales <thales@datarevenue.com>
2024-12-06 17:59:39 -03:00
Zizou
9e8e360889 refactor(substreams): improve logic to ignore updates (#96)
* refactor(substreams): ignore transaction if contracts update are ignored.

There are some cases where we ignore contracts updates (for example if the old and new values are the same). In that case if the transaction only contains ignored updates we don't emit it.

* refactor(substreams): ignore deletions for freshly created attributes.

There are cases where an attribute can be created and deleted during the same transaction. To avoid sending a confusing deletion for something that was never created before, we just ignore the deletion in that particular case.

* feat(substreams): Add uniswap V3 logs only module (#98)

* feat(substreams): add uniswapV3 logs only Substreams module

* refactor(substreams): encode everything as big endian

* refactor(substreams): mark changes as creation when a tick liq is updated from 0

This will allow the SDK to detect cases where a tick is created and deleted in the same transaction and ignore it.

* ci(substreams): ignore built files for uniswapv3 logs only module and clean code

* refactor(substreams): update uniswapv3 substreams with new SDK interface

* feat(subtreams): emit default token balances value for uniswapv3

---------

Co-authored-by: zizou <111426680+flopell@users.noreply.github.com>

---------

Co-authored-by: zizou <111426680+flopell@users.noreply.github.com>
2024-11-07 05:16:55 +00:00
zizou
e064ea7aae fix(substreams-sdk): fix a bug in aggregate_balances_changes that was causing some balance changes loss.
The `aggregate_balances_changes` was keeping a map of token -> balance_change per transaction. Therefore, if a transaction was causing a balance change for the same token but on differents components we would only keep the update for the last component updated and drop the others.
2024-10-25 16:10:14 +02:00
Mattia Papa
3013cd9bfd Sfraxeth adapter and substream with SDK integration (#87)
* first commit

* feat: implemented get tokens and improved modifier

* feat: added missing functions (to implement)

* feat: implemented getPoolIds

* feat: implemented getCapabilities

* feat: implemented getLimits function

* fix: fixed constructor

* feat and fix: implemented testGetLimitsFraxEthV3 and fixed getLimits

* feat: implementing getPriceAt function

* feat and fix: finished implementing getPriceAt, fixed modifier

* feat: price function and tests implemented

* fix: removed onlySupportedTokens modifier from getPriceAt and applied it in price and swap function

* feat: implemented sell, buy, and swap functions

* implementing final tests

* aligned with main branch

* fixes

* fix: Review Fixes

* feat: 🎨 sfraxeth substream initial scaffolding

* fix: 🎨 protocol component creation at deployment block

* build: 💚 cargo build

* feat: 🎨 map proper event to balance changes

* fix: 🚚 remove unnecessary files

* fix: 💚 ci checks

Due to the CI checks requiring the latest rust nightly, the rust-lang organisation
introduced new doc related rules. This commit fixes the CI errors by making
the necessary changes to the comments in substreams-balancer comments

* fix: 🐛 wasm output name

* fix: 🐛 update starting block = deployment block -1

* feat: 🎨 add store for reward cycles and update balances accounting after after deposit before Withdraw

* feat: 🎨 finish setting up block reward logic

* docs: 📝 add comments on extra module

* build: 📌 adapt dependencies to workspace dependencies

setting prost-types to workspace version causes build errors

* feat: 🎨 add support for several EVM compatible networks

* fix: 🐛 update balance delta accounting logic following the `NextRewardCycle` event only

* fix: 🐛 hex address string param encoding

* fix: 🐛 deployment transaction check

* ci: 💚 ci check passing

* fix: 🐛 issues with hex-binary encoding

* refactor: ♻️ address mappings for various networks

* fix: 💚 formatting

* feat: Implemented testPoolBehaviour

* chore: Removed unused comments

* feat: ⬆️ update to recent sdk

* feat: 🎨 testing setup

* test:  setup test environminte for sfraxeth

* fix: 🐛 unwrap error in map_protocol_changes

* build: ⬆️ update rust version

* build:  remove unnecessary deps

* build: 🚚 remove unnecessary pb/tycho

* fix: 🐛 remove balance owner attribute

* fix: 🐛 remove unnecessary static attributes

* fix: 🐛 remove manual updates

* fix: 🔥 remove unused data model from contract.proto

* fix: 🐛 filter by known components

* feat:  use store delta for reward change accounting

* refactor: ♻️ remove shallow create vault component

* feat:  replace is_deployment_tx logic with simpler txn match

* test:  manual testing with inspection against etherscan

https://etherscan.io/address/0xac3E018457B222d93114458476f3E3416Abbe38F#events

* ci: 💚 ci checks

* fix: 🐛 map_protocol_components output data

* fix: 🐛 output type on map_protocol_changes

* test: 🧪 skip balance checks

* fixed FraxV3FrxEthAdapter arguments for constructor in manifest.yaml

* fix: 🐛 adapter error with overflow/underflow and addresses

* restore: restored previous adater version

* fix: set minimum swap amount to prevent overflow/underflow

* fix: set minimum swap amount only for sfrxETH -> frxETH

* improve: added print block_number to runner.py when get_amout_out fails

* removed console.log

* alignment with propeller main

* Update forge-std submodule reference to include ds-test

* installed protosim_py 0.21.0

* commented out minimum swap amount for sfrxEth -> frxEth pair

* updated adapter limits

* working on fixes

* fix: Adjust getLimits according to protocol limitation.

Previously limits were estimated with token supplies, this commit simplifies limits and adjusts them so they correspond closely with what is supported by the sfrxETH contract.

* chore: fmt

* wip: Changed ubuntu to 20.04, fmt adapters

* wip: Updated python tests

* wip: Trying with ubuntu: latest

* chore: fmt adapters

* wip: Using ubuntu 20.04

* chore: Switched back to ubuntu-latest

---------

Co-authored-by: Ignazio Bovo <ignazio@jsgenesis.com>
Co-authored-by: domenicodev <domenico.romeo3919@gmail.com>
Co-authored-by: kayibal <alan@datarevenue.com>
Co-authored-by: domenicodev <domenico.rom3@gmail.com>
2024-10-23 14:17:45 +01:00
zizou
4c448e701a ci: make clippy happy 2024-10-14 18:16:18 +02:00
zizou
42f2f45aa7 refactor(substreams): Update ambient Substreams 2024-10-14 18:09:17 +02:00
zizou
aff76f8cc7 chore: fix CI 2024-10-11 14:24:55 +02:00
zizou
73d48236ba feat(substreams): add substreams for Uniswap v2 and v3 2024-10-11 14:00:52 +02:00
zizou
558d85d912 chore(clippy): ignore long paragraph in generated files 2024-09-06 11:11:03 +02:00
Florian Pellissier
65ac765284 refactor(curve): add utils functions on ProtocolComponent 2024-08-09 10:39:14 +02:00
kayibal
ac279502c8 chore(balancer): formatting 2024-08-01 12:34:38 +02:00
kayibal
f5b4c54a99 chore: code formatting 2024-07-25 14:11:29 +01:00
kayibal
148fac276c feat(balancer): Add rate providers to static attributes.
Adds the rate providers and additional attributes to balancers static attributes. These will help in the future to migrate some of the components to use the DCI.

Adds a small attributes module to tycho-substreams to make json encoding a bit easier.
2024-07-25 14:11:29 +01:00
kayibal
2eb41d82f0 feat(tycho-substreams): Add builder for TransactionChanges.
This builder allows easier access to already changed contract addresses, and entity attributes while avoiding duplicated entries.

This is needed to implement the update markers on balancer substreams.
2024-07-25 14:11:29 +01:00
Zizou
96f67362bf Merge pull request #37 from propeller-heads/zz/update-protobuf
Update protobuf and Balancer Substreams
2024-07-23 15:19:14 +02:00
Zizou
ead8e17082 Merge pull request #53 from propeller-heads/fp/fix-vm-indexing
fix(substreams): Fix storage changes indexing for DELEGATECALL
2024-07-22 10:25:14 +02:00
Florian Pellissier
47e6f08338 docs: add changelog 2024-07-22 03:48:47 +02:00
Florian Pellissier
c48532a5c4 feat: Update protobuf messages for Balancer, add pool_id and balance_owner as entity changes 2024-07-22 03:48:29 +02:00
Florian Pellissier
7db72c284c feat: Update proto files 2024-07-22 03:48:29 +02:00
Florian Pellissier
e6edcd1fa2 refactor: only include changes if we know call.caller AND the call type is delegatecall or callcode 2024-07-19 14:35:45 +02:00
Florian Pellissier
33e5f6a236 fix(substreams): Fix storage changes indexing for DELEGATECALL 2024-07-19 12:18:58 +02:00
Florian Pellissier
ec6e16f465 refactor: Clean code and update cargo.lock 2024-07-12 15:47:22 +02:00
Florian Pellissier
7dbf3ffac6 feat: Add a generic function to extract balance deltas from Transfer events. 2024-07-12 14:59:23 +02:00
kayibal
e70d5f0e86 Clip balances at 0.
In case we get negative balances, which happens sometimes e.g. in balancer and seems to be due to some rounding issues within the protocol, we simply clip the balance at 0 so we never emit negative balances as tycho-indexer the upstream system will interpret the balance bytes as unsigned integers.
2024-03-14 11:04:41 +00:00