@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.
- package/dist/cache/CacheManifest.d.ts +11 -0
- package/dist/cache/CacheManifest.d.ts.map +1 -0
- package/dist/cache/CacheManifest.js +56 -0
- package/dist/cache/CacheManifest.js.map +1 -0
- package/dist/cache/ProxyCache.d.ts +13 -0
- package/dist/cache/ProxyCache.d.ts.map +1 -0
- package/dist/cache/ProxyCache.js +24 -0
- package/dist/cache/ProxyCache.js.map +1 -0
- package/dist/cache/RemoteCache.d.ts +8 -0
- package/dist/cache/RemoteCache.d.ts.map +1 -0
- package/dist/cache/RemoteCache.js +2 -0
- package/dist/cache/RemoteCache.js.map +1 -0
- package/dist/cache/RemoteCacheCompiler.d.ts +16 -0
- package/dist/cache/RemoteCacheCompiler.d.ts.map +1 -0
- package/dist/cache/RemoteCacheCompiler.js +104 -0
- package/dist/cache/RemoteCacheCompiler.js.map +1 -0
- package/dist/compiling/AtomicCompileHelper.d.ts +15 -0
- package/dist/compiling/AtomicCompileHelper.d.ts.map +1 -0
- package/dist/compiling/AtomicCompileHelper.js +61 -0
- package/dist/compiling/AtomicCompileHelper.js.map +1 -0
- package/dist/compiling/CompilableModule.d.ts +6 -0
- package/dist/compiling/CompilableModule.d.ts.map +1 -0
- package/dist/compiling/CompilableModule.js +2 -0
- package/dist/compiling/CompilableModule.js.map +1 -0
- package/dist/compiling/CompileRegistry.d.ts +25 -0
- package/dist/compiling/CompileRegistry.d.ts.map +1 -0
- package/dist/compiling/CompileRegistry.js +62 -0
- package/dist/compiling/CompileRegistry.js.map +1 -0
- package/dist/compiling/services/ChildVerificationKeyService.d.ts +10 -0
- package/dist/compiling/services/ChildVerificationKeyService.d.ts.map +1 -0
- package/dist/compiling/services/ChildVerificationKeyService.js +27 -0
- package/dist/compiling/services/ChildVerificationKeyService.js.map +1 -0
- package/dist/config/ChildContainerCreatable.d.ts +5 -0
- package/dist/config/ChildContainerCreatable.d.ts.map +1 -0
- package/dist/config/ChildContainerCreatable.js +2 -0
- package/dist/config/ChildContainerCreatable.js.map +1 -0
- package/dist/config/ChildContainerProvider.d.ts +5 -0
- package/dist/config/ChildContainerProvider.d.ts.map +1 -0
- package/dist/config/ChildContainerProvider.js +2 -0
- package/dist/config/ChildContainerProvider.js.map +1 -0
- package/dist/config/ConfigurableModule.d.ts +6 -2
- package/dist/config/ConfigurableModule.d.ts.map +1 -1
- package/dist/config/ConfigurableModule.js +5 -0
- package/dist/config/ConfigurableModule.js.map +1 -0
- package/dist/config/ModuleContainer.d.ts +70 -23
- package/dist/config/ModuleContainer.d.ts.map +1 -1
- package/dist/config/ModuleContainer.js +164 -31
- package/dist/config/ModuleContainer.js.map +1 -0
- package/dist/config/Startable.d.ts +4 -0
- package/dist/config/Startable.d.ts.map +1 -0
- package/dist/config/Startable.js +2 -0
- package/dist/config/Startable.js.map +1 -0
- package/dist/config/injectAlias.d.ts +18 -0
- package/dist/config/injectAlias.d.ts.map +1 -0
- package/dist/config/injectAlias.js +47 -0
- package/dist/config/injectAlias.js.map +1 -0
- package/dist/dependencyFactory/DependencyFactory.d.ts +14 -9
- package/dist/dependencyFactory/DependencyFactory.d.ts.map +1 -1
- package/dist/dependencyFactory/DependencyFactory.js +2 -96
- package/dist/dependencyFactory/DependencyFactory.js.map +1 -0
- package/dist/dependencyFactory/injectOptional.d.ts +16 -0
- package/dist/dependencyFactory/injectOptional.d.ts.map +1 -0
- package/dist/dependencyFactory/injectOptional.js +40 -0
- package/dist/dependencyFactory/injectOptional.js.map +1 -0
- package/dist/dummyVerificationKey.d.ts +3 -0
- package/dist/dummyVerificationKey.d.ts.map +1 -0
- package/dist/dummyVerificationKey.js +8 -0
- package/dist/dummyVerificationKey.js.map +1 -0
- package/dist/events/EventEmitter.d.ts +19 -0
- package/dist/events/EventEmitter.d.ts.map +1 -0
- package/dist/events/EventEmitter.js +35 -0
- package/dist/events/EventEmitter.js.map +1 -0
- package/dist/events/EventEmitterProxy.d.ts +18 -0
- package/dist/events/EventEmitterProxy.d.ts.map +1 -0
- package/dist/events/EventEmitterProxy.js +35 -0
- package/dist/events/EventEmitterProxy.js.map +1 -0
- package/dist/events/EventEmittingComponent.d.ts +9 -0
- package/dist/events/EventEmittingComponent.d.ts.map +1 -0
- package/dist/events/EventEmittingComponent.js +2 -0
- package/dist/events/EventEmittingComponent.js.map +1 -0
- package/dist/events/ReplayingSingleUseEventEmitter.d.ts +17 -0
- package/dist/events/ReplayingSingleUseEventEmitter.d.ts.map +1 -0
- package/dist/events/ReplayingSingleUseEventEmitter.js +34 -0
- package/dist/events/ReplayingSingleUseEventEmitter.js.map +1 -0
- package/dist/index.d.ts +27 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -2
- package/dist/index.js.map +1 -0
- package/dist/log.d.ts +37 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +117 -0
- package/dist/log.js.map +1 -0
- package/dist/trees/InMemoryLinkedLeafStore.d.ts +21 -0
- package/dist/trees/InMemoryLinkedLeafStore.d.ts.map +1 -0
- package/dist/trees/InMemoryLinkedLeafStore.js +26 -0
- package/dist/trees/InMemoryLinkedLeafStore.js.map +1 -0
- package/dist/trees/InMemoryLinkedMerkleLeafStore.d.ts +7 -0
- package/dist/trees/InMemoryLinkedMerkleLeafStore.d.ts.map +1 -0
- package/dist/trees/InMemoryLinkedMerkleLeafStore.js +6 -0
- package/dist/trees/InMemoryLinkedMerkleLeafStore.js.map +1 -0
- package/dist/trees/InMemoryMerkleTreeStorage.d.ts +11 -0
- package/dist/trees/InMemoryMerkleTreeStorage.d.ts.map +1 -0
- package/dist/trees/InMemoryMerkleTreeStorage.js +13 -0
- package/dist/trees/InMemoryMerkleTreeStorage.js.map +1 -0
- package/dist/trees/LinkedMerkleTree.d.ts +345 -0
- package/dist/trees/LinkedMerkleTree.d.ts.map +1 -0
- package/dist/trees/LinkedMerkleTree.js +337 -0
- package/dist/trees/LinkedMerkleTree.js.map +1 -0
- package/dist/trees/LinkedMerkleTreeStore.d.ts +24 -0
- package/dist/trees/LinkedMerkleTreeStore.d.ts.map +1 -0
- package/dist/trees/LinkedMerkleTreeStore.js +2 -0
- package/dist/trees/LinkedMerkleTreeStore.js.map +1 -0
- package/dist/trees/MerkleTreeStore.d.ts +5 -0
- package/dist/trees/MerkleTreeStore.d.ts.map +1 -0
- package/dist/trees/MerkleTreeStore.js +2 -0
- package/dist/trees/MerkleTreeStore.js.map +1 -0
- package/dist/trees/MockAsyncMerkleStore.d.ts +9 -0
- package/dist/trees/MockAsyncMerkleStore.d.ts.map +1 -0
- package/dist/trees/MockAsyncMerkleStore.js +20 -0
- package/dist/trees/MockAsyncMerkleStore.js.map +1 -0
- package/dist/trees/RollupMerkleTree.d.ts +147 -0
- package/dist/trees/RollupMerkleTree.d.ts.map +1 -0
- package/dist/trees/RollupMerkleTree.js +218 -0
- package/dist/trees/RollupMerkleTree.js.map +1 -0
- package/dist/trees/VirtualMerkleTreeStore.d.ts +13 -0
- package/dist/trees/VirtualMerkleTreeStore.d.ts.map +1 -0
- package/dist/trees/VirtualMerkleTreeStore.js +18 -0
- package/dist/trees/VirtualMerkleTreeStore.js.map +1 -0
- package/dist/trees/lmt/AbstractLinkedMerkleTree.d.ts +288 -0
- package/dist/trees/lmt/AbstractLinkedMerkleTree.d.ts.map +1 -0
- package/dist/trees/lmt/AbstractLinkedMerkleTree.js +22 -0
- package/dist/trees/lmt/AbstractLinkedMerkleTree.js.map +1 -0
- package/dist/trees/lmt/InMemoryLinkedLeafStore.d.ts +21 -0
- package/dist/trees/lmt/InMemoryLinkedLeafStore.d.ts.map +1 -0
- package/dist/trees/lmt/InMemoryLinkedLeafStore.js +26 -0
- package/dist/trees/lmt/InMemoryLinkedLeafStore.js.map +1 -0
- package/dist/trees/lmt/InMemoryLinkedMerkleLeafStore.d.ts +7 -0
- package/dist/trees/lmt/InMemoryLinkedMerkleLeafStore.d.ts.map +1 -0
- package/dist/trees/lmt/InMemoryLinkedMerkleLeafStore.js +6 -0
- package/dist/trees/lmt/InMemoryLinkedMerkleLeafStore.js.map +1 -0
- package/dist/trees/lmt/LinkedLeafStore.d.ts +16 -0
- package/dist/trees/lmt/LinkedLeafStore.d.ts.map +1 -0
- package/dist/trees/lmt/LinkedLeafStore.js +2 -0
- package/dist/trees/lmt/LinkedLeafStore.js.map +1 -0
- package/dist/trees/lmt/LinkedLinkedStore.d.ts +16 -0
- package/dist/trees/lmt/LinkedLinkedStore.d.ts.map +1 -0
- package/dist/trees/lmt/LinkedLinkedStore.js +2 -0
- package/dist/trees/lmt/LinkedLinkedStore.js.map +1 -0
- package/dist/trees/lmt/LinkedMerkleTree.d.ts +11 -0
- package/dist/trees/lmt/LinkedMerkleTree.d.ts.map +1 -0
- package/dist/trees/lmt/LinkedMerkleTree.js +241 -0
- package/dist/trees/lmt/LinkedMerkleTree.js.map +1 -0
- package/dist/trees/lmt/LinkedMerkleTreeCircuitOps.d.ts +113 -0
- package/dist/trees/lmt/LinkedMerkleTreeCircuitOps.d.ts.map +1 -0
- package/dist/trees/lmt/LinkedMerkleTreeCircuitOps.js +113 -0
- package/dist/trees/lmt/LinkedMerkleTreeCircuitOps.js.map +1 -0
- package/dist/trees/lmt/LinkedMerkleTreeDatabase.d.ts +7 -0
- package/dist/trees/lmt/LinkedMerkleTreeDatabase.d.ts.map +1 -0
- package/dist/trees/lmt/LinkedMerkleTreeDatabase.js +2 -0
- package/dist/trees/lmt/LinkedMerkleTreeDatabase.js.map +1 -0
- package/dist/trees/lmt/LinkedMerkleTreeStore.d.ts +16 -0
- package/dist/trees/lmt/LinkedMerkleTreeStore.d.ts.map +1 -0
- package/dist/trees/lmt/LinkedMerkleTreeStore.js +2 -0
- package/dist/trees/lmt/LinkedMerkleTreeStore.js.map +1 -0
- package/dist/trees/lmt/LinkedMerkleTreeTypes.d.ts +74 -0
- package/dist/trees/lmt/LinkedMerkleTreeTypes.d.ts.map +1 -0
- package/dist/trees/lmt/LinkedMerkleTreeTypes.js +50 -0
- package/dist/trees/lmt/LinkedMerkleTreeTypes.js.map +1 -0
- package/dist/trees/sparse/InMemoryMerkleTreeStorage.d.ts +11 -0
- package/dist/trees/sparse/InMemoryMerkleTreeStorage.d.ts.map +1 -0
- package/dist/trees/sparse/InMemoryMerkleTreeStorage.js +13 -0
- package/dist/trees/sparse/InMemoryMerkleTreeStorage.js.map +1 -0
- package/dist/trees/sparse/MerkleTreeStore.d.ts +5 -0
- package/dist/trees/sparse/MerkleTreeStore.d.ts.map +1 -0
- package/dist/trees/sparse/MerkleTreeStore.js +2 -0
- package/dist/trees/sparse/MerkleTreeStore.js.map +1 -0
- package/dist/trees/sparse/MockAsyncMerkleStore.d.ts +9 -0
- package/dist/trees/sparse/MockAsyncMerkleStore.d.ts.map +1 -0
- package/dist/trees/sparse/MockAsyncMerkleStore.js +20 -0
- package/dist/trees/sparse/MockAsyncMerkleStore.js.map +1 -0
- package/dist/trees/sparse/RollupMerkleTree.d.ts +158 -0
- package/dist/trees/sparse/RollupMerkleTree.d.ts.map +1 -0
- package/dist/trees/sparse/RollupMerkleTree.js +330 -0
- package/dist/trees/sparse/RollupMerkleTree.js.map +1 -0
- package/dist/types.d.ts +62 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +14 -1
- package/dist/types.js.map +1 -0
- package/dist/union/union.d.ts +177 -0
- package/dist/union/union.d.ts.map +1 -0
- package/dist/union/union.js +35 -0
- package/dist/union/union.js.map +1 -0
- package/dist/utils.d.ts +57 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +153 -4
- package/dist/utils.js.map +1 -0
- package/dist/zkProgrammable/ProvableMethodExecutionContext.d.ts +4 -3
- package/dist/zkProgrammable/ProvableMethodExecutionContext.d.ts.map +1 -1
- package/dist/zkProgrammable/ProvableMethodExecutionContext.js +2 -3
- package/dist/zkProgrammable/ProvableMethodExecutionContext.js.map +1 -0
- package/dist/zkProgrammable/ZkProgrammable.d.ts +32 -11
- package/dist/zkProgrammable/ZkProgrammable.d.ts.map +1 -1
- package/dist/zkProgrammable/ZkProgrammable.js +36 -17
- package/dist/zkProgrammable/ZkProgrammable.js.map +1 -0
- package/dist/zkProgrammable/provableMethod.d.ts +7 -4
- package/dist/zkProgrammable/provableMethod.d.ts.map +1 -1
- package/dist/zkProgrammable/provableMethod.js +30 -14
- package/dist/zkProgrammable/provableMethod.js.map +1 -0
- package/jest.config.cjs +12 -1
- package/package.json +9 -7
- package/src/cache/CacheManifest.ts +57 -0
- package/src/cache/ProxyCache.ts +30 -0
- package/src/cache/RemoteCache.ts +9 -0
- package/src/cache/RemoteCacheCompiler.ts +131 -0
- package/src/compiling/AtomicCompileHelper.ts +71 -0
- package/src/compiling/CompilableModule.ts +6 -0
- package/src/compiling/CompileRegistry.ts +64 -0
- package/src/compiling/services/ChildVerificationKeyService.ts +26 -0
- package/src/config/ChildContainerCreatable.ts +5 -0
- package/src/config/ChildContainerProvider.ts +5 -0
- package/src/config/ConfigurableModule.ts +15 -2
- package/src/config/ModuleContainer.ts +286 -58
- package/src/config/Startable.ts +3 -0
- package/src/config/injectAlias.ts +70 -0
- package/src/dependencyFactory/DependencyFactory.ts +34 -109
- package/src/dummyVerificationKey.ts +10 -0
- package/src/events/EventEmitter.ts +61 -0
- package/src/events/EventEmitterProxy.ts +81 -0
- package/src/events/EventEmittingComponent.ts +11 -0
- package/src/events/ReplayingSingleUseEventEmitter.ts +42 -0
- package/src/index.ts +27 -2
- package/src/log.ts +145 -0
- package/src/trees/lmt/AbstractLinkedMerkleTree.ts +102 -0
- package/src/trees/lmt/InMemoryLinkedLeafStore.ts +42 -0
- package/src/trees/lmt/LinkedLeafStore.ts +13 -0
- package/src/trees/lmt/LinkedMerkleTree.ts +335 -0
- package/src/trees/lmt/LinkedMerkleTreeCircuitOps.ts +188 -0
- package/src/trees/lmt/LinkedMerkleTreeTypes.ts +53 -0
- package/src/trees/sparse/InMemoryMerkleTreeStorage.ts +17 -0
- package/src/trees/sparse/MerkleTreeStore.ts +5 -0
- package/src/trees/sparse/MockAsyncMerkleStore.ts +30 -0
- package/src/trees/sparse/RollupMerkleTree.ts +512 -0
- package/src/types.ts +53 -2
- package/src/utils.ts +281 -5
- package/src/zkProgrammable/ProvableMethodExecutionContext.ts +6 -6
- package/src/zkProgrammable/ZkProgrammable.ts +90 -35
- package/src/zkProgrammable/provableMethod.ts +50 -23
- package/test/config/ContainerEvents.test.ts +65 -0
- package/test/config/ModuleContainer.test.ts +146 -15
- package/test/config/injectAlias.test.ts +28 -0
- package/test/trees/LinkedMerkleTree.test.ts +124 -0
- package/test/trees/LinkedMerkleTreeCircuitOps.test.ts +147 -0
- package/test/trees/MerkleTree.test.ts +251 -0
- package/test/tsconfig.json +5 -2
- package/test/zkProgrammable/ZkProgrammable.test.ts +145 -119
- package/tsconfig.json +1 -1
- package/LICENSE.md +0 -201
- package/tsconfig.test.json +0 -9
|
@@ -1,24 +1,23 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
ClassProvider,
|
|
3
|
+
FactoryProvider,
|
|
4
|
+
TokenProvider,
|
|
5
|
+
ValueProvider,
|
|
6
|
+
} from "tsyringe";
|
|
2
7
|
|
|
3
8
|
import { TypedClass } from "../types";
|
|
9
|
+
import type { BaseModuleInstanceType } from "../config/ModuleContainer";
|
|
4
10
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
11
|
+
export type DependencyDeclaration<Dependency> =
|
|
12
|
+
| ClassProvider<Dependency>
|
|
13
|
+
| FactoryProvider<Dependency>
|
|
14
|
+
| TokenProvider<Dependency>
|
|
15
|
+
| ValueProvider<Dependency>;
|
|
8
16
|
|
|
9
|
-
|
|
10
|
-
new Error(
|
|
11
|
-
"You cannot access the depdendency method directly, use container.resolve"
|
|
12
|
-
),
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
const globalFactoryDependencies = new Map<
|
|
17
|
+
export type DependencyRecord = Record<
|
|
16
18
|
string,
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
| undefined
|
|
21
|
-
>();
|
|
19
|
+
DependencyDeclaration<unknown> & { forceOverwrite?: boolean }
|
|
20
|
+
>;
|
|
22
21
|
|
|
23
22
|
/**
|
|
24
23
|
* This is an abstract class for creating DependencyFactories, a pattern
|
|
@@ -31,102 +30,28 @@ const globalFactoryDependencies = new Map<
|
|
|
31
30
|
*
|
|
32
31
|
* DependencyFactories are designed to only be used statically for sets of
|
|
33
32
|
* deps that are necessary for the sequencer to work.
|
|
34
|
-
*
|
|
35
|
-
* Every Factory need the @dependencyFactory annotation (which basically
|
|
36
|
-
* proxies @injectable()) and every method that returns a dependency has to be
|
|
37
|
-
* of the format `() => Dependency` and be annotated with @dependency.
|
|
38
33
|
*/
|
|
39
|
-
export
|
|
40
|
-
|
|
41
|
-
const dependencies =
|
|
42
|
-
globalFactoryDependencies.get(this.constructor.name) ?? {};
|
|
43
|
-
globalFactoryDependencies.delete(this.constructor.name);
|
|
44
|
-
|
|
45
|
-
for (const [key, useFactory] of Object.entries(dependencies)) {
|
|
46
|
-
container.register(`${key}_singleton-prototype`, {
|
|
47
|
-
useFactory: useFactory.bind(this),
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
const upperCaseKey = key.charAt(0).toUpperCase() + key.slice(1);
|
|
51
|
-
|
|
52
|
-
container.register(
|
|
53
|
-
upperCaseKey,
|
|
54
|
-
{
|
|
55
|
-
useToken: `${key}_singleton-prototype`,
|
|
56
|
-
},
|
|
57
|
-
{ lifecycle: Lifecycle.ContainerScoped }
|
|
58
|
-
);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
34
|
+
export interface DependencyFactory {
|
|
35
|
+
dependencies: () => DependencyRecord;
|
|
61
36
|
}
|
|
62
37
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
// public constructor(private factories: Factories<Types>) {
|
|
70
|
-
//
|
|
71
|
-
// }
|
|
72
|
-
// generateDependencies(): Types {
|
|
73
|
-
// let x = this.factories;
|
|
74
|
-
// return {} as Types;
|
|
75
|
-
// }
|
|
76
|
-
// }
|
|
38
|
+
export type TypeFromDependencyDeclaration<
|
|
39
|
+
Declaration extends DependencyDeclaration<unknown>,
|
|
40
|
+
> =
|
|
41
|
+
Declaration extends DependencyDeclaration<infer Dependency>
|
|
42
|
+
? Dependency
|
|
43
|
+
: never;
|
|
77
44
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
// generateDependencies(): T {
|
|
81
|
-
// return undefined;
|
|
82
|
-
// }
|
|
83
|
-
// }
|
|
84
|
-
// return new c();
|
|
85
|
-
// }
|
|
45
|
+
export type CapitalizeAny<Key extends string | number | symbol> =
|
|
46
|
+
Key extends string ? Capitalize<Key> : Key;
|
|
86
47
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
// }
|
|
93
|
-
//
|
|
94
|
-
// x(): ConfigurableModule<any> {
|
|
95
|
-
// return {} as ConfigurableModule<any>;
|
|
96
|
-
// }
|
|
97
|
-
//
|
|
98
|
-
// }
|
|
99
|
-
|
|
100
|
-
export function dependency() {
|
|
101
|
-
return function decorator<Target extends DependencyFactory, Dependency>(
|
|
102
|
-
target: Target,
|
|
103
|
-
key: string,
|
|
104
|
-
descriptor: TypedPropertyDescriptor<() => Dependency>
|
|
105
|
-
) {
|
|
106
|
-
if (descriptor.value !== undefined) {
|
|
107
|
-
const className = target.constructor.name;
|
|
108
|
-
if (!globalFactoryDependencies.has(className)) {
|
|
109
|
-
globalFactoryDependencies.set(className, {});
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
113
|
-
globalFactoryDependencies.get(target.constructor.name)![key] =
|
|
114
|
-
descriptor.value;
|
|
115
|
-
|
|
116
|
-
descriptor.value = () => {
|
|
117
|
-
throw errors.dependencyFactoryCalledDirectly();
|
|
118
|
-
};
|
|
119
|
-
} else {
|
|
120
|
-
throw errors.descriptorUndefined();
|
|
121
|
-
}
|
|
122
|
-
return descriptor;
|
|
123
|
-
};
|
|
124
|
-
}
|
|
48
|
+
export type MapDependencyRecordToTypes<Record extends DependencyRecord> = {
|
|
49
|
+
[Key in keyof Record as CapitalizeAny<Key>]: TypedClass<
|
|
50
|
+
TypeFromDependencyDeclaration<Record[Key]>
|
|
51
|
+
>;
|
|
52
|
+
};
|
|
125
53
|
|
|
126
|
-
export
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
injectable()(target);
|
|
131
|
-
};
|
|
132
|
-
}
|
|
54
|
+
export type InferDependencies<Class extends BaseModuleInstanceType> =
|
|
55
|
+
Class extends DependencyFactory
|
|
56
|
+
? MapDependencyRecordToTypes<ReturnType<Class["dependencies"]>>
|
|
57
|
+
: never;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Field, VerificationKey } from "o1js";
|
|
2
|
+
|
|
3
|
+
export function dummyVerificationKey() {
|
|
4
|
+
return new VerificationKey({
|
|
5
|
+
hash: Field(
|
|
6
|
+
"3392518251768960475377392625298437850623664973002200885669375116181514017494"
|
|
7
|
+
),
|
|
8
|
+
data: "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",
|
|
9
|
+
});
|
|
10
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { EventsRecord } from "./EventEmittingComponent";
|
|
2
|
+
|
|
3
|
+
type ListenersHolder<Events extends EventsRecord> = {
|
|
4
|
+
[key in keyof Events]?: ((...args: Events[key]) => void)[];
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
export class EventEmitter<Events extends EventsRecord> {
|
|
8
|
+
protected readonly listeners: ListenersHolder<Events> = {};
|
|
9
|
+
|
|
10
|
+
protected readonly wildcardListeners: ((
|
|
11
|
+
event: keyof Events,
|
|
12
|
+
args: Events[keyof Events]
|
|
13
|
+
) => void)[] = [];
|
|
14
|
+
|
|
15
|
+
public emit<Key extends keyof Events>(
|
|
16
|
+
event: Key,
|
|
17
|
+
...parameters: Events[Key]
|
|
18
|
+
) {
|
|
19
|
+
const listeners = this.listeners[event];
|
|
20
|
+
if (listeners !== undefined) {
|
|
21
|
+
listeners.forEach((listener) => {
|
|
22
|
+
listener(...parameters);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
this.wildcardListeners.forEach((wildcardListener) => {
|
|
26
|
+
wildcardListener(event, parameters);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
public onAll(listener: (event: keyof Events, args: unknown[]) => void): void {
|
|
31
|
+
this.wildcardListeners.push(listener);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
public on<Key extends keyof Events>(
|
|
35
|
+
event: Key,
|
|
36
|
+
listener: (...args: Events[Key]) => void
|
|
37
|
+
) {
|
|
38
|
+
(this.listeners[event] ??= []).push(listener);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Primitive .off() with identity comparison for now.
|
|
43
|
+
* Could be replaced by returning an id in .on() and using that.
|
|
44
|
+
*/
|
|
45
|
+
public off<Key extends keyof Events>(
|
|
46
|
+
event: Key,
|
|
47
|
+
listener: (...args: Events[Key]) => void
|
|
48
|
+
) {
|
|
49
|
+
const events = this.listeners[event];
|
|
50
|
+
if (events !== undefined) {
|
|
51
|
+
this.listeners[event] = events.filter(
|
|
52
|
+
(candidate) => candidate !== listener
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export type EventListenable<Events extends EventsRecord> = Pick<
|
|
59
|
+
EventEmitter<Events>,
|
|
60
|
+
"on" | "onAll" | "off"
|
|
61
|
+
>;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
BaseModuleType,
|
|
3
|
+
ModuleContainer,
|
|
4
|
+
ModulesRecord,
|
|
5
|
+
} from "../config/ModuleContainer";
|
|
6
|
+
import { StringKeyOf, UnionToIntersection } from "../types";
|
|
7
|
+
|
|
8
|
+
import { EventEmitter } from "./EventEmitter";
|
|
9
|
+
import {
|
|
10
|
+
EventEmittingComponent,
|
|
11
|
+
EventEmittingContainer,
|
|
12
|
+
EventsRecord,
|
|
13
|
+
} from "./EventEmittingComponent";
|
|
14
|
+
|
|
15
|
+
export type CastToEventsRecord<Record> = Record extends EventsRecord
|
|
16
|
+
? Record
|
|
17
|
+
: {};
|
|
18
|
+
|
|
19
|
+
export type ModuleEvents<ModuleType extends BaseModuleType> =
|
|
20
|
+
InstanceType<ModuleType> extends EventEmittingComponent<infer Events>
|
|
21
|
+
? Events
|
|
22
|
+
: InstanceType<ModuleType> extends ModuleContainer<infer NestedModules>
|
|
23
|
+
? CastToEventsRecord<ContainerEvents<NestedModules>>
|
|
24
|
+
: // &
|
|
25
|
+
// (InstanceType<ModuleType> extends EventEmittingContainer<
|
|
26
|
+
// infer ContainerEvents
|
|
27
|
+
// >
|
|
28
|
+
// ? ContainerEvents
|
|
29
|
+
// : {})
|
|
30
|
+
EventsRecord;
|
|
31
|
+
|
|
32
|
+
export type ContainerEvents<Modules extends ModulesRecord> = {
|
|
33
|
+
[Key in StringKeyOf<Modules>]: ModuleEvents<Modules[Key]>;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export type FlattenObject<Target extends Record<string, EventsRecord>> =
|
|
37
|
+
UnionToIntersection<Target[keyof Target]>;
|
|
38
|
+
|
|
39
|
+
export type FlattenedContainerEvents<Modules extends ModulesRecord> =
|
|
40
|
+
FlattenObject<ContainerEvents<Modules>>; // & FlattenObject<any>;
|
|
41
|
+
|
|
42
|
+
export class EventEmitterProxy<
|
|
43
|
+
Modules extends ModulesRecord,
|
|
44
|
+
> extends EventEmitter<CastToEventsRecord<FlattenedContainerEvents<Modules>>> {
|
|
45
|
+
public constructor(private readonly container: ModuleContainer<Modules>) {
|
|
46
|
+
super();
|
|
47
|
+
container.moduleNames.forEach((moduleName) => {
|
|
48
|
+
if (container.isValidModuleName(container.definition, moduleName)) {
|
|
49
|
+
const module = container.resolve(moduleName);
|
|
50
|
+
if (this.isEventEmitter(module)) {
|
|
51
|
+
module.events.onAll((events: any, args: any[]) => {
|
|
52
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
53
|
+
this.emit(events, ...args);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
if (this.isEventEmittingContainer(module)) {
|
|
57
|
+
module.containerEvents.onAll((events: any, args: any[]) => {
|
|
58
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
59
|
+
this.emit(events, ...args);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
private isEventEmittingContainer(
|
|
67
|
+
module: any
|
|
68
|
+
): module is EventEmittingContainer<EventsRecord> {
|
|
69
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
70
|
+
const emitter = module.containerEvents;
|
|
71
|
+
return emitter !== undefined && emitter instanceof EventEmitter;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
private isEventEmitter(
|
|
75
|
+
module: any
|
|
76
|
+
): module is EventEmittingComponent<EventsRecord> {
|
|
77
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
78
|
+
const emitter = module.events;
|
|
79
|
+
return emitter !== undefined && emitter instanceof EventEmitter;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { EventEmitter } from "./EventEmitter";
|
|
2
|
+
|
|
3
|
+
export type EventsRecord = Record<string, unknown[]>;
|
|
4
|
+
|
|
5
|
+
export interface EventEmittingComponent<Events extends EventsRecord> {
|
|
6
|
+
events: EventEmitter<Events>;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface EventEmittingContainer<Events extends EventsRecord> {
|
|
10
|
+
containerEvents: EventEmitter<Events>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { EventsRecord } from "./EventEmittingComponent";
|
|
2
|
+
import { EventEmitter } from "./EventEmitter";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Event Emitter variant that emits a certain event only once to a registered listener.
|
|
6
|
+
* Additionally, if a listener registers to a event that has already been emitted, it
|
|
7
|
+
* re-emits it to said listener.
|
|
8
|
+
* This pattern is especially useful for listening for inclusions of transactions.
|
|
9
|
+
* Those events will only occur once, and listeners could come too late to the party,
|
|
10
|
+
* so we need to make sure they get notified as well in those cases.
|
|
11
|
+
*/
|
|
12
|
+
export class ReplayingSingleUseEventEmitter<
|
|
13
|
+
Events extends EventsRecord,
|
|
14
|
+
> extends EventEmitter<Events> {
|
|
15
|
+
public emitted: Partial<Events> = {};
|
|
16
|
+
|
|
17
|
+
public emit<Key extends keyof Events>(
|
|
18
|
+
event: Key,
|
|
19
|
+
...parameters: Events[Key]
|
|
20
|
+
) {
|
|
21
|
+
super.emit(event, ...parameters);
|
|
22
|
+
this.emitted[event] = parameters;
|
|
23
|
+
this.listeners[event] = [];
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
public onAll(listener: (event: keyof Events, args: unknown[]) => void) {
|
|
27
|
+
Object.entries(this.emitted).forEach(([key, params]) => {
|
|
28
|
+
if (params !== undefined) listener(key, params);
|
|
29
|
+
});
|
|
30
|
+
super.onAll(listener);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
public on<Key extends keyof Events>(
|
|
34
|
+
event: Key,
|
|
35
|
+
listener: (...args: Events[Key]) => void
|
|
36
|
+
) {
|
|
37
|
+
if (this.emitted[event] !== undefined) {
|
|
38
|
+
listener(...this.emitted[event]!);
|
|
39
|
+
}
|
|
40
|
+
super.on(event, listener);
|
|
41
|
+
}
|
|
42
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -1,10 +1,35 @@
|
|
|
1
1
|
export * from "./config/ModuleContainer";
|
|
2
2
|
export * from "./config/ConfigurableModule";
|
|
3
|
+
export * from "./config/ChildContainerProvider";
|
|
4
|
+
export * from "./config/ChildContainerCreatable";
|
|
5
|
+
export * from "./config/injectAlias";
|
|
6
|
+
export * from "./config/Startable";
|
|
3
7
|
export * from "./types";
|
|
4
8
|
export * from "./zkProgrammable/ZkProgrammable";
|
|
5
9
|
export * from "./zkProgrammable/ProvableMethodExecutionContext";
|
|
6
10
|
export * from "./zkProgrammable/provableMethod";
|
|
7
11
|
export * from "./utils";
|
|
8
12
|
export * from "./dependencyFactory/DependencyFactory";
|
|
9
|
-
|
|
10
|
-
export
|
|
13
|
+
export * from "./log";
|
|
14
|
+
export * from "./events/EventEmittingComponent";
|
|
15
|
+
export * from "./events/EventEmitter";
|
|
16
|
+
export * from "./trees/sparse/MerkleTreeStore";
|
|
17
|
+
export * from "./trees/sparse/InMemoryMerkleTreeStorage";
|
|
18
|
+
export * from "./trees/sparse/RollupMerkleTree";
|
|
19
|
+
export * from "./trees/lmt/LinkedLeafStore";
|
|
20
|
+
export * from "./trees/lmt/LinkedMerkleTree";
|
|
21
|
+
export * from "./trees/lmt/InMemoryLinkedLeafStore";
|
|
22
|
+
export * from "./trees/lmt/LinkedMerkleTreeCircuitOps";
|
|
23
|
+
export * from "./trees/lmt/AbstractLinkedMerkleTree";
|
|
24
|
+
export * from "./trees/lmt/LinkedMerkleTreeTypes";
|
|
25
|
+
export * from "./events/EventEmitterProxy";
|
|
26
|
+
export * from "./events/ReplayingSingleUseEventEmitter";
|
|
27
|
+
export * from "./trees/sparse/MockAsyncMerkleStore";
|
|
28
|
+
export * from "./compiling/AtomicCompileHelper";
|
|
29
|
+
export * from "./compiling/CompileRegistry";
|
|
30
|
+
export * from "./compiling/CompilableModule";
|
|
31
|
+
export * from "./compiling/services/ChildVerificationKeyService";
|
|
32
|
+
export * from "./cache/RemoteCache";
|
|
33
|
+
export * from "./cache/RemoteCacheCompiler";
|
|
34
|
+
export * from "./cache/CacheManifest";
|
|
35
|
+
export * from "./cache/ProxyCache";
|
package/src/log.ts
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import loglevel, { LogLevelDesc, LogLevelNames } from "loglevel";
|
|
2
|
+
import { Provable } from "o1js";
|
|
3
|
+
|
|
4
|
+
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
5
|
+
function logProvable(
|
|
6
|
+
logFunction: (...args: unknown[]) => void,
|
|
7
|
+
...args: any[]
|
|
8
|
+
) {
|
|
9
|
+
Provable.asProver(() => {
|
|
10
|
+
const prettyArguments: string[] = [];
|
|
11
|
+
|
|
12
|
+
args.forEach((argument) => {
|
|
13
|
+
if (argument?.toPretty !== undefined) {
|
|
14
|
+
prettyArguments.push(argument.toPretty());
|
|
15
|
+
} else {
|
|
16
|
+
try {
|
|
17
|
+
prettyArguments.push(JSON.parse(JSON.stringify(argument)));
|
|
18
|
+
} catch {
|
|
19
|
+
prettyArguments.push(argument);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
logFunction(...prettyArguments);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
/* eslint-enable */
|
|
27
|
+
|
|
28
|
+
// eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
|
|
29
|
+
if (process.env?.IN_CI ?? false) {
|
|
30
|
+
loglevel.setLevel("ERROR");
|
|
31
|
+
} else {
|
|
32
|
+
loglevel.setLevel("INFO");
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const timeMap: Record<string, number> = {};
|
|
36
|
+
|
|
37
|
+
function time(label = "time") {
|
|
38
|
+
timeMap[label] = Date.now();
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function timeLog(label = "time"): string {
|
|
42
|
+
const prev = timeMap[label];
|
|
43
|
+
if (prev === undefined) {
|
|
44
|
+
return "Label not found";
|
|
45
|
+
}
|
|
46
|
+
return `${label} took ${Date.now() - prev}ms`;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function timeEnd(label = "time"): string {
|
|
50
|
+
const str = timeLog(label);
|
|
51
|
+
delete timeMap[label];
|
|
52
|
+
return str;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export const log = {
|
|
56
|
+
provable: {
|
|
57
|
+
info: (...args: unknown[]) => {
|
|
58
|
+
logProvable(loglevel.info, ...args);
|
|
59
|
+
},
|
|
60
|
+
|
|
61
|
+
debug: (...args: unknown[]) => {
|
|
62
|
+
logProvable(loglevel.debug, ...args);
|
|
63
|
+
},
|
|
64
|
+
|
|
65
|
+
error: (...args: unknown[]) => {
|
|
66
|
+
logProvable(loglevel.error, ...args);
|
|
67
|
+
},
|
|
68
|
+
|
|
69
|
+
trace: (...args: unknown[]) => {
|
|
70
|
+
logProvable(log.trace, ...args);
|
|
71
|
+
},
|
|
72
|
+
|
|
73
|
+
warn: (...args: unknown[]) => {
|
|
74
|
+
logProvable(loglevel.warn, ...args);
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
|
|
78
|
+
time,
|
|
79
|
+
|
|
80
|
+
timeLog: {
|
|
81
|
+
info: (label?: string) => loglevel.info(timeLog(label)),
|
|
82
|
+
debug: (label?: string) => loglevel.debug(timeLog(label)),
|
|
83
|
+
error: (label?: string) => loglevel.error(timeLog(label)),
|
|
84
|
+
trace: (label?: string) => loglevel.trace(timeLog(label)),
|
|
85
|
+
warn: (label?: string) => loglevel.warn(timeLog(label)),
|
|
86
|
+
},
|
|
87
|
+
|
|
88
|
+
timeEnd: {
|
|
89
|
+
info: (label?: string) => loglevel.info(timeEnd(label)),
|
|
90
|
+
debug: (label?: string) => loglevel.debug(timeEnd(label)),
|
|
91
|
+
error: (label?: string) => loglevel.error(timeEnd(label)),
|
|
92
|
+
trace: (label?: string) => loglevel.trace(timeEnd(label)),
|
|
93
|
+
warn: (label?: string) => loglevel.warn(timeEnd(label)),
|
|
94
|
+
},
|
|
95
|
+
|
|
96
|
+
info: (...args: unknown[]) => {
|
|
97
|
+
loglevel.info(...args);
|
|
98
|
+
},
|
|
99
|
+
|
|
100
|
+
debug: (...args: unknown[]) => {
|
|
101
|
+
loglevel.debug(...args);
|
|
102
|
+
},
|
|
103
|
+
|
|
104
|
+
error: (...args: unknown[]) => {
|
|
105
|
+
loglevel.error(...args);
|
|
106
|
+
},
|
|
107
|
+
|
|
108
|
+
trace: (...args: unknown[]) => {
|
|
109
|
+
// Loglevel prints the stack trace by default. To still be able to use trace
|
|
110
|
+
// inside out application, we use the level, but call debug() under the hood
|
|
111
|
+
if (loglevel.getLevel() <= loglevel.levels.TRACE) {
|
|
112
|
+
loglevel.debug(...args);
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
|
|
116
|
+
warn: (...args: unknown[]) => {
|
|
117
|
+
loglevel.warn(...args);
|
|
118
|
+
},
|
|
119
|
+
|
|
120
|
+
setLevel: (level: LogLevelDesc) => {
|
|
121
|
+
// eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
|
|
122
|
+
if (!(process.env?.IN_CI ?? false)) {
|
|
123
|
+
loglevel.setLevel(level);
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
|
|
127
|
+
get levels() {
|
|
128
|
+
return loglevel.levels;
|
|
129
|
+
},
|
|
130
|
+
|
|
131
|
+
getLevel: () => loglevel.getLevel(),
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
const validLogLevels = ["TRACE", "DEBUG", "INFO", "WARN", "ERROR", "SILENT"];
|
|
135
|
+
|
|
136
|
+
export function assertValidTextLogLevel(
|
|
137
|
+
level: string | number
|
|
138
|
+
): asserts level is LogLevelNames {
|
|
139
|
+
if (
|
|
140
|
+
typeof level === "number" ||
|
|
141
|
+
!validLogLevels.includes(level.toUpperCase())
|
|
142
|
+
) {
|
|
143
|
+
throw new Error(`${level} is not a valid loglevel`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { Bool, Field, Struct } from "o1js";
|
|
2
|
+
|
|
3
|
+
import { createMerkleTree, RollupMerkleTree } from "../sparse/RollupMerkleTree";
|
|
4
|
+
import { TypedClass } from "../../types";
|
|
5
|
+
import { MerkleTreeStore } from "../sparse/MerkleTreeStore";
|
|
6
|
+
|
|
7
|
+
import { LinkedLeafStore } from "./LinkedLeafStore";
|
|
8
|
+
import { LinkedLeafStruct } from "./LinkedMerkleTreeTypes";
|
|
9
|
+
|
|
10
|
+
class RollupMerkleTreeWitness extends createMerkleTree(40).WITNESS {}
|
|
11
|
+
|
|
12
|
+
type LinkedMerkleWitnessValue = {
|
|
13
|
+
leaf: LinkedLeafStruct;
|
|
14
|
+
merkleWitness: RollupMerkleTreeWitness;
|
|
15
|
+
checkMembership(root: Field, path: Field, value: Field): Bool;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
// We use the RollupMerkleTreeWitness here, although we will actually implement
|
|
19
|
+
// the RollupMerkleTreeWitnessV2 defined below when instantiating the class.
|
|
20
|
+
class LinkedMerkleWitnessTemplate extends Struct({
|
|
21
|
+
leaf: LinkedLeafStruct,
|
|
22
|
+
merkleWitness: RollupMerkleTreeWitness,
|
|
23
|
+
}) {
|
|
24
|
+
public checkMembership(root: Field, path: Field, value: Field): Bool {
|
|
25
|
+
// Mock implementation for typing
|
|
26
|
+
return Bool(true);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
type LinkedOperationWitnessValue = {
|
|
31
|
+
leafPrevious: LinkedMerkleWitnessValue;
|
|
32
|
+
leafCurrent: LinkedMerkleWitnessValue;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
class LinkedOperationWitnessTemplate extends Struct({
|
|
36
|
+
leafPrevious: LinkedMerkleWitnessTemplate,
|
|
37
|
+
leafCurrent: LinkedMerkleWitnessTemplate,
|
|
38
|
+
}) {}
|
|
39
|
+
|
|
40
|
+
export interface AbstractLinkedMerkleTree {
|
|
41
|
+
leafStore: LinkedLeafStore;
|
|
42
|
+
|
|
43
|
+
tree: RollupMerkleTree;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Returns the root of the [Merkle Tree](https://en.wikipedia.org/wiki/Merkle_tree).
|
|
47
|
+
* @returns The root of the Merkle Tree.
|
|
48
|
+
*/
|
|
49
|
+
getRoot(): Field;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Sets the value of a leaf node at a given index to a given value.
|
|
53
|
+
* @param path of the leaf node.
|
|
54
|
+
* @param value New value.
|
|
55
|
+
*/
|
|
56
|
+
setLeaf(path: bigint, value?: bigint): LinkedOperationWitnessValue;
|
|
57
|
+
|
|
58
|
+
setLeaves(batch: { path: bigint; value: bigint }[]): void;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Returns a leaf which lives at a given path.
|
|
62
|
+
* Errors otherwise.
|
|
63
|
+
* @param path Index of the node.
|
|
64
|
+
* @returns The data of the leaf.
|
|
65
|
+
*/
|
|
66
|
+
getLeaf(path: bigint): LinkedLeafStruct | undefined;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Returns the witness (also known as
|
|
70
|
+
* [Merkle Proof or Merkle Witness](https://computersciencewiki.org/index.php/Merkle_proof))
|
|
71
|
+
* for the leaf at the given path.
|
|
72
|
+
* @param path Position of the leaf node.
|
|
73
|
+
* @returns The witness that belongs to the leaf.
|
|
74
|
+
*/
|
|
75
|
+
getReadWitness(path: bigint): LinkedMerkleWitnessValue;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export interface AbstractLinkedMerkleTreeClass {
|
|
79
|
+
new (
|
|
80
|
+
store: MerkleTreeStore,
|
|
81
|
+
leafStore: LinkedLeafStore
|
|
82
|
+
): AbstractLinkedMerkleTree;
|
|
83
|
+
|
|
84
|
+
WITNESS: typeof LinkedOperationWitnessTemplate & {
|
|
85
|
+
fromReadWitness(
|
|
86
|
+
readWitness: LinkedMerkleWitnessTemplate
|
|
87
|
+
): LinkedOperationWitnessTemplate;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
READ_WITNESS: typeof LinkedMerkleWitnessTemplate &
|
|
91
|
+
TypedClass<{
|
|
92
|
+
checkMembership(root: Field, path: Field, value: Field): Bool;
|
|
93
|
+
}>;
|
|
94
|
+
|
|
95
|
+
HEIGHT: number;
|
|
96
|
+
|
|
97
|
+
EMPTY_ROOT: Field;
|
|
98
|
+
|
|
99
|
+
dummyWitness(): LinkedOperationWitnessValue;
|
|
100
|
+
|
|
101
|
+
dummyReadWitness(): LinkedMerkleWitnessValue;
|
|
102
|
+
}
|