@zktable/circuits 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 zkTable contributors
3
+ Copyright (c) 2026 freedanjeremiah
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/package.json CHANGED
@@ -1,14 +1,18 @@
1
1
  {
2
2
  "name": "@zktable/circuits",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Pre-built Noir (UltraHonk) circuits + witness builders for zkTable modules",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "repository": {
8
8
  "type": "git",
9
- "url": "git+https://github.com/Philotheephilix/zkTable.git",
9
+ "url": "git+https://github.com/freedanjeremiah/zktable.git",
10
10
  "directory": "packages/circuits"
11
11
  },
12
+ "homepage": "https://github.com/freedanjeremiah/zktable#readme",
13
+ "bugs": {
14
+ "url": "https://github.com/freedanjeremiah/zktable/issues"
15
+ },
12
16
  "publishConfig": {
13
17
  "access": "public"
14
18
  },
@@ -1 +0,0 @@
1
- {"noir_version":"1.0.0-beta.9+6abff2f16e1c1314ba30708d1cf032a536de3d19","hash":"6959141722380247666","abi":{"parameters":[{"name":"c_old","type":{"kind":"field"},"visibility":"public"},{"name":"c_new","type":{"kind":"field"},"visibility":"public"},{"name":"ticket","type":{"kind":"field"},"visibility":"public"},{"name":"root","type":{"kind":"field"},"visibility":"public"},{"name":"from","type":{"kind":"field"},"visibility":"private"},{"name":"salt_old","type":{"kind":"field"},"visibility":"private"},{"name":"to","type":{"kind":"field"},"visibility":"private"},{"name":"salt_new","type":{"kind":"field"},"visibility":"private"},{"name":"path_siblings","type":{"kind":"array","length":10,"type":{"kind":"field"}},"visibility":"private"},{"name":"path_bits","type":{"kind":"array","length":10,"type":{"kind":"field"}},"visibility":"private"}],"return_type":null,"error_types":{}},"bytecode":"H4sIAAAAAAAA/9VcCVNbZRS9CXZzrZCwtlWrVkUteVkgoS6glrqAWuoCaqlFgpa6gFrqAmqpC6ilLqCWuoD6Ox3vLd/nXEM68005t/PyZs7kNbSn596TnAMheQlaP/5mDNHGI+Fue9xtLtOZz5e7suUoFx3PZEujxUImXxjtLEbFqFAsjGWLuVy5mC92lUZLXZlSlM+Vo/FCKTeeWT92Ka7MJg9LnbuvXGe28g7RVs+4RmmV83/c+RZ1vkud73bn/t/tYdzCuJVxm7rfH0nwDgjnVbQH6Hu1fW5Ve9sWuM+9jNsZdzDuvAr7TAD3udd4n/rxuTVwn/sYdzHuZtzj7q/GvU9xJAO52xn3Mu5j3F/Bh/So3umt5M1s7ojqgX5Vzq6POOvWevdbCt5vwNtB2GC1mLtDLRjEWzUc5Mnon6jbKewJLENHjKzsjy4fDpqvPZA7zygwOhld6n50gLe7HaM863B7SWI9i9qBMxcJ+w0bOrAbmKOB8M+nBqrNwEbq1npLloJLBrzdFO/Alrm71YJBvJe0ooNPgipP2OArEj748sCZD5BtiQq/L7QdFFZ0DzAeZDzEeJjsiq7b6UP50u20o/0+AJy5x9hv7XFPoN+9jEcYjzIeI7ufelLMkSJ8xqWoNksUqVvrPWgp+KABbx/Fu0Rl7j61YBBv1RLNbO747xsS1D6Fr9dAZy9Q4yGyDVXh9+F5LYWF6uOMJxhPMp4iuxLtc/pQvvQ57Wi/DwFn7jf2W3vcH+j3AONpxjOMZ8muRNPMkSZ8xqWpNksUqVvrPWwp+LAB7yDFu0Rl7kG1YBCvSYlKCPYTNqQHDHQOADUeIdtQFX4fntdRWKg+x3ie8QLjRbIr0UGnD+XLoNOO9vsIcOYhY7+1x0OBfg8zXmK8zHiF7Eq0kTkaCZ9xjVSbJYrUrfUetRR81IB3hOJdojL3iFowiNekRCUEhwgb0sMGOoeBGo+RbagKvw/P6yksVF9lHGeMMl4juxIdcfpQvow47Wi/jwFnHjP2W3s8Fuh3mTHOeJ3xBtmVaBNzNBE+45qoNksUqVvrPWEp+IQB7wTFu0Rl7gm1YBCvSYlKCI4RNqTLBjrLQI0nyTZUhd+H5w0UFqpvMt5ivM14h+xKdMLpQ/ky4bSj/T4JnHnS2G/t8WSg31OMdxnvMd4nuxJtZo5mwmdcM9VmiSJ1a72nLAWfMuCdpniXqMw9rRYM4jUpUQnBScKG9JSBzimgxtNkG6rC78PzRgoL1Q8YHzI+YnxMdiU67fShfJl22tF+nwbOPGPst/Z4JtDvWcYnjE8Zn5FdibYwRwvhM66FarNEkbq13jOWgs8Y8M5RvEtU5p5TCwbxmpSohOAMYUN61kDnLFDjWbINVeH34XkThYXq54wvGF8yviK7Ep1z+lC+zDntaL/PAmeeN/Zbezwf6PcC42vGN4xvya5EW5mjlfAZ10q1WaJI3VrvOUvB5wx4FyneJSpzL6oFg3hNSlRCcJ6wIb1goHMBqPE82Yaq8Pvw3Elhofod43vGD4wfya5EF50+lC+LTjva7/PAmZeM/dYeLwX6vcz4ifEz4xeyK9E25mgjfMa1UW2WKFK31nvBUvAFA94VineJytwrasEgXpMSlRBcImxILxvoXAZqvEi2oSr8PjxvprBQ/ZXxG+N3xh9kV6IrTh/KlxWnHe33ReDMq8Z+a49XA/1eY/zJ+IvWr+R1Ob8zmzsu+bMKfvysGTwu64AzrxHWb+9Ns7uVP8sVwOQqS3LlKrkAinxWWD7qJO/Uljeaye/J5WV+eZVip3uMyONGriEgH4GUT3DIG1CbHK+8eik/fLXR/69qlXC7rqONh++tHRW3afV15F49f8qGP7OtyoxpdZ6qmDOpvtYD0uD5/L630MYjWfE1/3e3V+hL4PVFlVrqqvxf/mhwtyl1n9/nvxLJZr5GUAAA","debug_symbols":"vVjtbqMwEHwXfvPD6/X6417ldKpoSiskRCKaVDpVffczYSDtSUYRe70/mSRmRrvjYS14r57ax8vLQzc8H1+rHz/fq8ex6/vu5aE/Hppzdxzyv+8fdbX8fDiPbZv/qj6tZ9apGdvhXP0YLn1fV29Nf7le9HpqhiuemzGvmrpqh6eMWfC569vp20d9Y5sy1RoKYFvDcRWQrwpUViBjExTIiJQUbFmBxUKAU7jx4xc+b/RgiZcerPUlBbfRA7lFgcj7XTUEs9YQXUnBb9QQxC01hMAlhVBWSNZDIHHawSdjVheM83t6iGlxgZIp9nBvHl0opWlLgVgWBRJXTLRVR5pYmWly6lCTqFO9XcVdsaagzjVFZbC3BO5M9mYb+mh/DqbnPdG2Xm67YYqjlvXT2imjbUUdKqsfllY7La1+XNrvnZdW0s3LVNpP1h/grD7B9Uc4/4MzXH+Isz6YrA0m64PJ3xtMXouwXD7I3VYwnYtLEU7SPom49uHizirSWoWQL0psRpPsGk1K+ySMrBLW6CVklxfCq51SflrYlvA3iVCuIqkHlhjlwBJSjwqx6lEhrBwVwupRsdnGfaNiMxOeVie8Ld4fEvSZiNpMJP0zoFFnwpMyE570j4Hmvx0ff+3nr/yrOXTjl3cplckN1xVdP+31k6dBV1duepSsK5l2pa58hrwWpl2uq5iDmVOVMuRkkAESMOtInpmUlXwuh9ycIJKZRh7XBWAEpplnDZBmvrVAnvnWzddbAULPBvAiMM08NkCa+Wzn65mB0GOZeeyBAbwITDPfoV+Hfh30HM8854Ay85wHBvDRr4N/Aj2hmSfwT+CfOCD8E/Qr8E+gJ/DPwz8P/zz88/DPo18P/zz0PPzz8M/DvwD/AvwL6DfAvwC9AP8C/AvwL8C/AP8i+o3wL0Ivwr8I/yL8i/AvTnpTpt+asWse+xYvA58vw+HTu8Hz79Oysrw9PI3HQ/t0Gdsp+9e1fDf8AQ==","file_map":{"50":{"source":"// zkTable `board` module - hidden movement on a public graph.\r\n//\r\n// Proves a piece moved from a hidden position to a new hidden position along a\r\n// legal edge of a public transit graph, using an announced transport `ticket`,\r\n// WITHOUT revealing either position.\r\n//\r\n// Commitments: C = Poseidon2(value, salt) (hash2)\r\n// Edge leaf: L = Poseidon2(Poseidon2(from,to), ticket)\r\n// Edge tree: a Merkle tree over all legal directed edges (from,to,ticket);\r\n// its root `root` is a public per-map constant.\r\n//\r\n// hash2 == Barretenberg/Noir Poseidon2 over 2 inputs, which the off-chain tree\r\n// builder (soroban-poseidon `poseidon2_hash`) reproduces exactly. Only hash2 is\r\n// used so on-/off-chain hashing provably agree.\r\nuse dep::poseidon::poseidon2::Poseidon2;\r\n\r\n// Merkle depth of the edge tree: 2^10 = 1024 directed edges (ample for a\r\n// ~100-node map). Fixed so the circuit size is independent of map size.\r\nglobal TREE_DEPTH: u32 = 10;\r\n\r\nfn hash2(a: Field, b: Field) -> Field {\r\n Poseidon2::hash([a, b], 2)\r\n}\r\n\r\nfn constrain_bit(bit: Field) {\r\n assert(bit * (1 - bit) == 0);\r\n}\r\n\r\n// Recompute a Merkle root from `leaf` and its authentication path.\r\n// bit == 0 -> current node is the left child; bit == 1 -> right child.\r\nfn compute_root(leaf: Field, siblings: [Field; TREE_DEPTH], bits: [Field; TREE_DEPTH]) -> Field {\r\n let mut cur = leaf;\r\n for i in 0..TREE_DEPTH {\r\n let sib = siblings[i];\r\n let bit = bits[i];\r\n constrain_bit(bit);\r\n if bit == 0 {\r\n cur = hash2(cur, sib);\r\n } else {\r\n cur = hash2(sib, cur);\r\n }\r\n }\r\n cur\r\n}\r\n\r\npub fn main(\r\n c_old: pub Field,\r\n c_new: pub Field,\r\n ticket: pub Field,\r\n root: pub Field,\r\n from: Field,\r\n salt_old: Field,\r\n to: Field,\r\n salt_new: Field,\r\n path_siblings: [Field; TREE_DEPTH],\r\n path_bits: [Field; TREE_DEPTH],\r\n) {\r\n // 1. The hidden old position matches the committed current position.\r\n assert(hash2(from, salt_old) == c_old);\r\n // 2. The hidden new position matches the announced new commitment.\r\n assert(hash2(to, salt_new) == c_new);\r\n // 3. (from, to, ticket) is a legal edge: its leaf is in the edge tree.\r\n let leaf = hash2(hash2(from, to), ticket);\r\n assert(compute_root(leaf, path_siblings, path_bits) == root);\r\n}\r\n\r\n#[test]\r\nfn test_smoke() {\r\n // Sanity: a commitment round-trips. (Full membership is exercised by the\r\n // Rust witness builder + on-chain tests, which control the tree root.)\r\n let c = hash2(7, 42);\r\n assert(c == hash2(7, 42));\r\n}\r\n","path":"/mnt/c/Users/freed/OneDrive/Desktop/zkTable/packages/circuits/move_along/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/freed/nargo/github.com/noir-lang/poseidon/v0.2.0/src/poseidon2.nr"}},"names":["main"],"brillig_names":["directive_invert"]}
Binary file
@@ -1 +0,0 @@
1
- ["0x0000000000000000000000000000000000000000000000000000000000002000","0x0000000000000000000000000000000000000000000000000000000000000014","0x0000000000000000000000000000000000000000000000000000000000000001","0x00000000000000000000000000000000000000000000000000000000ffffffff","0x0000000000000000000000000000001ef05de4597e054159db57dd7470a2b402","0x0000000000000000000000000000000000139ab1aebf70f7e418006c183311d3","0x00000000000000000000000000000026dec106813aaa74653647525320f29882","0x000000000000000000000000000000000009239bcef4364c3574d6ef26a3bfe6","0x00000000000000000000000000000057adbd851607ee1ed5ea1a41b0c78bd44f","0x000000000000000000000000000000000023c1e865bc75235d501d32fd4f4fa2","0x000000000000000000000000000000a979f9f657a5c4721a7171f24639d0697f","0x00000000000000000000000000000000000e785e558f50f0142e56801052e410","0x000000000000000000000000000000e23edea058f9898ec8357e3b9e5c00b39c","0x0000000000000000000000000000000000076f57e17f022f69dd396da533a107","0x0000000000000000000000000000009719b77ae55119c350544fb988f82136b5","0x0000000000000000000000000000000000146d8e33ec2112d2bd44d9fa1cf485","0x000000000000000000000000000000500f0c2ae144841772c6e0e4d2e546964f","0x000000000000000000000000000000000009728566bf6c0fca86f2fe9c04cb97","0x0000000000000000000000000000002d47c8e9b3c015247f287e1e4092696b32","0x00000000000000000000000000000000000a0333e42b7f3e7b2af908784cdea3","0x000000000000000000000000000000543191359812971f18d81711b65326304c","0x00000000000000000000000000000000002a610f2dea6754384d67544c5e504f","0x0000000000000000000000000000000c83301ab472d78da737dd849ec7e01e47","0x000000000000000000000000000000000029ca545a081a8cba846a0b27b48b90","0x000000000000000000000000000000aa61ce8c9d39cd8464460c6c4871d3c10a","0x0000000000000000000000000000000000303709216a00f9c239a25d7fa5cffe","0x0000000000000000000000000000007b17dc13b22c19dd53a3b4772a38787da7","0x0000000000000000000000000000000000216b948d742e31108609006235dd22","0x0000000000000000000000000000002afc5cac5dabeb8f74a2f89ad33f068fe4","0x0000000000000000000000000000000000038147f7985ab2a8d179a7a764ee62","0x0000000000000000000000000000005c7f68b34721dbdaa9d8f2cfc9f432da95","0x000000000000000000000000000000000024095afc77887b20f8293c4a2602c5","0x00000000000000000000000000000024e640d77486f241df4e65111ec10d14f5","0x00000000000000000000000000000000000280de4001cdd14d69feefc78a0bde","0x000000000000000000000000000000fd9384ac9af95c9c63dc68d6910b0710a5","0x00000000000000000000000000000000000ce10088560e20ee658cb12307ed00","0x0000000000000000000000000000005d99df2137d3e4acb3ca67496281caf8cd","0x0000000000000000000000000000000000199f4330b5979787d8e5016f3e05ad","0x0000000000000000000000000000001402447eb36518626878b6db427325cd93","0x00000000000000000000000000000000000d5fbeae433d2437797c7b6b83252a","0x0000000000000000000000000000006623c6b5d1a214e18ced1876f58c287408","0x0000000000000000000000000000000000299c621029e110ef289b105aa23259","0x00000000000000000000000000000029ad608e8c57a845f6b206a7cd06f20dc9","0x00000000000000000000000000000000001afdd25d347f91346774ed90a67adb","0x000000000000000000000000000000d0636acabe42d9b0f674cdca99e8f44108","0x000000000000000000000000000000000029ebcaefa30abd527532dcc66013e6","0x0000000000000000000000000000006b0fa0d80de336b42b45264bef3f198065","0x000000000000000000000000000000000026c71671e8bcfb09be9b289db68b46","0x0000000000000000000000000000009aa7b8224af28a2c7ea03cc9db08453fd1","0x0000000000000000000000000000000000205ca51860ff55aa8cf144a856e27b","0x000000000000000000000000000000f678538b6c4b97cbe84f0a1c2d7e7c9b5b","0x000000000000000000000000000000000013cca1be27d3214dab1dbf8c4fd3cb","0x000000000000000000000000000000eb30e1649e76e0d2bc69a5bebcaecac477","0x000000000000000000000000000000000024f2816a22f43bfa20898b00903c63","0x000000000000000000000000000000cea31fa01d6812eeee1998b49bb4cd2d27","0x000000000000000000000000000000000003e81da072f839c554aec2c67d6d44","0x0000000000000000000000000000002179fe8a3e0d08d7ff0b0bc34e27a1ca99","0x00000000000000000000000000000000001339e8e774420af78a74d890d51b55","0x000000000000000000000000000000d77357ff968dff59cdf9cfc611c4a94de0","0x0000000000000000000000000000000000087e076ff6fd82bc8541c7cee2a585","0x00000000000000000000000000000049dc2c7d4cbd887a66c12d0df2ad642bd5","0x000000000000000000000000000000000014b096d6d772838b9057f96d9a91f6","0x0000000000000000000000000000008639fb5d137c3d1533ef479e2ea8a394d2","0x00000000000000000000000000000000001b112d95e3bf5ab6e289ae96d2a32f","0x000000000000000000000000000000cf05ea277117ba0a5e68ceb5925f4ff19d","0x00000000000000000000000000000000001aa3a6515cb0b178ea8120bab41ef4","0x00000000000000000000000000000048c56751c923baee6e6fd32516d6e42ef6","0x000000000000000000000000000000000027b8d4b65b7270977ce60c3e419a9b","0x000000000000000000000000000000d5b1671bde7f611362adbb2d0c4624d5a7","0x0000000000000000000000000000000000130af9926885bd8fd5d9c2c184bfca","0x000000000000000000000000000000c66f6698adb195f66d55a03f6305b7a024","0x0000000000000000000000000000000000035d11ee534c68b9bcf90825df832c","0x0000000000000000000000000000009069432b2a69f3041306d48ec527c9cefd","0x00000000000000000000000000000000000d07332edd7aacb652b5411cef2982","0x00000000000000000000000000000076f8db0e1face5fd0f67f8d4c2c28e315e","0x000000000000000000000000000000000003358d6d5e694120bd0d7566bdd5e8","0x0000000000000000000000000000008a9bfd223934448ddba868c79c656693bf","0x000000000000000000000000000000000012387ccaa191748f4cda25aeb64600","0x000000000000000000000000000000713eefc86849a12bca1617dd808a1bad85","0x000000000000000000000000000000000028cc75d56bd3f1683ae3d47c2d3888","0x0000000000000000000000000000007356c3ec724b3d2991f524eefa9a3bbd68","0x00000000000000000000000000000000001c3082cde00068be5035920b023a4b","0x000000000000000000000000000000a221c31386db5eee28d9c35bc79a45e5c3","0x00000000000000000000000000000000001fe33f8d98e4d98368e110874eb40b","0x0000000000000000000000000000001421e83c871747e7223f12276091f94c41","0x00000000000000000000000000000000001a33cf3755a386aabba274a397ecc7","0x000000000000000000000000000000eda4b997a3c65ef6e48f404dfa8628e206","0x000000000000000000000000000000000000b633ed858b8e6554aba494c3f262","0x0000000000000000000000000000003cee056cd8653f11fe91bec67f9a1ba501","0x00000000000000000000000000000000000cb15289361c0a0e1b78f25efb7e6f","0x000000000000000000000000000000443f54f12a87c2cf5182f3620fc1944c6d","0x000000000000000000000000000000000029664df9e7f07b4aec2f396f6cde12","0x00000000000000000000000000000073875103abf917a76019cf7bba4da77621","0x0000000000000000000000000000000000070b433d46367e191b9bf40eef28b6","0x000000000000000000000000000000a0af4c7b9ef86fe2480692f5f6dc52534a","0x000000000000000000000000000000000026eccd7100479fc88688e129589197","0x0000000000000000000000000000009fb1952dd9aeab56e182d68b662852e36a","0x00000000000000000000000000000000001d62dc541680650e594af57d090320","0x0000000000000000000000000000008dff03113bc84bd8a1582702c3a51cc8fd","0x0000000000000000000000000000000000150131f285f1648db0d2d85128255b","0x0000000000000000000000000000006f575a60d3c9d50fc277988d94997a5ddb","0x00000000000000000000000000000000000082e0b52e8df94612b14bc2afb9f7","0x000000000000000000000000000000fe073ff12f2bad78b10ae4a1629516a075","0x000000000000000000000000000000000026a696f75adf15d5934d9edad81c9b","0x0000000000000000000000000000000000000000000000000000000000000001","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000002","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000006e1f2f143b82ea9ac5ecfb71b5fbfe4324","0x0000000000000000000000000000000000037f638c9ab695c3fc340ab91c29ea","0x00000000000000000000000000000084bec3c120d398b8b73c31448b7511d13a","0x0000000000000000000000000000000000213eef8b9f689e4cc1c06dd04cd5f1"]