From 3d674cdfceeceb28e858e4ce3915bfb8349f1995 Mon Sep 17 00:00:00 2001 From: jalbrekt85 Date: Fri, 9 May 2025 14:14:20 -0500 Subject: [PATCH 1/2] uddate get_v3_protocol_fees to diff aggregate fees in time window --- bal_tools/subgraph.py | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/bal_tools/subgraph.py b/bal_tools/subgraph.py index 9b27813..67bd9fa 100644 --- a/bal_tools/subgraph.py +++ b/bal_tools/subgraph.py @@ -471,6 +471,10 @@ def get_balancer_pool_snapshots( def get_v3_protocol_fees( self, pool_id: str, chain: GqlChain, date_range: DateRange ) -> Decimal: + """ + Fetches the protocol fees for a given v3 pool over `date range` + NOTE: assumes `date range` is within a 2 week period + """ fee_snapshot = self.fetch_graphql_data( "vault-v3", "get_protocol_fees", @@ -478,7 +482,7 @@ def get_v3_protocol_fees( "id": pool_id, "ts_gt": date_range[0], "ts_lt": date_range[1], - "first": 1, + "first": 14, "orderBy": "timestamp", "orderDirection": "desc", }, @@ -487,9 +491,10 @@ def get_v3_protocol_fees( if not fee_snapshot: return Decimal(0) - fee_snapshot = fee_snapshot[0] + # descending so first/last snaps are end/start of time window + end_fee_snapshot, start_fee_snapshot = fee_snapshot[0], fee_snapshot[-1] - token_addresses = [token["address"] for token in fee_snapshot["pool"]["tokens"]] + token_addresses = [token["address"] for token in end_fee_snapshot["pool"]["tokens"]] token_prices = self.get_twap_price_token( addresses=token_addresses, @@ -498,17 +503,20 @@ def get_v3_protocol_fees( ) total_fees = Decimal(0) - for swap_fee, yield_fee, twap_token in zip( - fee_snapshot["totalProtocolSwapFees"], - fee_snapshot["totalProtocolYieldFees"], + for end_swap_fee, end_yield_fee, start_swap_fee, start_yield_fee, twap_token in zip( + end_fee_snapshot["totalProtocolSwapFees"], + end_fee_snapshot["totalProtocolYieldFees"], + start_fee_snapshot["totalProtocolSwapFees"], + start_fee_snapshot["totalProtocolYieldFees"], token_prices, ): - total_fees += ( - Decimal(swap_fee) + Decimal(yield_fee) - ) * twap_token.twap_price + swap_fee_diff = Decimal(end_swap_fee) - Decimal(start_swap_fee) + yield_fee_diff = Decimal(end_yield_fee) - Decimal(start_yield_fee) + total_fees += (swap_fee_diff + yield_fee_diff) * twap_token.twap_price return total_fees + def get_pool_protocol_version(self, pool_id: str) -> int: """ returns the protocol version for given pool; either 1, 2 or 3 From acb439315ccb773ef2521c5799d36d60bbc6353f Mon Sep 17 00:00:00 2001 From: jalbrekt85 <33009898+jalbrekt85@users.noreply.github.com> Date: Fri, 9 May 2025 19:28:03 +0000 Subject: [PATCH 2/2] style: ci lint with `black` --- bal_tools/subgraph.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/bal_tools/subgraph.py b/bal_tools/subgraph.py index 67bd9fa..0cb4b0f 100644 --- a/bal_tools/subgraph.py +++ b/bal_tools/subgraph.py @@ -494,7 +494,9 @@ def get_v3_protocol_fees( # descending so first/last snaps are end/start of time window end_fee_snapshot, start_fee_snapshot = fee_snapshot[0], fee_snapshot[-1] - token_addresses = [token["address"] for token in end_fee_snapshot["pool"]["tokens"]] + token_addresses = [ + token["address"] for token in end_fee_snapshot["pool"]["tokens"] + ] token_prices = self.get_twap_price_token( addresses=token_addresses, @@ -503,7 +505,13 @@ def get_v3_protocol_fees( ) total_fees = Decimal(0) - for end_swap_fee, end_yield_fee, start_swap_fee, start_yield_fee, twap_token in zip( + for ( + end_swap_fee, + end_yield_fee, + start_swap_fee, + start_yield_fee, + twap_token, + ) in zip( end_fee_snapshot["totalProtocolSwapFees"], end_fee_snapshot["totalProtocolYieldFees"], start_fee_snapshot["totalProtocolSwapFees"], @@ -516,7 +524,6 @@ def get_v3_protocol_fees( return total_fees - def get_pool_protocol_version(self, pool_id: str) -> int: """ returns the protocol version for given pool; either 1, 2 or 3