Browse Source

zkas/proofs: Add voting contract.

parazyd 4 years ago
parent
commit
f0f56e406e
1 changed files with 28 additions and 0 deletions
  1. 28 0
      zkas/proofs/voting.zk

+ 28 - 0
zkas/proofs/voting.zk

@@ -0,0 +1,28 @@
+constant "Vote" {
+	EcFixedPoint NULLIFIER_K,
+}
+
+contract "Vote" {
+	Base process_id_0,
+	Base process_id_1,
+	Base secret_key,
+	Base vote_hash,
+	Uint32 leaf_pos,
+	MerklePath path,
+}
+
+circuit "Vote" {
+	process_id = poseidon_hash(process_id_0, process_id_1);
+	nullifier = poseidon_hash(secret_key, process_id);
+	constrain_instance(nullifier);
+
+	public_key = ec_mul_base(secret_key, NULLIFIER_K);
+	public_x = ec_get_x(public_key);
+	public_y = ec_get_y(public_key);
+	pk_hash = poseidon_hash(public_x, public_y);
+
+	root = calculate_merkle_root(leaf_pos, path, pk_hash);
+	constrain_instance(root);
+
+	constrain_instance(vote_hash);
+}