MCPcopy Create free account
hub / github.com/BitVM/BitVM / execute_script_from_signature

Function execute_script_from_signature

bitvm/src/chunk/api_runtime_utils.rs:556–632  ·  view source on GitHub ↗
(
    segments: &[Segment],
    signed_assts: Signatures,
    disprove_scripts: &[ScriptBuf; NUM_TAPS],
)

Source from the content-addressed store, hash-verified

554}
555
556pub(crate) fn execute_script_from_signature(
557 segments: &[Segment],
558 signed_assts: Signatures,
559 disprove_scripts: &[ScriptBuf; NUM_TAPS],
560) -> Option<(usize, Script)> {
561 // if there is a disprove script; with locking script; i can use bitcom witness
562 // segments and signatures
563 fn collect_wots_sig_as_witness_per_segment(
564 segments: &[Segment],
565 signed_asserts: Signatures,
566 ) -> Vec<Script> {
567 let scalar_sigs: Vec<SigData> = signed_asserts
568 .0
569 .iter()
570 .map(|f| SigData::Wots32(*f))
571 .collect();
572 let felts_sigs: Vec<SigData> = signed_asserts
573 .1
574 .iter()
575 .map(|f| SigData::Wots32(*f))
576 .collect();
577 let hash_sigs: Vec<SigData> = signed_asserts
578 .2
579 .iter()
580 .map(|f| SigData::Wots16(*f))
581 .collect();
582 let mut bitcom_sig_arr = vec![];
583 bitcom_sig_arr.extend_from_slice(&scalar_sigs);
584 bitcom_sig_arr.extend_from_slice(&felts_sigs);
585 bitcom_sig_arr.extend_from_slice(&hash_sigs);
586
587 let mut bitcom_sig_as_witness = vec![];
588
589 for i in 0..segments.len() {
590 let mut index_of_bitcommitted_msg: Vec<u32> = vec![];
591
592 let seg = &segments[i];
593 let sec_in: Vec<u32> = seg.parameter_ids.iter().rev().map(|(k, _)| *k).collect();
594 index_of_bitcommitted_msg.extend_from_slice(&sec_in);
595
596 if !seg.scr_type.is_final_script() {
597 // final script doesn't have output
598 let sec_out = (
599 seg.id,
600 segments[seg.id as usize].result.0.output_is_field_element(),
601 );
602 index_of_bitcommitted_msg.push(sec_out.0);
603 }
604
605 let mut sig_preimages = script! {};
606 for index in index_of_bitcommitted_msg {
607 let sig_data = &bitcom_sig_arr[index as usize];
608 let sig_preimage = match sig_data {
609 SigData::Wots16(signature) => Wots16::compact_signature_to_raw_witness(
610 &Wots16::signature_to_compact_signature(signature),
611 ),
612 SigData::Wots32(signature) => Wots32::compact_signature_to_raw_witness(
613 &Wots32::signature_to_compact_signature(signature),

Callers 4

generate_signaturesFunction · 0.85
validate_assertionsFunction · 0.85

Tested by 1