@proto-kit/protocol 0.1.1-develop.190 → 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
@@ -0,0 +1,117 @@
1
+ import { Field, Struct } from "o1js";
2
+
3
+ import { DefaultProvableHashList } from "../../utils/ProvableHashList";
4
+ import type { TransactionProverState } from "../transaction/TransactionProvable";
5
+ import { NetworkState } from "../../model/network/NetworkState";
6
+
7
+ export class BundlePreimage extends Struct({
8
+ preimage: Field,
9
+ fromStateTransitionsHash: Field,
10
+ fromWitnessedRootsHash: Field,
11
+ }) {}
12
+
13
+ export class FieldTransition extends Struct({
14
+ from: Field,
15
+ to: Field,
16
+ }) {}
17
+
18
+ /**
19
+ * A bundle represents an ordered list of transactions and their evaluated effects.
20
+ * Specifically, this includes beforeTransaction, runtime and afterTransaction evaluation,
21
+ * but not block hooks.
22
+ */
23
+ export class Bundle extends Struct({
24
+ // Those are per-block trackers
25
+ networkStateHash: Field,
26
+ transactionsHash: Field,
27
+
28
+ // Those are non-linear trackers that we assert later in the blockprover
29
+ pendingSTBatchesHash: FieldTransition,
30
+ witnessedRootsHash: FieldTransition,
31
+ }) {}
32
+
33
+ /**
34
+ * This hash list collects an ordered list of Bundle instances.
35
+ * "Pushing" onto this list can mean either appending a new bundle or updating the
36
+ * bundle at the tip of this list, according to the following rules:
37
+ * The validated preimage (via checkLastBundleElement) is:
38
+ * - == commitment: A new bundle will be appended
39
+ * - something else: The preimage is the actual preimage, therefore as a operation,
40
+ * the old one will be popped (silently) and the updates bundle will be pushed,
41
+ * resulting in an semantic update of the tip.
42
+ */
43
+ export class BundleHashList extends DefaultProvableHashList<Bundle> {
44
+ public constructor(
45
+ commitment: Field = Field(0),
46
+ // TODO Refactor this into preimage and "auxiliary batch information" - this is confusing
47
+ public preimage?: BundlePreimage
48
+ ) {
49
+ super(Bundle, commitment);
50
+ }
51
+
52
+ /** Verifies this list's preimage against the prover's state
53
+ * The main impact this function has is that it makes the preimage trusted
54
+ * i.e. we can safely use it to add to the bundle/open a new bundle
55
+ */
56
+ public checkLastBundleElement(
57
+ state: TransactionProverState,
58
+ networkState: NetworkState
59
+ ) {
60
+ const { preimage, fromWitnessedRootsHash, fromStateTransitionsHash } =
61
+ this.preimage!;
62
+
63
+ // Check and append to bundlelist
64
+ const lastElement = new Bundle({
65
+ networkStateHash: networkState.hash(),
66
+ transactionsHash: state.transactionList.commitment,
67
+ pendingSTBatchesHash: {
68
+ from: fromStateTransitionsHash,
69
+ to: state.pendingSTBatches.commitment,
70
+ },
71
+ witnessedRootsHash: {
72
+ from: fromWitnessedRootsHash,
73
+ to: state.witnessedRoots.commitment,
74
+ },
75
+ });
76
+
77
+ const newBundle = this.commitment.equals(preimage);
78
+ this.witnessTip(preimage, lastElement)
79
+ .or(newBundle)
80
+ .assertTrue("Last element not valid");
81
+
82
+ newBundle
83
+ .implies(state.transactionList.isEmpty())
84
+ .assertTrue("Transaction list not empty for new bundle");
85
+ }
86
+
87
+ /**
88
+ * This function pushes a new bundle onto this list or updates the bundle at
89
+ * the tip of this list, according to the rules of the preimage algorithms (see class docs)
90
+ */
91
+ public addToBundle(
92
+ state: TransactionProverState,
93
+ networkState: NetworkState
94
+ ) {
95
+ const { preimage, fromWitnessedRootsHash, fromStateTransitionsHash } =
96
+ this.preimage!;
97
+
98
+ const newElement = new Bundle({
99
+ networkStateHash: networkState.hash(),
100
+ transactionsHash: state.transactionList.commitment,
101
+ pendingSTBatchesHash: {
102
+ from: fromStateTransitionsHash,
103
+ to: state.pendingSTBatches.commitment,
104
+ },
105
+ witnessedRootsHash: {
106
+ from: fromWitnessedRootsHash,
107
+ to: state.witnessedRoots.commitment,
108
+ },
109
+ });
110
+
111
+ // We always overwrite here, the invariant is that the preimage is
112
+ // either the actual preimage in case of addition to the existing bundle
113
+ // or the current commitment in case of a new bundle
114
+ this.commitment = preimage;
115
+ this.push(newElement);
116
+ }
117
+ }
@@ -0,0 +1,92 @@
1
+ import { Provable } from "o1js";
2
+
3
+ import { ProvableOption } from "../../model/Option";
4
+ import {
5
+ ProvableStateTransition,
6
+ StateTransition,
7
+ } from "../../model/StateTransition";
8
+ import { ProvableReductionHashList } from "../../utils/ProvableReductionHashList";
9
+
10
+ export class StateTransitionReductionList extends ProvableReductionHashList<ProvableStateTransition> {
11
+ public push(value: ProvableStateTransition) {
12
+ this.pushWithMetadata(value);
13
+
14
+ return this;
15
+ }
16
+
17
+ public pushWithMetadata(value: ProvableStateTransition) {
18
+ return this.pushAndReduce(value, (previous: ProvableStateTransition) => {
19
+ const pathsMatch = previous.path.equals(value.path);
20
+
21
+ // Take the previous.from if the paths match, otherwise leave ST as is
22
+ const from = Provable.if(
23
+ pathsMatch,
24
+ ProvableOption,
25
+ previous.from,
26
+ value.from
27
+ );
28
+ // In case we have a layout like
29
+ // { from: 5, to: 10 }, { from: 10, to: none }
30
+ // we just take the first and discard the second
31
+ const to = Provable.if(
32
+ value.to.isSome.or(pathsMatch.not()),
33
+ ProvableOption,
34
+ value.to,
35
+ previous.to
36
+ );
37
+
38
+ const transition = new ProvableStateTransition({
39
+ path: value.path,
40
+ from: new ProvableOption(from),
41
+ to: new ProvableOption(to),
42
+ });
43
+
44
+ // Assert that connection is correct
45
+ previous.to.value
46
+ .equals(value.from.value)
47
+ .or(
48
+ previous.to.isSome
49
+ .not()
50
+ .and(previous.from.value.equals(value.from.value))
51
+ )
52
+ .or(pathsMatch.not())
53
+ .assertTrue();
54
+
55
+ return [transition, pathsMatch];
56
+ });
57
+ }
58
+
59
+ public toField() {
60
+ return this.commitment;
61
+ }
62
+ }
63
+
64
+ export function reduceStateTransitions(
65
+ transitions: StateTransition<unknown>[]
66
+ ): StateTransition<unknown>[] {
67
+ const reduced: StateTransition<unknown>[] = [];
68
+
69
+ transitions.forEach((st) => {
70
+ if (reduced.length === 0) {
71
+ reduced.push(st);
72
+ return;
73
+ }
74
+
75
+ const last = reduced.at(-1)!;
76
+ if (last.path.equals(st.path).toBoolean()) {
77
+ if (st.toValue.isSome.toBoolean()) {
78
+ reduced.pop();
79
+ reduced.push(
80
+ new StateTransition<unknown>(st.path, last.fromValue, st.toValue)
81
+ );
82
+ } else {
83
+ // Do nothing, because we discard that ST
84
+ // { from: 5, to: 10 }, { from: 10, to: none }
85
+ // cancel the 2nd
86
+ }
87
+ } else {
88
+ reduced.push(st);
89
+ }
90
+ });
91
+ return reduced;
92
+ }
@@ -0,0 +1,9 @@
1
+ import { Field } from "o1js";
2
+
3
+ import { DefaultProvableHashList } from "../../utils/ProvableHashList";
4
+
5
+ export class TransactionHashList extends DefaultProvableHashList<Field> {
6
+ public constructor(commitment: Field = Field(0)) {
7
+ super(Field, commitment);
8
+ }
9
+ }
@@ -0,0 +1,62 @@
1
+ import { Bool, Field, Provable, Struct } from "o1js";
2
+
3
+ import { DefaultProvableHashList } from "../../utils/ProvableHashList";
4
+
5
+ /**
6
+ * Link between a certain applied batch stack and a given root hash that the
7
+ * stack has to evaluate to at that given point in time
8
+ */
9
+ export class WitnessedRoot extends Struct({
10
+ appliedBatchListState: Field,
11
+ root: Field,
12
+ }) {}
13
+
14
+ export class WitnessedRootWitness extends Struct({
15
+ witnessedRoot: Field,
16
+ }) {}
17
+
18
+ /**
19
+ * Accumulator as of section "Intermediary state roots" of the STProver v2 spec
20
+ */
21
+
22
+ export class WitnessedRootHashList extends DefaultProvableHashList<WitnessedRoot> {
23
+ public constructor(
24
+ commitment: Field = Field(0),
25
+ public preimage: Field = Field(0)
26
+ ) {
27
+ super(WitnessedRoot, commitment);
28
+ }
29
+
30
+ /**
31
+ * To be used by the BlockProver or for tracing
32
+ *
33
+ * The main purpose of this method compared to the simple push methods
34
+ * is for deduplicating witnessed roots. We need to do this because the
35
+ * STProver can only witness once per batch, therefore if multiple witness
36
+ * points fall back to the same ST (because any batches in between were empty),
37
+ * this has to be detected and compensated for.
38
+ * This function does this using the preimage of the current list state.
39
+ */
40
+ public witnessRoot(witnessedRoot: WitnessedRoot, condition: Bool) {
41
+ // Note, we don't have to validate the preimage here because of the following
42
+ // 1. If the sequencer doesn't provide the correct witness, the BlockProver's
43
+ // equality check will fail
44
+ // 2. If the list is empty, no preimage exists, therefore condition (2) doesn't
45
+ // apply, which is the same outcome when the sequencer provides an arbitrary witness
46
+ const preimageCheckList = new WitnessedRootHashList(this.preimage).push(
47
+ witnessedRoot
48
+ );
49
+
50
+ // Conditions:
51
+ // (1) don't append if witnessedRoot == finalizedRoot -> Already covered in BlockProver
52
+ // (2) don't append if preimage.push({ finalizedRoot, pendingSTBatchesHash }) == this.commitment
53
+ const skipPush = preimageCheckList.commitment.equals(this.commitment);
54
+
55
+ const fromCommitment = this.commitment;
56
+
57
+ const pushCondition = condition.and(skipPush.not());
58
+ this.pushIf(witnessedRoot, pushCondition);
59
+
60
+ this.preimage = Provable.if(pushCondition, fromCommitment, this.preimage);
61
+ }
62
+ }
@@ -1,45 +1,377 @@
1
- import { Field, Proof, Struct } from "snarkyjs";
2
- import { ZkProgrammable } from "@proto-kit/common";
1
+ import { Bool, Field, Poseidon, Proof, Provable, Struct } from "o1js";
2
+ import { CompilableModule, WithZkProgrammable } from "@proto-kit/common";
3
3
 
4
4
  import { StateTransitionProof } from "../statetransition/StateTransitionProvable";
5
- import { MethodPublicOutput } from "../../model/MethodPublicOutput";
6
- import { ProtocolTransaction } from "../../model/transaction/ProtocolTransaction";
7
5
  import { NetworkState } from "../../model/network/NetworkState";
6
+ import { TransactionHashList } from "../accumulators/TransactionHashList";
7
+ import { MinaActionsHashList } from "../../utils/MinaPrefixedProvableHashList";
8
+ import { AppliedBatchHashList } from "../accumulators/AppliedBatchHashList";
9
+ import {
10
+ WitnessedRootHashList,
11
+ WitnessedRootWitness,
12
+ } from "../accumulators/WitnessedRootHashList";
13
+ import { TransactionProof } from "../transaction/TransactionProvable";
14
+ import { BundleHashList, FieldTransition } from "../accumulators/BlockHashList";
15
+ import { NonMethods } from "../../utils/utils";
8
16
 
9
- export class BlockProverPublicInput extends Struct({
17
+ import { BlockHashMerkleTreeWitness } from "./accummulators/BlockHashMerkleTree";
18
+
19
+ export const BLOCK_ARGUMENT_BATCH_SIZE = 4;
20
+
21
+ export class BlockArguments extends Struct({
22
+ afterBlockRootWitness: WitnessedRootWitness,
10
23
  transactionsHash: Field,
11
- stateRoot: Field,
12
- networkStateHash: Field,
24
+ pendingSTBatchesHash: FieldTransition,
25
+ witnessedRootsHash: FieldTransition,
26
+ isDummy: Bool,
27
+ }) {
28
+ public static noop(
29
+ state: NonMethods<Omit<BlockProverState, "blockWitness">>,
30
+ stateRoot: Field
31
+ ) {
32
+ return new BlockArguments({
33
+ afterBlockRootWitness: {
34
+ witnessedRoot: stateRoot,
35
+ },
36
+ transactionsHash: Field(0),
37
+ pendingSTBatchesHash: {
38
+ from: state.pendingSTBatches.commitment,
39
+ to: state.pendingSTBatches.commitment,
40
+ },
41
+ witnessedRootsHash: {
42
+ from: state.witnessedRoots.commitment,
43
+ to: state.witnessedRoots.commitment,
44
+ },
45
+ isDummy: Bool(true),
46
+ });
47
+ }
48
+ }
49
+
50
+ export class BlockArgumentsBatch extends Struct({
51
+ batch: Provable.Array(BlockArguments, BLOCK_ARGUMENT_BATCH_SIZE),
13
52
  }) {}
14
53
 
15
- export class BlockProverPublicOutput extends Struct({
16
- transactionsHash: Field,
54
+ const BlockProverStateBaseFields = {
55
+ eternalTransactionsHash: Field,
56
+ incomingMessagesHash: Field,
17
57
  stateRoot: Field,
18
- }) {}
58
+ blockHashRoot: Field,
59
+ blockNumber: Field,
60
+ networkStateHash: Field,
61
+ };
19
62
 
20
- export type BlockProverProof = Proof<
21
- BlockProverPublicInput,
22
- BlockProverPublicOutput
23
- >;
63
+ export class BlockProverPublicInput extends Struct({
64
+ // Tracker of the current block prover state
65
+ proverStateRemainder: Field,
66
+ ...BlockProverStateBaseFields,
67
+ }) {
68
+ public equals(input: BlockProverPublicInput): Bool {
69
+ const output2 = BlockProverPublicInput.toFields(input);
70
+ const output1 = BlockProverPublicInput.toFields(this);
71
+ return output1
72
+ .map((value1, index) => value1.equals(output2[index]))
73
+ .reduce((a, b) => a.and(b));
74
+ }
24
75
 
25
- export class BlockProverExecutionData extends Struct({
26
- transaction: ProtocolTransaction,
27
- networkState: NetworkState,
28
- // accountstate
29
- }) {}
76
+ public clone() {
77
+ return new BlockProverPublicInput(
78
+ BlockProverPublicInput.fromFields(BlockProverPublicInput.toFields(this))
79
+ );
80
+ }
81
+ }
82
+
83
+ export const BlockProverStateCommitments = {
84
+ remainders: {
85
+ // Commitment to the list of unprocessed (pending) batches of STs that need to be proven
86
+ pendingSTBatchesHash: Field,
87
+ witnessedRootsHash: Field,
88
+ bundlesHash: Field,
89
+ witnessedRootsPreimage: Field,
90
+ },
91
+ ...BlockProverStateBaseFields,
92
+ };
93
+
94
+ export class BlockProverStateInput extends Struct(BlockProverStateCommitments) {
95
+ public hash() {
96
+ return Poseidon.hash(BlockProverStateInput.toFields(this));
97
+ }
98
+
99
+ public static fromPublicInput(input: BlockProverPublicInput) {
100
+ return new BlockProverStateInput({
101
+ remainders: {
102
+ bundlesHash: Field(0),
103
+ pendingSTBatchesHash: Field(0),
104
+ witnessedRootsHash: Field(0),
105
+ witnessedRootsPreimage: Field(0),
106
+ },
107
+ eternalTransactionsHash: input.eternalTransactionsHash,
108
+ incomingMessagesHash: input.incomingMessagesHash,
109
+ stateRoot: input.stateRoot,
110
+ blockHashRoot: input.blockHashRoot,
111
+ blockNumber: input.blockNumber,
112
+ networkStateHash: input.networkStateHash,
113
+ });
114
+ }
115
+
116
+ public finalize(condition: Bool) {
117
+ condition
118
+ .implies(
119
+ this.remainders.bundlesHash
120
+ .equals(0)
121
+ .and(this.remainders.pendingSTBatchesHash.equals(0))
122
+ .and(this.remainders.witnessedRootsHash.equals(0))
123
+ )
124
+ .assertTrue("Remainers not fully removed");
125
+
126
+ return new BlockProverPublicInput({
127
+ proverStateRemainder: Field(0),
128
+ eternalTransactionsHash: this.eternalTransactionsHash,
129
+ incomingMessagesHash: this.incomingMessagesHash,
130
+ stateRoot: this.stateRoot,
131
+ blockHashRoot: this.blockHashRoot,
132
+ blockNumber: this.blockNumber,
133
+ networkStateHash: this.networkStateHash,
134
+ });
135
+ }
136
+ }
137
+
138
+ export class BlockProverPublicOutput extends BlockProverPublicInput {}
139
+
140
+ export class BlockProverState {
141
+ /**
142
+ * The network state which gives access to values such as blockHeight
143
+ * This value is the same for the whole batch (L2 block)
144
+ */
145
+ bundleList: BundleHashList;
146
+
147
+ /**
148
+ * A variant of the transactionsHash that is never reset.
149
+ * Thought for usage in the sequence state mempool.
150
+ * In comparison, transactionsHash restarts at 0 for every new block
151
+ */
152
+ eternalTransactionsList: TransactionHashList;
153
+
154
+ pendingSTBatches: AppliedBatchHashList;
155
+
156
+ incomingMessages: MinaActionsHashList;
157
+
158
+ witnessedRoots: WitnessedRootHashList;
159
+
160
+ /**
161
+ * The current state root of the block prover
162
+ */
163
+ stateRoot: Field;
164
+
165
+ /**
166
+ * The root of the merkle tree encoding all block hashes,
167
+ * see `BlockHashMerkleTree`
168
+ */
169
+ blockHashRoot: Field;
170
+
171
+ blockNumber: Field;
172
+
173
+ blockWitness: BlockHashMerkleTreeWitness;
174
+
175
+ networkState: NetworkState;
176
+
177
+ constructor(args: {
178
+ networkState: NetworkState;
179
+ eternalTransactionsList: TransactionHashList;
180
+ pendingSTBatches: AppliedBatchHashList;
181
+ stateRoot: Field;
182
+ blockHashRoot: Field;
183
+ blockNumber: Field;
184
+ bundleList: BundleHashList;
185
+ blockWitness: BlockHashMerkleTreeWitness;
186
+ witnessedRoots: WitnessedRootHashList;
187
+ incomingMessages: MinaActionsHashList;
188
+ }) {
189
+ this.bundleList = args.bundleList;
190
+ this.eternalTransactionsList = args.eternalTransactionsList;
191
+ this.pendingSTBatches = args.pendingSTBatches;
192
+ this.stateRoot = args.stateRoot;
193
+ this.blockHashRoot = args.blockHashRoot;
194
+ this.blockNumber = args.blockNumber;
195
+ this.networkState = args.networkState;
196
+ this.blockWitness = args.blockWitness;
197
+ this.witnessedRoots = args.witnessedRoots;
198
+ this.incomingMessages = args.incomingMessages;
199
+ }
200
+
201
+ public toCommitments(): BlockProverStateInput {
202
+ return new BlockProverStateInput({
203
+ remainders: {
204
+ bundlesHash: this.bundleList.commitment,
205
+ pendingSTBatchesHash: this.pendingSTBatches.commitment,
206
+ witnessedRootsHash: this.witnessedRoots.commitment,
207
+ witnessedRootsPreimage: this.witnessedRoots.preimage,
208
+ },
209
+ eternalTransactionsHash: this.eternalTransactionsList.commitment,
210
+ incomingMessagesHash: this.incomingMessages.commitment,
211
+ stateRoot: this.stateRoot,
212
+ blockHashRoot: this.blockHashRoot,
213
+ blockNumber: this.blockNumber,
214
+ networkStateHash: this.networkState.hash(),
215
+ });
216
+ }
217
+
218
+ public static blockProverFromCommitments(
219
+ stateInput: NonMethods<BlockProverStateInput>,
220
+ networkState: NetworkState,
221
+ blockWitness: BlockHashMerkleTreeWitness
222
+ ): BlockProverState {
223
+ return new BlockProverState({
224
+ bundleList: new BundleHashList(stateInput.remainders.bundlesHash),
225
+ eternalTransactionsList: new TransactionHashList(
226
+ stateInput.eternalTransactionsHash
227
+ ),
228
+ incomingMessages: new MinaActionsHashList(
229
+ stateInput.incomingMessagesHash
230
+ ),
231
+ pendingSTBatches: new AppliedBatchHashList(
232
+ stateInput.remainders.pendingSTBatchesHash
233
+ ),
234
+ witnessedRoots: new WitnessedRootHashList(
235
+ stateInput.remainders.witnessedRootsHash,
236
+ stateInput.remainders.witnessedRootsPreimage
237
+ ),
238
+ stateRoot: stateInput.stateRoot,
239
+ blockHashRoot: stateInput.blockHashRoot,
240
+ blockNumber: stateInput.blockNumber,
241
+ networkState,
242
+ blockWitness,
243
+ });
244
+ }
245
+
246
+ public copy() {
247
+ return BlockProverState.fromFields(this.toFields());
248
+ }
249
+
250
+ public toFields() {
251
+ return [
252
+ this.bundleList.commitment,
253
+ this.eternalTransactionsList.commitment,
254
+ this.pendingSTBatches.commitment,
255
+ this.incomingMessages.commitment,
256
+ this.witnessedRoots.commitment,
257
+ this.witnessedRoots.preimage,
258
+ this.stateRoot,
259
+ this.blockHashRoot,
260
+ this.blockNumber,
261
+ ...NetworkState.toFields(this.networkState),
262
+ ...BlockHashMerkleTreeWitness.toFields(this.blockWitness),
263
+ ];
264
+ }
265
+
266
+ // TODO Unit test
267
+ public static fromFields(fields: Field[]) {
268
+ return new BlockProverState({
269
+ bundleList: new BundleHashList(fields[0]),
270
+ eternalTransactionsList: new TransactionHashList(fields[1]),
271
+ pendingSTBatches: new AppliedBatchHashList(fields[2]),
272
+ incomingMessages: new MinaActionsHashList(fields[3]),
273
+ witnessedRoots: new WitnessedRootHashList(fields[4], fields[5]),
274
+ stateRoot: fields[6],
275
+ blockHashRoot: fields[7],
276
+ blockNumber: fields[8],
277
+ networkState: new NetworkState(NetworkState.fromFields(fields.slice(9))),
278
+ blockWitness: new BlockHashMerkleTreeWitness(
279
+ BlockHashMerkleTreeWitness.fromFields(
280
+ fields.slice(9 + NetworkState.sizeInFields())
281
+ )
282
+ ),
283
+ });
284
+ }
285
+
286
+ public static choose(
287
+ condition: Bool,
288
+ a: BlockProverState,
289
+ b: BlockProverState
290
+ ) {
291
+ return new BlockProverState({
292
+ bundleList: new BundleHashList(
293
+ Provable.if(condition, a.bundleList.commitment, b.bundleList.commitment)
294
+ ),
295
+ eternalTransactionsList: new TransactionHashList(
296
+ Provable.if(
297
+ condition,
298
+ a.eternalTransactionsList.commitment,
299
+ b.eternalTransactionsList.commitment
300
+ )
301
+ ),
302
+ pendingSTBatches: new AppliedBatchHashList(
303
+ Provable.if(
304
+ condition,
305
+ a.pendingSTBatches.commitment,
306
+ b.pendingSTBatches.commitment
307
+ )
308
+ ),
309
+ incomingMessages: new MinaActionsHashList(
310
+ Provable.if(
311
+ condition,
312
+ a.incomingMessages.commitment,
313
+ b.incomingMessages.commitment
314
+ )
315
+ ),
316
+ witnessedRoots: new WitnessedRootHashList(
317
+ Provable.if(
318
+ condition,
319
+ a.witnessedRoots.commitment,
320
+ b.witnessedRoots.commitment
321
+ ),
322
+ Provable.if(
323
+ condition,
324
+ a.witnessedRoots.preimage,
325
+ b.witnessedRoots.preimage
326
+ )
327
+ ),
328
+ stateRoot: Provable.if(condition, a.stateRoot, b.stateRoot),
329
+ blockHashRoot: Provable.if(condition, a.blockHashRoot, b.blockHashRoot),
330
+ blockWitness: new BlockHashMerkleTreeWitness(
331
+ Provable.if(
332
+ condition,
333
+ BlockHashMerkleTreeWitness,
334
+ a.blockWitness,
335
+ b.blockWitness
336
+ )
337
+ ),
338
+ blockNumber: Provable.if(condition, a.blockNumber, b.blockNumber),
339
+ networkState: new NetworkState(
340
+ Provable.if(condition, NetworkState, a.networkState, b.networkState)
341
+ ),
342
+ });
343
+ }
344
+ }
345
+
346
+ export type BlockProof = Proof<BlockProverPublicInput, BlockProverPublicOutput>;
30
347
 
31
348
  export interface BlockProvable
32
- extends ZkProgrammable<BlockProverPublicInput, BlockProverPublicOutput> {
33
- proveTransaction: (
349
+ extends WithZkProgrammable<BlockProverPublicInput, BlockProverPublicOutput>,
350
+ CompilableModule {
351
+ proveBlockBatchNoProofs: (
352
+ publicInput: BlockProverPublicInput,
353
+ stateWitness: BlockProverStateInput,
354
+ networkState: NetworkState,
355
+ blockWitness: BlockHashMerkleTreeWitness,
356
+ batch: BlockArgumentsBatch,
357
+ finalize: Bool
358
+ ) => Promise<BlockProverPublicOutput>;
359
+
360
+ proveBlockBatchWithProofs: (
34
361
  publicInput: BlockProverPublicInput,
35
- stateProof: StateTransitionProof,
36
- appProof: Proof<void, MethodPublicOutput>,
37
- executionData: BlockProverExecutionData
38
- ) => BlockProverPublicOutput;
362
+ stateWitness: BlockProverStateInput,
363
+ networkState: NetworkState,
364
+ blockWitness: BlockHashMerkleTreeWitness,
365
+ batch: BlockArgumentsBatch,
366
+ deferSTProof: Bool,
367
+ deferTransactionProof: Bool,
368
+ stateTransitionProof: StateTransitionProof,
369
+ transactionProof: TransactionProof
370
+ ) => Promise<BlockProverPublicOutput>;
39
371
 
40
372
  merge: (
41
373
  publicInput: BlockProverPublicInput,
42
- proof1: BlockProverProof,
43
- proof2: BlockProverProof
44
- ) => BlockProverPublicOutput;
374
+ proof1: BlockProof,
375
+ proof2: BlockProof
376
+ ) => Promise<BlockProverPublicOutput>;
45
377
  }