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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (479) hide show
  1. package/dist/Constants.js +1 -0
  2. package/dist/Constants.js.map +1 -0
  3. package/dist/hashing/mina-prefixes.d.ts +10 -0
  4. package/dist/hashing/mina-prefixes.d.ts.map +1 -0
  5. package/dist/hashing/mina-prefixes.js +10 -0
  6. package/dist/hashing/mina-prefixes.js.map +1 -0
  7. package/dist/hashing/protokit-prefixes.d.ts +10 -0
  8. package/dist/hashing/protokit-prefixes.d.ts.map +1 -0
  9. package/dist/hashing/protokit-prefixes.js +24 -0
  10. package/dist/hashing/protokit-prefixes.js.map +1 -0
  11. package/dist/hooks/AccountStateHook.d.ts +56 -0
  12. package/dist/hooks/AccountStateHook.d.ts.map +1 -0
  13. package/dist/hooks/AccountStateHook.js +62 -0
  14. package/dist/hooks/AccountStateHook.js.map +1 -0
  15. package/dist/hooks/BlockHeightHook.d.ts +7 -0
  16. package/dist/hooks/BlockHeightHook.d.ts.map +1 -0
  17. package/dist/hooks/BlockHeightHook.js +16 -0
  18. package/dist/hooks/BlockHeightHook.js.map +1 -0
  19. package/dist/hooks/LastStateRootBlockHook.d.ts +7 -0
  20. package/dist/hooks/LastStateRootBlockHook.d.ts.map +1 -0
  21. package/dist/hooks/LastStateRootBlockHook.js +16 -0
  22. package/dist/hooks/LastStateRootBlockHook.js.map +1 -0
  23. package/dist/hooks/NoopBlockHook.d.ts +8 -0
  24. package/dist/hooks/NoopBlockHook.d.ts.map +1 -0
  25. package/dist/hooks/NoopBlockHook.js +10 -0
  26. package/dist/hooks/NoopBlockHook.js.map +1 -0
  27. package/dist/hooks/NoopSettlementHook.d.ts +6 -0
  28. package/dist/hooks/NoopSettlementHook.d.ts.map +1 -0
  29. package/dist/{prover/statetransition/StateTransitionWitnessProvider.js → hooks/NoopSettlementHook.js} +8 -7
  30. package/dist/hooks/NoopSettlementHook.js.map +1 -0
  31. package/dist/hooks/NoopTransactionHook.d.ts +6 -0
  32. package/dist/hooks/NoopTransactionHook.d.ts.map +1 -0
  33. package/dist/hooks/NoopTransactionHook.js +11 -0
  34. package/dist/hooks/NoopTransactionHook.js.map +1 -0
  35. package/dist/index.d.ts +51 -13
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +52 -13
  38. package/dist/index.js.map +1 -0
  39. package/dist/model/AppliedStateTransitionBatch.d.ts +114 -0
  40. package/dist/model/AppliedStateTransitionBatch.d.ts.map +1 -0
  41. package/dist/model/AppliedStateTransitionBatch.js +16 -0
  42. package/dist/model/AppliedStateTransitionBatch.js.map +1 -0
  43. package/dist/model/MethodPublicOutput.d.ts +83 -28
  44. package/dist/model/MethodPublicOutput.d.ts.map +1 -1
  45. package/dist/model/MethodPublicOutput.js +4 -1
  46. package/dist/model/MethodPublicOutput.js.map +1 -0
  47. package/dist/model/Option.d.ts +66 -42
  48. package/dist/model/Option.d.ts.map +1 -1
  49. package/dist/model/Option.js +58 -45
  50. package/dist/model/Option.js.map +1 -0
  51. package/dist/model/Path.d.ts +4 -3
  52. package/dist/model/Path.d.ts.map +1 -1
  53. package/dist/model/Path.js +6 -5
  54. package/dist/model/Path.js.map +1 -0
  55. package/dist/model/RuntimeLike.d.ts +11 -0
  56. package/dist/model/RuntimeLike.d.ts.map +1 -0
  57. package/dist/model/RuntimeLike.js +2 -0
  58. package/dist/model/RuntimeLike.js.map +1 -0
  59. package/dist/model/StateTransition.d.ts +58 -18
  60. package/dist/model/StateTransition.d.ts.map +1 -1
  61. package/dist/model/StateTransition.js +13 -4
  62. package/dist/model/StateTransition.js.map +1 -0
  63. package/dist/model/StateTransitionProvableBatch.d.ts +369 -54
  64. package/dist/model/StateTransitionProvableBatch.d.ts.map +1 -1
  65. package/dist/model/StateTransitionProvableBatch.js +74 -51
  66. package/dist/model/StateTransitionProvableBatch.js.map +1 -0
  67. package/dist/model/network/NetworkState.d.ts +105 -9
  68. package/dist/model/network/NetworkState.d.ts.map +1 -1
  69. package/dist/model/network/NetworkState.js +22 -2
  70. package/dist/model/network/NetworkState.js.map +1 -0
  71. package/dist/model/transaction/AuthorizedTransaction.d.ts +122 -0
  72. package/dist/model/transaction/AuthorizedTransaction.d.ts.map +1 -0
  73. package/dist/model/transaction/AuthorizedTransaction.js +39 -0
  74. package/dist/model/transaction/AuthorizedTransaction.js.map +1 -0
  75. package/dist/model/transaction/RuntimeTransaction.d.ts +94 -34
  76. package/dist/model/transaction/RuntimeTransaction.d.ts.map +1 -1
  77. package/dist/model/transaction/RuntimeTransaction.js +72 -11
  78. package/dist/model/transaction/RuntimeTransaction.js.map +1 -0
  79. package/dist/model/transaction/SignedTransaction.d.ts +110 -0
  80. package/dist/model/transaction/SignedTransaction.d.ts.map +1 -0
  81. package/dist/model/transaction/SignedTransaction.js +34 -0
  82. package/dist/model/transaction/SignedTransaction.js.map +1 -0
  83. package/dist/model/transaction/ValueOption.d.ts +187 -0
  84. package/dist/model/transaction/ValueOption.d.ts.map +1 -0
  85. package/dist/model/transaction/ValueOption.js +25 -0
  86. package/dist/model/transaction/ValueOption.js.map +1 -0
  87. package/dist/protocol/Protocol.d.ts +45 -34
  88. package/dist/protocol/Protocol.d.ts.map +1 -1
  89. package/dist/protocol/Protocol.js +115 -57
  90. package/dist/protocol/Protocol.js.map +1 -0
  91. package/dist/protocol/ProtocolEnvironment.d.ts +9 -0
  92. package/dist/protocol/ProtocolEnvironment.d.ts.map +1 -0
  93. package/dist/protocol/ProtocolEnvironment.js +2 -0
  94. package/dist/protocol/ProtocolEnvironment.js.map +1 -0
  95. package/dist/protocol/ProtocolModule.d.ts +7 -6
  96. package/dist/protocol/ProtocolModule.d.ts.map +1 -1
  97. package/dist/protocol/ProtocolModule.js +10 -5
  98. package/dist/protocol/ProtocolModule.js.map +1 -0
  99. package/dist/protocol/ProvableBlockHook.d.ts +29 -0
  100. package/dist/protocol/ProvableBlockHook.d.ts.map +1 -0
  101. package/dist/protocol/ProvableBlockHook.js +20 -0
  102. package/dist/protocol/ProvableBlockHook.js.map +1 -0
  103. package/dist/protocol/ProvableTransactionHook.d.ts +32 -3
  104. package/dist/protocol/ProvableTransactionHook.d.ts.map +1 -1
  105. package/dist/protocol/ProvableTransactionHook.js +25 -0
  106. package/dist/protocol/ProvableTransactionHook.js.map +1 -0
  107. package/dist/protocol/TransitioningProtocolModule.d.ts +6 -1
  108. package/dist/protocol/TransitioningProtocolModule.d.ts.map +1 -1
  109. package/dist/protocol/TransitioningProtocolModule.js +6 -0
  110. package/dist/protocol/TransitioningProtocolModule.js.map +1 -0
  111. package/dist/prover/accumulators/AppliedBatchHashList.d.ts +18 -0
  112. package/dist/prover/accumulators/AppliedBatchHashList.d.ts.map +1 -0
  113. package/dist/prover/accumulators/AppliedBatchHashList.js +25 -0
  114. package/dist/prover/accumulators/AppliedBatchHashList.js.map +1 -0
  115. package/dist/prover/accumulators/BlockHashList.d.ts +263 -0
  116. package/dist/prover/accumulators/BlockHashList.d.ts.map +1 -0
  117. package/dist/prover/accumulators/BlockHashList.js +97 -0
  118. package/dist/prover/accumulators/BlockHashList.js.map +1 -0
  119. package/dist/prover/accumulators/StateTransitionReductionList.d.ts +12 -0
  120. package/dist/prover/accumulators/StateTransitionReductionList.d.ts.map +1 -0
  121. package/dist/prover/accumulators/StateTransitionReductionList.js +64 -0
  122. package/dist/prover/accumulators/StateTransitionReductionList.js.map +1 -0
  123. package/dist/prover/accumulators/TransactionHashList.d.ts +6 -0
  124. package/dist/prover/accumulators/TransactionHashList.d.ts.map +1 -0
  125. package/dist/prover/accumulators/TransactionHashList.js +8 -0
  126. package/dist/prover/accumulators/TransactionHashList.js.map +1 -0
  127. package/dist/prover/accumulators/WitnessedRootHashList.d.ts +123 -0
  128. package/dist/prover/accumulators/WitnessedRootHashList.d.ts.map +1 -0
  129. package/dist/prover/accumulators/WitnessedRootHashList.js +51 -0
  130. package/dist/prover/accumulators/WitnessedRootHashList.js.map +1 -0
  131. package/dist/prover/block/BlockProvable.d.ts +565 -96
  132. package/dist/prover/block/BlockProvable.d.ts.map +1 -1
  133. package/dist/prover/block/BlockProvable.js +196 -12
  134. package/dist/prover/block/BlockProvable.js.map +1 -0
  135. package/dist/prover/block/BlockProver.d.ts +45 -44
  136. package/dist/prover/block/BlockProver.d.ts.map +1 -1
  137. package/dist/prover/block/BlockProver.js +306 -143
  138. package/dist/prover/block/BlockProver.js.map +1 -0
  139. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts +106 -0
  140. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts.map +1 -0
  141. package/dist/prover/block/accummulators/BlockHashMerkleTree.js +25 -0
  142. package/dist/prover/block/accummulators/BlockHashMerkleTree.js.map +1 -0
  143. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.d.ts +139 -0
  144. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.d.ts.map +1 -0
  145. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js +21 -0
  146. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js.map +1 -0
  147. package/dist/prover/block/services/RuntimeVerificationKeyRootService.d.ts +7 -0
  148. package/dist/prover/block/services/RuntimeVerificationKeyRootService.d.ts.map +1 -0
  149. package/dist/prover/{statetransition/StateTransitionWitnessProviderReference.js → block/services/RuntimeVerificationKeyRootService.js} +11 -8
  150. package/dist/prover/block/services/RuntimeVerificationKeyRootService.js.map +1 -0
  151. package/dist/prover/statetransition/StateTransitionProvable.d.ts +137 -64
  152. package/dist/prover/statetransition/StateTransitionProvable.d.ts.map +1 -1
  153. package/dist/prover/statetransition/StateTransitionProvable.js +10 -7
  154. package/dist/prover/statetransition/StateTransitionProvable.js.map +1 -0
  155. package/dist/prover/statetransition/StateTransitionProver.d.ts +26 -24
  156. package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -1
  157. package/dist/prover/statetransition/StateTransitionProver.js +159 -93
  158. package/dist/prover/statetransition/StateTransitionProver.js.map +1 -0
  159. package/dist/prover/transaction/TransactionProvable.d.ts +626 -0
  160. package/dist/prover/transaction/TransactionProvable.d.ts.map +1 -0
  161. package/dist/prover/transaction/TransactionProvable.js +87 -0
  162. package/dist/prover/transaction/TransactionProvable.js.map +1 -0
  163. package/dist/prover/transaction/TransactionProver.d.ts +68 -0
  164. package/dist/prover/transaction/TransactionProver.d.ts.map +1 -0
  165. package/dist/prover/transaction/TransactionProver.js +301 -0
  166. package/dist/prover/transaction/TransactionProver.js.map +1 -0
  167. package/dist/prover/utils.d.ts +19 -0
  168. package/dist/prover/utils.d.ts.map +1 -0
  169. package/dist/prover/utils.js +67 -0
  170. package/dist/prover/utils.js.map +1 -0
  171. package/dist/settlement/ContractArgsRegistry.d.ts +13 -0
  172. package/dist/settlement/ContractArgsRegistry.d.ts.map +1 -0
  173. package/dist/settlement/ContractArgsRegistry.js +58 -0
  174. package/dist/settlement/ContractArgsRegistry.js.map +1 -0
  175. package/dist/settlement/ContractModule.d.ts +16 -0
  176. package/dist/settlement/ContractModule.d.ts.map +1 -0
  177. package/dist/settlement/ContractModule.js +12 -0
  178. package/dist/settlement/ContractModule.js.map +1 -0
  179. package/dist/settlement/SettlementContractModule.d.ts +47 -0
  180. package/dist/settlement/SettlementContractModule.d.ts.map +1 -0
  181. package/dist/settlement/SettlementContractModule.js +81 -0
  182. package/dist/settlement/SettlementContractModule.js.map +1 -0
  183. package/dist/settlement/contracts/BridgeContract.d.ts +114 -0
  184. package/dist/settlement/contracts/BridgeContract.d.ts.map +1 -0
  185. package/dist/settlement/contracts/BridgeContract.js +270 -0
  186. package/dist/settlement/contracts/BridgeContract.js.map +1 -0
  187. package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts +18 -0
  188. package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts.map +1 -0
  189. package/dist/settlement/contracts/BridgeContractProtocolModule.js +42 -0
  190. package/dist/settlement/contracts/BridgeContractProtocolModule.js.map +1 -0
  191. package/dist/settlement/contracts/BridgingSettlementContractModule.d.ts +21 -0
  192. package/dist/settlement/contracts/BridgingSettlementContractModule.d.ts.map +1 -0
  193. package/dist/settlement/contracts/BridgingSettlementContractModule.js +81 -0
  194. package/dist/settlement/contracts/BridgingSettlementContractModule.js.map +1 -0
  195. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts +23 -0
  196. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts.map +1 -0
  197. package/dist/settlement/contracts/DispatchContractProtocolModule.js +55 -0
  198. package/dist/settlement/contracts/DispatchContractProtocolModule.js.map +1 -0
  199. package/dist/settlement/contracts/DispatchSmartContract.d.ts +50 -0
  200. package/dist/settlement/contracts/DispatchSmartContract.d.ts.map +1 -0
  201. package/dist/settlement/contracts/DispatchSmartContract.js +234 -0
  202. package/dist/settlement/contracts/DispatchSmartContract.js.map +1 -0
  203. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts +21 -0
  204. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts.map +1 -0
  205. package/dist/settlement/contracts/SettlementContractProtocolModule.js +84 -0
  206. package/dist/settlement/contracts/SettlementContractProtocolModule.js.map +1 -0
  207. package/dist/settlement/contracts/SettlementSmartContract.d.ts +123 -0
  208. package/dist/settlement/contracts/SettlementSmartContract.d.ts.map +1 -0
  209. package/dist/settlement/contracts/SettlementSmartContract.js +310 -0
  210. package/dist/settlement/contracts/SettlementSmartContract.js.map +1 -0
  211. package/dist/settlement/contracts/SettlementSmartContractModule.d.ts +20 -0
  212. package/dist/settlement/contracts/SettlementSmartContractModule.d.ts.map +1 -0
  213. package/dist/settlement/contracts/SettlementSmartContractModule.js +56 -0
  214. package/dist/settlement/contracts/SettlementSmartContractModule.js.map +1 -0
  215. package/dist/settlement/contracts/TokenBridgeTree.d.ts +228 -0
  216. package/dist/settlement/contracts/TokenBridgeTree.d.ts.map +1 -0
  217. package/dist/settlement/contracts/TokenBridgeTree.js +60 -0
  218. package/dist/settlement/contracts/TokenBridgeTree.js.map +1 -0
  219. package/dist/settlement/contracts/authorizations/ContractAuthorization.d.ts +10 -0
  220. package/dist/settlement/contracts/authorizations/ContractAuthorization.d.ts.map +1 -0
  221. package/dist/settlement/contracts/authorizations/ContractAuthorization.js +2 -0
  222. package/dist/settlement/contracts/authorizations/ContractAuthorization.js.map +1 -0
  223. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.d.ts +85 -0
  224. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.d.ts.map +1 -0
  225. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.js +11 -0
  226. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.js.map +1 -0
  227. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.d.ts +79 -0
  228. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.d.ts.map +1 -0
  229. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.js +11 -0
  230. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.js.map +1 -0
  231. package/dist/settlement/contracts/settlement/BridgingSettlementContract.d.ts +107 -0
  232. package/dist/settlement/contracts/settlement/BridgingSettlementContract.d.ts.map +1 -0
  233. package/dist/settlement/contracts/settlement/BridgingSettlementContract.js +188 -0
  234. package/dist/settlement/contracts/settlement/BridgingSettlementContract.js.map +1 -0
  235. package/dist/settlement/contracts/settlement/SettlementBase.d.ts +41 -0
  236. package/dist/settlement/contracts/settlement/SettlementBase.d.ts.map +1 -0
  237. package/dist/settlement/contracts/settlement/SettlementBase.js +105 -0
  238. package/dist/settlement/contracts/settlement/SettlementBase.js.map +1 -0
  239. package/dist/settlement/contracts/settlement/SettlementContract.d.ts +15 -0
  240. package/dist/settlement/contracts/settlement/SettlementContract.d.ts.map +1 -0
  241. package/dist/settlement/contracts/settlement/SettlementContract.js +72 -0
  242. package/dist/settlement/contracts/settlement/SettlementContract.js.map +1 -0
  243. package/dist/settlement/messages/Deposit.d.ts +77 -0
  244. package/dist/settlement/messages/Deposit.d.ts.map +1 -0
  245. package/dist/settlement/messages/Deposit.js +8 -0
  246. package/dist/settlement/messages/Deposit.js.map +1 -0
  247. package/dist/settlement/messages/OutgoingMessage.d.ts +67 -0
  248. package/dist/settlement/messages/OutgoingMessage.d.ts.map +1 -0
  249. package/dist/settlement/messages/OutgoingMessage.js +7 -0
  250. package/dist/settlement/messages/OutgoingMessage.js.map +1 -0
  251. package/dist/settlement/messages/OutgoingMessageArgument.d.ts +588 -0
  252. package/dist/settlement/messages/OutgoingMessageArgument.d.ts.map +1 -0
  253. package/dist/settlement/messages/OutgoingMessageArgument.js +42 -0
  254. package/dist/settlement/messages/OutgoingMessageArgument.js.map +1 -0
  255. package/dist/settlement/messages/Withdrawal.d.ts +2 -0
  256. package/dist/settlement/messages/Withdrawal.d.ts.map +1 -0
  257. package/dist/settlement/messages/Withdrawal.js +3 -0
  258. package/dist/settlement/messages/Withdrawal.js.map +1 -0
  259. package/dist/settlement/modularity/OutgoingMessageProcessor.d.ts +28 -0
  260. package/dist/settlement/modularity/OutgoingMessageProcessor.d.ts.map +1 -0
  261. package/dist/settlement/modularity/OutgoingMessageProcessor.js +39 -0
  262. package/dist/settlement/modularity/OutgoingMessageProcessor.js.map +1 -0
  263. package/dist/settlement/modularity/ProvableSettlementHook.d.ts +26 -0
  264. package/dist/settlement/modularity/ProvableSettlementHook.d.ts.map +1 -0
  265. package/dist/settlement/modularity/ProvableSettlementHook.js +4 -0
  266. package/dist/settlement/modularity/ProvableSettlementHook.js.map +1 -0
  267. package/dist/settlement/modularity/types.d.ts +9 -0
  268. package/dist/settlement/modularity/types.d.ts.map +1 -0
  269. package/dist/settlement/modularity/types.js +2 -0
  270. package/dist/settlement/modularity/types.js.map +1 -0
  271. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts +11 -0
  272. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts.map +1 -0
  273. package/dist/settlement/modules/NetworkStateSettlementModule.js +15 -0
  274. package/dist/settlement/modules/NetworkStateSettlementModule.js.map +1 -0
  275. package/dist/state/SimpleAsyncStateService.d.ts +6 -0
  276. package/dist/state/SimpleAsyncStateService.d.ts.map +1 -0
  277. package/dist/state/SimpleAsyncStateService.js +2 -0
  278. package/dist/state/SimpleAsyncStateService.js.map +1 -0
  279. package/dist/state/State.d.ts +13 -5
  280. package/dist/state/State.d.ts.map +1 -1
  281. package/dist/state/State.js +42 -17
  282. package/dist/state/State.js.map +1 -0
  283. package/dist/state/StateMap.d.ts +4 -4
  284. package/dist/state/StateMap.d.ts.map +1 -1
  285. package/dist/state/StateMap.js +5 -5
  286. package/dist/state/StateMap.js.map +1 -0
  287. package/dist/state/StateService.d.ts +4 -4
  288. package/dist/state/StateService.d.ts.map +1 -1
  289. package/dist/state/StateService.js +1 -0
  290. package/dist/state/StateService.js.map +1 -0
  291. package/dist/state/StateServiceProvider.d.ts +5 -7
  292. package/dist/state/StateServiceProvider.d.ts.map +1 -1
  293. package/dist/state/StateServiceProvider.js +18 -23
  294. package/dist/state/StateServiceProvider.js.map +1 -0
  295. package/dist/state/WitnessBlockContext.d.ts +5 -0
  296. package/dist/state/WitnessBlockContext.d.ts.map +1 -0
  297. package/dist/state/WitnessBlockContext.js +48 -0
  298. package/dist/state/WitnessBlockContext.js.map +1 -0
  299. package/dist/state/assert/assert.d.ts +2 -2
  300. package/dist/state/assert/assert.d.ts.map +1 -1
  301. package/dist/state/assert/assert.js +16 -6
  302. package/dist/state/assert/assert.js.map +1 -0
  303. package/dist/state/context/RuntimeMethodExecutionContext.d.ts +137 -4
  304. package/dist/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -1
  305. package/dist/state/context/RuntimeMethodExecutionContext.js +44 -11
  306. package/dist/state/context/RuntimeMethodExecutionContext.js.map +1 -0
  307. package/dist/state/context/TransitionMethodExecutionContext.d.ts.map +1 -1
  308. package/dist/state/context/TransitionMethodExecutionContext.js +1 -1
  309. package/dist/state/context/TransitionMethodExecutionContext.js.map +1 -0
  310. package/dist/state/protocol/ProtocolState.d.ts +8 -2
  311. package/dist/state/protocol/ProtocolState.d.ts.map +1 -1
  312. package/dist/state/protocol/ProtocolState.js +36 -20
  313. package/dist/state/protocol/ProtocolState.js.map +1 -0
  314. package/dist/utils/FieldOptions.d.ts +62 -0
  315. package/dist/utils/FieldOptions.d.ts.map +1 -0
  316. package/dist/utils/FieldOptions.js +13 -0
  317. package/dist/utils/FieldOptions.js.map +1 -0
  318. package/dist/utils/MinaPrefixedProvableHashList.d.ts +20 -0
  319. package/dist/utils/MinaPrefixedProvableHashList.d.ts.map +1 -0
  320. package/dist/utils/MinaPrefixedProvableHashList.js +49 -0
  321. package/dist/utils/MinaPrefixedProvableHashList.js.map +1 -0
  322. package/dist/utils/PrefixedProvableHashList.d.ts +3 -2
  323. package/dist/utils/PrefixedProvableHashList.d.ts.map +1 -1
  324. package/dist/utils/PrefixedProvableHashList.js +5 -1
  325. package/dist/utils/PrefixedProvableHashList.js.map +1 -0
  326. package/dist/utils/ProvableHashList.d.ts +27 -4
  327. package/dist/utils/ProvableHashList.d.ts.map +1 -1
  328. package/dist/utils/ProvableHashList.js +51 -3
  329. package/dist/utils/ProvableHashList.js.map +1 -0
  330. package/dist/utils/ProvableReductionHashList.d.ts +18 -0
  331. package/dist/utils/ProvableReductionHashList.d.ts.map +1 -0
  332. package/dist/utils/ProvableReductionHashList.js +54 -0
  333. package/dist/utils/ProvableReductionHashList.js.map +1 -0
  334. package/dist/utils/StateTransitionReductionList.d.ts +11 -0
  335. package/dist/utils/StateTransitionReductionList.d.ts.map +1 -0
  336. package/dist/utils/StateTransitionReductionList.js +61 -0
  337. package/dist/utils/StateTransitionReductionList.js.map +1 -0
  338. package/dist/utils/utils.d.ts +11 -5
  339. package/dist/utils/utils.d.ts.map +1 -1
  340. package/dist/utils/utils.js +13 -13
  341. package/dist/utils/utils.js.map +1 -0
  342. package/jest.config.cjs +12 -1
  343. package/package.json +10 -10
  344. package/src/hashing/mina-prefixes.ts +10 -0
  345. package/src/hashing/protokit-prefixes.ts +37 -0
  346. package/src/hooks/AccountStateHook.ts +80 -0
  347. package/src/hooks/BlockHeightHook.ts +17 -0
  348. package/src/hooks/LastStateRootBlockHook.ts +25 -0
  349. package/src/hooks/NoopBlockHook.ts +24 -0
  350. package/src/hooks/NoopSettlementHook.ts +20 -0
  351. package/src/{blockmodules → hooks}/NoopTransactionHook.ts +9 -3
  352. package/src/index.ts +51 -13
  353. package/src/model/AppliedStateTransitionBatch.ts +16 -0
  354. package/src/model/MethodPublicOutput.ts +3 -1
  355. package/src/model/Option.ts +87 -57
  356. package/src/model/Path.ts +9 -5
  357. package/src/model/RuntimeLike.ts +12 -0
  358. package/src/model/StateTransition.ts +19 -5
  359. package/src/model/StateTransitionProvableBatch.ts +94 -73
  360. package/src/model/Transaction.ts +3 -1
  361. package/src/model/network/NetworkState.ts +22 -2
  362. package/src/model/transaction/AuthorizedTransaction.ts +50 -0
  363. package/src/model/transaction/RuntimeTransaction.ts +86 -15
  364. package/src/model/transaction/ValueOption.ts +28 -0
  365. package/src/protocol/Protocol.ts +186 -116
  366. package/src/protocol/ProtocolEnvironment.ts +10 -0
  367. package/src/protocol/ProtocolModule.ts +18 -11
  368. package/src/protocol/ProvableBlockHook.ts +67 -0
  369. package/src/protocol/ProvableTransactionHook.ts +92 -3
  370. package/src/protocol/TransitioningProtocolModule.ts +8 -1
  371. package/src/prover/accumulators/AppliedBatchHashList.ts +32 -0
  372. package/src/prover/accumulators/BlockHashList.ts +117 -0
  373. package/src/prover/accumulators/StateTransitionReductionList.ts +92 -0
  374. package/src/prover/accumulators/TransactionHashList.ts +9 -0
  375. package/src/prover/accumulators/WitnessedRootHashList.ts +62 -0
  376. package/src/prover/block/BlockProvable.ts +360 -28
  377. package/src/prover/block/BlockProver.ts +668 -251
  378. package/src/prover/block/accummulators/BlockHashMerkleTree.ts +24 -0
  379. package/src/prover/block/accummulators/RuntimeVerificationKeyTree.ts +24 -0
  380. package/src/prover/block/services/RuntimeVerificationKeyRootService.ts +20 -0
  381. package/src/prover/statetransition/StateTransitionProvable.ts +25 -20
  382. package/src/prover/statetransition/StateTransitionProver.ts +299 -168
  383. package/src/prover/transaction/TransactionProvable.ts +183 -0
  384. package/src/prover/transaction/TransactionProver.ts +561 -0
  385. package/src/prover/utils.ts +108 -0
  386. package/src/settlement/ContractArgsRegistry.ts +64 -0
  387. package/src/settlement/ContractModule.ts +31 -0
  388. package/src/settlement/SettlementContractModule.ts +150 -0
  389. package/src/settlement/contracts/BridgeContract.ts +383 -0
  390. package/src/settlement/contracts/BridgeContractProtocolModule.ts +49 -0
  391. package/src/settlement/contracts/BridgingSettlementContractModule.ts +116 -0
  392. package/src/settlement/contracts/DispatchContractProtocolModule.ts +77 -0
  393. package/src/settlement/contracts/DispatchSmartContract.ts +359 -0
  394. package/src/settlement/contracts/SettlementSmartContractModule.ts +79 -0
  395. package/src/settlement/contracts/TokenBridgeTree.ts +86 -0
  396. package/src/settlement/contracts/authorizations/ContractAuthorization.ts +11 -0
  397. package/src/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.ts +16 -0
  398. package/src/settlement/contracts/authorizations/UpdateMessagesHashAuth.ts +16 -0
  399. package/src/settlement/contracts/settlement/BridgingSettlementContract.ts +283 -0
  400. package/src/settlement/contracts/settlement/SettlementBase.ts +249 -0
  401. package/src/settlement/contracts/settlement/SettlementContract.ts +75 -0
  402. package/src/settlement/messages/Deposit.ts +7 -0
  403. package/src/settlement/messages/OutgoingMessage.ts +17 -0
  404. package/src/settlement/messages/OutgoingMessageArgument.ts +62 -0
  405. package/src/settlement/modularity/OutgoingMessageProcessor.ts +78 -0
  406. package/src/settlement/modularity/ProvableSettlementHook.ts +36 -0
  407. package/src/settlement/modularity/types.ts +23 -0
  408. package/src/settlement/modules/NetworkStateSettlementModule.ts +42 -0
  409. package/src/state/State.ts +49 -19
  410. package/src/state/StateMap.ts +5 -6
  411. package/src/state/StateService.ts +5 -5
  412. package/src/state/StateServiceProvider.ts +18 -18
  413. package/src/state/WitnessBlockContext.ts +54 -0
  414. package/src/state/assert/assert.ts +18 -8
  415. package/src/state/context/RuntimeMethodExecutionContext.ts +68 -11
  416. package/src/state/context/TransitionMethodExecutionContext.ts +0 -1
  417. package/src/state/protocol/ProtocolState.ts +61 -26
  418. package/src/utils/FieldOptions.ts +13 -0
  419. package/src/utils/MinaPrefixedProvableHashList.ts +70 -0
  420. package/src/utils/PrefixedProvableHashList.ts +6 -2
  421. package/src/utils/ProvableHashList.ts +109 -4
  422. package/src/utils/ProvableReductionHashList.ts +77 -0
  423. package/src/utils/utils.ts +21 -16
  424. package/test/BlockProver.test.ts +124 -140
  425. package/test/Protocol.test.ts +14 -21
  426. package/test/State.test.ts +45 -0
  427. package/test/StateTransition.test.ts +57 -65
  428. package/test/TestingProtocol.ts +36 -0
  429. package/test/compiling/types.ts +28 -0
  430. package/test/model/Option.test.ts +72 -0
  431. package/test/model/StateTransitionProvableBatch.test.ts +137 -0
  432. package/test/modularity/types.ts +35 -0
  433. package/test/prover/block/BlockProver.test.ts +18 -0
  434. package/test/prover/statetransition/StateTransitionProver.test.ts +261 -0
  435. package/{src → test}/state/assert/assert.test.ts +10 -3
  436. package/test/tsconfig.json +7 -0
  437. package/test/utils/ProvableHashList.test.ts +44 -0
  438. package/test/utils/ProvableReductionHashList.test.ts +117 -0
  439. package/test/utils.test.ts +0 -3
  440. package/LICENSE.md +0 -201
  441. package/dist/blockmodules/AccountStateModule.d.ts +0 -38
  442. package/dist/blockmodules/AccountStateModule.d.ts.map +0 -1
  443. package/dist/blockmodules/AccountStateModule.js +0 -38
  444. package/dist/blockmodules/NoopTransactionHook.d.ts +0 -6
  445. package/dist/blockmodules/NoopTransactionHook.d.ts.map +0 -1
  446. package/dist/blockmodules/NoopTransactionHook.js +0 -5
  447. package/dist/model/transaction/ProtocolTransaction.d.ts +0 -70
  448. package/dist/model/transaction/ProtocolTransaction.d.ts.map +0 -1
  449. package/dist/model/transaction/ProtocolTransaction.js +0 -18
  450. package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts +0 -16
  451. package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts.map +0 -1
  452. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts +0 -7
  453. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts.map +0 -1
  454. package/dist/state/context/ProtocolMethodExecutionContext.d.ts +0 -22
  455. package/dist/state/context/ProtocolMethodExecutionContext.d.ts.map +0 -1
  456. package/dist/state/context/ProtocolMethodExecutionContext.js +0 -28
  457. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts +0 -25
  458. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts.map +0 -1
  459. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.js +0 -77
  460. package/dist/utils/merkletree/MemoryMerkleTreeStorage.d.ts +0 -26
  461. package/dist/utils/merkletree/MemoryMerkleTreeStorage.d.ts.map +0 -1
  462. package/dist/utils/merkletree/MemoryMerkleTreeStorage.js +0 -79
  463. package/dist/utils/merkletree/MerkleTreeStore.d.ts +0 -11
  464. package/dist/utils/merkletree/MerkleTreeStore.d.ts.map +0 -1
  465. package/dist/utils/merkletree/MerkleTreeStore.js +0 -1
  466. package/dist/utils/merkletree/RollupMerkleTree.d.ts +0 -130
  467. package/dist/utils/merkletree/RollupMerkleTree.d.ts.map +0 -1
  468. package/dist/utils/merkletree/RollupMerkleTree.js +0 -244
  469. package/src/blockmodules/AccountStateModule.ts +0 -31
  470. package/src/model/Option.test.ts +0 -21
  471. package/src/model/transaction/ProtocolTransaction.ts +0 -25
  472. package/src/prover/statetransition/StateTransitionWitnessProvider.ts +0 -24
  473. package/src/prover/statetransition/StateTransitionWitnessProviderReference.ts +0 -17
  474. package/src/state/context/ProtocolMethodExecutionContext.ts +0 -36
  475. package/src/utils/merkletree/InMemoryMerkleTreeStorage.ts +0 -106
  476. package/src/utils/merkletree/MerkleTreeStore.ts +0 -15
  477. package/src/utils/merkletree/RollupMerkleTree.ts +0 -255
  478. package/src/utils/merkletree/VirtualMerkleTreeStore.ts +0 -21
  479. package/tsconfig.test.json +0 -9
@@ -1,62 +1,51 @@
1
- /* eslint-disable max-lines */
2
- import { Experimental, Field, Provable, SelfProof } from "snarkyjs";
3
- import { injectable } from "tsyringe";
4
1
  import {
5
2
  AreProofsEnabled,
6
3
  PlainZkProgram,
7
4
  provableMethod,
8
5
  ZkProgrammable,
6
+ CompilableModule,
7
+ type ArtifactRecord,
8
+ type CompileRegistry,
9
+ TreeWrite,
10
+ LinkedMerkleTreeCircuitOps,
11
+ LinkedMerkleTreeWitness,
9
12
  } from "@proto-kit/common";
13
+ import { Field, Provable, SelfProof, ZkProgram } from "o1js";
14
+ import { injectable } from "tsyringe";
10
15
 
11
- import {
12
- MerkleTreeUtils,
13
- RollupMerkleWitness,
14
- } from "../../utils/merkletree/RollupMerkleTree.js";
15
- import {
16
- DefaultProvableHashList,
17
- ProvableHashList,
18
- } from "../../utils/ProvableHashList";
16
+ import { constants } from "../../Constants";
19
17
  import { ProvableStateTransition } from "../../model/StateTransition";
20
18
  import {
21
- ProvableStateTransitionType,
19
+ MerkleWitnessBatch,
22
20
  StateTransitionProvableBatch,
21
+ StateTransitionType,
23
22
  } from "../../model/StateTransitionProvableBatch";
24
- import { constants } from "../../Constants";
25
23
  import { ProtocolModule } from "../../protocol/ProtocolModule";
24
+ import { DefaultProvableHashList } from "../../utils/ProvableHashList";
25
+ import { WitnessedRootHashList } from "../accumulators/WitnessedRootHashList";
26
+ import { AppliedBatchHashList } from "../accumulators/AppliedBatchHashList";
27
+ import { AppliedStateTransitionBatchState } from "../../model/AppliedStateTransitionBatch";
26
28
 
27
- import { StateTransitionWitnessProvider } from "./StateTransitionWitnessProvider.js";
28
29
  import {
30
+ StateTransitionProof,
29
31
  StateTransitionProvable,
30
32
  StateTransitionProverPublicInput,
31
- StateTransitionProof,
32
33
  StateTransitionProverPublicOutput,
33
34
  } from "./StateTransitionProvable";
34
- import { StateTransitionWitnessProviderReference } from "./StateTransitionWitnessProviderReference";
35
35
 
36
36
  const errors = {
37
- stateRootNotMatching: (step: string) => `StateRoots not matching ${step}`,
38
-
39
- stateTransitionsHashNotMatching: (step: string) =>
40
- `State transitions hash not matching ${step}`,
41
-
42
- protocolTransitionsHashNotMatching: (step: string) =>
43
- `Protocol transitions hash not matching ${step}`,
37
+ propertyNotMatching: (property: string, step: string) =>
38
+ `${property} not matching ${step}`,
44
39
 
45
40
  merkleWitnessNotCorrect: (index: number) =>
46
41
  `MerkleWitness not valid for StateTransition (${index})`,
47
-
48
- noWitnessProviderSet: () =>
49
- new Error(
50
- "WitnessProvider not set, set it before you use StateTransitionProvider"
51
- ),
52
-
53
- propertyNotMatching: (propertyName: string) => `${propertyName} not matching`,
54
42
  };
55
43
 
56
44
  interface StateTransitionProverExecutionState {
57
- stateRoot: Field;
58
- stateTransitionList: ProvableHashList<ProvableStateTransition>;
59
- protocolTransitionList: ProvableHashList<ProvableStateTransition>;
45
+ currentBatch: AppliedStateTransitionBatchState;
46
+ batchList: AppliedBatchHashList;
47
+ finalizedRoot: Field;
48
+ witnessedRoots: WitnessedRootHashList;
60
49
  }
61
50
 
62
51
  const StateTransitionSelfProofClass = SelfProof<
@@ -73,38 +62,51 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
73
62
  StateTransitionProverPublicOutput
74
63
  > {
75
64
  public constructor(
76
- // eslint-disable-next-line @typescript-eslint/no-use-before-define
77
- private readonly stateTransitionProver: StateTransitionProver,
78
- public readonly witnessProviderReference: StateTransitionWitnessProviderReference
65
+ private readonly stateTransitionProver: Pick<
66
+ StateTransitionProver,
67
+ "areProofsEnabled"
68
+ >
79
69
  ) {
80
70
  super();
81
71
  }
82
72
 
83
- public get appChain(): AreProofsEnabled | undefined {
84
- return this.stateTransitionProver.appChain;
73
+ public get areProofsEnabled(): AreProofsEnabled | undefined {
74
+ return this.stateTransitionProver.areProofsEnabled;
85
75
  }
86
76
 
87
77
  public zkProgramFactory(): PlainZkProgram<
88
78
  StateTransitionProverPublicInput,
89
79
  StateTransitionProverPublicOutput
90
- > {
91
- // eslint-disable-next-line max-len
92
- // eslint-disable-next-line @typescript-eslint/no-this-alias,consistent-this,unicorn/no-this-assignment
80
+ >[] {
93
81
  const instance = this;
94
82
 
95
- const program = Experimental.ZkProgram({
83
+ const program = ZkProgram({
84
+ name: "StateTransitionProver",
96
85
  publicInput: StateTransitionProverPublicInput,
97
86
  publicOutput: StateTransitionProverPublicOutput,
98
87
 
99
88
  methods: {
100
89
  proveBatch: {
101
- privateInputs: [StateTransitionProvableBatch],
90
+ privateInputs: [
91
+ StateTransitionProvableBatch,
92
+ MerkleWitnessBatch,
93
+ AppliedStateTransitionBatchState,
94
+ ],
102
95
 
103
- method(
96
+ async method(
104
97
  publicInput: StateTransitionProverPublicInput,
105
- batch: StateTransitionProvableBatch
98
+ batch: StateTransitionProvableBatch,
99
+ witnesses: MerkleWitnessBatch,
100
+ currentAppliedBatch: AppliedStateTransitionBatchState
106
101
  ) {
107
- return instance.runBatch(publicInput, batch);
102
+ return {
103
+ publicOutput: await instance.proveBatch(
104
+ publicInput,
105
+ batch,
106
+ witnesses,
107
+ currentAppliedBatch
108
+ ),
109
+ };
108
110
  },
109
111
  },
110
112
 
@@ -114,12 +116,14 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
114
116
  StateTransitionSelfProofClass,
115
117
  ],
116
118
 
117
- method(
119
+ async method(
118
120
  publicInput: StateTransitionProverPublicInput,
119
121
  proof1: StateTransitionProof,
120
122
  proof2: StateTransitionProof
121
123
  ) {
122
- return instance.merge(publicInput, proof1, proof2);
124
+ return {
125
+ publicOutput: await instance.merge(publicInput, proof1, proof2),
126
+ };
123
127
  },
124
128
  },
125
129
  },
@@ -130,22 +134,39 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
130
134
  merge: program.merge.bind(program),
131
135
  };
132
136
 
133
- const SelfProofClass = Experimental.ZkProgram.Proof(program);
137
+ const SelfProofClass = ZkProgram.Proof(program);
134
138
 
135
- return {
136
- compile: program.compile.bind(program),
137
- verify: program.verify.bind(program),
138
- Proof: SelfProofClass,
139
- methods,
140
- };
139
+ return [
140
+ {
141
+ name: program.name,
142
+ compile: program.compile.bind(program),
143
+ verify: program.verify.bind(program),
144
+ analyzeMethods: program.analyzeMethods.bind(program),
145
+ Proof: SelfProofClass,
146
+ methods,
147
+ },
148
+ ];
141
149
  }
142
150
 
143
- private get witnessProvider(): StateTransitionWitnessProvider {
144
- const provider = this.witnessProviderReference.getWitnessProvider();
145
- if (provider === undefined) {
146
- throw errors.noWitnessProviderSet();
147
- }
148
- return provider;
151
+ private transitionToTreeWrite(
152
+ st: ProvableStateTransition,
153
+ witness: LinkedMerkleTreeWitness
154
+ ): TreeWrite {
155
+ // If from isSome isn't set, the user "ignored the previous value", i.e. we
156
+ // can assume the value in the witness is correct
157
+ const from = Provable.if(
158
+ st.from.isSome,
159
+ st.from.value,
160
+ witness.leafCurrent.leaf.value
161
+ );
162
+
163
+ // If the user doesn't want to write, we just carry over the from-value
164
+ const to = Provable.if(st.to.isSome, st.to.value, from);
165
+ return {
166
+ path: st.path,
167
+ from,
168
+ to,
169
+ };
149
170
  }
150
171
 
151
172
  /**
@@ -153,33 +174,94 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
153
174
  * and returns the new prover state
154
175
  */
155
176
  public applyTransitions(
156
- stateRoot: Field,
157
- stateTransitionCommitmentFrom: Field,
158
- protocolTransitionCommitmentFrom: Field,
159
- transitionBatch: StateTransitionProvableBatch
160
- ): StateTransitionProverExecutionState {
161
- const state: StateTransitionProverExecutionState = {
162
- stateRoot,
163
-
164
- stateTransitionList: new DefaultProvableHashList(
165
- ProvableStateTransition,
166
- stateTransitionCommitmentFrom
167
- ),
168
-
169
- protocolTransitionList: new DefaultProvableHashList(
170
- ProvableStateTransition,
171
- protocolTransitionCommitmentFrom
172
- ),
173
- };
177
+ state: StateTransitionProverExecutionState,
178
+ batch: StateTransitionProvableBatch,
179
+ witnesses: MerkleWitnessBatch
180
+ ) {
181
+ const transitions = batch.batch;
174
182
 
175
- const transitions = transitionBatch.batch;
176
- const types = transitionBatch.transitionTypes;
177
183
  for (
178
184
  let index = 0;
179
185
  index < constants.stateTransitionProverBatchSize;
180
186
  index++
181
187
  ) {
182
- this.applyTransition(state, transitions[index], types[index], index);
188
+ const updatedBatchState = this.applyTransition(
189
+ state.currentBatch,
190
+ transitions[index].stateTransition,
191
+ witnesses.witnesses[index],
192
+ index
193
+ );
194
+
195
+ // If the current batch is finished, we push it to the list
196
+ // and initialize the next
197
+ const { type, witnessRoot } = transitions[index];
198
+ const closing = type.isClosing();
199
+ const closingAndApply = type.type.equals(
200
+ StateTransitionType.closeAndApply
201
+ );
202
+
203
+ // Create the newBatch
204
+ // The root is based on if the previous batch will be applied or not
205
+ const base = Provable.if(
206
+ closingAndApply,
207
+ updatedBatchState.root,
208
+ state.finalizedRoot
209
+ );
210
+ const newBatchState = new AppliedStateTransitionBatchState({
211
+ batchHash: Field(0),
212
+ root: base,
213
+ });
214
+
215
+ const updatedBatch = {
216
+ applied: closingAndApply,
217
+ batchHash: updatedBatchState.batchHash,
218
+ };
219
+ state.batchList.pushIf(updatedBatch, closing);
220
+ state.finalizedRoot = Provable.if(
221
+ closingAndApply,
222
+ updatedBatchState.root,
223
+ state.finalizedRoot
224
+ );
225
+
226
+ // Add computed root to the witnessed root list if needed
227
+ witnessRoot
228
+ .implies(closing)
229
+ .assertTrue("Can only witness roots at closing batches");
230
+ state.witnessedRoots.pushIf(
231
+ {
232
+ root: state.finalizedRoot,
233
+ appliedBatchListState: state.batchList.commitment,
234
+ },
235
+ witnessRoot
236
+ );
237
+
238
+ const isDummy = ProvableStateTransition.isDummy(
239
+ transitions[index].stateTransition
240
+ );
241
+
242
+ // Dummy STs cannot change any state, as to prevent any
243
+ // dummy-in-the-middle attacks. This is given if the type is nothing.
244
+ isDummy
245
+ .implies(type.isNothing())
246
+ .assertTrue("Dummies have to be of type 'nothing'");
247
+
248
+ isDummy
249
+ .implies(state.currentBatch.batchHash.equals(0))
250
+ .assertTrue("Dummies can only be placed on closed batchLists");
251
+
252
+ // Dummies don't close the batch, but we still want to ignore any
253
+ // updated batch, since we need to result to stay.
254
+ // This will break the pipeline if there is a dummy in the middle,
255
+ // but will only end up to invalid proofs (i.e. mismatched batches)
256
+
257
+ state.currentBatch = new AppliedStateTransitionBatchState(
258
+ Provable.if(
259
+ closing.or(isDummy),
260
+ AppliedStateTransitionBatchState,
261
+ newBatchState,
262
+ updatedBatchState
263
+ )
264
+ );
183
265
  }
184
266
 
185
267
  return state;
@@ -190,47 +272,45 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
190
272
  * and mutates it in place
191
273
  */
192
274
  public applyTransition(
193
- state: StateTransitionProverExecutionState,
275
+ currentBatch: AppliedStateTransitionBatchState,
194
276
  transition: ProvableStateTransition,
195
- type: ProvableStateTransitionType,
277
+ witness: LinkedMerkleTreeWitness,
196
278
  index = 0
197
279
  ) {
198
- const treeWitness = Provable.witness(RollupMerkleWitness, () =>
199
- this.witnessProvider.getWitness(transition.path)
200
- );
201
-
202
- const membershipValid = MerkleTreeUtils.checkMembership(
203
- treeWitness,
204
- state.stateRoot,
205
- transition.path,
206
- transition.from.value
207
- );
208
- membershipValid
209
- .or(transition.from.isSome.not())
210
- .assertTrue(errors.merkleWitnessNotCorrect(index));
211
-
212
- const t = Date.now();
213
- const newRoot = MerkleTreeUtils.computeRoot(
214
- treeWitness,
215
- transition.to.value
280
+ const impliedRoot = this.applyTransitionToRoot(
281
+ transition,
282
+ currentBatch.root,
283
+ witness,
284
+ index
216
285
  );
217
- Provable.log("Compute root took", Date.now() - t, "ms");
218
286
 
219
- state.stateRoot = Provable.if(
220
- transition.to.isSome,
221
- newRoot,
222
- state.stateRoot
287
+ // Append ST to the current batch's ST-list
288
+ const stList = new DefaultProvableHashList(
289
+ ProvableStateTransition,
290
+ currentBatch.batchHash
223
291
  );
292
+ stList.push(transition);
224
293
 
225
- const isNotDummy = transition.path.equals(Field(0)).not();
294
+ // Update batch
295
+ return new AppliedStateTransitionBatchState({
296
+ batchHash: stList.commitment,
297
+ root: impliedRoot,
298
+ });
299
+ }
226
300
 
227
- state.stateTransitionList.pushIf(
228
- transition,
229
- isNotDummy.and(type.isNormal())
230
- );
231
- state.protocolTransitionList.pushIf(
232
- transition,
233
- isNotDummy.and(type.isProtocol())
301
+ private applyTransitionToRoot(
302
+ transition: ProvableStateTransition,
303
+ root: Field,
304
+ merkleWitness: LinkedMerkleTreeWitness,
305
+ index: number
306
+ ): Field {
307
+ const treeWrite = this.transitionToTreeWrite(transition, merkleWitness);
308
+
309
+ return LinkedMerkleTreeCircuitOps.applyTreeWrite(
310
+ root,
311
+ merkleWitness,
312
+ treeWrite,
313
+ index
234
314
  );
235
315
  }
236
316
 
@@ -238,69 +318,113 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
238
318
  * Applies a whole batch of StateTransitions at once
239
319
  */
240
320
  @provableMethod()
241
- public runBatch(
321
+ public async proveBatch(
242
322
  publicInput: StateTransitionProverPublicInput,
243
- batch: StateTransitionProvableBatch
244
- ): StateTransitionProverPublicOutput {
245
- const result = this.applyTransitions(
246
- publicInput.stateRoot,
247
- publicInput.stateTransitionsHash,
248
- publicInput.protocolTransitionsHash,
249
- batch
250
- );
323
+ batch: StateTransitionProvableBatch,
324
+ witnesses: MerkleWitnessBatch,
325
+ currentAppliedBatch: AppliedStateTransitionBatchState
326
+ ): Promise<StateTransitionProverPublicOutput> {
327
+ currentAppliedBatch
328
+ .hashOrZero()
329
+ .assertEquals(
330
+ publicInput.currentBatchStateHash,
331
+ "Provided startingAppliedBatch not matching PI hash"
332
+ );
333
+
334
+ // Assert that either the currentAppliedBatch is somewhere intermediary
335
+ // or the root is the current "finalized" root
336
+ currentAppliedBatch.root
337
+ .equals(publicInput.root)
338
+ .or(publicInput.currentBatchStateHash.equals(0).not())
339
+ .assertTrue();
340
+
341
+ const state: StateTransitionProverExecutionState = {
342
+ batchList: new AppliedBatchHashList(publicInput.batchesHash),
343
+ currentBatch: currentAppliedBatch,
344
+ finalizedRoot: publicInput.root,
345
+ witnessedRoots: new WitnessedRootHashList(publicInput.witnessedRootsHash),
346
+ };
347
+
348
+ const result = this.applyTransitions(state, batch, witnesses);
251
349
 
252
350
  return new StateTransitionProverPublicOutput({
253
- stateRoot: result.stateRoot,
254
- stateTransitionsHash: result.stateTransitionList.commitment,
255
- protocolTransitionsHash: result.protocolTransitionList.commitment,
351
+ batchesHash: result.batchList.commitment,
352
+ currentBatchStateHash: result.currentBatch.hashOrZero(),
353
+ root: result.finalizedRoot,
354
+ witnessedRootsHash: result.witnessedRoots.commitment,
256
355
  });
257
356
  }
258
357
 
259
358
  @provableMethod()
260
- public merge(
359
+ public async merge(
261
360
  publicInput: StateTransitionProverPublicInput,
262
361
  proof1: StateTransitionProof,
263
362
  proof2: StateTransitionProof
264
- ): StateTransitionProverPublicOutput {
363
+ ): Promise<StateTransitionProverPublicOutput> {
265
364
  proof1.verify();
266
365
  proof2.verify();
267
366
 
268
- // Check state
269
- publicInput.stateRoot.assertEquals(
270
- proof1.publicInput.stateRoot,
271
- errors.stateRootNotMatching("publicInput.from -> proof1.from")
367
+ // Check current batch hash
368
+ publicInput.currentBatchStateHash.assertEquals(
369
+ proof1.publicInput.currentBatchStateHash,
370
+ errors.propertyNotMatching(
371
+ "currentBatchStateHash",
372
+ "publicInput.from -> proof1.from"
373
+ )
374
+ );
375
+ proof1.publicOutput.currentBatchStateHash.assertEquals(
376
+ proof2.publicInput.currentBatchStateHash,
377
+ errors.propertyNotMatching(
378
+ "currentBatchStateHash",
379
+ "proof1.to -> proof2.from"
380
+ )
381
+ );
382
+
383
+ // Check batches hash
384
+ publicInput.batchesHash.assertEquals(
385
+ proof1.publicInput.batchesHash,
386
+ errors.propertyNotMatching(
387
+ "batchesHash",
388
+ "publicInput.from -> proof1.from"
389
+ )
272
390
  );
273
- proof1.publicOutput.stateRoot.assertEquals(
274
- proof2.publicInput.stateRoot,
275
- errors.stateRootNotMatching("proof1.to -> proof2.from")
391
+ proof1.publicOutput.batchesHash.assertEquals(
392
+ proof2.publicInput.batchesHash,
393
+ errors.propertyNotMatching("batchesHash", "proof1.to -> proof2.from")
276
394
  );
277
395
 
278
- // Check ST list
279
- publicInput.stateTransitionsHash.assertEquals(
280
- proof1.publicInput.stateTransitionsHash,
281
- errors.stateTransitionsHashNotMatching("publicInput.from -> proof1.from")
396
+ // Check root
397
+ publicInput.root.assertEquals(
398
+ proof1.publicInput.root,
399
+ errors.propertyNotMatching("root", "publicInput.from -> proof1.from")
282
400
  );
283
- proof1.publicOutput.stateTransitionsHash.assertEquals(
284
- proof2.publicInput.stateTransitionsHash,
285
- errors.stateTransitionsHashNotMatching("proof1.to -> proof2.from")
401
+
402
+ proof1.publicOutput.root.assertEquals(
403
+ proof2.publicInput.root,
404
+ errors.propertyNotMatching("root", "proof1.to -> proof2.from")
286
405
  );
287
406
 
288
- // Check Protocol ST list
289
- publicInput.protocolTransitionsHash.assertEquals(
290
- proof1.publicInput.protocolTransitionsHash,
291
- errors.protocolTransitionsHashNotMatching(
407
+ // Check root accumulator
408
+ publicInput.witnessedRootsHash.assertEquals(
409
+ proof1.publicInput.witnessedRootsHash,
410
+ errors.propertyNotMatching(
411
+ "witnessedRootsHash",
292
412
  "publicInput.from -> proof1.from"
293
413
  )
294
414
  );
295
- proof1.publicOutput.protocolTransitionsHash.assertEquals(
296
- proof2.publicInput.protocolTransitionsHash,
297
- errors.protocolTransitionsHashNotMatching("proof1.to -> proof2.from")
415
+ proof1.publicOutput.witnessedRootsHash.assertEquals(
416
+ proof2.publicInput.witnessedRootsHash,
417
+ errors.propertyNotMatching(
418
+ "witnessedRootsHash",
419
+ "proof1.to -> proof2.from"
420
+ )
298
421
  );
299
422
 
300
423
  return new StateTransitionProverPublicInput({
301
- stateRoot: proof2.publicOutput.stateRoot,
302
- stateTransitionsHash: proof2.publicOutput.stateTransitionsHash,
303
- protocolTransitionsHash: proof2.publicOutput.protocolTransitionsHash,
424
+ currentBatchStateHash: proof2.publicOutput.currentBatchStateHash,
425
+ batchesHash: proof2.publicOutput.batchesHash,
426
+ root: proof2.publicOutput.root,
427
+ witnessedRootsHash: proof2.publicOutput.witnessedRootsHash,
304
428
  });
305
429
  }
306
430
  }
@@ -308,33 +432,40 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
308
432
  @injectable()
309
433
  export class StateTransitionProver
310
434
  extends ProtocolModule
311
- implements StateTransitionProvable
435
+ implements StateTransitionProvable, CompilableModule
312
436
  {
313
- public readonly zkProgrammable: StateTransitionProverProgrammable;
437
+ public zkProgrammable: StateTransitionProverProgrammable;
314
438
 
315
- public constructor(
316
- // Injected
317
- public readonly witnessProviderReference: StateTransitionWitnessProviderReference
318
- ) {
439
+ public constructor() {
319
440
  super();
320
- this.zkProgrammable = new StateTransitionProverProgrammable(
321
- this,
322
- witnessProviderReference
323
- );
441
+ this.zkProgrammable = new StateTransitionProverProgrammable(this);
324
442
  }
325
443
 
326
- public runBatch(
444
+ public async compile(
445
+ registry: CompileRegistry
446
+ ): Promise<void | ArtifactRecord> {
447
+ return await this.zkProgrammable.compile(registry);
448
+ }
449
+
450
+ public proveBatch(
327
451
  publicInput: StateTransitionProverPublicInput,
328
- batch: StateTransitionProvableBatch
329
- ): StateTransitionProverPublicOutput {
330
- return this.zkProgrammable.runBatch(publicInput, batch);
452
+ batch: StateTransitionProvableBatch,
453
+ witnesses: MerkleWitnessBatch,
454
+ startingAppliedBatch: AppliedStateTransitionBatchState
455
+ ): Promise<StateTransitionProverPublicOutput> {
456
+ return this.zkProgrammable.proveBatch(
457
+ publicInput,
458
+ batch,
459
+ witnesses,
460
+ startingAppliedBatch
461
+ );
331
462
  }
332
463
 
333
464
  public merge(
334
465
  publicInput: StateTransitionProverPublicInput,
335
466
  proof1: StateTransitionProof,
336
467
  proof2: StateTransitionProof
337
- ): StateTransitionProverPublicOutput {
468
+ ): Promise<StateTransitionProverPublicOutput> {
338
469
  return this.zkProgrammable.merge(publicInput, proof1, proof2);
339
470
  }
340
471
  }