Просмотр исходного кода

node/state: Add remaining errors for state transition.

parazyd 4 лет назад
Родитель
Сommit
63824cb39e
2 измененных файлов с 11 добавлено и 1 удалено
  1. 6 0
      src/error.rs
  2. 5 1
      src/node/state.rs

+ 6 - 0
src/error.rs

@@ -285,6 +285,9 @@ pub enum VerifyFailed {
     #[error("Invalid Merkle root for input {0}")]
     #[error("Invalid Merkle root for input {0}")]
     InvalidMerkle(usize),
     InvalidMerkle(usize),
 
 
+    #[error("Nullifier already exists for input {0}")]
+    NullifierExists(usize),
+
     #[error("Invalid signature for input {0}")]
     #[error("Invalid signature for input {0}")]
     InputSignature(usize),
     InputSignature(usize),
 
 
@@ -303,6 +306,9 @@ pub enum VerifyFailed {
     #[error("Burn proof verification failure for input {0}")]
     #[error("Burn proof verification failure for input {0}")]
     BurnProof(usize),
     BurnProof(usize),
 
 
+    #[error("Failed verifying zk proofs: {0}")]
+    ProofVerifyFailed(String),
+
     #[error("Internal error: {0}")]
     #[error("Internal error: {0}")]
     InternalError(String),
     InternalError(String),
 }
 }

+ 5 - 1
src/node/state.rs

@@ -77,13 +77,17 @@ pub fn state_transition<S: ProgramState>(state: &S, tx: Transaction) -> VerifyRe
         if state.nullifier_exists(nullifier) {
         if state.nullifier_exists(nullifier) {
             error!(target: "state_transition", "Duplicate nullifier found (input {})", i);
             error!(target: "state_transition", "Duplicate nullifier found (input {})", i);
             debug!(target: "state_transition", "nullifier: {:?}", nullifier);
             debug!(target: "state_transition", "nullifier: {:?}", nullifier);
+            return Err(VerifyFailed::NullifierExists(i))
         }
         }
     }
     }
 
 
     debug!(target: "state_transition", "Verifying zk proofs");
     debug!(target: "state_transition", "Verifying zk proofs");
     match tx.verify(state.mint_vk(), state.burn_vk()) {
     match tx.verify(state.mint_vk(), state.burn_vk()) {
         Ok(()) => debug!(target: "state_transition", "Verified successfully"),
         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
     // Gather all the nullifiers