Faits:
Faits:
A. Par jugement du 18 août 2003, le Tribunal correctionnel de l'Est vaudois a reconnu le ressortissant albanais X._ coupable d'entrave à l'action pénale et d'infraction grave à la LStup. Il l'a condamné de ce fait à la peine de dix ans de réclusion sous déduction de quatre cent quatre-vingt-seize jours de détention préventive, ainsi qu'à l'expulsion du territoire suisse pour une durée de quinze ans.
Par arrêt du 8 mars 2004, la Cour de cassation pénale du Tribunal cantonal du canton de Vaud a rejeté le recours formé par X._ contre le jugement du 18 août 2003.
Par arrêt du 8 mars 2004, la Cour de cassation pénale du Tribunal cantonal du canton de Vaud a rejeté le recours formé par X._ contre le jugement du 18 août 2003.
B. Agissant par la voie du recours de droit public, X._ demande au Tribunal fédéral d'annuler l'arrêt du 8 mars 2004 et de renvoyer la cause à la cour cantonale pour nouvelle décision et instruction dans le sens des considérants. Il invoque les art. 32 al. 1 Cst. et 6 par. 2 CEDH. Il requiert l'assistance judiciaire.
La Cour de cassation pénale se réfère à son arrêt. Le Ministère public conclut au rejet du recours.

Le Tribunal fédéral considère en droit:
Le Tribunal fédéral considère en droit:
1. Le Tribunal fédéral examine d'office et avec une pleine cognition la recevabilité des recours qui lui sont soumis (<ref-ruling> consid. 2 p. 250, 302 consid. 3 p. 303/304, 306 consid. 1.1 p. 308, 321 consid. 1 p. 324, et les arrêts cités).
1.1 Hormis des exceptions non réalisées en l'espèce, le recours de droit public n'a qu'un effet cassatoire (art. 90 al. 1 let. b OJ; <ref-ruling> consid. 1.2.1 p. 131/132, 173 consid. 1.5 p. 176, et les arrêts cités). La conclusion du recours tendant au renvoi de la cause à la cour cantonale pour nouvelle décision au sens des considérants est par conséquent irrecevable.
1.2 Invoquant les art. 32 al. 1 Cst. et 6 par. 2 CEDH, le recourant se plaint d'une appréciation arbitraire des preuves; ce grief est recevable dans le cadre du recours de droit public pour violation des droits constitutionnels au sens de l'art. 84 al. 1 let. a OJ (<ref-ruling> consid. 2b p. 36 in fine et les arrêts cités).
1.2 Invoquant les art. 32 al. 1 Cst. et 6 par. 2 CEDH, le recourant se plaint d'une appréciation arbitraire des preuves; ce grief est recevable dans le cadre du recours de droit public pour violation des droits constitutionnels au sens de l'art. 84 al. 1 let. a OJ (<ref-ruling> consid. 2b p. 36 in fine et les arrêts cités).
2. S'agissant de la constatation des faits et l'appréciation des preuves, la maxime «in dubio pro reo» est violée lorsque l'appréciation objective de l'ensemble des éléments de preuve laisse subsister un doute insurmontable quant à la culpabilité de l'accusé (<ref-ruling> consid. 2a p. 41; <ref-ruling> consid. 2a p. 88; <ref-ruling> consid. 2c p. 37). Une constatation de fait n'est pas arbitraire pour la seule raison que la version retenue par le juge ne coïncide pas avec celle de l'accusé; encore faut-il que l'appréciation des preuves soit manifestement insoutenable, en contradiction flagrante avec la situation effective, qu'elle constitue la violation d'une règle de droit ou d'un principe juridique clair et indiscuté, ou encore qu'elle heurte de façon grossière le sentiment de la justice et de l'équité (<ref-ruling> consid. 2a p. 41; <ref-ruling> consid. 2a p. 88; <ref-ruling> consid. 1b p. 30; <ref-ruling> consid. 2c p. 39, 292 consid. 3a p. 294). Saisi d'un recours de droit public ayant trait à l'appréciation des preuves, le Tribunal fédéral examine seulement si le juge cantonal a outrepassé son pouvoir d'appréciation et établi les faits de manière arbitraire (<ref-ruling> consid. 2a p. 41; <ref-ruling> consid. 2a p. 88; <ref-ruling> consid. 2d p. 37/38; <ref-ruling> consid. 1b p. 30, et les arrêts cités).
2. S'agissant de la constatation des faits et l'appréciation des preuves, la maxime «in dubio pro reo» est violée lorsque l'appréciation objective de l'ensemble des éléments de preuve laisse subsister un doute insurmontable quant à la culpabilité de l'accusé (<ref-ruling> consid. 2a p. 41; <ref-ruling> consid. 2a p. 88; <ref-ruling> consid. 2c p. 37). Une constatation de fait n'est pas arbitraire pour la seule raison que la version retenue par le juge ne coïncide pas avec celle de l'accusé; encore faut-il que l'appréciation des preuves soit manifestement insoutenable, en contradiction flagrante avec la situation effective, qu'elle constitue la violation d'une règle de droit ou d'un principe juridique clair et indiscuté, ou encore qu'elle heurte de façon grossière le sentiment de la justice et de l'équité (<ref-ruling> consid. 2a p. 41; <ref-ruling> consid. 2a p. 88; <ref-ruling> consid. 1b p. 30; <ref-ruling> consid. 2c p. 39, 292 consid. 3a p. 294). Saisi d'un recours de droit public ayant trait à l'appréciation des preuves, le Tribunal fédéral examine seulement si le juge cantonal a outrepassé son pouvoir d'appréciation et établi les faits de manière arbitraire (<ref-ruling> consid. 2a p. 41; <ref-ruling> consid. 2a p. 88; <ref-ruling> consid. 2d p. 37/38; <ref-ruling> consid. 1b p. 30, et les arrêts cités).
3. Le Tribunal correctionnel a retenu que le recourant, avec les ressortissants kosovars A._ et B._, avait participé à la mise sur pied d'un trafic d'héroïne, notamment à Vevey ou à Aigle. Outre des ventes portant sur au moins 970 g, le recourant détenait lors de son arrestation une quantité de 450 g de cette drogue. Des 5 kg d'héroïne saisie auprès de C._, 1 kg lui était destiné. La drogue, de bonne qualité, était vendue après coupage, de sorte que sa pureté variait entre 15 et 27 %. Faute de pouvoir évaluer de manière plus précise les quantités écoulées, ainsi que les prix de revient et de vente, le Tribunal correctionnel n'a pas pu établir le montant du produit du trafic orchestré par le recourant.
Celui-ci reproche au Tribunal correctionnel, puis à la Cour de cassation pénale, de s'être dispensés d'établir la quantité et la pureté exacte de la drogue, ainsi que le profit qu'il aurait retiré du trafic. Or, ces éléments seraient déterminants pour l'appréciation de la gravité du délit reproché, ainsi que pour la fixation de la peine.
Ces arguments ne sont pas décisifs. Il ressort du jugement du 18 août 2003 que le Tribunal correctionnel a reconnu le recourant coupable d'avoir orchestré un trafic portant sur au moins 2,4 kg d'héroïne, d'une pureté moyenne de 20 %. Savoir s'il s'agit là d'une infraction grave au sens de l'art. 19 al. 2 LStup est une question qui relève du droit pénal matériel, dont le réexamen n'est pas possible dans le cadre du recours de droit public. Ce point acquis, il importe peu de déterminer la quantité exacte de drogue supplémentaire vendue, ni le profit total réalisé. L'essentiel est que le juge du fond a pu établir l'ampleur minimale du trafic et apprécier sur cette base la validité des accusations portées contre le recourant. Au demeurant, pour déterminer la gravité de l'infraction et la quotité de la peine, le Tribunal correctionnel s'est fondé en grande partie sur le rôle de chacun des protagonistes dans le réseau mis en place, plutôt que sur les quantités écoulées et le gain obtenu. A cet égard, tout en protestant de son innocence, le recourant ne critique pas l'appréciation selon laquelle il aurait dirigé le réseau qu'il formait avec A._ et B._. Eu égard à l'ensemble des éléments dont ils disposaient, le Tribunal correctionnel, puis la Cour de cassation pouvaient sans arbitraire tenir le recourant pour coupable et se dispenser d'approfondir des aspects qui n'étaient pas déterminants pour leur appréciation.
Ces arguments ne sont pas décisifs. Il ressort du jugement du 18 août 2003 que le Tribunal correctionnel a reconnu le recourant coupable d'avoir orchestré un trafic portant sur au moins 2,4 kg d'héroïne, d'une pureté moyenne de 20 %. Savoir s'il s'agit là d'une infraction grave au sens de l'art. 19 al. 2 LStup est une question qui relève du droit pénal matériel, dont le réexamen n'est pas possible dans le cadre du recours de droit public. Ce point acquis, il importe peu de déterminer la quantité exacte de drogue supplémentaire vendue, ni le profit total réalisé. L'essentiel est que le juge du fond a pu établir l'ampleur minimale du trafic et apprécier sur cette base la validité des accusations portées contre le recourant. Au demeurant, pour déterminer la gravité de l'infraction et la quotité de la peine, le Tribunal correctionnel s'est fondé en grande partie sur le rôle de chacun des protagonistes dans le réseau mis en place, plutôt que sur les quantités écoulées et le gain obtenu. A cet égard, tout en protestant de son innocence, le recourant ne critique pas l'appréciation selon laquelle il aurait dirigé le réseau qu'il formait avec A._ et B._. Eu égard à l'ensemble des éléments dont ils disposaient, le Tribunal correctionnel, puis la Cour de cassation pouvaient sans arbitraire tenir le recourant pour coupable et se dispenser d'approfondir des aspects qui n'étaient pas déterminants pour leur appréciation.
4. Le recours doit ainsi être rejeté dans la mesure où il est recevable. Les conditions de l'assistance judiciaire (art. 152 OJ) sont remplies. Il convient dès lors de statuer sans frais, de désigner Me Christian Favre, avocat à Lausanne, comme avocat d'office du recourant et lui allouer une indemnité de 2000 fr. à titre d'honoraires. Il n'est pas alloué de dépens (art. 159 OJ).

Par ces motifs, vu l'art. 36a OJ, le Tribunal fédéral prononce:
1. Le recours est rejeté dans la mesure où il est recevable.
1. Le recours est rejeté dans la mesure où il est recevable.
2. La demande d'assistance judiciaire est admise.
2. La demande d'assistance judiciaire est admise.
3. Il est statué sans frais.
3. Il est statué sans frais.
4. Me Christian Favre, avocat à Lausanne, est désigné comme avocat d'office du recourant. Une indemnité de 2000 fr. est allouée à Me Favre à titre d'honoraires.
4. Me Christian Favre, avocat à Lausanne, est désigné comme avocat d'office du recourant. Une indemnité de 2000 fr. est allouée à Me Favre à titre d'honoraires.
5. Le présent arrêt est communiqué en copie au recourant, au Procureur général et au Tribunal cantonal du canton de Vaud, Cour de cassation pénale.
Lausanne, le 6 octobre 2004
Au nom de la Ire Cour de droit public
du Tribunal fédéral suisse
Le président: Le greffier: