diff --git a/program_admin/__init__.py b/program_admin/__init__.py index dd9e005..4561252 100644 --- a/program_admin/__init__.py +++ b/program_admin/__init__.py @@ -48,6 +48,8 @@ "pythtest": "https://api.pythtest.pyth.network", } +MAX_CONCURRENT_TRANSACTIONS = 50 + class ProgramAdmin: network: Network @@ -261,7 +263,7 @@ async def sync( # Sync product/price accounts - transactions: List[asyncio.Task[None]] = [] + product_transactions: List[asyncio.Task[None]] = [] product_updates: bool = False @@ -281,7 +283,7 @@ async def sync( instructions.extend(product_instructions) if send_transactions: - transactions.append( + product_transactions.append( asyncio.create_task( self.send_transaction( product_instructions, product_keypairs @@ -289,14 +291,19 @@ async def sync( ) ) - await asyncio.gather(*transactions) + if len(product_transactions) == MAX_CONCURRENT_TRANSACTIONS: + await asyncio.gather(*product_transactions) + product_transactions = [] + + if product_transactions: + await asyncio.gather(*product_transactions) if product_updates: await self.refresh_program_accounts() # Sync publishers - transactions = [] + publisher_transactions = [] for jump_symbol, _price_account_map in ref_permissions.items(): ref_product = ref_products[jump_symbol] # type: ignore @@ -311,13 +318,18 @@ async def sync( if price_instructions: instructions.extend(price_instructions) if send_transactions: - transactions.append( + publisher_transactions.append( asyncio.create_task( self.send_transaction(price_instructions, price_keypairs) ) ) - await asyncio.gather(*transactions) + if len(publisher_transactions) == MAX_CONCURRENT_TRANSACTIONS: + await asyncio.gather(*publisher_transactions) + publisher_transactions = [] + + if publisher_transactions: + await asyncio.gather(*publisher_transactions) return instructions