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

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