@proto-kit/common 0.1.1-develop.211 → 0.1.1-develop.2137

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.
Files changed (258) hide show
  1. package/dist/cache/CacheManifest.d.ts +11 -0
  2. package/dist/cache/CacheManifest.d.ts.map +1 -0
  3. package/dist/cache/CacheManifest.js +56 -0
  4. package/dist/cache/CacheManifest.js.map +1 -0
  5. package/dist/cache/ProxyCache.d.ts +13 -0
  6. package/dist/cache/ProxyCache.d.ts.map +1 -0
  7. package/dist/cache/ProxyCache.js +24 -0
  8. package/dist/cache/ProxyCache.js.map +1 -0
  9. package/dist/cache/RemoteCache.d.ts +8 -0
  10. package/dist/cache/RemoteCache.d.ts.map +1 -0
  11. package/dist/cache/RemoteCache.js +2 -0
  12. package/dist/cache/RemoteCache.js.map +1 -0
  13. package/dist/cache/RemoteCacheCompiler.d.ts +16 -0
  14. package/dist/cache/RemoteCacheCompiler.d.ts.map +1 -0
  15. package/dist/cache/RemoteCacheCompiler.js +104 -0
  16. package/dist/cache/RemoteCacheCompiler.js.map +1 -0
  17. package/dist/compiling/AtomicCompileHelper.d.ts +15 -0
  18. package/dist/compiling/AtomicCompileHelper.d.ts.map +1 -0
  19. package/dist/compiling/AtomicCompileHelper.js +61 -0
  20. package/dist/compiling/AtomicCompileHelper.js.map +1 -0
  21. package/dist/compiling/CompilableModule.d.ts +6 -0
  22. package/dist/compiling/CompilableModule.d.ts.map +1 -0
  23. package/dist/compiling/CompilableModule.js +2 -0
  24. package/dist/compiling/CompilableModule.js.map +1 -0
  25. package/dist/compiling/CompileRegistry.d.ts +25 -0
  26. package/dist/compiling/CompileRegistry.d.ts.map +1 -0
  27. package/dist/compiling/CompileRegistry.js +62 -0
  28. package/dist/compiling/CompileRegistry.js.map +1 -0
  29. package/dist/compiling/services/ChildVerificationKeyService.d.ts +10 -0
  30. package/dist/compiling/services/ChildVerificationKeyService.d.ts.map +1 -0
  31. package/dist/compiling/services/ChildVerificationKeyService.js +27 -0
  32. package/dist/compiling/services/ChildVerificationKeyService.js.map +1 -0
  33. package/dist/config/ChildContainerCreatable.d.ts +5 -0
  34. package/dist/config/ChildContainerCreatable.d.ts.map +1 -0
  35. package/dist/config/ChildContainerCreatable.js +2 -0
  36. package/dist/config/ChildContainerCreatable.js.map +1 -0
  37. package/dist/config/ChildContainerProvider.d.ts +5 -0
  38. package/dist/config/ChildContainerProvider.d.ts.map +1 -0
  39. package/dist/config/ChildContainerProvider.js +2 -0
  40. package/dist/config/ChildContainerProvider.js.map +1 -0
  41. package/dist/config/ConfigurableModule.d.ts +6 -2
  42. package/dist/config/ConfigurableModule.d.ts.map +1 -1
  43. package/dist/config/ConfigurableModule.js +5 -0
  44. package/dist/config/ConfigurableModule.js.map +1 -0
  45. package/dist/config/ModuleContainer.d.ts +70 -23
  46. package/dist/config/ModuleContainer.d.ts.map +1 -1
  47. package/dist/config/ModuleContainer.js +164 -31
  48. package/dist/config/ModuleContainer.js.map +1 -0
  49. package/dist/config/Startable.d.ts +4 -0
  50. package/dist/config/Startable.d.ts.map +1 -0
  51. package/dist/config/Startable.js +2 -0
  52. package/dist/config/Startable.js.map +1 -0
  53. package/dist/config/injectAlias.d.ts +18 -0
  54. package/dist/config/injectAlias.d.ts.map +1 -0
  55. package/dist/config/injectAlias.js +47 -0
  56. package/dist/config/injectAlias.js.map +1 -0
  57. package/dist/dependencyFactory/DependencyFactory.d.ts +14 -9
  58. package/dist/dependencyFactory/DependencyFactory.d.ts.map +1 -1
  59. package/dist/dependencyFactory/DependencyFactory.js +2 -96
  60. package/dist/dependencyFactory/DependencyFactory.js.map +1 -0
  61. package/dist/dependencyFactory/injectOptional.d.ts +16 -0
  62. package/dist/dependencyFactory/injectOptional.d.ts.map +1 -0
  63. package/dist/dependencyFactory/injectOptional.js +40 -0
  64. package/dist/dependencyFactory/injectOptional.js.map +1 -0
  65. package/dist/dummyVerificationKey.d.ts +3 -0
  66. package/dist/dummyVerificationKey.d.ts.map +1 -0
  67. package/dist/dummyVerificationKey.js +8 -0
  68. package/dist/dummyVerificationKey.js.map +1 -0
  69. package/dist/events/EventEmitter.d.ts +19 -0
  70. package/dist/events/EventEmitter.d.ts.map +1 -0
  71. package/dist/events/EventEmitter.js +35 -0
  72. package/dist/events/EventEmitter.js.map +1 -0
  73. package/dist/events/EventEmitterProxy.d.ts +18 -0
  74. package/dist/events/EventEmitterProxy.d.ts.map +1 -0
  75. package/dist/events/EventEmitterProxy.js +35 -0
  76. package/dist/events/EventEmitterProxy.js.map +1 -0
  77. package/dist/events/EventEmittingComponent.d.ts +9 -0
  78. package/dist/events/EventEmittingComponent.d.ts.map +1 -0
  79. package/dist/events/EventEmittingComponent.js +2 -0
  80. package/dist/events/EventEmittingComponent.js.map +1 -0
  81. package/dist/events/ReplayingSingleUseEventEmitter.d.ts +17 -0
  82. package/dist/events/ReplayingSingleUseEventEmitter.d.ts.map +1 -0
  83. package/dist/events/ReplayingSingleUseEventEmitter.js +34 -0
  84. package/dist/events/ReplayingSingleUseEventEmitter.js.map +1 -0
  85. package/dist/index.d.ts +27 -1
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +28 -2
  88. package/dist/index.js.map +1 -0
  89. package/dist/log.d.ts +37 -0
  90. package/dist/log.d.ts.map +1 -0
  91. package/dist/log.js +117 -0
  92. package/dist/log.js.map +1 -0
  93. package/dist/trees/InMemoryLinkedLeafStore.d.ts +21 -0
  94. package/dist/trees/InMemoryLinkedLeafStore.d.ts.map +1 -0
  95. package/dist/trees/InMemoryLinkedLeafStore.js +26 -0
  96. package/dist/trees/InMemoryLinkedLeafStore.js.map +1 -0
  97. package/dist/trees/InMemoryLinkedMerkleLeafStore.d.ts +7 -0
  98. package/dist/trees/InMemoryLinkedMerkleLeafStore.d.ts.map +1 -0
  99. package/dist/trees/InMemoryLinkedMerkleLeafStore.js +6 -0
  100. package/dist/trees/InMemoryLinkedMerkleLeafStore.js.map +1 -0
  101. package/dist/trees/InMemoryMerkleTreeStorage.d.ts +11 -0
  102. package/dist/trees/InMemoryMerkleTreeStorage.d.ts.map +1 -0
  103. package/dist/trees/InMemoryMerkleTreeStorage.js +13 -0
  104. package/dist/trees/InMemoryMerkleTreeStorage.js.map +1 -0
  105. package/dist/trees/LinkedMerkleTree.d.ts +345 -0
  106. package/dist/trees/LinkedMerkleTree.d.ts.map +1 -0
  107. package/dist/trees/LinkedMerkleTree.js +337 -0
  108. package/dist/trees/LinkedMerkleTree.js.map +1 -0
  109. package/dist/trees/LinkedMerkleTreeStore.d.ts +24 -0
  110. package/dist/trees/LinkedMerkleTreeStore.d.ts.map +1 -0
  111. package/dist/trees/LinkedMerkleTreeStore.js +2 -0
  112. package/dist/trees/LinkedMerkleTreeStore.js.map +1 -0
  113. package/dist/trees/MerkleTreeStore.d.ts +5 -0
  114. package/dist/trees/MerkleTreeStore.d.ts.map +1 -0
  115. package/dist/trees/MerkleTreeStore.js +2 -0
  116. package/dist/trees/MerkleTreeStore.js.map +1 -0
  117. package/dist/trees/MockAsyncMerkleStore.d.ts +9 -0
  118. package/dist/trees/MockAsyncMerkleStore.d.ts.map +1 -0
  119. package/dist/trees/MockAsyncMerkleStore.js +20 -0
  120. package/dist/trees/MockAsyncMerkleStore.js.map +1 -0
  121. package/dist/trees/RollupMerkleTree.d.ts +147 -0
  122. package/dist/trees/RollupMerkleTree.d.ts.map +1 -0
  123. package/dist/trees/RollupMerkleTree.js +218 -0
  124. package/dist/trees/RollupMerkleTree.js.map +1 -0
  125. package/dist/trees/VirtualMerkleTreeStore.d.ts +13 -0
  126. package/dist/trees/VirtualMerkleTreeStore.d.ts.map +1 -0
  127. package/dist/trees/VirtualMerkleTreeStore.js +18 -0
  128. package/dist/trees/VirtualMerkleTreeStore.js.map +1 -0
  129. package/dist/trees/lmt/AbstractLinkedMerkleTree.d.ts +288 -0
  130. package/dist/trees/lmt/AbstractLinkedMerkleTree.d.ts.map +1 -0
  131. package/dist/trees/lmt/AbstractLinkedMerkleTree.js +22 -0
  132. package/dist/trees/lmt/AbstractLinkedMerkleTree.js.map +1 -0
  133. package/dist/trees/lmt/InMemoryLinkedLeafStore.d.ts +21 -0
  134. package/dist/trees/lmt/InMemoryLinkedLeafStore.d.ts.map +1 -0
  135. package/dist/trees/lmt/InMemoryLinkedLeafStore.js +26 -0
  136. package/dist/trees/lmt/InMemoryLinkedLeafStore.js.map +1 -0
  137. package/dist/trees/lmt/InMemoryLinkedMerkleLeafStore.d.ts +7 -0
  138. package/dist/trees/lmt/InMemoryLinkedMerkleLeafStore.d.ts.map +1 -0
  139. package/dist/trees/lmt/InMemoryLinkedMerkleLeafStore.js +6 -0
  140. package/dist/trees/lmt/InMemoryLinkedMerkleLeafStore.js.map +1 -0
  141. package/dist/trees/lmt/LinkedLeafStore.d.ts +16 -0
  142. package/dist/trees/lmt/LinkedLeafStore.d.ts.map +1 -0
  143. package/dist/trees/lmt/LinkedLeafStore.js +2 -0
  144. package/dist/trees/lmt/LinkedLeafStore.js.map +1 -0
  145. package/dist/trees/lmt/LinkedLinkedStore.d.ts +16 -0
  146. package/dist/trees/lmt/LinkedLinkedStore.d.ts.map +1 -0
  147. package/dist/trees/lmt/LinkedLinkedStore.js +2 -0
  148. package/dist/trees/lmt/LinkedLinkedStore.js.map +1 -0
  149. package/dist/trees/lmt/LinkedMerkleTree.d.ts +11 -0
  150. package/dist/trees/lmt/LinkedMerkleTree.d.ts.map +1 -0
  151. package/dist/trees/lmt/LinkedMerkleTree.js +241 -0
  152. package/dist/trees/lmt/LinkedMerkleTree.js.map +1 -0
  153. package/dist/trees/lmt/LinkedMerkleTreeCircuitOps.d.ts +113 -0
  154. package/dist/trees/lmt/LinkedMerkleTreeCircuitOps.d.ts.map +1 -0
  155. package/dist/trees/lmt/LinkedMerkleTreeCircuitOps.js +113 -0
  156. package/dist/trees/lmt/LinkedMerkleTreeCircuitOps.js.map +1 -0
  157. package/dist/trees/lmt/LinkedMerkleTreeDatabase.d.ts +7 -0
  158. package/dist/trees/lmt/LinkedMerkleTreeDatabase.d.ts.map +1 -0
  159. package/dist/trees/lmt/LinkedMerkleTreeDatabase.js +2 -0
  160. package/dist/trees/lmt/LinkedMerkleTreeDatabase.js.map +1 -0
  161. package/dist/trees/lmt/LinkedMerkleTreeStore.d.ts +16 -0
  162. package/dist/trees/lmt/LinkedMerkleTreeStore.d.ts.map +1 -0
  163. package/dist/trees/lmt/LinkedMerkleTreeStore.js +2 -0
  164. package/dist/trees/lmt/LinkedMerkleTreeStore.js.map +1 -0
  165. package/dist/trees/lmt/LinkedMerkleTreeTypes.d.ts +74 -0
  166. package/dist/trees/lmt/LinkedMerkleTreeTypes.d.ts.map +1 -0
  167. package/dist/trees/lmt/LinkedMerkleTreeTypes.js +50 -0
  168. package/dist/trees/lmt/LinkedMerkleTreeTypes.js.map +1 -0
  169. package/dist/trees/sparse/InMemoryMerkleTreeStorage.d.ts +11 -0
  170. package/dist/trees/sparse/InMemoryMerkleTreeStorage.d.ts.map +1 -0
  171. package/dist/trees/sparse/InMemoryMerkleTreeStorage.js +13 -0
  172. package/dist/trees/sparse/InMemoryMerkleTreeStorage.js.map +1 -0
  173. package/dist/trees/sparse/MerkleTreeStore.d.ts +5 -0
  174. package/dist/trees/sparse/MerkleTreeStore.d.ts.map +1 -0
  175. package/dist/trees/sparse/MerkleTreeStore.js +2 -0
  176. package/dist/trees/sparse/MerkleTreeStore.js.map +1 -0
  177. package/dist/trees/sparse/MockAsyncMerkleStore.d.ts +9 -0
  178. package/dist/trees/sparse/MockAsyncMerkleStore.d.ts.map +1 -0
  179. package/dist/trees/sparse/MockAsyncMerkleStore.js +20 -0
  180. package/dist/trees/sparse/MockAsyncMerkleStore.js.map +1 -0
  181. package/dist/trees/sparse/RollupMerkleTree.d.ts +158 -0
  182. package/dist/trees/sparse/RollupMerkleTree.d.ts.map +1 -0
  183. package/dist/trees/sparse/RollupMerkleTree.js +330 -0
  184. package/dist/trees/sparse/RollupMerkleTree.js.map +1 -0
  185. package/dist/types.d.ts +62 -0
  186. package/dist/types.d.ts.map +1 -1
  187. package/dist/types.js +14 -1
  188. package/dist/types.js.map +1 -0
  189. package/dist/union/union.d.ts +177 -0
  190. package/dist/union/union.d.ts.map +1 -0
  191. package/dist/union/union.js +35 -0
  192. package/dist/union/union.js.map +1 -0
  193. package/dist/utils.d.ts +57 -2
  194. package/dist/utils.d.ts.map +1 -1
  195. package/dist/utils.js +153 -4
  196. package/dist/utils.js.map +1 -0
  197. package/dist/zkProgrammable/ProvableMethodExecutionContext.d.ts +4 -3
  198. package/dist/zkProgrammable/ProvableMethodExecutionContext.d.ts.map +1 -1
  199. package/dist/zkProgrammable/ProvableMethodExecutionContext.js +2 -3
  200. package/dist/zkProgrammable/ProvableMethodExecutionContext.js.map +1 -0
  201. package/dist/zkProgrammable/ZkProgrammable.d.ts +32 -11
  202. package/dist/zkProgrammable/ZkProgrammable.d.ts.map +1 -1
  203. package/dist/zkProgrammable/ZkProgrammable.js +36 -17
  204. package/dist/zkProgrammable/ZkProgrammable.js.map +1 -0
  205. package/dist/zkProgrammable/provableMethod.d.ts +7 -4
  206. package/dist/zkProgrammable/provableMethod.d.ts.map +1 -1
  207. package/dist/zkProgrammable/provableMethod.js +30 -14
  208. package/dist/zkProgrammable/provableMethod.js.map +1 -0
  209. package/jest.config.cjs +12 -1
  210. package/package.json +9 -7
  211. package/src/cache/CacheManifest.ts +57 -0
  212. package/src/cache/ProxyCache.ts +30 -0
  213. package/src/cache/RemoteCache.ts +9 -0
  214. package/src/cache/RemoteCacheCompiler.ts +131 -0
  215. package/src/compiling/AtomicCompileHelper.ts +71 -0
  216. package/src/compiling/CompilableModule.ts +6 -0
  217. package/src/compiling/CompileRegistry.ts +64 -0
  218. package/src/compiling/services/ChildVerificationKeyService.ts +26 -0
  219. package/src/config/ChildContainerCreatable.ts +5 -0
  220. package/src/config/ChildContainerProvider.ts +5 -0
  221. package/src/config/ConfigurableModule.ts +15 -2
  222. package/src/config/ModuleContainer.ts +286 -58
  223. package/src/config/Startable.ts +3 -0
  224. package/src/config/injectAlias.ts +70 -0
  225. package/src/dependencyFactory/DependencyFactory.ts +34 -109
  226. package/src/dummyVerificationKey.ts +10 -0
  227. package/src/events/EventEmitter.ts +61 -0
  228. package/src/events/EventEmitterProxy.ts +81 -0
  229. package/src/events/EventEmittingComponent.ts +11 -0
  230. package/src/events/ReplayingSingleUseEventEmitter.ts +42 -0
  231. package/src/index.ts +27 -2
  232. package/src/log.ts +145 -0
  233. package/src/trees/lmt/AbstractLinkedMerkleTree.ts +102 -0
  234. package/src/trees/lmt/InMemoryLinkedLeafStore.ts +42 -0
  235. package/src/trees/lmt/LinkedLeafStore.ts +13 -0
  236. package/src/trees/lmt/LinkedMerkleTree.ts +335 -0
  237. package/src/trees/lmt/LinkedMerkleTreeCircuitOps.ts +188 -0
  238. package/src/trees/lmt/LinkedMerkleTreeTypes.ts +53 -0
  239. package/src/trees/sparse/InMemoryMerkleTreeStorage.ts +17 -0
  240. package/src/trees/sparse/MerkleTreeStore.ts +5 -0
  241. package/src/trees/sparse/MockAsyncMerkleStore.ts +30 -0
  242. package/src/trees/sparse/RollupMerkleTree.ts +512 -0
  243. package/src/types.ts +53 -2
  244. package/src/utils.ts +281 -5
  245. package/src/zkProgrammable/ProvableMethodExecutionContext.ts +6 -6
  246. package/src/zkProgrammable/ZkProgrammable.ts +90 -35
  247. package/src/zkProgrammable/provableMethod.ts +50 -23
  248. package/test/config/ContainerEvents.test.ts +65 -0
  249. package/test/config/ModuleContainer.test.ts +146 -15
  250. package/test/config/injectAlias.test.ts +28 -0
  251. package/test/trees/LinkedMerkleTree.test.ts +124 -0
  252. package/test/trees/LinkedMerkleTreeCircuitOps.test.ts +147 -0
  253. package/test/trees/MerkleTree.test.ts +251 -0
  254. package/test/tsconfig.json +5 -2
  255. package/test/zkProgrammable/ZkProgrammable.test.ts +145 -119
  256. package/tsconfig.json +1 -1
  257. package/LICENSE.md +0 -201
  258. package/tsconfig.test.json +0 -9
@@ -0,0 +1,330 @@
1
+ import { Bool, Field, Poseidon, Provable, Struct } from "o1js";
2
+ import uniqBy from "lodash/uniqBy";
3
+ import { range } from "../../utils";
4
+ import { InMemoryMerkleTreeStorage } from "./InMemoryMerkleTreeStorage";
5
+ /**
6
+ * More efficient version of `maybeSwapBad` which
7
+ * reuses an intermediate variable
8
+ */
9
+ export function maybeSwap(b, x, y) {
10
+ const m = b.toField().mul(x.sub(y)); // b*(x - y)
11
+ const x1 = y.add(m); // y + b*(x - y)
12
+ const y2 = x.sub(m); // x - b*(x - y) = x + b*(y - x)
13
+ return [x1, y2];
14
+ }
15
+ export class StructTemplate extends Struct({
16
+ path: Provable.Array(Field, 0),
17
+ isLeft: Provable.Array(Bool, 0),
18
+ }) {
19
+ }
20
+ /**
21
+ * A [Merkle Tree](https://en.wikipedia.org/wiki/Merkle_tree) is a binary tree in
22
+ * which every leaf is the cryptography hash of a piece of data,
23
+ * and every node is the hash of the concatenation of its two child nodes.
24
+ *
25
+ * A Merkle Tree allows developers to easily and securely verify
26
+ * the integrity of large amounts of data.
27
+ *
28
+ * Take a look at our [documentation](https://docs.minaprotocol.com/en/zkapps)
29
+ * on how to use Merkle Trees in combination with zkApps and
30
+ * zero knowledge programming!
31
+ *
32
+ * Levels are indexed from leaves (level 0) to root (level N - 1).
33
+ *
34
+ * This function takes a height as argument and returns a class
35
+ * that implements a merkletree with that specified height.
36
+ *
37
+ * It also holds the Witness class under tree.WITNESS
38
+ */
39
+ export function createMerkleTree(height) {
40
+ var _a;
41
+ function generateZeroes() {
42
+ const zeroes = [0n];
43
+ for (let index = 1; index < height; index += 1) {
44
+ const previousLevel = Field(zeroes[index - 1]);
45
+ zeroes.push(Poseidon.hash([previousLevel, previousLevel]).toBigInt());
46
+ }
47
+ return zeroes;
48
+ }
49
+ let zeroCache = undefined;
50
+ function getZeroes() {
51
+ if (zeroCache === undefined) {
52
+ zeroCache = generateZeroes();
53
+ }
54
+ return zeroCache;
55
+ }
56
+ /**
57
+ * The {@link RollupMerkleWitness} class defines a circuit-compatible base class
58
+ * for [Merkle Witness'](https://computersciencewiki.org/index.php/Merkle_proof).
59
+ */
60
+ class RollupMerkleWitness extends Struct({
61
+ path: Provable.Array(Field, height - 1),
62
+ isLeft: Provable.Array(Bool, height - 1),
63
+ }) {
64
+ height() {
65
+ return RollupMerkleWitness.height;
66
+ }
67
+ /**
68
+ * Calculates a root depending on the leaf value.
69
+ * @param leaf Value of the leaf node that belongs to this Witness.
70
+ * @returns The calculated root.
71
+ */
72
+ calculateRoot(leaf) {
73
+ let hash = leaf;
74
+ const n = this.height();
75
+ for (let index = 1; index < n; ++index) {
76
+ const isLeft = this.isLeft[index - 1];
77
+ const [left, right] = maybeSwap(isLeft, hash, this.path[index - 1]);
78
+ hash = Poseidon.hash([left, right]);
79
+ }
80
+ return hash;
81
+ }
82
+ calculateRootIncrement(leafIndex, leaf) {
83
+ const root = this.calculateRoot(leaf);
84
+ const newWitness = Provable.witness(RollupMerkleWitness, () => {
85
+ const zero = getZeroes();
86
+ if (zero.length === 0) {
87
+ throw new Error("Zeroes not initialized");
88
+ }
89
+ const zeroes = zero.map((x) => Field(x));
90
+ let hash = leaf;
91
+ const n = this.height();
92
+ let notDiverged = true;
93
+ const newPath = leafIndex.add(1).toBits();
94
+ newPath.push(Bool(false));
95
+ const newSiblings = [];
96
+ const newIsLefts = [];
97
+ for (let index = 0; index < n - 1; ++index) {
98
+ const isLeft = this.isLeft[index];
99
+ const sibling = this.path[index];
100
+ const newIsLeft = newPath[index].not();
101
+ // Bool(true) default for root level
102
+ let convergesNextLevel = true;
103
+ if (index < n - 2) {
104
+ convergesNextLevel = newPath[index + 1]
105
+ .equals(this.isLeft[index + 1])
106
+ .not()
107
+ .toBoolean();
108
+ }
109
+ const nextSibling =
110
+ // eslint-disable-next-line no-nested-ternary
111
+ convergesNextLevel && notDiverged
112
+ ? hash
113
+ : notDiverged
114
+ ? zeroes[index]
115
+ : sibling;
116
+ notDiverged = notDiverged && !convergesNextLevel;
117
+ newSiblings.push(nextSibling);
118
+ newIsLefts.push(newIsLeft);
119
+ const [left, right] = maybeSwap(isLeft, hash, sibling);
120
+ hash = Poseidon.hash([left, right]);
121
+ }
122
+ return new RollupMerkleWitness({
123
+ isLeft: newIsLefts,
124
+ path: newSiblings,
125
+ });
126
+ });
127
+ newWitness.calculateIndex().assertEquals(leafIndex.add(1));
128
+ return [root, newWitness];
129
+ }
130
+ /**
131
+ * Calculates the index of the leaf node that belongs to this Witness.
132
+ * @returns Index of the leaf.
133
+ */
134
+ calculateIndex() {
135
+ let powerOfTwo = Field(1);
136
+ let index = Field(0);
137
+ const n = this.height();
138
+ for (let i = 1; i < n; ++i) {
139
+ index = Provable.if(this.isLeft[i - 1], index, index.add(powerOfTwo));
140
+ powerOfTwo = powerOfTwo.mul(2);
141
+ }
142
+ return index;
143
+ }
144
+ checkMembership(root, key, value) {
145
+ const calculatedRoot = this.calculateRoot(value);
146
+ const calculatedKey = this.calculateIndex();
147
+ // We don't have to range-check the key, because if it would be greater
148
+ // than leafCount, it would not match the computedKey
149
+ key.assertEquals(calculatedKey, "Keys of MerkleWitness does not match");
150
+ return root.equals(calculatedRoot);
151
+ }
152
+ checkMembershipSimple(root, value) {
153
+ const calculatedRoot = this.calculateRoot(value);
154
+ return root.equals(calculatedRoot);
155
+ }
156
+ checkMembershipGetRoots(root, key, value) {
157
+ const calculatedRoot = this.calculateRoot(value);
158
+ const calculatedKey = this.calculateIndex();
159
+ key.assertEquals(calculatedKey, "Keys of MerkleWitness does not match");
160
+ return [root.equals(calculatedRoot), root, calculatedRoot];
161
+ }
162
+ toShortenedEntries() {
163
+ return range(0, 5)
164
+ .concat(range(this.height() - 4, this.height()))
165
+ .map((index) => [
166
+ this.path[index].toString(),
167
+ this.isLeft[index].toString(),
168
+ ].toString());
169
+ }
170
+ static dummy() {
171
+ return new RollupMerkleWitness({
172
+ isLeft: Array(this.height - 1).fill(Bool(true)),
173
+ path: Array(this.height - 1).fill(Field(0)),
174
+ });
175
+ }
176
+ }
177
+ RollupMerkleWitness.height = height;
178
+ return _a = class AbstractRollupMerkleTree {
179
+ static get leafCount() {
180
+ return 2n ** BigInt(AbstractRollupMerkleTree.HEIGHT - 1);
181
+ }
182
+ constructor(store) {
183
+ this.store = store;
184
+ this.zeroes = generateZeroes();
185
+ }
186
+ assertIndexRange(index) {
187
+ if (index > this.leafCount) {
188
+ throw new Error("Index greater than maximum leaf number");
189
+ }
190
+ }
191
+ /**
192
+ * Returns a node which lives at a given index and level.
193
+ * @param level Level of the node.
194
+ * @param index Index of the node.
195
+ * @returns The data of the node.
196
+ */
197
+ getNode(level, index) {
198
+ this.assertIndexRange(index);
199
+ return Field(this.store.getNode(index, level) ?? this.zeroes[level]);
200
+ }
201
+ /**
202
+ * Returns the root of the [Merkle Tree](https://en.wikipedia.org/wiki/Merkle_tree).
203
+ * @returns The root of the Merkle Tree.
204
+ */
205
+ getRoot() {
206
+ return this.getNode(AbstractRollupMerkleTree.HEIGHT - 1, 0n).toConstant();
207
+ }
208
+ // private in interface
209
+ setNode(level, index, value) {
210
+ this.store.setNode(index, level, value.toBigInt());
211
+ }
212
+ /**
213
+ * Sets the value of a leaf node at a given index to a given value.
214
+ * @param index Position of the leaf node.
215
+ * @param leaf New value.
216
+ */
217
+ setLeaf(index, leaf) {
218
+ this.assertIndexRange(index);
219
+ this.setNode(0, index, leaf);
220
+ let currentIndex = index;
221
+ for (let level = 1; level < AbstractRollupMerkleTree.HEIGHT; level += 1) {
222
+ currentIndex /= 2n;
223
+ const left = this.getNode(level - 1, currentIndex * 2n);
224
+ const right = this.getNode(level - 1, currentIndex * 2n + 1n);
225
+ this.setNode(level, currentIndex, Poseidon.hash([left, right]));
226
+ }
227
+ }
228
+ setLeaves(updates) {
229
+ updates.forEach(({ index }) => this.assertIndexRange(index));
230
+ const changes = [];
231
+ // We have to reverse here, because uniqBy only takes the first occurrence of every entry,
232
+ // but we need the last one (since that semantically overwrites the previous one,
233
+ // so we can ignore it)
234
+ let levelChanges = uniqBy(updates.reverse(), "index")
235
+ // we can assume no index is in this list twice, so we don't care about the 0 case
236
+ // This is in reverse order, so its a queue
237
+ .sort((a, b) => (a.index < b.index ? 1 : -1));
238
+ changes.push(...levelChanges
239
+ .map(({ leaf, index }) => ({
240
+ level: 0,
241
+ index,
242
+ value: leaf,
243
+ }))
244
+ .reverse());
245
+ for (let level = 1; level < AbstractRollupMerkleTree.HEIGHT; level += 1) {
246
+ const nextLevelChanges = [];
247
+ while (levelChanges.length > 0) {
248
+ const node = levelChanges.pop();
249
+ let newNode;
250
+ if (node.index % 2n === 0n) {
251
+ let sibling;
252
+ const potentialSibling = levelChanges.at(-1);
253
+ if (potentialSibling !== undefined &&
254
+ potentialSibling.index === node.index + 1n) {
255
+ sibling = potentialSibling.leaf;
256
+ levelChanges.pop();
257
+ }
258
+ else {
259
+ sibling = Field(this.getNode(level - 1, node.index + 1n));
260
+ }
261
+ newNode = Poseidon.hash([node.leaf, sibling]);
262
+ }
263
+ else {
264
+ const sibling = Field(this.getNode(level - 1, node.index - 1n));
265
+ newNode = Poseidon.hash([sibling, node.leaf]);
266
+ }
267
+ const nextLevelIndex = node.index / 2n;
268
+ changes.push({ level, index: nextLevelIndex, value: newNode });
269
+ nextLevelChanges.push({ index: nextLevelIndex, leaf: newNode });
270
+ }
271
+ levelChanges = nextLevelChanges.reverse();
272
+ }
273
+ changes.forEach(({ level, index, value }) => {
274
+ this.setNode(level, index, value);
275
+ });
276
+ }
277
+ /**
278
+ * Returns the witness (also known as
279
+ * [Merkle Proof or Merkle Witness](https://computersciencewiki.org/index.php/Merkle_proof))
280
+ * for the leaf at the given index.
281
+ * @param index Position of the leaf node.
282
+ * @returns The witness that belongs to the leaf.
283
+ */
284
+ getWitness(index) {
285
+ this.assertIndexRange(index);
286
+ const path = [];
287
+ const isLefts = [];
288
+ let currentIndex = index;
289
+ for (let level = 0; level < AbstractRollupMerkleTree.HEIGHT - 1; level += 1) {
290
+ const isLeft = currentIndex % 2n === 0n;
291
+ const sibling = this.getNode(level, isLeft ? currentIndex + 1n : currentIndex - 1n);
292
+ isLefts.push(Bool(isLeft));
293
+ path.push(sibling);
294
+ currentIndex /= 2n;
295
+ }
296
+ return new RollupMerkleWitness({
297
+ isLeft: isLefts,
298
+ path,
299
+ });
300
+ }
301
+ // TODO: should this take an optional offset? should it fail if the array is too long?
302
+ /**
303
+ * Fills all leaves of the tree.
304
+ * @param leaves Values to fill the leaves with.
305
+ */
306
+ fill(leaves) {
307
+ leaves.forEach((value, index) => {
308
+ this.setLeaf(BigInt(index), value);
309
+ });
310
+ }
311
+ /**
312
+ * Returns the amount of leaf nodes.
313
+ * @returns Amount of leaf nodes.
314
+ */
315
+ get leafCount() {
316
+ return AbstractRollupMerkleTree.leafCount;
317
+ }
318
+ },
319
+ _a.HEIGHT = height,
320
+ _a.EMPTY_ROOT = new _a(new InMemoryMerkleTreeStorage())
321
+ .getRoot()
322
+ .toBigInt(),
323
+ _a.WITNESS = RollupMerkleWitness,
324
+ _a;
325
+ }
326
+ export class RollupMerkleTree extends createMerkleTree(256) {
327
+ }
328
+ export class RollupMerkleTreeWitness extends RollupMerkleTree.WITNESS {
329
+ }
330
+ //# sourceMappingURL=RollupMerkleTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RollupMerkleTree.js","sourceRoot":"","sources":["../../../src/trees/sparse/RollupMerkleTree.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,4 +1,6 @@
1
+ import { DynamicProof, Proof, ProofBase, PublicKey, Option } from "o1js";
1
2
  export type TypedClass<Class> = new (...args: any[]) => Class;
3
+ export type UnTypedClass = new (...args: any[]) => unknown;
2
4
  /**
3
5
  * Using simple `keyof Target` would result into the key
4
6
  * being `string | number | symbol`, but we want just a `string`
@@ -8,4 +10,64 @@ export type StringKeyOf<Target extends object> = Extract<keyof Target, string> &
8
10
  * Utility type to infer element type from an array type
9
11
  */
10
12
  export type ArrayElement<ArrayType extends readonly unknown[]> = ArrayType extends readonly (infer ElementType)[] ? ElementType : never;
13
+ /**
14
+ * Transforms X | Y => X & Y
15
+ */
16
+ export type UnionToIntersection<Union> = (Union extends any ? (x: Union) => void : never) extends (x: infer Intersection) => void ? Intersection : never;
17
+ export type MergeObjects<Input extends Record<string, unknown>> = UnionToIntersection<Input[keyof Input]>;
18
+ export type OmitKeys<Record, Keys> = {
19
+ [Key in keyof Record as Key extends Keys ? never : Key]: Record[Key];
20
+ };
21
+ export declare const EMPTY_PUBLICKEY_X: import("o1js/dist/node/lib/provable/field").Field;
22
+ export declare const EMPTY_PUBLICKEY: PublicKey;
23
+ export type OverwriteObjectType<Base, New> = {
24
+ [Key in keyof Base]: Key extends keyof New ? New[Key] : Base[Key];
25
+ } & New;
26
+ export type InferProofBase<ProofType extends Proof<any, any> | DynamicProof<any, any>> = ProofType extends Proof<infer PI, infer PO> ? ProofBase<PI, PO> : ProofType extends DynamicProof<infer PI, infer PO> ? ProofBase<PI, PO> : undefined;
27
+ declare const O1PublicKeyOption_base: Omit<import("o1js/dist/node/lib/provable/types/provable-intf").Provable<Option<PublicKey, {
28
+ x: bigint;
29
+ isOdd: boolean;
30
+ }>, {
31
+ x: bigint;
32
+ isOdd: boolean;
33
+ } | undefined>, "fromFields"> & {
34
+ fromFields: (fields: import("o1js/dist/node/lib/provable/field").Field[]) => Option<PublicKey, {
35
+ x: bigint;
36
+ isOdd: boolean;
37
+ }>;
38
+ } & (new (option: {
39
+ isSome: import("o1js/dist/node/lib/provable/bool").Bool;
40
+ value: PublicKey;
41
+ }) => Option<PublicKey, {
42
+ x: bigint;
43
+ isOdd: boolean;
44
+ }>) & {
45
+ fromValue(value: PublicKey | {
46
+ x: bigint;
47
+ isOdd: boolean;
48
+ } | {
49
+ isSome: boolean | import("o1js/dist/node/lib/provable/bool").Bool;
50
+ value: PublicKey | {
51
+ x: bigint;
52
+ isOdd: boolean;
53
+ };
54
+ } | undefined): Option<PublicKey, {
55
+ x: bigint;
56
+ isOdd: boolean;
57
+ }>;
58
+ from(value?: PublicKey | {
59
+ x: bigint;
60
+ isOdd: boolean;
61
+ } | undefined): Option<PublicKey, {
62
+ x: bigint;
63
+ isOdd: boolean;
64
+ }>;
65
+ none(): Option<PublicKey, {
66
+ x: bigint;
67
+ isOdd: boolean;
68
+ }>;
69
+ };
70
+ export declare class O1PublicKeyOption extends O1PublicKeyOption_base {
71
+ }
72
+ export {};
11
73
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,UAAU,CAAC,KAAK,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,KAAK,CAAC;AAE9D;;;GAGG;AACH,MAAM,MAAM,WAAW,CAAC,MAAM,SAAS,MAAM,IAAI,OAAO,CAAC,MAAM,MAAM,EAAE,MAAM,CAAC,GAC5E,MAAM,CAAC;AAGT;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,SAAS,SAAS,SAAS,OAAO,EAAE,IAE3D,SAAS,SAAS,SAAS,CAAC,MAAM,WAAW,CAAC,EAAE,GAAG,WAAW,GAAG,KAAK,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,YAAY,EAEZ,KAAK,EACL,SAAS,EACT,SAAS,EACT,MAAM,EACP,MAAM,MAAM,CAAC;AAEd,MAAM,MAAM,UAAU,CAAC,KAAK,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,KAAK,CAAC;AAE9D,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC;AAE3D;;;GAGG;AACH,MAAM,MAAM,WAAW,CAAC,MAAM,SAAS,MAAM,IAAI,OAAO,CAAC,MAAM,MAAM,EAAE,MAAM,CAAC,GAC5E,MAAM,CAAC;AAET;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,SAAS,SAAS,SAAS,OAAO,EAAE,IAC3D,SAAS,SAAS,SAAS,CAAC,MAAM,WAAW,CAAC,EAAE,GAAG,WAAW,GAAG,KAAK,CAAC;AAEzE;;GAEG;AACH,MAAM,MAAM,mBAAmB,CAAC,KAAK,IAAI,CACvC,KAAK,SAAS,GAAG,GAAG,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,GAAG,KAAK,CAC/C,SAAS,CAAC,CAAC,EAAE,MAAM,YAAY,KAAK,IAAI,GACrC,YAAY,GACZ,KAAK,CAAC;AAEV,MAAM,MAAM,YAAY,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAC5D,mBAAmB,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;AAE1C,MAAM,MAAM,QAAQ,CAAC,MAAM,EAAE,IAAI,IAAI;KAClC,GAAG,IAAI,MAAM,MAAM,IAAI,GAAG,SAAS,IAAI,GAAG,KAAK,GAAG,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;CACrE,CAAC;AAMF,eAAO,MAAM,iBAAiB,mDAAc,CAAC;AAC7C,eAAO,MAAM,eAAe,WAG1B,CAAC;AAEH,MAAM,MAAM,mBAAmB,CAAC,IAAI,EAAE,GAAG,IAAI;KAC1C,GAAG,IAAI,MAAM,IAAI,GAAG,GAAG,SAAS,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;CAClE,GAAG,GAAG,CAAC;AAER,MAAM,MAAM,cAAc,CACxB,SAAS,SAAS,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,IAE1D,SAAS,SAAS,KAAK,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,GACvC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,GACjB,SAAS,SAAS,YAAY,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,GAChD,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,GACjB,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAElB,qBAAa,iBAAkB,SAAQ,sBAAiB;CAAG"}
package/dist/types.js CHANGED
@@ -1 +1,14 @@
1
- export {};
1
+ // allows to reference interfaces as 'classes' rather than instances
2
+ import { Bool, Field, PublicKey, Option, } from "o1js";
3
+ // Because Publickey.empty() is not usable in combination with real
4
+ // cryptographic operations because it's group evaluation isn't defined in Fp,
5
+ // we use some other arbitrary point which we treat as "empty" in our circuits
6
+ // other arbitrary point
7
+ export const EMPTY_PUBLICKEY_X = Field(4600);
8
+ export const EMPTY_PUBLICKEY = PublicKey.fromObject({
9
+ x: EMPTY_PUBLICKEY_X,
10
+ isOdd: Bool(true),
11
+ });
12
+ export class O1PublicKeyOption extends Option(PublicKey) {
13
+ }
14
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,OAAO,EACL,IAAI,EAEJ,KAAK,EAGL,SAAS,EACT,MAAM,GACP,MAAM,MAAM,CAAC;AAmCd,mEAAmE;AACnE,+EAA+E;AAC/E,8EAA8E;AAC9E,wBAAwB;AACxB,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7C,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC,UAAU,CAAC;IAClD,CAAC,EAAE,iBAAiB;IACpB,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;CAClB,CAAC,CAAC;AAeH,MAAM,OAAO,iBAAkB,SAAQ,MAAM,CAAC,SAAS,CAAC;CAAG"}
@@ -0,0 +1,177 @@
1
+ import { Provable, InferProvable } from "o1js";
2
+ export declare function createQualifiedUnion<T extends (Provable<any> & {
3
+ name: string;
4
+ })[]>(provables: T): {
5
+ new (value: {
6
+ array: import("o1js/dist/node/lib/provable/field").Field[];
7
+ type: import("o1js/dist/node/lib/provable/field").Field;
8
+ }): {
9
+ into<Type extends T[number]>(provable: Type): InferProvable<Type>;
10
+ array: import("o1js/dist/node/lib/provable/field").Field[];
11
+ type: import("o1js/dist/node/lib/provable/field").Field;
12
+ };
13
+ from<Type_1 extends T[number]>(provable: Type_1, value: InferProvable<Type_1>): {
14
+ into<Type extends T[number]>(provable: Type): InferProvable<Type>;
15
+ array: import("o1js/dist/node/lib/provable/field").Field[];
16
+ type: import("o1js/dist/node/lib/provable/field").Field;
17
+ };
18
+ _isStruct: true;
19
+ toFields: (value: {
20
+ array: import("o1js/dist/node/lib/provable/field").Field[];
21
+ type: import("o1js/dist/node/lib/provable/field").Field;
22
+ }) => import("o1js/dist/node/lib/provable/field").Field[];
23
+ toAuxiliary: (value?: {
24
+ array: import("o1js/dist/node/lib/provable/field").Field[];
25
+ type: import("o1js/dist/node/lib/provable/field").Field;
26
+ } | undefined) => any[];
27
+ sizeInFields: () => number;
28
+ check: (value: {
29
+ array: import("o1js/dist/node/lib/provable/field").Field[];
30
+ type: import("o1js/dist/node/lib/provable/field").Field;
31
+ }) => void;
32
+ toValue: (x: {
33
+ array: import("o1js/dist/node/lib/provable/field").Field[];
34
+ type: import("o1js/dist/node/lib/provable/field").Field;
35
+ }) => {
36
+ array: bigint[];
37
+ type: bigint;
38
+ };
39
+ fromValue: ((x: {
40
+ array: import("o1js/dist/node/lib/provable/field").Field[];
41
+ type: import("o1js/dist/node/lib/provable/field").Field;
42
+ } | {
43
+ array: bigint[];
44
+ type: bigint;
45
+ }) => {
46
+ array: import("o1js/dist/node/lib/provable/field").Field[];
47
+ type: import("o1js/dist/node/lib/provable/field").Field;
48
+ }) & ((value: {
49
+ array: import("o1js/dist/node/lib/provable/field").Field[] | bigint[];
50
+ type: string | number | bigint | import("o1js/dist/node/lib/provable/field").Field;
51
+ }) => {
52
+ array: import("o1js/dist/node/lib/provable/field").Field[];
53
+ type: import("o1js/dist/node/lib/provable/field").Field;
54
+ });
55
+ toCanonical?: ((x: {
56
+ array: import("o1js/dist/node/lib/provable/field").Field[];
57
+ type: import("o1js/dist/node/lib/provable/field").Field;
58
+ }) => {
59
+ array: import("o1js/dist/node/lib/provable/field").Field[];
60
+ type: import("o1js/dist/node/lib/provable/field").Field;
61
+ }) | undefined;
62
+ fromFields: (fields: import("o1js/dist/node/lib/provable/field").Field[]) => {
63
+ array: import("o1js/dist/node/lib/provable/field").Field[];
64
+ type: import("o1js/dist/node/lib/provable/field").Field;
65
+ };
66
+ toInput: (x: {
67
+ array: import("o1js/dist/node/lib/provable/field").Field[];
68
+ type: import("o1js/dist/node/lib/provable/field").Field;
69
+ }) => {
70
+ fields?: import("o1js/dist/node/lib/provable/field").Field[] | undefined;
71
+ packed?: [import("o1js/dist/node/lib/provable/field").Field, number][] | undefined;
72
+ };
73
+ toJSON: (x: {
74
+ array: import("o1js/dist/node/lib/provable/field").Field[];
75
+ type: import("o1js/dist/node/lib/provable/field").Field;
76
+ }) => {
77
+ array: string[];
78
+ type: string;
79
+ };
80
+ fromJSON: (x: {
81
+ array: string[];
82
+ type: string;
83
+ }) => {
84
+ array: import("o1js/dist/node/lib/provable/field").Field[];
85
+ type: import("o1js/dist/node/lib/provable/field").Field;
86
+ };
87
+ empty: () => {
88
+ array: import("o1js/dist/node/lib/provable/field").Field[];
89
+ type: import("o1js/dist/node/lib/provable/field").Field;
90
+ };
91
+ };
92
+ export type QualifiedUnionType<T extends (Provable<any> & {
93
+ name: string;
94
+ })[]> = ReturnType<typeof createQualifiedUnion<T>>;
95
+ export declare function createUnknownLengthUnion(length: number): {
96
+ new (value: {
97
+ array: import("o1js/dist/node/lib/provable/field").Field[];
98
+ type: import("o1js/dist/node/lib/provable/field").Field;
99
+ }): {
100
+ array: import("o1js/dist/node/lib/provable/field").Field[];
101
+ type: import("o1js/dist/node/lib/provable/field").Field;
102
+ };
103
+ _isStruct: true;
104
+ toFields: (value: {
105
+ array: import("o1js/dist/node/lib/provable/field").Field[];
106
+ type: import("o1js/dist/node/lib/provable/field").Field;
107
+ }) => import("o1js/dist/node/lib/provable/field").Field[];
108
+ toAuxiliary: (value?: {
109
+ array: import("o1js/dist/node/lib/provable/field").Field[];
110
+ type: import("o1js/dist/node/lib/provable/field").Field;
111
+ } | undefined) => any[];
112
+ sizeInFields: () => number;
113
+ check: (value: {
114
+ array: import("o1js/dist/node/lib/provable/field").Field[];
115
+ type: import("o1js/dist/node/lib/provable/field").Field;
116
+ }) => void;
117
+ toValue: (x: {
118
+ array: import("o1js/dist/node/lib/provable/field").Field[];
119
+ type: import("o1js/dist/node/lib/provable/field").Field;
120
+ }) => {
121
+ array: bigint[];
122
+ type: bigint;
123
+ };
124
+ fromValue: ((x: {
125
+ array: import("o1js/dist/node/lib/provable/field").Field[];
126
+ type: import("o1js/dist/node/lib/provable/field").Field;
127
+ } | {
128
+ array: bigint[];
129
+ type: bigint;
130
+ }) => {
131
+ array: import("o1js/dist/node/lib/provable/field").Field[];
132
+ type: import("o1js/dist/node/lib/provable/field").Field;
133
+ }) & ((value: {
134
+ array: import("o1js/dist/node/lib/provable/field").Field[] | bigint[];
135
+ type: string | number | bigint | import("o1js/dist/node/lib/provable/field").Field;
136
+ }) => {
137
+ array: import("o1js/dist/node/lib/provable/field").Field[];
138
+ type: import("o1js/dist/node/lib/provable/field").Field;
139
+ });
140
+ toCanonical?: ((x: {
141
+ array: import("o1js/dist/node/lib/provable/field").Field[];
142
+ type: import("o1js/dist/node/lib/provable/field").Field;
143
+ }) => {
144
+ array: import("o1js/dist/node/lib/provable/field").Field[];
145
+ type: import("o1js/dist/node/lib/provable/field").Field;
146
+ }) | undefined;
147
+ fromFields: (fields: import("o1js/dist/node/lib/provable/field").Field[]) => {
148
+ array: import("o1js/dist/node/lib/provable/field").Field[];
149
+ type: import("o1js/dist/node/lib/provable/field").Field;
150
+ };
151
+ toInput: (x: {
152
+ array: import("o1js/dist/node/lib/provable/field").Field[];
153
+ type: import("o1js/dist/node/lib/provable/field").Field;
154
+ }) => {
155
+ fields?: import("o1js/dist/node/lib/provable/field").Field[] | undefined;
156
+ packed?: [import("o1js/dist/node/lib/provable/field").Field, number][] | undefined;
157
+ };
158
+ toJSON: (x: {
159
+ array: import("o1js/dist/node/lib/provable/field").Field[];
160
+ type: import("o1js/dist/node/lib/provable/field").Field;
161
+ }) => {
162
+ array: string[];
163
+ type: string;
164
+ };
165
+ fromJSON: (x: {
166
+ array: string[];
167
+ type: string;
168
+ }) => {
169
+ array: import("o1js/dist/node/lib/provable/field").Field[];
170
+ type: import("o1js/dist/node/lib/provable/field").Field;
171
+ };
172
+ empty: () => {
173
+ array: import("o1js/dist/node/lib/provable/field").Field[];
174
+ type: import("o1js/dist/node/lib/provable/field").Field;
175
+ };
176
+ };
177
+ //# sourceMappingURL=union.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"union.d.ts","sourceRoot":"","sources":["../../src/union/union.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAiB,aAAa,EAAiB,MAAM,MAAM,CAAC;AAI7E,wBAAgB,oBAAoB,CAClC,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,EAC9C,SAAS,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsCb;AAED,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,IAC3E,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7C,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKtD"}
@@ -0,0 +1,35 @@
1
+ import { Provable, Struct, Field } from "o1js";
2
+ import { padArray } from "../utils";
3
+ export function createQualifiedUnion(provables) {
4
+ const maxLength = Math.max(...provables.map((provable) => provable.sizeInFields()));
5
+ const typeMap = Object.fromEntries(provables.map(({ name }, index) => [name, index]));
6
+ class ProvableUnion extends Struct({
7
+ array: Provable.Array(Field, maxLength),
8
+ type: Field,
9
+ }) {
10
+ static from(provable, value) {
11
+ const fields = provable.toFields(value);
12
+ const fullFields = padArray(fields, maxLength, () => Field(0));
13
+ return new ProvableUnion({
14
+ array: fullFields,
15
+ type: Field(typeMap[provable.name]),
16
+ });
17
+ }
18
+ into(provable) {
19
+ const size = provable.sizeInFields();
20
+ const fields = this.array.slice(0, size);
21
+ this.array.slice(size).forEach((field) => field.assertEquals(0));
22
+ this.type.assertEquals(typeMap[provable.name]);
23
+ return provable.fromFields(fields, []);
24
+ }
25
+ }
26
+ return ProvableUnion;
27
+ }
28
+ export function createUnknownLengthUnion(length) {
29
+ return class UnknownLengthUnion extends Struct({
30
+ array: Provable.Array(Field, length),
31
+ type: Field,
32
+ }) {
33
+ };
34
+ }
35
+ //# sourceMappingURL=union.js.map