barretenberg icon indicating copy to clipboard operation
barretenberg copied to clipboard

bb.js browser crashes

Open ludamad opened this issue 2 months ago • 2 comments

WASM Stack Traces (Demangled)

bb::stdlib::field_t<bb::UltraCircuitBuilder_<bb::UltraExecutionTraceBlocks>>::operator*(field_t const&) const@[wasm code]
bb::BarycentricDataRunTime<bb::stdlib::field_t<bb::UltraCircuitBuilder_<bb::UltraExecutionTraceBlocks>>, 21, 1, 0>::construct_lagrange_denominators<std::__2::array<bb::stdlib::field_t<bb::UltraCircuitBuilder_<bb::UltraExecutionTraceBlocks>>, 21>>(std::__2::array<bb::stdlib::field_t<bb::UltraCircuitBuilder_<bb::UltraExecutionTraceBlocks>>, 21> const&)@[wasm code]
<unnamed>@[wasm code]
__wasm_call_ctors@[wasm code]
_initialize@[wasm code]

Circuit Stats Operation

bb::UltraCircuitBuilder_<bb::UltraExecutionTraceBlocks>::create_sort_constraint_with_edges(std::__2::vector<unsigned int, std::__2::allocator<unsigned int>> const&, bb::field<bb::Bn254FrParams> const&, bb::field<bb::Bn254FrParams> const&)@[wasm code]
bb::UltraCircuitBuilder_<bb::UltraExecutionTraceBlocks>::process_range_list(bb::UltraCircuitBuilder_<bb::UltraExecutionTraceBlocks>::RangeList&)@[wasm code]
bb::UltraCircuitBuilder_<bb::UltraExecutionTraceBlocks>::finalize_circuit(bool)@[wasm code]
bb::bbapi::_stats<bb::UltraKeccakFlavor, bb::UltraCircuitBuilder_<bb::UltraExecutionTraceBlocks>>(std::__2::vector<unsigned char, std::__2::allocator<unsigned char>>&&, bool)@[wasm code]
bb::bbapi::CircuitStats::execute(bb::bbapi::BBApiRequest const&) &&@[wasm code]
std::__2::__variant_detail::__visitation::__base::__dispatcher<2>::__dispatch(...)@[wasm code]
bb::bbapi::bbapi(bb::NamedUnion<...>&&)@[wasm code]
msgpack_cbind_impl(...)@[wasm code]
bbapi@[wasm code]

Circuit Prove - Sumcheck with Relations

bb::DeltaRangeConstraintRelationImpl<bb::field<bb::Bn254FrParams>>::accumulate<tuplet::tuple<bb::Univariate<bb::field<bb::Bn254FrParams>, 6, 0>, bb::Univariate<bb::field<bb::Bn254FrParams>, 6, 0>, bb::Univariate<bb::field<bb::Bn254FrParams>, 6, 0>, bb::Univariate<bb::field<bb::Bn254FrParams>, 6, 0>>, bb::UltraFlavor::AllEntities<bb::Univariate<bb::field<bb::Bn254FrParams>, 2, 0>>, bb::RelationParameters<bb::field<bb::Bn254FrParams>>>(tuplet::tuple<...>&, bb::UltraFlavor::AllEntities<...> const&, bb::RelationParameters<...> const&, bb::field<bb::Bn254FrParams> const&)@[wasm code]
bb::SumcheckProverRound<bb::UltraKeccakZKFlavor>::accumulate_relation_univariates<bb::UltraFlavor::AllEntities<bb::Univariate<bb::field<bb::Bn254FrParams>, 2, 0>>>(...)::lambda::operator()<...>(...)@[wasm code]
bb::SumcheckProverRound<bb::UltraKeccakZKFlavor>::compute_univariate_with_row_skipping<bb::UltraFlavor::PartiallyEvaluatedMultivariates>(...)::lambda::operator()(unsigned long) const@[wasm code]
std::__2::__function::__policy_invoker<void (unsigned long)>::__call_impl<...>(...)@[wasm code]
<unnamed>@[wasm code]
bb::parallel_for_mutex_pool(unsigned long, std::__2::function<void (unsigned long)> const&)@[wasm code]
bb::parallel_for(unsigned long, std::__2::function<void (unsigned long)> const&)@[wasm code]
bb::SumcheckProverRound<bb::UltraZKFlavor>::compute_univariate_with_row_skipping<bb::UltraFlavor::PartiallyEvaluatedMultivariates>(...)@[wasm code]
bb::SumcheckProver<bb::UltraZKFlavor>::prove(bb::ZKSumcheckData<bb::UltraZKFlavor>&)@[wasm code]
bb::DeciderProver_<bb::UltraZKFlavor>::execute_relation_check_rounds()@[wasm code]
bb::DeciderProver_<bb::UltraZKFlavor>::construct_proof()@[wasm code]
bb::UltraProver_<bb::UltraZKFlavor>::construct_proof()@[wasm code]
bb::bbapi::_prove<bb::UltraZKFlavor>(std::__2::vector<unsigned char, std::__2::allocator<unsigned char>>&&, std::__2::vector<unsigned char, std::__2::allocator<unsigned char>>&&, std::__2::vector<unsigned char, std::__2::allocator<unsigned char>>&&)@[wasm code]
bb::bbapi::CircuitProve::execute(bb::bbapi::BBApiRequest const&) &&@[wasm code]
bb::bbapi::execute(...)::lambda::operator()<...>(...) const@[wasm code]
std::__2::__variant_detail::__visitation::__base::__dispatcher<0>::__dispatch(...)@[wasm code]
bb::bbapi::bbapi(bb::NamedUnion<...>&&)@[wasm code]
msgpack_cbind_impl(...)@[wasm code]
bbapi@[wasm code]

SRS Initialization - Miller Loop Precomputation

bb::pairing::mixed_addition_step_for_flipped_miller_loop(bb::group_elements::element<bb::field2<bb::field<bb::Bn254FqParams>, bb::Bn254Fq2Params>, bb::field<bb::Bn254FrParams>, bb::Bn254G2Params> const&, bb::field2<bb::field<bb::Bn254FqParams>, bb::Bn254Fq2Params>&, bb::field12<bb::field2<bb::field<bb::Bn254FqParams>, bb::Bn254Fq2Params>, bb::field6<bb::field2<bb::field<bb::Bn254FqParams>, bb::Bn254Fq2Params>, bb::Bn254Fq6Params>, bb::Bn254Fq12Params>::ell_coeffs&)@[wasm code]
bb::pairing::precompute_miller_lines(bb::group_elements::element<bb::field2<bb::field<bb::Bn254FqParams>, bb::Bn254Fq2Params>, bb::field<bb::Bn254FrParams>, bb::Bn254G2Params> const&, bb::pairing::miller_lines&)@[wasm code]
bb::srs::factories::MemBn254CrsFactory::MemBn254CrsFactory(std::__2::vector<bb::group_elements::affine_element<bb::field<bb::Bn254FqParams>, bb::field<bb::Bn254FrParams>, bb::Bn254G1Params>, std::__2::allocator<bb::group_elements::affine_element<bb::field<bb::Bn254FqParams>, bb::field<bb::Bn254FrParams>, bb::Bn254G1Params>>> const&, std::__2::vector<bb::field2<bb::field<bb::Bn254FqParams>, bb::Bn254Fq2Params>, bb::field<bb::Bn254FrParams>, bb::Bn254G2Params> const&)@[wasm code]
bb::srs::init_bn254_mem_crs_factory(std::__2::vector<bb::group_elements::affine_element<bb::field<bb::Bn254FqParams>, bb::field<bb::Bn254FrParams>, bb::Bn254G1Params>, std::__2::allocator<bb::group_elements::affine_element<bb::field<bb::Bn254FqParams>, bb::field<bb::Bn254FrParams>, bb::Bn254G1Params>>> const&, std::__2::vector<bb::field2<bb::field<bb::Bn254FqParams>, bb::Bn254Fq2Params>, bb::field<bb::Bn254FrParams>, bb::Bn254G2Params> const&)@[wasm code]
bb::bbapi::SrsInitSrs::execute(bb::bbapi::BBApiRequest&) &&@[wasm code]
std::__2::__variant_detail::__visitation::__base::__dispatcher<46>::__dispatch(...)@[wasm code]
bb::bbapi::bbapi(bb::NamedUnion<...>&&)@[wasm code]
msgpack_cbind_impl(...)@[wasm code]
bbapi@[wasm code]

Failure Pattern 1: SRS Init / Pairing (Out of bounds memory access)

Iterations: 302, 2590 Phase: After successful proof generation, during verification

bb::pairing::doubling_step_for_flipped_miller_loop(bb::group_elements::element<bb::field2<bb::field<bb::Bn254FqParams>, bb::Bn254Fq2Params>, bb::field<bb::Bn254FrParams>, bb::Bn254G2Params>&, bb::field12<bb::field2<bb::field<bb::Bn254FqParams>, bb::Bn254Fq2Params>, bb::field6<bb::field2<bb::field<bb::Bn254FqParams>, bb::Bn254Fq2Params>, bb::Bn254Fq6Params>, bb::Bn254Fq12Params>::ell_coeffs&)@[wasm code]
bb::pairing::precompute_miller_lines(bb::group_elements::element<bb::field2<bb::field<bb::Bn254FqParams>, bb::Bn254Fq2Params>, bb::field<bb::Bn254FrParams>, bb::Bn254G2Params> const&, bb::pairing::miller_lines&)@[wasm code]
bb::srs::factories::MemBn254CrsFactory::MemBn254CrsFactory(std::__2::vector<bb::group_elements::affine_element<bb::field<bb::Bn254FqParams>, bb::field<bb::Bn254FrParams>, bb::Bn254G1Params>, std::__2::allocator<bb::group_elements::affine_element<bb::field<bb::Bn254FqParams>, bb::field<bb::Bn254FrParams>, bb::Bn254G1Params>>> const&, std::__2::vector<bb::field2<bb::field<bb::Bn254FqParams>, bb::Bn254Fq2Params>, bb::field<bb::Bn254FrParams>, bb::Bn254G2Params> const&)@[wasm code]
bb::srs::init_bn254_mem_crs_factory(std::__2::vector<bb::group_elements::affine_element<bb::field<bb::Bn254FqParams>, bb::field<bb::Bn254FrParams>, bb::Bn254G1Params>, std::__2::allocator<bb::group_elements::affine_element<bb::field<bb::Bn254FqParams>, bb::field<bb::Bn254FrParams>, bb::Bn254G1Params>>> const&, std::__2::vector<bb::field2<bb::field<bb::Bn254FqParams>, bb::Bn254Fq2Params>, bb::field<bb::Bn254FrParams>, bb::Bn254G2Params> const&)@[wasm code]
bb::bbapi::SrsInitSrs::execute(bb::bbapi::BBApiRequest&) &&@[wasm code]
std::__2::__variant_detail::__visitation::__base::__dispatcher<46>::__dispatch(...)@[wasm code]
bb::bbapi::bbapi(bb::NamedUnion<...>&&)@[wasm code]
msgpack_cbind_impl(...)@[wasm code]
bbapi@[wasm code]

Failure Pattern 2: Sumcheck Logging (Out of bounds memory access)

Iteration: 866 Phase: During sumcheck proving (after "created oink proof")

std::__2::basic_ostream<char, std::__2::char_traits<char>>::sentry::sentry(std::__2::basic_ostream<char, std::__2::char_traits<char>>&)@[wasm code]
std::__2::__put_character_sequence<char, std::__2::char_traits<char>>(std::__2::basic_ostream<char, std::__2::char_traits<char>>&, char const*, unsigned long)@[wasm code]
format<std::__2::basic_string<char, std::__2::char_traits<char>, std::__2::allocator<char>>>(std::__2::basic_string<...>)@[wasm code]
vinfo_(std::__2::function<std::__2::basic_string<char, std::__2::char_traits<char>, std::__2::allocator<char>> ()>)@[wasm code]
bb::SumcheckProver<bb::UltraZKFlavor>::prove(bb::ZKSumcheckData<bb::UltraZKFlavor>&)@[wasm code]
bb::DeciderProver_<bb::UltraZKFlavor>::execute_relation_check_rounds()@[wasm code]
bb::DeciderProver_<bb::UltraZKFlavor>::construct_proof()@[wasm code]
bb::UltraProver_<bb::UltraZKFlavor>::construct_proof()@[wasm code]
bb::bbapi::_prove<bb::UltraZKFlavor>(std::__2::vector<unsigned char, std::__2::allocator<unsigned char>>&&, std::__2::vector<unsigned char, std::__2::allocator<unsigned char>>&&, std::__2::vector<unsigned char, std::__2::allocator<unsigned char>>&&)@[wasm code]
bb::bbapi::CircuitProve::execute(bb::bbapi::BBApiRequest const&) &&@[wasm code]
bb::bbapi::execute(...)::lambda::operator()<...>(...) const@[wasm code]
std::__2::__variant_detail::__visitation::__base::__dispatcher<0>::__dispatch(...)@[wasm code]
bb::bbapi::bbapi(bb::NamedUnion<...>&&)@[wasm code]
msgpack_cbind_impl(...)@[wasm code]
bbapi@[wasm code]

Failure Pattern 3: Circuit Building (call_indirect to null table entry)

Iteration: 3935 Phase: During initial circuit creation (before "created circuit" message)

bb::UltraCircuitBuilder_<bb::UltraExecutionTraceBlocks>::create_poly_gate(bb::poly_triple_<bb::field<bb::Bn254FrParams>> const&)@[wasm code]
acir_format::build_constraints<bb::UltraCircuitBuilder_<bb::UltraExecutionTraceBlocks>>(bb::UltraCircuitBuilder_<bb::UltraExecutionTraceBlocks>&, acir_format::AcirProgram&, acir_format::ProgramMetadata const&)@[wasm code]
acir_format::create_circuit<bb::UltraCircuitBuilder_<bb::UltraExecutionTraceBlocks>>(acir_format::AcirProgram&, acir_format::ProgramMetadata const&)@[wasm code]
bb::bbapi::_stats<bb::UltraKeccakFlavor, bb::UltraCircuitBuilder_<bb::UltraExecutionTraceBlocks>>(std::__2::vector<unsigned char, std::__2::allocator<unsigned char>>&&, bool)@[wasm code]
bb::bbapi::CircuitStats::execute(bb::bbapi::BBApiRequest const&) &&@[wasm code]
std::__2::__variant_detail::__visitation::__base::__dispatcher<2>::__dispatch(...)@[wasm code]
bb::bbapi::bbapi(bb::NamedUnion<...>&&)@[wasm code]
msgpack_cbind_impl(...)@[wasm code]
bbapi@[wasm code]

Failure Pattern 4: Hangs

Iterations: 488 and 3472 Phase: After "CircuitProve: Proving key computed" message Error: No output - process hangs indefinitely (likely deadlock or infinite loop)

ludamad avatar Oct 26 '25 15:10 ludamad

Judging from the "Iterations" field, these cannot be reproduced reliably, can they? Then, we can only guess what to fix based on the stack traces?

johnathan79717 avatar Nov 18 '25 15:11 johnathan79717

Although I guess if we have a potential fix, we can run the same iterations again and again and see if the same errors appear. What is run in each iteration?

johnathan79717 avatar Nov 18 '25 15:11 johnathan79717