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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (466) hide show
  1. package/dist/Constants.js +1 -0
  2. package/dist/Constants.js.map +1 -0
  3. package/dist/hashing/mina-prefixes.d.ts +10 -0
  4. package/dist/hashing/mina-prefixes.d.ts.map +1 -0
  5. package/dist/hashing/mina-prefixes.js +10 -0
  6. package/dist/hashing/mina-prefixes.js.map +1 -0
  7. package/dist/hashing/protokit-prefixes.d.ts +10 -0
  8. package/dist/hashing/protokit-prefixes.d.ts.map +1 -0
  9. package/dist/hashing/protokit-prefixes.js +24 -0
  10. package/dist/hashing/protokit-prefixes.js.map +1 -0
  11. package/dist/hooks/AccountStateHook.d.ts +56 -0
  12. package/dist/hooks/AccountStateHook.d.ts.map +1 -0
  13. package/dist/hooks/AccountStateHook.js +62 -0
  14. package/dist/hooks/AccountStateHook.js.map +1 -0
  15. package/dist/hooks/BlockHeightHook.d.ts +7 -0
  16. package/dist/hooks/BlockHeightHook.d.ts.map +1 -0
  17. package/dist/hooks/BlockHeightHook.js +16 -0
  18. package/dist/hooks/BlockHeightHook.js.map +1 -0
  19. package/dist/hooks/LastStateRootBlockHook.d.ts +7 -0
  20. package/dist/hooks/LastStateRootBlockHook.d.ts.map +1 -0
  21. package/dist/hooks/LastStateRootBlockHook.js +16 -0
  22. package/dist/hooks/LastStateRootBlockHook.js.map +1 -0
  23. package/dist/hooks/NoopBlockHook.d.ts +8 -0
  24. package/dist/hooks/NoopBlockHook.d.ts.map +1 -0
  25. package/dist/hooks/NoopBlockHook.js +10 -0
  26. package/dist/hooks/NoopBlockHook.js.map +1 -0
  27. package/dist/hooks/NoopSettlementHook.d.ts +6 -0
  28. package/dist/hooks/NoopSettlementHook.d.ts.map +1 -0
  29. package/dist/{prover/statetransition/StateTransitionWitnessProvider.js → hooks/NoopSettlementHook.js} +8 -7
  30. package/dist/hooks/NoopSettlementHook.js.map +1 -0
  31. package/dist/hooks/NoopTransactionHook.d.ts +6 -0
  32. package/dist/hooks/NoopTransactionHook.d.ts.map +1 -0
  33. package/dist/hooks/NoopTransactionHook.js +11 -0
  34. package/dist/hooks/NoopTransactionHook.js.map +1 -0
  35. package/dist/index.d.ts +59 -9
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +60 -9
  38. package/dist/index.js.map +1 -0
  39. package/dist/model/AppliedStateTransitionBatch.d.ts +114 -0
  40. package/dist/model/AppliedStateTransitionBatch.d.ts.map +1 -0
  41. package/dist/model/AppliedStateTransitionBatch.js +16 -0
  42. package/dist/model/AppliedStateTransitionBatch.js.map +1 -0
  43. package/dist/model/MethodPublicOutput.d.ts +83 -28
  44. package/dist/model/MethodPublicOutput.d.ts.map +1 -1
  45. package/dist/model/MethodPublicOutput.js +4 -1
  46. package/dist/model/MethodPublicOutput.js.map +1 -0
  47. package/dist/model/Option.d.ts +70 -46
  48. package/dist/model/Option.d.ts.map +1 -1
  49. package/dist/model/Option.js +62 -57
  50. package/dist/model/Option.js.map +1 -0
  51. package/dist/model/Path.d.ts +4 -3
  52. package/dist/model/Path.d.ts.map +1 -1
  53. package/dist/model/Path.js +6 -5
  54. package/dist/model/Path.js.map +1 -0
  55. package/dist/model/RuntimeLike.d.ts +11 -0
  56. package/dist/model/RuntimeLike.d.ts.map +1 -0
  57. package/dist/model/RuntimeLike.js +2 -0
  58. package/dist/model/RuntimeLike.js.map +1 -0
  59. package/dist/model/StateTransition.d.ts +58 -18
  60. package/dist/model/StateTransition.d.ts.map +1 -1
  61. package/dist/model/StateTransition.js +13 -4
  62. package/dist/model/StateTransition.js.map +1 -0
  63. package/dist/model/StateTransitionProvableBatch.d.ts +389 -16
  64. package/dist/model/StateTransitionProvableBatch.d.ts.map +1 -1
  65. package/dist/model/StateTransitionProvableBatch.js +87 -10
  66. package/dist/model/StateTransitionProvableBatch.js.map +1 -0
  67. package/dist/model/network/NetworkState.d.ts +105 -9
  68. package/dist/model/network/NetworkState.d.ts.map +1 -1
  69. package/dist/model/network/NetworkState.js +22 -2
  70. package/dist/model/network/NetworkState.js.map +1 -0
  71. package/dist/model/transaction/AuthorizedTransaction.d.ts +122 -0
  72. package/dist/model/transaction/AuthorizedTransaction.d.ts.map +1 -0
  73. package/dist/model/transaction/AuthorizedTransaction.js +39 -0
  74. package/dist/model/transaction/AuthorizedTransaction.js.map +1 -0
  75. package/dist/model/transaction/RuntimeTransaction.d.ts +94 -34
  76. package/dist/model/transaction/RuntimeTransaction.d.ts.map +1 -1
  77. package/dist/model/transaction/RuntimeTransaction.js +72 -11
  78. package/dist/model/transaction/RuntimeTransaction.js.map +1 -0
  79. package/dist/model/transaction/SignedTransaction.d.ts +110 -0
  80. package/dist/model/transaction/SignedTransaction.d.ts.map +1 -0
  81. package/dist/model/transaction/SignedTransaction.js +34 -0
  82. package/dist/model/transaction/SignedTransaction.js.map +1 -0
  83. package/dist/model/transaction/ValueOption.d.ts +187 -0
  84. package/dist/model/transaction/ValueOption.d.ts.map +1 -0
  85. package/dist/model/transaction/ValueOption.js +25 -0
  86. package/dist/model/transaction/ValueOption.js.map +1 -0
  87. package/dist/protocol/Protocol.d.ts +47 -21
  88. package/dist/protocol/Protocol.d.ts.map +1 -1
  89. package/dist/protocol/Protocol.js +127 -26
  90. package/dist/protocol/Protocol.js.map +1 -0
  91. package/dist/protocol/ProtocolEnvironment.d.ts +9 -0
  92. package/dist/protocol/ProtocolEnvironment.d.ts.map +1 -0
  93. package/dist/protocol/ProtocolEnvironment.js +2 -0
  94. package/dist/protocol/ProtocolEnvironment.js.map +1 -0
  95. package/dist/protocol/ProtocolModule.d.ts +7 -7
  96. package/dist/protocol/ProtocolModule.d.ts.map +1 -1
  97. package/dist/protocol/ProtocolModule.js +10 -7
  98. package/dist/protocol/ProtocolModule.js.map +1 -0
  99. package/dist/protocol/ProvableBlockHook.d.ts +29 -0
  100. package/dist/protocol/ProvableBlockHook.d.ts.map +1 -0
  101. package/dist/protocol/ProvableBlockHook.js +20 -0
  102. package/dist/protocol/ProvableBlockHook.js.map +1 -0
  103. package/dist/protocol/ProvableTransactionHook.d.ts +35 -0
  104. package/dist/protocol/ProvableTransactionHook.d.ts.map +1 -0
  105. package/dist/protocol/ProvableTransactionHook.js +28 -0
  106. package/dist/protocol/ProvableTransactionHook.js.map +1 -0
  107. package/dist/protocol/TransitioningProtocolModule.d.ts +10 -0
  108. package/dist/protocol/TransitioningProtocolModule.d.ts.map +1 -0
  109. package/dist/protocol/TransitioningProtocolModule.js +9 -0
  110. package/dist/protocol/TransitioningProtocolModule.js.map +1 -0
  111. package/dist/prover/accumulators/AppliedBatchHashList.d.ts +18 -0
  112. package/dist/prover/accumulators/AppliedBatchHashList.d.ts.map +1 -0
  113. package/dist/prover/accumulators/AppliedBatchHashList.js +25 -0
  114. package/dist/prover/accumulators/AppliedBatchHashList.js.map +1 -0
  115. package/dist/prover/accumulators/BlockHashList.d.ts +263 -0
  116. package/dist/prover/accumulators/BlockHashList.d.ts.map +1 -0
  117. package/dist/prover/accumulators/BlockHashList.js +97 -0
  118. package/dist/prover/accumulators/BlockHashList.js.map +1 -0
  119. package/dist/prover/accumulators/StateTransitionReductionList.d.ts +12 -0
  120. package/dist/prover/accumulators/StateTransitionReductionList.d.ts.map +1 -0
  121. package/dist/prover/accumulators/StateTransitionReductionList.js +64 -0
  122. package/dist/prover/accumulators/StateTransitionReductionList.js.map +1 -0
  123. package/dist/prover/accumulators/TransactionHashList.d.ts +6 -0
  124. package/dist/prover/accumulators/TransactionHashList.d.ts.map +1 -0
  125. package/dist/prover/accumulators/TransactionHashList.js +8 -0
  126. package/dist/prover/accumulators/TransactionHashList.js.map +1 -0
  127. package/dist/prover/accumulators/WitnessedRootHashList.d.ts +123 -0
  128. package/dist/prover/accumulators/WitnessedRootHashList.d.ts.map +1 -0
  129. package/dist/prover/accumulators/WitnessedRootHashList.js +51 -0
  130. package/dist/prover/accumulators/WitnessedRootHashList.js.map +1 -0
  131. package/dist/prover/block/BlockProvable.d.ts +565 -96
  132. package/dist/prover/block/BlockProvable.d.ts.map +1 -1
  133. package/dist/prover/block/BlockProvable.js +196 -12
  134. package/dist/prover/block/BlockProvable.js.map +1 -0
  135. package/dist/prover/block/BlockProver.d.ts +52 -37
  136. package/dist/prover/block/BlockProver.d.ts.map +1 -1
  137. package/dist/prover/block/BlockProver.js +327 -107
  138. package/dist/prover/block/BlockProver.js.map +1 -0
  139. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts +106 -0
  140. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts.map +1 -0
  141. package/dist/prover/block/accummulators/BlockHashMerkleTree.js +25 -0
  142. package/dist/prover/block/accummulators/BlockHashMerkleTree.js.map +1 -0
  143. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.d.ts +139 -0
  144. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.d.ts.map +1 -0
  145. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js +21 -0
  146. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js.map +1 -0
  147. package/dist/prover/block/services/RuntimeVerificationKeyRootService.d.ts +7 -0
  148. package/dist/prover/block/services/RuntimeVerificationKeyRootService.d.ts.map +1 -0
  149. package/dist/prover/{statetransition/StateTransitionWitnessProviderReference.js → block/services/RuntimeVerificationKeyRootService.js} +11 -8
  150. package/dist/prover/block/services/RuntimeVerificationKeyRootService.js.map +1 -0
  151. package/dist/prover/statetransition/StateTransitionProvable.d.ts +137 -48
  152. package/dist/prover/statetransition/StateTransitionProvable.d.ts.map +1 -1
  153. package/dist/prover/statetransition/StateTransitionProvable.js +10 -5
  154. package/dist/prover/statetransition/StateTransitionProvable.js.map +1 -0
  155. package/dist/prover/statetransition/StateTransitionProver.d.ts +29 -17
  156. package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -1
  157. package/dist/prover/statetransition/StateTransitionProver.js +171 -73
  158. package/dist/prover/statetransition/StateTransitionProver.js.map +1 -0
  159. package/dist/prover/transaction/TransactionProvable.d.ts +626 -0
  160. package/dist/prover/transaction/TransactionProvable.d.ts.map +1 -0
  161. package/dist/prover/transaction/TransactionProvable.js +87 -0
  162. package/dist/prover/transaction/TransactionProvable.js.map +1 -0
  163. package/dist/prover/transaction/TransactionProver.d.ts +68 -0
  164. package/dist/prover/transaction/TransactionProver.d.ts.map +1 -0
  165. package/dist/prover/transaction/TransactionProver.js +301 -0
  166. package/dist/prover/transaction/TransactionProver.js.map +1 -0
  167. package/dist/prover/utils.d.ts +19 -0
  168. package/dist/prover/utils.d.ts.map +1 -0
  169. package/dist/prover/utils.js +67 -0
  170. package/dist/prover/utils.js.map +1 -0
  171. package/dist/settlement/ContractArgsRegistry.d.ts +13 -0
  172. package/dist/settlement/ContractArgsRegistry.d.ts.map +1 -0
  173. package/dist/settlement/ContractArgsRegistry.js +53 -0
  174. package/dist/settlement/ContractArgsRegistry.js.map +1 -0
  175. package/dist/settlement/ContractModule.d.ts +16 -0
  176. package/dist/settlement/ContractModule.d.ts.map +1 -0
  177. package/dist/settlement/ContractModule.js +12 -0
  178. package/dist/settlement/ContractModule.js.map +1 -0
  179. package/dist/settlement/SettlementContractModule.d.ts +47 -0
  180. package/dist/settlement/SettlementContractModule.d.ts.map +1 -0
  181. package/dist/settlement/SettlementContractModule.js +81 -0
  182. package/dist/settlement/SettlementContractModule.js.map +1 -0
  183. package/dist/settlement/contracts/BridgeContract.d.ts +119 -0
  184. package/dist/settlement/contracts/BridgeContract.d.ts.map +1 -0
  185. package/dist/settlement/contracts/BridgeContract.js +269 -0
  186. package/dist/settlement/contracts/BridgeContract.js.map +1 -0
  187. package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts +18 -0
  188. package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts.map +1 -0
  189. package/dist/settlement/contracts/BridgeContractProtocolModule.js +42 -0
  190. package/dist/settlement/contracts/BridgeContractProtocolModule.js.map +1 -0
  191. package/dist/settlement/contracts/BridgingSettlementContractModule.d.ts +21 -0
  192. package/dist/settlement/contracts/BridgingSettlementContractModule.d.ts.map +1 -0
  193. package/dist/settlement/contracts/BridgingSettlementContractModule.js +81 -0
  194. package/dist/settlement/contracts/BridgingSettlementContractModule.js.map +1 -0
  195. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts +23 -0
  196. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts.map +1 -0
  197. package/dist/settlement/contracts/DispatchContractProtocolModule.js +55 -0
  198. package/dist/settlement/contracts/DispatchContractProtocolModule.js.map +1 -0
  199. package/dist/settlement/contracts/DispatchSmartContract.d.ts +50 -0
  200. package/dist/settlement/contracts/DispatchSmartContract.d.ts.map +1 -0
  201. package/dist/settlement/contracts/DispatchSmartContract.js +234 -0
  202. package/dist/settlement/contracts/DispatchSmartContract.js.map +1 -0
  203. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts +21 -0
  204. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts.map +1 -0
  205. package/dist/settlement/contracts/SettlementContractProtocolModule.js +84 -0
  206. package/dist/settlement/contracts/SettlementContractProtocolModule.js.map +1 -0
  207. package/dist/settlement/contracts/SettlementSmartContract.d.ts +123 -0
  208. package/dist/settlement/contracts/SettlementSmartContract.d.ts.map +1 -0
  209. package/dist/settlement/contracts/SettlementSmartContract.js +310 -0
  210. package/dist/settlement/contracts/SettlementSmartContract.js.map +1 -0
  211. package/dist/settlement/contracts/SettlementSmartContractModule.d.ts +20 -0
  212. package/dist/settlement/contracts/SettlementSmartContractModule.d.ts.map +1 -0
  213. package/dist/settlement/contracts/SettlementSmartContractModule.js +56 -0
  214. package/dist/settlement/contracts/SettlementSmartContractModule.js.map +1 -0
  215. package/dist/settlement/contracts/TokenBridgeTree.d.ts +228 -0
  216. package/dist/settlement/contracts/TokenBridgeTree.d.ts.map +1 -0
  217. package/dist/settlement/contracts/TokenBridgeTree.js +60 -0
  218. package/dist/settlement/contracts/TokenBridgeTree.js.map +1 -0
  219. package/dist/settlement/contracts/authorizations/ContractAuthorization.d.ts +10 -0
  220. package/dist/settlement/contracts/authorizations/ContractAuthorization.d.ts.map +1 -0
  221. package/dist/settlement/contracts/authorizations/ContractAuthorization.js +2 -0
  222. package/dist/settlement/contracts/authorizations/ContractAuthorization.js.map +1 -0
  223. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.d.ts +85 -0
  224. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.d.ts.map +1 -0
  225. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.js +11 -0
  226. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.js.map +1 -0
  227. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.d.ts +79 -0
  228. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.d.ts.map +1 -0
  229. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.js +11 -0
  230. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.js.map +1 -0
  231. package/dist/settlement/contracts/settlement/BridgingSettlementContract.d.ts +107 -0
  232. package/dist/settlement/contracts/settlement/BridgingSettlementContract.d.ts.map +1 -0
  233. package/dist/settlement/contracts/settlement/BridgingSettlementContract.js +188 -0
  234. package/dist/settlement/contracts/settlement/BridgingSettlementContract.js.map +1 -0
  235. package/dist/settlement/contracts/settlement/SettlementBase.d.ts +41 -0
  236. package/dist/settlement/contracts/settlement/SettlementBase.d.ts.map +1 -0
  237. package/dist/settlement/contracts/settlement/SettlementBase.js +105 -0
  238. package/dist/settlement/contracts/settlement/SettlementBase.js.map +1 -0
  239. package/dist/settlement/contracts/settlement/SettlementContract.d.ts +15 -0
  240. package/dist/settlement/contracts/settlement/SettlementContract.d.ts.map +1 -0
  241. package/dist/settlement/contracts/settlement/SettlementContract.js +72 -0
  242. package/dist/settlement/contracts/settlement/SettlementContract.js.map +1 -0
  243. package/dist/settlement/messages/Deposit.d.ts +77 -0
  244. package/dist/settlement/messages/Deposit.d.ts.map +1 -0
  245. package/dist/settlement/messages/Deposit.js +8 -0
  246. package/dist/settlement/messages/Deposit.js.map +1 -0
  247. package/dist/settlement/messages/OutgoingMessage.d.ts +67 -0
  248. package/dist/settlement/messages/OutgoingMessage.d.ts.map +1 -0
  249. package/dist/settlement/messages/OutgoingMessage.js +7 -0
  250. package/dist/settlement/messages/OutgoingMessage.js.map +1 -0
  251. package/dist/settlement/messages/OutgoingMessageArgument.d.ts +494 -0
  252. package/dist/settlement/messages/OutgoingMessageArgument.d.ts.map +1 -0
  253. package/dist/settlement/messages/OutgoingMessageArgument.js +40 -0
  254. package/dist/settlement/messages/OutgoingMessageArgument.js.map +1 -0
  255. package/dist/settlement/messages/Withdrawal.d.ts +2 -0
  256. package/dist/settlement/messages/Withdrawal.d.ts.map +1 -0
  257. package/dist/settlement/messages/Withdrawal.js +3 -0
  258. package/dist/settlement/messages/Withdrawal.js.map +1 -0
  259. package/dist/settlement/modularity/OutgoingMessageProcessor.d.ts +25 -0
  260. package/dist/settlement/modularity/OutgoingMessageProcessor.d.ts.map +1 -0
  261. package/dist/settlement/modularity/OutgoingMessageProcessor.js +30 -0
  262. package/dist/settlement/modularity/OutgoingMessageProcessor.js.map +1 -0
  263. package/dist/settlement/modularity/ProvableSettlementHook.d.ts +26 -0
  264. package/dist/settlement/modularity/ProvableSettlementHook.d.ts.map +1 -0
  265. package/dist/settlement/modularity/ProvableSettlementHook.js +4 -0
  266. package/dist/settlement/modularity/ProvableSettlementHook.js.map +1 -0
  267. package/dist/settlement/modularity/types.d.ts +9 -0
  268. package/dist/settlement/modularity/types.d.ts.map +1 -0
  269. package/dist/settlement/modularity/types.js +2 -0
  270. package/dist/settlement/modularity/types.js.map +1 -0
  271. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts +11 -0
  272. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts.map +1 -0
  273. package/dist/settlement/modules/NetworkStateSettlementModule.js +15 -0
  274. package/dist/settlement/modules/NetworkStateSettlementModule.js.map +1 -0
  275. package/dist/state/SimpleAsyncStateService.d.ts +6 -0
  276. package/dist/state/SimpleAsyncStateService.d.ts.map +1 -0
  277. package/dist/state/SimpleAsyncStateService.js +2 -0
  278. package/dist/state/SimpleAsyncStateService.js.map +1 -0
  279. package/dist/state/State.d.ts +68 -0
  280. package/dist/state/State.d.ts.map +1 -0
  281. package/dist/state/State.js +141 -0
  282. package/dist/state/State.js.map +1 -0
  283. package/dist/state/StateMap.d.ts +37 -0
  284. package/dist/state/StateMap.d.ts.map +1 -0
  285. package/dist/state/StateMap.js +56 -0
  286. package/dist/state/StateMap.js.map +1 -0
  287. package/dist/state/StateService.d.ts +6 -0
  288. package/dist/state/StateService.d.ts.map +1 -0
  289. package/dist/state/StateService.js +2 -0
  290. package/dist/state/StateService.js.map +1 -0
  291. package/dist/state/StateServiceProvider.d.ts +8 -0
  292. package/dist/state/StateServiceProvider.d.ts.map +1 -0
  293. package/dist/state/StateServiceProvider.js +37 -0
  294. package/dist/state/StateServiceProvider.js.map +1 -0
  295. package/dist/state/WitnessBlockContext.d.ts +5 -0
  296. package/dist/state/WitnessBlockContext.d.ts.map +1 -0
  297. package/dist/state/WitnessBlockContext.js +42 -0
  298. package/dist/state/WitnessBlockContext.js.map +1 -0
  299. package/dist/state/assert/assert.d.ts +12 -0
  300. package/dist/state/assert/assert.d.ts.map +1 -0
  301. package/dist/state/assert/assert.js +33 -0
  302. package/dist/state/assert/assert.js.map +1 -0
  303. package/dist/state/context/RuntimeMethodExecutionContext.d.ts +193 -0
  304. package/dist/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -0
  305. package/dist/state/context/RuntimeMethodExecutionContext.js +138 -0
  306. package/dist/state/context/RuntimeMethodExecutionContext.js.map +1 -0
  307. package/dist/state/context/TransitionMethodExecutionContext.d.ts +23 -0
  308. package/dist/state/context/TransitionMethodExecutionContext.d.ts.map +1 -0
  309. package/dist/state/context/TransitionMethodExecutionContext.js +6 -0
  310. package/dist/state/context/TransitionMethodExecutionContext.js.map +1 -0
  311. package/dist/state/protocol/ProtocolState.d.ts +13 -0
  312. package/dist/state/protocol/ProtocolState.d.ts.map +1 -0
  313. package/dist/state/protocol/ProtocolState.js +58 -0
  314. package/dist/state/protocol/ProtocolState.js.map +1 -0
  315. package/dist/utils/FieldOptions.d.ts +62 -0
  316. package/dist/utils/FieldOptions.d.ts.map +1 -0
  317. package/dist/utils/FieldOptions.js +13 -0
  318. package/dist/utils/FieldOptions.js.map +1 -0
  319. package/dist/utils/MinaPrefixedProvableHashList.d.ts +20 -0
  320. package/dist/utils/MinaPrefixedProvableHashList.d.ts.map +1 -0
  321. package/dist/utils/MinaPrefixedProvableHashList.js +49 -0
  322. package/dist/utils/MinaPrefixedProvableHashList.js.map +1 -0
  323. package/dist/utils/PrefixedProvableHashList.d.ts +3 -2
  324. package/dist/utils/PrefixedProvableHashList.d.ts.map +1 -1
  325. package/dist/utils/PrefixedProvableHashList.js +5 -1
  326. package/dist/utils/PrefixedProvableHashList.js.map +1 -0
  327. package/dist/utils/ProvableHashList.d.ts +27 -4
  328. package/dist/utils/ProvableHashList.d.ts.map +1 -1
  329. package/dist/utils/ProvableHashList.js +51 -3
  330. package/dist/utils/ProvableHashList.js.map +1 -0
  331. package/dist/utils/ProvableReductionHashList.d.ts +18 -0
  332. package/dist/utils/ProvableReductionHashList.d.ts.map +1 -0
  333. package/dist/utils/ProvableReductionHashList.js +54 -0
  334. package/dist/utils/ProvableReductionHashList.js.map +1 -0
  335. package/dist/utils/StateTransitionReductionList.d.ts +11 -0
  336. package/dist/utils/StateTransitionReductionList.d.ts.map +1 -0
  337. package/dist/utils/StateTransitionReductionList.js +61 -0
  338. package/dist/utils/StateTransitionReductionList.js.map +1 -0
  339. package/dist/utils/utils.d.ts +11 -5
  340. package/dist/utils/utils.d.ts.map +1 -1
  341. package/dist/utils/utils.js +13 -13
  342. package/dist/utils/utils.js.map +1 -0
  343. package/jest.config.cjs +12 -1
  344. package/package.json +11 -9
  345. package/src/hashing/mina-prefixes.ts +10 -0
  346. package/src/hashing/protokit-prefixes.ts +37 -0
  347. package/src/hooks/AccountStateHook.ts +80 -0
  348. package/src/hooks/BlockHeightHook.ts +17 -0
  349. package/src/hooks/LastStateRootBlockHook.ts +25 -0
  350. package/src/hooks/NoopBlockHook.ts +24 -0
  351. package/src/hooks/NoopSettlementHook.ts +20 -0
  352. package/src/hooks/NoopTransactionHook.ts +13 -0
  353. package/src/index.ts +59 -9
  354. package/src/model/AppliedStateTransitionBatch.ts +16 -0
  355. package/src/model/MethodPublicOutput.ts +3 -1
  356. package/src/model/Option.ts +99 -73
  357. package/src/model/Path.ts +9 -5
  358. package/src/model/RuntimeLike.ts +12 -0
  359. package/src/model/StateTransition.ts +19 -5
  360. package/src/model/StateTransitionProvableBatch.ts +114 -12
  361. package/src/model/Transaction.ts +3 -1
  362. package/src/model/network/NetworkState.ts +22 -2
  363. package/src/model/transaction/AuthorizedTransaction.ts +50 -0
  364. package/src/model/transaction/RuntimeTransaction.ts +86 -15
  365. package/src/model/transaction/ValueOption.ts +28 -0
  366. package/src/protocol/Protocol.ts +201 -69
  367. package/src/protocol/ProtocolEnvironment.ts +10 -0
  368. package/src/protocol/ProtocolModule.ts +16 -15
  369. package/src/protocol/ProvableBlockHook.ts +67 -0
  370. package/src/protocol/ProvableTransactionHook.ts +96 -0
  371. package/src/protocol/TransitioningProtocolModule.ts +12 -0
  372. package/src/prover/accumulators/AppliedBatchHashList.ts +32 -0
  373. package/src/prover/accumulators/BlockHashList.ts +117 -0
  374. package/src/prover/accumulators/StateTransitionReductionList.ts +92 -0
  375. package/src/prover/accumulators/TransactionHashList.ts +9 -0
  376. package/src/prover/accumulators/WitnessedRootHashList.ts +62 -0
  377. package/src/prover/block/BlockProvable.ts +360 -28
  378. package/src/prover/block/BlockProver.ts +721 -186
  379. package/src/prover/block/accummulators/BlockHashMerkleTree.ts +24 -0
  380. package/src/prover/block/accummulators/RuntimeVerificationKeyTree.ts +24 -0
  381. package/src/prover/block/services/RuntimeVerificationKeyRootService.ts +20 -0
  382. package/src/prover/statetransition/StateTransitionProvable.ts +26 -19
  383. package/src/prover/statetransition/StateTransitionProver.ts +337 -126
  384. package/src/prover/transaction/TransactionProvable.ts +183 -0
  385. package/src/prover/transaction/TransactionProver.ts +561 -0
  386. package/src/prover/utils.ts +108 -0
  387. package/src/settlement/ContractArgsRegistry.ts +60 -0
  388. package/src/settlement/ContractModule.ts +31 -0
  389. package/src/settlement/SettlementContractModule.ts +150 -0
  390. package/src/settlement/contracts/BridgeContract.ts +385 -0
  391. package/src/settlement/contracts/BridgeContractProtocolModule.ts +49 -0
  392. package/src/settlement/contracts/BridgingSettlementContractModule.ts +116 -0
  393. package/src/settlement/contracts/DispatchContractProtocolModule.ts +77 -0
  394. package/src/settlement/contracts/DispatchSmartContract.ts +359 -0
  395. package/src/settlement/contracts/SettlementSmartContractModule.ts +79 -0
  396. package/src/settlement/contracts/TokenBridgeTree.ts +73 -0
  397. package/src/settlement/contracts/authorizations/ContractAuthorization.ts +11 -0
  398. package/src/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.ts +16 -0
  399. package/src/settlement/contracts/authorizations/UpdateMessagesHashAuth.ts +16 -0
  400. package/src/settlement/contracts/settlement/BridgingSettlementContract.ts +283 -0
  401. package/src/settlement/contracts/settlement/SettlementBase.ts +249 -0
  402. package/src/settlement/contracts/settlement/SettlementContract.ts +75 -0
  403. package/src/settlement/messages/Deposit.ts +7 -0
  404. package/src/settlement/messages/OutgoingMessage.ts +17 -0
  405. package/src/settlement/messages/OutgoingMessageArgument.ts +53 -0
  406. package/src/settlement/modularity/OutgoingMessageProcessor.ts +65 -0
  407. package/src/settlement/modularity/ProvableSettlementHook.ts +36 -0
  408. package/src/settlement/modularity/types.ts +23 -0
  409. package/src/settlement/modules/NetworkStateSettlementModule.ts +42 -0
  410. package/src/state/State.ts +190 -0
  411. package/src/state/StateMap.ts +73 -0
  412. package/src/state/StateService.ts +6 -0
  413. package/src/state/StateServiceProvider.ts +37 -0
  414. package/src/state/WitnessBlockContext.ts +50 -0
  415. package/src/state/assert/assert.ts +38 -0
  416. package/src/state/context/RuntimeMethodExecutionContext.ts +181 -0
  417. package/src/state/context/TransitionMethodExecutionContext.ts +26 -0
  418. package/src/state/protocol/ProtocolState.ts +98 -0
  419. package/src/utils/FieldOptions.ts +13 -0
  420. package/src/utils/MinaPrefixedProvableHashList.ts +70 -0
  421. package/src/utils/PrefixedProvableHashList.ts +6 -2
  422. package/src/utils/ProvableHashList.ts +109 -4
  423. package/src/utils/ProvableReductionHashList.ts +77 -0
  424. package/src/utils/utils.ts +21 -16
  425. package/test/BlockProver.test.ts +161 -74
  426. package/test/Protocol.test.ts +20 -10
  427. package/test/State.test.ts +45 -0
  428. package/test/StateTransition.test.ts +57 -65
  429. package/test/TestingProtocol.ts +36 -0
  430. package/test/compiling/types.ts +28 -0
  431. package/test/model/Option.test.ts +72 -0
  432. package/test/model/StateTransitionProvableBatch.test.ts +137 -0
  433. package/test/modularity/types.ts +35 -0
  434. package/test/prover/block/BlockProver.test.ts +18 -0
  435. package/test/prover/statetransition/StateTransitionProver.test.ts +261 -0
  436. package/test/state/assert/assert.test.ts +56 -0
  437. package/test/tsconfig.json +7 -0
  438. package/test/utils/ProvableHashList.test.ts +44 -0
  439. package/test/utils/ProvableReductionHashList.test.ts +117 -0
  440. package/test/utils.test.ts +0 -3
  441. package/LICENSE.md +0 -201
  442. package/dist/model/transaction/ProtocolTransaction.d.ts +0 -70
  443. package/dist/model/transaction/ProtocolTransaction.d.ts.map +0 -1
  444. package/dist/model/transaction/ProtocolTransaction.js +0 -18
  445. package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts +0 -16
  446. package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts.map +0 -1
  447. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts +0 -7
  448. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts.map +0 -1
  449. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts +0 -25
  450. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts.map +0 -1
  451. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.js +0 -77
  452. package/dist/utils/merkletree/MerkleTreeStore.d.ts +0 -11
  453. package/dist/utils/merkletree/MerkleTreeStore.d.ts.map +0 -1
  454. package/dist/utils/merkletree/MerkleTreeStore.js +0 -1
  455. package/dist/utils/merkletree/RollupMerkleTree.d.ts +0 -130
  456. package/dist/utils/merkletree/RollupMerkleTree.d.ts.map +0 -1
  457. package/dist/utils/merkletree/RollupMerkleTree.js +0 -244
  458. package/src/model/Option.test.ts +0 -21
  459. package/src/model/transaction/ProtocolTransaction.ts +0 -25
  460. package/src/prover/statetransition/StateTransitionWitnessProvider.ts +0 -24
  461. package/src/prover/statetransition/StateTransitionWitnessProviderReference.ts +0 -17
  462. package/src/utils/merkletree/InMemoryMerkleTreeStorage.ts +0 -106
  463. package/src/utils/merkletree/MerkleTreeStore.ts +0 -15
  464. package/src/utils/merkletree/RollupMerkleTree.ts +0 -255
  465. package/src/utils/merkletree/VirtualMerkleTreeStore.ts +0 -21
  466. package/tsconfig.test.json +0 -9
@@ -0,0 +1,561 @@
1
+ import {
2
+ AreProofsEnabled,
3
+ CompilableModule,
4
+ CompileArtifact,
5
+ CompileRegistry,
6
+ PlainZkProgram,
7
+ provableMethod,
8
+ WithZkProgrammable,
9
+ ZkProgrammable,
10
+ } from "@proto-kit/common";
11
+ import { Bool, Field, SelfProof, VerificationKey, ZkProgram } from "o1js";
12
+ import { inject, injectable, injectAll } from "tsyringe";
13
+
14
+ import { NetworkState } from "../../model/network/NetworkState";
15
+ import { ProtocolModule } from "../../protocol/ProtocolModule";
16
+ import { MethodPublicOutput } from "../../model/MethodPublicOutput";
17
+ import {
18
+ AfterTransactionHookArguments,
19
+ BeforeTransactionHookArguments,
20
+ ProvableTransactionHook,
21
+ toAfterTransactionHookArgument,
22
+ toBeforeTransactionHookArgument,
23
+ } from "../../protocol/ProvableTransactionHook";
24
+ import { StateServiceProvider } from "../../state/StateServiceProvider";
25
+ import { RuntimeVerificationKeyRootService } from "../block/services/RuntimeVerificationKeyRootService";
26
+ import { addTransactionToBundle, executeHooks } from "../utils";
27
+ import { AuthorizedTransaction } from "../../model/transaction/AuthorizedTransaction";
28
+ import {
29
+ MethodVKConfigData,
30
+ MinimalVKTreeService,
31
+ RuntimeVerificationKeyAttestation,
32
+ } from "../block/accummulators/RuntimeVerificationKeyTree";
33
+
34
+ import {
35
+ TransactionProverExecutionData,
36
+ DynamicRuntimeProof,
37
+ TransactionProof,
38
+ TransactionProvable,
39
+ TransactionProverArguments,
40
+ TransactionProverPublicInput,
41
+ TransactionProverPublicOutput,
42
+ TransactionProverState,
43
+ TransactionProverTransactionArguments,
44
+ } from "./TransactionProvable";
45
+
46
+ const errors = {
47
+ invalidZkProgramTreeRoot: () =>
48
+ "Root hash of the provided zkProgram config witness is invalid",
49
+
50
+ propertyNotMatchingStep: (propertyName: string, step: string) =>
51
+ `${propertyName} not matching: ${step}`,
52
+
53
+ transactionsHashNotMatching: (step: string) =>
54
+ errors.propertyNotMatchingStep("Transactions hash", step),
55
+
56
+ bundlesHashNotMatching: (step: string) =>
57
+ errors.propertyNotMatchingStep("Bundles hash", step),
58
+ };
59
+
60
+ type ApplyTransactionArguments = Omit<
61
+ TransactionProverTransactionArguments,
62
+ "verificationKeyAttestation"
63
+ >;
64
+
65
+ type TransactionHookArgument<T extends "before" | "after"> = T extends "before"
66
+ ? BeforeTransactionHookArguments
67
+ : AfterTransactionHookArguments;
68
+
69
+ export class TransactionProverZkProgrammable extends ZkProgrammable<
70
+ TransactionProverPublicInput,
71
+ TransactionProverPublicOutput
72
+ > {
73
+ public constructor(
74
+ private readonly prover: TransactionProver,
75
+ private readonly transactionHooks: ProvableTransactionHook<unknown>[],
76
+ private readonly stateServiceProvider: StateServiceProvider,
77
+ private readonly verificationKeyService: MinimalVKTreeService
78
+ ) {
79
+ super();
80
+ }
81
+
82
+ name = "TransactionProver";
83
+
84
+ public get areProofsEnabled(): AreProofsEnabled | undefined {
85
+ return this.prover.areProofsEnabled;
86
+ }
87
+
88
+ /**
89
+ * Applies and checks the two proofs and applies the corresponding state
90
+ * changes to the given state.
91
+ *
92
+ * The rough high level workflow of this function:
93
+ * 1. Execute beforeTransaction hooks, pushing the ST batch
94
+ * 2. Add Transaction to bundle, meaning appending it to all the respective commitments
95
+ * 3. Push the runtime ST batch
96
+ * 4. Execute afterTransaction hooks, pushing the ST batch
97
+ * 5. Some consistency checks and signature verification
98
+ *
99
+ * @param fromState The from-state of the BlockProver
100
+ * @param runtimeOutput
101
+ * @param executionData
102
+ * @param networkState
103
+ * @param bundleListPreimage
104
+ * @returns The new BlockProver-state to be used as public output
105
+ */
106
+ public async applyTransaction(
107
+ fromState: TransactionProverState,
108
+ runtimeOutput: MethodPublicOutput,
109
+ executionData: ApplyTransactionArguments,
110
+ networkState: NetworkState
111
+ ): Promise<TransactionProverState> {
112
+ const { transaction, signature } = executionData;
113
+
114
+ let state = { ...fromState };
115
+
116
+ const { isMessage } = runtimeOutput;
117
+
118
+ const authorizedTransaction = new AuthorizedTransaction({
119
+ transaction,
120
+ signature,
121
+ isMessage,
122
+ });
123
+
124
+ const beforeTxHookArguments = toBeforeTransactionHookArgument(
125
+ authorizedTransaction,
126
+ networkState,
127
+ state
128
+ );
129
+
130
+ // Apply beforeTransaction hook state transitions
131
+ const beforeBatch = await this.executeTransactionHooks(
132
+ "before",
133
+ async (module, args) => await module.beforeTransaction(args),
134
+ beforeTxHookArguments,
135
+ isMessage
136
+ );
137
+
138
+ state.pendingSTBatches.push(beforeBatch);
139
+
140
+ state.pendingSTBatches.push({
141
+ batchHash: runtimeOutput.stateTransitionsHash,
142
+ applied: runtimeOutput.status,
143
+ });
144
+
145
+ state = addTransactionToBundle(state, runtimeOutput.isMessage, transaction);
146
+
147
+ // Apply afterTransaction hook state transitions
148
+ const afterTxHookArguments = toAfterTransactionHookArgument(
149
+ authorizedTransaction,
150
+ networkState,
151
+ state,
152
+ runtimeOutput
153
+ );
154
+
155
+ // Switch to different state set for afterTx hooks
156
+ this.stateServiceProvider.popCurrentStateService();
157
+
158
+ const afterBatch = await this.executeTransactionHooks(
159
+ "after",
160
+ async (module, args) => await module.afterTransaction(args),
161
+ afterTxHookArguments,
162
+ isMessage
163
+ );
164
+ state.pendingSTBatches.push(afterBatch);
165
+
166
+ // Check transaction integrity against appProof
167
+ const blockTransactionHash = transaction.hash();
168
+
169
+ blockTransactionHash.assertEquals(
170
+ runtimeOutput.transactionHash,
171
+ "Transactions provided in AppProof and BlockProof do not match"
172
+ );
173
+
174
+ // Check transaction signature or isMessage
175
+ authorizedTransaction
176
+ .validateAuthorization()
177
+ .assertTrue("Transaction authorization not valid");
178
+
179
+ // Validate layout of transaction witness
180
+ transaction.assertTransactionType(isMessage);
181
+
182
+ return new TransactionProverState(state);
183
+ }
184
+
185
+ private verifyVerificationKeyAttestation(
186
+ attestation: RuntimeVerificationKeyAttestation,
187
+ methodId: Field
188
+ ): VerificationKey {
189
+ // Verify the [methodId, vk] tuple against the baked-in vk tree root
190
+ const { verificationKey, witness: verificationKeyTreeWitness } =
191
+ attestation;
192
+
193
+ const root = Field(this.verificationKeyService.getRoot());
194
+ const calculatedRoot = verificationKeyTreeWitness.calculateRoot(
195
+ new MethodVKConfigData({
196
+ methodId: methodId,
197
+ vkHash: verificationKey.hash,
198
+ }).hash()
199
+ );
200
+ root.assertEquals(calculatedRoot, errors.invalidZkProgramTreeRoot());
201
+
202
+ return verificationKey;
203
+ }
204
+
205
+ private async executeTransactionHooks<T extends "before" | "after">(
206
+ type: T,
207
+ hook: (
208
+ module: ProvableTransactionHook<unknown>,
209
+ args: TransactionHookArgument<T>
210
+ ) => Promise<void>,
211
+ hookArguments: TransactionHookArgument<T>,
212
+ isMessage: Bool
213
+ ) {
214
+ const { batch, rawStatus } = await executeHooks(
215
+ {
216
+ transaction: hookArguments.transaction.transaction,
217
+ networkState: hookArguments.networkState,
218
+ },
219
+ `${type}Transaction`,
220
+ async () => {
221
+ for (const module of this.transactionHooks) {
222
+ // eslint-disable-next-line no-await-in-loop
223
+ await hook(module, hookArguments);
224
+ }
225
+ },
226
+ isMessage
227
+ );
228
+
229
+ // This is going to set applied to false in case the hook fails
230
+ // (that's only possible for messages though as others are hard-asserted)
231
+ batch.applied = rawStatus;
232
+
233
+ return batch;
234
+ }
235
+
236
+ public async proveTransactionInternal(
237
+ publicInput: TransactionProverPublicInput,
238
+ runtimeProof: DynamicRuntimeProof,
239
+ transaction: TransactionProverTransactionArguments,
240
+ args: TransactionProverArguments
241
+ ): Promise<TransactionProverPublicOutput> {
242
+ const state = TransactionProverState.fromCommitments(publicInput, args);
243
+
244
+ state.bundleList.checkLastBundleElement(state, args.networkState);
245
+
246
+ const verificationKey = this.verifyVerificationKeyAttestation(
247
+ transaction.verificationKeyAttestation,
248
+ transaction.transaction.methodId
249
+ );
250
+
251
+ runtimeProof.verify(verificationKey);
252
+
253
+ const result = await this.applyTransaction(
254
+ state,
255
+ runtimeProof.publicOutput,
256
+ transaction,
257
+ args.networkState
258
+ );
259
+
260
+ result.bundleList.addToBundle(result, args.networkState);
261
+
262
+ return result.toCommitments();
263
+ }
264
+
265
+ @provableMethod()
266
+ public async proveTransaction(
267
+ publicInput: TransactionProverPublicInput,
268
+ runtimeProof: DynamicRuntimeProof,
269
+ executionData: TransactionProverExecutionData
270
+ ): Promise<TransactionProverPublicOutput> {
271
+ return await this.proveTransactionInternal(
272
+ publicInput,
273
+ runtimeProof,
274
+ executionData.transaction,
275
+ executionData.args
276
+ );
277
+ }
278
+
279
+ @provableMethod()
280
+ public async proveTransactions(
281
+ publicInput: TransactionProverPublicInput,
282
+ runtimeProof1: DynamicRuntimeProof,
283
+ runtimeProof2: DynamicRuntimeProof,
284
+ executionData1: TransactionProverExecutionData,
285
+ executionData2: TransactionProverExecutionData
286
+ ): Promise<TransactionProverPublicOutput> {
287
+ const state1 = await this.proveTransactionInternal(
288
+ publicInput,
289
+ runtimeProof1,
290
+ executionData1.transaction,
291
+ executionData1.args
292
+ );
293
+
294
+ // Switch to next state record for 2nd tx beforeTx hook
295
+ this.stateServiceProvider.popCurrentStateService();
296
+
297
+ return await this.proveTransactionInternal(
298
+ state1,
299
+ runtimeProof2,
300
+ executionData2.transaction,
301
+ executionData2.args
302
+ );
303
+ }
304
+
305
+ @provableMethod()
306
+ public async dummy(
307
+ publicInput: TransactionProverPublicInput
308
+ ): Promise<TransactionProverPublicOutput> {
309
+ return publicInput;
310
+ }
311
+
312
+ @provableMethod()
313
+ public async merge(
314
+ publicInput: TransactionProverPublicInput,
315
+ proof1: TransactionProof,
316
+ proof2: TransactionProof
317
+ ): Promise<TransactionProverPublicOutput> {
318
+ proof1.verify();
319
+ proof2.verify();
320
+
321
+ // Check bundlesHash
322
+ publicInput.bundlesHash.assertEquals(
323
+ proof1.publicInput.bundlesHash,
324
+ errors.bundlesHashNotMatching("publicInput.from -> proof1.from")
325
+ );
326
+ proof1.publicOutput.bundlesHash.assertEquals(
327
+ proof2.publicInput.bundlesHash,
328
+ errors.bundlesHashNotMatching("proof1.to -> proof2.from")
329
+ );
330
+
331
+ // Check eternalTransactionsHash
332
+ publicInput.eternalTransactionsHash.assertEquals(
333
+ proof1.publicInput.eternalTransactionsHash,
334
+ errors.transactionsHashNotMatching("publicInput.from -> proof1.from")
335
+ );
336
+ proof1.publicOutput.eternalTransactionsHash.assertEquals(
337
+ proof2.publicInput.eternalTransactionsHash,
338
+ errors.transactionsHashNotMatching("proof1.to -> proof2.from")
339
+ );
340
+
341
+ // Check incomingMessagesHash
342
+ publicInput.incomingMessagesHash.assertEquals(
343
+ proof1.publicInput.incomingMessagesHash,
344
+ errors.propertyNotMatchingStep(
345
+ "IncomingMessagesHash",
346
+ "publicInput.from -> proof1.from"
347
+ )
348
+ );
349
+ proof1.publicOutput.incomingMessagesHash.assertEquals(
350
+ proof2.publicInput.incomingMessagesHash,
351
+ errors.propertyNotMatchingStep(
352
+ "IncomingMessagesHash",
353
+ "proof1.to -> proof2.from"
354
+ )
355
+ );
356
+
357
+ return new TransactionProverPublicOutput({
358
+ bundlesHash: proof2.publicOutput.bundlesHash,
359
+ eternalTransactionsHash: proof2.publicOutput.eternalTransactionsHash,
360
+ incomingMessagesHash: proof2.publicOutput.incomingMessagesHash,
361
+ });
362
+ }
363
+
364
+ /**
365
+ * Creates the BlockProver ZkProgram.
366
+ * Recursive linking of proofs is done via the previously
367
+ * injected StateTransitionProver and the required AppChainProof class
368
+ */
369
+ public zkProgramFactory(): PlainZkProgram<
370
+ TransactionProverPublicInput,
371
+ TransactionProverPublicOutput
372
+ >[] {
373
+ const { prover } = this;
374
+ const proveTransaction = prover.proveTransaction.bind(prover);
375
+ const proveTransactions = prover.proveTransactions.bind(prover);
376
+ const merge = prover.merge.bind(prover);
377
+ const dummy = prover.dummy.bind(prover);
378
+
379
+ const program = ZkProgram({
380
+ name: "TransactionProver",
381
+ publicInput: TransactionProverPublicInput,
382
+ publicOutput: TransactionProverPublicOutput,
383
+
384
+ methods: {
385
+ proveTransaction: {
386
+ privateInputs: [DynamicRuntimeProof, TransactionProverExecutionData],
387
+
388
+ async method(
389
+ publicInput: TransactionProverPublicInput,
390
+ runtimeProof: DynamicRuntimeProof,
391
+ executionData: TransactionProverExecutionData
392
+ ) {
393
+ return {
394
+ publicOutput: await proveTransaction(
395
+ publicInput,
396
+ runtimeProof,
397
+ executionData
398
+ ),
399
+ };
400
+ },
401
+ },
402
+
403
+ proveTransactions: {
404
+ privateInputs: [
405
+ DynamicRuntimeProof,
406
+ DynamicRuntimeProof,
407
+ TransactionProverExecutionData,
408
+ TransactionProverExecutionData,
409
+ ],
410
+
411
+ async method(
412
+ publicInput: TransactionProverPublicInput,
413
+ runtimeProof1: DynamicRuntimeProof,
414
+ runtimeProof2: DynamicRuntimeProof,
415
+ executionData1: TransactionProverExecutionData,
416
+ executionData2: TransactionProverExecutionData
417
+ ) {
418
+ return {
419
+ publicOutput: await proveTransactions(
420
+ publicInput,
421
+ runtimeProof1,
422
+ runtimeProof2,
423
+ executionData1,
424
+ executionData2
425
+ ),
426
+ };
427
+ },
428
+ },
429
+
430
+ dummy: {
431
+ privateInputs: [],
432
+ async method(publicInput: TransactionProverPublicInput) {
433
+ return { publicOutput: await dummy(publicInput) };
434
+ },
435
+ },
436
+
437
+ merge: {
438
+ privateInputs: [
439
+ SelfProof<
440
+ TransactionProverPublicInput,
441
+ TransactionProverPublicOutput
442
+ >,
443
+ SelfProof<
444
+ TransactionProverPublicInput,
445
+ TransactionProverPublicOutput
446
+ >,
447
+ ],
448
+
449
+ async method(
450
+ publicInput: TransactionProverPublicInput,
451
+ proof1: TransactionProof,
452
+ proof2: TransactionProof
453
+ ) {
454
+ return { publicOutput: await merge(publicInput, proof1, proof2) };
455
+ },
456
+ },
457
+ },
458
+ });
459
+
460
+ const methods = {
461
+ proveTransaction: program.proveTransaction,
462
+ proveTransactions: program.proveTransactions,
463
+ dummy: program.dummy,
464
+ merge: program.merge,
465
+ };
466
+
467
+ const SelfProofClass = ZkProgram.Proof(program);
468
+
469
+ return [
470
+ {
471
+ name: program.name,
472
+ compile: program.compile.bind(program),
473
+ verify: program.verify.bind(program),
474
+ analyzeMethods: program.analyzeMethods.bind(program),
475
+ Proof: SelfProofClass,
476
+ methods,
477
+ },
478
+ ];
479
+ }
480
+ }
481
+
482
+ /**
483
+ * BlockProver class, which aggregates a AppChainProof and
484
+ * a StateTransitionProof into a single BlockProof, that can
485
+ * then be merged to be committed to the base-layer contract
486
+ */
487
+ @injectable()
488
+ export class TransactionProver
489
+ extends ProtocolModule
490
+ implements TransactionProvable, CompilableModule
491
+ {
492
+ public zkProgrammable: TransactionProverZkProgrammable;
493
+
494
+ public constructor(
495
+ @inject("Runtime")
496
+ public readonly runtime: WithZkProgrammable<undefined, MethodPublicOutput> &
497
+ CompilableModule,
498
+ @injectAll("ProvableTransactionHook")
499
+ transactionHooks: ProvableTransactionHook<unknown>[],
500
+ @inject("StateServiceProvider")
501
+ stateServiceProvider: StateServiceProvider,
502
+ verificationKeyService: RuntimeVerificationKeyRootService
503
+ ) {
504
+ super();
505
+ this.zkProgrammable = new TransactionProverZkProgrammable(
506
+ this,
507
+ transactionHooks,
508
+ stateServiceProvider,
509
+ verificationKeyService
510
+ );
511
+ }
512
+
513
+ public async compile(
514
+ registry: CompileRegistry
515
+ ): Promise<Record<string, CompileArtifact> | undefined> {
516
+ return await registry.forceProverExists(async () => {
517
+ await this.runtime.compile(registry);
518
+ return await this.zkProgrammable.compile(registry);
519
+ });
520
+ }
521
+
522
+ public proveTransaction(
523
+ publicInput: TransactionProverPublicInput,
524
+ runtimeProof: DynamicRuntimeProof,
525
+ executionData: TransactionProverExecutionData
526
+ ): Promise<TransactionProverPublicOutput> {
527
+ return this.zkProgrammable.proveTransaction(
528
+ publicInput,
529
+ runtimeProof,
530
+ executionData
531
+ );
532
+ }
533
+
534
+ public proveTransactions(
535
+ publicInput: TransactionProverPublicInput,
536
+ runtimeProof1: DynamicRuntimeProof,
537
+ runtimeProof2: DynamicRuntimeProof,
538
+ executionData1: TransactionProverExecutionData,
539
+ executionData2: TransactionProverExecutionData
540
+ ): Promise<TransactionProverPublicOutput> {
541
+ return this.zkProgrammable.proveTransactions(
542
+ publicInput,
543
+ runtimeProof1,
544
+ runtimeProof2,
545
+ executionData1,
546
+ executionData2
547
+ );
548
+ }
549
+
550
+ public dummy(publicInput: TransactionProverPublicInput) {
551
+ return this.zkProgrammable.dummy(publicInput);
552
+ }
553
+
554
+ public merge(
555
+ publicInput: TransactionProverPublicInput,
556
+ proof1: TransactionProof,
557
+ proof2: TransactionProof
558
+ ): Promise<TransactionProverPublicOutput> {
559
+ return this.zkProgrammable.merge(publicInput, proof1, proof2);
560
+ }
561
+ }
@@ -0,0 +1,108 @@
1
+ import { Bool } from "o1js";
2
+ import { container } from "tsyringe";
3
+
4
+ import {
5
+ ProvableStateTransition,
6
+ StateTransition,
7
+ } from "../model/StateTransition";
8
+ import { AppliedStateTransitionBatch } from "../model/AppliedStateTransitionBatch";
9
+ import {
10
+ RuntimeMethodExecutionContext,
11
+ RuntimeMethodExecutionData,
12
+ } from "../state/context/RuntimeMethodExecutionContext";
13
+ import { RuntimeTransaction } from "../model/transaction/RuntimeTransaction";
14
+ import { MinaActions } from "../utils/MinaPrefixedProvableHashList";
15
+
16
+ import { StateTransitionReductionList } from "./accumulators/StateTransitionReductionList";
17
+ import { TransactionProverState } from "./transaction/TransactionProvable";
18
+
19
+ /**
20
+ * Constructs a AppliedBatch based on a list of STs and the flag whether to
21
+ * be applied or not. The AppliedBatch is a condensed commitment to a batch
22
+ * of STs.
23
+ */
24
+ export function constructBatch(
25
+ stateTransitions: StateTransition<any>[],
26
+ applied: Bool
27
+ ) {
28
+ const transitions = stateTransitions.map((transition) =>
29
+ transition.toProvable()
30
+ );
31
+
32
+ const hashList = new StateTransitionReductionList(ProvableStateTransition);
33
+ transitions.forEach((transition) => {
34
+ hashList.push(transition);
35
+ });
36
+
37
+ return new AppliedStateTransitionBatch({
38
+ batchHash: hashList.commitment,
39
+ applied,
40
+ });
41
+ }
42
+
43
+ // TODO How does this interact with the RuntimeMethodExecutionContext when executing runtimemethods?
44
+ export async function executeHooks<T>(
45
+ contextArguments: RuntimeMethodExecutionData,
46
+ hookName: string,
47
+ method: () => Promise<T>,
48
+ // This can be either that the tx is a message, or we are inside a dummy block hook
49
+ skipEnforceStatus: Bool | undefined = undefined
50
+ ) {
51
+ const executionContext = container.resolve(RuntimeMethodExecutionContext);
52
+ executionContext.clear();
53
+
54
+ // Setup context for potential calls to runtime methods.
55
+ // This way they can use this.transaction etc. while still having provable
56
+ // integrity between data
57
+ executionContext.setup(contextArguments);
58
+ executionContext.beforeMethod("", "", []);
59
+
60
+ const result = await method();
61
+
62
+ executionContext.afterMethod();
63
+
64
+ const { stateTransitions, status, statusMessage } =
65
+ executionContext.current().result;
66
+
67
+ // See https://github.com/proto-kit/framework/issues/321 for why we do this here
68
+ if (skipEnforceStatus !== undefined) {
69
+ // isMessage is defined for all tx hooks
70
+ status
71
+ .or(skipEnforceStatus)
72
+ .assertTrue(
73
+ `${hookName} hook call failed for non-message tx: ${statusMessage ?? "-"}`
74
+ );
75
+ } else {
76
+ // isMessage is undefined for all block hooks
77
+ status.assertTrue(`${hookName} hook call failed: ${statusMessage ?? "-"}`);
78
+ }
79
+
80
+ return {
81
+ batch: constructBatch(stateTransitions, Bool(true)),
82
+ result,
83
+ rawStatus: status,
84
+ };
85
+ }
86
+
87
+ export function addTransactionToBundle<
88
+ T extends Pick<
89
+ TransactionProverState,
90
+ "transactionList" | "eternalTransactionsList" | "incomingMessages"
91
+ >,
92
+ >(state: T, isMessage: Bool, transaction: RuntimeTransaction): T {
93
+ const transactionHash = transaction.hash();
94
+
95
+ // Append tx to transaction list
96
+ state.transactionList.push(transactionHash);
97
+
98
+ // Append tx to eternal transaction list
99
+ // TODO Change that to the a sequence-state compatible transaction struct
100
+ state.eternalTransactionsList.push(transactionHash);
101
+
102
+ // Append tx to incomingMessagesHash
103
+ const actionHash = MinaActions.actionHash(transaction.hashData());
104
+
105
+ state.incomingMessages.pushIf(actionHash, isMessage);
106
+
107
+ return state;
108
+ }