Skip to content

Commit d99f04f

Browse files
authored
Merge pull request #121 from pinto-org/gauge-getlogs
Fix log retrieval outage by using getlogs
2 parents 87d5176 + 1f6833e commit d99f04f

2 files changed

Lines changed: 19 additions & 31 deletions

File tree

src/data_access/contracts/eth_events.py

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -374,24 +374,6 @@ def get_log_range(self, from_block, to_block="latest"):
374374
)
375375
return self.get_new_logs(filters=filters, get_all=True)
376376

377-
def get_log_with_topics(self, event_name, indexed_topics, from_block, to_block="latest"):
378-
"""Returns all matching logs"""
379-
signature = [s for s in self._events_dict if event_name in self._events_dict[s]]
380-
if signature:
381-
filters = []
382-
for address in self._contract_addresses:
383-
filters.append(
384-
safe_create_filter(
385-
self._web3,
386-
address=address,
387-
topics=[signature[0], *indexed_topics],
388-
from_block=from_block,
389-
to_block=to_block
390-
)
391-
)
392-
return self.get_new_logs(filters=filters, get_all=True)
393-
return []
394-
395377
def get_new_logs(self, dry_run=None, filters=None, get_all=False):
396378
"""Iterate through all entries passing filter and return list of decoded Log Objects.
397379

src/monitors/messages/gauge.py

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import logging
22
from bots.util import get_logs_by_names, round_num
3-
from constants.addresses import BEAN_ADDR
3+
from constants.addresses import BEAN_ADDR, BEANSTALK_ADDR
44
from constants.config import SILO_TOKENS_MAP, WHITELISTED_WELLS
55
from data_access.contracts.beanstalk import BeanstalkClient
66
from data_access.contracts.eth_events import EthEventsClient, EventClientType
@@ -48,22 +48,28 @@ def seasonal_gauge_str(sunrise_receipt):
4848

4949
def get_seasons_and_blocks(current_logs):
5050
"""Gets the season number and block associated with the current and previous season"""
51-
season_client = EthEventsClient([EventClientType.SEASON])
52-
5351
evt_sunrise = get_logs_by_names(["Sunrise"], current_logs)[0]
5452
current_season_number = evt_sunrise.args.season
5553

56-
prev_sunrise_txn = season_client.get_log_with_topics(
57-
"Sunrise",
58-
[Web3.toHex(Web3.toBytes(current_season_number - 1).rjust(32, b'\x00'))],
59-
# Constrained the search range to work with rpc limits.
60-
# In practice the previous sunrise txn will be within this block range.
61-
evt_sunrise.blockNumber - 10000,
62-
evt_sunrise.blockNumber - 1
63-
)
64-
evt_prev_sunrise = prev_sunrise_txn[0].logs[0]
54+
# Direct eth_getLogs call to find previous Sunrise event
55+
web3 = get_web3_instance()
56+
sunrise_signature = Web3.keccak(text="Sunrise(uint256)").hex()
57+
58+
prev_sunrise_logs = web3.eth.get_logs({
59+
'address': BEANSTALK_ADDR,
60+
'topics': [
61+
sunrise_signature,
62+
Web3.toHex(Web3.toBytes(current_season_number - 1).rjust(32, b'\x00'))
63+
],
64+
'fromBlock': evt_sunrise.blockNumber - 10000,
65+
'toBlock': evt_sunrise.blockNumber - 1
66+
})
67+
68+
# Extract blockNumber directly from the raw log
69+
prev_sunrise_block = prev_sunrise_logs[0]['blockNumber']
70+
6571
return {
66-
"prev": { "season": current_season_number-1, "block": evt_prev_sunrise.blockNumber },
72+
"prev": { "season": current_season_number-1, "block": prev_sunrise_block },
6773
"current": { "season": current_season_number, "block": evt_sunrise.blockNumber },
6874
}
6975

0 commit comments

Comments
 (0)