11use fm:: FileManager ;
22use gloo_utils:: format:: JsValueSerdeExt ;
33use log:: debug;
4+ use nargo:: artifacts:: {
5+ contract:: { PreprocessedContract , PreprocessedContractFunction } ,
6+ program:: PreprocessedProgram ,
7+ } ;
48use noirc_driver:: {
59 add_dep, compile_contract, compile_main, prepare_crate, prepare_dependency, CompileOptions ,
10+ CompiledContract , CompiledProgram ,
611} ;
712use noirc_frontend:: { graph:: CrateGraph , hir:: Context } ;
813use serde:: { Deserialize , Serialize } ;
914use std:: path:: Path ;
1015use wasm_bindgen:: prelude:: * ;
1116
17+ const BACKEND_IDENTIFIER : & str = "acvm-backend-barretenberg" ;
18+
1219#[ derive( Debug , Serialize , Deserialize ) ]
1320pub struct WASMCompileOptions {
1421 #[ serde( default = "default_entry_point" ) ]
@@ -123,7 +130,9 @@ pub fn compile(args: JsValue) -> JsValue {
123130 nargo:: ops:: optimize_contract ( compiled_contract, np_language, & is_opcode_supported)
124131 . expect ( "Contract optimization failed" ) ;
125132
126- <JsValue as JsValueSerdeExt >:: from_serde ( & optimized_contract) . unwrap ( )
133+ let preprocessed_contract = preprocess_contract ( optimized_contract) ;
134+
135+ <JsValue as JsValueSerdeExt >:: from_serde ( & preprocessed_contract) . unwrap ( )
127136 } else {
128137 let compiled_program =
129138 compile_main ( & mut context, crate_id, & options. compile_options , None , true )
@@ -134,7 +143,39 @@ pub fn compile(args: JsValue) -> JsValue {
134143 nargo:: ops:: optimize_program ( compiled_program, np_language, & is_opcode_supported)
135144 . expect ( "Program optimization failed" ) ;
136145
137- <JsValue as JsValueSerdeExt >:: from_serde ( & optimized_program) . unwrap ( )
146+ let preprocessed_program = preprocess_program ( optimized_program) ;
147+
148+ <JsValue as JsValueSerdeExt >:: from_serde ( & preprocessed_program) . unwrap ( )
149+ }
150+ }
151+
152+ fn preprocess_program ( program : CompiledProgram ) -> PreprocessedProgram {
153+ PreprocessedProgram {
154+ hash : program. hash ,
155+ backend : String :: from ( BACKEND_IDENTIFIER ) ,
156+ abi : program. abi ,
157+ bytecode : program. circuit ,
158+ }
159+ }
160+
161+ fn preprocess_contract ( contract : CompiledContract ) -> PreprocessedContract {
162+ let preprocessed_functions = contract
163+ . functions
164+ . into_iter ( )
165+ . map ( |func| PreprocessedContractFunction {
166+ name : func. name ,
167+ function_type : func. function_type ,
168+ is_internal : func. is_internal ,
169+ abi : func. abi ,
170+ bytecode : func. bytecode ,
171+ } )
172+ . collect ( ) ;
173+
174+ PreprocessedContract {
175+ name : contract. name ,
176+ backend : String :: from ( BACKEND_IDENTIFIER ) ,
177+ functions : preprocessed_functions,
178+ events : contract. events ,
138179 }
139180}
140181
0 commit comments