@proto-kit/protocol 0.1.1-develop.1087 → 0.1.1-develop.1309
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/Constants.js +1 -0
- package/dist/Constants.js.map +1 -0
- package/dist/hooks/AccountStateHook.js +1 -0
- package/dist/hooks/AccountStateHook.js.map +1 -0
- package/dist/hooks/BlockHeightHook.js +1 -0
- package/dist/hooks/BlockHeightHook.js.map +1 -0
- package/dist/hooks/LastStateRootBlockHook.js +1 -0
- package/dist/hooks/LastStateRootBlockHook.js.map +1 -0
- package/dist/hooks/NoopBlockHook.js +1 -0
- package/dist/hooks/NoopBlockHook.js.map +1 -0
- package/dist/hooks/NoopSettlementHook.d.ts +2 -2
- package/dist/hooks/NoopSettlementHook.d.ts.map +1 -1
- package/dist/hooks/NoopSettlementHook.js +1 -0
- package/dist/hooks/NoopSettlementHook.js.map +1 -0
- package/dist/hooks/NoopTransactionHook.js +1 -0
- package/dist/hooks/NoopTransactionHook.js.map +1 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -2
- package/dist/index.js.map +1 -0
- package/dist/model/MethodPublicOutput.js +1 -0
- package/dist/model/MethodPublicOutput.js.map +1 -0
- package/dist/model/Option.js +1 -0
- package/dist/model/Option.js.map +1 -0
- package/dist/model/Path.js +1 -0
- package/dist/model/Path.js.map +1 -0
- package/dist/model/RuntimeLike.js +1 -0
- package/dist/model/RuntimeLike.js.map +1 -0
- package/dist/model/StateTransition.js +1 -0
- package/dist/model/StateTransition.js.map +1 -0
- package/dist/model/StateTransitionProvableBatch.d.ts +28 -2
- package/dist/model/StateTransitionProvableBatch.d.ts.map +1 -1
- package/dist/model/StateTransitionProvableBatch.js +9 -3
- package/dist/model/StateTransitionProvableBatch.js.map +1 -0
- package/dist/model/network/NetworkState.js +1 -0
- package/dist/model/network/NetworkState.js.map +1 -0
- package/dist/model/transaction/RuntimeTransaction.js +1 -0
- package/dist/model/transaction/RuntimeTransaction.js.map +1 -0
- package/dist/model/transaction/SignedTransaction.js +1 -0
- package/dist/model/transaction/SignedTransaction.js.map +1 -0
- package/dist/model/transaction/ValueOption.js +1 -0
- package/dist/model/transaction/ValueOption.js.map +1 -0
- package/dist/protocol/Protocol.d.ts.map +1 -1
- package/dist/protocol/Protocol.js +31 -6
- package/dist/protocol/Protocol.js.map +1 -0
- package/dist/protocol/ProtocolEnvironment.js +1 -0
- package/dist/protocol/ProtocolEnvironment.js.map +1 -0
- package/dist/protocol/ProtocolModule.d.ts +1 -1
- package/dist/protocol/ProtocolModule.d.ts.map +1 -1
- package/dist/protocol/ProtocolModule.js +2 -1
- package/dist/protocol/ProtocolModule.js.map +1 -0
- package/dist/protocol/ProvableBlockHook.js +1 -0
- package/dist/protocol/ProvableBlockHook.js.map +1 -0
- package/dist/protocol/ProvableTransactionHook.js +1 -0
- package/dist/protocol/ProvableTransactionHook.js.map +1 -0
- package/dist/protocol/TransitioningProtocolModule.js +1 -0
- package/dist/protocol/TransitioningProtocolModule.js.map +1 -0
- package/dist/prover/block/BlockProvable.d.ts +19 -5
- package/dist/prover/block/BlockProvable.d.ts.map +1 -1
- package/dist/prover/block/BlockProvable.js +5 -2
- package/dist/prover/block/BlockProvable.js.map +1 -0
- package/dist/prover/block/BlockProver.d.ts +11 -9
- package/dist/prover/block/BlockProver.d.ts.map +1 -1
- package/dist/prover/block/BlockProver.js +79 -41
- package/dist/prover/block/BlockProver.js.map +1 -0
- package/dist/prover/block/accummulators/BlockHashMerkleTree.js +1 -0
- package/dist/prover/block/accummulators/BlockHashMerkleTree.js.map +1 -0
- package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.d.ts +2 -2
- package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js +1 -0
- package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js.map +1 -0
- package/dist/prover/block/services/RuntimeVerificationKeyRootService.js +1 -0
- package/dist/prover/block/services/RuntimeVerificationKeyRootService.js.map +1 -0
- package/dist/prover/statetransition/StateTransitionProvable.d.ts +2 -4
- package/dist/prover/statetransition/StateTransitionProvable.d.ts.map +1 -1
- package/dist/prover/statetransition/StateTransitionProvable.js +1 -0
- package/dist/prover/statetransition/StateTransitionProvable.js.map +1 -0
- package/dist/prover/statetransition/StateTransitionProver.d.ts +7 -10
- package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -1
- package/dist/prover/statetransition/StateTransitionProver.js +27 -28
- package/dist/prover/statetransition/StateTransitionProver.js.map +1 -0
- package/dist/settlement/ContractModule.d.ts +4 -3
- package/dist/settlement/ContractModule.d.ts.map +1 -1
- package/dist/settlement/ContractModule.js +2 -1
- package/dist/settlement/ContractModule.js.map +1 -0
- package/dist/settlement/SettlementContractModule.d.ts +25 -12
- package/dist/settlement/SettlementContractModule.d.ts.map +1 -1
- package/dist/settlement/SettlementContractModule.js +29 -20
- package/dist/settlement/SettlementContractModule.js.map +1 -0
- package/dist/settlement/contracts/BridgeContract.d.ts +97 -0
- package/dist/settlement/contracts/BridgeContract.d.ts.map +1 -0
- package/dist/settlement/contracts/BridgeContract.js +164 -0
- package/dist/settlement/contracts/BridgeContract.js.map +1 -0
- package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts +14 -0
- package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts.map +1 -0
- package/dist/settlement/contracts/BridgeContractProtocolModule.js +30 -0
- package/dist/settlement/contracts/BridgeContractProtocolModule.js.map +1 -0
- package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts +10 -1
- package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts.map +1 -1
- package/dist/settlement/contracts/DispatchContractProtocolModule.js +24 -2
- package/dist/settlement/contracts/DispatchContractProtocolModule.js.map +1 -0
- package/dist/settlement/contracts/DispatchSmartContract.d.ts +26 -4
- package/dist/settlement/contracts/DispatchSmartContract.d.ts.map +1 -1
- package/dist/settlement/contracts/DispatchSmartContract.js +139 -19
- package/dist/settlement/contracts/DispatchSmartContract.js.map +1 -0
- package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts +10 -8
- package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts.map +1 -1
- package/dist/settlement/contracts/SettlementContractProtocolModule.js +47 -9
- package/dist/settlement/contracts/SettlementContractProtocolModule.js.map +1 -0
- package/dist/settlement/contracts/SettlementSmartContract.d.ts +98 -17
- package/dist/settlement/contracts/SettlementSmartContract.d.ts.map +1 -1
- package/dist/settlement/contracts/SettlementSmartContract.js +147 -79
- package/dist/settlement/contracts/SettlementSmartContract.js.map +1 -0
- package/dist/settlement/contracts/TokenBridgeTree.d.ts +228 -0
- package/dist/settlement/contracts/TokenBridgeTree.d.ts.map +1 -0
- package/dist/settlement/contracts/TokenBridgeTree.js +60 -0
- package/dist/settlement/contracts/TokenBridgeTree.js.map +1 -0
- package/dist/settlement/contracts/authorizations/ContractAuthorization.d.ts +10 -0
- package/dist/settlement/contracts/authorizations/ContractAuthorization.d.ts.map +1 -0
- package/dist/settlement/contracts/authorizations/ContractAuthorization.js +2 -0
- package/dist/settlement/contracts/authorizations/ContractAuthorization.js.map +1 -0
- package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.d.ts +85 -0
- package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.d.ts.map +1 -0
- package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.js +11 -0
- package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.js.map +1 -0
- package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.d.ts +79 -0
- package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.d.ts.map +1 -0
- package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.js +11 -0
- package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.js.map +1 -0
- package/dist/settlement/messages/Deposit.d.ts +13 -0
- package/dist/settlement/messages/Deposit.d.ts.map +1 -1
- package/dist/settlement/messages/Deposit.js +3 -1
- package/dist/settlement/messages/Deposit.js.map +1 -0
- package/dist/settlement/messages/OutgoingMessageArgument.d.ts +8 -0
- package/dist/settlement/messages/OutgoingMessageArgument.d.ts.map +1 -1
- package/dist/settlement/messages/OutgoingMessageArgument.js +1 -0
- package/dist/settlement/messages/OutgoingMessageArgument.js.map +1 -0
- package/dist/settlement/messages/Withdrawal.d.ts +13 -0
- package/dist/settlement/messages/Withdrawal.d.ts.map +1 -1
- package/dist/settlement/messages/Withdrawal.js +4 -1
- package/dist/settlement/messages/Withdrawal.js.map +1 -0
- package/dist/settlement/modularity/ProvableSettlementHook.d.ts +5 -3
- package/dist/settlement/modularity/ProvableSettlementHook.d.ts.map +1 -1
- package/dist/settlement/modularity/ProvableSettlementHook.js +1 -0
- package/dist/settlement/modularity/ProvableSettlementHook.js.map +1 -0
- package/dist/settlement/modularity/types.d.ts +8 -0
- package/dist/settlement/modularity/types.d.ts.map +1 -0
- package/dist/settlement/modularity/types.js +2 -0
- package/dist/settlement/modularity/types.js.map +1 -0
- package/dist/settlement/modules/NetworkStateSettlementModule.js +1 -0
- package/dist/settlement/modules/NetworkStateSettlementModule.js.map +1 -0
- package/dist/state/State.js +1 -0
- package/dist/state/State.js.map +1 -0
- package/dist/state/StateMap.js +1 -0
- package/dist/state/StateMap.js.map +1 -0
- package/dist/state/StateService.js +1 -0
- package/dist/state/StateService.js.map +1 -0
- package/dist/state/StateServiceProvider.js +1 -0
- package/dist/state/StateServiceProvider.js.map +1 -0
- package/dist/state/assert/assert.js +1 -0
- package/dist/state/assert/assert.js.map +1 -0
- package/dist/state/context/RuntimeMethodExecutionContext.js +1 -0
- package/dist/state/context/RuntimeMethodExecutionContext.js.map +1 -0
- package/dist/state/context/TransitionMethodExecutionContext.js +1 -0
- package/dist/state/context/TransitionMethodExecutionContext.js.map +1 -0
- package/dist/state/protocol/ProtocolState.js +1 -0
- package/dist/state/protocol/ProtocolState.js.map +1 -0
- package/dist/utils/MinaPrefixedProvableHashList.js +1 -0
- package/dist/utils/MinaPrefixedProvableHashList.js.map +1 -0
- package/dist/utils/PrefixedProvableHashList.js +1 -0
- package/dist/utils/PrefixedProvableHashList.js.map +1 -0
- package/dist/utils/ProvableHashList.js +1 -0
- package/dist/utils/ProvableHashList.js.map +1 -0
- package/dist/utils/ProvableReductionHashList.js +1 -0
- package/dist/utils/ProvableReductionHashList.js.map +1 -0
- package/dist/utils/StateTransitionReductionList.js +1 -0
- package/dist/utils/StateTransitionReductionList.js.map +1 -0
- package/dist/utils/utils.js +1 -0
- package/dist/utils/utils.js.map +1 -0
- package/jest.config.cjs +12 -1
- package/package.json +4 -4
- package/src/hooks/NoopSettlementHook.ts +2 -2
- package/src/index.ts +6 -2
- package/src/model/StateTransitionProvableBatch.ts +24 -4
- package/src/protocol/Protocol.ts +36 -7
- package/src/protocol/ProtocolModule.ts +1 -1
- package/src/prover/block/BlockProvable.ts +9 -9
- package/src/prover/block/BlockProver.ts +94 -58
- package/src/prover/statetransition/StateTransitionProvable.ts +5 -8
- package/src/prover/statetransition/StateTransitionProver.ts +46 -40
- package/src/settlement/ContractModule.ts +17 -10
- package/src/settlement/SettlementContractModule.ts +54 -41
- package/src/settlement/contracts/BridgeContract.ts +237 -0
- package/src/settlement/contracts/BridgeContractProtocolModule.ts +43 -0
- package/src/settlement/contracts/DispatchContractProtocolModule.ts +37 -3
- package/src/settlement/contracts/DispatchSmartContract.ts +213 -23
- package/src/settlement/contracts/SettlementContractProtocolModule.ts +61 -20
- package/src/settlement/contracts/SettlementSmartContract.ts +261 -107
- package/src/settlement/contracts/TokenBridgeTree.ts +73 -0
- package/src/settlement/contracts/authorizations/ContractAuthorization.ts +11 -0
- package/src/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.ts +16 -0
- package/src/settlement/contracts/authorizations/UpdateMessagesHashAuth.ts +16 -0
- package/src/settlement/messages/Deposit.ts +2 -1
- package/src/settlement/messages/Withdrawal.ts +3 -1
- package/src/settlement/modularity/ProvableSettlementHook.ts +6 -3
- package/src/settlement/modularity/types.ts +22 -0
- package/test/BlockProver.test.ts +2 -1
- package/test/TestingProtocol.ts +17 -12
- package/test/compiling/types.ts +28 -0
- package/test/modularity/types.ts +35 -0
- package/src/prover/statetransition/StateTransitionWitnessProvider.ts +0 -23
- package/src/prover/statetransition/StateTransitionWitnessProviderReference.ts +0 -17
package/src/protocol/Protocol.ts
CHANGED
|
@@ -26,11 +26,18 @@ import { ProtocolModule } from "./ProtocolModule";
|
|
|
26
26
|
import { ProvableTransactionHook } from "./ProvableTransactionHook";
|
|
27
27
|
import { ProtocolEnvironment } from "./ProtocolEnvironment";
|
|
28
28
|
import { ProvableBlockHook } from "./ProvableBlockHook";
|
|
29
|
-
|
|
29
|
+
import { TransitioningProtocolModule } from "./TransitioningProtocolModule";
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* This is a mapping of abstract classes to their respective injection tokens.
|
|
33
|
+
* Keys are the abstract classes names, which need to be set dynamically
|
|
34
|
+
* and can't be hardcoded since producing optimized builds may mangle the
|
|
35
|
+
* class names, making them different from the ones in the source code.
|
|
36
|
+
*/
|
|
30
37
|
const PROTOCOL_INJECTION_TOKENS: Record<string, string> = {
|
|
31
|
-
ProvableTransactionHook: "ProvableTransactionHook",
|
|
32
|
-
ProvableBlockHook: "ProvableBlockHook",
|
|
33
|
-
ProvableSettlementHook: "ProvableSettlementHook",
|
|
38
|
+
[ProvableTransactionHook.name]: "ProvableTransactionHook",
|
|
39
|
+
[ProvableBlockHook.name]: "ProvableBlockHook",
|
|
40
|
+
[ProvableSettlementHook.name]: "ProvableSettlementHook",
|
|
34
41
|
};
|
|
35
42
|
|
|
36
43
|
export type ProtocolModulesRecord = ModulesRecord<
|
|
@@ -94,7 +101,7 @@ export class Protocol<
|
|
|
94
101
|
log.debug(`Decorated ${moduleName}`);
|
|
95
102
|
containedModule.protocol = this;
|
|
96
103
|
|
|
97
|
-
if (containedModule instanceof
|
|
104
|
+
if (containedModule instanceof TransitioningProtocolModule) {
|
|
98
105
|
containedModule.name = moduleName;
|
|
99
106
|
}
|
|
100
107
|
|
|
@@ -161,7 +168,7 @@ export class Protocol<
|
|
|
161
168
|
|
|
162
169
|
implementingModules.forEach(([key]) => {
|
|
163
170
|
this.container.register(
|
|
164
|
-
|
|
171
|
+
newInjectionToken,
|
|
165
172
|
{ useToken: key },
|
|
166
173
|
{ lifecycle: Lifecycle.ContainerScoped }
|
|
167
174
|
);
|
|
@@ -174,12 +181,34 @@ export class Protocol<
|
|
|
174
181
|
|
|
175
182
|
// Register default (noop) version
|
|
176
183
|
this.container.register(
|
|
177
|
-
|
|
184
|
+
newInjectionToken,
|
|
178
185
|
{ useClass: defaultType },
|
|
179
186
|
{ lifecycle: Lifecycle.ContainerScoped }
|
|
180
187
|
);
|
|
181
188
|
}
|
|
182
189
|
});
|
|
190
|
+
|
|
191
|
+
// Cross-register all runtime modules to the protocol container for easier
|
|
192
|
+
// access of runtime modules inside protocol hooks
|
|
193
|
+
if (this.container.isRegistered("Runtime", true)) {
|
|
194
|
+
const runtimeContainer: ModuleContainer<any> =
|
|
195
|
+
this.container.resolve("Runtime");
|
|
196
|
+
|
|
197
|
+
runtimeContainer.moduleNames.forEach((runtimeModuleName) => {
|
|
198
|
+
this.container.register(runtimeModuleName, {
|
|
199
|
+
useFactory: (dependencyContainer) => {
|
|
200
|
+
// Prevents creation of closure
|
|
201
|
+
const runtime: ModuleContainer<any> =
|
|
202
|
+
dependencyContainer.resolve("Runtime");
|
|
203
|
+
return runtime.resolve(runtimeModuleName);
|
|
204
|
+
},
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
} else {
|
|
208
|
+
log.warn(
|
|
209
|
+
"Couldn't resolve Runtime reference in Protocol, resolving RuntimeModules in hooks won't be available"
|
|
210
|
+
);
|
|
211
|
+
}
|
|
183
212
|
}
|
|
184
213
|
|
|
185
214
|
public async start() {
|
|
@@ -13,7 +13,7 @@ export abstract class ProtocolModule<
|
|
|
13
13
|
> extends ConfigurableModule<Config> {
|
|
14
14
|
public protocol?: ProtocolEnvironment;
|
|
15
15
|
|
|
16
|
-
public get
|
|
16
|
+
public get areProofsEnabled(): AreProofsEnabled | undefined {
|
|
17
17
|
return this.protocol?.getAreProofsEnabled();
|
|
18
18
|
}
|
|
19
19
|
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
Struct,
|
|
8
8
|
Void,
|
|
9
9
|
} from "o1js";
|
|
10
|
-
import { WithZkProgrammable } from "@proto-kit/common";
|
|
10
|
+
import { WithZkProgrammable, CompilableModule } from "@proto-kit/common";
|
|
11
11
|
|
|
12
12
|
import { StateTransitionProof } from "../statetransition/StateTransitionProvable";
|
|
13
13
|
import { MethodPublicOutput } from "../../model/MethodPublicOutput";
|
|
@@ -24,6 +24,7 @@ export class BlockProverPublicInput extends Struct({
|
|
|
24
24
|
blockHashRoot: Field,
|
|
25
25
|
eternalTransactionsHash: Field,
|
|
26
26
|
incomingMessagesHash: Field,
|
|
27
|
+
blockNumber: Field,
|
|
27
28
|
}) {}
|
|
28
29
|
|
|
29
30
|
export class BlockProverPublicOutput extends Struct({
|
|
@@ -36,15 +37,10 @@ export class BlockProverPublicOutput extends Struct({
|
|
|
36
37
|
closed: Bool,
|
|
37
38
|
blockNumber: Field,
|
|
38
39
|
}) {
|
|
39
|
-
public equals(
|
|
40
|
-
input: BlockProverPublicInput,
|
|
41
|
-
closed: Bool,
|
|
42
|
-
blockNumber: Field
|
|
43
|
-
): Bool {
|
|
40
|
+
public equals(input: BlockProverPublicInput, closed: Bool): Bool {
|
|
44
41
|
const output2 = BlockProverPublicOutput.toFields({
|
|
45
42
|
...input,
|
|
46
43
|
closed,
|
|
47
|
-
blockNumber,
|
|
48
44
|
});
|
|
49
45
|
const output1 = BlockProverPublicOutput.toFields(this);
|
|
50
46
|
return output1
|
|
@@ -71,10 +67,14 @@ export class DynamicRuntimeProof extends DynamicProof<
|
|
|
71
67
|
static publicInputType = Void;
|
|
72
68
|
|
|
73
69
|
static publicOutputType = MethodPublicOutput;
|
|
70
|
+
|
|
71
|
+
// TODO this won't be 0 for proofs-as-args
|
|
72
|
+
static maxProofsVerified = 0 as const;
|
|
74
73
|
}
|
|
75
74
|
|
|
76
75
|
export interface BlockProvable
|
|
77
|
-
extends WithZkProgrammable<BlockProverPublicInput, BlockProverPublicOutput
|
|
76
|
+
extends WithZkProgrammable<BlockProverPublicInput, BlockProverPublicOutput>,
|
|
77
|
+
CompilableModule {
|
|
78
78
|
proveTransaction: (
|
|
79
79
|
publicInput: BlockProverPublicInput,
|
|
80
80
|
stateProof: StateTransitionProof,
|
|
@@ -87,7 +87,7 @@ export interface BlockProvable
|
|
|
87
87
|
publicInput: BlockProverPublicInput,
|
|
88
88
|
networkState: NetworkState,
|
|
89
89
|
blockWitness: BlockHashMerkleTreeWitness,
|
|
90
|
-
stateTransitionProof: StateTransitionProof,
|
|
90
|
+
// stateTransitionProof: StateTransitionProof,
|
|
91
91
|
transactionProof: BlockProverProof
|
|
92
92
|
) => Promise<BlockProverPublicOutput>;
|
|
93
93
|
|
|
@@ -12,6 +12,10 @@ import {
|
|
|
12
12
|
import { container, inject, injectable, injectAll } from "tsyringe";
|
|
13
13
|
import {
|
|
14
14
|
AreProofsEnabled,
|
|
15
|
+
CompilableModule,
|
|
16
|
+
CompileArtifact,
|
|
17
|
+
CompileRegistry,
|
|
18
|
+
MAX_FIELD,
|
|
15
19
|
PlainZkProgram,
|
|
16
20
|
provableMethod,
|
|
17
21
|
WithZkProgrammable,
|
|
@@ -23,6 +27,7 @@ import { MethodPublicOutput } from "../../model/MethodPublicOutput";
|
|
|
23
27
|
import { ProtocolModule } from "../../protocol/ProtocolModule";
|
|
24
28
|
import {
|
|
25
29
|
StateTransitionProof,
|
|
30
|
+
StateTransitionProvable,
|
|
26
31
|
StateTransitionProverPublicInput,
|
|
27
32
|
StateTransitionProverPublicOutput,
|
|
28
33
|
} from "../statetransition/StateTransitionProvable";
|
|
@@ -124,10 +129,6 @@ export interface BlockProverState {
|
|
|
124
129
|
incomingMessagesHash: Field;
|
|
125
130
|
}
|
|
126
131
|
|
|
127
|
-
function maxField() {
|
|
128
|
-
return Field(Field.ORDER - 1n);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
132
|
export type BlockProof = Proof<BlockProverPublicInput, BlockProverPublicOutput>;
|
|
132
133
|
export type RuntimeProof = Proof<void, MethodPublicOutput>;
|
|
133
134
|
|
|
@@ -149,8 +150,10 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
149
150
|
super();
|
|
150
151
|
}
|
|
151
152
|
|
|
152
|
-
|
|
153
|
-
|
|
153
|
+
name = "BlockProver";
|
|
154
|
+
|
|
155
|
+
public get areProofsEnabled(): AreProofsEnabled | undefined {
|
|
156
|
+
return this.prover.areProofsEnabled;
|
|
154
157
|
}
|
|
155
158
|
|
|
156
159
|
/**
|
|
@@ -416,6 +419,11 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
416
419
|
"ExecutionData Networkstate doesn't equal public input hash"
|
|
417
420
|
);
|
|
418
421
|
|
|
422
|
+
publicInput.blockNumber.assertEquals(
|
|
423
|
+
MAX_FIELD,
|
|
424
|
+
"blockNumber has to be MAX for transaction proofs"
|
|
425
|
+
);
|
|
426
|
+
|
|
419
427
|
// Verify the [methodId, vk] tuple against the baked-in vk tree root
|
|
420
428
|
const { verificationKey, witness: verificationKeyTreeWitness } =
|
|
421
429
|
verificationKeyWitness;
|
|
@@ -445,7 +453,7 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
445
453
|
|
|
446
454
|
return new BlockProverPublicOutput({
|
|
447
455
|
...stateTo,
|
|
448
|
-
blockNumber:
|
|
456
|
+
blockNumber: publicInput.blockNumber,
|
|
449
457
|
closed: Bool(false),
|
|
450
458
|
});
|
|
451
459
|
}
|
|
@@ -475,7 +483,7 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
475
483
|
publicInput: BlockProverPublicInput,
|
|
476
484
|
networkState: NetworkState,
|
|
477
485
|
blockWitness: BlockHashMerkleTreeWitness,
|
|
478
|
-
stateTransitionProof: StateTransitionProof,
|
|
486
|
+
// stateTransitionProof: StateTransitionProof,
|
|
479
487
|
transactionProof: BlockProverProof
|
|
480
488
|
): Promise<BlockProverPublicOutput> {
|
|
481
489
|
const state: BlockProverState = {
|
|
@@ -517,24 +525,28 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
517
525
|
"TransactionProof starting incomingMessagesHash not matching"
|
|
518
526
|
);
|
|
519
527
|
|
|
528
|
+
// TODO Reintroduce ST Proofs
|
|
520
529
|
// Verify ST Proof only if STs have been emitted,
|
|
521
530
|
// otherwise we can input a dummy proof
|
|
522
|
-
const stsEmitted = stateTransitionProof.publicOutput.stateTransitionsHash
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
//
|
|
531
|
+
// const stsEmitted = stateTransitionProof.publicOutput.stateTransitionsHash
|
|
532
|
+
// .equals(0)
|
|
533
|
+
// .and(stateTransitionProof.publicOutput.protocolTransitionsHash.equals(0))
|
|
534
|
+
// .not();
|
|
535
|
+
// Provable.log("VerifyIf 1", stsEmitted);
|
|
536
|
+
// stateTransitionProof.verifyIf(Bool(false));
|
|
537
|
+
// stateTransitionProof.verifyIf(stsEmitted);
|
|
538
|
+
|
|
539
|
+
// Verify Transaction proof if it has at least 1 tx - i.e. the
|
|
540
|
+
// input and output doesn't match fully
|
|
529
541
|
// We have to compare the whole input and output because we can make no
|
|
530
542
|
// assumptions about the values, since it can be an arbitrary dummy-proof
|
|
531
543
|
const txProofOutput = transactionProof.publicOutput;
|
|
532
|
-
const
|
|
544
|
+
const isEmptyTransition = txProofOutput.equals(
|
|
533
545
|
transactionProof.publicInput,
|
|
534
|
-
txProofOutput.closed
|
|
535
|
-
txProofOutput.blockNumber
|
|
546
|
+
txProofOutput.closed
|
|
536
547
|
);
|
|
537
|
-
|
|
548
|
+
Provable.log("VerifyIf 2", isEmptyTransition.not());
|
|
549
|
+
transactionProof.verifyIf(isEmptyTransition.not());
|
|
538
550
|
|
|
539
551
|
// 2. Execute beforeBlock hooks
|
|
540
552
|
const beforeBlockResult = await this.executeBlockHooks(
|
|
@@ -543,12 +555,12 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
543
555
|
"beforeBlock"
|
|
544
556
|
);
|
|
545
557
|
|
|
546
|
-
const beforeBlockHashList = new StateTransitionReductionList(
|
|
547
|
-
|
|
548
|
-
);
|
|
549
|
-
beforeBlockResult.stateTransitions.forEach((st) => {
|
|
550
|
-
|
|
551
|
-
});
|
|
558
|
+
// const beforeBlockHashList = new StateTransitionReductionList(
|
|
559
|
+
// ProvableStateTransition
|
|
560
|
+
// );
|
|
561
|
+
// beforeBlockResult.stateTransitions.forEach((st) => {
|
|
562
|
+
// beforeBlockHashList.push(st.toProvable());
|
|
563
|
+
// });
|
|
552
564
|
|
|
553
565
|
// We are reusing protocolSTs here as beforeBlock STs
|
|
554
566
|
// TODO Not possible atm bcs we can't have a seperation between protocol/runtime state roots,
|
|
@@ -560,10 +572,10 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
560
572
|
// state.stateRoot = stateTransitionProof.publicInput.protocolStateRoot;
|
|
561
573
|
|
|
562
574
|
// TODO Only for now
|
|
563
|
-
beforeBlockHashList.commitment.assertEquals(
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
);
|
|
575
|
+
// beforeBlockHashList.commitment.assertEquals(
|
|
576
|
+
// Field(0),
|
|
577
|
+
// "beforeBlock() cannot emit state transitions yet"
|
|
578
|
+
// );
|
|
567
579
|
|
|
568
580
|
// 4. Apply TX-type BlockProof
|
|
569
581
|
transactionProof.publicInput.networkStateHash.assertEquals(
|
|
@@ -583,7 +595,7 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
583
595
|
transactionProof.publicOutput.incomingMessagesHash;
|
|
584
596
|
|
|
585
597
|
// 5. Execute afterBlock hooks
|
|
586
|
-
this.assertSTProofInput(stateTransitionProof, state.stateRoot);
|
|
598
|
+
// this.assertSTProofInput(stateTransitionProof, state.stateRoot);
|
|
587
599
|
|
|
588
600
|
const afterBlockResult = await this.executeBlockHooks(
|
|
589
601
|
state,
|
|
@@ -601,21 +613,23 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
601
613
|
state.networkStateHash = afterBlockResult.networkState.hash();
|
|
602
614
|
|
|
603
615
|
// We are reusing runtime STs here as afterBlock STs
|
|
604
|
-
stateTransitionProof.publicInput.
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
);
|
|
608
|
-
state.stateRoot = Provable.if(
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
);
|
|
616
|
+
// stateTransitionProof.publicInput.protocolTransitionsHash.assertEquals(
|
|
617
|
+
// afterBlockHashList.commitment,
|
|
618
|
+
// "STProof from-ST-hash not matching generated ST-hash from afterBlock hooks"
|
|
619
|
+
// );
|
|
620
|
+
// state.stateRoot = Provable.if(
|
|
621
|
+
// stsEmitted,
|
|
622
|
+
// stateTransitionProof.publicOutput.stateRoot,
|
|
623
|
+
// state.stateRoot
|
|
624
|
+
// );
|
|
613
625
|
|
|
614
626
|
// 6. Close block
|
|
615
627
|
|
|
616
628
|
// Calculate the new block index
|
|
617
629
|
const blockIndex = blockWitness.calculateIndex();
|
|
618
630
|
|
|
631
|
+
blockIndex.assertEquals(publicInput.blockNumber);
|
|
632
|
+
|
|
619
633
|
blockWitness
|
|
620
634
|
.calculateRoot(Field(0))
|
|
621
635
|
.assertEquals(
|
|
@@ -633,7 +647,7 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
633
647
|
|
|
634
648
|
return new BlockProverPublicOutput({
|
|
635
649
|
...state,
|
|
636
|
-
blockNumber: blockIndex,
|
|
650
|
+
blockNumber: blockIndex.add(1),
|
|
637
651
|
closed: Bool(true),
|
|
638
652
|
});
|
|
639
653
|
}
|
|
@@ -740,19 +754,25 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
740
754
|
// assert proof1.height == proof2.height
|
|
741
755
|
// }
|
|
742
756
|
|
|
743
|
-
const proof1Height = proof1.publicOutput.blockNumber;
|
|
744
757
|
const proof1Closed = proof1.publicOutput.closed;
|
|
745
|
-
const proof2Height = proof2.publicOutput.blockNumber;
|
|
746
758
|
const proof2Closed = proof2.publicOutput.closed;
|
|
747
759
|
|
|
748
|
-
const
|
|
749
|
-
.equals(
|
|
750
|
-
.and(
|
|
760
|
+
const blockNumberProgressionValid = publicInput.blockNumber
|
|
761
|
+
.equals(proof1.publicInput.blockNumber)
|
|
762
|
+
.and(
|
|
763
|
+
proof1.publicOutput.blockNumber.equals(proof2.publicInput.blockNumber)
|
|
764
|
+
);
|
|
765
|
+
|
|
766
|
+
// For tx proofs, we check that the progression starts and end with MAX
|
|
767
|
+
// in addition to that both proofs are non-closed
|
|
768
|
+
const isValidTransactionMerge = publicInput.blockNumber
|
|
769
|
+
.equals(MAX_FIELD)
|
|
770
|
+
.and(blockNumberProgressionValid)
|
|
751
771
|
.and(proof1Closed.or(proof2Closed).not());
|
|
752
772
|
|
|
753
773
|
const isValidClosedMerge = proof1Closed
|
|
754
774
|
.and(proof2Closed)
|
|
755
|
-
.and(
|
|
775
|
+
.and(blockNumberProgressionValid);
|
|
756
776
|
|
|
757
777
|
isValidTransactionMerge
|
|
758
778
|
.or(isValidClosedMerge)
|
|
@@ -765,9 +785,8 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
765
785
|
blockHashRoot: proof2.publicOutput.blockHashRoot,
|
|
766
786
|
eternalTransactionsHash: proof2.publicOutput.eternalTransactionsHash,
|
|
767
787
|
incomingMessagesHash: proof2.publicOutput.incomingMessagesHash,
|
|
768
|
-
// Provable.if(isValidClosedMerge, Bool(true), Bool(false));
|
|
769
788
|
closed: isValidClosedMerge,
|
|
770
|
-
blockNumber:
|
|
789
|
+
blockNumber: proof2.publicOutput.blockNumber,
|
|
771
790
|
});
|
|
772
791
|
}
|
|
773
792
|
|
|
@@ -782,7 +801,6 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
782
801
|
>[] {
|
|
783
802
|
const { prover, stateTransitionProver } = this;
|
|
784
803
|
const StateTransitionProofClass = stateTransitionProver.zkProgram[0].Proof;
|
|
785
|
-
const RuntimeProofClass = DynamicRuntimeProof;
|
|
786
804
|
const proveTransaction = prover.proveTransaction.bind(prover);
|
|
787
805
|
const proveBlock = prover.proveBlock.bind(prover);
|
|
788
806
|
const merge = prover.merge.bind(prover);
|
|
@@ -796,7 +814,7 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
796
814
|
proveTransaction: {
|
|
797
815
|
privateInputs: [
|
|
798
816
|
StateTransitionProofClass,
|
|
799
|
-
|
|
817
|
+
DynamicRuntimeProof,
|
|
800
818
|
BlockProverExecutionData,
|
|
801
819
|
RuntimeVerificationKeyAttestation,
|
|
802
820
|
],
|
|
@@ -822,21 +840,21 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
822
840
|
privateInputs: [
|
|
823
841
|
NetworkState,
|
|
824
842
|
BlockHashMerkleTreeWitness,
|
|
825
|
-
StateTransitionProofClass,
|
|
843
|
+
// StateTransitionProofClass,
|
|
826
844
|
SelfProof<BlockProverPublicInput, BlockProverPublicOutput>,
|
|
827
845
|
],
|
|
828
846
|
async method(
|
|
829
847
|
publicInput: BlockProverPublicInput,
|
|
830
848
|
networkState: NetworkState,
|
|
831
849
|
blockWitness: BlockHashMerkleTreeWitness,
|
|
832
|
-
stateTransitionProof: StateTransitionProof,
|
|
850
|
+
// stateTransitionProof: StateTransitionProof,
|
|
833
851
|
transactionProof: BlockProverProof
|
|
834
852
|
) {
|
|
835
853
|
return await proveBlock(
|
|
836
854
|
publicInput,
|
|
837
855
|
networkState,
|
|
838
856
|
blockWitness,
|
|
839
|
-
stateTransitionProof,
|
|
857
|
+
// stateTransitionProof,
|
|
840
858
|
transactionProof
|
|
841
859
|
);
|
|
842
860
|
},
|
|
@@ -861,6 +879,7 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
861
879
|
|
|
862
880
|
const methods = {
|
|
863
881
|
proveTransaction: program.proveTransaction,
|
|
882
|
+
proveBlock: program.proveBlock,
|
|
864
883
|
merge: program.merge,
|
|
865
884
|
};
|
|
866
885
|
|
|
@@ -868,6 +887,7 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
868
887
|
|
|
869
888
|
return [
|
|
870
889
|
{
|
|
890
|
+
name: program.name,
|
|
871
891
|
compile: program.compile.bind(program),
|
|
872
892
|
verify: program.verify.bind(program),
|
|
873
893
|
analyzeMethods: program.analyzeMethods.bind(program),
|
|
@@ -884,7 +904,10 @@ export class BlockProverProgrammable extends ZkProgrammable<
|
|
|
884
904
|
* then be merged to be committed to the base-layer contract
|
|
885
905
|
*/
|
|
886
906
|
@injectable()
|
|
887
|
-
export class BlockProver
|
|
907
|
+
export class BlockProver
|
|
908
|
+
extends ProtocolModule
|
|
909
|
+
implements BlockProvable, CompilableModule
|
|
910
|
+
{
|
|
888
911
|
public zkProgrammable: BlockProverProgrammable;
|
|
889
912
|
|
|
890
913
|
public constructor(
|
|
@@ -892,9 +915,11 @@ export class BlockProver extends ProtocolModule implements BlockProvable {
|
|
|
892
915
|
public readonly stateTransitionProver: WithZkProgrammable<
|
|
893
916
|
StateTransitionProverPublicInput,
|
|
894
917
|
StateTransitionProverPublicOutput
|
|
895
|
-
|
|
918
|
+
> &
|
|
919
|
+
StateTransitionProvable,
|
|
896
920
|
@inject("Runtime")
|
|
897
|
-
public readonly runtime: WithZkProgrammable<undefined, MethodPublicOutput
|
|
921
|
+
public readonly runtime: WithZkProgrammable<undefined, MethodPublicOutput> &
|
|
922
|
+
CompilableModule,
|
|
898
923
|
@injectAll("ProvableTransactionHook")
|
|
899
924
|
transactionHooks: ProvableTransactionHook<unknown>[],
|
|
900
925
|
@injectAll("ProvableBlockHook")
|
|
@@ -912,6 +937,17 @@ export class BlockProver extends ProtocolModule implements BlockProvable {
|
|
|
912
937
|
);
|
|
913
938
|
}
|
|
914
939
|
|
|
940
|
+
public async compile(
|
|
941
|
+
registry: CompileRegistry
|
|
942
|
+
): Promise<Record<string, CompileArtifact> | undefined> {
|
|
943
|
+
await registry.forceProverExists(async () => {
|
|
944
|
+
await this.stateTransitionProver.compile(registry);
|
|
945
|
+
await this.runtime.compile(registry);
|
|
946
|
+
});
|
|
947
|
+
|
|
948
|
+
return await this.zkProgrammable.compile(registry);
|
|
949
|
+
}
|
|
950
|
+
|
|
915
951
|
public proveTransaction(
|
|
916
952
|
publicInput: BlockProverPublicInput,
|
|
917
953
|
stateProof: StateTransitionProof,
|
|
@@ -932,14 +968,14 @@ export class BlockProver extends ProtocolModule implements BlockProvable {
|
|
|
932
968
|
publicInput: BlockProverPublicInput,
|
|
933
969
|
networkState: NetworkState,
|
|
934
970
|
blockWitness: BlockHashMerkleTreeWitness,
|
|
935
|
-
stateTransitionProof: StateTransitionProof,
|
|
971
|
+
// stateTransitionProof: StateTransitionProof,
|
|
936
972
|
transactionProof: BlockProverProof
|
|
937
973
|
): Promise<BlockProverPublicOutput> {
|
|
938
974
|
return this.zkProgrammable.proveBlock(
|
|
939
975
|
publicInput,
|
|
940
976
|
networkState,
|
|
941
977
|
blockWitness,
|
|
942
|
-
stateTransitionProof,
|
|
978
|
+
// stateTransitionProof,
|
|
943
979
|
transactionProof
|
|
944
980
|
);
|
|
945
981
|
}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import { Field, Proof, Struct } from "o1js";
|
|
2
|
-
import { WithZkProgrammable } from "@proto-kit/common";
|
|
2
|
+
import { WithZkProgrammable, CompilableModule } from "@proto-kit/common";
|
|
3
3
|
|
|
4
4
|
import { StateTransitionProvableBatch } from "../../model/StateTransitionProvableBatch";
|
|
5
5
|
|
|
6
|
-
import { StateTransitionWitnessProviderReference } from "./StateTransitionWitnessProviderReference";
|
|
7
|
-
|
|
8
6
|
export class StateTransitionProverPublicInput extends Struct({
|
|
9
7
|
stateTransitionsHash: Field,
|
|
10
8
|
protocolTransitionsHash: Field,
|
|
@@ -26,11 +24,10 @@ export type StateTransitionProof = Proof<
|
|
|
26
24
|
|
|
27
25
|
export interface StateTransitionProvable
|
|
28
26
|
extends WithZkProgrammable<
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
27
|
+
StateTransitionProverPublicInput,
|
|
28
|
+
StateTransitionProverPublicOutput
|
|
29
|
+
>,
|
|
30
|
+
CompilableModule {
|
|
34
31
|
runBatch: (
|
|
35
32
|
publicInput: StateTransitionProverPublicInput,
|
|
36
33
|
batch: StateTransitionProvableBatch
|