diff --git a/Cargo.lock b/Cargo.lock index 66e18e4b..d45f8b19 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2874,7 +2874,7 @@ dependencies = [ [[package]] name = "bitcoin-script" version = "0.4.0" -source = "git+https://github.com/BitVM/rust-bitcoin-script#01b4cb66cbf5b525079cabe006f9f99627da97cd" +source = "git+https://github.com/BitVM/rust-bitcoin-script#124b561ed75ac3ec4c6ad99207d8dcdd3bc67180" dependencies = [ "bitcoin", "script-macro", @@ -5569,7 +5569,7 @@ dependencies = [ [[package]] name = "garbled-snark-verifier" version = "0.1.0" -source = "git+https://github.com/GOATNetwork/bitvm-gc?branch=feat%2Fgoat-bitvm3#65b523681ac5dc8f1464602f0e38803b9055ccf7" +source = "git+https://github.com/GOATNetwork/bitvm-gc?branch=feat%2Fgoat-bitvm3#f8980142fe5b3f3a9d6adcb7014c2299484d5633" dependencies = [ "aes", "ark-bn254", @@ -11562,7 +11562,7 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "script-macro" version = "0.4.0" -source = "git+https://github.com/BitVM/rust-bitcoin-script#01b4cb66cbf5b525079cabe006f9f99627da97cd" +source = "git+https://github.com/BitVM/rust-bitcoin-script#124b561ed75ac3ec4c6ad99207d8dcdd3bc67180" dependencies = [ "bitcoin", "proc-macro-error", @@ -12195,7 +12195,7 @@ dependencies = [ [[package]] name = "soldering-host" version = "1.1.0" -source = "git+https://github.com/GOATNetwork/bitvm-gc?branch=feat%2Fgoat-bitvm3#65b523681ac5dc8f1464602f0e38803b9055ccf7" +source = "git+https://github.com/GOATNetwork/bitvm-gc?branch=feat%2Fgoat-bitvm3#f8980142fe5b3f3a9d6adcb7014c2299484d5633" dependencies = [ "ark-bn254", "ark-crypto-primitives", @@ -13896,7 +13896,7 @@ dependencies = [ [[package]] name = "verifiable-circuit-babe" version = "0.0.1" -source = "git+https://github.com/GOATNetwork/bitvm-gc?branch=feat%2Fgoat-bitvm3#65b523681ac5dc8f1464602f0e38803b9055ccf7" +source = "git+https://github.com/GOATNetwork/bitvm-gc?branch=feat%2Fgoat-bitvm3#f8980142fe5b3f3a9d6adcb7014c2299484d5633" dependencies = [ "aes", "ark-bn254", diff --git a/crates/bitvm-gc/src/babe_adapter.rs b/crates/bitvm-gc/src/babe_adapter.rs index ab9c6ce0..64e05dbf 100644 --- a/crates/bitvm-gc/src/babe_adapter.rs +++ b/crates/bitvm-gc/src/babe_adapter.rs @@ -25,6 +25,7 @@ pub use verifiable_circuit_babe::cac::{CACSetupPackage, FinalizedInstanceData}; use verifiable_circuit_babe::dre::N_PADDED; use verifiable_circuit_babe::gc::{SGC_PART1_CONSTANT_SIZE, SparseAdaptorTable}; pub use verifiable_circuit_babe::instance::commit::CACInstanceCommit; +pub use verifiable_circuit_babe::instance::secret::Seed; use verifiable_circuit_babe::prover::BABEProver; use verifiable_circuit_babe::soldering::{ SolderedLabelsData, SolderingData as RealSolderingData, SolderingProof as RealSolderingProof, @@ -39,7 +40,7 @@ pub const WOTS_SIG_COUNT: usize = Wots96::TOTAL_DIGIT_LEN as usize; pub const BABE_N_CC: usize = 181; pub const BABE_M_CC: usize = 7; -pub type OpenedInstanceSeeds = Vec<(usize, u64)>; +pub type OpenedInstanceSeeds = Vec<(usize, Seed)>; pub type FinalizedInstances = Vec; pub type SetupAndSolderingData = (OpenedInstanceSeeds, FinalizedInstances, SolderingData); @@ -65,7 +66,7 @@ pub struct SolderingData { #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub struct BabeVerifierPrivateState { - pub instance_seeds: Vec, + pub instance_seeds: Vec, pub statement_digest: [u8; 32], } @@ -210,7 +211,7 @@ pub fn open_real_setup_and_solder( pub fn verify_real_setup( soldering_builder: &BabeBundleBuilder, package: &CACSetupPackage, - opened: &[(usize, u64)], + opened: &[(usize, Seed)], finalized: &[FinalizedInstanceData], soldering: &SolderingData, vk: &Groth16VerifyingKey, @@ -235,7 +236,7 @@ pub fn verify_real_setup( /// Removes setup-derived public fields from the Verifier-to-Operator soldering proof payload. pub fn compact_soldering_proof_payload( - opened: &[(usize, u64)], + opened: &[(usize, Seed)], finalized: &[FinalizedInstanceData], soldering: &SolderingData, ) -> Result { @@ -291,7 +292,7 @@ pub fn open_and_solder( /// Validates placeholder opened, finalized, and soldering data consistency. pub fn verify_setup( package: &CACSetupPackage, - opened: &[(usize, u64)], + opened: &[(usize, Seed)], finalized: &[FinalizedInstanceData], soldering: &SolderingData, ) -> Result<()> { @@ -623,8 +624,8 @@ fn recover_a_valid_finalized_messages( }) } -fn deterministic_seed(index: usize) -> u64 { - u64::from_le_bytes(hash32(&(index as u64).to_le_bytes())[0..8].try_into().expect("8 bytes")) +fn deterministic_seed(index: usize) -> Seed { + hash32(&(index as u64).to_le_bytes()) } fn hash20(data: &[u8]) -> [u8; 20] { diff --git a/crates/bitvm-gc/tests/babe_adapter.rs b/crates/bitvm-gc/tests/babe_adapter.rs index eed8d250..6fe76a8e 100644 --- a/crates/bitvm-gc/tests/babe_adapter.rs +++ b/crates/bitvm-gc/tests/babe_adapter.rs @@ -171,11 +171,11 @@ fn verify_setup_accepts_valid_opening_and_rejects_invalid_shapes() { assert!(verify_setup(&package, &opened, &duplicate_finalized, &soldering).is_err()); let mut overlapping_opened = opened.clone(); - overlapping_opened.push((finalized[0].index, 0)); + overlapping_opened.push((finalized[0].index, [0u8; 32])); assert!(verify_setup(&package, &overlapping_opened, &finalized, &soldering).is_err()); let mut wrong_seed_opened = opened.clone(); - wrong_seed_opened[0].1 ^= 1; + wrong_seed_opened[0].1[0] ^= 1; assert!(verify_setup(&package, &wrong_seed_opened, &finalized, &soldering).is_err()); let mut mismatched_soldering = soldering.clone(); diff --git a/crates/bitvm-gc/tests/regtest.rs b/crates/bitvm-gc/tests/regtest.rs index 4287cc33..129de5a4 100644 --- a/crates/bitvm-gc/tests/regtest.rs +++ b/crates/bitvm-gc/tests/regtest.rs @@ -12,7 +12,7 @@ use bitcoin::{ }; use bitcoin_script::script; use bitvm_gc::babe_adapter::{ - BABE_M_CC, BabeProverState, CACSetupPackage, TxAssertWitness, assert_wots_message, + BABE_M_CC, BabeProverState, CACSetupPackage, Seed, TxAssertWitness, assert_wots_message, build_assert_witness, build_setup_package, derive_finalized_indices, extract_gc_circuit_data, open_and_solder, recover_operator_proof_from_assert_witness, verify_setup, }; @@ -82,7 +82,7 @@ static MOCK_FIXTURE: OnceLock> = struct MockProofGcFixture { version: u32, setup_package: CACSetupPackage, - opened: Vec<(usize, u64)>, + opened: Vec<(usize, Seed)>, prover_state: BabeProverState, gc_data: BitvmGcCircuitData, proof_bytes: Vec, diff --git a/node/src/utils.rs b/node/src/utils.rs index cd1b8bf9..bb7f8546 100644 --- a/node/src/utils.rs +++ b/node/src/utils.rs @@ -84,8 +84,8 @@ use crate::scheduled_tasks::graph_maintenance_tasks::{ }; use bitcoin_light_client_circuit::hash_operator_constant; use bitvm_lib::babe_adapter::{ - BABE_M_CC, BabeVerifierPrivateState, CACSetupPackage, FinalizedInstanceData, SolderingData, - compact_soldering_proof_payload, + BABE_M_CC, BabeVerifierPrivateState, CACSetupPackage, FinalizedInstanceData, Seed, + SolderingData, compact_soldering_proof_payload, }; use bitvm_lib::transactions::base::BaseTransaction; use client::goat_chain::{DisproveTxType, GraphData, PeginStatus, WithdrawStatus}; @@ -6107,7 +6107,7 @@ pub(crate) async fn save_soldering_proof_payload( instance_id: Uuid, graph_id: Uuid, candidate_index: usize, - opened: &[(usize, u64)], + opened: &[(usize, Seed)], finalized: &[FinalizedInstanceData], soldering: &SolderingData, ) -> Result {