From 5d2842c69b57c3a4b403c7703bac4c57530795bf Mon Sep 17 00:00:00 2001 From: Mark Spanbroek Date: Tue, 23 Jan 2024 13:56:52 +0100 Subject: [PATCH] Deploy verifier with verifier key per network --- deploy/verifier.js | 12 +++++------- test/Proofs.test.js | 12 ++++++------ .../{local => hardhat}/example-proof/proof.json | 0 .../{local => hardhat}/example-proof/public.json | 0 .../proof_main_verification_key.json | 0 test/proof.js => verifier/verifier.js | 0 6 files changed, 11 insertions(+), 13 deletions(-) rename verifier/networks/{local => hardhat}/example-proof/proof.json (100%) rename verifier/networks/{local => hardhat}/example-proof/public.json (100%) rename verifier/networks/{local => hardhat}/verification-key/proof_main_verification_key.json (100%) rename test/proof.js => verifier/verifier.js (100%) diff --git a/deploy/verifier.js b/deploy/verifier.js index fd455cd..79a4d77 100644 --- a/deploy/verifier.js +++ b/deploy/verifier.js @@ -1,11 +1,9 @@ +const { loadVerificationKey } = require ("../verifier/verifier.js") -module.exports = async ({ deployments, getNamedAccounts }) => { +module.exports = async ({ deployments, getNamedAccounts, network }) => { const { deployer } = await getNamedAccounts() - - // TODO: Add logic to deploy specific version of verifier based on the network: network.tags.... - // The `contract: ...` part allows to fully specify the contract to be - // deployed even if they are with the same names. - await deployments.deploy("Verifier", { from: deployer, contract: "contracts/verifiers/testing/verifier.sol:Groth16Verifier" }) + const verificationKey = loadVerificationKey(network.name) + await deployments.deploy("Groth16Verifier", { args: [verificationKey], from: deployer }) } -module.exports.tags = ["Verifier"] +module.exports.tags = ["Groth16Verifier"] diff --git a/test/Proofs.test.js b/test/Proofs.test.js index f3472dd..c239d86 100644 --- a/test/Proofs.test.js +++ b/test/Proofs.test.js @@ -1,5 +1,5 @@ const { expect } = require("chai") -const { ethers } = require("hardhat") +const { ethers, deployments } = require("hardhat") const { hexlify, randomBytes } = ethers.utils const { snapshot, @@ -11,7 +11,7 @@ const { advanceTimeToForNextBlock, } = require("./evm") const { periodic } = require("./time") -const { loadProof, loadPublicInput, loadVerificationKey } = require("./proof") +const { loadProof, loadPublicInput } = require("../verifier/verifier") const { SlotState } = require("./requests") const binomialTest = require("@stdlib/stats-binomial-test") const { exampleProof } = require("./examples") @@ -30,8 +30,8 @@ describe("Proofs", function () { await snapshot() await ensureMinimumBlockHeight(256) const Proofs = await ethers.getContractFactory("TestProofs") - const Verifier = await ethers.getContractFactory("Groth16Verifier") - const verifier = await Verifier.deploy(loadVerificationKey("local")) + await deployments.fixture(["Groth16Verifier"]) + const verifier = await deployments.get("Groth16Verifier") proofs = await Proofs.deploy( { period, timeout, downtime }, verifier.address @@ -159,8 +159,8 @@ describe("Proofs", function () { }) describe("when proofs are required", function () { - const proof = loadProof("local") - const pubSignals = loadPublicInput("local") + const proof = loadProof("hardhat") + const pubSignals = loadPublicInput("hardhat") beforeEach(async function () { await proofs.setSlotState(slotId, SlotState.Filled) diff --git a/verifier/networks/local/example-proof/proof.json b/verifier/networks/hardhat/example-proof/proof.json similarity index 100% rename from verifier/networks/local/example-proof/proof.json rename to verifier/networks/hardhat/example-proof/proof.json diff --git a/verifier/networks/local/example-proof/public.json b/verifier/networks/hardhat/example-proof/public.json similarity index 100% rename from verifier/networks/local/example-proof/public.json rename to verifier/networks/hardhat/example-proof/public.json diff --git a/verifier/networks/local/verification-key/proof_main_verification_key.json b/verifier/networks/hardhat/verification-key/proof_main_verification_key.json similarity index 100% rename from verifier/networks/local/verification-key/proof_main_verification_key.json rename to verifier/networks/hardhat/verification-key/proof_main_verification_key.json diff --git a/test/proof.js b/verifier/verifier.js similarity index 100% rename from test/proof.js rename to verifier/verifier.js