@proto-kit/protocol 0.1.1-develop.211 → 0.1.1-develop.2137

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (479) hide show
  1. package/dist/Constants.js +1 -0
  2. package/dist/Constants.js.map +1 -0
  3. package/dist/hashing/mina-prefixes.d.ts +10 -0
  4. package/dist/hashing/mina-prefixes.d.ts.map +1 -0
  5. package/dist/hashing/mina-prefixes.js +10 -0
  6. package/dist/hashing/mina-prefixes.js.map +1 -0
  7. package/dist/hashing/protokit-prefixes.d.ts +10 -0
  8. package/dist/hashing/protokit-prefixes.d.ts.map +1 -0
  9. package/dist/hashing/protokit-prefixes.js +24 -0
  10. package/dist/hashing/protokit-prefixes.js.map +1 -0
  11. package/dist/hooks/AccountStateHook.d.ts +56 -0
  12. package/dist/hooks/AccountStateHook.d.ts.map +1 -0
  13. package/dist/hooks/AccountStateHook.js +62 -0
  14. package/dist/hooks/AccountStateHook.js.map +1 -0
  15. package/dist/hooks/BlockHeightHook.d.ts +7 -0
  16. package/dist/hooks/BlockHeightHook.d.ts.map +1 -0
  17. package/dist/hooks/BlockHeightHook.js +16 -0
  18. package/dist/hooks/BlockHeightHook.js.map +1 -0
  19. package/dist/hooks/LastStateRootBlockHook.d.ts +7 -0
  20. package/dist/hooks/LastStateRootBlockHook.d.ts.map +1 -0
  21. package/dist/hooks/LastStateRootBlockHook.js +16 -0
  22. package/dist/hooks/LastStateRootBlockHook.js.map +1 -0
  23. package/dist/hooks/NoopBlockHook.d.ts +8 -0
  24. package/dist/hooks/NoopBlockHook.d.ts.map +1 -0
  25. package/dist/hooks/NoopBlockHook.js +10 -0
  26. package/dist/hooks/NoopBlockHook.js.map +1 -0
  27. package/dist/hooks/NoopSettlementHook.d.ts +6 -0
  28. package/dist/hooks/NoopSettlementHook.d.ts.map +1 -0
  29. package/dist/{prover/statetransition/StateTransitionWitnessProvider.js → hooks/NoopSettlementHook.js} +8 -7
  30. package/dist/hooks/NoopSettlementHook.js.map +1 -0
  31. package/dist/hooks/NoopTransactionHook.d.ts +6 -0
  32. package/dist/hooks/NoopTransactionHook.d.ts.map +1 -0
  33. package/dist/hooks/NoopTransactionHook.js +11 -0
  34. package/dist/hooks/NoopTransactionHook.js.map +1 -0
  35. package/dist/index.d.ts +51 -13
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +52 -13
  38. package/dist/index.js.map +1 -0
  39. package/dist/model/AppliedStateTransitionBatch.d.ts +114 -0
  40. package/dist/model/AppliedStateTransitionBatch.d.ts.map +1 -0
  41. package/dist/model/AppliedStateTransitionBatch.js +16 -0
  42. package/dist/model/AppliedStateTransitionBatch.js.map +1 -0
  43. package/dist/model/MethodPublicOutput.d.ts +83 -28
  44. package/dist/model/MethodPublicOutput.d.ts.map +1 -1
  45. package/dist/model/MethodPublicOutput.js +4 -1
  46. package/dist/model/MethodPublicOutput.js.map +1 -0
  47. package/dist/model/Option.d.ts +66 -42
  48. package/dist/model/Option.d.ts.map +1 -1
  49. package/dist/model/Option.js +58 -45
  50. package/dist/model/Option.js.map +1 -0
  51. package/dist/model/Path.d.ts +4 -3
  52. package/dist/model/Path.d.ts.map +1 -1
  53. package/dist/model/Path.js +6 -5
  54. package/dist/model/Path.js.map +1 -0
  55. package/dist/model/RuntimeLike.d.ts +11 -0
  56. package/dist/model/RuntimeLike.d.ts.map +1 -0
  57. package/dist/model/RuntimeLike.js +2 -0
  58. package/dist/model/RuntimeLike.js.map +1 -0
  59. package/dist/model/StateTransition.d.ts +58 -18
  60. package/dist/model/StateTransition.d.ts.map +1 -1
  61. package/dist/model/StateTransition.js +13 -4
  62. package/dist/model/StateTransition.js.map +1 -0
  63. package/dist/model/StateTransitionProvableBatch.d.ts +369 -54
  64. package/dist/model/StateTransitionProvableBatch.d.ts.map +1 -1
  65. package/dist/model/StateTransitionProvableBatch.js +74 -51
  66. package/dist/model/StateTransitionProvableBatch.js.map +1 -0
  67. package/dist/model/network/NetworkState.d.ts +105 -9
  68. package/dist/model/network/NetworkState.d.ts.map +1 -1
  69. package/dist/model/network/NetworkState.js +22 -2
  70. package/dist/model/network/NetworkState.js.map +1 -0
  71. package/dist/model/transaction/AuthorizedTransaction.d.ts +122 -0
  72. package/dist/model/transaction/AuthorizedTransaction.d.ts.map +1 -0
  73. package/dist/model/transaction/AuthorizedTransaction.js +39 -0
  74. package/dist/model/transaction/AuthorizedTransaction.js.map +1 -0
  75. package/dist/model/transaction/RuntimeTransaction.d.ts +94 -34
  76. package/dist/model/transaction/RuntimeTransaction.d.ts.map +1 -1
  77. package/dist/model/transaction/RuntimeTransaction.js +72 -11
  78. package/dist/model/transaction/RuntimeTransaction.js.map +1 -0
  79. package/dist/model/transaction/SignedTransaction.d.ts +110 -0
  80. package/dist/model/transaction/SignedTransaction.d.ts.map +1 -0
  81. package/dist/model/transaction/SignedTransaction.js +34 -0
  82. package/dist/model/transaction/SignedTransaction.js.map +1 -0
  83. package/dist/model/transaction/ValueOption.d.ts +187 -0
  84. package/dist/model/transaction/ValueOption.d.ts.map +1 -0
  85. package/dist/model/transaction/ValueOption.js +25 -0
  86. package/dist/model/transaction/ValueOption.js.map +1 -0
  87. package/dist/protocol/Protocol.d.ts +45 -34
  88. package/dist/protocol/Protocol.d.ts.map +1 -1
  89. package/dist/protocol/Protocol.js +115 -57
  90. package/dist/protocol/Protocol.js.map +1 -0
  91. package/dist/protocol/ProtocolEnvironment.d.ts +9 -0
  92. package/dist/protocol/ProtocolEnvironment.d.ts.map +1 -0
  93. package/dist/protocol/ProtocolEnvironment.js +2 -0
  94. package/dist/protocol/ProtocolEnvironment.js.map +1 -0
  95. package/dist/protocol/ProtocolModule.d.ts +7 -6
  96. package/dist/protocol/ProtocolModule.d.ts.map +1 -1
  97. package/dist/protocol/ProtocolModule.js +10 -5
  98. package/dist/protocol/ProtocolModule.js.map +1 -0
  99. package/dist/protocol/ProvableBlockHook.d.ts +29 -0
  100. package/dist/protocol/ProvableBlockHook.d.ts.map +1 -0
  101. package/dist/protocol/ProvableBlockHook.js +20 -0
  102. package/dist/protocol/ProvableBlockHook.js.map +1 -0
  103. package/dist/protocol/ProvableTransactionHook.d.ts +32 -3
  104. package/dist/protocol/ProvableTransactionHook.d.ts.map +1 -1
  105. package/dist/protocol/ProvableTransactionHook.js +25 -0
  106. package/dist/protocol/ProvableTransactionHook.js.map +1 -0
  107. package/dist/protocol/TransitioningProtocolModule.d.ts +6 -1
  108. package/dist/protocol/TransitioningProtocolModule.d.ts.map +1 -1
  109. package/dist/protocol/TransitioningProtocolModule.js +6 -0
  110. package/dist/protocol/TransitioningProtocolModule.js.map +1 -0
  111. package/dist/prover/accumulators/AppliedBatchHashList.d.ts +18 -0
  112. package/dist/prover/accumulators/AppliedBatchHashList.d.ts.map +1 -0
  113. package/dist/prover/accumulators/AppliedBatchHashList.js +25 -0
  114. package/dist/prover/accumulators/AppliedBatchHashList.js.map +1 -0
  115. package/dist/prover/accumulators/BlockHashList.d.ts +263 -0
  116. package/dist/prover/accumulators/BlockHashList.d.ts.map +1 -0
  117. package/dist/prover/accumulators/BlockHashList.js +97 -0
  118. package/dist/prover/accumulators/BlockHashList.js.map +1 -0
  119. package/dist/prover/accumulators/StateTransitionReductionList.d.ts +12 -0
  120. package/dist/prover/accumulators/StateTransitionReductionList.d.ts.map +1 -0
  121. package/dist/prover/accumulators/StateTransitionReductionList.js +64 -0
  122. package/dist/prover/accumulators/StateTransitionReductionList.js.map +1 -0
  123. package/dist/prover/accumulators/TransactionHashList.d.ts +6 -0
  124. package/dist/prover/accumulators/TransactionHashList.d.ts.map +1 -0
  125. package/dist/prover/accumulators/TransactionHashList.js +8 -0
  126. package/dist/prover/accumulators/TransactionHashList.js.map +1 -0
  127. package/dist/prover/accumulators/WitnessedRootHashList.d.ts +123 -0
  128. package/dist/prover/accumulators/WitnessedRootHashList.d.ts.map +1 -0
  129. package/dist/prover/accumulators/WitnessedRootHashList.js +51 -0
  130. package/dist/prover/accumulators/WitnessedRootHashList.js.map +1 -0
  131. package/dist/prover/block/BlockProvable.d.ts +565 -96
  132. package/dist/prover/block/BlockProvable.d.ts.map +1 -1
  133. package/dist/prover/block/BlockProvable.js +196 -12
  134. package/dist/prover/block/BlockProvable.js.map +1 -0
  135. package/dist/prover/block/BlockProver.d.ts +45 -44
  136. package/dist/prover/block/BlockProver.d.ts.map +1 -1
  137. package/dist/prover/block/BlockProver.js +306 -143
  138. package/dist/prover/block/BlockProver.js.map +1 -0
  139. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts +106 -0
  140. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts.map +1 -0
  141. package/dist/prover/block/accummulators/BlockHashMerkleTree.js +25 -0
  142. package/dist/prover/block/accummulators/BlockHashMerkleTree.js.map +1 -0
  143. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.d.ts +139 -0
  144. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.d.ts.map +1 -0
  145. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js +21 -0
  146. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js.map +1 -0
  147. package/dist/prover/block/services/RuntimeVerificationKeyRootService.d.ts +7 -0
  148. package/dist/prover/block/services/RuntimeVerificationKeyRootService.d.ts.map +1 -0
  149. package/dist/prover/{statetransition/StateTransitionWitnessProviderReference.js → block/services/RuntimeVerificationKeyRootService.js} +11 -8
  150. package/dist/prover/block/services/RuntimeVerificationKeyRootService.js.map +1 -0
  151. package/dist/prover/statetransition/StateTransitionProvable.d.ts +137 -64
  152. package/dist/prover/statetransition/StateTransitionProvable.d.ts.map +1 -1
  153. package/dist/prover/statetransition/StateTransitionProvable.js +10 -7
  154. package/dist/prover/statetransition/StateTransitionProvable.js.map +1 -0
  155. package/dist/prover/statetransition/StateTransitionProver.d.ts +26 -24
  156. package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -1
  157. package/dist/prover/statetransition/StateTransitionProver.js +159 -93
  158. package/dist/prover/statetransition/StateTransitionProver.js.map +1 -0
  159. package/dist/prover/transaction/TransactionProvable.d.ts +626 -0
  160. package/dist/prover/transaction/TransactionProvable.d.ts.map +1 -0
  161. package/dist/prover/transaction/TransactionProvable.js +87 -0
  162. package/dist/prover/transaction/TransactionProvable.js.map +1 -0
  163. package/dist/prover/transaction/TransactionProver.d.ts +68 -0
  164. package/dist/prover/transaction/TransactionProver.d.ts.map +1 -0
  165. package/dist/prover/transaction/TransactionProver.js +301 -0
  166. package/dist/prover/transaction/TransactionProver.js.map +1 -0
  167. package/dist/prover/utils.d.ts +19 -0
  168. package/dist/prover/utils.d.ts.map +1 -0
  169. package/dist/prover/utils.js +67 -0
  170. package/dist/prover/utils.js.map +1 -0
  171. package/dist/settlement/ContractArgsRegistry.d.ts +13 -0
  172. package/dist/settlement/ContractArgsRegistry.d.ts.map +1 -0
  173. package/dist/settlement/ContractArgsRegistry.js +58 -0
  174. package/dist/settlement/ContractArgsRegistry.js.map +1 -0
  175. package/dist/settlement/ContractModule.d.ts +16 -0
  176. package/dist/settlement/ContractModule.d.ts.map +1 -0
  177. package/dist/settlement/ContractModule.js +12 -0
  178. package/dist/settlement/ContractModule.js.map +1 -0
  179. package/dist/settlement/SettlementContractModule.d.ts +47 -0
  180. package/dist/settlement/SettlementContractModule.d.ts.map +1 -0
  181. package/dist/settlement/SettlementContractModule.js +81 -0
  182. package/dist/settlement/SettlementContractModule.js.map +1 -0
  183. package/dist/settlement/contracts/BridgeContract.d.ts +114 -0
  184. package/dist/settlement/contracts/BridgeContract.d.ts.map +1 -0
  185. package/dist/settlement/contracts/BridgeContract.js +270 -0
  186. package/dist/settlement/contracts/BridgeContract.js.map +1 -0
  187. package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts +18 -0
  188. package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts.map +1 -0
  189. package/dist/settlement/contracts/BridgeContractProtocolModule.js +42 -0
  190. package/dist/settlement/contracts/BridgeContractProtocolModule.js.map +1 -0
  191. package/dist/settlement/contracts/BridgingSettlementContractModule.d.ts +21 -0
  192. package/dist/settlement/contracts/BridgingSettlementContractModule.d.ts.map +1 -0
  193. package/dist/settlement/contracts/BridgingSettlementContractModule.js +81 -0
  194. package/dist/settlement/contracts/BridgingSettlementContractModule.js.map +1 -0
  195. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts +23 -0
  196. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts.map +1 -0
  197. package/dist/settlement/contracts/DispatchContractProtocolModule.js +55 -0
  198. package/dist/settlement/contracts/DispatchContractProtocolModule.js.map +1 -0
  199. package/dist/settlement/contracts/DispatchSmartContract.d.ts +50 -0
  200. package/dist/settlement/contracts/DispatchSmartContract.d.ts.map +1 -0
  201. package/dist/settlement/contracts/DispatchSmartContract.js +234 -0
  202. package/dist/settlement/contracts/DispatchSmartContract.js.map +1 -0
  203. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts +21 -0
  204. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts.map +1 -0
  205. package/dist/settlement/contracts/SettlementContractProtocolModule.js +84 -0
  206. package/dist/settlement/contracts/SettlementContractProtocolModule.js.map +1 -0
  207. package/dist/settlement/contracts/SettlementSmartContract.d.ts +123 -0
  208. package/dist/settlement/contracts/SettlementSmartContract.d.ts.map +1 -0
  209. package/dist/settlement/contracts/SettlementSmartContract.js +310 -0
  210. package/dist/settlement/contracts/SettlementSmartContract.js.map +1 -0
  211. package/dist/settlement/contracts/SettlementSmartContractModule.d.ts +20 -0
  212. package/dist/settlement/contracts/SettlementSmartContractModule.d.ts.map +1 -0
  213. package/dist/settlement/contracts/SettlementSmartContractModule.js +56 -0
  214. package/dist/settlement/contracts/SettlementSmartContractModule.js.map +1 -0
  215. package/dist/settlement/contracts/TokenBridgeTree.d.ts +228 -0
  216. package/dist/settlement/contracts/TokenBridgeTree.d.ts.map +1 -0
  217. package/dist/settlement/contracts/TokenBridgeTree.js +60 -0
  218. package/dist/settlement/contracts/TokenBridgeTree.js.map +1 -0
  219. package/dist/settlement/contracts/authorizations/ContractAuthorization.d.ts +10 -0
  220. package/dist/settlement/contracts/authorizations/ContractAuthorization.d.ts.map +1 -0
  221. package/dist/settlement/contracts/authorizations/ContractAuthorization.js +2 -0
  222. package/dist/settlement/contracts/authorizations/ContractAuthorization.js.map +1 -0
  223. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.d.ts +85 -0
  224. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.d.ts.map +1 -0
  225. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.js +11 -0
  226. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.js.map +1 -0
  227. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.d.ts +79 -0
  228. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.d.ts.map +1 -0
  229. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.js +11 -0
  230. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.js.map +1 -0
  231. package/dist/settlement/contracts/settlement/BridgingSettlementContract.d.ts +107 -0
  232. package/dist/settlement/contracts/settlement/BridgingSettlementContract.d.ts.map +1 -0
  233. package/dist/settlement/contracts/settlement/BridgingSettlementContract.js +188 -0
  234. package/dist/settlement/contracts/settlement/BridgingSettlementContract.js.map +1 -0
  235. package/dist/settlement/contracts/settlement/SettlementBase.d.ts +41 -0
  236. package/dist/settlement/contracts/settlement/SettlementBase.d.ts.map +1 -0
  237. package/dist/settlement/contracts/settlement/SettlementBase.js +105 -0
  238. package/dist/settlement/contracts/settlement/SettlementBase.js.map +1 -0
  239. package/dist/settlement/contracts/settlement/SettlementContract.d.ts +15 -0
  240. package/dist/settlement/contracts/settlement/SettlementContract.d.ts.map +1 -0
  241. package/dist/settlement/contracts/settlement/SettlementContract.js +72 -0
  242. package/dist/settlement/contracts/settlement/SettlementContract.js.map +1 -0
  243. package/dist/settlement/messages/Deposit.d.ts +77 -0
  244. package/dist/settlement/messages/Deposit.d.ts.map +1 -0
  245. package/dist/settlement/messages/Deposit.js +8 -0
  246. package/dist/settlement/messages/Deposit.js.map +1 -0
  247. package/dist/settlement/messages/OutgoingMessage.d.ts +67 -0
  248. package/dist/settlement/messages/OutgoingMessage.d.ts.map +1 -0
  249. package/dist/settlement/messages/OutgoingMessage.js +7 -0
  250. package/dist/settlement/messages/OutgoingMessage.js.map +1 -0
  251. package/dist/settlement/messages/OutgoingMessageArgument.d.ts +588 -0
  252. package/dist/settlement/messages/OutgoingMessageArgument.d.ts.map +1 -0
  253. package/dist/settlement/messages/OutgoingMessageArgument.js +42 -0
  254. package/dist/settlement/messages/OutgoingMessageArgument.js.map +1 -0
  255. package/dist/settlement/messages/Withdrawal.d.ts +2 -0
  256. package/dist/settlement/messages/Withdrawal.d.ts.map +1 -0
  257. package/dist/settlement/messages/Withdrawal.js +3 -0
  258. package/dist/settlement/messages/Withdrawal.js.map +1 -0
  259. package/dist/settlement/modularity/OutgoingMessageProcessor.d.ts +28 -0
  260. package/dist/settlement/modularity/OutgoingMessageProcessor.d.ts.map +1 -0
  261. package/dist/settlement/modularity/OutgoingMessageProcessor.js +39 -0
  262. package/dist/settlement/modularity/OutgoingMessageProcessor.js.map +1 -0
  263. package/dist/settlement/modularity/ProvableSettlementHook.d.ts +26 -0
  264. package/dist/settlement/modularity/ProvableSettlementHook.d.ts.map +1 -0
  265. package/dist/settlement/modularity/ProvableSettlementHook.js +4 -0
  266. package/dist/settlement/modularity/ProvableSettlementHook.js.map +1 -0
  267. package/dist/settlement/modularity/types.d.ts +9 -0
  268. package/dist/settlement/modularity/types.d.ts.map +1 -0
  269. package/dist/settlement/modularity/types.js +2 -0
  270. package/dist/settlement/modularity/types.js.map +1 -0
  271. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts +11 -0
  272. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts.map +1 -0
  273. package/dist/settlement/modules/NetworkStateSettlementModule.js +15 -0
  274. package/dist/settlement/modules/NetworkStateSettlementModule.js.map +1 -0
  275. package/dist/state/SimpleAsyncStateService.d.ts +6 -0
  276. package/dist/state/SimpleAsyncStateService.d.ts.map +1 -0
  277. package/dist/state/SimpleAsyncStateService.js +2 -0
  278. package/dist/state/SimpleAsyncStateService.js.map +1 -0
  279. package/dist/state/State.d.ts +13 -5
  280. package/dist/state/State.d.ts.map +1 -1
  281. package/dist/state/State.js +42 -17
  282. package/dist/state/State.js.map +1 -0
  283. package/dist/state/StateMap.d.ts +4 -4
  284. package/dist/state/StateMap.d.ts.map +1 -1
  285. package/dist/state/StateMap.js +5 -5
  286. package/dist/state/StateMap.js.map +1 -0
  287. package/dist/state/StateService.d.ts +4 -4
  288. package/dist/state/StateService.d.ts.map +1 -1
  289. package/dist/state/StateService.js +1 -0
  290. package/dist/state/StateService.js.map +1 -0
  291. package/dist/state/StateServiceProvider.d.ts +5 -7
  292. package/dist/state/StateServiceProvider.d.ts.map +1 -1
  293. package/dist/state/StateServiceProvider.js +18 -23
  294. package/dist/state/StateServiceProvider.js.map +1 -0
  295. package/dist/state/WitnessBlockContext.d.ts +5 -0
  296. package/dist/state/WitnessBlockContext.d.ts.map +1 -0
  297. package/dist/state/WitnessBlockContext.js +48 -0
  298. package/dist/state/WitnessBlockContext.js.map +1 -0
  299. package/dist/state/assert/assert.d.ts +2 -2
  300. package/dist/state/assert/assert.d.ts.map +1 -1
  301. package/dist/state/assert/assert.js +16 -6
  302. package/dist/state/assert/assert.js.map +1 -0
  303. package/dist/state/context/RuntimeMethodExecutionContext.d.ts +137 -4
  304. package/dist/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -1
  305. package/dist/state/context/RuntimeMethodExecutionContext.js +44 -11
  306. package/dist/state/context/RuntimeMethodExecutionContext.js.map +1 -0
  307. package/dist/state/context/TransitionMethodExecutionContext.d.ts.map +1 -1
  308. package/dist/state/context/TransitionMethodExecutionContext.js +1 -1
  309. package/dist/state/context/TransitionMethodExecutionContext.js.map +1 -0
  310. package/dist/state/protocol/ProtocolState.d.ts +8 -2
  311. package/dist/state/protocol/ProtocolState.d.ts.map +1 -1
  312. package/dist/state/protocol/ProtocolState.js +36 -20
  313. package/dist/state/protocol/ProtocolState.js.map +1 -0
  314. package/dist/utils/FieldOptions.d.ts +62 -0
  315. package/dist/utils/FieldOptions.d.ts.map +1 -0
  316. package/dist/utils/FieldOptions.js +13 -0
  317. package/dist/utils/FieldOptions.js.map +1 -0
  318. package/dist/utils/MinaPrefixedProvableHashList.d.ts +20 -0
  319. package/dist/utils/MinaPrefixedProvableHashList.d.ts.map +1 -0
  320. package/dist/utils/MinaPrefixedProvableHashList.js +49 -0
  321. package/dist/utils/MinaPrefixedProvableHashList.js.map +1 -0
  322. package/dist/utils/PrefixedProvableHashList.d.ts +3 -2
  323. package/dist/utils/PrefixedProvableHashList.d.ts.map +1 -1
  324. package/dist/utils/PrefixedProvableHashList.js +5 -1
  325. package/dist/utils/PrefixedProvableHashList.js.map +1 -0
  326. package/dist/utils/ProvableHashList.d.ts +27 -4
  327. package/dist/utils/ProvableHashList.d.ts.map +1 -1
  328. package/dist/utils/ProvableHashList.js +51 -3
  329. package/dist/utils/ProvableHashList.js.map +1 -0
  330. package/dist/utils/ProvableReductionHashList.d.ts +18 -0
  331. package/dist/utils/ProvableReductionHashList.d.ts.map +1 -0
  332. package/dist/utils/ProvableReductionHashList.js +54 -0
  333. package/dist/utils/ProvableReductionHashList.js.map +1 -0
  334. package/dist/utils/StateTransitionReductionList.d.ts +11 -0
  335. package/dist/utils/StateTransitionReductionList.d.ts.map +1 -0
  336. package/dist/utils/StateTransitionReductionList.js +61 -0
  337. package/dist/utils/StateTransitionReductionList.js.map +1 -0
  338. package/dist/utils/utils.d.ts +11 -5
  339. package/dist/utils/utils.d.ts.map +1 -1
  340. package/dist/utils/utils.js +13 -13
  341. package/dist/utils/utils.js.map +1 -0
  342. package/jest.config.cjs +12 -1
  343. package/package.json +10 -10
  344. package/src/hashing/mina-prefixes.ts +10 -0
  345. package/src/hashing/protokit-prefixes.ts +37 -0
  346. package/src/hooks/AccountStateHook.ts +80 -0
  347. package/src/hooks/BlockHeightHook.ts +17 -0
  348. package/src/hooks/LastStateRootBlockHook.ts +25 -0
  349. package/src/hooks/NoopBlockHook.ts +24 -0
  350. package/src/hooks/NoopSettlementHook.ts +20 -0
  351. package/src/{blockmodules → hooks}/NoopTransactionHook.ts +9 -3
  352. package/src/index.ts +51 -13
  353. package/src/model/AppliedStateTransitionBatch.ts +16 -0
  354. package/src/model/MethodPublicOutput.ts +3 -1
  355. package/src/model/Option.ts +87 -57
  356. package/src/model/Path.ts +9 -5
  357. package/src/model/RuntimeLike.ts +12 -0
  358. package/src/model/StateTransition.ts +19 -5
  359. package/src/model/StateTransitionProvableBatch.ts +94 -73
  360. package/src/model/Transaction.ts +3 -1
  361. package/src/model/network/NetworkState.ts +22 -2
  362. package/src/model/transaction/AuthorizedTransaction.ts +50 -0
  363. package/src/model/transaction/RuntimeTransaction.ts +86 -15
  364. package/src/model/transaction/ValueOption.ts +28 -0
  365. package/src/protocol/Protocol.ts +186 -116
  366. package/src/protocol/ProtocolEnvironment.ts +10 -0
  367. package/src/protocol/ProtocolModule.ts +18 -11
  368. package/src/protocol/ProvableBlockHook.ts +67 -0
  369. package/src/protocol/ProvableTransactionHook.ts +92 -3
  370. package/src/protocol/TransitioningProtocolModule.ts +8 -1
  371. package/src/prover/accumulators/AppliedBatchHashList.ts +32 -0
  372. package/src/prover/accumulators/BlockHashList.ts +117 -0
  373. package/src/prover/accumulators/StateTransitionReductionList.ts +92 -0
  374. package/src/prover/accumulators/TransactionHashList.ts +9 -0
  375. package/src/prover/accumulators/WitnessedRootHashList.ts +62 -0
  376. package/src/prover/block/BlockProvable.ts +360 -28
  377. package/src/prover/block/BlockProver.ts +668 -251
  378. package/src/prover/block/accummulators/BlockHashMerkleTree.ts +24 -0
  379. package/src/prover/block/accummulators/RuntimeVerificationKeyTree.ts +24 -0
  380. package/src/prover/block/services/RuntimeVerificationKeyRootService.ts +20 -0
  381. package/src/prover/statetransition/StateTransitionProvable.ts +25 -20
  382. package/src/prover/statetransition/StateTransitionProver.ts +299 -168
  383. package/src/prover/transaction/TransactionProvable.ts +183 -0
  384. package/src/prover/transaction/TransactionProver.ts +561 -0
  385. package/src/prover/utils.ts +108 -0
  386. package/src/settlement/ContractArgsRegistry.ts +64 -0
  387. package/src/settlement/ContractModule.ts +31 -0
  388. package/src/settlement/SettlementContractModule.ts +150 -0
  389. package/src/settlement/contracts/BridgeContract.ts +383 -0
  390. package/src/settlement/contracts/BridgeContractProtocolModule.ts +49 -0
  391. package/src/settlement/contracts/BridgingSettlementContractModule.ts +116 -0
  392. package/src/settlement/contracts/DispatchContractProtocolModule.ts +77 -0
  393. package/src/settlement/contracts/DispatchSmartContract.ts +359 -0
  394. package/src/settlement/contracts/SettlementSmartContractModule.ts +79 -0
  395. package/src/settlement/contracts/TokenBridgeTree.ts +86 -0
  396. package/src/settlement/contracts/authorizations/ContractAuthorization.ts +11 -0
  397. package/src/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.ts +16 -0
  398. package/src/settlement/contracts/authorizations/UpdateMessagesHashAuth.ts +16 -0
  399. package/src/settlement/contracts/settlement/BridgingSettlementContract.ts +283 -0
  400. package/src/settlement/contracts/settlement/SettlementBase.ts +249 -0
  401. package/src/settlement/contracts/settlement/SettlementContract.ts +75 -0
  402. package/src/settlement/messages/Deposit.ts +7 -0
  403. package/src/settlement/messages/OutgoingMessage.ts +17 -0
  404. package/src/settlement/messages/OutgoingMessageArgument.ts +62 -0
  405. package/src/settlement/modularity/OutgoingMessageProcessor.ts +78 -0
  406. package/src/settlement/modularity/ProvableSettlementHook.ts +36 -0
  407. package/src/settlement/modularity/types.ts +23 -0
  408. package/src/settlement/modules/NetworkStateSettlementModule.ts +42 -0
  409. package/src/state/State.ts +49 -19
  410. package/src/state/StateMap.ts +5 -6
  411. package/src/state/StateService.ts +5 -5
  412. package/src/state/StateServiceProvider.ts +18 -18
  413. package/src/state/WitnessBlockContext.ts +54 -0
  414. package/src/state/assert/assert.ts +18 -8
  415. package/src/state/context/RuntimeMethodExecutionContext.ts +68 -11
  416. package/src/state/context/TransitionMethodExecutionContext.ts +0 -1
  417. package/src/state/protocol/ProtocolState.ts +61 -26
  418. package/src/utils/FieldOptions.ts +13 -0
  419. package/src/utils/MinaPrefixedProvableHashList.ts +70 -0
  420. package/src/utils/PrefixedProvableHashList.ts +6 -2
  421. package/src/utils/ProvableHashList.ts +109 -4
  422. package/src/utils/ProvableReductionHashList.ts +77 -0
  423. package/src/utils/utils.ts +21 -16
  424. package/test/BlockProver.test.ts +124 -140
  425. package/test/Protocol.test.ts +14 -21
  426. package/test/State.test.ts +45 -0
  427. package/test/StateTransition.test.ts +57 -65
  428. package/test/TestingProtocol.ts +36 -0
  429. package/test/compiling/types.ts +28 -0
  430. package/test/model/Option.test.ts +72 -0
  431. package/test/model/StateTransitionProvableBatch.test.ts +137 -0
  432. package/test/modularity/types.ts +35 -0
  433. package/test/prover/block/BlockProver.test.ts +18 -0
  434. package/test/prover/statetransition/StateTransitionProver.test.ts +261 -0
  435. package/{src → test}/state/assert/assert.test.ts +10 -3
  436. package/test/tsconfig.json +7 -0
  437. package/test/utils/ProvableHashList.test.ts +44 -0
  438. package/test/utils/ProvableReductionHashList.test.ts +117 -0
  439. package/test/utils.test.ts +0 -3
  440. package/LICENSE.md +0 -201
  441. package/dist/blockmodules/AccountStateModule.d.ts +0 -38
  442. package/dist/blockmodules/AccountStateModule.d.ts.map +0 -1
  443. package/dist/blockmodules/AccountStateModule.js +0 -38
  444. package/dist/blockmodules/NoopTransactionHook.d.ts +0 -6
  445. package/dist/blockmodules/NoopTransactionHook.d.ts.map +0 -1
  446. package/dist/blockmodules/NoopTransactionHook.js +0 -5
  447. package/dist/model/transaction/ProtocolTransaction.d.ts +0 -70
  448. package/dist/model/transaction/ProtocolTransaction.d.ts.map +0 -1
  449. package/dist/model/transaction/ProtocolTransaction.js +0 -18
  450. package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts +0 -16
  451. package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts.map +0 -1
  452. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts +0 -7
  453. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts.map +0 -1
  454. package/dist/state/context/ProtocolMethodExecutionContext.d.ts +0 -22
  455. package/dist/state/context/ProtocolMethodExecutionContext.d.ts.map +0 -1
  456. package/dist/state/context/ProtocolMethodExecutionContext.js +0 -28
  457. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts +0 -25
  458. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts.map +0 -1
  459. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.js +0 -77
  460. package/dist/utils/merkletree/MemoryMerkleTreeStorage.d.ts +0 -26
  461. package/dist/utils/merkletree/MemoryMerkleTreeStorage.d.ts.map +0 -1
  462. package/dist/utils/merkletree/MemoryMerkleTreeStorage.js +0 -79
  463. package/dist/utils/merkletree/MerkleTreeStore.d.ts +0 -11
  464. package/dist/utils/merkletree/MerkleTreeStore.d.ts.map +0 -1
  465. package/dist/utils/merkletree/MerkleTreeStore.js +0 -1
  466. package/dist/utils/merkletree/RollupMerkleTree.d.ts +0 -130
  467. package/dist/utils/merkletree/RollupMerkleTree.d.ts.map +0 -1
  468. package/dist/utils/merkletree/RollupMerkleTree.js +0 -244
  469. package/src/blockmodules/AccountStateModule.ts +0 -31
  470. package/src/model/Option.test.ts +0 -21
  471. package/src/model/transaction/ProtocolTransaction.ts +0 -25
  472. package/src/prover/statetransition/StateTransitionWitnessProvider.ts +0 -24
  473. package/src/prover/statetransition/StateTransitionWitnessProviderReference.ts +0 -17
  474. package/src/state/context/ProtocolMethodExecutionContext.ts +0 -36
  475. package/src/utils/merkletree/InMemoryMerkleTreeStorage.ts +0 -106
  476. package/src/utils/merkletree/MerkleTreeStore.ts +0 -15
  477. package/src/utils/merkletree/RollupMerkleTree.ts +0 -255
  478. package/src/utils/merkletree/VirtualMerkleTreeStore.ts +0 -21
  479. package/tsconfig.test.json +0 -9
@@ -1,298 +1,615 @@
1
- /* eslint-disable max-lines */
2
- import { Experimental, Field, type Proof, Provable, SelfProof } from "snarkyjs";
1
+ import { Bool, Field, Provable, SelfProof, ZkProgram } from "o1js";
3
2
  import { container, inject, injectable, injectAll } from "tsyringe";
4
3
  import {
5
4
  AreProofsEnabled,
5
+ CompilableModule,
6
+ CompileArtifact,
7
+ CompileRegistry,
8
+ log,
9
+ NonMethods,
6
10
  PlainZkProgram,
7
11
  provableMethod,
12
+ reduceSequential,
8
13
  WithZkProgrammable,
9
14
  ZkProgrammable,
10
15
  } from "@proto-kit/common";
11
16
 
12
- import { DefaultProvableHashList } from "../../utils/ProvableHashList";
13
- import { MethodPublicOutput } from "../../model/MethodPublicOutput";
14
17
  import { ProtocolModule } from "../../protocol/ProtocolModule";
15
18
  import {
16
19
  StateTransitionProof,
20
+ StateTransitionProvable,
17
21
  StateTransitionProverPublicInput,
18
22
  StateTransitionProverPublicOutput,
19
23
  } from "../statetransition/StateTransitionProvable";
20
24
  import { RuntimeTransaction } from "../../model/transaction/RuntimeTransaction";
25
+ import { RuntimeMethodExecutionContext } from "../../state/context/RuntimeMethodExecutionContext";
26
+ import {
27
+ AfterBlockHookArguments,
28
+ BeforeBlockHookArguments,
29
+ ProvableBlockHook,
30
+ toAfterBlockHookArgument,
31
+ toBeforeBlockHookArgument,
32
+ } from "../../protocol/ProvableBlockHook";
33
+ import { NetworkState } from "../../model/network/NetworkState";
34
+ import { assertEqualsIf } from "../../utils/utils";
35
+ import { StateServiceProvider } from "../../state/StateServiceProvider";
36
+ import { executeHooks } from "../utils";
37
+ import {
38
+ TransactionProof,
39
+ TransactionProvable,
40
+ TransactionProverPublicInput,
41
+ TransactionProverPublicOutput,
42
+ } from "../transaction/TransactionProvable";
43
+ import { Bundle } from "../accumulators/BlockHashList";
21
44
 
22
45
  import {
46
+ BlockArguments,
47
+ BlockArgumentsBatch,
48
+ BlockProof,
23
49
  BlockProvable,
24
- BlockProverExecutionData,
25
- BlockProverProof,
26
50
  BlockProverPublicInput,
27
51
  BlockProverPublicOutput,
52
+ BlockProverState,
53
+ BlockProverStateInput,
28
54
  } from "./BlockProvable";
29
- import { ProvableStateTransition } from "../../model/StateTransition";
30
- import { ProvableTransactionHook } from "../../protocol/ProvableTransactionHook";
31
- import { RuntimeMethodExecutionContext } from "../../state/context/RuntimeMethodExecutionContext";
32
- import { Protocol, ProtocolModulesRecord } from "../../protocol/Protocol";
55
+ import {
56
+ BlockHashMerkleTreeWitness,
57
+ BlockHashTreeEntry,
58
+ } from "./accummulators/BlockHashMerkleTree";
33
59
 
34
60
  const errors = {
35
- stateProofNotStartingAtZero: () =>
36
- "StateProof not starting ST-commitment at zero",
37
-
38
- stateTransitionsHashNotEqual: () =>
39
- "StateTransition list commitments are not equal",
61
+ propertyNotMatchingStep: (propertyName: string, step: string) =>
62
+ `${propertyName} not matching: ${step}`,
40
63
 
41
64
  propertyNotMatching: (propertyName: string) => `${propertyName} not matching`,
42
-
43
- stateRootNotMatching: (step: string) => `StateRoots not matching ${step}`,
44
-
45
- transactionsHashNotMatching: (step: string) =>
46
- `transactions hash not matching ${step}`,
47
65
  };
48
66
 
49
- export interface BlockProverState {
50
- // The current state root of the block prover
51
- stateRoot: Field;
52
-
53
- /**
54
- * The current commitment of the transaction-list which
55
- * will at the end equal the bundle hash
56
- */
57
- transactionsHash: Field;
58
-
59
- /**
60
- * The network state which gives access to values such as blockHeight
61
- * This value is the same for the whole batch (L2 block)
62
- */
63
- networkStateHash: Field;
64
- }
67
+ type BlockHookArgument<T extends "before" | "after"> = T extends "before"
68
+ ? BeforeBlockHookArguments
69
+ : AfterBlockHookArguments;
65
70
 
66
71
  export class BlockProverProgrammable extends ZkProgrammable<
67
72
  BlockProverPublicInput,
68
73
  BlockProverPublicOutput
69
74
  > {
70
75
  public constructor(
71
- // eslint-disable-next-line @typescript-eslint/no-use-before-define
72
76
  private readonly prover: BlockProver,
73
77
  public readonly stateTransitionProver: ZkProgrammable<
74
78
  StateTransitionProverPublicInput,
75
79
  StateTransitionProverPublicOutput
76
80
  >,
77
- public readonly runtime: ZkProgrammable<undefined, MethodPublicOutput>,
78
- private readonly blockModules: ProvableTransactionHook[]
81
+ public readonly transactionProver: ZkProgrammable<
82
+ TransactionProverPublicInput,
83
+ TransactionProverPublicOutput
84
+ >,
85
+ private readonly blockHooks: ProvableBlockHook<unknown>[],
86
+ private readonly stateServiceProvider: StateServiceProvider
79
87
  ) {
80
88
  super();
81
89
  }
82
90
 
83
- public get appChain(): AreProofsEnabled | undefined {
84
- return this.prover.appChain;
85
- }
91
+ name = "BlockProver";
86
92
 
87
- /**
88
- * Applies and checks the two proofs and applies the corresponding state
89
- * changes to the given state
90
- *
91
- * @param state The from-state of the BlockProver
92
- * @param stateTransitionProof
93
- * @param appProof
94
- * @param executionData
95
- * @returns The new BlockProver-state to be used as public output
96
- */
97
- public applyTransaction(
98
- state: BlockProverState,
99
- stateTransitionProof: Proof<
100
- StateTransitionProverPublicInput,
101
- StateTransitionProverPublicOutput
102
- >,
103
- appProof: Proof<void, MethodPublicOutput>,
104
- executionData: BlockProverExecutionData
105
- ): BlockProverState {
106
- const { transaction, networkState } = executionData;
93
+ public get areProofsEnabled(): AreProofsEnabled | undefined {
94
+ return this.prover.areProofsEnabled;
95
+ }
107
96
 
108
- appProof.verify();
109
- stateTransitionProof.verify();
97
+ public async executeBlockHooks<T extends "before" | "after">(
98
+ type: T,
99
+ hook: (
100
+ module: ProvableBlockHook<unknown>,
101
+ networkState: NetworkState,
102
+ args: BlockHookArgument<T>
103
+ ) => Promise<NetworkState>,
104
+ hookArguments: BlockHookArgument<T>,
105
+ inputNetworkState: NetworkState,
106
+ isDummy: Bool
107
+ ) {
108
+ const transaction = RuntimeTransaction.dummyTransaction();
109
+ const startingInputs = {
110
+ transaction,
111
+ networkState: inputNetworkState,
112
+ };
110
113
 
111
- const stateTo = { ...state };
114
+ return await executeHooks(
115
+ startingInputs,
116
+ `${type}Block`,
117
+ async () => {
118
+ const executionContext = container.resolve(
119
+ RuntimeMethodExecutionContext
120
+ );
121
+
122
+ return await this.blockHooks.reduce<Promise<NetworkState>>(
123
+ async (networkStatePromise, blockHook) => {
124
+ const networkState = await networkStatePromise;
125
+
126
+ // Setup context for potential calls to runtime methods.
127
+ // With the special case that we set the new networkstate for every hook
128
+ // We also have to put in a dummy transaction for network.transaction
129
+ executionContext.setup({
130
+ transaction: RuntimeTransaction.dummyTransaction(),
131
+ networkState,
132
+ });
133
+
134
+ return await hook(blockHook, networkState, hookArguments);
135
+ },
136
+ Promise.resolve(inputNetworkState)
137
+ );
138
+ },
139
+ isDummy
140
+ );
141
+ }
112
142
 
113
- // eslint-disable-next-line no-warning-comments
114
- // TODO Check methodId?
143
+ public includeSTProof(
144
+ stateTransitionProof: StateTransitionProof,
145
+ apply: Bool,
146
+ stateRoot: Field,
147
+ pendingSTBatchesHash: Field,
148
+ witnessedRootsHash: Field
149
+ ): {
150
+ stateRoot: Field;
151
+ pendingSTBatchesHash: Field;
152
+ witnessedRootsHash: Field;
153
+ } {
154
+ assertEqualsIf(
155
+ stateTransitionProof.publicInput.currentBatchStateHash,
156
+ Field(0),
157
+ apply,
158
+ "State for STProof has to be empty at the start"
159
+ );
160
+ assertEqualsIf(
161
+ stateTransitionProof.publicOutput.currentBatchStateHash,
162
+ Field(0),
163
+ apply,
164
+ "State for STProof has to be empty at the end"
165
+ );
115
166
 
116
- // Checks for the stateTransitionProof and appProof matching
117
- stateTransitionProof.publicInput.stateTransitionsHash.assertEquals(
167
+ assertEqualsIf(
168
+ stateTransitionProof.publicInput.batchesHash,
118
169
  Field(0),
119
- errors.stateProofNotStartingAtZero()
170
+ apply,
171
+ "Batcheshash doesn't start at 0"
120
172
  );
121
173
 
122
- appProof.publicOutput.stateTransitionsHash.assertEquals(
123
- stateTransitionProof.publicOutput.stateTransitionsHash,
124
- errors.stateTransitionsHashNotEqual()
174
+ // Assert from state root
175
+ assertEqualsIf(
176
+ stateRoot,
177
+ stateTransitionProof.publicInput.root,
178
+ apply,
179
+ errors.propertyNotMatching("from state root")
180
+ );
181
+
182
+ // Assert the stBatchesHash executed is the same
183
+ assertEqualsIf(
184
+ pendingSTBatchesHash,
185
+ stateTransitionProof.publicOutput.batchesHash,
186
+ apply,
187
+ "Pending STBatches are not the same that have been executed by the ST proof"
125
188
  );
126
189
 
127
- // Apply state if status success
128
- state.stateRoot.assertEquals(
129
- stateTransitionProof.publicInput.stateRoot,
190
+ // Assert root Accumulator
191
+ assertEqualsIf(
192
+ Field(0),
193
+ stateTransitionProof.publicInput.witnessedRootsHash,
194
+ apply,
130
195
  errors.propertyNotMatching("from state root")
131
196
  );
132
- stateTo.stateRoot = Provable.if(
133
- appProof.publicOutput.status,
134
- stateTransitionProof.publicOutput.stateRoot,
135
- stateTransitionProof.publicInput.stateRoot
197
+ // Assert the witnessedRootsHash created is the same
198
+ assertEqualsIf(
199
+ witnessedRootsHash,
200
+ stateTransitionProof.publicOutput.witnessedRootsHash,
201
+ apply,
202
+ "Root accumulator Commitment is not the same that have been executed by the ST proof"
136
203
  );
137
204
 
138
- // Apply protocol state transitions
139
- this.assertProtocolTransitions(stateTransitionProof, executionData);
205
+ // update root only if we didn't defer
206
+ const newRoot = Provable.if(
207
+ apply,
208
+ stateTransitionProof.publicOutput.root,
209
+ stateRoot
210
+ );
211
+ // Reset only if we didn't defer
212
+ const newBatchesHash = Provable.if(apply, Field(0), pendingSTBatchesHash);
213
+ const newWitnessedRootsHash = Provable.if(
214
+ apply,
215
+ Field(0),
216
+ witnessedRootsHash
217
+ );
218
+ return {
219
+ stateRoot: newRoot,
220
+ pendingSTBatchesHash: newBatchesHash,
221
+ witnessedRootsHash: newWitnessedRootsHash,
222
+ };
223
+ }
140
224
 
141
- // Check transaction signature
142
- transaction
143
- .validateSignature()
144
- .assertTrue("Transaction signature not valid");
225
+ private verifySTProof(
226
+ state: BlockProverState,
227
+ stateTransitionProof: StateTransitionProof,
228
+ deferSTProof: Bool
229
+ ) {
230
+ // Verify ST Proof only if STs have been emitted,
231
+ // and we don't defer the verification of the STs
232
+ // otherwise we can input a dummy proof
233
+ const batchesEmpty = state.pendingSTBatches.commitment.equals(Field(0));
234
+ const verifyStProof = deferSTProof.not().and(batchesEmpty.not());
235
+ log.provable.debug("Verify STProof", verifyStProof);
236
+ stateTransitionProof.verifyIf(verifyStProof);
237
+
238
+ // Apply STProof if not deferred
239
+ const stateProofResult = this.includeSTProof(
240
+ stateTransitionProof,
241
+ verifyStProof,
242
+ state.stateRoot,
243
+ state.pendingSTBatches.commitment,
244
+ state.witnessedRoots.commitment
245
+ );
246
+ state.stateRoot = stateProofResult.stateRoot;
247
+ state.pendingSTBatches.commitment = stateProofResult.pendingSTBatchesHash;
248
+ state.witnessedRoots.commitment = stateProofResult.witnessedRootsHash;
249
+ }
145
250
 
146
- // Check if the methodId is correct
147
- // to do
251
+ private verifyTransactionProof(
252
+ state: BlockProverState,
253
+ transactionProof: TransactionProof,
254
+ deferTransactionProof: Bool
255
+ ) {
256
+ // Verify Transaction proof if it has at least 1 tx and it isn't deferred
257
+ const finalizeBlockProof = deferTransactionProof.not();
258
+ const verifyTransactionProof = finalizeBlockProof.and(
259
+ state.bundleList.isEmpty().not()
260
+ );
148
261
 
149
- // Check transaction integrity against appProof
150
- const blockTransactionHash =
151
- RuntimeTransaction.fromProtocolTransaction(transaction).hash();
262
+ transactionProof.verifyIf(verifyTransactionProof);
152
263
 
153
- blockTransactionHash.assertEquals(
154
- appProof.publicOutput.transactionHash,
155
- "Transactions provided in AppProof and BlockProof do not match"
264
+ // Fast-forward transaction trackers by the results of the aggregated transaction proof
265
+ // Implicitly, the 'from' values here are asserted against the publicInput, since the hashlists
266
+ // are created out of the public input
267
+ state.eternalTransactionsList.fastForwardIf(
268
+ {
269
+ from: transactionProof.publicInput.eternalTransactionsHash,
270
+ to: transactionProof.publicOutput.eternalTransactionsHash,
271
+ },
272
+ verifyTransactionProof,
273
+ "eternalTransactionsList"
156
274
  );
157
275
 
158
- // Check network state integrity against appProof
159
- state.networkStateHash.assertEquals(
160
- appProof.publicOutput.networkStateHash,
161
- "Network state does not match state used in AppProof"
276
+ state.incomingMessages.fastForwardIf(
277
+ {
278
+ from: transactionProof.publicInput.incomingMessagesHash,
279
+ to: transactionProof.publicOutput.incomingMessagesHash,
280
+ },
281
+ verifyTransactionProof,
282
+ "incomingMessages"
162
283
  );
163
- state.networkStateHash.assertEquals(
284
+
285
+ // Cancel out remainders for transaction proof
286
+ assertEqualsIf(
287
+ transactionProof.publicInput.bundlesHash,
288
+ Field(0),
289
+ verifyTransactionProof,
290
+ "TransactionProof has to start bundles at 0"
291
+ );
292
+
293
+ // Fast Backwards actually, but logic holds
294
+ state.bundleList.fastForwardIf(
295
+ {
296
+ from: transactionProof.publicOutput.bundlesHash,
297
+ to: state.bundleList.empty(),
298
+ },
299
+ verifyTransactionProof,
300
+ "bundles hash"
301
+ );
302
+ }
303
+
304
+ private parseState(
305
+ publicInput: BlockProverPublicInput,
306
+ stateWitness: BlockProverStateInput,
307
+ networkState: NetworkState,
308
+ blockWitness: BlockHashMerkleTreeWitness
309
+ ) {
310
+ const hasNoStateRemained = publicInput.proverStateRemainder.equals(0);
311
+
312
+ // If the state is supplied as a witness, we check that it is equals the PI's stateHash
313
+ stateWitness
314
+ .hash()
315
+ .equals(publicInput.proverStateRemainder)
316
+ .or(hasNoStateRemained)
317
+ .assertTrue("Input state witness is invalid");
318
+
319
+ const stateInputs = Provable.if(
320
+ hasNoStateRemained,
321
+ BlockProverStateInput,
322
+ BlockProverStateInput.fromPublicInput(publicInput),
323
+ stateWitness
324
+ );
325
+
326
+ stateInputs.networkStateHash.assertEquals(
164
327
  networkState.hash(),
165
- "Network state provided to BlockProver does not match the publicInput"
328
+ "Network state not valid"
166
329
  );
167
330
 
168
- // Append tx to transaction list
169
- const transactionList = new DefaultProvableHashList(
170
- Field,
171
- state.transactionsHash
331
+ const state = BlockProverState.blockProverFromCommitments(
332
+ stateInputs,
333
+ networkState,
334
+ blockWitness
172
335
  );
173
336
 
174
- const { transactionHash } = appProof.publicOutput;
175
- transactionList.push(transactionHash);
337
+ // Verify block witness validity
338
+ const blockIndex = blockWitness.calculateIndex();
339
+
340
+ blockIndex.assertEquals(stateInputs.blockNumber);
176
341
 
177
- stateTo.transactionsHash = transactionList.commitment;
342
+ blockWitness
343
+ .calculateRoot(Field(0))
344
+ .assertEquals(
345
+ stateInputs.blockHashRoot,
346
+ "Supplied block hash witness not matching state root"
347
+ );
178
348
 
179
- return stateTo;
349
+ return state;
180
350
  }
181
351
 
182
- // eslint-disable-next-line no-warning-comments, max-len
183
- // TODO How does this interact with the RuntimeMethodExecutionContext when executing runtimemethods?
352
+ private computeOutput(
353
+ publicInput: BlockProverPublicInput,
354
+ state: BlockProverState,
355
+ finalizeBlockProof: Bool
356
+ ) {
357
+ const finalizedOutput = state.toCommitments();
184
358
 
185
- public assertProtocolTransitions(
186
- stateTransitionProof: Proof<
187
- StateTransitionProverPublicInput,
188
- StateTransitionProverPublicOutput
189
- >,
190
- executionData: BlockProverExecutionData
359
+ const deferredOutput = {
360
+ ...publicInput,
361
+ };
362
+ deferredOutput.proverStateRemainder = finalizedOutput.hash();
363
+
364
+ return new BlockProverPublicOutput(
365
+ Provable.if(
366
+ finalizeBlockProof,
367
+ BlockProverPublicOutput,
368
+ finalizedOutput.finalize(finalizeBlockProof),
369
+ deferredOutput
370
+ )
371
+ );
372
+ }
373
+
374
+ @provableMethod()
375
+ public async proveBlockBatchNoProofs(
376
+ publicInput: BlockProverPublicInput,
377
+ stateWitness: BlockProverStateInput,
378
+ networkState: NetworkState,
379
+ blockWitness: BlockHashMerkleTreeWitness,
380
+ batch: BlockArgumentsBatch,
381
+ finalize: Bool
191
382
  ) {
192
- const executionContext = container.resolve(RuntimeMethodExecutionContext);
193
- executionContext.clear();
194
-
195
- // Setup context for potential calls to runtime methods.
196
- // This way they can use this.transaction etc. while still having provable
197
- // integrity between data
198
- executionContext.setup({
199
- transaction: RuntimeTransaction.fromProtocolTransaction(
200
- executionData.transaction
201
- ),
202
-
203
- networkState: executionData.networkState,
204
- });
205
- executionContext.beforeMethod("", "", []);
383
+ return await this.proveBlockBatch(
384
+ false,
385
+ publicInput,
386
+ stateWitness,
387
+ networkState,
388
+ blockWitness,
389
+ batch,
390
+ Bool(true),
391
+ Bool(true),
392
+ finalize
393
+ );
394
+ }
206
395
 
207
- this.blockModules.forEach((module) => {
208
- module.onTransaction(executionData);
209
- });
396
+ @provableMethod()
397
+ public async proveBlockBatchWithProofs(
398
+ publicInput: BlockProverPublicInput,
399
+ stateWitness: BlockProverStateInput,
400
+ networkState: NetworkState,
401
+ blockWitness: BlockHashMerkleTreeWitness,
402
+ batch: BlockArgumentsBatch,
403
+ deferSTProof: Bool,
404
+ deferTransactionProof: Bool,
405
+ stateTransitionProof: StateTransitionProof,
406
+ transactionProof: TransactionProof
407
+ ) {
408
+ const finalize = deferTransactionProof.or(deferSTProof).not();
409
+
410
+ return await this.proveBlockBatch(
411
+ true,
412
+ publicInput,
413
+ stateWitness,
414
+ networkState,
415
+ blockWitness,
416
+ batch,
417
+ deferSTProof,
418
+ deferTransactionProof,
419
+ finalize,
420
+ stateTransitionProof,
421
+ transactionProof
422
+ );
423
+ }
424
+
425
+ public async proveBlockBatch(
426
+ doProofVerification: boolean,
427
+ publicInput: BlockProverPublicInput,
428
+ stateWitness: BlockProverStateInput,
429
+ networkState: NetworkState,
430
+ blockWitness: BlockHashMerkleTreeWitness,
431
+ batch: BlockArgumentsBatch,
432
+ deferSTProof: Bool,
433
+ deferTransactionProof: Bool,
434
+ finalize: Bool,
435
+ stateTransitionProof?: StateTransitionProof,
436
+ transactionProof?: TransactionProof
437
+ ): Promise<BlockProverPublicOutput> {
438
+ let state = this.parseState(
439
+ publicInput,
440
+ stateWitness,
441
+ networkState,
442
+ blockWitness
443
+ );
210
444
 
211
- executionContext.afterMethod();
445
+ // Prove blocks iteratively
446
+ state = await reduceSequential(
447
+ batch.batch,
448
+ async (current, block) => {
449
+ const result = await this.proveBlock(current.copy(), block);
212
450
 
213
- const { stateTransitions, status, statusMessage } =
214
- executionContext.current().result;
451
+ this.stateServiceProvider.popCurrentStateService();
215
452
 
216
- status.assertTrue(statusMessage);
453
+ return BlockProverState.choose(block.isDummy, current, result);
454
+ },
455
+ state
456
+ );
457
+
458
+ if (doProofVerification) {
459
+ this.verifyTransactionProof(
460
+ state,
461
+ transactionProof!,
462
+ deferTransactionProof
463
+ );
464
+ this.verifySTProof(state, stateTransitionProof!, deferSTProof);
465
+ }
466
+
467
+ return this.computeOutput(publicInput, state, finalize);
468
+ }
217
469
 
218
- const transitions = stateTransitions.map((transition) =>
219
- transition.toProvable()
470
+ private async proveBlock(
471
+ state: BlockProverState,
472
+ args: BlockArguments
473
+ ): Promise<BlockProverState> {
474
+ const { networkState, blockWitness } = state;
475
+ const { afterBlockRootWitness, transactionsHash, isDummy } = args;
476
+
477
+ const startingPendingStBatches = state.pendingSTBatches.commitment;
478
+
479
+ // 1. Execute beforeBlock hooks
480
+ const beforeBlockArgs = toBeforeBlockHookArgument(state);
481
+ const beforeBlockResult = await this.executeBlockHooks(
482
+ "before",
483
+ async (module, networkStateArg, hookArgs) =>
484
+ await module.beforeBlock(networkStateArg, hookArgs),
485
+ beforeBlockArgs,
486
+ networkState,
487
+ isDummy
220
488
  );
221
489
 
222
- const hashList = new DefaultProvableHashList(
223
- ProvableStateTransition,
224
- stateTransitionProof.publicInput.protocolTransitionsHash
490
+ state.pendingSTBatches.push(beforeBlockResult.batch);
491
+
492
+ // 2. "Apply" TX-type BlockProof
493
+ args.pendingSTBatchesHash.from.assertEquals(
494
+ state.pendingSTBatches.commitment
495
+ );
496
+ args.witnessedRootsHash.from.assertEquals(state.witnessedRoots.commitment);
497
+ const isEmptyBlock = transactionsHash.equals(Field(0));
498
+ const isNotEmptyBlock = isEmptyBlock.not();
499
+
500
+ // Check & fast-forward the stBatchHashList to after all transactions appended
501
+ state.pendingSTBatches.fastForward(
502
+ args.pendingSTBatchesHash,
503
+ "Transaction proof doesn't start their STs after the beforeBlockHook"
504
+ );
505
+ // Same for witnessedRootsHash
506
+ state.witnessedRoots.fastForward(
507
+ args.witnessedRootsHash,
508
+ "Transaction proof doesn't start with correct witnessed roots hash"
225
509
  );
226
510
 
227
- transitions.forEach((transition) => {
228
- hashList.push(transition);
511
+ // Add block to bundles list
512
+ const bundle = new Bundle({
513
+ transactionsHash: transactionsHash,
514
+ networkStateHash: beforeBlockResult.result.hash(),
515
+ pendingSTBatchesHash: args.pendingSTBatchesHash,
516
+ witnessedRootsHash: args.witnessedRootsHash,
229
517
  });
518
+ state.bundleList.pushIf(bundle, isNotEmptyBlock);
519
+
520
+ // 3.
521
+ // Calculate new block tree root and increment witness
522
+ // Blocknumber as the index here is already authenticated previously
523
+ const [root, newWitness] = blockWitness.calculateRootIncrement(
524
+ state.blockNumber,
525
+ new BlockHashTreeEntry({
526
+ block: {
527
+ index: state.blockNumber,
528
+ transactionListHash: transactionsHash,
529
+ },
530
+ closed: Bool(true),
531
+ }).hash()
532
+ );
533
+
534
+ state.blockHashRoot = root;
535
+ state.blockWitness = newWitness;
536
+
537
+ state.blockNumber = state.blockNumber.add(1);
230
538
 
231
- stateTransitionProof.publicOutput.protocolTransitionsHash.assertEquals(
232
- hashList.commitment,
233
- "ProtocolTransitionsHash not matching the generated protocol transitions"
539
+ // 4. Execute afterBlock hooks
540
+ // Witness root
541
+ const hasNoSTBatches = state.pendingSTBatches.commitment.equals(
542
+ startingPendingStBatches
234
543
  );
235
- }
236
544
 
237
- @provableMethod()
238
- public proveTransaction(
239
- publicInput: BlockProverPublicInput,
240
- stateProof: StateTransitionProof,
241
- appProof: Proof<void, MethodPublicOutput>,
242
- executionData: BlockProverExecutionData
243
- ): BlockProverPublicOutput {
244
- const state: BlockProverState = {
245
- transactionsHash: publicInput.transactionsHash,
246
- stateRoot: publicInput.stateRoot,
247
- networkStateHash: publicInput.networkStateHash,
248
- };
545
+ // TODO Cover case when we witness root but pendingSTBatches is completely empty
249
546
 
250
- const stateTo = this.applyTransaction(
547
+ state.witnessedRoots.witnessRoot(
548
+ {
549
+ appliedBatchListState: state.pendingSTBatches.commitment,
550
+ root: afterBlockRootWitness.witnessedRoot,
551
+ },
552
+ hasNoSTBatches.not()
553
+ );
554
+
555
+ // Switch state service to afterBlock one
556
+ this.stateServiceProvider.popCurrentStateService();
557
+
558
+ // Execute hooks
559
+ const afterBlockHookArgs = toAfterBlockHookArgument(
251
560
  state,
252
- stateProof,
253
- appProof,
254
- executionData
561
+ afterBlockRootWitness.witnessedRoot,
562
+ transactionsHash
563
+ );
564
+ const afterBlockResult = await this.executeBlockHooks(
565
+ "after",
566
+ async (module, networkStateArg, hookArgs) =>
567
+ await module.afterBlock(networkStateArg, hookArgs),
568
+ {
569
+ ...afterBlockHookArgs,
570
+ },
571
+ beforeBlockResult.result,
572
+ isDummy
255
573
  );
256
574
 
257
- return new BlockProverPublicOutput({
258
- stateRoot: stateTo.stateRoot,
259
- transactionsHash: stateTo.transactionsHash,
260
- });
575
+ // Apply state and network state changes
576
+ state.pendingSTBatches.push(afterBlockResult.batch);
577
+ state.networkState = afterBlockResult.result;
578
+
579
+ return state;
261
580
  }
262
581
 
263
582
  @provableMethod()
264
- public merge(
583
+ public async merge(
265
584
  publicInput: BlockProverPublicInput,
266
- proof1: BlockProverProof,
267
- proof2: BlockProverProof
268
- ): BlockProverPublicOutput {
585
+ proof1: BlockProof,
586
+ proof2: BlockProof
587
+ ): Promise<BlockProverPublicOutput> {
269
588
  proof1.verify();
270
589
  proof2.verify();
271
590
 
272
- // Check state
273
- publicInput.stateRoot.assertEquals(
274
- proof1.publicInput.stateRoot,
275
- errors.stateRootNotMatching("publicInput.from -> proof1.from")
276
- );
277
- proof1.publicOutput.stateRoot.assertEquals(
278
- proof2.publicInput.stateRoot,
279
- errors.stateRootNotMatching("proof1.to -> proof2.from")
280
- );
281
-
282
- // Check transaction list
283
- publicInput.transactionsHash.assertEquals(
284
- proof1.publicInput.transactionsHash,
285
- errors.transactionsHashNotMatching("publicInput.from -> proof1.from")
286
- );
287
- proof1.publicOutput.transactionsHash.assertEquals(
288
- proof2.publicInput.transactionsHash,
289
- errors.transactionsHashNotMatching("proof1.to -> proof2.from")
290
- );
291
-
292
- return new BlockProverPublicOutput({
293
- stateRoot: proof2.publicOutput.stateRoot,
294
- transactionsHash: proof2.publicOutput.transactionsHash,
295
- });
591
+ function checkProperty<
592
+ Key extends keyof NonMethods<BlockProverPublicInput>,
593
+ >(key: Key) {
594
+ // Check state
595
+ publicInput[key].assertEquals(
596
+ proof1.publicInput[key],
597
+ errors.propertyNotMatchingStep(key, "publicInput.from -> proof1.from")
598
+ );
599
+ proof1.publicOutput[key].assertEquals(
600
+ proof2.publicInput[key],
601
+ errors.propertyNotMatchingStep(key, "proof1.to -> proof2.from")
602
+ );
603
+ }
604
+
605
+ checkProperty("stateRoot");
606
+ checkProperty("networkStateHash");
607
+ checkProperty("blockHashRoot");
608
+ checkProperty("eternalTransactionsHash");
609
+ checkProperty("incomingMessagesHash");
610
+ checkProperty("proverStateRemainder");
611
+
612
+ return proof2.publicOutput;
296
613
  }
297
614
 
298
615
  /**
@@ -303,38 +620,85 @@ export class BlockProverProgrammable extends ZkProgrammable<
303
620
  public zkProgramFactory(): PlainZkProgram<
304
621
  BlockProverPublicInput,
305
622
  BlockProverPublicOutput
306
- > {
307
- const { prover, stateTransitionProver, runtime } = this;
308
- const StateTransitionProofClass = stateTransitionProver.zkProgram.Proof;
309
- const RuntimeProofClass = runtime.zkProgram.Proof;
310
-
311
- const proveTransaction = prover.proveTransaction.bind(prover);
623
+ >[] {
624
+ const { prover, stateTransitionProver, transactionProver } = this;
625
+ const StateTransitionProofClass = stateTransitionProver.zkProgram[0].Proof;
626
+ const TransactionProofClass = transactionProver.zkProgram[0].Proof;
627
+ const proveBlockBatchWithProofs =
628
+ prover.proveBlockBatchWithProofs.bind(prover);
629
+ const proveBlockBatchNoProofs = prover.proveBlockBatchNoProofs.bind(prover);
312
630
  const merge = prover.merge.bind(prover);
313
631
 
314
- const program = Experimental.ZkProgram({
632
+ const program = ZkProgram({
633
+ name: "BlockProver",
315
634
  publicInput: BlockProverPublicInput,
316
635
  publicOutput: BlockProverPublicOutput,
317
636
 
318
637
  methods: {
319
- proveTransaction: {
638
+ proveBlockBatchWithProofs: {
320
639
  privateInputs: [
640
+ BlockProverStateInput,
641
+ NetworkState,
642
+ BlockHashMerkleTreeWitness,
643
+ BlockArgumentsBatch,
644
+ Bool,
645
+ Bool,
321
646
  StateTransitionProofClass,
322
- RuntimeProofClass,
323
- BlockProverExecutionData,
647
+ TransactionProofClass,
324
648
  ],
649
+ async method(
650
+ publicInput: BlockProverPublicInput,
651
+ stateWitness: BlockProverStateInput,
652
+ networkState: NetworkState,
653
+ blockWitness: BlockHashMerkleTreeWitness,
654
+ batch: BlockArgumentsBatch,
655
+ deferSTProof: Bool,
656
+ deferTransactionProof: Bool,
657
+ stateTransitionProof: StateTransitionProof,
658
+ transactionProof: TransactionProof
659
+ ) {
660
+ return {
661
+ publicOutput: await proveBlockBatchWithProofs(
662
+ publicInput,
663
+ stateWitness,
664
+ networkState,
665
+ blockWitness,
666
+ batch,
667
+ deferSTProof,
668
+ deferTransactionProof,
669
+ stateTransitionProof,
670
+ transactionProof
671
+ ),
672
+ };
673
+ },
674
+ },
325
675
 
326
- method(
676
+ proveBlockBatchNoProofs: {
677
+ privateInputs: [
678
+ BlockProverStateInput,
679
+ NetworkState,
680
+ BlockHashMerkleTreeWitness,
681
+ BlockArgumentsBatch,
682
+ Bool,
683
+ ],
684
+ async method(
327
685
  publicInput: BlockProverPublicInput,
328
- stateProof: StateTransitionProof,
329
- appProof: Proof<void, MethodPublicOutput>,
330
- executionData: BlockProverExecutionData
686
+ stateWitness: BlockProverStateInput,
687
+ networkState: NetworkState,
688
+ blockWitness: BlockHashMerkleTreeWitness,
689
+ batch: BlockArgumentsBatch,
690
+ finalize: Bool
331
691
  ) {
332
- return proveTransaction(
333
- publicInput,
334
- stateProof,
335
- appProof,
336
- executionData
337
- );
692
+ return {
693
+ publicOutput: await proveBlockBatchNoProofs(
694
+ publicInput,
695
+ stateWitness,
696
+ networkState,
697
+ blockWitness,
698
+ batch,
699
+ finalize
700
+ ),
701
+ };
338
702
  },
339
703
  },
340
704
 
@@ -344,30 +708,35 @@ export class BlockProverProgrammable extends ZkProgrammable<
344
708
  SelfProof<BlockProverPublicInput, BlockProverPublicOutput>,
345
709
  ],
346
710
 
347
- method(
711
+ async method(
348
712
  publicInput: BlockProverPublicInput,
349
- proof1: BlockProverProof,
350
- proof2: BlockProverProof
713
+ proof1: BlockProof,
714
+ proof2: BlockProof
351
715
  ) {
352
- return merge(publicInput, proof1, proof2);
716
+ return { publicOutput: await merge(publicInput, proof1, proof2) };
353
717
  },
354
718
  },
355
719
  },
356
720
  });
357
721
 
358
722
  const methods = {
359
- proveTransaction: program.proveTransaction,
723
+ proveBlockBatchWithProofs: program.proveBlockBatchWithProofs,
724
+ proveBlockBatchNoProofs: program.proveBlockBatchNoProofs,
360
725
  merge: program.merge,
361
726
  };
362
727
 
363
- const SelfProofClass = Experimental.ZkProgram.Proof(program);
728
+ const SelfProofClass = ZkProgram.Proof(program);
364
729
 
365
- return {
366
- compile: program.compile.bind(program),
367
- verify: program.verify.bind(program),
368
- Proof: SelfProofClass,
369
- methods,
370
- };
730
+ return [
731
+ {
732
+ name: program.name,
733
+ compile: program.compile.bind(program),
734
+ verify: program.verify.bind(program),
735
+ analyzeMethods: program.analyzeMethods.bind(program),
736
+ Proof: SelfProofClass,
737
+ methods,
738
+ },
739
+ ];
371
740
  }
372
741
  }
373
742
 
@@ -377,7 +746,10 @@ export class BlockProverProgrammable extends ZkProgrammable<
377
746
  * then be merged to be committed to the base-layer contract
378
747
  */
379
748
  @injectable()
380
- export class BlockProver extends ProtocolModule implements BlockProvable {
749
+ export class BlockProver
750
+ extends ProtocolModule
751
+ implements BlockProvable, CompilableModule
752
+ {
381
753
  public zkProgrammable: BlockProverProgrammable;
382
754
 
383
755
  public constructor(
@@ -385,41 +757,86 @@ export class BlockProver extends ProtocolModule implements BlockProvable {
385
757
  public readonly stateTransitionProver: WithZkProgrammable<
386
758
  StateTransitionProverPublicInput,
387
759
  StateTransitionProverPublicOutput
388
- >,
389
- @inject("Runtime")
390
- public readonly runtime: WithZkProgrammable<undefined, MethodPublicOutput>,
391
- @injectAll("ProvableTransactionHook")
392
- transactionHooks: ProvableTransactionHook[]
760
+ > &
761
+ StateTransitionProvable,
762
+ @inject("TransactionProver")
763
+ public readonly transactionProver: WithZkProgrammable<
764
+ TransactionProverPublicInput,
765
+ TransactionProverPublicOutput
766
+ > &
767
+ TransactionProvable,
768
+ @injectAll("ProvableBlockHook")
769
+ blockHooks: ProvableBlockHook<unknown>[],
770
+ @inject("StateServiceProvider")
771
+ stateServiceProvider: StateServiceProvider
393
772
  ) {
394
773
  super();
395
774
  this.zkProgrammable = new BlockProverProgrammable(
396
775
  this,
397
776
  stateTransitionProver.zkProgrammable,
398
- runtime.zkProgrammable,
399
- transactionHooks
400
- // protocol.dependencyContainer.resolveAll("P rovableTransactionHook")
777
+ transactionProver.zkProgrammable,
778
+ blockHooks,
779
+ stateServiceProvider
401
780
  );
402
781
  }
403
782
 
404
- public merge(
783
+ public async compile(
784
+ registry: CompileRegistry
785
+ ): Promise<Record<string, CompileArtifact> | undefined> {
786
+ return await registry.forceProverExists(async () => {
787
+ await this.stateTransitionProver.compile(registry);
788
+ await this.transactionProver.compile(registry);
789
+ return await this.zkProgrammable.compile(registry);
790
+ });
791
+ }
792
+
793
+ public proveBlockBatchNoProofs(
405
794
  publicInput: BlockProverPublicInput,
406
- proof1: BlockProverProof,
407
- proof2: BlockProverProof
408
- ): BlockProverPublicOutput {
409
- return this.zkProgrammable.merge(publicInput, proof1, proof2);
795
+ stateWitness: BlockProverStateInput,
796
+ networkState: NetworkState,
797
+ blockWitness: BlockHashMerkleTreeWitness,
798
+ batch: BlockArgumentsBatch,
799
+ finalize: Bool
800
+ ): Promise<BlockProverPublicOutput> {
801
+ return this.zkProgrammable.proveBlockBatchNoProofs(
802
+ publicInput,
803
+ stateWitness,
804
+ networkState,
805
+ blockWitness,
806
+ batch,
807
+ finalize
808
+ );
410
809
  }
411
810
 
412
- public proveTransaction(
811
+ public proveBlockBatchWithProofs(
413
812
  publicInput: BlockProverPublicInput,
414
- stateProof: StateTransitionProof,
415
- appProof: Proof<void, MethodPublicOutput>,
416
- executionData: BlockProverExecutionData
417
- ): BlockProverPublicOutput {
418
- return this.zkProgrammable.proveTransaction(
813
+ stateWitness: BlockProverStateInput,
814
+ networkState: NetworkState,
815
+ blockWitness: BlockHashMerkleTreeWitness,
816
+ batch: BlockArgumentsBatch,
817
+ deferSTProof: Bool,
818
+ deferTransactionProof: Bool,
819
+ stateTransitionProof: StateTransitionProof,
820
+ transactionProof: TransactionProof
821
+ ): Promise<BlockProverPublicOutput> {
822
+ return this.zkProgrammable.proveBlockBatchWithProofs(
419
823
  publicInput,
420
- stateProof,
421
- appProof,
422
- executionData
824
+ stateWitness,
825
+ networkState,
826
+ blockWitness,
827
+ batch,
828
+ deferSTProof,
829
+ deferTransactionProof,
830
+ stateTransitionProof,
831
+ transactionProof
423
832
  );
424
833
  }
834
+
835
+ public merge(
836
+ publicInput: BlockProverPublicInput,
837
+ proof1: BlockProof,
838
+ proof2: BlockProof
839
+ ): Promise<BlockProverPublicOutput> {
840
+ return this.zkProgrammable.merge(publicInput, proof1, proof2);
841
+ }
425
842
  }