@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,6 @@
1
+ import { Mixin } from "ts-mixer";
2
+ import { InMemoryLinkedLeafStore } from "./InMemoryLinkedLeafStore";
3
+ import { InMemoryMerkleTreeStorage } from "../sparse/InMemoryMerkleTreeStorage";
4
+ export class InMemoryLinkedMerkleLeafStore extends Mixin(InMemoryLinkedLeafStore, InMemoryMerkleTreeStorage) {
5
+ }
6
+ //# sourceMappingURL=InMemoryLinkedMerkleLeafStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InMemoryLinkedMerkleLeafStore.js","sourceRoot":"","sources":["../../../src/trees/lmt/InMemoryLinkedMerkleLeafStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAEhF,MAAM,OAAO,6BAA8B,SAAQ,KAAK,CACtD,uBAAuB,EACvB,yBAAyB,CAC1B;CAAG"}
@@ -0,0 +1,16 @@
1
+ export type LinkedLeaf = {
2
+ value: bigint;
3
+ path: bigint;
4
+ nextPath: bigint;
5
+ };
6
+ export type StoredLeaf = {
7
+ leaf: LinkedLeaf;
8
+ index: bigint;
9
+ };
10
+ export interface LinkedLeafStore {
11
+ setLeaf: (index: bigint, value: LinkedLeaf) => void;
12
+ getLeaf: (path: bigint) => StoredLeaf | undefined;
13
+ getPreviousLeaf: (path: bigint) => StoredLeaf | undefined;
14
+ getMaximumIndex: () => bigint | undefined;
15
+ }
16
+ //# sourceMappingURL=LinkedLeafStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkedLeafStore.d.ts","sourceRoot":"","sources":["../../../src/trees/lmt/LinkedLeafStore.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IAEpD,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,GAAG,SAAS,CAAC;IAElD,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,GAAG,SAAS,CAAC;IAE1D,eAAe,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;CAC3C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=LinkedLeafStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkedLeafStore.js","sourceRoot":"","sources":["../../../src/trees/lmt/LinkedLeafStore.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ export type LinkedLeaf = {
2
+ value: bigint;
3
+ path: bigint;
4
+ nextPath: bigint;
5
+ };
6
+ export type StoredLeaf = {
7
+ leaf: LinkedLeaf;
8
+ index: bigint;
9
+ };
10
+ export interface LinkedLeafStore {
11
+ setLeaf: (index: bigint, value: LinkedLeaf) => void;
12
+ getLeaf: (path: bigint) => StoredLeaf | undefined;
13
+ getLeafLessOrEqual: (path: bigint) => StoredLeaf | undefined;
14
+ getMaximumIndex: () => bigint | undefined;
15
+ }
16
+ //# sourceMappingURL=LinkedLinkedStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkedLinkedStore.d.ts","sourceRoot":"","sources":["../../../src/trees/lmt/LinkedLinkedStore.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IAEpD,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,GAAG,SAAS,CAAC;IAElD,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,GAAG,SAAS,CAAC;IAE7D,eAAe,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;CAC3C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=LinkedLinkedStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkedLinkedStore.js","sourceRoot":"","sources":["../../../src/trees/lmt/LinkedLinkedStore.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import { AbstractLinkedMerkleTreeClass } from "./AbstractLinkedMerkleTree";
2
+ export declare function createLinkedMerkleTree(height: number): AbstractLinkedMerkleTreeClass;
3
+ declare const LinkedMerkleTree_base: AbstractLinkedMerkleTreeClass;
4
+ export declare class LinkedMerkleTree extends LinkedMerkleTree_base {
5
+ }
6
+ export declare class LinkedMerkleTreeWitness extends LinkedMerkleTree.WITNESS {
7
+ }
8
+ export declare class LinkedMerkleTreeReadWitness extends LinkedMerkleTree.READ_WITNESS {
9
+ }
10
+ export {};
11
+ //# sourceMappingURL=LinkedMerkleTree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkedMerkleTree.d.ts","sourceRoot":"","sources":["../../../src/trees/lmt/LinkedMerkleTree.ts"],"names":[],"mappings":"AASA,OAAO,EAEL,6BAA6B,EAC9B,MAAM,4BAA4B,CAAC;AAapC,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,GACb,6BAA6B,CA+S/B;;AAED,qBAAa,gBAAiB,SAAQ,qBAA0B;CAAG;AACnE,qBAAa,uBAAwB,SAAQ,gBAAgB,CAAC,OAAO;CAAG;AACxE,qBAAa,2BAA4B,SAAQ,gBAAgB,CAAC,YAAY;CAAG"}
@@ -0,0 +1,241 @@
1
+ import { Field, Struct } from "o1js";
2
+ import { createMerkleTree } from "../sparse/RollupMerkleTree";
3
+ import { InMemoryMerkleTreeStorage } from "../sparse/InMemoryMerkleTreeStorage";
4
+ import { InMemoryLinkedLeafStore } from "./InMemoryLinkedLeafStore";
5
+ import { LinkedLeafStruct } from "./LinkedMerkleTreeTypes";
6
+ export function createLinkedMerkleTree(height) {
7
+ var _a;
8
+ const SparseTreeClass = createMerkleTree(height);
9
+ class LinkedLeafAndMerkleWitness extends Struct({
10
+ leaf: LinkedLeafStruct,
11
+ merkleWitness: SparseTreeClass.WITNESS,
12
+ }) {
13
+ checkMembership(root, path, value) {
14
+ const pathEquals = path.equals(this.leaf.path);
15
+ return this.merkleWitness
16
+ .calculateRoot(new LinkedLeafStruct({
17
+ ...this.leaf,
18
+ value,
19
+ }).hash())
20
+ .equals(root)
21
+ .and(pathEquals);
22
+ }
23
+ }
24
+ class LinkedOperationWitness extends Struct({
25
+ leafPrevious: LinkedLeafAndMerkleWitness,
26
+ leafCurrent: LinkedLeafAndMerkleWitness,
27
+ }) {
28
+ // implements LinkedStructTemplate
29
+ static fromReadWitness(readWitness) {
30
+ return new LinkedOperationWitness({
31
+ leafPrevious: new LinkedLeafAndMerkleWitness({
32
+ merkleWitness: SparseTreeClass.WITNESS.dummy(),
33
+ leaf: LinkedLeafStruct.dummy(),
34
+ }),
35
+ leafCurrent: readWitness,
36
+ });
37
+ }
38
+ }
39
+ return _a = class AbstractLinkedRollupMerkleTree {
40
+ constructor(store, leafStore) {
41
+ this.leafStore = leafStore;
42
+ this.tree = new SparseTreeClass(store);
43
+ // We only do the leaf initialisation when the store
44
+ // has no values. Otherwise, we leave the store
45
+ // as is to not overwrite any data.
46
+ if (this.leafStore.getLeaf(0n) === undefined) {
47
+ this.setLeafInitialisation();
48
+ }
49
+ }
50
+ /**
51
+ * Returns leaf which lives at a given path.
52
+ * Errors if the path is not defined.
53
+ * @param path path of the node.
54
+ * @returns The data of the node.
55
+ */
56
+ getLeaf(path) {
57
+ const storedLeaf = this.leafStore.getLeaf(path);
58
+ if (storedLeaf === undefined) {
59
+ return undefined;
60
+ }
61
+ return new LinkedLeafStruct({
62
+ value: Field(storedLeaf.leaf.value),
63
+ path: Field(storedLeaf.leaf.path),
64
+ nextPath: Field(storedLeaf.leaf.nextPath),
65
+ });
66
+ }
67
+ /**
68
+ * Returns the root of the [Merkle Tree](https://en.wikipedia.org/wiki/Merkle_tree).
69
+ * @returns The root of the Merkle Tree.
70
+ */
71
+ getRoot() {
72
+ return this.tree.getRoot().toConstant();
73
+ }
74
+ writeLeaf(index, leaf) {
75
+ this.leafStore.setLeaf(index, leaf);
76
+ const leafHash = new LinkedLeafStruct(LinkedLeafStruct.fromValue(leaf)).hash();
77
+ return {
78
+ index,
79
+ leaf: leafHash,
80
+ };
81
+ }
82
+ setLeafInternal(path, value) {
83
+ const storedLeaf = this.leafStore.getLeaf(path);
84
+ if (storedLeaf === undefined) {
85
+ // Insert case
86
+ // The above means the path doesn't already exist, and we are inserting, not updating.
87
+ // This requires us to update the node with the previous path, as well.
88
+ const tempIndex = this.leafStore.getMaximumIndex();
89
+ if (tempIndex === undefined) {
90
+ throw Error("Store Max Index not defined");
91
+ }
92
+ if (tempIndex + 1n >= 2 ** height) {
93
+ throw new Error("Index greater than maximum leaf number");
94
+ }
95
+ const nextFreeIndex = tempIndex + 1n;
96
+ const previousLeaf = this.leafStore.getPreviousLeaf(path);
97
+ if (previousLeaf === undefined) {
98
+ throw Error(`Prev leaf shouldn't be undefined (path ${path})`);
99
+ }
100
+ const newPrevLeaf = {
101
+ ...previousLeaf.leaf,
102
+ nextPath: path,
103
+ };
104
+ const treeWrite1 = this.writeLeaf(previousLeaf.index, newPrevLeaf);
105
+ const newLeaf = {
106
+ path,
107
+ value,
108
+ nextPath: previousLeaf.leaf.nextPath,
109
+ };
110
+ const treeWrite2 = this.writeLeaf(nextFreeIndex, newLeaf);
111
+ return {
112
+ leafPrevious: {
113
+ witness: previousLeaf.index,
114
+ witnessLeaf: new LinkedLeafStruct(LinkedLeafStruct.fromValue(previousLeaf.leaf)),
115
+ write: treeWrite1,
116
+ },
117
+ leafCurrent: {
118
+ witness: nextFreeIndex,
119
+ witnessLeaf: LinkedLeafStruct.dummy(),
120
+ write: treeWrite2,
121
+ },
122
+ };
123
+ }
124
+ else {
125
+ // Update case
126
+ const updatedLeaf = {
127
+ ...storedLeaf.leaf,
128
+ value: value,
129
+ };
130
+ const treeWrite = this.writeLeaf(storedLeaf.index, updatedLeaf);
131
+ return {
132
+ leafPrevious: "dummy",
133
+ leafCurrent: {
134
+ witness: storedLeaf.index,
135
+ witnessLeaf: new LinkedLeafStruct(LinkedLeafStruct.fromValue(storedLeaf.leaf)),
136
+ write: treeWrite,
137
+ },
138
+ };
139
+ }
140
+ }
141
+ applyOperationInstruction(instruction) {
142
+ if (instruction === "dummy") {
143
+ return AbstractLinkedRollupMerkleTree.dummyReadWitness();
144
+ }
145
+ const merkleWitness = this.tree.getWitness(instruction.witness);
146
+ this.tree.setLeaf(instruction.write.index, instruction.write.leaf);
147
+ return new LinkedLeafAndMerkleWitness({
148
+ merkleWitness,
149
+ leaf: instruction.witnessLeaf,
150
+ });
151
+ }
152
+ /**
153
+ * Sets the value of a node at a given index to a given value.
154
+ * @param path Position of the leaf node.
155
+ * @param value New value.
156
+ */
157
+ setLeaf(path, value) {
158
+ const { leafPrevious: previousLeafInstruction, leafCurrent: currentLeafInstruction, } = this.setLeafInternal(path, value);
159
+ const leafPrevious = this.applyOperationInstruction(previousLeafInstruction);
160
+ const leafCurrent = this.applyOperationInstruction(currentLeafInstruction);
161
+ return { leafPrevious, leafCurrent };
162
+ }
163
+ setLeaves(batch) {
164
+ if (batch.length > 0) {
165
+ const witnesses = batch.map(({ path, value }) => this.setLeafInternal(path, value));
166
+ // tree.setLeafBatch internally takes care of making the writes unique to optimize
167
+ this.tree.setLeaves(witnesses.flatMap(({ leafPrevious, leafCurrent }) => (leafPrevious === "dummy" ? [] : [leafPrevious.write]).concat(leafCurrent.write)));
168
+ }
169
+ }
170
+ /**
171
+ * Sets the value of a leaf node at initialisation,
172
+ * i.e. {vale: 0, path: 0, nextPath: Field.Max}
173
+ */
174
+ setLeafInitialisation() {
175
+ // This is the maximum value of the hash
176
+ const MAX_FIELD_VALUE = Field.ORDER - 1n;
177
+ const zeroLeaf = {
178
+ value: 0n,
179
+ path: 0n,
180
+ nextPath: MAX_FIELD_VALUE,
181
+ };
182
+ this.leafStore.setLeaf(0n, zeroLeaf);
183
+ // We now set the leafs in the merkle tree to cascade the values up
184
+ // the tree.
185
+ this.tree.setLeaf(0n, new LinkedLeafStruct(LinkedLeafStruct.fromValue(zeroLeaf)).hash());
186
+ }
187
+ /**
188
+ * Returns the witness (also known as
189
+ * [Merkle Proof or Merkle Witness](https://computersciencewiki.org/index.php/Merkle_proof))
190
+ * for the leaf at the given path, otherwise returns a witness for the first unused index.
191
+ * @param path of the leaf node.
192
+ * @returns The witness that belongs to the leaf.
193
+ */
194
+ getReadWitness(path) {
195
+ const storedLeaf = this.leafStore.getLeaf(path);
196
+ let leaf;
197
+ let currentIndex;
198
+ if (storedLeaf === undefined) {
199
+ const storeIndex = this.leafStore.getMaximumIndex();
200
+ if (storeIndex === undefined) {
201
+ throw new Error("Store undefined");
202
+ }
203
+ currentIndex = storeIndex + 1n;
204
+ leaf = LinkedLeafStruct.dummy();
205
+ }
206
+ else {
207
+ leaf = new LinkedLeafStruct(LinkedLeafStruct.fromValue(storedLeaf.leaf));
208
+ currentIndex = storedLeaf.index;
209
+ }
210
+ const merkleWitness = this.tree.getWitness(currentIndex);
211
+ return new LinkedLeafAndMerkleWitness({
212
+ merkleWitness,
213
+ leaf,
214
+ });
215
+ }
216
+ static dummyReadWitness() {
217
+ return new LinkedLeafAndMerkleWitness({
218
+ merkleWitness: SparseTreeClass.WITNESS.dummy(),
219
+ leaf: LinkedLeafStruct.dummy(),
220
+ });
221
+ }
222
+ static dummyWitness() {
223
+ return new LinkedOperationWitness({
224
+ leafPrevious: AbstractLinkedRollupMerkleTree.dummyReadWitness(),
225
+ leafCurrent: AbstractLinkedRollupMerkleTree.dummyReadWitness(),
226
+ });
227
+ }
228
+ },
229
+ _a.HEIGHT = height,
230
+ _a.EMPTY_ROOT = new _a(new InMemoryMerkleTreeStorage(), new InMemoryLinkedLeafStore()).getRoot(),
231
+ _a.READ_WITNESS = LinkedLeafAndMerkleWitness,
232
+ _a.WITNESS = LinkedOperationWitness,
233
+ _a;
234
+ }
235
+ export class LinkedMerkleTree extends createLinkedMerkleTree(40) {
236
+ }
237
+ export class LinkedMerkleTreeWitness extends LinkedMerkleTree.WITNESS {
238
+ }
239
+ export class LinkedMerkleTreeReadWitness extends LinkedMerkleTree.READ_WITNESS {
240
+ }
241
+ //# sourceMappingURL=LinkedMerkleTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkedMerkleTree.js","sourceRoot":"","sources":["../../../src/trees/lmt/LinkedMerkleTree.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ import { Field } from "o1js";
2
+ import { LinkedMerkleTreeWitness } from "./LinkedMerkleTree";
3
+ import { LinkedLeafStruct } from "./LinkedMerkleTreeTypes";
4
+ export type TreeWrite = {
5
+ path: Field;
6
+ from: Field;
7
+ to: Field;
8
+ };
9
+ export declare namespace LinkedMerkleTreeCircuitOps {
10
+ const ComputeRootInstruction_base: (new (value: {
11
+ newPreviousLeaf: LinkedLeafStruct;
12
+ newCurrentLeaf: LinkedLeafStruct;
13
+ allChecksMet: import("o1js/dist/node/lib/provable/bool").Bool;
14
+ }) => {
15
+ newPreviousLeaf: LinkedLeafStruct;
16
+ newCurrentLeaf: LinkedLeafStruct;
17
+ allChecksMet: import("o1js/dist/node/lib/provable/bool").Bool;
18
+ }) & {
19
+ _isStruct: true;
20
+ } & Omit<import("o1js/dist/node/lib/provable/types/provable-intf").Provable<{
21
+ newPreviousLeaf: LinkedLeafStruct;
22
+ newCurrentLeaf: LinkedLeafStruct;
23
+ allChecksMet: import("o1js/dist/node/lib/provable/bool").Bool;
24
+ }, {
25
+ newPreviousLeaf: {
26
+ value: bigint;
27
+ path: bigint;
28
+ nextPath: bigint;
29
+ };
30
+ newCurrentLeaf: {
31
+ value: bigint;
32
+ path: bigint;
33
+ nextPath: bigint;
34
+ };
35
+ allChecksMet: boolean;
36
+ }>, "fromFields"> & {
37
+ fromFields: (fields: import("o1js/dist/node/lib/provable/field").Field[]) => {
38
+ newPreviousLeaf: LinkedLeafStruct;
39
+ newCurrentLeaf: LinkedLeafStruct;
40
+ allChecksMet: import("o1js/dist/node/lib/provable/bool").Bool;
41
+ };
42
+ } & {
43
+ fromValue: (value: {
44
+ newPreviousLeaf: LinkedLeafStruct | {
45
+ value: string | number | bigint | import("o1js/dist/node/lib/provable/field").Field;
46
+ path: string | number | bigint | import("o1js/dist/node/lib/provable/field").Field;
47
+ nextPath: string | number | bigint | import("o1js/dist/node/lib/provable/field").Field;
48
+ };
49
+ newCurrentLeaf: LinkedLeafStruct | {
50
+ value: string | number | bigint | import("o1js/dist/node/lib/provable/field").Field;
51
+ path: string | number | bigint | import("o1js/dist/node/lib/provable/field").Field;
52
+ nextPath: string | number | bigint | import("o1js/dist/node/lib/provable/field").Field;
53
+ };
54
+ allChecksMet: boolean | import("o1js/dist/node/lib/provable/bool").Bool;
55
+ }) => {
56
+ newPreviousLeaf: LinkedLeafStruct;
57
+ newCurrentLeaf: LinkedLeafStruct;
58
+ allChecksMet: import("o1js/dist/node/lib/provable/bool").Bool;
59
+ };
60
+ toInput: (x: {
61
+ newPreviousLeaf: LinkedLeafStruct;
62
+ newCurrentLeaf: LinkedLeafStruct;
63
+ allChecksMet: import("o1js/dist/node/lib/provable/bool").Bool;
64
+ }) => {
65
+ fields?: import("o1js/dist/node/lib/provable/field").Field[] | undefined;
66
+ packed?: [import("o1js/dist/node/lib/provable/field").Field, number][] | undefined;
67
+ };
68
+ toJSON: (x: {
69
+ newPreviousLeaf: LinkedLeafStruct;
70
+ newCurrentLeaf: LinkedLeafStruct;
71
+ allChecksMet: import("o1js/dist/node/lib/provable/bool").Bool;
72
+ }) => {
73
+ newPreviousLeaf: {
74
+ value: string;
75
+ path: string;
76
+ nextPath: string;
77
+ };
78
+ newCurrentLeaf: {
79
+ value: string;
80
+ path: string;
81
+ nextPath: string;
82
+ };
83
+ allChecksMet: boolean;
84
+ };
85
+ fromJSON: (x: {
86
+ newPreviousLeaf: {
87
+ value: string;
88
+ path: string;
89
+ nextPath: string;
90
+ };
91
+ newCurrentLeaf: {
92
+ value: string;
93
+ path: string;
94
+ nextPath: string;
95
+ };
96
+ allChecksMet: boolean;
97
+ }) => {
98
+ newPreviousLeaf: LinkedLeafStruct;
99
+ newCurrentLeaf: LinkedLeafStruct;
100
+ allChecksMet: import("o1js/dist/node/lib/provable/bool").Bool;
101
+ };
102
+ empty: () => {
103
+ newPreviousLeaf: LinkedLeafStruct;
104
+ newCurrentLeaf: LinkedLeafStruct;
105
+ allChecksMet: import("o1js/dist/node/lib/provable/bool").Bool;
106
+ };
107
+ };
108
+ export class ComputeRootInstruction extends ComputeRootInstruction_base {
109
+ }
110
+ export function applyTreeWrite(root: Field, witness: LinkedMerkleTreeWitness, treeWrite: TreeWrite, index: number): Field;
111
+ export {};
112
+ }
113
+ //# sourceMappingURL=LinkedMerkleTreeCircuitOps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkedMerkleTreeCircuitOps.d.ts","sourceRoot":"","sources":["../../../src/trees/lmt/LinkedMerkleTreeCircuitOps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,EAAoB,MAAM,MAAM,CAAC;AAErD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAK3D,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,EAAE,KAAK,CAAC;IACZ,EAAE,EAAE,KAAK,CAAC;CACX,CAAC;AAEF,yBAAiB,0BAA0B,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAU1C,MAAM,OAAO,sBAAuB,SAAQ,2BAI1C;KAAG;IA2HL,MAAM,UAAU,cAAc,CAC5B,IAAI,EAAE,KAAK,EACX,OAAO,EAAE,uBAAuB,EAChC,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,MAAM,GACZ,KAAK,CA4BP;;CACF"}
@@ -0,0 +1,113 @@
1
+ import { Bool, Field, Provable, Struct } from "o1js";
2
+ import { LinkedLeafStruct } from "./LinkedMerkleTreeTypes";
3
+ export var LinkedMerkleTreeCircuitOps;
4
+ (function (LinkedMerkleTreeCircuitOps) {
5
+ function boolAllTrue(...args) {
6
+ return args.reduce((a, b, i) => {
7
+ // if (!b.toBoolean()) {
8
+ // console.log();
9
+ // }
10
+ return a.and(b);
11
+ });
12
+ }
13
+ class ComputeRootInstruction extends Struct({
14
+ newPreviousLeaf: LinkedLeafStruct,
15
+ newCurrentLeaf: LinkedLeafStruct,
16
+ allChecksMet: Bool,
17
+ }) {
18
+ }
19
+ LinkedMerkleTreeCircuitOps.ComputeRootInstruction = ComputeRootInstruction;
20
+ function chooseInstruction(isUpdate, updateInstruction, insertInstruction) {
21
+ return Provable.if(isUpdate, ComputeRootInstruction, updateInstruction, insertInstruction);
22
+ }
23
+ /**
24
+ * verifyWitness(current.merkleWitness, current.leaf)
25
+ *
26
+ * st.path == current.leaf.path
27
+ * st.from.value == current.leaf.value
28
+ * ```
29
+ *
30
+ * updates:
31
+ * ```
32
+ * current := { current.path, current.nextPath, value: st.to.value }
33
+ */
34
+ function update({ leafCurrent, leafPrevious }, { to, from, path }) {
35
+ const allChecksMet = boolAllTrue(path.equals(leafCurrent.leaf.path), leafCurrent.leaf.value.equals(from));
36
+ return {
37
+ newPreviousLeaf: leafPrevious.leaf,
38
+ newCurrentLeaf: new LinkedLeafStruct({
39
+ ...leafCurrent.leaf,
40
+ value: to,
41
+ }),
42
+ allChecksMet,
43
+ };
44
+ }
45
+ /**
46
+ * st.path == current.leaf.path
47
+ *
48
+ * previous.leaf.nextPath > current.leaf.path
49
+ * previous.leaf.path < current.leaf.path
50
+ * previous.leaf.nextPath == current.leaf.nextPath
51
+ *
52
+ * index(current.merkleWitness) == nextFreeIndex
53
+ *
54
+ * updates:
55
+ * previous := { previous.path, previous.value, nextPath: current.path }
56
+ * current := current.leaf
57
+ */
58
+ function insert(witness, { path, to }) {
59
+ const { leafPrevious: previous, leafCurrent: current } = witness;
60
+ const allChecksMet = boolAllTrue(
61
+ // Already covered in general checks
62
+ // path.equals(current.leaf.path),
63
+ current.leaf.isDummy(), previous.leaf.nextPath.greaterThan(path), previous.leaf.path.lessThan(path));
64
+ return {
65
+ newPreviousLeaf: new LinkedLeafStruct({
66
+ ...previous.leaf,
67
+ nextPath: path,
68
+ }),
69
+ newCurrentLeaf: new LinkedLeafStruct({
70
+ path,
71
+ value: to,
72
+ nextPath: previous.leaf.nextPath,
73
+ }),
74
+ allChecksMet,
75
+ };
76
+ }
77
+ function computeRoot(witness, newPreviousLeaf, newCurrentLeaf, isUpdate, isDummy, root) {
78
+ const { leafPrevious, leafCurrent } = witness;
79
+ leafPrevious.merkleWitness
80
+ .calculateRoot(leafPrevious.leaf.hash())
81
+ .equals(root)
82
+ .or(isUpdate)
83
+ .assertTrue("Previous leaf calculation not matching");
84
+ const root1 = leafPrevious.merkleWitness.calculateRoot(newPreviousLeaf.hash());
85
+ const intermediateRoot = Provable.if(isUpdate, root, root1);
86
+ // TODO Make this Provable.if more efficient
87
+ const leafCurrentLeaf = Provable.if(isUpdate, leafCurrent.leaf.hash(), Field(0));
88
+ leafCurrent.merkleWitness
89
+ .calculateRoot(leafCurrentLeaf)
90
+ .equals(intermediateRoot)
91
+ .or(isDummy)
92
+ .assertTrue("Current leaf witness invalid");
93
+ return leafCurrent.merkleWitness.calculateRoot(newCurrentLeaf.hash());
94
+ }
95
+ function applyTreeWrite(root, witness, treeWrite, index) {
96
+ const { leafPrevious, leafCurrent } = witness;
97
+ const isUpdate = leafPrevious.leaf.isDummy();
98
+ const isDummy = leafCurrent.leaf.isDummy().and(isUpdate);
99
+ // For read-only and update
100
+ const updateState = update(witness, treeWrite);
101
+ // For insert
102
+ const insertState = insert(witness, treeWrite);
103
+ const instruction = chooseInstruction(isUpdate, updateState, insertState);
104
+ instruction.allChecksMet
105
+ .or(isDummy)
106
+ .assertTrue(`Not all witness checks have been met: ${index}`);
107
+ const newRoot = computeRoot(witness, instruction.newPreviousLeaf, instruction.newCurrentLeaf, isUpdate, isDummy, root);
108
+ return Provable.if(isDummy, root, newRoot);
109
+ }
110
+ LinkedMerkleTreeCircuitOps.applyTreeWrite = applyTreeWrite;
111
+ })(LinkedMerkleTreeCircuitOps || (LinkedMerkleTreeCircuitOps = {}));
112
+ /* eslint-enable no-inner-declarations */
113
+ //# sourceMappingURL=LinkedMerkleTreeCircuitOps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkedMerkleTreeCircuitOps.js","sourceRoot":"","sources":["../../../src/trees/lmt/LinkedMerkleTreeCircuitOps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAGrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAW3D,MAAM,KAAW,0BAA0B,CA2K1C;AA3KD,WAAiB,0BAA0B;IACzC,SAAS,WAAW,CAAC,GAAG,IAAY;QAClC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;YAC7B,wBAAwB;YACxB,mBAAmB;YACnB,IAAI;YACJ,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAa,sBAAuB,SAAQ,MAAM,CAAC;QACjD,eAAe,EAAE,gBAAgB;QACjC,cAAc,EAAE,gBAAgB;QAChC,YAAY,EAAE,IAAI;KACnB,CAAC;KAAG;IAJQ,iDAAsB,yBAI9B,CAAA;IAEL,SAAS,iBAAiB,CACxB,QAAc,EACd,iBAAyC,EACzC,iBAAyC;QAEzC,OAAO,QAAQ,CAAC,EAAE,CAChB,QAAQ,EACR,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,CAClB,CAAC;IACJ,CAAC;IAED;;;;;;;;;;OAUG;IACH,SAAS,MAAM,CACb,EAAE,WAAW,EAAE,YAAY,EAA2B,EACtD,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAa;QAE7B,MAAM,YAAY,GAAG,WAAW,CAC9B,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAClC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CACpC,CAAC;QAEF,OAAO;YACL,eAAe,EAAE,YAAY,CAAC,IAAI;YAClC,cAAc,EAAE,IAAI,gBAAgB,CAAC;gBACnC,GAAG,WAAW,CAAC,IAAI;gBACnB,KAAK,EAAE,EAAE;aACV,CAAC;YACF,YAAY;SACb,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,SAAS,MAAM,CACb,OAAgC,EAChC,EAAE,IAAI,EAAE,EAAE,EAAa;QAEvB,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAEjE,MAAM,YAAY,GAAG,WAAW;QAC9B,oCAAoC;QACpC,kCAAkC;QAClC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EACtB,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EACxC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAClC,CAAC;QAEF,OAAO;YACL,eAAe,EAAE,IAAI,gBAAgB,CAAC;gBACpC,GAAG,QAAQ,CAAC,IAAI;gBAChB,QAAQ,EAAE,IAAI;aACf,CAAC;YACF,cAAc,EAAE,IAAI,gBAAgB,CAAC;gBACnC,IAAI;gBACJ,KAAK,EAAE,EAAE;gBACT,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ;aACjC,CAAC;YACF,YAAY;SACb,CAAC;IACJ,CAAC;IAED,SAAS,WAAW,CAClB,OAAgC,EAChC,eAAiC,EACjC,cAAgC,EAChC,QAAc,EACd,OAAa,EACb,IAAW;QAEX,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;QAE9C,YAAY,CAAC,aAAa;aACvB,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aACvC,MAAM,CAAC,IAAI,CAAC;aACZ,EAAE,CAAC,QAAQ,CAAC;aACZ,UAAU,CAAC,wCAAwC,CAAC,CAAC;QAExD,MAAM,KAAK,GAAG,YAAY,CAAC,aAAa,CAAC,aAAa,CACpD,eAAe,CAAC,IAAI,EAAE,CACvB,CAAC;QAEF,MAAM,gBAAgB,GAAG,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAE5D,4CAA4C;QAC5C,MAAM,eAAe,GAAG,QAAQ,CAAC,EAAE,CACjC,QAAQ,EACR,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,EACvB,KAAK,CAAC,CAAC,CAAC,CACT,CAAC;QACF,WAAW,CAAC,aAAa;aACtB,aAAa,CAAC,eAAe,CAAC;aAC9B,MAAM,CAAC,gBAAgB,CAAC;aACxB,EAAE,CAAC,OAAO,CAAC;aACX,UAAU,CAAC,8BAA8B,CAAC,CAAC;QAE9C,OAAO,WAAW,CAAC,aAAa,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,SAAgB,cAAc,CAC5B,IAAW,EACX,OAAgC,EAChC,SAAoB,EACpB,KAAa;QAEb,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;QAE9C,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEzD,2BAA2B;QAC3B,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAE/C,aAAa;QACb,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAE/C,MAAM,WAAW,GAAG,iBAAiB,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QAE1E,WAAW,CAAC,YAAY;aACrB,EAAE,CAAC,OAAO,CAAC;aACX,UAAU,CAAC,yCAAyC,KAAK,EAAE,CAAC,CAAC;QAEhE,MAAM,OAAO,GAAG,WAAW,CACzB,OAAO,EACP,WAAW,CAAC,eAAe,EAC3B,WAAW,CAAC,cAAc,EAC1B,QAAQ,EACR,OAAO,EACP,IAAI,CACL,CAAC;QAEF,OAAO,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAjCe,yCAAc,iBAiC7B,CAAA;AACH,CAAC,EA3KgB,0BAA0B,KAA1B,0BAA0B,QA2K1C;AAED,yCAAyC"}
@@ -0,0 +1,7 @@
1
+ import { MerkleTreeStore } from "../sparse/MerkleTreeStore";
2
+ import { LinkedLeafStore } from "./LinkedLinkedStore";
3
+ export interface SyncLinkedMerkleTreeDatabase {
4
+ treeStore: MerkleTreeStore;
5
+ leafStore: LinkedLeafStore;
6
+ }
7
+ //# sourceMappingURL=LinkedMerkleTreeDatabase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkedMerkleTreeDatabase.d.ts","sourceRoot":"","sources":["../../../src/trees/lmt/LinkedMerkleTreeDatabase.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,WAAW,4BAA4B;IAC3C,SAAS,EAAE,eAAe,CAAC;IAC3B,SAAS,EAAE,eAAe,CAAC;CAC5B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=LinkedMerkleTreeDatabase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkedMerkleTreeDatabase.js","sourceRoot":"","sources":["../../../src/trees/lmt/LinkedMerkleTreeDatabase.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ export type LinkedLeaf = {
2
+ value: bigint;
3
+ path: bigint;
4
+ nextPath: bigint;
5
+ };
6
+ export type StoredLeaf = {
7
+ leaf: LinkedLeaf;
8
+ index: bigint;
9
+ };
10
+ export interface LinkedLeafStore {
11
+ setLeaf: (index: bigint, value: LinkedLeaf) => void;
12
+ getLeaf: (path: bigint) => StoredLeaf | undefined;
13
+ getLeafLessOrEqual: (path: bigint) => StoredLeaf | undefined;
14
+ getMaximumIndex: () => bigint | undefined;
15
+ }
16
+ //# sourceMappingURL=LinkedMerkleTreeStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkedMerkleTreeStore.d.ts","sourceRoot":"","sources":["../../../src/trees/lmt/LinkedMerkleTreeStore.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IAEpD,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,GAAG,SAAS,CAAC;IAElD,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,GAAG,SAAS,CAAC;IAE7D,eAAe,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;CAC3C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=LinkedMerkleTreeStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkedMerkleTreeStore.js","sourceRoot":"","sources":["../../../src/trees/lmt/LinkedMerkleTreeStore.ts"],"names":[],"mappings":""}