Sfoglia il codice sorgente

sdk/python: add missing SparseMerklePath

zero 2 anni fa
parent
commit
b2d29aaa0a
2 ha cambiato i file con 11 aggiunte e 0 eliminazioni
  1. 5 0
      bin/zkrunner/zkrunner.py
  2. 6 0
      src/sdk/python/src/zkas.rs

+ 5 - 0
bin/zkrunner/zkrunner.py

@@ -74,6 +74,11 @@ def load_circuit_witness(circuit, witness_file):
             assert len(path) == 32
             circuit.witness_merklepath(path)
 
+        elif value := witness.get("SparseMerklePath"):
+            path = [Fp(i) for i in value]
+            assert len(path) == 255
+            circuit.witness_sparsemerklepath(path)
+
         elif value := witness.get("Uint32"):
             circuit.witness_uint32(value)
 

+ 6 - 0
src/sdk/python/src/zkas.rs

@@ -162,6 +162,12 @@ impl ZkCircuit {
         self.1.push(zk::vm::Witness::MerklePath(Value::known(path.try_into().unwrap())));
     }
 
+    fn witness_sparsemerklepath(&mut self, w: Vec<&PyCell<Fp>>) {
+        assert!(w.len() == 255);
+        let path: Vec<pallas::Base> = w.iter().map(|x| x.borrow().deref().0).collect();
+        self.1.push(zk::vm::Witness::SparseMerklePath(Value::known(path.try_into().unwrap())));
+    }
+
     fn witness_uint32(&mut self, w: u32) {
         self.1.push(zk::vm::Witness::Uint32(Value::known(w)));
     }