Skip to content

Commit ae69bb2

Browse files
mablrzerosnacks
authored andcommitted
fix(evm): preserve CREATE address on revert in isolation mode (#14637)
(cherry picked from commit 9584c6c)
1 parent d2daaa7 commit ae69bb2

1 file changed

Lines changed: 11 additions & 0 deletions

File tree

crates/evm/evm/src/inspectors/stack.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1291,6 +1291,15 @@ impl<FEN: FoundryEvmNetwork> Inspector<FoundryContextFor<'_, FEN>>
12911291
&& !self.in_inner_context
12921292
&& ecx.journal().depth() == 1
12931293
{
1294+
// In isolation mode, transact_inner returns None for the address on revert; pre-compute
1295+
// the would-be deployed address so create_end can enforce expected_revert reverter
1296+
// checks.
1297+
let precomputed_address = ecx
1298+
.journal()
1299+
.evm_state()
1300+
.get(&create.caller())
1301+
.map(|acc| create.caller().create(acc.info.nonce));
1302+
12941303
let (result, address) = self.transact_inner(
12951304
ecx,
12961305
TxKind::Create,
@@ -1299,6 +1308,8 @@ impl<FEN: FoundryEvmNetwork> Inspector<FoundryContextFor<'_, FEN>>
12991308
create.gas_limit(),
13001309
create.value(),
13011310
);
1311+
let address =
1312+
address.or_else(|| if result.is_revert() { precomputed_address } else { None });
13021313
return Some(CreateOutcome { result, address });
13031314
}
13041315

0 commit comments

Comments
 (0)