@@ -11,6 +11,7 @@ use crate::signatures::wots_api::{wots256, wots_hash};
11
11
use crate :: treepp:: * ;
12
12
use ark_bn254:: Bn254 ;
13
13
use ark_ec:: bn:: Bn ;
14
+ use bitcoin:: ScriptBuf ;
14
15
15
16
use super :: api_runtime_utils:: {
16
17
execute_script_from_assertion, get_pubkeys, get_signature_from_assertion,
@@ -175,7 +176,7 @@ pub mod type_conversion_utils {
175
176
// Step 1
176
177
// The function takes public parameters (here verifying key) and generates partial script
177
178
// partial script is essentially disprove script minus the bitcommitment locking script
178
- pub fn api_generate_partial_script ( vk : & ark_groth16:: VerifyingKey < Bn254 > ) -> Vec < Script > {
179
+ pub fn api_generate_partial_script ( vk : & ark_groth16:: VerifyingKey < Bn254 > ) -> Vec < ScriptBuf > {
179
180
generate_partial_script ( vk)
180
181
}
181
182
@@ -184,8 +185,8 @@ pub fn api_generate_partial_script(vk: &ark_groth16::VerifyingKey<Bn254>) -> Vec
184
185
// it generates the complete disprove scripts
185
186
pub fn api_generate_full_tapscripts (
186
187
inpubkeys : PublicKeys ,
187
- ops_scripts_per_link : & [ Script ] ,
188
- ) -> Vec < Script > {
188
+ ops_scripts_per_link : & [ ScriptBuf ] ,
189
+ ) -> Vec < ScriptBuf > {
189
190
println ! ( "api_generate_full_tapscripts; append_bitcom_locking_script_to_partial_scripts" ) ;
190
191
let taps_per_link =
191
192
append_bitcom_locking_script_to_partial_scripts ( inpubkeys, ops_scripts_per_link. to_vec ( ) ) ;
@@ -244,14 +245,12 @@ pub fn generate_signatures(
244
245
let pubkeys = get_pubkeys ( secrets) ;
245
246
246
247
println ! ( "generate_signatures; partial_scripts_from_segments" ) ;
247
- let partial_scripts: Vec < Script > = partial_scripts_from_segments ( & segments)
248
- . into_iter ( )
249
- . collect ( ) ;
250
- let partial_scripts: [ Script ; NUM_TAPS ] = partial_scripts. try_into ( ) . unwrap ( ) ;
248
+ let partial_scripts: Vec < ScriptBuf > = partial_scripts_from_segments ( & segments) ;
249
+ let partial_scripts: [ ScriptBuf ; NUM_TAPS ] = partial_scripts. try_into ( ) . unwrap ( ) ;
251
250
println ! ( "generate_signatures; append_bitcom_locking_script_to_partial_scripts" ) ;
252
251
let disprove_scripts =
253
252
append_bitcom_locking_script_to_partial_scripts ( pubkeys, partial_scripts. to_vec ( ) ) ;
254
- let disprove_scripts: [ Script ; NUM_TAPS ] = disprove_scripts. try_into ( ) . unwrap ( ) ;
253
+ let disprove_scripts: [ ScriptBuf ; NUM_TAPS ] = disprove_scripts. try_into ( ) . unwrap ( ) ;
255
254
256
255
println ! ( "generate_signatures; execute_script_from_signature" ) ;
257
256
let exec_res = execute_script_from_signature ( & segments, sigs. clone ( ) , & disprove_scripts) ;
@@ -278,7 +277,7 @@ pub fn validate_assertions(
278
277
vk : & ark_groth16:: VerifyingKey < Bn254 > ,
279
278
signed_asserts : Signatures ,
280
279
_inpubkeys : PublicKeys ,
281
- disprove_scripts : & [ Script ; NUM_TAPS ] ,
280
+ disprove_scripts : & [ ScriptBuf ; NUM_TAPS ] ,
282
281
) -> Option < ( usize , Script ) > {
283
282
println ! ( "validate_assertions; get_assertions_from_signature" ) ;
284
283
let asserts = get_assertions_from_signature ( signed_asserts. clone ( ) ) ;
@@ -327,14 +326,14 @@ pub fn generate_signatures_for_any_proof(
327
326
let pubkeys = get_pubkeys ( secrets) ;
328
327
329
328
println ! ( "generate_signatures; partial_scripts_from_segments" ) ;
330
- let partial_scripts: Vec < Script > = partial_scripts_from_segments ( & segments)
329
+ let partial_scripts: Vec < ScriptBuf > = partial_scripts_from_segments ( & segments)
331
330
. into_iter ( )
332
331
. collect ( ) ;
333
- let partial_scripts: [ Script ; NUM_TAPS ] = partial_scripts. try_into ( ) . unwrap ( ) ;
332
+ let partial_scripts: [ ScriptBuf ; NUM_TAPS ] = partial_scripts. try_into ( ) . unwrap ( ) ;
334
333
println ! ( "generate_signatures; append_bitcom_locking_script_to_partial_scripts" ) ;
335
334
let disprove_scripts =
336
335
append_bitcom_locking_script_to_partial_scripts ( pubkeys, partial_scripts. to_vec ( ) ) ;
337
- let disprove_scripts: [ Script ; NUM_TAPS ] = disprove_scripts. try_into ( ) . unwrap ( ) ;
336
+ let disprove_scripts: [ ScriptBuf ; NUM_TAPS ] = disprove_scripts. try_into ( ) . unwrap ( ) ;
338
337
339
338
println ! ( "generate_signatures; execute_script_from_signature" ) ;
340
339
let exec_res = execute_script_from_signature ( & segments, sigs. clone ( ) , & disprove_scripts) ;
@@ -359,11 +358,10 @@ mod test {
359
358
use crate :: chunk:: wrap_hasher:: BLAKE3_HASH_LENGTH ;
360
359
use crate :: chunk:: wrap_wots:: { byte_array_to_wots256_sig, byte_array_to_wots_hash_sig} ;
361
360
use crate :: signatures:: wots_api:: { wots256, wots_hash} ;
362
- use crate :: treepp:: Script ;
363
361
use ark_bn254:: Bn254 ;
364
362
use ark_ff:: UniformRand ;
365
363
use ark_serialize:: CanonicalDeserialize ;
366
- use bitcoin_script :: script ;
364
+ use bitcoin :: ScriptBuf ;
367
365
use rand:: { Rng , SeedableRng } ;
368
366
use rand_chacha:: ChaCha20Rng ;
369
367
use test_utils:: {
@@ -393,7 +391,6 @@ mod test {
393
391
use crate :: chunk:: api:: NUM_PUBS ;
394
392
use crate :: chunk:: api:: NUM_U256 ;
395
393
use crate :: chunk:: wrap_hasher:: BLAKE3_HASH_LENGTH ;
396
- use crate :: treepp:: * ;
397
394
use bitcoin:: ScriptBuf ;
398
395
use std:: collections:: HashMap ;
399
396
use std:: error:: Error ;
@@ -424,40 +421,41 @@ mod test {
424
421
Ok ( map)
425
422
}
426
423
427
- pub fn write_scripts_to_file ( sig_cache : HashMap < u32 , Vec < Script > > , file : & str ) {
424
+ pub fn write_scripts_to_file ( sig_cache : HashMap < u32 , Vec < ScriptBuf > > , file : & str ) {
428
425
let mut buf: HashMap < u32 , Vec < Vec < u8 > > > = HashMap :: new ( ) ;
429
426
for ( k, v) in sig_cache {
430
- let vs = v. into_iter ( ) . map ( |x| x. compile ( ) . to_bytes ( ) ) . collect ( ) ;
427
+ let vs = v. into_iter ( ) . map ( |x| x. to_bytes ( ) ) . collect ( ) ;
431
428
buf. insert ( k, vs) ;
432
429
}
433
430
write_map_to_file ( & buf, file) . unwrap ( ) ;
434
431
}
435
432
436
- pub fn write_scripts_to_separate_files ( sig_cache : HashMap < u32 , Vec < Script > > , file : & str ) {
433
+ pub fn write_scripts_to_separate_files (
434
+ sig_cache : HashMap < u32 , Vec < ScriptBuf > > ,
435
+ file : & str ,
436
+ ) {
437
437
let mut buf: HashMap < u32 , Vec < Vec < u8 > > > = HashMap :: new ( ) ;
438
438
std:: fs:: create_dir_all ( "bridge_data/chunker_data" )
439
439
. expect ( "Failed to create directory structure" ) ;
440
440
441
441
for ( k, v) in sig_cache {
442
442
let file = format ! ( "bridge_data/chunker_data/{file}_{k}.json" ) ;
443
- let vs = v. into_iter ( ) . map ( |x| x. compile ( ) . to_bytes ( ) ) . collect ( ) ;
443
+ let vs = v. into_iter ( ) . map ( |x| x. to_bytes ( ) ) . collect ( ) ;
444
444
buf. insert ( k, vs) ;
445
445
write_map_to_file ( & buf, & file) . unwrap ( ) ;
446
446
buf. clear ( ) ;
447
447
}
448
448
}
449
449
450
- pub fn read_scripts_from_file ( file : & str ) -> HashMap < u32 , Vec < Script > > {
451
- let mut scr: HashMap < u32 , Vec < Script > > = HashMap :: new ( ) ;
450
+ pub fn read_scripts_from_file ( file : & str ) -> HashMap < u32 , Vec < ScriptBuf > > {
451
+ let mut scr: HashMap < u32 , Vec < ScriptBuf > > = HashMap :: new ( ) ;
452
452
let f = read_map_from_file ( file) . unwrap ( ) ;
453
453
for ( k, v) in f {
454
- let vs: Vec < Script > = v
454
+ let vs: Vec < ScriptBuf > = v
455
455
. into_iter ( )
456
456
. map ( |x| {
457
- let sc = script ! { } ;
458
457
let bf = ScriptBuf :: from_bytes ( x) ;
459
-
460
- sc. push_script ( bf)
458
+ bf
461
459
} )
462
460
. collect ( ) ;
463
461
scr. insert ( k, vs) ;
@@ -603,17 +601,17 @@ mod test {
603
601
let mut proof_asserts = get_assertions_from_signature ( proof_sigs) ;
604
602
corrupt_at_random_index ( & mut proof_asserts) ;
605
603
let corrupt_signed_asserts = get_signature_from_assertion ( proof_asserts, secrets) ;
606
- let disprove_scripts: [ Script ; NUM_TAPS ] = disprove_scripts. try_into ( ) . unwrap ( ) ;
604
+ let disprove_scripts: [ ScriptBuf ; NUM_TAPS ] = disprove_scripts. try_into ( ) . unwrap ( ) ;
607
605
608
606
let invalid_tap =
609
607
validate_assertions ( & vk, corrupt_signed_asserts, pubkeys, & disprove_scripts) ;
610
608
assert ! ( invalid_tap. is_some( ) ) ;
611
609
let ( index, hint_script) = invalid_tap. unwrap ( ) ;
612
610
println ! ( "STEP 4 EXECUTING DISPROVE SCRIPT at index {}" , index) ;
613
- let scr = script ! {
614
- { hint_script. clone ( ) }
615
- { disprove_scripts [ index ] . clone( ) }
616
- } ;
611
+
612
+ let scr = hint_script
613
+ . clone ( )
614
+ . push_script ( disprove_scripts [ index ] . clone ( ) ) ;
617
615
let res = execute_script ( scr) ;
618
616
if res. final_stack . len ( ) > 1 {
619
617
println ! ( "Stack " ) ;
@@ -749,10 +747,9 @@ mod test {
749
747
assert ! ( invalid_tap. is_some( ) ) ;
750
748
let ( index, hint_script) = invalid_tap. unwrap ( ) ;
751
749
println ! ( "STEP 4 EXECUTING DISPROVE SCRIPT at index {}" , index) ;
752
- let scr = script ! {
753
- { hint_script. clone( ) }
754
- { disprove_scripts[ index] . clone( ) }
755
- } ;
750
+ let scr = hint_script
751
+ . clone ( )
752
+ . push_script ( disprove_scripts[ index] . clone ( ) ) ;
756
753
let res = execute_script ( scr) ;
757
754
if res. final_stack . len ( ) > 1 {
758
755
println ! ( "Stack " ) ;
@@ -916,11 +913,11 @@ mod test {
916
913
}
917
914
println ! ( "done" ) ;
918
915
919
- let ops_scripts: [ Script ; NUM_TAPS ] = op_scripts. try_into ( ) . unwrap ( ) ; //compile_verifier(mock_vk);
916
+ let ops_scripts: [ ScriptBuf ; NUM_TAPS ] = op_scripts. try_into ( ) . unwrap ( ) ; //compile_verifier(mock_vk);
920
917
921
918
let tapscripts = api_generate_full_tapscripts ( mock_pubs, & ops_scripts) ;
922
919
assert_eq ! ( tapscripts. len( ) , NUM_TAPS ) ;
923
- let tapscripts: [ Script ; NUM_TAPS ] = tapscripts. try_into ( ) . unwrap ( ) ;
920
+ let tapscripts: [ ScriptBuf ; NUM_TAPS ] = tapscripts. try_into ( ) . unwrap ( ) ;
924
921
println ! (
925
922
"tapscript.lens: {:?}" ,
926
923
tapscripts. clone( ) . map( |script| script. len( ) )
@@ -1167,7 +1164,7 @@ mod test {
1167
1164
op_scripts. push ( tap_node) ;
1168
1165
}
1169
1166
println ! ( "done" ) ;
1170
- let ops_scripts: [ Script ; NUM_TAPS ] = op_scripts. try_into ( ) . unwrap ( ) ;
1167
+ let ops_scripts: [ ScriptBuf ; NUM_TAPS ] = op_scripts. try_into ( ) . unwrap ( ) ;
1171
1168
1172
1169
let secrets = ( 0 ..NUM_PUBS + NUM_U256 + NUM_HASH )
1173
1170
. map ( |idx| format ! ( "{MOCK_SECRET}{:04x}" , idx) )
@@ -1266,7 +1263,7 @@ mod test {
1266
1263
op_scripts. push ( tap_node) ;
1267
1264
}
1268
1265
println ! ( "done" ) ;
1269
- let ops_scripts: [ Script ; NUM_TAPS ] = op_scripts. try_into ( ) . unwrap ( ) ;
1266
+ let ops_scripts: [ ScriptBuf ; NUM_TAPS ] = op_scripts. try_into ( ) . unwrap ( ) ;
1270
1267
1271
1268
let secrets = ( 0 ..NUM_PUBS + NUM_U256 + NUM_HASH )
1272
1269
. map ( |idx| format ! ( "{MOCK_SECRET}{:04x}" , idx) )
@@ -1322,17 +1319,16 @@ mod test {
1322
1319
if fault. is_some ( ) {
1323
1320
let ( index, hint_script) = fault. unwrap ( ) ;
1324
1321
println ! ( "taproot index {:?}" , index) ;
1325
- let scr = script ! {
1326
- { hint_script. clone( ) }
1327
- { verifier_scripts[ index] . clone( ) }
1328
- } ;
1322
+ let scr = hint_script
1323
+ . clone ( )
1324
+ . push_script ( verifier_scripts[ index] . clone ( ) ) ;
1329
1325
let res = execute_script ( scr) ;
1330
1326
for i in 0 ..res. final_stack . len ( ) {
1331
1327
println ! ( "{i:} {:?}" , res. final_stack. get( i) ) ;
1332
1328
}
1333
- let mut disprove_map: HashMap < u32 , Vec < Script > > = HashMap :: new ( ) ;
1329
+ let mut disprove_map: HashMap < u32 , Vec < ScriptBuf > > = HashMap :: new ( ) ;
1334
1330
let disprove_f = & format ! ( "bridge_data/chunker_data/disprove_{index}.json" ) ;
1335
- disprove_map. insert ( index as u32 , vec ! [ hint_script] ) ;
1331
+ disprove_map. insert ( index as u32 , vec ! [ hint_script. compile ( ) ] ) ;
1336
1332
write_scripts_to_file ( disprove_map, disprove_f) ;
1337
1333
assert ! ( res. success) ;
1338
1334
}
0 commit comments