From 8b77a6aa65681d1c8e41275d5887b6ed0ff8c643 Mon Sep 17 00:00:00 2001 From: Ben Hauser Date: Sun, 18 Feb 2024 16:52:53 +0400 Subject: [PATCH] fix: reset call code even if call reverts --- brownie/network/multicall.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/brownie/network/multicall.py b/brownie/network/multicall.py index f56bf9a92..58dcc26b0 100644 --- a/brownie/network/multicall.py +++ b/brownie/network/multicall.py @@ -97,12 +97,14 @@ def _flush(self, future_result: Result = None) -> Any: print(color.highlight(f"{message}\n")) ContractCall.__call__.__code__ = getattr(ContractCall, "__original_call_code") - results = self._contract.tryAggregate( # type: ignore - False, - [_call.calldata for _call in pending_calls], - block_identifier=self._block_number[get_ident()], - ) - ContractCall.__call__.__code__ = getattr(ContractCall, "__proxy_call_code") + try: + results = self._contract.tryAggregate( # type: ignore + False, + [_call.calldata for _call in pending_calls], + block_identifier=self._block_number[get_ident()], + ) + finally: + ContractCall.__call__.__code__ = getattr(ContractCall, "__proxy_call_code") for _call, result in zip(pending_calls, results): _call.__wrapped__ = _call.decoder(result[1]) if result[0] else None # type: ignore @@ -133,8 +135,10 @@ def _proxy_call(*args: Tuple, **kwargs: Dict[str, Any]) -> Any: # standard call we let pass through ContractCall.__call__.__code__ = getattr(ContractCall, "__original_call_code") - result = ContractCall.__call__(*args, **kwargs) # type: ignore - ContractCall.__call__.__code__ = getattr(ContractCall, "__proxy_call_code") + try: + result = ContractCall.__call__(*args, **kwargs) # type: ignore + finally: + ContractCall.__call__.__code__ = getattr(ContractCall, "__proxy_call_code") return result def __enter__(self) -> "Multicall":