@proto-kit/protocol 0.1.1-develop.191 → 0.1.1-develop.2024

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 (466) 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 +59 -9
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +60 -9
  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 +70 -46
  48. package/dist/model/Option.d.ts.map +1 -1
  49. package/dist/model/Option.js +62 -57
  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 +389 -16
  64. package/dist/model/StateTransitionProvableBatch.d.ts.map +1 -1
  65. package/dist/model/StateTransitionProvableBatch.js +87 -10
  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 +47 -21
  88. package/dist/protocol/Protocol.d.ts.map +1 -1
  89. package/dist/protocol/Protocol.js +127 -26
  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 -7
  96. package/dist/protocol/ProtocolModule.d.ts.map +1 -1
  97. package/dist/protocol/ProtocolModule.js +10 -7
  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 +35 -0
  104. package/dist/protocol/ProvableTransactionHook.d.ts.map +1 -0
  105. package/dist/protocol/ProvableTransactionHook.js +28 -0
  106. package/dist/protocol/ProvableTransactionHook.js.map +1 -0
  107. package/dist/protocol/TransitioningProtocolModule.d.ts +10 -0
  108. package/dist/protocol/TransitioningProtocolModule.d.ts.map +1 -0
  109. package/dist/protocol/TransitioningProtocolModule.js +9 -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 +52 -37
  136. package/dist/prover/block/BlockProver.d.ts.map +1 -1
  137. package/dist/prover/block/BlockProver.js +327 -107
  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 -48
  152. package/dist/prover/statetransition/StateTransitionProvable.d.ts.map +1 -1
  153. package/dist/prover/statetransition/StateTransitionProvable.js +10 -5
  154. package/dist/prover/statetransition/StateTransitionProvable.js.map +1 -0
  155. package/dist/prover/statetransition/StateTransitionProver.d.ts +29 -17
  156. package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -1
  157. package/dist/prover/statetransition/StateTransitionProver.js +171 -73
  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 +53 -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 +119 -0
  184. package/dist/settlement/contracts/BridgeContract.d.ts.map +1 -0
  185. package/dist/settlement/contracts/BridgeContract.js +269 -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 +494 -0
  252. package/dist/settlement/messages/OutgoingMessageArgument.d.ts.map +1 -0
  253. package/dist/settlement/messages/OutgoingMessageArgument.js +40 -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 +25 -0
  260. package/dist/settlement/modularity/OutgoingMessageProcessor.d.ts.map +1 -0
  261. package/dist/settlement/modularity/OutgoingMessageProcessor.js +30 -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 +68 -0
  280. package/dist/state/State.d.ts.map +1 -0
  281. package/dist/state/State.js +141 -0
  282. package/dist/state/State.js.map +1 -0
  283. package/dist/state/StateMap.d.ts +37 -0
  284. package/dist/state/StateMap.d.ts.map +1 -0
  285. package/dist/state/StateMap.js +56 -0
  286. package/dist/state/StateMap.js.map +1 -0
  287. package/dist/state/StateService.d.ts +6 -0
  288. package/dist/state/StateService.d.ts.map +1 -0
  289. package/dist/state/StateService.js +2 -0
  290. package/dist/state/StateService.js.map +1 -0
  291. package/dist/state/StateServiceProvider.d.ts +8 -0
  292. package/dist/state/StateServiceProvider.d.ts.map +1 -0
  293. package/dist/state/StateServiceProvider.js +37 -0
  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 +42 -0
  298. package/dist/state/WitnessBlockContext.js.map +1 -0
  299. package/dist/state/assert/assert.d.ts +12 -0
  300. package/dist/state/assert/assert.d.ts.map +1 -0
  301. package/dist/state/assert/assert.js +33 -0
  302. package/dist/state/assert/assert.js.map +1 -0
  303. package/dist/state/context/RuntimeMethodExecutionContext.d.ts +193 -0
  304. package/dist/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -0
  305. package/dist/state/context/RuntimeMethodExecutionContext.js +138 -0
  306. package/dist/state/context/RuntimeMethodExecutionContext.js.map +1 -0
  307. package/dist/state/context/TransitionMethodExecutionContext.d.ts +23 -0
  308. package/dist/state/context/TransitionMethodExecutionContext.d.ts.map +1 -0
  309. package/dist/state/context/TransitionMethodExecutionContext.js +6 -0
  310. package/dist/state/context/TransitionMethodExecutionContext.js.map +1 -0
  311. package/dist/state/protocol/ProtocolState.d.ts +13 -0
  312. package/dist/state/protocol/ProtocolState.d.ts.map +1 -0
  313. package/dist/state/protocol/ProtocolState.js +58 -0
  314. package/dist/state/protocol/ProtocolState.js.map +1 -0
  315. package/dist/utils/FieldOptions.d.ts +62 -0
  316. package/dist/utils/FieldOptions.d.ts.map +1 -0
  317. package/dist/utils/FieldOptions.js +13 -0
  318. package/dist/utils/FieldOptions.js.map +1 -0
  319. package/dist/utils/MinaPrefixedProvableHashList.d.ts +20 -0
  320. package/dist/utils/MinaPrefixedProvableHashList.d.ts.map +1 -0
  321. package/dist/utils/MinaPrefixedProvableHashList.js +49 -0
  322. package/dist/utils/MinaPrefixedProvableHashList.js.map +1 -0
  323. package/dist/utils/PrefixedProvableHashList.d.ts +3 -2
  324. package/dist/utils/PrefixedProvableHashList.d.ts.map +1 -1
  325. package/dist/utils/PrefixedProvableHashList.js +5 -1
  326. package/dist/utils/PrefixedProvableHashList.js.map +1 -0
  327. package/dist/utils/ProvableHashList.d.ts +27 -4
  328. package/dist/utils/ProvableHashList.d.ts.map +1 -1
  329. package/dist/utils/ProvableHashList.js +51 -3
  330. package/dist/utils/ProvableHashList.js.map +1 -0
  331. package/dist/utils/ProvableReductionHashList.d.ts +18 -0
  332. package/dist/utils/ProvableReductionHashList.d.ts.map +1 -0
  333. package/dist/utils/ProvableReductionHashList.js +54 -0
  334. package/dist/utils/ProvableReductionHashList.js.map +1 -0
  335. package/dist/utils/StateTransitionReductionList.d.ts +11 -0
  336. package/dist/utils/StateTransitionReductionList.d.ts.map +1 -0
  337. package/dist/utils/StateTransitionReductionList.js +61 -0
  338. package/dist/utils/StateTransitionReductionList.js.map +1 -0
  339. package/dist/utils/utils.d.ts +11 -5
  340. package/dist/utils/utils.d.ts.map +1 -1
  341. package/dist/utils/utils.js +13 -13
  342. package/dist/utils/utils.js.map +1 -0
  343. package/jest.config.cjs +12 -1
  344. package/package.json +11 -9
  345. package/src/hashing/mina-prefixes.ts +10 -0
  346. package/src/hashing/protokit-prefixes.ts +37 -0
  347. package/src/hooks/AccountStateHook.ts +80 -0
  348. package/src/hooks/BlockHeightHook.ts +17 -0
  349. package/src/hooks/LastStateRootBlockHook.ts +25 -0
  350. package/src/hooks/NoopBlockHook.ts +24 -0
  351. package/src/hooks/NoopSettlementHook.ts +20 -0
  352. package/src/hooks/NoopTransactionHook.ts +13 -0
  353. package/src/index.ts +59 -9
  354. package/src/model/AppliedStateTransitionBatch.ts +16 -0
  355. package/src/model/MethodPublicOutput.ts +3 -1
  356. package/src/model/Option.ts +99 -73
  357. package/src/model/Path.ts +9 -5
  358. package/src/model/RuntimeLike.ts +12 -0
  359. package/src/model/StateTransition.ts +19 -5
  360. package/src/model/StateTransitionProvableBatch.ts +114 -12
  361. package/src/model/Transaction.ts +3 -1
  362. package/src/model/network/NetworkState.ts +22 -2
  363. package/src/model/transaction/AuthorizedTransaction.ts +50 -0
  364. package/src/model/transaction/RuntimeTransaction.ts +86 -15
  365. package/src/model/transaction/ValueOption.ts +28 -0
  366. package/src/protocol/Protocol.ts +201 -69
  367. package/src/protocol/ProtocolEnvironment.ts +10 -0
  368. package/src/protocol/ProtocolModule.ts +16 -15
  369. package/src/protocol/ProvableBlockHook.ts +67 -0
  370. package/src/protocol/ProvableTransactionHook.ts +96 -0
  371. package/src/protocol/TransitioningProtocolModule.ts +12 -0
  372. package/src/prover/accumulators/AppliedBatchHashList.ts +32 -0
  373. package/src/prover/accumulators/BlockHashList.ts +117 -0
  374. package/src/prover/accumulators/StateTransitionReductionList.ts +92 -0
  375. package/src/prover/accumulators/TransactionHashList.ts +9 -0
  376. package/src/prover/accumulators/WitnessedRootHashList.ts +62 -0
  377. package/src/prover/block/BlockProvable.ts +360 -28
  378. package/src/prover/block/BlockProver.ts +721 -186
  379. package/src/prover/block/accummulators/BlockHashMerkleTree.ts +24 -0
  380. package/src/prover/block/accummulators/RuntimeVerificationKeyTree.ts +24 -0
  381. package/src/prover/block/services/RuntimeVerificationKeyRootService.ts +20 -0
  382. package/src/prover/statetransition/StateTransitionProvable.ts +26 -19
  383. package/src/prover/statetransition/StateTransitionProver.ts +337 -126
  384. package/src/prover/transaction/TransactionProvable.ts +183 -0
  385. package/src/prover/transaction/TransactionProver.ts +561 -0
  386. package/src/prover/utils.ts +108 -0
  387. package/src/settlement/ContractArgsRegistry.ts +60 -0
  388. package/src/settlement/ContractModule.ts +31 -0
  389. package/src/settlement/SettlementContractModule.ts +150 -0
  390. package/src/settlement/contracts/BridgeContract.ts +385 -0
  391. package/src/settlement/contracts/BridgeContractProtocolModule.ts +49 -0
  392. package/src/settlement/contracts/BridgingSettlementContractModule.ts +116 -0
  393. package/src/settlement/contracts/DispatchContractProtocolModule.ts +77 -0
  394. package/src/settlement/contracts/DispatchSmartContract.ts +359 -0
  395. package/src/settlement/contracts/SettlementSmartContractModule.ts +79 -0
  396. package/src/settlement/contracts/TokenBridgeTree.ts +73 -0
  397. package/src/settlement/contracts/authorizations/ContractAuthorization.ts +11 -0
  398. package/src/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.ts +16 -0
  399. package/src/settlement/contracts/authorizations/UpdateMessagesHashAuth.ts +16 -0
  400. package/src/settlement/contracts/settlement/BridgingSettlementContract.ts +283 -0
  401. package/src/settlement/contracts/settlement/SettlementBase.ts +249 -0
  402. package/src/settlement/contracts/settlement/SettlementContract.ts +75 -0
  403. package/src/settlement/messages/Deposit.ts +7 -0
  404. package/src/settlement/messages/OutgoingMessage.ts +17 -0
  405. package/src/settlement/messages/OutgoingMessageArgument.ts +53 -0
  406. package/src/settlement/modularity/OutgoingMessageProcessor.ts +65 -0
  407. package/src/settlement/modularity/ProvableSettlementHook.ts +36 -0
  408. package/src/settlement/modularity/types.ts +23 -0
  409. package/src/settlement/modules/NetworkStateSettlementModule.ts +42 -0
  410. package/src/state/State.ts +190 -0
  411. package/src/state/StateMap.ts +73 -0
  412. package/src/state/StateService.ts +6 -0
  413. package/src/state/StateServiceProvider.ts +37 -0
  414. package/src/state/WitnessBlockContext.ts +50 -0
  415. package/src/state/assert/assert.ts +38 -0
  416. package/src/state/context/RuntimeMethodExecutionContext.ts +181 -0
  417. package/src/state/context/TransitionMethodExecutionContext.ts +26 -0
  418. package/src/state/protocol/ProtocolState.ts +98 -0
  419. package/src/utils/FieldOptions.ts +13 -0
  420. package/src/utils/MinaPrefixedProvableHashList.ts +70 -0
  421. package/src/utils/PrefixedProvableHashList.ts +6 -2
  422. package/src/utils/ProvableHashList.ts +109 -4
  423. package/src/utils/ProvableReductionHashList.ts +77 -0
  424. package/src/utils/utils.ts +21 -16
  425. package/test/BlockProver.test.ts +161 -74
  426. package/test/Protocol.test.ts +20 -10
  427. package/test/State.test.ts +45 -0
  428. package/test/StateTransition.test.ts +57 -65
  429. package/test/TestingProtocol.ts +36 -0
  430. package/test/compiling/types.ts +28 -0
  431. package/test/model/Option.test.ts +72 -0
  432. package/test/model/StateTransitionProvableBatch.test.ts +137 -0
  433. package/test/modularity/types.ts +35 -0
  434. package/test/prover/block/BlockProver.test.ts +18 -0
  435. package/test/prover/statetransition/StateTransitionProver.test.ts +261 -0
  436. package/test/state/assert/assert.test.ts +56 -0
  437. package/test/tsconfig.json +7 -0
  438. package/test/utils/ProvableHashList.test.ts +44 -0
  439. package/test/utils/ProvableReductionHashList.test.ts +117 -0
  440. package/test/utils.test.ts +0 -3
  441. package/LICENSE.md +0 -201
  442. package/dist/model/transaction/ProtocolTransaction.d.ts +0 -70
  443. package/dist/model/transaction/ProtocolTransaction.d.ts.map +0 -1
  444. package/dist/model/transaction/ProtocolTransaction.js +0 -18
  445. package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts +0 -16
  446. package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts.map +0 -1
  447. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts +0 -7
  448. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts.map +0 -1
  449. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts +0 -25
  450. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts.map +0 -1
  451. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.js +0 -77
  452. package/dist/utils/merkletree/MerkleTreeStore.d.ts +0 -11
  453. package/dist/utils/merkletree/MerkleTreeStore.d.ts.map +0 -1
  454. package/dist/utils/merkletree/MerkleTreeStore.js +0 -1
  455. package/dist/utils/merkletree/RollupMerkleTree.d.ts +0 -130
  456. package/dist/utils/merkletree/RollupMerkleTree.d.ts.map +0 -1
  457. package/dist/utils/merkletree/RollupMerkleTree.js +0 -244
  458. package/src/model/Option.test.ts +0 -21
  459. package/src/model/transaction/ProtocolTransaction.ts +0 -25
  460. package/src/prover/statetransition/StateTransitionWitnessProvider.ts +0 -24
  461. package/src/prover/statetransition/StateTransitionWitnessProviderReference.ts +0 -17
  462. package/src/utils/merkletree/InMemoryMerkleTreeStorage.ts +0 -106
  463. package/src/utils/merkletree/MerkleTreeStore.ts +0 -15
  464. package/src/utils/merkletree/RollupMerkleTree.ts +0 -255
  465. package/src/utils/merkletree/VirtualMerkleTreeStore.ts +0 -21
  466. package/tsconfig.test.json +0 -9
@@ -1,233 +1,615 @@
1
- /* eslint-disable max-lines */
2
- import { Experimental, Field, type Proof, Provable, SelfProof } from "snarkyjs";
3
- import { inject, injectable } from "tsyringe";
1
+ import { Bool, Field, Provable, SelfProof, ZkProgram } from "o1js";
2
+ import { container, inject, injectable, injectAll } from "tsyringe";
4
3
  import {
4
+ AreProofsEnabled,
5
+ CompilableModule,
6
+ CompileArtifact,
7
+ CompileRegistry,
8
+ log,
9
+ NonMethods,
5
10
  PlainZkProgram,
6
11
  provableMethod,
12
+ reduceSequential,
7
13
  WithZkProgrammable,
8
14
  ZkProgrammable,
9
15
  } from "@proto-kit/common";
10
16
 
11
- import { DefaultProvableHashList } from "../../utils/ProvableHashList";
12
- import { MethodPublicOutput } from "../../model/MethodPublicOutput";
13
17
  import { ProtocolModule } from "../../protocol/ProtocolModule";
14
18
  import {
15
19
  StateTransitionProof,
20
+ StateTransitionProvable,
16
21
  StateTransitionProverPublicInput,
17
22
  StateTransitionProverPublicOutput,
18
23
  } from "../statetransition/StateTransitionProvable";
19
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";
20
44
 
21
45
  import {
46
+ BlockArguments,
47
+ BlockArgumentsBatch,
48
+ BlockProof,
22
49
  BlockProvable,
23
- BlockProverExecutionData,
24
- BlockProverProof,
25
50
  BlockProverPublicInput,
26
51
  BlockProverPublicOutput,
52
+ BlockProverState,
53
+ BlockProverStateInput,
27
54
  } from "./BlockProvable";
55
+ import {
56
+ BlockHashMerkleTreeWitness,
57
+ BlockHashTreeEntry,
58
+ } from "./accummulators/BlockHashMerkleTree";
28
59
 
29
60
  const errors = {
30
- stateProofNotStartingAtZero: () =>
31
- "StateProof not starting ST-commitment at zero",
32
-
33
- stateTransitionsHashNotEqual: () =>
34
- "StateTransition list commitments are not equal",
61
+ propertyNotMatchingStep: (propertyName: string, step: string) =>
62
+ `${propertyName} not matching: ${step}`,
35
63
 
36
64
  propertyNotMatching: (propertyName: string) => `${propertyName} not matching`,
37
-
38
- stateRootNotMatching: (step: string) => `StateRoots not matching ${step}`,
39
-
40
- transactionsHashNotMatching: (step: string) =>
41
- `transactions hash not matching ${step}`,
42
65
  };
43
66
 
44
- export interface BlockProverState {
45
- // The current state root of the block prover
46
- stateRoot: Field;
67
+ type BlockHookArgument<T extends "before" | "after"> = T extends "before"
68
+ ? BeforeBlockHookArguments
69
+ : AfterBlockHookArguments;
47
70
 
48
- /**
49
- * The current commitment of the transaction-list which
50
- * will at the end equal the bundle hash
51
- */
52
- transactionsHash: Field;
53
-
54
- /**
55
- * The network state which gives access to values such as blockHeight
56
- * This value is the same for the whole batch (L2 block)
57
- */
58
- networkStateHash: Field;
59
- }
60
-
61
- /**
62
- * BlockProver class, which aggregates a AppChainProof and
63
- * a StateTransitionProof into a single BlockProof, that can
64
- * then be merged to be committed to the base-layer contract
65
- */
66
- @injectable()
67
- export class BlockProver
68
- extends ProtocolModule<BlockProverPublicInput, BlockProverPublicOutput>
69
- implements BlockProvable
70
- {
71
+ export class BlockProverProgrammable extends ZkProgrammable<
72
+ BlockProverPublicInput,
73
+ BlockProverPublicOutput
74
+ > {
71
75
  public constructor(
72
- @inject("StateTransitionProver")
73
- private readonly stateTransitionProver: ZkProgrammable<
76
+ private readonly prover: BlockProver,
77
+ public readonly stateTransitionProver: ZkProgrammable<
74
78
  StateTransitionProverPublicInput,
75
79
  StateTransitionProverPublicOutput
76
80
  >,
77
- @inject("Runtime")
78
- private readonly runtime: WithZkProgrammable<void, MethodPublicOutput>
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
- /**
84
- * Applies and checks the two proofs and applies the corresponding state
85
- * changes to the given state
86
- *
87
- * @param state The from-state of the BlockProver
88
- * @param stateTransitionProof
89
- * @param appProof
90
- * @returns The new BlockProver-state to be used as public output
91
- */
92
- public applyTransaction(
93
- state: BlockProverState,
94
- stateTransitionProof: Proof<
95
- StateTransitionProverPublicInput,
96
- StateTransitionProverPublicOutput
97
- >,
98
- appProof: Proof<void, MethodPublicOutput>,
99
- { transaction, networkState }: BlockProverExecutionData
100
- ): BlockProverState {
101
- appProof.verify();
102
- stateTransitionProof.verify();
91
+ name = "BlockProver";
92
+
93
+ public get areProofsEnabled(): AreProofsEnabled | undefined {
94
+ return this.prover.areProofsEnabled;
95
+ }
103
96
 
104
- const stateTo = { ...state };
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
+ };
105
113
 
106
- // eslint-disable-next-line no-warning-comments
107
- // TODO Check methodId?
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
+ }
108
142
 
109
- // Checks for the stateTransitionProof and appProof matching
110
- stateTransitionProof.publicInput.stateTransitionsHash.assertEquals(
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,
111
162
  Field(0),
112
- errors.stateProofNotStartingAtZero()
163
+ apply,
164
+ "State for STProof has to be empty at the end"
113
165
  );
114
166
 
115
- appProof.publicOutput.stateTransitionsHash.assertEquals(
116
- stateTransitionProof.publicOutput.stateTransitionsHash,
117
- errors.stateTransitionsHashNotEqual()
167
+ assertEqualsIf(
168
+ stateTransitionProof.publicInput.batchesHash,
169
+ Field(0),
170
+ apply,
171
+ "Batcheshash doesn't start at 0"
118
172
  );
119
173
 
120
- // Apply state if status success
121
- state.stateRoot.assertEquals(
122
- stateTransitionProof.publicInput.stateRoot,
174
+ // Assert from state root
175
+ assertEqualsIf(
176
+ stateRoot,
177
+ stateTransitionProof.publicInput.root,
178
+ apply,
123
179
  errors.propertyNotMatching("from state root")
124
180
  );
125
- stateTo.stateRoot = Provable.if(
126
- appProof.publicOutput.status,
127
- stateTransitionProof.publicOutput.stateRoot,
128
- stateTransitionProof.publicInput.stateRoot
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"
129
188
  );
130
189
 
131
- // Check transaction signature
132
- transaction
133
- .validateSignature()
134
- .assertTrue("Transaction signature not valid");
190
+ // Assert root Accumulator
191
+ assertEqualsIf(
192
+ Field(0),
193
+ stateTransitionProof.publicInput.witnessedRootsHash,
194
+ apply,
195
+ errors.propertyNotMatching("from state root")
196
+ );
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"
203
+ );
204
+
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
+ }
224
+
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
+ }
250
+
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
+ );
135
261
 
136
- // Check if the methodId is correct
137
- // to do
262
+ transactionProof.verifyIf(verifyTransactionProof);
263
+
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"
274
+ );
275
+
276
+ state.incomingMessages.fastForwardIf(
277
+ {
278
+ from: transactionProof.publicInput.incomingMessagesHash,
279
+ to: transactionProof.publicOutput.incomingMessagesHash,
280
+ },
281
+ verifyTransactionProof,
282
+ "incomingMessages"
283
+ );
138
284
 
139
- // Check transaction integrity against appProof
140
- const blockTransactionHash =
141
- RuntimeTransaction.fromProtocolTransaction(transaction).hash();
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
+ );
142
292
 
143
- blockTransactionHash.assertEquals(
144
- appProof.publicOutput.transactionHash,
145
- "Transactions provided in AppProof and BlockProof do not match"
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"
146
301
  );
302
+ }
147
303
 
148
- // Check network state integrity against appProof
149
- state.networkStateHash.assertEquals(
150
- appProof.publicOutput.networkStateHash,
151
- "Network state does not match state used in AppProof"
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
152
324
  );
153
- state.networkStateHash.assertEquals(
325
+
326
+ stateInputs.networkStateHash.assertEquals(
154
327
  networkState.hash(),
155
- "Network state provided to BlockProver does not match the publicInput"
328
+ "Network state not valid"
156
329
  );
157
330
 
158
- // Append tx to transaction list
159
- const transactionList = new DefaultProvableHashList(
160
- Field,
161
- state.transactionsHash
331
+ const state = BlockProverState.blockProverFromCommitments(
332
+ stateInputs,
333
+ networkState,
334
+ blockWitness
162
335
  );
163
336
 
164
- const { transactionHash } = appProof.publicOutput;
165
- transactionList.push(transactionHash);
337
+ // Verify block witness validity
338
+ const blockIndex = blockWitness.calculateIndex();
339
+
340
+ blockIndex.assertEquals(stateInputs.blockNumber);
166
341
 
167
- 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
+ );
168
348
 
169
- return stateTo;
349
+ return state;
170
350
  }
171
351
 
172
- @provableMethod()
173
- public proveTransaction(
352
+ private computeOutput(
174
353
  publicInput: BlockProverPublicInput,
175
- stateProof: StateTransitionProof,
176
- appProof: Proof<void, MethodPublicOutput>,
177
- executionData: BlockProverExecutionData
178
- ): BlockProverPublicOutput {
179
- const state: BlockProverState = {
180
- transactionsHash: publicInput.transactionsHash,
181
- stateRoot: publicInput.stateRoot,
182
- networkStateHash: publicInput.networkStateHash,
183
- };
354
+ state: BlockProverState,
355
+ finalizeBlockProof: Bool
356
+ ) {
357
+ const finalizedOutput = state.toCommitments();
184
358
 
185
- const stateTo = this.applyTransaction(
186
- state,
187
- stateProof,
188
- appProof,
189
- executionData
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
+ )
190
371
  );
372
+ }
191
373
 
192
- return new BlockProverPublicOutput({
193
- stateRoot: stateTo.stateRoot,
194
- transactionsHash: stateTo.transactionsHash,
195
- });
374
+ @provableMethod()
375
+ public async proveBlockBatchNoProofs(
376
+ publicInput: BlockProverPublicInput,
377
+ stateWitness: BlockProverStateInput,
378
+ networkState: NetworkState,
379
+ blockWitness: BlockHashMerkleTreeWitness,
380
+ batch: BlockArgumentsBatch,
381
+ finalize: Bool
382
+ ) {
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
+ );
196
394
  }
197
395
 
198
396
  @provableMethod()
199
- public merge(
397
+ public async proveBlockBatchWithProofs(
200
398
  publicInput: BlockProverPublicInput,
201
- proof1: BlockProverProof,
202
- proof2: BlockProverProof
203
- ): BlockProverPublicOutput {
204
- proof1.verify();
205
- proof2.verify();
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
+ }
206
424
 
207
- // Check state
208
- publicInput.stateRoot.assertEquals(
209
- proof1.publicInput.stateRoot,
210
- errors.stateRootNotMatching("publicInput.from -> proof1.from")
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
+ );
444
+
445
+ // Prove blocks iteratively
446
+ state = await reduceSequential(
447
+ batch.batch,
448
+ async (current, block) => {
449
+ const result = await this.proveBlock(current.copy(), block);
450
+
451
+ this.stateServiceProvider.popCurrentStateService();
452
+
453
+ return BlockProverState.choose(block.isDummy, current, result);
454
+ },
455
+ state
211
456
  );
212
- proof1.publicOutput.stateRoot.assertEquals(
213
- proof2.publicInput.stateRoot,
214
- errors.stateRootNotMatching("proof1.to -> proof2.from")
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
+ }
469
+
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
215
488
  );
216
489
 
217
- // Check transaction list
218
- publicInput.transactionsHash.assertEquals(
219
- proof1.publicInput.transactionsHash,
220
- errors.transactionsHashNotMatching("publicInput.from -> proof1.from")
490
+ state.pendingSTBatches.push(beforeBlockResult.batch);
491
+
492
+ // 2. "Apply" TX-type BlockProof
493
+ args.pendingSTBatchesHash.from.assertEquals(
494
+ state.pendingSTBatches.commitment
221
495
  );
222
- proof1.publicOutput.transactionsHash.assertEquals(
223
- proof2.publicInput.transactionsHash,
224
- errors.transactionsHashNotMatching("proof1.to -> proof2.from")
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
- return new BlockProverPublicOutput({
228
- stateRoot: proof2.publicOutput.stateRoot,
229
- transactionsHash: proof2.publicOutput.transactionsHash,
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,
230
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);
538
+
539
+ // 4. Execute afterBlock hooks
540
+ // Witness root
541
+ const hasNoSTBatches = state.pendingSTBatches.commitment.equals(
542
+ startingPendingStBatches
543
+ );
544
+
545
+ // TODO Cover case when we witness root but pendingSTBatches is completely empty
546
+
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(
560
+ state,
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
573
+ );
574
+
575
+ // Apply state and network state changes
576
+ state.pendingSTBatches.push(afterBlockResult.batch);
577
+ state.networkState = afterBlockResult.result;
578
+
579
+ return state;
580
+ }
581
+
582
+ @provableMethod()
583
+ public async merge(
584
+ publicInput: BlockProverPublicInput,
585
+ proof1: BlockProof,
586
+ proof2: BlockProof
587
+ ): Promise<BlockProverPublicOutput> {
588
+ proof1.verify();
589
+ proof2.verify();
590
+
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;
231
613
  }
232
614
 
233
615
  /**
@@ -238,38 +620,85 @@ export class BlockProver
238
620
  public zkProgramFactory(): PlainZkProgram<
239
621
  BlockProverPublicInput,
240
622
  BlockProverPublicOutput
241
- > {
242
- const StateTransitionProofClass =
243
- this.stateTransitionProver.zkProgram.Proof;
244
- const RuntimeProofClass = this.runtime.zkProgrammable.zkProgram.Proof;
245
-
246
- const proveTransaction = this.proveTransaction.bind(this);
247
- const merge = this.merge.bind(this);
248
-
249
- const program = Experimental.ZkProgram({
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);
630
+ const merge = prover.merge.bind(prover);
631
+
632
+ const program = ZkProgram({
633
+ name: "BlockProver",
250
634
  publicInput: BlockProverPublicInput,
251
635
  publicOutput: BlockProverPublicOutput,
252
636
 
253
637
  methods: {
254
- proveTransaction: {
638
+ proveBlockBatchWithProofs: {
255
639
  privateInputs: [
640
+ BlockProverStateInput,
641
+ NetworkState,
642
+ BlockHashMerkleTreeWitness,
643
+ BlockArgumentsBatch,
644
+ Bool,
645
+ Bool,
256
646
  StateTransitionProofClass,
257
- RuntimeProofClass,
258
- BlockProverExecutionData,
647
+ TransactionProofClass,
259
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
+ },
260
675
 
261
- method(
676
+ proveBlockBatchNoProofs: {
677
+ privateInputs: [
678
+ BlockProverStateInput,
679
+ NetworkState,
680
+ BlockHashMerkleTreeWitness,
681
+ BlockArgumentsBatch,
682
+ Bool,
683
+ ],
684
+ async method(
262
685
  publicInput: BlockProverPublicInput,
263
- stateProof: StateTransitionProof,
264
- appProof: Proof<void, MethodPublicOutput>,
265
- executionData: BlockProverExecutionData
686
+ stateWitness: BlockProverStateInput,
687
+ networkState: NetworkState,
688
+ blockWitness: BlockHashMerkleTreeWitness,
689
+ batch: BlockArgumentsBatch,
690
+ finalize: Bool
266
691
  ) {
267
- return proveTransaction(
268
- publicInput,
269
- stateProof,
270
- appProof,
271
- executionData
272
- );
692
+ return {
693
+ publicOutput: await proveBlockBatchNoProofs(
694
+ publicInput,
695
+ stateWitness,
696
+ networkState,
697
+ blockWitness,
698
+ batch,
699
+ finalize
700
+ ),
701
+ };
273
702
  },
274
703
  },
275
704
 
@@ -279,29 +708,135 @@ export class BlockProver
279
708
  SelfProof<BlockProverPublicInput, BlockProverPublicOutput>,
280
709
  ],
281
710
 
282
- method(
711
+ async method(
283
712
  publicInput: BlockProverPublicInput,
284
- proof1: BlockProverProof,
285
- proof2: BlockProverProof
713
+ proof1: BlockProof,
714
+ proof2: BlockProof
286
715
  ) {
287
- return merge(publicInput, proof1, proof2);
716
+ return { publicOutput: await merge(publicInput, proof1, proof2) };
288
717
  },
289
718
  },
290
719
  },
291
720
  });
292
721
 
293
722
  const methods = {
294
- proveTransaction: program.proveTransaction,
723
+ proveBlockBatchWithProofs: program.proveBlockBatchWithProofs,
724
+ proveBlockBatchNoProofs: program.proveBlockBatchNoProofs,
295
725
  merge: program.merge,
296
726
  };
297
727
 
298
- const SelfProofClass = Experimental.ZkProgram.Proof(program);
728
+ const SelfProofClass = ZkProgram.Proof(program);
299
729
 
300
- return {
301
- compile: program.compile.bind(program),
302
- verify: program.verify.bind(program),
303
- Proof: SelfProofClass,
304
- methods,
305
- };
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
+ ];
740
+ }
741
+ }
742
+
743
+ /**
744
+ * BlockProver class, which aggregates a AppChainProof and
745
+ * a StateTransitionProof into a single BlockProof, that can
746
+ * then be merged to be committed to the base-layer contract
747
+ */
748
+ @injectable()
749
+ export class BlockProver
750
+ extends ProtocolModule
751
+ implements BlockProvable, CompilableModule
752
+ {
753
+ public zkProgrammable: BlockProverProgrammable;
754
+
755
+ public constructor(
756
+ @inject("StateTransitionProver")
757
+ public readonly stateTransitionProver: WithZkProgrammable<
758
+ StateTransitionProverPublicInput,
759
+ StateTransitionProverPublicOutput
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
772
+ ) {
773
+ super();
774
+ this.zkProgrammable = new BlockProverProgrammable(
775
+ this,
776
+ stateTransitionProver.zkProgrammable,
777
+ transactionProver.zkProgrammable,
778
+ blockHooks,
779
+ stateServiceProvider
780
+ );
781
+ }
782
+
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(
794
+ publicInput: BlockProverPublicInput,
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
+ );
809
+ }
810
+
811
+ public proveBlockBatchWithProofs(
812
+ publicInput: BlockProverPublicInput,
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(
823
+ publicInput,
824
+ stateWitness,
825
+ networkState,
826
+ blockWitness,
827
+ batch,
828
+ deferSTProof,
829
+ deferTransactionProof,
830
+ stateTransitionProof,
831
+ transactionProof
832
+ );
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);
306
841
  }
307
842
  }