pub fn derive_address(&self, sender: Address) -> Address {
        let prefix_bytes = keccak256("zksyncCreate2".as_bytes());
        let address_bytes = address_to_h256(&sender);

        let mut bytes = [0u8; 160];
        bytes[..32].copy_from_slice(&prefix_bytes);
        bytes[32..64].copy_from_slice(address_bytes.as_bytes());
        bytes[64..96].copy_from_slice(self.salt.as_bytes());
        bytes[96..128].copy_from_slice(self.bytecode_hash.as_bytes());
        bytes[128..].copy_from_slice(&keccak256(&self.raw_constructor_input));

        Address::from_slice(&keccak256(&bytes)[12..])
    }
Pre-calculates the address of the to-be-deployed EraVM contract (via CREATE2).
core/lib/types/src/tx/execute.rs