@proto-kit/protocol 0.1.1-develop.1088 → 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.
Files changed (211) hide show
  1. package/dist/Constants.js +1 -0
  2. package/dist/Constants.js.map +1 -0
  3. package/dist/hooks/AccountStateHook.js +1 -0
  4. package/dist/hooks/AccountStateHook.js.map +1 -0
  5. package/dist/hooks/BlockHeightHook.js +1 -0
  6. package/dist/hooks/BlockHeightHook.js.map +1 -0
  7. package/dist/hooks/LastStateRootBlockHook.js +1 -0
  8. package/dist/hooks/LastStateRootBlockHook.js.map +1 -0
  9. package/dist/hooks/NoopBlockHook.js +1 -0
  10. package/dist/hooks/NoopBlockHook.js.map +1 -0
  11. package/dist/hooks/NoopSettlementHook.d.ts +2 -2
  12. package/dist/hooks/NoopSettlementHook.d.ts.map +1 -1
  13. package/dist/hooks/NoopSettlementHook.js +1 -0
  14. package/dist/hooks/NoopSettlementHook.js.map +1 -0
  15. package/dist/hooks/NoopTransactionHook.js +1 -0
  16. package/dist/hooks/NoopTransactionHook.js.map +1 -0
  17. package/dist/index.d.ts +6 -2
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +7 -2
  20. package/dist/index.js.map +1 -0
  21. package/dist/model/MethodPublicOutput.js +1 -0
  22. package/dist/model/MethodPublicOutput.js.map +1 -0
  23. package/dist/model/Option.js +1 -0
  24. package/dist/model/Option.js.map +1 -0
  25. package/dist/model/Path.js +1 -0
  26. package/dist/model/Path.js.map +1 -0
  27. package/dist/model/RuntimeLike.js +1 -0
  28. package/dist/model/RuntimeLike.js.map +1 -0
  29. package/dist/model/StateTransition.js +1 -0
  30. package/dist/model/StateTransition.js.map +1 -0
  31. package/dist/model/StateTransitionProvableBatch.d.ts +28 -2
  32. package/dist/model/StateTransitionProvableBatch.d.ts.map +1 -1
  33. package/dist/model/StateTransitionProvableBatch.js +9 -3
  34. package/dist/model/StateTransitionProvableBatch.js.map +1 -0
  35. package/dist/model/network/NetworkState.js +1 -0
  36. package/dist/model/network/NetworkState.js.map +1 -0
  37. package/dist/model/transaction/RuntimeTransaction.js +1 -0
  38. package/dist/model/transaction/RuntimeTransaction.js.map +1 -0
  39. package/dist/model/transaction/SignedTransaction.js +1 -0
  40. package/dist/model/transaction/SignedTransaction.js.map +1 -0
  41. package/dist/model/transaction/ValueOption.js +1 -0
  42. package/dist/model/transaction/ValueOption.js.map +1 -0
  43. package/dist/protocol/Protocol.d.ts.map +1 -1
  44. package/dist/protocol/Protocol.js +31 -6
  45. package/dist/protocol/Protocol.js.map +1 -0
  46. package/dist/protocol/ProtocolEnvironment.js +1 -0
  47. package/dist/protocol/ProtocolEnvironment.js.map +1 -0
  48. package/dist/protocol/ProtocolModule.d.ts +1 -1
  49. package/dist/protocol/ProtocolModule.d.ts.map +1 -1
  50. package/dist/protocol/ProtocolModule.js +2 -1
  51. package/dist/protocol/ProtocolModule.js.map +1 -0
  52. package/dist/protocol/ProvableBlockHook.js +1 -0
  53. package/dist/protocol/ProvableBlockHook.js.map +1 -0
  54. package/dist/protocol/ProvableTransactionHook.js +1 -0
  55. package/dist/protocol/ProvableTransactionHook.js.map +1 -0
  56. package/dist/protocol/TransitioningProtocolModule.js +1 -0
  57. package/dist/protocol/TransitioningProtocolModule.js.map +1 -0
  58. package/dist/prover/block/BlockProvable.d.ts +19 -5
  59. package/dist/prover/block/BlockProvable.d.ts.map +1 -1
  60. package/dist/prover/block/BlockProvable.js +5 -2
  61. package/dist/prover/block/BlockProvable.js.map +1 -0
  62. package/dist/prover/block/BlockProver.d.ts +11 -9
  63. package/dist/prover/block/BlockProver.d.ts.map +1 -1
  64. package/dist/prover/block/BlockProver.js +79 -41
  65. package/dist/prover/block/BlockProver.js.map +1 -0
  66. package/dist/prover/block/accummulators/BlockHashMerkleTree.js +1 -0
  67. package/dist/prover/block/accummulators/BlockHashMerkleTree.js.map +1 -0
  68. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.d.ts +2 -2
  69. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js +1 -0
  70. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js.map +1 -0
  71. package/dist/prover/block/services/RuntimeVerificationKeyRootService.js +1 -0
  72. package/dist/prover/block/services/RuntimeVerificationKeyRootService.js.map +1 -0
  73. package/dist/prover/statetransition/StateTransitionProvable.d.ts +2 -4
  74. package/dist/prover/statetransition/StateTransitionProvable.d.ts.map +1 -1
  75. package/dist/prover/statetransition/StateTransitionProvable.js +1 -0
  76. package/dist/prover/statetransition/StateTransitionProvable.js.map +1 -0
  77. package/dist/prover/statetransition/StateTransitionProver.d.ts +7 -10
  78. package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -1
  79. package/dist/prover/statetransition/StateTransitionProver.js +27 -28
  80. package/dist/prover/statetransition/StateTransitionProver.js.map +1 -0
  81. package/dist/settlement/ContractModule.d.ts +4 -3
  82. package/dist/settlement/ContractModule.d.ts.map +1 -1
  83. package/dist/settlement/ContractModule.js +2 -1
  84. package/dist/settlement/ContractModule.js.map +1 -0
  85. package/dist/settlement/SettlementContractModule.d.ts +25 -12
  86. package/dist/settlement/SettlementContractModule.d.ts.map +1 -1
  87. package/dist/settlement/SettlementContractModule.js +29 -20
  88. package/dist/settlement/SettlementContractModule.js.map +1 -0
  89. package/dist/settlement/contracts/BridgeContract.d.ts +97 -0
  90. package/dist/settlement/contracts/BridgeContract.d.ts.map +1 -0
  91. package/dist/settlement/contracts/BridgeContract.js +164 -0
  92. package/dist/settlement/contracts/BridgeContract.js.map +1 -0
  93. package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts +14 -0
  94. package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts.map +1 -0
  95. package/dist/settlement/contracts/BridgeContractProtocolModule.js +30 -0
  96. package/dist/settlement/contracts/BridgeContractProtocolModule.js.map +1 -0
  97. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts +10 -1
  98. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts.map +1 -1
  99. package/dist/settlement/contracts/DispatchContractProtocolModule.js +24 -2
  100. package/dist/settlement/contracts/DispatchContractProtocolModule.js.map +1 -0
  101. package/dist/settlement/contracts/DispatchSmartContract.d.ts +26 -4
  102. package/dist/settlement/contracts/DispatchSmartContract.d.ts.map +1 -1
  103. package/dist/settlement/contracts/DispatchSmartContract.js +139 -19
  104. package/dist/settlement/contracts/DispatchSmartContract.js.map +1 -0
  105. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts +10 -8
  106. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts.map +1 -1
  107. package/dist/settlement/contracts/SettlementContractProtocolModule.js +47 -9
  108. package/dist/settlement/contracts/SettlementContractProtocolModule.js.map +1 -0
  109. package/dist/settlement/contracts/SettlementSmartContract.d.ts +98 -17
  110. package/dist/settlement/contracts/SettlementSmartContract.d.ts.map +1 -1
  111. package/dist/settlement/contracts/SettlementSmartContract.js +147 -79
  112. package/dist/settlement/contracts/SettlementSmartContract.js.map +1 -0
  113. package/dist/settlement/contracts/TokenBridgeTree.d.ts +228 -0
  114. package/dist/settlement/contracts/TokenBridgeTree.d.ts.map +1 -0
  115. package/dist/settlement/contracts/TokenBridgeTree.js +60 -0
  116. package/dist/settlement/contracts/TokenBridgeTree.js.map +1 -0
  117. package/dist/settlement/contracts/authorizations/ContractAuthorization.d.ts +10 -0
  118. package/dist/settlement/contracts/authorizations/ContractAuthorization.d.ts.map +1 -0
  119. package/dist/settlement/contracts/authorizations/ContractAuthorization.js +2 -0
  120. package/dist/settlement/contracts/authorizations/ContractAuthorization.js.map +1 -0
  121. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.d.ts +85 -0
  122. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.d.ts.map +1 -0
  123. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.js +11 -0
  124. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.js.map +1 -0
  125. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.d.ts +79 -0
  126. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.d.ts.map +1 -0
  127. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.js +11 -0
  128. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.js.map +1 -0
  129. package/dist/settlement/messages/Deposit.d.ts +13 -0
  130. package/dist/settlement/messages/Deposit.d.ts.map +1 -1
  131. package/dist/settlement/messages/Deposit.js +3 -1
  132. package/dist/settlement/messages/Deposit.js.map +1 -0
  133. package/dist/settlement/messages/OutgoingMessageArgument.d.ts +8 -0
  134. package/dist/settlement/messages/OutgoingMessageArgument.d.ts.map +1 -1
  135. package/dist/settlement/messages/OutgoingMessageArgument.js +1 -0
  136. package/dist/settlement/messages/OutgoingMessageArgument.js.map +1 -0
  137. package/dist/settlement/messages/Withdrawal.d.ts +13 -0
  138. package/dist/settlement/messages/Withdrawal.d.ts.map +1 -1
  139. package/dist/settlement/messages/Withdrawal.js +4 -1
  140. package/dist/settlement/messages/Withdrawal.js.map +1 -0
  141. package/dist/settlement/modularity/ProvableSettlementHook.d.ts +5 -3
  142. package/dist/settlement/modularity/ProvableSettlementHook.d.ts.map +1 -1
  143. package/dist/settlement/modularity/ProvableSettlementHook.js +1 -0
  144. package/dist/settlement/modularity/ProvableSettlementHook.js.map +1 -0
  145. package/dist/settlement/modularity/types.d.ts +8 -0
  146. package/dist/settlement/modularity/types.d.ts.map +1 -0
  147. package/dist/settlement/modularity/types.js +2 -0
  148. package/dist/settlement/modularity/types.js.map +1 -0
  149. package/dist/settlement/modules/NetworkStateSettlementModule.js +1 -0
  150. package/dist/settlement/modules/NetworkStateSettlementModule.js.map +1 -0
  151. package/dist/state/State.js +1 -0
  152. package/dist/state/State.js.map +1 -0
  153. package/dist/state/StateMap.js +1 -0
  154. package/dist/state/StateMap.js.map +1 -0
  155. package/dist/state/StateService.js +1 -0
  156. package/dist/state/StateService.js.map +1 -0
  157. package/dist/state/StateServiceProvider.js +1 -0
  158. package/dist/state/StateServiceProvider.js.map +1 -0
  159. package/dist/state/assert/assert.js +1 -0
  160. package/dist/state/assert/assert.js.map +1 -0
  161. package/dist/state/context/RuntimeMethodExecutionContext.js +1 -0
  162. package/dist/state/context/RuntimeMethodExecutionContext.js.map +1 -0
  163. package/dist/state/context/TransitionMethodExecutionContext.js +1 -0
  164. package/dist/state/context/TransitionMethodExecutionContext.js.map +1 -0
  165. package/dist/state/protocol/ProtocolState.js +1 -0
  166. package/dist/state/protocol/ProtocolState.js.map +1 -0
  167. package/dist/utils/MinaPrefixedProvableHashList.js +1 -0
  168. package/dist/utils/MinaPrefixedProvableHashList.js.map +1 -0
  169. package/dist/utils/PrefixedProvableHashList.js +1 -0
  170. package/dist/utils/PrefixedProvableHashList.js.map +1 -0
  171. package/dist/utils/ProvableHashList.js +1 -0
  172. package/dist/utils/ProvableHashList.js.map +1 -0
  173. package/dist/utils/ProvableReductionHashList.js +1 -0
  174. package/dist/utils/ProvableReductionHashList.js.map +1 -0
  175. package/dist/utils/StateTransitionReductionList.js +1 -0
  176. package/dist/utils/StateTransitionReductionList.js.map +1 -0
  177. package/dist/utils/utils.js +1 -0
  178. package/dist/utils/utils.js.map +1 -0
  179. package/jest.config.cjs +12 -1
  180. package/package.json +4 -4
  181. package/src/hooks/NoopSettlementHook.ts +2 -2
  182. package/src/index.ts +6 -2
  183. package/src/model/StateTransitionProvableBatch.ts +24 -4
  184. package/src/protocol/Protocol.ts +36 -7
  185. package/src/protocol/ProtocolModule.ts +1 -1
  186. package/src/prover/block/BlockProvable.ts +9 -9
  187. package/src/prover/block/BlockProver.ts +94 -58
  188. package/src/prover/statetransition/StateTransitionProvable.ts +5 -8
  189. package/src/prover/statetransition/StateTransitionProver.ts +46 -40
  190. package/src/settlement/ContractModule.ts +17 -10
  191. package/src/settlement/SettlementContractModule.ts +54 -41
  192. package/src/settlement/contracts/BridgeContract.ts +237 -0
  193. package/src/settlement/contracts/BridgeContractProtocolModule.ts +43 -0
  194. package/src/settlement/contracts/DispatchContractProtocolModule.ts +37 -3
  195. package/src/settlement/contracts/DispatchSmartContract.ts +213 -23
  196. package/src/settlement/contracts/SettlementContractProtocolModule.ts +61 -20
  197. package/src/settlement/contracts/SettlementSmartContract.ts +261 -107
  198. package/src/settlement/contracts/TokenBridgeTree.ts +73 -0
  199. package/src/settlement/contracts/authorizations/ContractAuthorization.ts +11 -0
  200. package/src/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.ts +16 -0
  201. package/src/settlement/contracts/authorizations/UpdateMessagesHashAuth.ts +16 -0
  202. package/src/settlement/messages/Deposit.ts +2 -1
  203. package/src/settlement/messages/Withdrawal.ts +3 -1
  204. package/src/settlement/modularity/ProvableSettlementHook.ts +6 -3
  205. package/src/settlement/modularity/types.ts +22 -0
  206. package/test/BlockProver.test.ts +2 -1
  207. package/test/TestingProtocol.ts +17 -12
  208. package/test/compiling/types.ts +28 -0
  209. package/test/modularity/types.ts +35 -0
  210. package/src/prover/statetransition/StateTransitionWitnessProvider.ts +0 -23
  211. package/src/prover/statetransition/StateTransitionWitnessProviderReference.ts +0 -17
@@ -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 ProvableTransactionHook) {
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
- abstractType.name,
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
- abstractType.name,
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 appChain(): AreProofsEnabled | undefined {
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
- public get appChain(): AreProofsEnabled | undefined {
153
- return this.prover.appChain;
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: maxField(),
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
- .equals(0)
524
- .and(stateTransitionProof.publicOutput.protocolTransitionsHash.equals(0))
525
- .not();
526
- stateTransitionProof.verifyIf(stsEmitted);
527
-
528
- // Verify Transaction proof if it has at least 1 tx
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 verifyTransactionProof = txProofOutput.equals(
544
+ const isEmptyTransition = txProofOutput.equals(
533
545
  transactionProof.publicInput,
534
- txProofOutput.closed,
535
- txProofOutput.blockNumber
546
+ txProofOutput.closed
536
547
  );
537
- transactionProof.verifyIf(verifyTransactionProof);
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
- ProvableStateTransition
548
- );
549
- beforeBlockResult.stateTransitions.forEach((st) => {
550
- beforeBlockHashList.push(st.toProvable());
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
- Field(0),
565
- "beforeBlock() cannot emit state transitions yet"
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.stateTransitionsHash.assertEquals(
605
- afterBlockHashList.commitment,
606
- "STProof from-ST-hash not matching generated ST-hash from afterBlock hooks"
607
- );
608
- state.stateRoot = Provable.if(
609
- stsEmitted,
610
- stateTransitionProof.publicOutput.stateRoot,
611
- state.stateRoot
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 isValidTransactionMerge = proof1Height
749
- .equals(maxField())
750
- .and(proof2Height.equals(proof1Height))
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(proof1Height.add(1).equals(proof2Height));
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: proof2Height,
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
- RuntimeProofClass,
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 extends ProtocolModule implements BlockProvable {
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
- StateTransitionProverPublicInput,
30
- StateTransitionProverPublicOutput
31
- > {
32
- witnessProviderReference: StateTransitionWitnessProviderReference;
33
-
27
+ StateTransitionProverPublicInput,
28
+ StateTransitionProverPublicOutput
29
+ >,
30
+ CompilableModule {
34
31
  runBatch: (
35
32
  publicInput: StateTransitionProverPublicInput,
36
33
  batch: StateTransitionProvableBatch