def METHOD_NAME(
    self,
    deployer_account: LocalAccount,
    deploy_fn: ContractFunction,
    gas: Optional[int] = None,
    gas_price: Optional[int] = None,
    nonce: Optional[int] = None,
) -> EthereumTxSent:
    """
    Common logic for `createProxy` and `createProxyWithNonce`
    :param deployer_account:
    :param deploy_fn:
    :param gas:
    :param gas_price:
    :param nonce:
    :return: EthereumTxSent
    """
    tx_params = self.ethereum_client.build_tx_params(
        from_address=deployer_account.address,
        gas=gas,
        gas_price=gas_price,
        nonce=nonce,
    )
    contract_address = deploy_fn.call(tx_params)
    tx = deploy_fn.build_transaction(tx_params)
    tx_hash = self.ethereum_client.send_unsigned_transaction(
        tx, private_key=deployer_account.key
    )
    return EthereumTxSent(tx_hash, tx, contract_address)