Добро пожаловать в репозиторий zkSNARK Coursework! Здесь собраны утилиты для работы с R1CS–файлами: их оптимизации, проверки через Nova и проведения операций с ансамблями схем.
Все R1CS JSON-файлы в этом проекте должны иметь следующий формат:
{
"num_variables": 4,
"num_public_inputs": 1,
"num_constraints": 1,
"io_size": 1,
"scheme_length": 2,
"constraints": [
{
"A": [
{ "variable": 0, "coefficient": "1" },
{ "variable": 1, "coefficient": "1" }
],
"B": [
{ "variable": 2, "coefficient": "1" }
],
"C": [
{ "variable": 3, "coefficient": "1" }
]
}
],
"public_inputs": ["1", "1"],
"witness": ["4", "4", "2", "10"]
}
Где
num_variables
— общее число переменных.
num_public_inputs
— число публичных входов.
num_constraints
— количество ограничений.
io_size
— число переменных сквозного входа-выхода между итерациями.
scheme_length
— число итераций в доказательстве.
constraints
— список ограничений в формате
public_inputs
— массив строковых значений публичных входов.
witness
— массив строковых значений свидетелей.
Для оптимизации существующего файла R1CS запустите:
python optimizations/optimize_r1cs.py <source_file> <target_file>
<source_file>
— путь к исходному JSON-файлу.
<target_file>
— путь, куда будет записан оптимизированный результат.
Чтобы проверить корректность R1CS-файла с помощью движка Nova:
# 1) Соберите проект:
cargo build
# 2) Запустите проверку:
target/debug/zksnark_coursework <source_file>
Заранее убедитесь, что Nova (https://github.com/microsoft/Nova/tree/main) установлена.
Ансамблем (ensemble) считается упорядоченный список (JSON-массив) из нескольких R1CS JSON-объектов:
[
{ /* R1CS #0 */ },
{ /* R1CS #1 */ },
{ /* R1CS #2 */ }
]
Если внутри одного R1CS требуется ссылка на переменную другого, используйте массив [индекс_R1CS_в_массив, номер_переменной]
:
"A": [
{ "variable": [1, 3], "coefficient": "5" }
]
Чтобы склеить ансамбль из нескольких R1CS в один R1CS, выполняющий тот же функционал, запустите:
python optimizations/ensemble_to_r1cs.py <source_ensemble.json> <target.json>
<source_ensemble.json>
— JSON-массив R1CS-объектов.
<target.json>
— выходной объединённый R1CS-файл.