4545
4646async def main () -> None :
4747 oracle_accounts : Dict [str , LocalAccount ] = await get_oracle_accounts ()
48+ # aiohttp session
49+ session = aiohttp .ClientSession ()
50+ await init_checks (oracle_accounts , session )
51+
52+ # wait for interrupt
53+ interrupt_handler = InterruptHandler ()
54+
55+ # fetch ETH2 genesis
56+ controllers = []
57+ for network in ENABLED_NETWORKS :
58+ genesis = await get_genesis (network , session )
59+ oracle = oracle_accounts [network ]
60+ rewards_controller = RewardsController (
61+ network = network ,
62+ aiohttp_session = session ,
63+ genesis_timestamp = int (genesis ["genesis_time" ]),
64+ oracle = oracle ,
65+ )
66+ distributor_controller = DistributorController (network , oracle )
67+ validators_controller = ValidatorsController (network , oracle )
68+ controllers .append (
69+ (
70+ interrupt_handler ,
71+ network ,
72+ rewards_controller ,
73+ distributor_controller ,
74+ validators_controller ,
75+ )
76+ )
77+
78+ await asyncio .gather (* [process_network (* args ) for args in controllers ])
79+
80+ await session .close ()
4881
82+
83+ async def init_checks (oracle_accounts , session ):
4984 # try submitting test vote
5085 for network , oracle in oracle_accounts .items ():
5186 logger .info (f"[{ network } ] Submitting test vote for account { oracle .address } ..." )
@@ -69,9 +104,6 @@ async def main() -> None:
69104 ]
70105 logger .info (f"[{ network } ] Connected to graph nodes at { parsed_uris } " )
71106
72- # aiohttp session
73- session = aiohttp .ClientSession ()
74-
75107 # check ETH2 API connection
76108 for network in ENABLED_NETWORKS :
77109 network_config = NETWORKS [network ]
@@ -82,28 +114,16 @@ async def main() -> None:
82114 )
83115 logger .info (f"[{ network } ] Connected to ETH2 node at { parsed_uri } " )
84116
85- # wait for interrupt
86- interrupt_handler = InterruptHandler ()
87-
88- # fetch ETH2 genesis
89- controllers = []
90- for network in ENABLED_NETWORKS :
91- genesis = await get_genesis (network , session )
92- oracle = oracle_accounts [network ]
93- rewards_controller = RewardsController (
94- network = network ,
95- aiohttp_session = session ,
96- genesis_timestamp = int (genesis ["genesis_time" ]),
97- oracle = oracle ,
98- )
99- distributor_controller = DistributorController (network , oracle )
100- validators_controller = ValidatorsController (network , oracle )
101- controllers .append (
102- (network , rewards_controller , distributor_controller , validators_controller )
103- )
104117
118+ async def process_network (
119+ interrupt_handler : InterruptHandler ,
120+ network : str ,
121+ rewards_ctrl : RewardsController ,
122+ distributor_ctrl : DistributorController ,
123+ validators_ctrl : ValidatorsController ,
124+ ) -> None :
105125 while not interrupt_handler .exit :
106- for ( network , rewards_ctrl , distributor_ctrl , validators_ctrl ) in controllers :
126+ try :
107127 # fetch current finalized ETH1 block data
108128 finalized_block = await get_finalized_block (network )
109129 current_block_number = finalized_block ["block_number" ]
@@ -119,7 +139,7 @@ async def main() -> None:
119139 )
120140 # there is no consensus
121141 if not voting_parameters :
122- continue
142+ return
123143
124144 await asyncio .gather (
125145 # check and update staking rewards
@@ -136,12 +156,11 @@ async def main() -> None:
136156 block_number = latest_block_number ,
137157 ),
138158 )
159+ except BaseException as e :
160+ logger .exception (e )
139161
140- # wait until next processing time
141162 await asyncio .sleep (ORACLE_PROCESS_INTERVAL )
142163
143- await session .close ()
144-
145164
146165if __name__ == "__main__" :
147166 if ENABLE_HEALTH_SERVER :
0 commit comments