forked from Dshield-xyz/Dshield
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathshielded_pool.json
More file actions
1 lines (1 loc) · 9.66 KB
/
Copy pathshielded_pool.json
File metadata and controls
1 lines (1 loc) · 9.66 KB
1
{"noir_version":"1.0.0-beta.9+6abff2f16e1c1314ba30708d1cf032a536de3d19","hash":"10499576723541284945","abi":{"parameters":[{"name":"root","type":{"kind":"field"},"visibility":"public"},{"name":"nullifier_hash","type":{"kind":"field"},"visibility":"public"},{"name":"recipient","type":{"kind":"field"},"visibility":"public"},{"name":"nullifier","type":{"kind":"field"},"visibility":"private"},{"name":"secret","type":{"kind":"field"},"visibility":"private"},{"name":"path_siblings","type":{"kind":"array","length":20,"type":{"kind":"field"}},"visibility":"private"},{"name":"path_bits","type":{"kind":"array","length":20,"type":{"kind":"field"}},"visibility":"private"}],"return_type":null,"error_types":{}},"bytecode":"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","debug_symbols":"pZjNbttADITfRWcflktyf/oqRRE4iVIYMJzAtQsUQd69UnZGSQ4SAu+Ja0szWH5LUoJeh8fx/vr77nB6ev4z/Pj5OtyfD8fj4ffd8flhfzk8n6Z/X992A3/eXc7jOP01fLo+qV725/F0GX6crsfjbvi7P17fb/rzsj+9x8v+PF0Nu2E8PU5xMnw6HMd59bb7UId1afEKcSm6yP2rXtb1Igl6sbimj+t69Qi91vyhL1/0uq6PURQGMca05mAbGcRKfqKhrjn4ukONZFC13rIDMeYw4Uw3UchhoVBszaFs7CG7cQ8565pD7aSwoZcQFgrB0i05lI+TrGE1h61uqOyGKmW1G7SzHcQ6+0G8uxTmfXbWguTuw9zcRfdpVhWepsvaYWzpc11yiKvDMW5MR62kYJ8ny/cNLHILZnKTgZOBpfUdbA2n6iynEG8yKGUx0F6DchODpZCs3mTgyq729UKKtXMsaOh9TEr3WNDYPRZUO58RWwbfnCubaXxvrmzWw1KRab2kNffWQ+mth9pdDxa668Gk981JuuthM43u54yEZT5I8PzlPH9Nv/YPh/OX9/4hzCWwG6SF2ILOe9kNNs+53eBTmCooTWH6M7dQWqhzAUzyyWZ+cxRpxSKxaUTbbWKIjpigy4gF+tpiDE0fpd0fIyL8ojVddMQEXUYs0Nd2vwZE+GlsOlVEazp1xNT0imwV6Sr8LDSdCWJsOlNEa3pDvgZ4Bj8r0IGfg58LIvg58nXwc/g5+Dn4Ofg5+CXwS8g3gV+CXwK/BH4J/BL4JfBLyDeDX4ZfBr8Mfhn8Mvhl8MvIN4Nfhl8BvwJ+BfwK+BXwK8i3gF9h9YFfAb8KfhX8KvhV5FvBr8Kvgl8Fvwp+FfymZkYBB2Q8vXdxwZoOxuJ3LhLlmYtCH2QuErigswCmiHJhbCfnAkBFMlWFCzpHQJUoXACrROUCYCWyE2Pigs6xUM7uVra3ChdLg5OGssWVzsomV3a5ss2VnI2cjTSMnG2ZHeRs5GzkbORs5Gyk4eTsdHZydnJ2cnZydnJ20nBydjonck7knMg5kfPcYOZv86Q+H/b3xxEfWZ6up4dP31wu/154hV9lXs7PD+Pj9TzOc/r92jS5/wM=","file_map":{"50":{"source":"use dep::poseidon::poseidon2::Poseidon2;\n\nglobal TREE_DEPTH: u32 = 20;\n\nfn hash2(a: Field, b: Field) -> Field {\n Poseidon2::hash([a, b], 2)\n}\n\nfn constrain_bit(bit: Field) {\n assert(bit * (1 - bit) == 0);\n}\n\nfn compute_root(leaf: Field, path_siblings: [Field; TREE_DEPTH], path_bits: [Field; TREE_DEPTH]) -> Field {\n let mut cur = leaf;\n for i in 0..TREE_DEPTH {\n let sib = path_siblings[i];\n let bit = path_bits[i];\n constrain_bit(bit);\n let left = bit == 0;\n if left {\n cur = hash2(cur, sib);\n } else {\n cur = hash2(sib, cur);\n }\n }\n cur\n}\n\npub fn main(\n root: pub Field,\n nullifier_hash: pub Field,\n recipient: pub Field,\n nullifier: Field,\n secret: Field,\n path_siblings: [Field; TREE_DEPTH],\n path_bits: [Field; TREE_DEPTH],\n) {\n let leaf = hash2(nullifier, secret);\n\n let nf = hash2(nullifier, 0);\n assert(nf == nullifier_hash);\n\n let computed_root = compute_root(leaf, path_siblings, path_bits);\n assert(computed_root == root);\n\n // Bind the proof to a specific recipient to prevent front-running.\n // The recipient field is a public input verified by the contract.\n // This assert ensures the recipient value is actually constrained\n // (not optimized away by the compiler).\n assert(recipient == recipient);\n}\n","path":"/home/caxton/work/Dshield/circuits/shielded_pool/src/main.nr"},"58":{"source":"use std::default::Default;\nuse std::hash::Hasher;\n\ncomptime global RATE: u32 = 3;\n\npub struct Poseidon2 {\n cache: [Field; 3],\n state: [Field; 4],\n cache_size: u32,\n squeeze_mode: bool, // 0 => absorb, 1 => squeeze\n}\n\nimpl Poseidon2 {\n #[no_predicates]\n pub fn hash<let N: u32>(input: [Field; N], message_size: u32) -> Field {\n Poseidon2::hash_internal(input, message_size)\n }\n\n pub(crate) fn new(iv: Field) -> Poseidon2 {\n let mut result =\n Poseidon2 { cache: [0; 3], state: [0; 4], cache_size: 0, squeeze_mode: false };\n result.state[RATE] = iv;\n result\n }\n\n fn perform_duplex(&mut self) {\n // add the cache into sponge state\n for i in 0..RATE {\n // We effectively zero-pad the cache by only adding to the state\n // cache that is less than the specified `cache_size`\n if i < self.cache_size {\n self.state[i] += self.cache[i];\n }\n }\n self.state = crate::poseidon2_permutation(self.state, 4);\n }\n\n fn absorb(&mut self, input: Field) {\n assert(!self.squeeze_mode);\n if self.cache_size == RATE {\n // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n self.perform_duplex();\n self.cache[0] = input;\n self.cache_size = 1;\n } else {\n // If we're absorbing, and the cache is not full, add the input into the cache\n self.cache[self.cache_size] = input;\n self.cache_size += 1;\n }\n }\n\n fn squeeze(&mut self) -> Field {\n assert(!self.squeeze_mode);\n // If we're in absorb mode, apply sponge permutation to compress the cache.\n self.perform_duplex();\n self.squeeze_mode = true;\n\n // Pop one item off the top of the permutation and return it.\n self.state[0]\n }\n\n fn hash_internal<let N: u32>(input: [Field; N], in_len: u32) -> Field {\n let two_pow_64 = 18446744073709551616;\n let iv: Field = (in_len as Field) * two_pow_64;\n let mut sponge = Poseidon2::new(iv);\n for i in 0..input.len() {\n if i < in_len {\n sponge.absorb(input[i]);\n }\n }\n sponge.squeeze()\n }\n}\n\npub struct Poseidon2Hasher {\n _state: [Field],\n}\n\nimpl Hasher for Poseidon2Hasher {\n fn finish(self) -> Field {\n let iv: Field = (self._state.len() as Field) * 18446744073709551616; // iv = (self._state.len() << 64)\n let mut sponge = Poseidon2::new(iv);\n for i in 0..self._state.len() {\n sponge.absorb(self._state[i]);\n }\n sponge.squeeze()\n }\n\n fn write(&mut self, input: Field) {\n self._state = self._state.push_back(input);\n }\n}\n\nimpl Default for Poseidon2Hasher {\n fn default() -> Self {\n Poseidon2Hasher { _state: &[] }\n }\n}\n","path":"/home/caxton/nargo/github.com/noir-lang/poseidon/v0.2.0/src/poseidon2.nr"}},"names":["main"],"brillig_names":["directive_invert"]}