Почему snarkjs, работающий на Node.js, выдает экземпляр std::bal_alloc?

Я запускаю snarkjs поверх Node.js на машине Linux x64 с 256 ГБ ОЗУ, и у меня есть схема zk-SNARK, состоящая из ограничений ~28M.

Я хочу выполнить командуsnarkjs zkey newдля создания файла zkey из схемы, скомпилированной с помощью circom, но когда задача обрабатывает ограничения из входного файла, она всегда терпит неудачу при обработке ограничения 10-11M, выдавая ошибкуstd::bad_allocисключение.

Я попытался увеличить размер кучи JavaScript до 200 ГБ, добавив параметр узла.--max-old-space-size=204800, но это не решило проблему.

Похоже, это не проблема, связанная с нехваткой памяти, поскольку в случае сбоя процесс использует ~40 ГБ памяти. Я также не думаю, что это проблема с попыткой выделить слишком большую непрерывную часть памяти, потому что snarkjs обрабатывает этот случай, создавая вектор векторов, если количество ограничений превышает определенный порог (1^20).

Я использую Node.js 18.17.0 и snarkjs 0.7.0, но я пробовал и другие версии, но проблема все еще существует.

Выход

Вывод (я добавил отпечаток в исходный код snarkjs, чтобы увидеть, при каком ограничении он терпит неудачу), который я получаю:

      node --max-old-space-size=204800 node_modules/.bin/snarkjs zkey new build/my_step.r1cs resources/powersOfTau28_hez_final_25.ptau build/my_step_p1.zkey
[INFO]  snarkJS: Reading r1cs
[INFO]  snarkJS: Reading tauG1
[INFO]  snarkJS: Reading tauG2
[INFO]  snarkJS: Reading alphatauG1
[INFO]  snarkJS: Reading betatauG1
processing constraints: 0/28173676
processing constraints: 500000/28173676
processing constraints: 1000000/28173676
processing constraints: 1500000/28173676
processing constraints: 2000000/28173676
processing constraints: 2500000/28173676
processing constraints: 3000000/28173676
processing constraints: 3500000/28173676
processing constraints: 4000000/28173676
processing constraints: 4500000/28173676
processing constraints: 5000000/28173676
processing constraints: 5500000/28173676
processing constraints: 6000000/28173676
processing constraints: 6500000/28173676
processing constraints: 7000000/28173676
processing constraints: 7500000/28173676
processing constraints: 8000000/28173676
processing constraints: 8500000/28173676
processing constraints: 9000000/28173676
processing constraints: 9500000/28173676
processing constraints: 10000000/28173676
processing constraints: 10500000/28173676
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
Aborted (core dumped)
Схема

Схему, для которой я пытаюсь создать файл zkey, можно найти по адресу https://github.com/leonardovona/beacon-relay/blob/main/circuits/circuits/my_step.circom .

Действия по воспроизведению

Шаги для воспроизведения:

  • Скомпилируйте схему:circom my_step.circom --O1 --r1cs
  • Создайте файл zkey:node --max-old-space-size=204800 node_modules/.bin/snarkjs zkey new my_step.r1cs powersOfTau28_hez_final_25.ptau my_step.zkey

0 ответов

Другие вопросы по тегам