|
|
@@ -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);
|
|
|
+}
|