From 63824cb39e88377a5ef38cdeb722a4abe499bf36 Mon Sep 17 00:00:00 2001 From: parazyd Date: Tue, 26 Apr 2022 11:19:04 +0200 Subject: [PATCH] node/state: Add remaining errors for state transition. --- src/error.rs | 6 ++++++ src/node/state.rs | 6 +++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/error.rs b/src/error.rs index 196fb0523..738e66eb3 100644 --- a/src/error.rs +++ b/src/error.rs @@ -285,6 +285,9 @@ pub enum VerifyFailed { #[error("Invalid Merkle root for input {0}")] InvalidMerkle(usize), + #[error("Nullifier already exists for input {0}")] + NullifierExists(usize), + #[error("Invalid signature for input {0}")] InputSignature(usize), @@ -303,6 +306,9 @@ pub enum VerifyFailed { #[error("Burn proof verification failure for input {0}")] BurnProof(usize), + #[error("Failed verifying zk proofs: {0}")] + ProofVerifyFailed(String), + #[error("Internal error: {0}")] InternalError(String), } diff --git a/src/node/state.rs b/src/node/state.rs index 2c4bedb48..be5f3e3dc 100644 --- a/src/node/state.rs +++ b/src/node/state.rs @@ -77,13 +77,17 @@ pub fn state_transition(state: &S, tx: Transaction) -> VerifyRe if state.nullifier_exists(nullifier) { error!(target: "state_transition", "Duplicate nullifier found (input {})", i); debug!(target: "state_transition", "nullifier: {:?}", nullifier); + return Err(VerifyFailed::NullifierExists(i)) } } debug!(target: "state_transition", "Verifying zk proofs"); match tx.verify(state.mint_vk(), state.burn_vk()) { Ok(()) => debug!(target: "state_transition", "Verified successfully"), - Err(e) => error!(target: "state_transition", "Failed verifying zk proofs: {}", e), + Err(e) => { + error!(target: "state_transition", "Failed verifying zk proofs: {}", e); + return Err(VerifyFailed::ProofVerifyFailed(e.to_string())) + } } // Gather all the nullifiers