| 12345678910111213141516171819202122232425262728293031323334353637 |
- k = 13;
- constant "RlnSignal" {}
- witness "RlnSignal" {
- Base secret_key,
- MerklePath identity_path,
- Uint32 identity_leaf_pos,
- # These are public so have to be properly constructed
- Base message_hash, # x
- Base epoch,
- Base rln_identifier,
- }
- circuit "RlnSignal" {
- constrain_instance(epoch);
- constrain_instance(rln_identifier);
- constrain_instance(message_hash);
- # This has to be the same constant used outside
- identity_derivation_path = witness_base(11);
- nullifier_derivation_path = witness_base(12);
- identity_commit = poseidon_hash(identity_derivation_path, secret_key);
- root = merkle_root(identity_leaf_pos, identity_path, identity_commit);
- constrain_instance(root);
- external_nullifier = poseidon_hash(epoch, rln_identifier);
- a_1 = poseidon_hash(secret_key, external_nullifier);
- internal_nullifier = poseidon_hash(nullifier_derivation_path, a_1);
- constrain_instance(internal_nullifier);
- y_a = base_mul(a_1, message_hash);
- y = base_add(y_a, secret_key);
- constrain_instance(y);
- }
|