Closed CblPOK-git closed 8 months ago
public input
[ {"field":"12445356689065428535224357029694133050596198304994846910611190413916374968144"} ]
private input
[ {"array": [
{"field":1},
{"field":2},
{"field":3},
{"field":4},
{"field":5},
{"field":6},
{"field":7},
{"field":8}] } ]
#pragma zk_multi_prover 1
doesn't works before for
loop.
As result assigner try to switch currProverIdx
from 0 to 2 => out of range access to assigments/circuits
.
https://github.com/NilFoundation/zkllvm-assigner/pull/165 - avoid seg fault on assigner side, but still need to fix clang
clang
issue reproduces on simple example
#include <nil/crypto3/algebra/curves/pallas.hpp>
[[circuit]] uint32_t test(uint32_t a) {
uint32_t out = a >> 1;
#pragma zk_multi_prover 1
for (int i = 0; i < 10; i++)
{
out = out + 1;
}
return out;
}
merged
If remove pragma, then everything works fine. Added this example to branch 446
`#include <nil/crypto3/hash/algorithm/hash.hpp>
include <nil/crypto3/hash/poseidon.hpp>
using namespace nil::crypto3; using namespace nil::crypto3::algebra::curves;
[[circuit]] bool check_root ( typename pallas::base_field_type::value_type expected_root, [[private_input]] std::array<typename pallas::base_field_type::value_type, 0x8> layer_0_leaves) {
pragma zk_multi_prover 1
pragma zk_multi_prover 2
} `