@proto-kit/protocol 0.1.1-develop.153
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +201 -0
- package/README.md +45 -0
- package/dist/Constants.d.ts +4 -0
- package/dist/Constants.d.ts.map +1 -0
- package/dist/Constants.js +3 -0
- package/dist/config/ConfigurableModule.d.ts +18 -0
- package/dist/config/ConfigurableModule.d.ts.map +1 -0
- package/dist/config/ConfigurableModule.js +20 -0
- package/dist/config/ConfigurationAggregator.d.ts +10 -0
- package/dist/config/ConfigurationAggregator.d.ts.map +1 -0
- package/dist/config/ConfigurationAggregator.js +35 -0
- package/dist/config/ConfigurationReceiver.d.ts +25 -0
- package/dist/config/ConfigurationReceiver.d.ts.map +1 -0
- package/dist/config/ConfigurationReceiver.js +36 -0
- package/dist/config/ModuleContainer.d.ts +44 -0
- package/dist/config/ModuleContainer.d.ts.map +1 -0
- package/dist/config/ModuleContainer.js +89 -0
- package/dist/config/types.d.ts +2 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/model/MethodPublicInput.d.ts +51 -0
- package/dist/model/MethodPublicInput.d.ts.map +1 -0
- package/dist/model/MethodPublicInput.js +11 -0
- package/dist/model/MethodPublicOutput.d.ts +59 -0
- package/dist/model/MethodPublicOutput.d.ts.map +1 -0
- package/dist/model/MethodPublicOutput.js +12 -0
- package/dist/model/Option.d.ts +94 -0
- package/dist/model/Option.d.ts.map +1 -0
- package/dist/model/Option.js +96 -0
- package/dist/model/Path.d.ts +31 -0
- package/dist/model/Path.d.ts.map +1 -0
- package/dist/model/Path.js +44 -0
- package/dist/model/StateTransition.d.ts +85 -0
- package/dist/model/StateTransition.d.ts.map +1 -0
- package/dist/model/StateTransition.js +58 -0
- package/dist/model/StateTransitionProvableBatch.d.ts +57 -0
- package/dist/model/StateTransitionProvableBatch.d.ts.map +1 -0
- package/dist/model/StateTransitionProvableBatch.js +21 -0
- package/dist/model/network/NetworkState.d.ts +64 -0
- package/dist/model/network/NetworkState.d.ts.map +1 -0
- package/dist/model/network/NetworkState.js +14 -0
- package/dist/model/transaction/ProtocolTransaction.d.ts +70 -0
- package/dist/model/transaction/ProtocolTransaction.d.ts.map +1 -0
- package/dist/model/transaction/ProtocolTransaction.js +18 -0
- package/dist/model/transaction/RuntimeTransaction.d.ts +55 -0
- package/dist/model/transaction/RuntimeTransaction.d.ts.map +1 -0
- package/dist/model/transaction/RuntimeTransaction.js +26 -0
- package/dist/protocol/Protocol.d.ts +37 -0
- package/dist/protocol/Protocol.d.ts.map +1 -0
- package/dist/protocol/Protocol.js +50 -0
- package/dist/protocol/ProtocolModule.d.ts +9 -0
- package/dist/protocol/ProtocolModule.d.ts.map +1 -0
- package/dist/protocol/ProtocolModule.js +10 -0
- package/dist/prover/block/BlockProvable.d.ts +149 -0
- package/dist/prover/block/BlockProvable.d.ts.map +1 -0
- package/dist/prover/block/BlockProvable.js +20 -0
- package/dist/prover/block/BlockProver.d.ts +48 -0
- package/dist/prover/block/BlockProver.d.ts.map +1 -0
- package/dist/prover/block/BlockProver.js +171 -0
- package/dist/prover/block/BlockScopedModule.d.ts +3 -0
- package/dist/prover/block/BlockScopedModule.d.ts.map +1 -0
- package/dist/prover/block/BlockScopedModule.js +6 -0
- package/dist/prover/statetransition/StateTransitionProvable.d.ts +84 -0
- package/dist/prover/statetransition/StateTransitionProvable.d.ts.map +1 -0
- package/dist/prover/statetransition/StateTransitionProvable.js +11 -0
- package/dist/prover/statetransition/StateTransitionProver.d.ts +39 -0
- package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -0
- package/dist/prover/statetransition/StateTransitionProver.js +157 -0
- package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts +16 -0
- package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts.map +1 -0
- package/dist/prover/statetransition/StateTransitionWitnessProvider.js +17 -0
- package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts +7 -0
- package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts.map +1 -0
- package/dist/prover/statetransition/StateTransitionWitnessProviderReference.js +20 -0
- package/dist/src/model/Option.d.ts +158 -0
- package/dist/src/model/Option.d.ts.map +1 -0
- package/dist/src/model/Option.js +53 -0
- package/dist/src/model/Path.d.ts +35 -0
- package/dist/src/model/Path.d.ts.map +1 -0
- package/dist/src/model/Path.js +51 -0
- package/dist/src/model/StateTransition.d.ts +201 -0
- package/dist/src/model/StateTransition.d.ts.map +1 -0
- package/dist/src/model/StateTransition.js +43 -0
- package/dist/src/utils/PrefixedHashList.d.ts +15 -0
- package/dist/src/utils/PrefixedHashList.d.ts.map +1 -0
- package/dist/src/utils/PrefixedHashList.js +28 -0
- package/dist/src/utils/ProvableHashList.d.ts +30 -0
- package/dist/src/utils/ProvableHashList.d.ts.map +1 -0
- package/dist/src/utils/ProvableHashList.js +43 -0
- package/dist/utils/PrefixedHashList.d.ts +14 -0
- package/dist/utils/PrefixedHashList.d.ts.map +1 -0
- package/dist/utils/PrefixedHashList.js +12 -0
- package/dist/utils/PrefixedProvableHashList.d.ts +8 -0
- package/dist/utils/PrefixedProvableHashList.d.ts.map +1 -0
- package/dist/utils/PrefixedProvableHashList.js +12 -0
- package/dist/utils/ProvableHashList.d.ts +27 -0
- package/dist/utils/ProvableHashList.d.ts.map +1 -0
- package/dist/utils/ProvableHashList.js +43 -0
- package/dist/utils/Utils.d.ts +17 -0
- package/dist/utils/Utils.d.ts.map +1 -0
- package/dist/utils/Utils.js +63 -0
- package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts +25 -0
- package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts.map +1 -0
- package/dist/utils/merkletree/InMemoryMerkleTreeStorage.js +72 -0
- package/dist/utils/merkletree/MemoryMerkleTreeStorage.d.ts +26 -0
- package/dist/utils/merkletree/MemoryMerkleTreeStorage.d.ts.map +1 -0
- package/dist/utils/merkletree/MemoryMerkleTreeStorage.js +79 -0
- package/dist/utils/merkletree/MerkleTreeStore.d.ts +11 -0
- package/dist/utils/merkletree/MerkleTreeStore.d.ts.map +1 -0
- package/dist/utils/merkletree/MerkleTreeStore.js +1 -0
- package/dist/utils/merkletree/RollupMerkleTree.d.ts +130 -0
- package/dist/utils/merkletree/RollupMerkleTree.d.ts.map +1 -0
- package/dist/utils/merkletree/RollupMerkleTree.js +244 -0
- package/jest.config.cjs +1 -0
- package/package.json +35 -0
- package/src/Constants.ts +3 -0
- package/src/index.ts +23 -0
- package/src/model/MethodPublicOutput.ts +12 -0
- package/src/model/Option.test.ts +21 -0
- package/src/model/Option.ts +133 -0
- package/src/model/Path.ts +52 -0
- package/src/model/StateTransition.ts +72 -0
- package/src/model/StateTransitionProvableBatch.ts +31 -0
- package/src/model/Transaction.ts +29 -0
- package/src/model/network/NetworkState.ts +15 -0
- package/src/model/transaction/ProtocolTransaction.ts +25 -0
- package/src/model/transaction/RuntimeTransaction.ts +34 -0
- package/src/protocol/Protocol.ts +129 -0
- package/src/protocol/ProtocolModule.ts +27 -0
- package/src/prover/block/BlockProvable.ts +45 -0
- package/src/prover/block/BlockProver.ts +302 -0
- package/src/prover/statetransition/StateTransitionProvable.ts +40 -0
- package/src/prover/statetransition/StateTransitionProver.ts +270 -0
- package/src/prover/statetransition/StateTransitionWitnessProvider.ts +24 -0
- package/src/prover/statetransition/StateTransitionWitnessProviderReference.ts +17 -0
- package/src/utils/PrefixedProvableHashList.ts +21 -0
- package/src/utils/ProvableHashList.ts +50 -0
- package/src/utils/merkletree/InMemoryMerkleTreeStorage.ts +99 -0
- package/src/utils/merkletree/MerkleTreeStore.ts +15 -0
- package/src/utils/merkletree/RollupMerkleTree.ts +250 -0
- package/src/utils/merkletree/VirtualMerkleTreeStore.ts +21 -0
- package/src/utils/utils.ts +103 -0
- package/test/BlockProver.test.ts +127 -0
- package/test/Protocol.test.ts +27 -0
- package/test/StateTransition.test.ts +182 -0
- package/tsconfig.json +8 -0
- package/tsconfig.test.json +9 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
|
+
};
|
|
13
|
+
/* eslint-disable max-lines */
|
|
14
|
+
import { Experimental, Field, Provable, SelfProof } from "snarkyjs";
|
|
15
|
+
import { inject, injectable } from "tsyringe";
|
|
16
|
+
import { provableMethod, ZkProgrammable, } from "@proto-kit/common";
|
|
17
|
+
import { DefaultProvableHashList } from "../../utils/ProvableHashList";
|
|
18
|
+
import { ProtocolModule } from "../../protocol/ProtocolModule";
|
|
19
|
+
import { RuntimeTransaction } from "../../model/transaction/RuntimeTransaction";
|
|
20
|
+
import { BlockProverExecutionData, BlockProverPublicInput, BlockProverPublicOutput, } from "./BlockProvable";
|
|
21
|
+
const errors = {
|
|
22
|
+
stateProofNotStartingAtZero: () => "StateProof not starting ST-commitment at zero",
|
|
23
|
+
stateTransitionsHashNotEqual: () => "StateTransition list commitments are not equal",
|
|
24
|
+
propertyNotMatching: (propertyName) => `${propertyName} not matching`,
|
|
25
|
+
stateRootNotMatching: (step) => `StateRoots not matching ${step}`,
|
|
26
|
+
transactionsHashNotMatching: (step) => `transactions hash not matching ${step}`,
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* BlockProver class, which aggregates a AppChainProof and
|
|
30
|
+
* a StateTransitionProof into a single BlockProof, that can
|
|
31
|
+
* then be merged to be committed to the base-layer contract
|
|
32
|
+
*/
|
|
33
|
+
let BlockProver = class BlockProver extends ProtocolModule {
|
|
34
|
+
constructor(stateTransitionProver, runtime) {
|
|
35
|
+
super();
|
|
36
|
+
this.stateTransitionProver = stateTransitionProver;
|
|
37
|
+
this.runtime = runtime;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Applies and checks the two proofs and applies the corresponding state
|
|
41
|
+
* changes to the given state
|
|
42
|
+
*
|
|
43
|
+
* @param state The from-state of the BlockProver
|
|
44
|
+
* @param stateTransitionProof
|
|
45
|
+
* @param appProof
|
|
46
|
+
* @returns The new BlockProver-state to be used as public output
|
|
47
|
+
*/
|
|
48
|
+
applyTransaction(state, stateTransitionProof, appProof, { transaction, networkState }) {
|
|
49
|
+
appProof.verify();
|
|
50
|
+
stateTransitionProof.verify();
|
|
51
|
+
const stateTo = { ...state };
|
|
52
|
+
// eslint-disable-next-line no-warning-comments
|
|
53
|
+
// TODO Check methodId?
|
|
54
|
+
// Checks for the stateTransitionProof and appProof matching
|
|
55
|
+
stateTransitionProof.publicInput.stateTransitionsHash.assertEquals(Field(0), errors.stateProofNotStartingAtZero());
|
|
56
|
+
appProof.publicOutput.stateTransitionsHash.assertEquals(stateTransitionProof.publicOutput.stateTransitionsHash, errors.stateTransitionsHashNotEqual());
|
|
57
|
+
// Apply state if status success
|
|
58
|
+
state.stateRoot.assertEquals(stateTransitionProof.publicInput.stateRoot, errors.propertyNotMatching("from state root"));
|
|
59
|
+
stateTo.stateRoot = Provable.if(appProof.publicOutput.status, stateTransitionProof.publicOutput.stateRoot, stateTransitionProof.publicInput.stateRoot);
|
|
60
|
+
// Check transaction signature
|
|
61
|
+
transaction
|
|
62
|
+
.validateSignature()
|
|
63
|
+
.assertTrue("Transaction signature not valid");
|
|
64
|
+
// Check if the methodId is correct
|
|
65
|
+
// to do
|
|
66
|
+
// Check transaction integrity against appProof
|
|
67
|
+
const blockTransactionHash = RuntimeTransaction.fromProtocolTransaction(transaction).hash();
|
|
68
|
+
blockTransactionHash.assertEquals(appProof.publicOutput.transactionHash, "Transactions provided in AppProof and BlockProof do not match");
|
|
69
|
+
// Check network state integrity against appProof
|
|
70
|
+
state.networkStateHash.assertEquals(appProof.publicOutput.networkStateHash, "Network state does not match state used in AppProof");
|
|
71
|
+
state.networkStateHash.assertEquals(networkState.hash(), "Network state provided to BlockProver does not match the publicInput");
|
|
72
|
+
// Append tx to transaction list
|
|
73
|
+
const transactionList = new DefaultProvableHashList(Field, state.transactionsHash);
|
|
74
|
+
const { transactionHash } = appProof.publicOutput;
|
|
75
|
+
transactionList.push(transactionHash);
|
|
76
|
+
stateTo.transactionsHash = transactionList.commitment;
|
|
77
|
+
return stateTo;
|
|
78
|
+
}
|
|
79
|
+
proveTransaction(publicInput, stateProof, appProof, executionData) {
|
|
80
|
+
const state = {
|
|
81
|
+
transactionsHash: publicInput.transactionsHash,
|
|
82
|
+
stateRoot: publicInput.stateRoot,
|
|
83
|
+
networkStateHash: publicInput.networkStateHash,
|
|
84
|
+
};
|
|
85
|
+
this.applyTransaction(state, stateProof, appProof, executionData);
|
|
86
|
+
return new BlockProverPublicOutput({
|
|
87
|
+
stateRoot: state.stateRoot,
|
|
88
|
+
transactionsHash: state.transactionsHash,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
merge(publicInput, proof1, proof2) {
|
|
92
|
+
proof1.verify();
|
|
93
|
+
proof2.verify();
|
|
94
|
+
// Check state
|
|
95
|
+
publicInput.stateRoot.assertEquals(proof1.publicInput.stateRoot, errors.stateRootNotMatching("publicInput.from -> proof1.from"));
|
|
96
|
+
proof1.publicOutput.stateRoot.assertEquals(proof2.publicInput.stateRoot, errors.stateRootNotMatching("proof1.to -> proof2.from"));
|
|
97
|
+
// Check transaction list
|
|
98
|
+
publicInput.transactionsHash.assertEquals(proof1.publicInput.transactionsHash, errors.transactionsHashNotMatching("publicInput.from -> proof1.from"));
|
|
99
|
+
proof1.publicOutput.transactionsHash.assertEquals(proof2.publicInput.transactionsHash, errors.transactionsHashNotMatching("proof1.to -> proof2.from"));
|
|
100
|
+
return new BlockProverPublicOutput({
|
|
101
|
+
stateRoot: proof2.publicOutput.stateRoot,
|
|
102
|
+
transactionsHash: proof2.publicOutput.transactionsHash,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Creates the BlockProver ZkProgram.
|
|
107
|
+
* Recursive linking of proofs is done via the previously
|
|
108
|
+
* injected StateTransitionProver and the required AppChainProof class
|
|
109
|
+
*/
|
|
110
|
+
zkProgramFactory() {
|
|
111
|
+
const StateTransitionProofClass = this.stateTransitionProver.zkProgram.Proof;
|
|
112
|
+
const RuntimeProofClass = this.runtime.zkProgrammable.zkProgram.Proof;
|
|
113
|
+
const proveTransaction = this.proveTransaction.bind(this);
|
|
114
|
+
const merge = this.merge.bind(this);
|
|
115
|
+
const program = Experimental.ZkProgram({
|
|
116
|
+
publicInput: BlockProverPublicInput,
|
|
117
|
+
publicOutput: BlockProverPublicOutput,
|
|
118
|
+
methods: {
|
|
119
|
+
proveTransaction: {
|
|
120
|
+
privateInputs: [
|
|
121
|
+
StateTransitionProofClass,
|
|
122
|
+
RuntimeProofClass,
|
|
123
|
+
BlockProverExecutionData,
|
|
124
|
+
],
|
|
125
|
+
method(publicInput, stateProof, appProof, executionData) {
|
|
126
|
+
return proveTransaction(publicInput, stateProof, appProof, executionData);
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
merge: {
|
|
130
|
+
privateInputs: [
|
|
131
|
+
(SelfProof),
|
|
132
|
+
(SelfProof),
|
|
133
|
+
],
|
|
134
|
+
method(publicInput, proof1, proof2) {
|
|
135
|
+
return merge(publicInput, proof1, proof2);
|
|
136
|
+
},
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
const methods = {
|
|
141
|
+
proveTransaction: program.proveTransaction,
|
|
142
|
+
merge: program.merge,
|
|
143
|
+
};
|
|
144
|
+
const SelfProofClass = Experimental.ZkProgram.Proof(program);
|
|
145
|
+
return {
|
|
146
|
+
compile: program.compile.bind(program),
|
|
147
|
+
verify: program.verify.bind(program),
|
|
148
|
+
Proof: SelfProofClass,
|
|
149
|
+
methods,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
__decorate([
|
|
154
|
+
provableMethod(),
|
|
155
|
+
__metadata("design:type", Function),
|
|
156
|
+
__metadata("design:paramtypes", [BlockProverPublicInput, Object, Function, BlockProverExecutionData]),
|
|
157
|
+
__metadata("design:returntype", BlockProverPublicOutput)
|
|
158
|
+
], BlockProver.prototype, "proveTransaction", null);
|
|
159
|
+
__decorate([
|
|
160
|
+
provableMethod(),
|
|
161
|
+
__metadata("design:type", Function),
|
|
162
|
+
__metadata("design:paramtypes", [BlockProverPublicInput, Object, Object]),
|
|
163
|
+
__metadata("design:returntype", BlockProverPublicOutput)
|
|
164
|
+
], BlockProver.prototype, "merge", null);
|
|
165
|
+
BlockProver = __decorate([
|
|
166
|
+
injectable(),
|
|
167
|
+
__param(0, inject("StateTransitionProver")),
|
|
168
|
+
__param(1, inject("Runtime")),
|
|
169
|
+
__metadata("design:paramtypes", [ZkProgrammable, Object])
|
|
170
|
+
], BlockProver);
|
|
171
|
+
export { BlockProver };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlockScopedModule.d.ts","sourceRoot":"","sources":["../../../src/prover/block/BlockScopedModule.ts"],"names":[],"mappings":"AAKA,QAAA,MAAM,OAAO,IAAI,CAAC;AAClB,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { Proof } from "snarkyjs";
|
|
2
|
+
import { ZkProgrammable } from "@proto-kit/common";
|
|
3
|
+
import { StateTransitionProvableBatch } from "../../model/StateTransitionProvableBatch";
|
|
4
|
+
import { StateTransitionWitnessProviderReference } from "./StateTransitionWitnessProviderReference";
|
|
5
|
+
declare const StateTransitionProverPublicInput_base: (new (value: {
|
|
6
|
+
stateTransitionsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
7
|
+
stateRoot: import("snarkyjs/dist/node/lib/field").Field;
|
|
8
|
+
}) => {
|
|
9
|
+
stateTransitionsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
10
|
+
stateRoot: import("snarkyjs/dist/node/lib/field").Field;
|
|
11
|
+
}) & {
|
|
12
|
+
_isStruct: true;
|
|
13
|
+
} & import("snarkyjs/dist/node/snarky").ProvablePure<{
|
|
14
|
+
stateTransitionsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
15
|
+
stateRoot: import("snarkyjs/dist/node/lib/field").Field;
|
|
16
|
+
}> & {
|
|
17
|
+
toInput: (x: {
|
|
18
|
+
stateTransitionsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
19
|
+
stateRoot: import("snarkyjs/dist/node/lib/field").Field;
|
|
20
|
+
}) => {
|
|
21
|
+
fields?: import("snarkyjs/dist/node/lib/field").Field[] | undefined;
|
|
22
|
+
packed?: [import("snarkyjs/dist/node/lib/field").Field, number][] | undefined;
|
|
23
|
+
};
|
|
24
|
+
toJSON: (x: {
|
|
25
|
+
stateTransitionsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
26
|
+
stateRoot: import("snarkyjs/dist/node/lib/field").Field;
|
|
27
|
+
}) => {
|
|
28
|
+
stateTransitionsHash: string;
|
|
29
|
+
stateRoot: string;
|
|
30
|
+
};
|
|
31
|
+
fromJSON: (x: {
|
|
32
|
+
stateTransitionsHash: string;
|
|
33
|
+
stateRoot: string;
|
|
34
|
+
}) => {
|
|
35
|
+
stateTransitionsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
36
|
+
stateRoot: import("snarkyjs/dist/node/lib/field").Field;
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
export declare class StateTransitionProverPublicInput extends StateTransitionProverPublicInput_base {
|
|
40
|
+
}
|
|
41
|
+
declare const StateTransitionProverPublicOutput_base: (new (value: {
|
|
42
|
+
stateTransitionsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
43
|
+
stateRoot: import("snarkyjs/dist/node/lib/field").Field;
|
|
44
|
+
}) => {
|
|
45
|
+
stateTransitionsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
46
|
+
stateRoot: import("snarkyjs/dist/node/lib/field").Field;
|
|
47
|
+
}) & {
|
|
48
|
+
_isStruct: true;
|
|
49
|
+
} & import("snarkyjs/dist/node/snarky").ProvablePure<{
|
|
50
|
+
stateTransitionsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
51
|
+
stateRoot: import("snarkyjs/dist/node/lib/field").Field;
|
|
52
|
+
}> & {
|
|
53
|
+
toInput: (x: {
|
|
54
|
+
stateTransitionsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
55
|
+
stateRoot: import("snarkyjs/dist/node/lib/field").Field;
|
|
56
|
+
}) => {
|
|
57
|
+
fields?: import("snarkyjs/dist/node/lib/field").Field[] | undefined;
|
|
58
|
+
packed?: [import("snarkyjs/dist/node/lib/field").Field, number][] | undefined;
|
|
59
|
+
};
|
|
60
|
+
toJSON: (x: {
|
|
61
|
+
stateTransitionsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
62
|
+
stateRoot: import("snarkyjs/dist/node/lib/field").Field;
|
|
63
|
+
}) => {
|
|
64
|
+
stateTransitionsHash: string;
|
|
65
|
+
stateRoot: string;
|
|
66
|
+
};
|
|
67
|
+
fromJSON: (x: {
|
|
68
|
+
stateTransitionsHash: string;
|
|
69
|
+
stateRoot: string;
|
|
70
|
+
}) => {
|
|
71
|
+
stateTransitionsHash: import("snarkyjs/dist/node/lib/field").Field;
|
|
72
|
+
stateRoot: import("snarkyjs/dist/node/lib/field").Field;
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
export declare class StateTransitionProverPublicOutput extends StateTransitionProverPublicOutput_base {
|
|
76
|
+
}
|
|
77
|
+
export type StateTransitionProof = Proof<StateTransitionProverPublicInput, StateTransitionProverPublicOutput>;
|
|
78
|
+
export interface StateTransitionProvable extends ZkProgrammable<StateTransitionProverPublicInput, StateTransitionProverPublicOutput> {
|
|
79
|
+
witnessProviderReference: StateTransitionWitnessProviderReference;
|
|
80
|
+
runBatch: (publicInput: StateTransitionProverPublicInput, batch: StateTransitionProvableBatch) => StateTransitionProverPublicOutput;
|
|
81
|
+
merge: (publicInput: StateTransitionProverPublicInput, proof1: StateTransitionProof, proof2: StateTransitionProof) => StateTransitionProverPublicOutput;
|
|
82
|
+
}
|
|
83
|
+
export {};
|
|
84
|
+
//# sourceMappingURL=StateTransitionProvable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StateTransitionProvable.d.ts","sourceRoot":"","sources":["../../../src/prover/statetransition/StateTransitionProvable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,EAAU,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,4BAA4B,EAAE,MAAM,0CAA0C,CAAC;AAExF,OAAO,EAAE,uCAAuC,EAAE,MAAM,2CAA2C,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEpG,qBAAa,gCAAiC,SAAQ,qCAGpD;CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEL,qBAAa,iCAAkC,SAAQ,sCAGrD;CAAG;AAEL,MAAM,MAAM,oBAAoB,GAAG,KAAK,CACtC,gCAAgC,EAChC,iCAAiC,CAClC,CAAC;AAEF,MAAM,WAAW,uBACf,SAAQ,cAAc,CACpB,gCAAgC,EAChC,iCAAiC,CAClC;IACD,wBAAwB,EAAE,uCAAuC,CAAC;IAElE,QAAQ,EAAE,CACR,WAAW,EAAE,gCAAgC,EAC7C,KAAK,EAAE,4BAA4B,KAChC,iCAAiC,CAAC;IAEvC,KAAK,EAAE,CACL,WAAW,EAAE,gCAAgC,EAC7C,MAAM,EAAE,oBAAoB,EAC5B,MAAM,EAAE,oBAAoB,KACzB,iCAAiC,CAAC;CACxC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Field, Struct } from "snarkyjs";
|
|
2
|
+
export class StateTransitionProverPublicInput extends Struct({
|
|
3
|
+
stateTransitionsHash: Field,
|
|
4
|
+
stateRoot: Field,
|
|
5
|
+
}) {
|
|
6
|
+
}
|
|
7
|
+
export class StateTransitionProverPublicOutput extends Struct({
|
|
8
|
+
stateTransitionsHash: Field,
|
|
9
|
+
stateRoot: Field,
|
|
10
|
+
}) {
|
|
11
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Field } from "snarkyjs";
|
|
2
|
+
import { ProvableHashList } from "../../utils/ProvableHashList";
|
|
3
|
+
import { ProvableStateTransition } from "../../model/StateTransition";
|
|
4
|
+
import { StateTransitionProvableBatch } from "../../model/StateTransitionProvableBatch";
|
|
5
|
+
import { PlainZkProgram } from "@proto-kit/common";
|
|
6
|
+
import { StateTransitionProvable, StateTransitionProverPublicInput, StateTransitionProof, StateTransitionProverPublicOutput } from "./StateTransitionProvable";
|
|
7
|
+
import { ProtocolModule } from "../../protocol/ProtocolModule";
|
|
8
|
+
import { StateTransitionWitnessProviderReference } from "./StateTransitionWitnessProviderReference";
|
|
9
|
+
interface StateTransitionProverExecutionState {
|
|
10
|
+
stateRoot: Field;
|
|
11
|
+
stateTransitionList: ProvableHashList<ProvableStateTransition>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* StateTransitionProver is the prover that proves the application of some state
|
|
15
|
+
* transitions and checks and updates their merkle-tree entries
|
|
16
|
+
*/
|
|
17
|
+
export declare class StateTransitionProver extends ProtocolModule<StateTransitionProverPublicInput, StateTransitionProverPublicOutput> implements StateTransitionProvable {
|
|
18
|
+
readonly witnessProviderReference: StateTransitionWitnessProviderReference;
|
|
19
|
+
constructor(witnessProviderReference: StateTransitionWitnessProviderReference);
|
|
20
|
+
zkProgramFactory(): PlainZkProgram<StateTransitionProverPublicInput, StateTransitionProverPublicOutput>;
|
|
21
|
+
private get witnessProvider();
|
|
22
|
+
/**
|
|
23
|
+
* Applies the state transitions to the current stateRoot
|
|
24
|
+
* and returns the new prover state
|
|
25
|
+
*/
|
|
26
|
+
applyTransitions(stateRoot: Field, stateTransitionCommitmentFrom: Field, transitionBatch: StateTransitionProvableBatch): StateTransitionProverExecutionState;
|
|
27
|
+
/**
|
|
28
|
+
* Applies a single state transition to the given state
|
|
29
|
+
* and mutates it in place
|
|
30
|
+
*/
|
|
31
|
+
applyTransition(state: StateTransitionProverExecutionState, transition: ProvableStateTransition, index?: number): void;
|
|
32
|
+
/**
|
|
33
|
+
* Applies a whole batch of StateTransitions at once
|
|
34
|
+
*/
|
|
35
|
+
runBatch(publicInput: StateTransitionProverPublicInput, batch: StateTransitionProvableBatch): StateTransitionProverPublicOutput;
|
|
36
|
+
merge(publicInput: StateTransitionProverPublicInput, proof1: StateTransitionProof, proof2: StateTransitionProof): StateTransitionProverPublicOutput;
|
|
37
|
+
}
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=StateTransitionProver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StateTransitionProver.d.ts","sourceRoot":"","sources":["../../../src/prover/statetransition/StateTransitionProver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,EAAuB,MAAM,UAAU,CAAC;AAOpE,OAAO,EAEL,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,4BAA4B,EAAE,MAAM,0CAA0C,CAAC;AAIxF,OAAO,EAEL,cAAc,EAEf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,uBAAuB,EACvB,gCAAgC,EAChC,oBAAoB,EACpB,iCAAiC,EAClC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,uCAAuC,EAAE,MAAM,2CAA2C,CAAC;AAmBpG,UAAU,mCAAmC;IAC3C,SAAS,EAAE,KAAK,CAAC;IACjB,mBAAmB,EAAE,gBAAgB,CAAC,uBAAuB,CAAC,CAAC;CAChE;AAOD;;;GAGG;AACH,qBACa,qBACX,SAAQ,cAAc,CACpB,gCAAgC,EAChC,iCAAiC,CAEnC,YAAW,uBAAuB;aAIhB,wBAAwB,EAAE,uCAAuC;gBAAjE,wBAAwB,EAAE,uCAAuC;IAK5E,gBAAgB,IAAI,cAAc,CACvC,gCAAgC,EAChC,iCAAiC,CAClC;IAmDD,OAAO,KAAK,eAAe,GAM1B;IAED;;;OAGG;IACI,gBAAgB,CACrB,SAAS,EAAE,KAAK,EAChB,6BAA6B,EAAE,KAAK,EACpC,eAAe,EAAE,4BAA4B,GAC5C,mCAAmC;IAsBtC;;;OAGG;IACI,eAAe,CACpB,KAAK,EAAE,mCAAmC,EAC1C,UAAU,EAAE,uBAAuB,EACnC,KAAK,SAAI;IAqCX;;OAEG;IAEI,QAAQ,CACb,WAAW,EAAE,gCAAgC,EAC7C,KAAK,EAAE,4BAA4B,GAClC,iCAAiC;IAiB7B,KAAK,CACV,WAAW,EAAE,gCAAgC,EAC7C,MAAM,EAAE,oBAAoB,EAC5B,MAAM,EAAE,oBAAoB,GAC3B,iCAAiC;CA6BrC"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { Experimental, Field, Provable, SelfProof } from "snarkyjs";
|
|
11
|
+
import { injectable } from "tsyringe";
|
|
12
|
+
import { MerkleTreeUtils, RollupMerkleWitness, } from "../../utils/merkletree/RollupMerkleTree.js";
|
|
13
|
+
import { DefaultProvableHashList, } from "../../utils/ProvableHashList";
|
|
14
|
+
import { ProvableStateTransition } from "../../model/StateTransition";
|
|
15
|
+
import { StateTransitionProvableBatch } from "../../model/StateTransitionProvableBatch";
|
|
16
|
+
import { constants } from "../../Constants";
|
|
17
|
+
import { provableMethod, } from "@proto-kit/common";
|
|
18
|
+
import { StateTransitionProverPublicInput, StateTransitionProverPublicOutput, } from "./StateTransitionProvable";
|
|
19
|
+
import { ProtocolModule } from "../../protocol/ProtocolModule";
|
|
20
|
+
import { StateTransitionWitnessProviderReference } from "./StateTransitionWitnessProviderReference";
|
|
21
|
+
const errors = {
|
|
22
|
+
stateRootNotMatching: (step) => `StateRoots not matching ${step}`,
|
|
23
|
+
stateTransitionsHashNotMatching: (step) => `State transitions hash not matching ${step}`,
|
|
24
|
+
merkleWitnessNotCorrect: (index) => `MerkleWitness not valid for StateTransition (${index})`,
|
|
25
|
+
noWitnessProviderSet: () => new Error("WitnessProvider not set, set it before you use StateTransitionProvider"),
|
|
26
|
+
propertyNotMatching: (propertyName) => `${propertyName} not matching`,
|
|
27
|
+
};
|
|
28
|
+
const StateTransitionSelfProofClass = (SelfProof);
|
|
29
|
+
/**
|
|
30
|
+
* StateTransitionProver is the prover that proves the application of some state
|
|
31
|
+
* transitions and checks and updates their merkle-tree entries
|
|
32
|
+
*/
|
|
33
|
+
let StateTransitionProver = class StateTransitionProver extends ProtocolModule {
|
|
34
|
+
constructor(
|
|
35
|
+
// Injected
|
|
36
|
+
witnessProviderReference) {
|
|
37
|
+
super();
|
|
38
|
+
this.witnessProviderReference = witnessProviderReference;
|
|
39
|
+
}
|
|
40
|
+
zkProgramFactory() {
|
|
41
|
+
const instance = this;
|
|
42
|
+
const program = Experimental.ZkProgram({
|
|
43
|
+
publicInput: StateTransitionProverPublicInput,
|
|
44
|
+
publicOutput: StateTransitionProverPublicOutput,
|
|
45
|
+
methods: {
|
|
46
|
+
proveBatch: {
|
|
47
|
+
privateInputs: [StateTransitionProvableBatch],
|
|
48
|
+
method(publicInput, batch) {
|
|
49
|
+
return instance.runBatch(publicInput, batch);
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
merge: {
|
|
53
|
+
privateInputs: [
|
|
54
|
+
StateTransitionSelfProofClass,
|
|
55
|
+
StateTransitionSelfProofClass,
|
|
56
|
+
],
|
|
57
|
+
method(publicInput, proof1, proof2) {
|
|
58
|
+
return instance.merge(publicInput, proof1, proof2);
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
const methods = {
|
|
64
|
+
proveBatch: program.proveBatch.bind(program),
|
|
65
|
+
merge: program.merge.bind(program),
|
|
66
|
+
};
|
|
67
|
+
const SelfProofClass = Experimental.ZkProgram.Proof(program);
|
|
68
|
+
return {
|
|
69
|
+
compile: program.compile.bind(program),
|
|
70
|
+
verify: program.verify.bind(program),
|
|
71
|
+
Proof: SelfProofClass,
|
|
72
|
+
methods,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
get witnessProvider() {
|
|
76
|
+
const provider = this.witnessProviderReference.getWitnessProvider();
|
|
77
|
+
if (provider === undefined) {
|
|
78
|
+
throw errors.noWitnessProviderSet();
|
|
79
|
+
}
|
|
80
|
+
return provider;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Applies the state transitions to the current stateRoot
|
|
84
|
+
* and returns the new prover state
|
|
85
|
+
*/
|
|
86
|
+
applyTransitions(stateRoot, stateTransitionCommitmentFrom, transitionBatch) {
|
|
87
|
+
const state = {
|
|
88
|
+
stateRoot,
|
|
89
|
+
stateTransitionList: new DefaultProvableHashList(ProvableStateTransition, stateTransitionCommitmentFrom),
|
|
90
|
+
};
|
|
91
|
+
const transitions = transitionBatch.batch;
|
|
92
|
+
for (let index = 0; index < constants.stateTransitionProverBatchSize; index++) {
|
|
93
|
+
this.applyTransition(state, transitions[index], index);
|
|
94
|
+
}
|
|
95
|
+
return state;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Applies a single state transition to the given state
|
|
99
|
+
* and mutates it in place
|
|
100
|
+
*/
|
|
101
|
+
applyTransition(state, transition, index = 0) {
|
|
102
|
+
const treeWitness = Provable.witness(RollupMerkleWitness, () => this.witnessProvider.getWitness(transition.path));
|
|
103
|
+
Provable.log(`ST (${index})`, state.stateRoot, " value: ", transition.from.value);
|
|
104
|
+
const membershipValid = MerkleTreeUtils.checkMembership(treeWitness, state.stateRoot, transition.path, transition.from.value);
|
|
105
|
+
membershipValid
|
|
106
|
+
.or(transition.from.isSome.not())
|
|
107
|
+
.assertTrue(errors.merkleWitnessNotCorrect(index));
|
|
108
|
+
const newRoot = MerkleTreeUtils.computeRoot(treeWitness, transition.to.value);
|
|
109
|
+
state.stateRoot = Provable.if(transition.to.isSome, newRoot, state.stateRoot);
|
|
110
|
+
state.stateTransitionList.pushIf(transition, transition.path.equals(Field(0)).not());
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Applies a whole batch of StateTransitions at once
|
|
114
|
+
*/
|
|
115
|
+
runBatch(publicInput, batch) {
|
|
116
|
+
Provable.log(publicInput);
|
|
117
|
+
const result = this.applyTransitions(publicInput.stateRoot, publicInput.stateTransitionsHash, batch);
|
|
118
|
+
const output = new StateTransitionProverPublicOutput({
|
|
119
|
+
stateRoot: result.stateRoot,
|
|
120
|
+
stateTransitionsHash: result.stateTransitionList.commitment,
|
|
121
|
+
});
|
|
122
|
+
Provable.log(output);
|
|
123
|
+
return output;
|
|
124
|
+
}
|
|
125
|
+
merge(publicInput, proof1, proof2) {
|
|
126
|
+
proof1.verify();
|
|
127
|
+
proof2.verify();
|
|
128
|
+
// Check state
|
|
129
|
+
publicInput.stateRoot.assertEquals(proof1.publicInput.stateRoot, errors.stateRootNotMatching("publicInput.from -> proof1.from"));
|
|
130
|
+
proof1.publicOutput.stateRoot.assertEquals(proof2.publicInput.stateRoot, errors.stateRootNotMatching("proof1.to -> proof2.from"));
|
|
131
|
+
// Check ST list
|
|
132
|
+
publicInput.stateTransitionsHash.assertEquals(proof1.publicInput.stateTransitionsHash, errors.stateTransitionsHashNotMatching("publicInput.from -> proof1.from"));
|
|
133
|
+
proof1.publicOutput.stateTransitionsHash.assertEquals(proof2.publicInput.stateTransitionsHash, errors.stateTransitionsHashNotMatching("proof1.to -> proof2.from"));
|
|
134
|
+
return new StateTransitionProverPublicInput({
|
|
135
|
+
stateRoot: proof2.publicOutput.stateRoot,
|
|
136
|
+
stateTransitionsHash: proof2.publicOutput.stateTransitionsHash,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
__decorate([
|
|
141
|
+
provableMethod(),
|
|
142
|
+
__metadata("design:type", Function),
|
|
143
|
+
__metadata("design:paramtypes", [StateTransitionProverPublicInput,
|
|
144
|
+
StateTransitionProvableBatch]),
|
|
145
|
+
__metadata("design:returntype", StateTransitionProverPublicOutput)
|
|
146
|
+
], StateTransitionProver.prototype, "runBatch", null);
|
|
147
|
+
__decorate([
|
|
148
|
+
provableMethod(),
|
|
149
|
+
__metadata("design:type", Function),
|
|
150
|
+
__metadata("design:paramtypes", [StateTransitionProverPublicInput, Object, Object]),
|
|
151
|
+
__metadata("design:returntype", StateTransitionProverPublicOutput)
|
|
152
|
+
], StateTransitionProver.prototype, "merge", null);
|
|
153
|
+
StateTransitionProver = __decorate([
|
|
154
|
+
injectable(),
|
|
155
|
+
__metadata("design:paramtypes", [StateTransitionWitnessProviderReference])
|
|
156
|
+
], StateTransitionProver);
|
|
157
|
+
export { StateTransitionProver };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Field } from "snarkyjs";
|
|
2
|
+
import { RollupMerkleWitness } from "../../utils/merkletree/RollupMerkleTree.js";
|
|
3
|
+
/**
|
|
4
|
+
* Interface for providing merkle witnesses to the state-transition prover
|
|
5
|
+
*/
|
|
6
|
+
export interface StateTransitionWitnessProvider {
|
|
7
|
+
/**
|
|
8
|
+
* Provides the merkle witness corresponding to the given key
|
|
9
|
+
* @param key Merkle-tree key
|
|
10
|
+
*/
|
|
11
|
+
getWitness: (key: Field) => RollupMerkleWitness;
|
|
12
|
+
}
|
|
13
|
+
export declare class NoOpStateTransitionWitnessProvider implements StateTransitionWitnessProvider {
|
|
14
|
+
getWitness(key: Field): RollupMerkleWitness;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=StateTransitionWitnessProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StateTransitionWitnessProvider.d.ts","sourceRoot":"","sources":["../../../src/prover/statetransition/StateTransitionWitnessProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAGtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAEjF;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C;;;OAGG;IACH,UAAU,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,mBAAmB,CAAC;CACjD;AAED,qBACa,kCACX,YAAW,8BAA8B;IAElC,UAAU,CAAC,GAAG,EAAE,KAAK,GAAG,mBAAmB;CAGnD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { injectable } from "tsyringe";
|
|
8
|
+
import { RollupMerkleWitness } from "../../utils/merkletree/RollupMerkleTree.js";
|
|
9
|
+
let NoOpStateTransitionWitnessProvider = class NoOpStateTransitionWitnessProvider {
|
|
10
|
+
getWitness(key) {
|
|
11
|
+
return new RollupMerkleWitness({ path: [], isLeft: [] });
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
NoOpStateTransitionWitnessProvider = __decorate([
|
|
15
|
+
injectable()
|
|
16
|
+
], NoOpStateTransitionWitnessProvider);
|
|
17
|
+
export { NoOpStateTransitionWitnessProvider };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { StateTransitionWitnessProvider } from "./StateTransitionWitnessProvider";
|
|
2
|
+
export declare class StateTransitionWitnessProviderReference {
|
|
3
|
+
private witnessProvider?;
|
|
4
|
+
setWitnessProvider(provider: StateTransitionWitnessProvider): void;
|
|
5
|
+
getWitnessProvider(): StateTransitionWitnessProvider | undefined;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=StateTransitionWitnessProviderReference.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StateTransitionWitnessProviderReference.d.ts","sourceRoot":"","sources":["../../../src/prover/statetransition/StateTransitionWitnessProviderReference.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAElF,qBAEa,uCAAuC;IAElD,OAAO,CAAC,eAAe,CAAC,CAAiC;IAElD,kBAAkB,CAAC,QAAQ,EAAE,8BAA8B;IAI3D,kBAAkB,IAAI,8BAA8B,GAAG,SAAS;CAGxE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { injectable, Lifecycle, scoped } from "tsyringe";
|
|
8
|
+
let StateTransitionWitnessProviderReference = class StateTransitionWitnessProviderReference {
|
|
9
|
+
setWitnessProvider(provider) {
|
|
10
|
+
this.witnessProvider = provider;
|
|
11
|
+
}
|
|
12
|
+
getWitnessProvider() {
|
|
13
|
+
return this.witnessProvider;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
StateTransitionWitnessProviderReference = __decorate([
|
|
17
|
+
injectable(),
|
|
18
|
+
scoped(Lifecycle.ContainerScoped)
|
|
19
|
+
], StateTransitionWitnessProviderReference);
|
|
20
|
+
export { StateTransitionWitnessProviderReference };
|