@proto-kit/protocol 0.1.1-develop.600 → 0.1.1-develop.833

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 (285) hide show
  1. package/LICENSE.md +201 -201
  2. package/dist/blockmodules/AccountStateModule.d.ts +37 -37
  3. package/dist/blockmodules/AccountStateModule.js +43 -43
  4. package/dist/blockmodules/BlockHeightHook.d.ts +6 -6
  5. package/dist/blockmodules/BlockHeightHook.js +15 -15
  6. package/dist/blockmodules/LastStateRootBlockHook.d.ts +7 -7
  7. package/dist/blockmodules/LastStateRootBlockHook.js +15 -15
  8. package/dist/blockmodules/NoopBlockHook.d.ts +8 -8
  9. package/dist/blockmodules/NoopBlockHook.js +9 -9
  10. package/dist/blockmodules/NoopSettlementHook.d.ts +5 -5
  11. package/dist/blockmodules/NoopSettlementHook.d.ts.map +1 -1
  12. package/dist/blockmodules/NoopSettlementHook.js +18 -18
  13. package/dist/blockmodules/NoopTransactionHook.d.ts +5 -5
  14. package/dist/blockmodules/NoopTransactionHook.js +4 -4
  15. package/dist/hooks/AccountStateHook.d.ts +19 -5
  16. package/dist/hooks/AccountStateHook.d.ts.map +1 -1
  17. package/dist/hooks/AccountStateHook.js +15 -9
  18. package/dist/hooks/BlockHeightHook.d.ts +3 -3
  19. package/dist/hooks/BlockHeightHook.d.ts.map +1 -1
  20. package/dist/hooks/BlockHeightHook.js +5 -4
  21. package/dist/hooks/LastStateRootBlockHook.d.ts +8 -0
  22. package/dist/hooks/LastStateRootBlockHook.d.ts.map +1 -0
  23. package/dist/hooks/LastStateRootBlockHook.js +15 -0
  24. package/dist/hooks/NoopBlockHook.d.ts +6 -4
  25. package/dist/hooks/NoopBlockHook.d.ts.map +1 -1
  26. package/dist/hooks/NoopBlockHook.js +4 -4
  27. package/dist/hooks/NoopSettlementHook.d.ts +6 -0
  28. package/dist/hooks/NoopSettlementHook.d.ts.map +1 -0
  29. package/dist/hooks/NoopSettlementHook.js +17 -0
  30. package/dist/hooks/NoopTransactionHook.d.ts +1 -1
  31. package/dist/hooks/NoopTransactionHook.d.ts.map +1 -1
  32. package/dist/hooks/NoopTransactionHook.js +4 -1
  33. package/dist/index.d.ts +18 -8
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +18 -8
  36. package/dist/model/MethodPublicOutput.d.ts +68 -34
  37. package/dist/model/MethodPublicOutput.d.ts.map +1 -1
  38. package/dist/model/Option.d.ts +39 -19
  39. package/dist/model/Option.d.ts.map +1 -1
  40. package/dist/model/Option.js +6 -0
  41. package/dist/model/Path.d.ts +1 -1
  42. package/dist/model/Path.d.ts.map +1 -1
  43. package/dist/model/Path.js +0 -2
  44. package/dist/model/RuntimeLike.d.ts +11 -0
  45. package/dist/model/RuntimeLike.d.ts.map +1 -0
  46. package/dist/model/RuntimeLike.js +1 -0
  47. package/dist/model/StateTransition.d.ts +51 -14
  48. package/dist/model/StateTransition.d.ts.map +1 -1
  49. package/dist/model/StateTransition.js +3 -0
  50. package/dist/model/StateTransitionProvableBatch.d.ts +71 -14
  51. package/dist/model/StateTransitionProvableBatch.d.ts.map +1 -1
  52. package/dist/model/StateTransitionReduction.d.ts +3 -0
  53. package/dist/model/StateTransitionReduction.d.ts.map +1 -0
  54. package/dist/model/StateTransitionReduction.js +26 -0
  55. package/dist/model/network/NetworkState.d.ts +73 -18
  56. package/dist/model/network/NetworkState.d.ts.map +1 -1
  57. package/dist/model/network/NetworkState.js +2 -2
  58. package/dist/model/transaction/ProtocolTransaction.d.ts +69 -69
  59. package/dist/model/transaction/ProtocolTransaction.js +18 -18
  60. package/dist/model/transaction/RuntimeTransaction.d.ts +50 -16
  61. package/dist/model/transaction/RuntimeTransaction.d.ts.map +1 -1
  62. package/dist/model/transaction/RuntimeTransaction.js +4 -4
  63. package/dist/model/transaction/SignedTransaction.d.ts +39 -3
  64. package/dist/model/transaction/SignedTransaction.d.ts.map +1 -1
  65. package/dist/model/transaction/SignedTransaction.js +1 -1
  66. package/dist/model/transaction/ValueOption.d.ts +86 -32
  67. package/dist/model/transaction/ValueOption.d.ts.map +1 -1
  68. package/dist/model/transaction/ValueOption.js +1 -1
  69. package/dist/protocol/Protocol.d.ts +14 -20
  70. package/dist/protocol/Protocol.d.ts.map +1 -1
  71. package/dist/protocol/Protocol.js +13 -27
  72. package/dist/protocol/ProtocolEnvironment.d.ts +3 -3
  73. package/dist/protocol/ProtocolEnvironment.d.ts.map +1 -1
  74. package/dist/protocol/ProtocolModule.d.ts +1 -0
  75. package/dist/protocol/ProtocolModule.d.ts.map +1 -1
  76. package/dist/protocol/ProtocolModule.js +4 -2
  77. package/dist/protocol/ProvableBlockHook.d.ts +2 -2
  78. package/dist/protocol/ProvableBlockHook.d.ts.map +1 -1
  79. package/dist/protocol/ProvableTransactionHook.d.ts +1 -1
  80. package/dist/protocol/ProvableTransactionHook.d.ts.map +1 -1
  81. package/dist/prover/block/BlockProvable.d.ts +240 -98
  82. package/dist/prover/block/BlockProvable.d.ts.map +1 -1
  83. package/dist/prover/block/BlockProver.d.ts +8 -8
  84. package/dist/prover/block/BlockProver.d.ts.map +1 -1
  85. package/dist/prover/block/BlockProver.js +55 -45
  86. package/dist/prover/block/BlockTransactionPosition.d.ts +35 -35
  87. package/dist/prover/block/BlockTransactionPosition.js +25 -25
  88. package/dist/prover/block/BundleTransactionPosition.d.ts +36 -0
  89. package/dist/prover/block/BundleTransactionPosition.d.ts.map +1 -0
  90. package/dist/prover/block/BundleTransactionPosition.js +25 -0
  91. package/dist/prover/block/SplitPrefilledStateService.d.ts +11 -0
  92. package/dist/prover/block/SplitPrefilledStateService.d.ts.map +1 -0
  93. package/dist/prover/block/SplitPrefilledStateService.js +1 -0
  94. package/dist/prover/block/SplitStateService.d.ts +11 -0
  95. package/dist/prover/block/SplitStateService.d.ts.map +1 -0
  96. package/dist/prover/block/SplitStateService.js +1 -0
  97. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts +35 -16
  98. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts.map +1 -1
  99. package/dist/prover/block/accummulators/BlockHashMerkleTree.js +1 -1
  100. package/dist/prover/block/acummulators/BlockHashMerkleTree.d.ts +45 -0
  101. package/dist/prover/block/acummulators/BlockHashMerkleTree.d.ts.map +1 -0
  102. package/dist/prover/block/acummulators/BlockHashMerkleTree.js +16 -0
  103. package/dist/prover/statetransition/StateTransitionProvable.d.ts +116 -58
  104. package/dist/prover/statetransition/StateTransitionProvable.d.ts.map +1 -1
  105. package/dist/prover/statetransition/StateTransitionProver.d.ts +10 -9
  106. package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -1
  107. package/dist/prover/statetransition/StateTransitionProver.js +18 -22
  108. package/dist/prover/statetransition/StateTransitionWitnessProvider.js +1 -2
  109. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.js +1 -2
  110. package/dist/settlement/ContractModule.d.ts +15 -0
  111. package/dist/settlement/ContractModule.d.ts.map +1 -0
  112. package/dist/settlement/ContractModule.js +11 -0
  113. package/dist/settlement/DispatchContract.d.ts +20 -0
  114. package/dist/settlement/DispatchContract.d.ts.map +1 -0
  115. package/dist/settlement/DispatchContract.js +112 -0
  116. package/dist/settlement/OutgoingMessageArgument.d.ts +109 -0
  117. package/dist/settlement/OutgoingMessageArgument.d.ts.map +1 -0
  118. package/dist/settlement/OutgoingMessageArgument.js +32 -0
  119. package/dist/settlement/ProvableSettlementHook.d.ts +25 -25
  120. package/dist/settlement/ProvableSettlementHook.js +3 -3
  121. package/dist/settlement/SettlementContract.d.ts +229 -229
  122. package/dist/settlement/SettlementContract.js +346 -346
  123. package/dist/settlement/SettlementContractModule.d.ts +40 -0
  124. package/dist/settlement/SettlementContractModule.d.ts.map +1 -0
  125. package/dist/settlement/SettlementContractModule.js +71 -0
  126. package/dist/settlement/contracts/DispatchContract.d.ts +21 -0
  127. package/dist/settlement/contracts/DispatchContract.d.ts.map +1 -0
  128. package/dist/settlement/contracts/DispatchContract.js +111 -0
  129. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts +12 -0
  130. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts.map +1 -0
  131. package/dist/{hooks/TransactionFeeHook.js → settlement/contracts/DispatchContractProtocolModule.js} +17 -21
  132. package/dist/settlement/contracts/DispatchSmartContract.d.ts +22 -0
  133. package/dist/settlement/contracts/DispatchSmartContract.d.ts.map +1 -0
  134. package/dist/settlement/contracts/DispatchSmartContract.js +110 -0
  135. package/dist/settlement/contracts/SettlementContract.d.ts +19 -0
  136. package/dist/settlement/contracts/SettlementContract.d.ts.map +1 -0
  137. package/dist/settlement/contracts/SettlementContract.js +43 -0
  138. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts +19 -0
  139. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts.map +1 -0
  140. package/dist/settlement/contracts/SettlementContractProtocolModule.js +44 -0
  141. package/dist/settlement/contracts/SettlementSmartContract.d.ts +42 -0
  142. package/dist/settlement/contracts/SettlementSmartContract.d.ts.map +1 -0
  143. package/dist/settlement/contracts/SettlementSmartContract.js +246 -0
  144. package/dist/settlement/messages/Deposit.d.ts +64 -0
  145. package/dist/settlement/messages/Deposit.d.ts.map +1 -0
  146. package/dist/settlement/messages/Deposit.js +6 -0
  147. package/dist/settlement/messages/OutgoingMessageArgument.d.ts +189 -0
  148. package/dist/settlement/messages/OutgoingMessageArgument.d.ts.map +1 -0
  149. package/dist/settlement/messages/OutgoingMessageArgument.js +32 -0
  150. package/dist/settlement/messages/Withdrawal.d.ts +65 -0
  151. package/dist/settlement/messages/Withdrawal.d.ts.map +1 -0
  152. package/dist/settlement/messages/Withdrawal.js +13 -0
  153. package/dist/settlement/modularity/ProvableSettlementHook.d.ts +24 -0
  154. package/dist/settlement/modularity/ProvableSettlementHook.d.ts.map +1 -0
  155. package/dist/settlement/modularity/ProvableSettlementHook.js +3 -0
  156. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts +3 -3
  157. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts.map +1 -1
  158. package/dist/settlement/modules/NetworkStateSettlementModule.js +4 -2
  159. package/dist/state/State.d.ts +4 -3
  160. package/dist/state/State.d.ts.map +1 -1
  161. package/dist/state/State.js +18 -12
  162. package/dist/state/StateMap.d.ts +3 -3
  163. package/dist/state/StateMap.d.ts.map +1 -1
  164. package/dist/state/StateMap.js +4 -5
  165. package/dist/state/StateService.d.ts +3 -3
  166. package/dist/state/StateService.d.ts.map +1 -1
  167. package/dist/state/StateServiceProvider.d.ts +3 -3
  168. package/dist/state/StateServiceProvider.d.ts.map +1 -1
  169. package/dist/state/StateServiceProvider.js +1 -3
  170. package/dist/state/assert/assert.d.ts +1 -1
  171. package/dist/state/assert/assert.d.ts.map +1 -1
  172. package/dist/state/assert/assert.js +11 -5
  173. package/dist/state/context/ProtocolMethodExecutionContext.d.ts +1 -1
  174. package/dist/state/context/ProtocolMethodExecutionContext.d.ts.map +1 -1
  175. package/dist/state/context/ProtocolMethodExecutionContext.js +1 -1
  176. package/dist/state/context/RuntimeMethodExecutionContext.d.ts +55 -4
  177. package/dist/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -1
  178. package/dist/state/context/RuntimeMethodExecutionContext.js +6 -6
  179. package/dist/state/context/TransitionMethodExecutionContext.d.ts.map +1 -1
  180. package/dist/state/context/TransitionMethodExecutionContext.js +0 -1
  181. package/dist/state/context/contextExecution.d.ts +14 -0
  182. package/dist/state/context/contextExecution.d.ts.map +1 -0
  183. package/dist/state/context/contextExecution.js +30 -0
  184. package/dist/state/protocol/ProtocolState.d.ts.map +1 -1
  185. package/dist/state/protocol/ProtocolState.js +0 -3
  186. package/dist/utils/AppliedBatchHashList.d.ts +17 -0
  187. package/dist/utils/AppliedBatchHashList.d.ts.map +1 -0
  188. package/dist/utils/AppliedBatchHashList.js +24 -0
  189. package/dist/utils/MinaPrefixedProvableHashList.d.ts +2 -2
  190. package/dist/utils/MinaPrefixedProvableHashList.d.ts.map +1 -1
  191. package/dist/utils/MinaPrefixedProvableHashList.js +1 -0
  192. package/dist/utils/PrefixedProvableHashList.d.ts +2 -2
  193. package/dist/utils/PrefixedProvableHashList.d.ts.map +1 -1
  194. package/dist/utils/ProvableHashList.d.ts +4 -4
  195. package/dist/utils/ProvableHashList.d.ts.map +1 -1
  196. package/dist/utils/ProvableReductionHashList.d.ts +14 -0
  197. package/dist/utils/ProvableReductionHashList.d.ts.map +1 -0
  198. package/dist/utils/ProvableReductionHashList.js +50 -0
  199. package/dist/utils/StateTransitionReductionList.d.ts +11 -0
  200. package/dist/utils/StateTransitionReductionList.d.ts.map +1 -0
  201. package/dist/utils/StateTransitionReductionList.js +60 -0
  202. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts +11 -0
  203. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts.map +1 -0
  204. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.js +12 -0
  205. package/dist/utils/merkletree/MerkleTreeStore.d.ts +5 -0
  206. package/dist/utils/merkletree/MerkleTreeStore.d.ts.map +1 -0
  207. package/dist/utils/merkletree/MerkleTreeStore.js +1 -0
  208. package/dist/utils/merkletree/RollupMerkleTree.d.ts +133 -0
  209. package/dist/utils/merkletree/RollupMerkleTree.d.ts.map +1 -0
  210. package/dist/utils/merkletree/RollupMerkleTree.js +255 -0
  211. package/dist/utils/utils.d.ts +1 -1
  212. package/dist/utils/utils.d.ts.map +1 -1
  213. package/dist/utils/utils.js +5 -10
  214. package/package.json +5 -5
  215. package/src/{blockmodules/AccountStateModule.ts → hooks/AccountStateHook.ts} +13 -9
  216. package/src/{blockmodules → hooks}/BlockHeightHook.ts +3 -4
  217. package/src/{blockmodules → hooks}/LastStateRootBlockHook.ts +4 -4
  218. package/src/{blockmodules → hooks}/NoopBlockHook.ts +6 -5
  219. package/src/{blockmodules → hooks}/NoopSettlementHook.ts +3 -4
  220. package/src/{blockmodules → hooks}/NoopTransactionHook.ts +5 -1
  221. package/src/index.ts +18 -8
  222. package/src/model/MethodPublicOutput.ts +2 -2
  223. package/src/model/Option.ts +21 -1
  224. package/src/model/Path.ts +1 -3
  225. package/src/model/RuntimeLike.ts +12 -0
  226. package/src/model/StateTransition.ts +9 -1
  227. package/src/model/Transaction.ts +2 -0
  228. package/src/model/network/NetworkState.ts +2 -2
  229. package/src/model/transaction/RuntimeTransaction.ts +5 -12
  230. package/src/model/transaction/SignedTransaction.ts +1 -8
  231. package/src/model/transaction/ValueOption.ts +1 -1
  232. package/src/protocol/Protocol.ts +34 -48
  233. package/src/protocol/ProtocolEnvironment.ts +7 -6
  234. package/src/protocol/ProtocolModule.ts +8 -4
  235. package/src/protocol/ProvableBlockHook.ts +3 -3
  236. package/src/protocol/ProvableTransactionHook.ts +4 -2
  237. package/src/protocol/TransitioningProtocolModule.ts +1 -1
  238. package/src/prover/block/BlockProvable.ts +3 -3
  239. package/src/prover/block/BlockProver.ts +98 -63
  240. package/src/prover/block/accummulators/BlockHashMerkleTree.ts +2 -2
  241. package/src/prover/statetransition/StateTransitionProvable.ts +3 -3
  242. package/src/prover/statetransition/StateTransitionProver.ts +26 -28
  243. package/src/settlement/ContractModule.ts +24 -0
  244. package/src/settlement/SettlementContractModule.ts +132 -0
  245. package/src/settlement/contracts/DispatchContractProtocolModule.ts +39 -0
  246. package/src/settlement/contracts/DispatchSmartContract.ts +136 -0
  247. package/src/settlement/contracts/SettlementContractProtocolModule.ts +67 -0
  248. package/src/settlement/contracts/SettlementSmartContract.ts +350 -0
  249. package/src/settlement/messages/Deposit.ts +6 -0
  250. package/src/settlement/messages/OutgoingMessageArgument.ts +42 -0
  251. package/src/settlement/messages/Withdrawal.ts +14 -0
  252. package/src/settlement/{ProvableSettlementHook.ts → modularity/ProvableSettlementHook.ts} +9 -13
  253. package/src/settlement/modules/NetworkStateSettlementModule.ts +8 -5
  254. package/src/state/State.ts +21 -13
  255. package/src/state/StateMap.ts +4 -5
  256. package/src/state/StateService.ts +3 -3
  257. package/src/state/StateServiceProvider.ts +6 -7
  258. package/src/state/assert/assert.ts +13 -7
  259. package/src/state/context/RuntimeMethodExecutionContext.ts +13 -7
  260. package/src/state/context/TransitionMethodExecutionContext.ts +0 -1
  261. package/src/state/protocol/ProtocolState.ts +1 -4
  262. package/src/utils/MinaPrefixedProvableHashList.ts +4 -3
  263. package/src/utils/PrefixedProvableHashList.ts +2 -2
  264. package/src/utils/ProvableHashList.ts +2 -2
  265. package/src/utils/ProvableReductionHashList.ts +68 -0
  266. package/src/utils/StateTransitionReductionList.ts +89 -0
  267. package/src/utils/utils.ts +4 -9
  268. package/test/BlockProver.test.ts +110 -128
  269. package/test/Protocol.test.ts +14 -21
  270. package/test/State.test.ts +8 -8
  271. package/test/StateTransition.test.ts +56 -66
  272. package/test/TestingProtocol.ts +48 -0
  273. package/test/model/Option.test.ts +72 -0
  274. package/{src → test}/state/assert/assert.test.ts +4 -4
  275. package/test/tsconfig.json +7 -0
  276. package/test/utils/ProvableReductionHashList.test.ts +117 -0
  277. package/test/utils.test.ts +0 -3
  278. package/dist/hooks/TransactionFeeHook.d.ts +0 -16
  279. package/dist/hooks/TransactionFeeHook.d.ts.map +0 -1
  280. package/src/blockmodules/SequenceStateTransactionModule.ts +0 -25
  281. package/src/model/Option.test.ts +0 -21
  282. package/src/settlement/SettlementContract.ts +0 -444
  283. package/src/state/context/ProtocolMethodExecutionContext.ts +0 -36
  284. package/test/Option.test.ts +0 -64
  285. package/tsconfig.test.json +0 -9
@@ -1,16 +1,15 @@
1
- /* eslint-disable max-lines */
2
1
  import {
3
2
  Bool,
4
- Experimental,
5
- Field, Poseidon,
3
+ Field,
4
+ Poseidon,
6
5
  type Proof,
7
6
  Provable,
8
- SelfProof
7
+ SelfProof,
8
+ ZkProgram,
9
9
  } from "o1js";
10
10
  import { container, inject, injectable, injectAll } from "tsyringe";
11
11
  import {
12
12
  AreProofsEnabled,
13
- hashWithPrefix,
14
13
  PlainZkProgram,
15
14
  provableMethod,
16
15
  WithZkProgrammable,
@@ -35,7 +34,11 @@ import { RuntimeMethodExecutionContext } from "../../state/context/RuntimeMethod
35
34
  import { ProvableBlockHook } from "../../protocol/ProvableBlockHook";
36
35
  import { NetworkState } from "../../model/network/NetworkState";
37
36
  import { SignedTransaction } from "../../model/transaction/SignedTransaction";
38
- import { MinaActions, MinaActionsHashList } from "../../utils/MinaPrefixedProvableHashList";
37
+ import {
38
+ MinaActions,
39
+ MinaActionsHashList,
40
+ } from "../../utils/MinaPrefixedProvableHashList";
41
+ import { StateTransitionReductionList } from "../../utils/StateTransitionReductionList";
39
42
 
40
43
  import {
41
44
  BlockProvable,
@@ -118,7 +121,6 @@ export class BlockProverProgrammable extends ZkProgrammable<
118
121
  BlockProverPublicOutput
119
122
  > {
120
123
  public constructor(
121
- // eslint-disable-next-line @typescript-eslint/no-use-before-define
122
124
  private readonly prover: BlockProver,
123
125
  public readonly stateTransitionProver: ZkProgrammable<
124
126
  StateTransitionProverPublicInput,
@@ -145,7 +147,7 @@ export class BlockProverProgrammable extends ZkProgrammable<
145
147
  * @param executionData
146
148
  * @returns The new BlockProver-state to be used as public output
147
149
  */
148
- public applyTransaction(
150
+ public async applyTransaction(
149
151
  state: BlockProverState,
150
152
  stateTransitionProof: Proof<
151
153
  StateTransitionProverPublicInput,
@@ -153,10 +155,10 @@ export class BlockProverProgrammable extends ZkProgrammable<
153
155
  >,
154
156
  runtimeProof: RuntimeProof,
155
157
  executionData: BlockProverExecutionData
156
- ): BlockProverState {
158
+ ): Promise<BlockProverState> {
157
159
  const { transaction, networkState, signature } = executionData;
158
160
 
159
- const isMessage = runtimeProof.publicOutput.isMessage;
161
+ const { isMessage } = runtimeProof.publicOutput;
160
162
 
161
163
  runtimeProof.verify();
162
164
  stateTransitionProof.verify();
@@ -189,7 +191,7 @@ export class BlockProverProgrammable extends ZkProgrammable<
189
191
  );
190
192
 
191
193
  // Apply protocol state transitions
192
- this.assertProtocolTransitions(
194
+ await this.assertProtocolTransitions(
193
195
  stateTransitionProof,
194
196
  executionData,
195
197
  runtimeProof
@@ -235,10 +237,10 @@ export class BlockProverProgrammable extends ZkProgrammable<
235
237
  return stateTo;
236
238
  }
237
239
 
238
- // eslint-disable-next-line no-warning-comments, max-len
240
+ // eslint-disable-next-line max-len
239
241
  // TODO How does this interact with the RuntimeMethodExecutionContext when executing runtimemethods?
240
242
 
241
- public assertProtocolTransitions(
243
+ public async assertProtocolTransitions(
242
244
  stateTransitionProof: Proof<
243
245
  StateTransitionProverPublicInput,
244
246
  StateTransitionProverPublicOutput
@@ -259,9 +261,10 @@ export class BlockProverProgrammable extends ZkProgrammable<
259
261
  });
260
262
  executionContext.beforeMethod("", "", []);
261
263
 
262
- this.transactionHooks.forEach((module) => {
263
- module.onTransaction(executionData);
264
- });
264
+ for (const module of this.transactionHooks) {
265
+ // eslint-disable-next-line no-await-in-loop
266
+ await module.onTransaction(executionData);
267
+ }
265
268
 
266
269
  executionContext.afterMethod();
267
270
 
@@ -274,7 +277,7 @@ export class BlockProverProgrammable extends ZkProgrammable<
274
277
  transition.toProvable()
275
278
  );
276
279
 
277
- const hashList = new DefaultProvableHashList(
280
+ const hashList = new StateTransitionReductionList(
278
281
  ProvableStateTransition,
279
282
  stateTransitionProof.publicInput.protocolTransitionsHash
280
283
  );
@@ -289,38 +292,38 @@ export class BlockProverProgrammable extends ZkProgrammable<
289
292
  );
290
293
  }
291
294
 
292
- private executeBlockHooks(
295
+ private async executeBlockHooks(
293
296
  state: BlockProverState,
294
297
  inputNetworkState: NetworkState,
295
298
  type: "afterBlock" | "beforeBlock"
296
- ): {
299
+ ): Promise<{
297
300
  networkState: NetworkState;
298
301
  stateTransitions: StateTransition<unknown>[];
299
- } {
302
+ }> {
300
303
  const executionContext = container.resolve(RuntimeMethodExecutionContext);
301
304
  executionContext.clear();
302
305
  executionContext.beforeMethod("", "", []);
303
306
 
304
- const resultingNetworkState = this.blockHooks.reduce<NetworkState>(
305
- (networkState, blockHook) => {
306
- // Setup context for potential calls to runtime methods.
307
- // With the special case that we set the new networkstate for every hook
308
- // We also have to put in a dummy transaction for network.transaction
309
- executionContext.setup({
310
- transaction: RuntimeTransaction.dummyTransaction(),
311
- networkState,
312
- });
313
-
314
- if (type === "beforeBlock") {
315
- return blockHook.beforeBlock(networkState, state);
316
- } else if (type === "afterBlock") {
317
- return blockHook.afterBlock(networkState, state);
318
- } else {
319
- throw new Error("Unreachable");
320
- }
321
- },
322
- inputNetworkState
323
- );
307
+ const resultingNetworkState = await this.blockHooks.reduce<
308
+ Promise<NetworkState>
309
+ >(async (networkStatePromise, blockHook) => {
310
+ const networkState = await networkStatePromise;
311
+ // Setup context for potential calls to runtime methods.
312
+ // With the special case that we set the new networkstate for every hook
313
+ // We also have to put in a dummy transaction for network.transaction
314
+ executionContext.setup({
315
+ transaction: RuntimeTransaction.dummyTransaction(),
316
+ networkState,
317
+ });
318
+
319
+ if (type === "beforeBlock") {
320
+ return await blockHook.beforeBlock(networkState, state);
321
+ }
322
+ if (type === "afterBlock") {
323
+ return await blockHook.afterBlock(networkState, state);
324
+ }
325
+ throw new Error("Unreachable");
326
+ }, Promise.resolve(inputNetworkState));
324
327
 
325
328
  executionContext.afterMethod();
326
329
 
@@ -356,7 +359,6 @@ export class BlockProverProgrammable extends ZkProgrammable<
356
359
  stateTo.transactionsHash = transactionList.commitment;
357
360
 
358
361
  // Append tx to eternal transaction list
359
- // eslint-disable-next-line no-warning-comments
360
362
  // TODO Change that to the a sequence-state compatible transaction struct
361
363
  const eternalTransactionList = new DefaultProvableHashList(
362
364
  Field,
@@ -369,7 +371,9 @@ export class BlockProverProgrammable extends ZkProgrammable<
369
371
  // Append tx to incomingMessagesHash
370
372
  const actionHash = MinaActions.actionHash(transaction.hashData());
371
373
 
372
- const incomingMessagesList = new MinaActionsHashList(state.incomingMessagesHash);
374
+ const incomingMessagesList = new MinaActionsHashList(
375
+ state.incomingMessagesHash
376
+ );
373
377
  incomingMessagesList.pushIf(actionHash, isMessage);
374
378
 
375
379
  stateTo.incomingMessagesHash = incomingMessagesList.commitment;
@@ -378,12 +382,12 @@ export class BlockProverProgrammable extends ZkProgrammable<
378
382
  }
379
383
 
380
384
  @provableMethod()
381
- public proveTransaction(
385
+ public async proveTransaction(
382
386
  publicInput: BlockProverPublicInput,
383
387
  stateProof: StateTransitionProof,
384
388
  runtimeProof: RuntimeProof,
385
389
  executionData: BlockProverExecutionData
386
- ): BlockProverPublicOutput {
390
+ ): Promise<BlockProverPublicOutput> {
387
391
  const state: BlockProverState = {
388
392
  ...publicInput,
389
393
  };
@@ -399,7 +403,7 @@ export class BlockProverProgrammable extends ZkProgrammable<
399
403
  executionData.transaction
400
404
  );
401
405
 
402
- const stateTo = this.applyTransaction(
406
+ const stateTo = await this.applyTransaction(
403
407
  bundleInclusionState,
404
408
  stateProof,
405
409
  runtimeProof,
@@ -434,13 +438,13 @@ export class BlockProverProgrammable extends ZkProgrammable<
434
438
  }
435
439
 
436
440
  @provableMethod()
437
- public proveBlock(
441
+ public async proveBlock(
438
442
  publicInput: BlockProverPublicInput,
439
443
  networkState: NetworkState,
440
444
  blockWitness: BlockHashMerkleTreeWitness,
441
445
  stateTransitionProof: StateTransitionProof,
442
446
  transactionProof: BlockProverProof
443
- ): BlockProverPublicOutput {
447
+ ): Promise<BlockProverPublicOutput> {
444
448
  const state: BlockProverState = {
445
449
  ...publicInput,
446
450
  };
@@ -500,13 +504,13 @@ export class BlockProverProgrammable extends ZkProgrammable<
500
504
  transactionProof.verifyIf(verifyTransactionProof);
501
505
 
502
506
  // 2. Execute beforeBlock hooks
503
- const beforeBlockResult = this.executeBlockHooks(
507
+ const beforeBlockResult = await this.executeBlockHooks(
504
508
  state,
505
509
  networkState,
506
510
  "beforeBlock"
507
511
  );
508
512
 
509
- const beforeBlockHashList = new DefaultProvableHashList(
513
+ const beforeBlockHashList = new StateTransitionReductionList(
510
514
  ProvableStateTransition
511
515
  );
512
516
  beforeBlockResult.stateTransitions.forEach((st) => {
@@ -548,13 +552,13 @@ export class BlockProverProgrammable extends ZkProgrammable<
548
552
  // 5. Execute afterBlock hooks
549
553
  this.assertSTProofInput(stateTransitionProof, state.stateRoot);
550
554
 
551
- const afterBlockResult = this.executeBlockHooks(
555
+ const afterBlockResult = await this.executeBlockHooks(
552
556
  state,
553
557
  beforeBlockResult.networkState,
554
558
  "afterBlock"
555
559
  );
556
560
 
557
- const afterBlockHashList = new DefaultProvableHashList(
561
+ const afterBlockHashList = new StateTransitionReductionList(
558
562
  ProvableStateTransition
559
563
  );
560
564
  afterBlockResult.stateTransitions.forEach((st) => {
@@ -568,7 +572,11 @@ export class BlockProverProgrammable extends ZkProgrammable<
568
572
  afterBlockHashList.commitment,
569
573
  "STProof from-ST-hash not matching generated ST-hash from afterBlock hooks"
570
574
  );
571
- state.stateRoot = stateTransitionProof.publicInput.stateRoot;
575
+ state.stateRoot = Provable.if(
576
+ stsEmitted,
577
+ stateTransitionProof.publicOutput.stateRoot,
578
+ state.stateRoot
579
+ );
572
580
 
573
581
  // 6. Close block
574
582
 
@@ -598,11 +606,11 @@ export class BlockProverProgrammable extends ZkProgrammable<
598
606
  }
599
607
 
600
608
  @provableMethod()
601
- public merge(
609
+ public async merge(
602
610
  publicInput: BlockProverPublicInput,
603
611
  proof1: BlockProverProof,
604
612
  proof2: BlockProverProof
605
- ): BlockProverPublicOutput {
613
+ ): Promise<BlockProverPublicOutput> {
606
614
  proof1.verify();
607
615
  proof2.verify();
608
616
 
@@ -744,9 +752,11 @@ export class BlockProverProgrammable extends ZkProgrammable<
744
752
  const RuntimeProofClass = runtime.zkProgram.Proof;
745
753
 
746
754
  const proveTransaction = prover.proveTransaction.bind(prover);
755
+ const proveBlock = prover.proveBlock.bind(prover);
747
756
  const merge = prover.merge.bind(prover);
748
757
 
749
- const program = Experimental.ZkProgram({
758
+ const program = ZkProgram({
759
+ name: "BlockProver",
750
760
  publicInput: BlockProverPublicInput,
751
761
  publicOutput: BlockProverPublicOutput,
752
762
 
@@ -758,13 +768,13 @@ export class BlockProverProgrammable extends ZkProgrammable<
758
768
  BlockProverExecutionData,
759
769
  ],
760
770
 
761
- method(
771
+ async method(
762
772
  publicInput: BlockProverPublicInput,
763
773
  stateProof: StateTransitionProof,
764
774
  appProof: Proof<void, MethodPublicOutput>,
765
775
  executionData: BlockProverExecutionData
766
776
  ) {
767
- return proveTransaction(
777
+ return await proveTransaction(
768
778
  publicInput,
769
779
  stateProof,
770
780
  appProof,
@@ -773,18 +783,42 @@ export class BlockProverProgrammable extends ZkProgrammable<
773
783
  },
774
784
  },
775
785
 
786
+ proveBlock: {
787
+ privateInputs: [
788
+ NetworkState,
789
+ BlockHashMerkleTreeWitness,
790
+ StateTransitionProofClass,
791
+ SelfProof<BlockProverPublicInput, BlockProverPublicOutput>,
792
+ ],
793
+ async method(
794
+ publicInput: BlockProverPublicInput,
795
+ networkState: NetworkState,
796
+ blockWitness: BlockHashMerkleTreeWitness,
797
+ stateTransitionProof: StateTransitionProof,
798
+ transactionProof: BlockProverProof
799
+ ) {
800
+ return await proveBlock(
801
+ publicInput,
802
+ networkState,
803
+ blockWitness,
804
+ stateTransitionProof,
805
+ transactionProof
806
+ );
807
+ },
808
+ },
809
+
776
810
  merge: {
777
811
  privateInputs: [
778
812
  SelfProof<BlockProverPublicInput, BlockProverPublicOutput>,
779
813
  SelfProof<BlockProverPublicInput, BlockProverPublicOutput>,
780
814
  ],
781
815
 
782
- method(
816
+ async method(
783
817
  publicInput: BlockProverPublicInput,
784
818
  proof1: BlockProverProof,
785
819
  proof2: BlockProverProof
786
820
  ) {
787
- return merge(publicInput, proof1, proof2);
821
+ return await merge(publicInput, proof1, proof2);
788
822
  },
789
823
  },
790
824
  },
@@ -795,11 +829,12 @@ export class BlockProverProgrammable extends ZkProgrammable<
795
829
  merge: program.merge,
796
830
  };
797
831
 
798
- const SelfProofClass = Experimental.ZkProgram.Proof(program);
832
+ const SelfProofClass = ZkProgram.Proof(program);
799
833
 
800
834
  return {
801
835
  compile: program.compile.bind(program),
802
836
  verify: program.verify.bind(program),
837
+ analyzeMethods: program.analyzeMethods.bind(program),
803
838
  Proof: SelfProofClass,
804
839
  methods,
805
840
  };
@@ -843,7 +878,7 @@ export class BlockProver extends ProtocolModule implements BlockProvable {
843
878
  stateProof: StateTransitionProof,
844
879
  appProof: Proof<void, MethodPublicOutput>,
845
880
  executionData: BlockProverExecutionData
846
- ): BlockProverPublicOutput {
881
+ ): Promise<BlockProverPublicOutput> {
847
882
  return this.zkProgrammable.proveTransaction(
848
883
  publicInput,
849
884
  stateProof,
@@ -858,7 +893,7 @@ export class BlockProver extends ProtocolModule implements BlockProvable {
858
893
  blockWitness: BlockHashMerkleTreeWitness,
859
894
  stateTransitionProof: StateTransitionProof,
860
895
  transactionProof: BlockProverProof
861
- ): BlockProverPublicOutput {
896
+ ): Promise<BlockProverPublicOutput> {
862
897
  return this.zkProgrammable.proveBlock(
863
898
  publicInput,
864
899
  networkState,
@@ -872,7 +907,7 @@ export class BlockProver extends ProtocolModule implements BlockProvable {
872
907
  publicInput: BlockProverPublicInput,
873
908
  proof1: BlockProverProof,
874
909
  proof2: BlockProverProof
875
- ): BlockProverPublicOutput {
910
+ ): Promise<BlockProverPublicOutput> {
876
911
  return this.zkProgrammable.merge(publicInput, proof1, proof2);
877
912
  }
878
913
  }
@@ -1,7 +1,7 @@
1
1
  import { createMerkleTree } from "@proto-kit/common";
2
- import { Bool, Field, Poseidon, Provable, Struct } from "o1js";
2
+ import { Bool, Field, Poseidon, Struct } from "o1js";
3
3
 
4
- export class BlockHashMerkleTree extends createMerkleTree(16) {}
4
+ export class BlockHashMerkleTree extends createMerkleTree(40) {}
5
5
  export class BlockHashMerkleTreeWitness extends BlockHashMerkleTree.WITNESS {}
6
6
 
7
7
  export class BlockHashTreeEntry extends Struct({
@@ -1,5 +1,5 @@
1
1
  import { Field, Proof, Struct } from "o1js";
2
- import { WithZkProgrammable, ZkProgrammable } from "@proto-kit/common";
2
+ import { WithZkProgrammable } from "@proto-kit/common";
3
3
 
4
4
  import { StateTransitionProvableBatch } from "../../model/StateTransitionProvableBatch";
5
5
 
@@ -34,11 +34,11 @@ export interface StateTransitionProvable
34
34
  runBatch: (
35
35
  publicInput: StateTransitionProverPublicInput,
36
36
  batch: StateTransitionProvableBatch
37
- ) => StateTransitionProverPublicOutput;
37
+ ) => Promise<StateTransitionProverPublicOutput>;
38
38
 
39
39
  merge: (
40
40
  publicInput: StateTransitionProverPublicInput,
41
41
  proof1: StateTransitionProof,
42
42
  proof2: StateTransitionProof
43
- ) => StateTransitionProverPublicOutput;
43
+ ) => Promise<StateTransitionProverPublicOutput>;
44
44
  }
@@ -1,34 +1,33 @@
1
- /* eslint-disable max-lines */
2
- import { Bool, Experimental, Field, Provable, SelfProof } from "o1js";
3
- import { injectable } from "tsyringe";
4
1
  import {
5
2
  AreProofsEnabled,
6
- log,
7
3
  PlainZkProgram,
8
4
  provableMethod,
9
5
  RollupMerkleTreeWitness,
10
6
  ZkProgrammable,
11
7
  } from "@proto-kit/common";
8
+ import { Field, Provable, SelfProof, ZkProgram } from "o1js";
9
+ import { injectable } from "tsyringe";
12
10
 
13
- import {
14
- DefaultProvableHashList,
15
- ProvableHashList,
16
- } from "../../utils/ProvableHashList";
11
+ import { constants } from "../../Constants";
17
12
  import { ProvableStateTransition } from "../../model/StateTransition";
18
13
  import {
19
14
  ProvableStateTransitionType,
20
15
  StateTransitionProvableBatch,
21
16
  } from "../../model/StateTransitionProvableBatch";
22
- import { constants } from "../../Constants";
17
+ import { StateTransitionProverType } from "../../protocol/Protocol";
23
18
  import { ProtocolModule } from "../../protocol/ProtocolModule";
19
+ import {
20
+ DefaultProvableHashList,
21
+ ProvableHashList,
22
+ } from "../../utils/ProvableHashList";
24
23
 
25
- import { StateTransitionWitnessProvider } from "./StateTransitionWitnessProvider";
26
24
  import {
25
+ StateTransitionProof,
27
26
  StateTransitionProvable,
28
27
  StateTransitionProverPublicInput,
29
- StateTransitionProof,
30
28
  StateTransitionProverPublicOutput,
31
29
  } from "./StateTransitionProvable";
30
+ import { StateTransitionWitnessProvider } from "./StateTransitionWitnessProvider";
32
31
  import { StateTransitionWitnessProviderReference } from "./StateTransitionWitnessProviderReference";
33
32
 
34
33
  const errors = {
@@ -65,7 +64,6 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
65
64
  StateTransitionProverPublicOutput
66
65
  > {
67
66
  public constructor(
68
- // eslint-disable-next-line @typescript-eslint/no-use-before-define
69
67
  private readonly stateTransitionProver: StateTransitionProver,
70
68
  public readonly witnessProviderReference: StateTransitionWitnessProviderReference
71
69
  ) {
@@ -80,11 +78,10 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
80
78
  StateTransitionProverPublicInput,
81
79
  StateTransitionProverPublicOutput
82
80
  > {
83
- // eslint-disable-next-line max-len
84
- // eslint-disable-next-line @typescript-eslint/no-this-alias,consistent-this,unicorn/no-this-assignment
85
81
  const instance = this;
86
82
 
87
- const program = Experimental.ZkProgram({
83
+ const program = ZkProgram({
84
+ name: "StateTransitionProver",
88
85
  publicInput: StateTransitionProverPublicInput,
89
86
  publicOutput: StateTransitionProverPublicOutput,
90
87
 
@@ -92,11 +89,11 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
92
89
  proveBatch: {
93
90
  privateInputs: [StateTransitionProvableBatch],
94
91
 
95
- method(
92
+ async method(
96
93
  publicInput: StateTransitionProverPublicInput,
97
94
  batch: StateTransitionProvableBatch
98
95
  ) {
99
- return instance.runBatch(publicInput, batch);
96
+ return await instance.runBatch(publicInput, batch);
100
97
  },
101
98
  },
102
99
 
@@ -106,12 +103,12 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
106
103
  StateTransitionSelfProofClass,
107
104
  ],
108
105
 
109
- method(
106
+ async method(
110
107
  publicInput: StateTransitionProverPublicInput,
111
108
  proof1: StateTransitionProof,
112
109
  proof2: StateTransitionProof
113
110
  ) {
114
- return instance.merge(publicInput, proof1, proof2);
111
+ return await instance.merge(publicInput, proof1, proof2);
115
112
  },
116
113
  },
117
114
  },
@@ -122,11 +119,12 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
122
119
  merge: program.merge.bind(program),
123
120
  };
124
121
 
125
- const SelfProofClass = Experimental.ZkProgram.Proof(program);
122
+ const SelfProofClass = ZkProgram.Proof(program);
126
123
 
127
124
  return {
128
125
  compile: program.compile.bind(program),
129
126
  verify: program.verify.bind(program),
127
+ analyzeMethods: program.analyzeMethods.bind(program),
130
128
  Proof: SelfProofClass,
131
129
  methods,
132
130
  };
@@ -240,10 +238,10 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
240
238
  * Applies a whole batch of StateTransitions at once
241
239
  */
242
240
  @provableMethod()
243
- public runBatch(
241
+ public async runBatch(
244
242
  publicInput: StateTransitionProverPublicInput,
245
243
  batch: StateTransitionProvableBatch
246
- ): StateTransitionProverPublicOutput {
244
+ ): Promise<StateTransitionProverPublicOutput> {
247
245
  const result = this.applyTransitions(
248
246
  publicInput.stateRoot,
249
247
  publicInput.protocolStateRoot,
@@ -261,11 +259,11 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
261
259
  }
262
260
 
263
261
  @provableMethod()
264
- public merge(
262
+ public async merge(
265
263
  publicInput: StateTransitionProverPublicInput,
266
264
  proof1: StateTransitionProof,
267
265
  proof2: StateTransitionProof
268
- ): StateTransitionProverPublicOutput {
266
+ ): Promise<StateTransitionProverPublicOutput> {
269
267
  proof1.verify();
270
268
  proof2.verify();
271
269
 
@@ -339,9 +337,9 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
339
337
  @injectable()
340
338
  export class StateTransitionProver
341
339
  extends ProtocolModule
342
- implements StateTransitionProvable
340
+ implements StateTransitionProvable, StateTransitionProverType
343
341
  {
344
- public readonly zkProgrammable: StateTransitionProverProgrammable;
342
+ public zkProgrammable: StateTransitionProverProgrammable;
345
343
 
346
344
  public constructor(
347
345
  // Injected
@@ -357,7 +355,7 @@ export class StateTransitionProver
357
355
  public runBatch(
358
356
  publicInput: StateTransitionProverPublicInput,
359
357
  batch: StateTransitionProvableBatch
360
- ): StateTransitionProverPublicOutput {
358
+ ): Promise<StateTransitionProverPublicOutput> {
361
359
  return this.zkProgrammable.runBatch(publicInput, batch);
362
360
  }
363
361
 
@@ -365,7 +363,7 @@ export class StateTransitionProver
365
363
  publicInput: StateTransitionProverPublicInput,
366
364
  proof1: StateTransitionProof,
367
365
  proof2: StateTransitionProof
368
- ): StateTransitionProverPublicOutput {
366
+ ): Promise<StateTransitionProverPublicOutput> {
369
367
  return this.zkProgrammable.merge(publicInput, proof1, proof2);
370
368
  }
371
369
  }
@@ -0,0 +1,24 @@
1
+ import { ConfigurableModule, NoConfig, TypedClass } from "@proto-kit/common";
2
+ import { SmartContract } from "o1js";
3
+
4
+ export type SmartContractClassFromInterface<Type> = typeof SmartContract &
5
+ TypedClass<Type>;
6
+
7
+ /**
8
+ * This module type is used to define a contract module that can be used to
9
+ * construct and inject smart contract instances.
10
+ * It defines a method contractFactory, whose arguments can be configured via
11
+ * the Argument generic. It returns a smart contract class that is a subclass
12
+ * of SmartContract and implements a certain interface as specified by the
13
+ * ContractType generic.
14
+ */
15
+ export abstract class ContractModule<
16
+ ContractType,
17
+ // undefined = no args
18
+ Arguments = undefined,
19
+ Config = NoConfig,
20
+ > extends ConfigurableModule<Config> {
21
+ public abstract contractFactory(
22
+ args: Arguments
23
+ ): SmartContractClassFromInterface<ContractType>;
24
+ }