@@ -675,7 +675,14 @@ impl<'a> TargetRuntime<'a> for StylusTarget {
675675
676676 let created_contract = & bin. ns . contracts [ contract_no] ;
677677
678- let code = created_contract. emit ( bin. ns , bin. options , contract_no) ;
678+ let code_without_metadata_uncompressed =
679+ created_contract. emit ( bin. ns , bin. options , contract_no) ;
680+
681+ let ( _, code_without_metadata) =
682+ super :: cargo_stylus:: compress_wasm ( & code_without_metadata_uncompressed)
683+ . expect ( "failed to compress wasm" ) ;
684+
685+ let code = super :: cargo_stylus:: contract_deployment_calldata ( & code_without_metadata) ;
679686
680687 let code_ptr =
681688 bin. emit_global_string ( & format ! ( "binary_{}_code" , created_contract. id) , & code, true ) ;
@@ -730,7 +737,7 @@ impl<'a> TargetRuntime<'a> for StylusTarget {
730737 let zero_ptr = bin. build_alloca ( function, bin. address_type ( ) , "zero_ptr" ) ;
731738
732739 bin. builder . build_store ( zero_ptr, zero_address) . unwrap ( ) ;
733- let cmp_result = bin
740+ let is_zero = bin
734741 . builder
735742 . build_call (
736743 bin. module . get_function ( "__memcmp" ) . unwrap ( ) ,
@@ -755,25 +762,10 @@ impl<'a> TargetRuntime<'a> for StylusTarget {
755762 . into_int_value ( ) ;
756763
757764 // __memcmp returns true (1) if memory regions are equal, false (0) if not equal
758- // We want success to be 0 if address equals zero (creation failed), 1 if address is non-zero (creation succeeded)
759- // So we need to invert the result: if __memcmp returns 1 (equal), we want success to be 0 (failure)
760- let success_value = bin
761- . builder
762- . build_select (
763- bin. builder
764- . build_int_compare (
765- IntPredicate :: EQ ,
766- cmp_result,
767- bin. context . bool_type ( ) . const_int ( 1 , false ) ,
768- "address_is_zero" ,
769- )
770- . unwrap ( ) ,
771- bin. context . i32_type ( ) . const_zero ( ) ,
772- bin. context . i32_type ( ) . const_int ( 1 , false ) ,
773- "success_value" ,
774- )
775- . unwrap ( ) ;
776- * success = success_value. into ( ) ;
765+ // We want success to be 1 if address equals zero (creation failed), 0 if address is non-zero (creation succeeded)
766+ // So we can use the __memcmp result directly.
767+
768+ * success = is_zero. into ( ) ;
777769 }
778770 }
779771
0 commit comments