@@ -121,18 +121,21 @@ def _inner_call(
121
121
multicall_call = self ._build_calldata (
122
122
calls_with_calldata = calls_with_calldata
123
123
)
124
+ use_revert = False
124
125
125
126
try :
126
127
raw_returns , gas_usages = self ._call_multicall (
127
128
multicall_call = multicall_call ,
129
+ use_revert = use_revert ,
128
130
retry = False
129
131
)
130
132
except Exception as e :
131
133
if len (calls_with_calldata ) == 1 :
132
134
try :
133
135
raw_returns , gas_usages = self ._call_multicall (
134
136
multicall_call = multicall_call ,
135
- retry = len (calls_with_calldata ) == 1
137
+ use_revert = use_revert ,
138
+ retry = True
136
139
)
137
140
except Exception as e :
138
141
raw_returns = [e ]
@@ -332,7 +335,12 @@ def get_revert_reason(revert_bytes: bytes) -> str:
332
335
except Exception :
333
336
return revert_bytes
334
337
335
- def _call_multicall (self , multicall_call : ContractConstructor | ContractFunction , retry : bool = False ):
338
+ def _call_multicall (
339
+ self ,
340
+ multicall_call : ContractConstructor | ContractFunction ,
341
+ use_revert : bool ,
342
+ retry : bool = False
343
+ ):
336
344
# call transaction
337
345
try :
338
346
if isinstance (multicall_call , ContractConstructor ):
@@ -369,7 +377,11 @@ def _call_multicall(self, multicall_call: ContractConstructor | ContractFunction
369
377
assert success , "Undeployed contract constructor reverted"
370
378
assert "0x" + address_encoded [- 20 :].hex () == self .undeployed_contract_address .lower (), "unexpected undeployed contract address"
371
379
multicall_result = multicall_result [1 :]
380
+ if use_revert :
381
+ raise ValueError ("Multicall did not revert but was expected to" )
372
382
except ContractLogicError as e :
383
+ if not use_revert :
384
+ raise
373
385
if not e .message .startswith ("execution reverted: " ):
374
386
raise
375
387
result_str = e .message .removeprefix ("execution reverted: " )
0 commit comments