Проект для генерации и проверки zkSNARK-доказательств (Groth16) с использованием circom, snarkjs, Python (Flask) и смарт-контрактов на Ethereum Sepolia.
Подтверждение и фиксация в чейне событий по данным с датчика + автоматичекие реакции на происшествия.
- Перейдите в папку с контрактами:
cd hardhat - Скомпилируйте контракты:
npx hardhat compile
- Задеплойте Verifier:
npx hardhat run scripts/deploy-verifier.js --network sepolia
- Скопируйте адрес Verifier в .env как
VERIFIER_ADDRESS.
- Скопируйте адрес Verifier в .env как
- Задеплойте PulseAlert:
npx hardhat run scripts/deploy.js --network sepolia
- Скопируйте адрес PulseAlert в .env как
CONTRACT_ADDRESS.
- Скопируйте адрес PulseAlert в .env как
- Перейдите в папку circom:
cd ../circom - Скомпилируйте схему (если менялась):
circom pulse_check.circom --r1cs --wasm --sym
- Скачайте ptau (если ещё не скачан):
curl -L -o pot12_final.ptau [источник пока не нашла где]
- Сгенерируйте zkey и Verifier.sol (только один раз для деплоя!):
snarkjs groth16 setup pulse_check.r1cs pot12_final.ptau pulse_check.zkey snarkjs zkey export verificationkey pulse_check.zkey verification_key.json snarkjs zkey export solidityverifier pulse_check.zkey Verifier.sol
- Для каждого нового input.json:
node pulse_check_js/generate_witness.js pulse_check_js/pulse_check.wasm input.json witness.wtns snarkjs groth16 prove pulse_check.zkey witness.wtns proof.json public.json snarkjs groth16 verify verification_key.json public.json proof.json
- Установите зависимости:
pip install -r requirements.txt
- Запустите сервер:
python api/app.py
- Все переменные окружения должны быть прописаны в .env.
- Для корректной работы используйте одну и ту же версию zkey для генерации proof и деплоя Verifier.sol.
- Для тестов используйте Sepolia ETH (можно получить в кранах).
cd hardhat
npx hardhat compile
npx hardhat run scripts/deploy-verifier.js --network sepolia
npx hardhat run scripts/deploy.js --network sepolia
cd ../circom
circom pulse_check.circom --r1cs --wasm --sym
curl -L -o pot12_final.ptau https://storage.googleapis.com/zkevm/ptau/powersOfTau28_hez_final_12.ptau
snarkjs groth16 setup pulse_check.r1cs pot12_final.ptau pulse_check.zkey
snarkjs zkey export verificationkey pulse_check.zkey verification_key.json
snarkjs zkey export solidityverifier pulse_check.zkey Verifier.sol
node pulse_check_js/generate_witness.js pulse_check_js/pulse_check.wasm input.json witness.wtns
snarkjs groth16 prove pulse_check.zkey witness.wtns proof.json public.json
snarkjs groth16 verify verification_key.json public.json proof.json
cd ../api
pip install -r requirements.txt
python app.py