pub fn for_create2_deploy(
        salt: H256,
        contract_bytecode: Vec<u8>,
        constructor_input: &[ethabi::Token],
    ) -> (Self, Create2DeploymentParams) {
        let bytecode_hash = BytecodeHash::for_bytecode(&contract_bytecode).value();
        let raw_constructor_input = ethabi::encode(constructor_input);
        let params = ethabi::encode(&[
            ethabi::Token::FixedBytes(salt.as_bytes().to_vec()),
            ethabi::Token::FixedBytes(bytecode_hash.as_bytes().to_vec()),
            ethabi::Token::Bytes(raw_constructor_input.clone()),
        ]);
        let calldata = CREATE2_FUNCTION.iter().copied().chain(params).collect();
        let execute = Self {
            contract_address: Some(CONTRACT_DEPLOYER_ADDRESS),
            calldata,
            value: 0.into(),
            factory_deps: vec![contract_bytecode],
        };

        let deployment_params = Create2DeploymentParams {
            salt,
            bytecode_hash,
            raw_constructor_input,
        };
        (execute, deployment_params)
    }
Creates an instance for deploying the specified bytecode via `ContractDeployer.create2` without additional dependencies.
If necessary, additional deps can be added to `Self.factory_deps` after this call.
core/lib/types/src/tx/execute.rs