Skip to main content

ethrex_common/
evm.rs

1use ethereum_types::Address;
2use ethrex_crypto::keccak::keccak_hash;
3use ethrex_rlp::encode::RLPEncode;
4
5/// Calculates the address of a new conctract using the CREATE
6/// opcode as follows:
7///
8/// address = keccak256(rlp([sender_address,sender_nonce]))[12:]
9pub fn calculate_create_address(sender_address: Address, sender_nonce: u64) -> Address {
10    let mut encoded = Vec::new();
11    (sender_address, sender_nonce).encode(&mut encoded);
12    Address::from_slice(&keccak_hash(encoded)[12..])
13}