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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (479) hide show
  1. package/dist/Constants.js +1 -0
  2. package/dist/Constants.js.map +1 -0
  3. package/dist/hashing/mina-prefixes.d.ts +10 -0
  4. package/dist/hashing/mina-prefixes.d.ts.map +1 -0
  5. package/dist/hashing/mina-prefixes.js +10 -0
  6. package/dist/hashing/mina-prefixes.js.map +1 -0
  7. package/dist/hashing/protokit-prefixes.d.ts +10 -0
  8. package/dist/hashing/protokit-prefixes.d.ts.map +1 -0
  9. package/dist/hashing/protokit-prefixes.js +24 -0
  10. package/dist/hashing/protokit-prefixes.js.map +1 -0
  11. package/dist/hooks/AccountStateHook.d.ts +56 -0
  12. package/dist/hooks/AccountStateHook.d.ts.map +1 -0
  13. package/dist/hooks/AccountStateHook.js +62 -0
  14. package/dist/hooks/AccountStateHook.js.map +1 -0
  15. package/dist/hooks/BlockHeightHook.d.ts +7 -0
  16. package/dist/hooks/BlockHeightHook.d.ts.map +1 -0
  17. package/dist/hooks/BlockHeightHook.js +16 -0
  18. package/dist/hooks/BlockHeightHook.js.map +1 -0
  19. package/dist/hooks/LastStateRootBlockHook.d.ts +7 -0
  20. package/dist/hooks/LastStateRootBlockHook.d.ts.map +1 -0
  21. package/dist/hooks/LastStateRootBlockHook.js +16 -0
  22. package/dist/hooks/LastStateRootBlockHook.js.map +1 -0
  23. package/dist/hooks/NoopBlockHook.d.ts +8 -0
  24. package/dist/hooks/NoopBlockHook.d.ts.map +1 -0
  25. package/dist/hooks/NoopBlockHook.js +10 -0
  26. package/dist/hooks/NoopBlockHook.js.map +1 -0
  27. package/dist/hooks/NoopSettlementHook.d.ts +6 -0
  28. package/dist/hooks/NoopSettlementHook.d.ts.map +1 -0
  29. package/dist/{prover/statetransition/StateTransitionWitnessProvider.js → hooks/NoopSettlementHook.js} +8 -7
  30. package/dist/hooks/NoopSettlementHook.js.map +1 -0
  31. package/dist/hooks/NoopTransactionHook.d.ts +6 -0
  32. package/dist/hooks/NoopTransactionHook.d.ts.map +1 -0
  33. package/dist/hooks/NoopTransactionHook.js +11 -0
  34. package/dist/hooks/NoopTransactionHook.js.map +1 -0
  35. package/dist/index.d.ts +51 -13
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +52 -13
  38. package/dist/index.js.map +1 -0
  39. package/dist/model/AppliedStateTransitionBatch.d.ts +114 -0
  40. package/dist/model/AppliedStateTransitionBatch.d.ts.map +1 -0
  41. package/dist/model/AppliedStateTransitionBatch.js +16 -0
  42. package/dist/model/AppliedStateTransitionBatch.js.map +1 -0
  43. package/dist/model/MethodPublicOutput.d.ts +83 -28
  44. package/dist/model/MethodPublicOutput.d.ts.map +1 -1
  45. package/dist/model/MethodPublicOutput.js +4 -1
  46. package/dist/model/MethodPublicOutput.js.map +1 -0
  47. package/dist/model/Option.d.ts +66 -42
  48. package/dist/model/Option.d.ts.map +1 -1
  49. package/dist/model/Option.js +58 -45
  50. package/dist/model/Option.js.map +1 -0
  51. package/dist/model/Path.d.ts +4 -3
  52. package/dist/model/Path.d.ts.map +1 -1
  53. package/dist/model/Path.js +6 -5
  54. package/dist/model/Path.js.map +1 -0
  55. package/dist/model/RuntimeLike.d.ts +11 -0
  56. package/dist/model/RuntimeLike.d.ts.map +1 -0
  57. package/dist/model/RuntimeLike.js +2 -0
  58. package/dist/model/RuntimeLike.js.map +1 -0
  59. package/dist/model/StateTransition.d.ts +58 -18
  60. package/dist/model/StateTransition.d.ts.map +1 -1
  61. package/dist/model/StateTransition.js +13 -4
  62. package/dist/model/StateTransition.js.map +1 -0
  63. package/dist/model/StateTransitionProvableBatch.d.ts +369 -54
  64. package/dist/model/StateTransitionProvableBatch.d.ts.map +1 -1
  65. package/dist/model/StateTransitionProvableBatch.js +74 -51
  66. package/dist/model/StateTransitionProvableBatch.js.map +1 -0
  67. package/dist/model/network/NetworkState.d.ts +105 -9
  68. package/dist/model/network/NetworkState.d.ts.map +1 -1
  69. package/dist/model/network/NetworkState.js +22 -2
  70. package/dist/model/network/NetworkState.js.map +1 -0
  71. package/dist/model/transaction/AuthorizedTransaction.d.ts +122 -0
  72. package/dist/model/transaction/AuthorizedTransaction.d.ts.map +1 -0
  73. package/dist/model/transaction/AuthorizedTransaction.js +39 -0
  74. package/dist/model/transaction/AuthorizedTransaction.js.map +1 -0
  75. package/dist/model/transaction/RuntimeTransaction.d.ts +94 -34
  76. package/dist/model/transaction/RuntimeTransaction.d.ts.map +1 -1
  77. package/dist/model/transaction/RuntimeTransaction.js +72 -11
  78. package/dist/model/transaction/RuntimeTransaction.js.map +1 -0
  79. package/dist/model/transaction/SignedTransaction.d.ts +110 -0
  80. package/dist/model/transaction/SignedTransaction.d.ts.map +1 -0
  81. package/dist/model/transaction/SignedTransaction.js +34 -0
  82. package/dist/model/transaction/SignedTransaction.js.map +1 -0
  83. package/dist/model/transaction/ValueOption.d.ts +187 -0
  84. package/dist/model/transaction/ValueOption.d.ts.map +1 -0
  85. package/dist/model/transaction/ValueOption.js +25 -0
  86. package/dist/model/transaction/ValueOption.js.map +1 -0
  87. package/dist/protocol/Protocol.d.ts +45 -34
  88. package/dist/protocol/Protocol.d.ts.map +1 -1
  89. package/dist/protocol/Protocol.js +115 -57
  90. package/dist/protocol/Protocol.js.map +1 -0
  91. package/dist/protocol/ProtocolEnvironment.d.ts +9 -0
  92. package/dist/protocol/ProtocolEnvironment.d.ts.map +1 -0
  93. package/dist/protocol/ProtocolEnvironment.js +2 -0
  94. package/dist/protocol/ProtocolEnvironment.js.map +1 -0
  95. package/dist/protocol/ProtocolModule.d.ts +7 -6
  96. package/dist/protocol/ProtocolModule.d.ts.map +1 -1
  97. package/dist/protocol/ProtocolModule.js +10 -5
  98. package/dist/protocol/ProtocolModule.js.map +1 -0
  99. package/dist/protocol/ProvableBlockHook.d.ts +29 -0
  100. package/dist/protocol/ProvableBlockHook.d.ts.map +1 -0
  101. package/dist/protocol/ProvableBlockHook.js +20 -0
  102. package/dist/protocol/ProvableBlockHook.js.map +1 -0
  103. package/dist/protocol/ProvableTransactionHook.d.ts +32 -3
  104. package/dist/protocol/ProvableTransactionHook.d.ts.map +1 -1
  105. package/dist/protocol/ProvableTransactionHook.js +25 -0
  106. package/dist/protocol/ProvableTransactionHook.js.map +1 -0
  107. package/dist/protocol/TransitioningProtocolModule.d.ts +6 -1
  108. package/dist/protocol/TransitioningProtocolModule.d.ts.map +1 -1
  109. package/dist/protocol/TransitioningProtocolModule.js +6 -0
  110. package/dist/protocol/TransitioningProtocolModule.js.map +1 -0
  111. package/dist/prover/accumulators/AppliedBatchHashList.d.ts +18 -0
  112. package/dist/prover/accumulators/AppliedBatchHashList.d.ts.map +1 -0
  113. package/dist/prover/accumulators/AppliedBatchHashList.js +25 -0
  114. package/dist/prover/accumulators/AppliedBatchHashList.js.map +1 -0
  115. package/dist/prover/accumulators/BlockHashList.d.ts +263 -0
  116. package/dist/prover/accumulators/BlockHashList.d.ts.map +1 -0
  117. package/dist/prover/accumulators/BlockHashList.js +97 -0
  118. package/dist/prover/accumulators/BlockHashList.js.map +1 -0
  119. package/dist/prover/accumulators/StateTransitionReductionList.d.ts +12 -0
  120. package/dist/prover/accumulators/StateTransitionReductionList.d.ts.map +1 -0
  121. package/dist/prover/accumulators/StateTransitionReductionList.js +64 -0
  122. package/dist/prover/accumulators/StateTransitionReductionList.js.map +1 -0
  123. package/dist/prover/accumulators/TransactionHashList.d.ts +6 -0
  124. package/dist/prover/accumulators/TransactionHashList.d.ts.map +1 -0
  125. package/dist/prover/accumulators/TransactionHashList.js +8 -0
  126. package/dist/prover/accumulators/TransactionHashList.js.map +1 -0
  127. package/dist/prover/accumulators/WitnessedRootHashList.d.ts +123 -0
  128. package/dist/prover/accumulators/WitnessedRootHashList.d.ts.map +1 -0
  129. package/dist/prover/accumulators/WitnessedRootHashList.js +51 -0
  130. package/dist/prover/accumulators/WitnessedRootHashList.js.map +1 -0
  131. package/dist/prover/block/BlockProvable.d.ts +565 -96
  132. package/dist/prover/block/BlockProvable.d.ts.map +1 -1
  133. package/dist/prover/block/BlockProvable.js +196 -12
  134. package/dist/prover/block/BlockProvable.js.map +1 -0
  135. package/dist/prover/block/BlockProver.d.ts +45 -44
  136. package/dist/prover/block/BlockProver.d.ts.map +1 -1
  137. package/dist/prover/block/BlockProver.js +306 -143
  138. package/dist/prover/block/BlockProver.js.map +1 -0
  139. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts +106 -0
  140. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts.map +1 -0
  141. package/dist/prover/block/accummulators/BlockHashMerkleTree.js +25 -0
  142. package/dist/prover/block/accummulators/BlockHashMerkleTree.js.map +1 -0
  143. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.d.ts +139 -0
  144. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.d.ts.map +1 -0
  145. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js +21 -0
  146. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js.map +1 -0
  147. package/dist/prover/block/services/RuntimeVerificationKeyRootService.d.ts +7 -0
  148. package/dist/prover/block/services/RuntimeVerificationKeyRootService.d.ts.map +1 -0
  149. package/dist/prover/{statetransition/StateTransitionWitnessProviderReference.js → block/services/RuntimeVerificationKeyRootService.js} +11 -8
  150. package/dist/prover/block/services/RuntimeVerificationKeyRootService.js.map +1 -0
  151. package/dist/prover/statetransition/StateTransitionProvable.d.ts +137 -64
  152. package/dist/prover/statetransition/StateTransitionProvable.d.ts.map +1 -1
  153. package/dist/prover/statetransition/StateTransitionProvable.js +10 -7
  154. package/dist/prover/statetransition/StateTransitionProvable.js.map +1 -0
  155. package/dist/prover/statetransition/StateTransitionProver.d.ts +26 -24
  156. package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -1
  157. package/dist/prover/statetransition/StateTransitionProver.js +159 -93
  158. package/dist/prover/statetransition/StateTransitionProver.js.map +1 -0
  159. package/dist/prover/transaction/TransactionProvable.d.ts +626 -0
  160. package/dist/prover/transaction/TransactionProvable.d.ts.map +1 -0
  161. package/dist/prover/transaction/TransactionProvable.js +87 -0
  162. package/dist/prover/transaction/TransactionProvable.js.map +1 -0
  163. package/dist/prover/transaction/TransactionProver.d.ts +68 -0
  164. package/dist/prover/transaction/TransactionProver.d.ts.map +1 -0
  165. package/dist/prover/transaction/TransactionProver.js +301 -0
  166. package/dist/prover/transaction/TransactionProver.js.map +1 -0
  167. package/dist/prover/utils.d.ts +19 -0
  168. package/dist/prover/utils.d.ts.map +1 -0
  169. package/dist/prover/utils.js +67 -0
  170. package/dist/prover/utils.js.map +1 -0
  171. package/dist/settlement/ContractArgsRegistry.d.ts +13 -0
  172. package/dist/settlement/ContractArgsRegistry.d.ts.map +1 -0
  173. package/dist/settlement/ContractArgsRegistry.js +58 -0
  174. package/dist/settlement/ContractArgsRegistry.js.map +1 -0
  175. package/dist/settlement/ContractModule.d.ts +16 -0
  176. package/dist/settlement/ContractModule.d.ts.map +1 -0
  177. package/dist/settlement/ContractModule.js +12 -0
  178. package/dist/settlement/ContractModule.js.map +1 -0
  179. package/dist/settlement/SettlementContractModule.d.ts +47 -0
  180. package/dist/settlement/SettlementContractModule.d.ts.map +1 -0
  181. package/dist/settlement/SettlementContractModule.js +81 -0
  182. package/dist/settlement/SettlementContractModule.js.map +1 -0
  183. package/dist/settlement/contracts/BridgeContract.d.ts +114 -0
  184. package/dist/settlement/contracts/BridgeContract.d.ts.map +1 -0
  185. package/dist/settlement/contracts/BridgeContract.js +270 -0
  186. package/dist/settlement/contracts/BridgeContract.js.map +1 -0
  187. package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts +18 -0
  188. package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts.map +1 -0
  189. package/dist/settlement/contracts/BridgeContractProtocolModule.js +42 -0
  190. package/dist/settlement/contracts/BridgeContractProtocolModule.js.map +1 -0
  191. package/dist/settlement/contracts/BridgingSettlementContractModule.d.ts +21 -0
  192. package/dist/settlement/contracts/BridgingSettlementContractModule.d.ts.map +1 -0
  193. package/dist/settlement/contracts/BridgingSettlementContractModule.js +81 -0
  194. package/dist/settlement/contracts/BridgingSettlementContractModule.js.map +1 -0
  195. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts +23 -0
  196. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts.map +1 -0
  197. package/dist/settlement/contracts/DispatchContractProtocolModule.js +55 -0
  198. package/dist/settlement/contracts/DispatchContractProtocolModule.js.map +1 -0
  199. package/dist/settlement/contracts/DispatchSmartContract.d.ts +50 -0
  200. package/dist/settlement/contracts/DispatchSmartContract.d.ts.map +1 -0
  201. package/dist/settlement/contracts/DispatchSmartContract.js +234 -0
  202. package/dist/settlement/contracts/DispatchSmartContract.js.map +1 -0
  203. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts +21 -0
  204. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts.map +1 -0
  205. package/dist/settlement/contracts/SettlementContractProtocolModule.js +84 -0
  206. package/dist/settlement/contracts/SettlementContractProtocolModule.js.map +1 -0
  207. package/dist/settlement/contracts/SettlementSmartContract.d.ts +123 -0
  208. package/dist/settlement/contracts/SettlementSmartContract.d.ts.map +1 -0
  209. package/dist/settlement/contracts/SettlementSmartContract.js +310 -0
  210. package/dist/settlement/contracts/SettlementSmartContract.js.map +1 -0
  211. package/dist/settlement/contracts/SettlementSmartContractModule.d.ts +20 -0
  212. package/dist/settlement/contracts/SettlementSmartContractModule.d.ts.map +1 -0
  213. package/dist/settlement/contracts/SettlementSmartContractModule.js +56 -0
  214. package/dist/settlement/contracts/SettlementSmartContractModule.js.map +1 -0
  215. package/dist/settlement/contracts/TokenBridgeTree.d.ts +228 -0
  216. package/dist/settlement/contracts/TokenBridgeTree.d.ts.map +1 -0
  217. package/dist/settlement/contracts/TokenBridgeTree.js +60 -0
  218. package/dist/settlement/contracts/TokenBridgeTree.js.map +1 -0
  219. package/dist/settlement/contracts/authorizations/ContractAuthorization.d.ts +10 -0
  220. package/dist/settlement/contracts/authorizations/ContractAuthorization.d.ts.map +1 -0
  221. package/dist/settlement/contracts/authorizations/ContractAuthorization.js +2 -0
  222. package/dist/settlement/contracts/authorizations/ContractAuthorization.js.map +1 -0
  223. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.d.ts +85 -0
  224. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.d.ts.map +1 -0
  225. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.js +11 -0
  226. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.js.map +1 -0
  227. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.d.ts +79 -0
  228. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.d.ts.map +1 -0
  229. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.js +11 -0
  230. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.js.map +1 -0
  231. package/dist/settlement/contracts/settlement/BridgingSettlementContract.d.ts +107 -0
  232. package/dist/settlement/contracts/settlement/BridgingSettlementContract.d.ts.map +1 -0
  233. package/dist/settlement/contracts/settlement/BridgingSettlementContract.js +188 -0
  234. package/dist/settlement/contracts/settlement/BridgingSettlementContract.js.map +1 -0
  235. package/dist/settlement/contracts/settlement/SettlementBase.d.ts +41 -0
  236. package/dist/settlement/contracts/settlement/SettlementBase.d.ts.map +1 -0
  237. package/dist/settlement/contracts/settlement/SettlementBase.js +105 -0
  238. package/dist/settlement/contracts/settlement/SettlementBase.js.map +1 -0
  239. package/dist/settlement/contracts/settlement/SettlementContract.d.ts +15 -0
  240. package/dist/settlement/contracts/settlement/SettlementContract.d.ts.map +1 -0
  241. package/dist/settlement/contracts/settlement/SettlementContract.js +72 -0
  242. package/dist/settlement/contracts/settlement/SettlementContract.js.map +1 -0
  243. package/dist/settlement/messages/Deposit.d.ts +77 -0
  244. package/dist/settlement/messages/Deposit.d.ts.map +1 -0
  245. package/dist/settlement/messages/Deposit.js +8 -0
  246. package/dist/settlement/messages/Deposit.js.map +1 -0
  247. package/dist/settlement/messages/OutgoingMessage.d.ts +67 -0
  248. package/dist/settlement/messages/OutgoingMessage.d.ts.map +1 -0
  249. package/dist/settlement/messages/OutgoingMessage.js +7 -0
  250. package/dist/settlement/messages/OutgoingMessage.js.map +1 -0
  251. package/dist/settlement/messages/OutgoingMessageArgument.d.ts +588 -0
  252. package/dist/settlement/messages/OutgoingMessageArgument.d.ts.map +1 -0
  253. package/dist/settlement/messages/OutgoingMessageArgument.js +42 -0
  254. package/dist/settlement/messages/OutgoingMessageArgument.js.map +1 -0
  255. package/dist/settlement/messages/Withdrawal.d.ts +2 -0
  256. package/dist/settlement/messages/Withdrawal.d.ts.map +1 -0
  257. package/dist/settlement/messages/Withdrawal.js +3 -0
  258. package/dist/settlement/messages/Withdrawal.js.map +1 -0
  259. package/dist/settlement/modularity/OutgoingMessageProcessor.d.ts +28 -0
  260. package/dist/settlement/modularity/OutgoingMessageProcessor.d.ts.map +1 -0
  261. package/dist/settlement/modularity/OutgoingMessageProcessor.js +39 -0
  262. package/dist/settlement/modularity/OutgoingMessageProcessor.js.map +1 -0
  263. package/dist/settlement/modularity/ProvableSettlementHook.d.ts +26 -0
  264. package/dist/settlement/modularity/ProvableSettlementHook.d.ts.map +1 -0
  265. package/dist/settlement/modularity/ProvableSettlementHook.js +4 -0
  266. package/dist/settlement/modularity/ProvableSettlementHook.js.map +1 -0
  267. package/dist/settlement/modularity/types.d.ts +9 -0
  268. package/dist/settlement/modularity/types.d.ts.map +1 -0
  269. package/dist/settlement/modularity/types.js +2 -0
  270. package/dist/settlement/modularity/types.js.map +1 -0
  271. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts +11 -0
  272. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts.map +1 -0
  273. package/dist/settlement/modules/NetworkStateSettlementModule.js +15 -0
  274. package/dist/settlement/modules/NetworkStateSettlementModule.js.map +1 -0
  275. package/dist/state/SimpleAsyncStateService.d.ts +6 -0
  276. package/dist/state/SimpleAsyncStateService.d.ts.map +1 -0
  277. package/dist/state/SimpleAsyncStateService.js +2 -0
  278. package/dist/state/SimpleAsyncStateService.js.map +1 -0
  279. package/dist/state/State.d.ts +13 -5
  280. package/dist/state/State.d.ts.map +1 -1
  281. package/dist/state/State.js +42 -17
  282. package/dist/state/State.js.map +1 -0
  283. package/dist/state/StateMap.d.ts +4 -4
  284. package/dist/state/StateMap.d.ts.map +1 -1
  285. package/dist/state/StateMap.js +5 -5
  286. package/dist/state/StateMap.js.map +1 -0
  287. package/dist/state/StateService.d.ts +4 -4
  288. package/dist/state/StateService.d.ts.map +1 -1
  289. package/dist/state/StateService.js +1 -0
  290. package/dist/state/StateService.js.map +1 -0
  291. package/dist/state/StateServiceProvider.d.ts +5 -7
  292. package/dist/state/StateServiceProvider.d.ts.map +1 -1
  293. package/dist/state/StateServiceProvider.js +18 -23
  294. package/dist/state/StateServiceProvider.js.map +1 -0
  295. package/dist/state/WitnessBlockContext.d.ts +5 -0
  296. package/dist/state/WitnessBlockContext.d.ts.map +1 -0
  297. package/dist/state/WitnessBlockContext.js +48 -0
  298. package/dist/state/WitnessBlockContext.js.map +1 -0
  299. package/dist/state/assert/assert.d.ts +2 -2
  300. package/dist/state/assert/assert.d.ts.map +1 -1
  301. package/dist/state/assert/assert.js +16 -6
  302. package/dist/state/assert/assert.js.map +1 -0
  303. package/dist/state/context/RuntimeMethodExecutionContext.d.ts +137 -4
  304. package/dist/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -1
  305. package/dist/state/context/RuntimeMethodExecutionContext.js +44 -11
  306. package/dist/state/context/RuntimeMethodExecutionContext.js.map +1 -0
  307. package/dist/state/context/TransitionMethodExecutionContext.d.ts.map +1 -1
  308. package/dist/state/context/TransitionMethodExecutionContext.js +1 -1
  309. package/dist/state/context/TransitionMethodExecutionContext.js.map +1 -0
  310. package/dist/state/protocol/ProtocolState.d.ts +8 -2
  311. package/dist/state/protocol/ProtocolState.d.ts.map +1 -1
  312. package/dist/state/protocol/ProtocolState.js +36 -20
  313. package/dist/state/protocol/ProtocolState.js.map +1 -0
  314. package/dist/utils/FieldOptions.d.ts +62 -0
  315. package/dist/utils/FieldOptions.d.ts.map +1 -0
  316. package/dist/utils/FieldOptions.js +13 -0
  317. package/dist/utils/FieldOptions.js.map +1 -0
  318. package/dist/utils/MinaPrefixedProvableHashList.d.ts +20 -0
  319. package/dist/utils/MinaPrefixedProvableHashList.d.ts.map +1 -0
  320. package/dist/utils/MinaPrefixedProvableHashList.js +49 -0
  321. package/dist/utils/MinaPrefixedProvableHashList.js.map +1 -0
  322. package/dist/utils/PrefixedProvableHashList.d.ts +3 -2
  323. package/dist/utils/PrefixedProvableHashList.d.ts.map +1 -1
  324. package/dist/utils/PrefixedProvableHashList.js +5 -1
  325. package/dist/utils/PrefixedProvableHashList.js.map +1 -0
  326. package/dist/utils/ProvableHashList.d.ts +27 -4
  327. package/dist/utils/ProvableHashList.d.ts.map +1 -1
  328. package/dist/utils/ProvableHashList.js +51 -3
  329. package/dist/utils/ProvableHashList.js.map +1 -0
  330. package/dist/utils/ProvableReductionHashList.d.ts +18 -0
  331. package/dist/utils/ProvableReductionHashList.d.ts.map +1 -0
  332. package/dist/utils/ProvableReductionHashList.js +54 -0
  333. package/dist/utils/ProvableReductionHashList.js.map +1 -0
  334. package/dist/utils/StateTransitionReductionList.d.ts +11 -0
  335. package/dist/utils/StateTransitionReductionList.d.ts.map +1 -0
  336. package/dist/utils/StateTransitionReductionList.js +61 -0
  337. package/dist/utils/StateTransitionReductionList.js.map +1 -0
  338. package/dist/utils/utils.d.ts +11 -5
  339. package/dist/utils/utils.d.ts.map +1 -1
  340. package/dist/utils/utils.js +13 -13
  341. package/dist/utils/utils.js.map +1 -0
  342. package/jest.config.cjs +12 -1
  343. package/package.json +10 -10
  344. package/src/hashing/mina-prefixes.ts +10 -0
  345. package/src/hashing/protokit-prefixes.ts +37 -0
  346. package/src/hooks/AccountStateHook.ts +80 -0
  347. package/src/hooks/BlockHeightHook.ts +17 -0
  348. package/src/hooks/LastStateRootBlockHook.ts +25 -0
  349. package/src/hooks/NoopBlockHook.ts +24 -0
  350. package/src/hooks/NoopSettlementHook.ts +20 -0
  351. package/src/{blockmodules → hooks}/NoopTransactionHook.ts +9 -3
  352. package/src/index.ts +51 -13
  353. package/src/model/AppliedStateTransitionBatch.ts +16 -0
  354. package/src/model/MethodPublicOutput.ts +3 -1
  355. package/src/model/Option.ts +87 -57
  356. package/src/model/Path.ts +9 -5
  357. package/src/model/RuntimeLike.ts +12 -0
  358. package/src/model/StateTransition.ts +19 -5
  359. package/src/model/StateTransitionProvableBatch.ts +94 -73
  360. package/src/model/Transaction.ts +3 -1
  361. package/src/model/network/NetworkState.ts +22 -2
  362. package/src/model/transaction/AuthorizedTransaction.ts +50 -0
  363. package/src/model/transaction/RuntimeTransaction.ts +86 -15
  364. package/src/model/transaction/ValueOption.ts +28 -0
  365. package/src/protocol/Protocol.ts +186 -116
  366. package/src/protocol/ProtocolEnvironment.ts +10 -0
  367. package/src/protocol/ProtocolModule.ts +18 -11
  368. package/src/protocol/ProvableBlockHook.ts +67 -0
  369. package/src/protocol/ProvableTransactionHook.ts +92 -3
  370. package/src/protocol/TransitioningProtocolModule.ts +8 -1
  371. package/src/prover/accumulators/AppliedBatchHashList.ts +32 -0
  372. package/src/prover/accumulators/BlockHashList.ts +117 -0
  373. package/src/prover/accumulators/StateTransitionReductionList.ts +92 -0
  374. package/src/prover/accumulators/TransactionHashList.ts +9 -0
  375. package/src/prover/accumulators/WitnessedRootHashList.ts +62 -0
  376. package/src/prover/block/BlockProvable.ts +360 -28
  377. package/src/prover/block/BlockProver.ts +668 -251
  378. package/src/prover/block/accummulators/BlockHashMerkleTree.ts +24 -0
  379. package/src/prover/block/accummulators/RuntimeVerificationKeyTree.ts +24 -0
  380. package/src/prover/block/services/RuntimeVerificationKeyRootService.ts +20 -0
  381. package/src/prover/statetransition/StateTransitionProvable.ts +25 -20
  382. package/src/prover/statetransition/StateTransitionProver.ts +299 -168
  383. package/src/prover/transaction/TransactionProvable.ts +183 -0
  384. package/src/prover/transaction/TransactionProver.ts +561 -0
  385. package/src/prover/utils.ts +108 -0
  386. package/src/settlement/ContractArgsRegistry.ts +64 -0
  387. package/src/settlement/ContractModule.ts +31 -0
  388. package/src/settlement/SettlementContractModule.ts +150 -0
  389. package/src/settlement/contracts/BridgeContract.ts +383 -0
  390. package/src/settlement/contracts/BridgeContractProtocolModule.ts +49 -0
  391. package/src/settlement/contracts/BridgingSettlementContractModule.ts +116 -0
  392. package/src/settlement/contracts/DispatchContractProtocolModule.ts +77 -0
  393. package/src/settlement/contracts/DispatchSmartContract.ts +359 -0
  394. package/src/settlement/contracts/SettlementSmartContractModule.ts +79 -0
  395. package/src/settlement/contracts/TokenBridgeTree.ts +86 -0
  396. package/src/settlement/contracts/authorizations/ContractAuthorization.ts +11 -0
  397. package/src/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.ts +16 -0
  398. package/src/settlement/contracts/authorizations/UpdateMessagesHashAuth.ts +16 -0
  399. package/src/settlement/contracts/settlement/BridgingSettlementContract.ts +283 -0
  400. package/src/settlement/contracts/settlement/SettlementBase.ts +249 -0
  401. package/src/settlement/contracts/settlement/SettlementContract.ts +75 -0
  402. package/src/settlement/messages/Deposit.ts +7 -0
  403. package/src/settlement/messages/OutgoingMessage.ts +17 -0
  404. package/src/settlement/messages/OutgoingMessageArgument.ts +62 -0
  405. package/src/settlement/modularity/OutgoingMessageProcessor.ts +78 -0
  406. package/src/settlement/modularity/ProvableSettlementHook.ts +36 -0
  407. package/src/settlement/modularity/types.ts +23 -0
  408. package/src/settlement/modules/NetworkStateSettlementModule.ts +42 -0
  409. package/src/state/State.ts +49 -19
  410. package/src/state/StateMap.ts +5 -6
  411. package/src/state/StateService.ts +5 -5
  412. package/src/state/StateServiceProvider.ts +18 -18
  413. package/src/state/WitnessBlockContext.ts +54 -0
  414. package/src/state/assert/assert.ts +18 -8
  415. package/src/state/context/RuntimeMethodExecutionContext.ts +68 -11
  416. package/src/state/context/TransitionMethodExecutionContext.ts +0 -1
  417. package/src/state/protocol/ProtocolState.ts +61 -26
  418. package/src/utils/FieldOptions.ts +13 -0
  419. package/src/utils/MinaPrefixedProvableHashList.ts +70 -0
  420. package/src/utils/PrefixedProvableHashList.ts +6 -2
  421. package/src/utils/ProvableHashList.ts +109 -4
  422. package/src/utils/ProvableReductionHashList.ts +77 -0
  423. package/src/utils/utils.ts +21 -16
  424. package/test/BlockProver.test.ts +124 -140
  425. package/test/Protocol.test.ts +14 -21
  426. package/test/State.test.ts +45 -0
  427. package/test/StateTransition.test.ts +57 -65
  428. package/test/TestingProtocol.ts +36 -0
  429. package/test/compiling/types.ts +28 -0
  430. package/test/model/Option.test.ts +72 -0
  431. package/test/model/StateTransitionProvableBatch.test.ts +137 -0
  432. package/test/modularity/types.ts +35 -0
  433. package/test/prover/block/BlockProver.test.ts +18 -0
  434. package/test/prover/statetransition/StateTransitionProver.test.ts +261 -0
  435. package/{src → test}/state/assert/assert.test.ts +10 -3
  436. package/test/tsconfig.json +7 -0
  437. package/test/utils/ProvableHashList.test.ts +44 -0
  438. package/test/utils/ProvableReductionHashList.test.ts +117 -0
  439. package/test/utils.test.ts +0 -3
  440. package/LICENSE.md +0 -201
  441. package/dist/blockmodules/AccountStateModule.d.ts +0 -38
  442. package/dist/blockmodules/AccountStateModule.d.ts.map +0 -1
  443. package/dist/blockmodules/AccountStateModule.js +0 -38
  444. package/dist/blockmodules/NoopTransactionHook.d.ts +0 -6
  445. package/dist/blockmodules/NoopTransactionHook.d.ts.map +0 -1
  446. package/dist/blockmodules/NoopTransactionHook.js +0 -5
  447. package/dist/model/transaction/ProtocolTransaction.d.ts +0 -70
  448. package/dist/model/transaction/ProtocolTransaction.d.ts.map +0 -1
  449. package/dist/model/transaction/ProtocolTransaction.js +0 -18
  450. package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts +0 -16
  451. package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts.map +0 -1
  452. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts +0 -7
  453. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts.map +0 -1
  454. package/dist/state/context/ProtocolMethodExecutionContext.d.ts +0 -22
  455. package/dist/state/context/ProtocolMethodExecutionContext.d.ts.map +0 -1
  456. package/dist/state/context/ProtocolMethodExecutionContext.js +0 -28
  457. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts +0 -25
  458. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts.map +0 -1
  459. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.js +0 -77
  460. package/dist/utils/merkletree/MemoryMerkleTreeStorage.d.ts +0 -26
  461. package/dist/utils/merkletree/MemoryMerkleTreeStorage.d.ts.map +0 -1
  462. package/dist/utils/merkletree/MemoryMerkleTreeStorage.js +0 -79
  463. package/dist/utils/merkletree/MerkleTreeStore.d.ts +0 -11
  464. package/dist/utils/merkletree/MerkleTreeStore.d.ts.map +0 -1
  465. package/dist/utils/merkletree/MerkleTreeStore.js +0 -1
  466. package/dist/utils/merkletree/RollupMerkleTree.d.ts +0 -130
  467. package/dist/utils/merkletree/RollupMerkleTree.d.ts.map +0 -1
  468. package/dist/utils/merkletree/RollupMerkleTree.js +0 -244
  469. package/src/blockmodules/AccountStateModule.ts +0 -31
  470. package/src/model/Option.test.ts +0 -21
  471. package/src/model/transaction/ProtocolTransaction.ts +0 -25
  472. package/src/prover/statetransition/StateTransitionWitnessProvider.ts +0 -24
  473. package/src/prover/statetransition/StateTransitionWitnessProviderReference.ts +0 -17
  474. package/src/state/context/ProtocolMethodExecutionContext.ts +0 -36
  475. package/src/utils/merkletree/InMemoryMerkleTreeStorage.ts +0 -106
  476. package/src/utils/merkletree/MerkleTreeStore.ts +0 -15
  477. package/src/utils/merkletree/RollupMerkleTree.ts +0 -255
  478. package/src/utils/merkletree/VirtualMerkleTreeStore.ts +0 -21
  479. package/tsconfig.test.json +0 -9
@@ -1,124 +1,104 @@
1
1
  import {
2
+ AreProofsEnabled,
3
+ ChildContainerProvider,
2
4
  log,
3
5
  ModuleContainer,
4
6
  ModulesConfig,
5
7
  ModulesRecord,
8
+ Startable,
6
9
  StringKeyOf,
7
10
  TypedClass,
8
11
  } from "@proto-kit/common";
9
12
  import { DependencyContainer, Lifecycle } from "tsyringe";
10
13
 
11
14
  import { BlockProvable } from "../prover/block/BlockProvable";
12
- import { StateTransitionProver } from "../prover/statetransition/StateTransitionProver";
13
15
  import { StateTransitionProvable } from "../prover/statetransition/StateTransitionProvable";
14
- import { BlockProver } from "../prover/block/BlockProver";
15
16
  import { StateServiceProvider } from "../state/StateServiceProvider";
16
- import { StateService } from "../state/StateService";
17
+ import { SimpleAsyncStateService } from "../state/StateService";
18
+ import { NoopBlockHook } from "../hooks/NoopBlockHook";
19
+ import { BlockHeightHook } from "../hooks/BlockHeightHook";
20
+ import { LastStateRootBlockHook } from "../hooks/LastStateRootBlockHook";
21
+ import { ProvableSettlementHook } from "../settlement/modularity/ProvableSettlementHook";
22
+ import { NoopSettlementHook } from "../hooks/NoopSettlementHook";
23
+ import { AccountStateHook } from "../hooks/AccountStateHook";
24
+ import { NoopTransactionHook } from "../hooks/NoopTransactionHook";
25
+ import { TransactionProvable } from "../prover/transaction/TransactionProvable";
26
+ import { StateTransitionProver } from "../prover/statetransition/StateTransitionProver";
27
+ import { TransactionProver } from "../prover/transaction/TransactionProver";
28
+ import { BlockProver } from "../prover/block/BlockProver";
17
29
 
18
30
  import { ProtocolModule } from "./ProtocolModule";
19
31
  import { ProvableTransactionHook } from "./ProvableTransactionHook";
20
- import { NoopTransactionHook } from "../blockmodules/NoopTransactionHook";
32
+ import { ProtocolEnvironment } from "./ProtocolEnvironment";
33
+ import { ProvableBlockHook } from "./ProvableBlockHook";
34
+ import { TransitioningProtocolModule } from "./TransitioningProtocolModule";
35
+
36
+ /**
37
+ * This is a mapping of abstract classes to their respective injection tokens.
38
+ * Keys are the abstract classes names, which need to be set dynamically
39
+ * and can't be hardcoded since producing optimized builds may mangle the
40
+ * class names, making them different from the ones in the source code.
41
+ */
42
+ const PROTOCOL_INJECTION_TOKENS: Record<string, string> = {
43
+ [ProvableTransactionHook.name]: "ProvableTransactionHook",
44
+ [ProvableBlockHook.name]: "ProvableBlockHook",
45
+ [ProvableSettlementHook.name]: "ProvableSettlementHook",
46
+ };
21
47
 
22
- export type GenericProtocolModuleRecord = ModulesRecord<
23
- TypedClass<ProtocolModule>
48
+ export type ProtocolModulesRecord = ModulesRecord<
49
+ TypedClass<ProtocolModule<unknown>>
24
50
  >;
25
51
 
26
- interface BlockProverType extends ProtocolModule, BlockProvable {}
52
+ export interface TransactionProverType
53
+ extends ProtocolModule,
54
+ TransactionProvable {}
55
+
56
+ export interface BlockProverType extends ProtocolModule, BlockProvable {}
27
57
 
28
- interface StateTransitionProverType
58
+ export interface StateTransitionProverType
29
59
  extends ProtocolModule,
30
60
  StateTransitionProvable {}
31
61
 
32
- export interface ProtocolCustomModulesRecord {
62
+ export type MandatoryProtocolModulesRecord = {
63
+ TransactionProver: TypedClass<TransactionProverType>;
33
64
  BlockProver: TypedClass<BlockProverType>;
34
65
  StateTransitionProver: TypedClass<StateTransitionProverType>;
35
- }
36
-
37
- export interface ProtocolModulesRecord
38
- extends GenericProtocolModuleRecord,
39
- ProtocolCustomModulesRecord {}
40
-
41
- export interface ProtocolDefinition<Modules extends ProtocolModulesRecord> {
42
- modules: Modules;
43
-
44
- /**
45
- * @deprecated
46
- */
47
- state?: StateService;
48
- // config: ModulesConfig<Modules>
49
- }
66
+ AccountState: TypedClass<AccountStateHook>;
67
+ BlockHeight: TypedClass<BlockHeightHook>;
68
+ LastStateRoot: TypedClass<LastStateRootBlockHook>;
69
+ };
50
70
 
51
71
  export class Protocol<
52
- Modules extends ProtocolModulesRecord
53
- > extends ModuleContainer<Modules> {
54
- // .from() to create Protocol
55
- public static from<Modules extends ProtocolModulesRecord>(
56
- modules: ProtocolDefinition<Modules>
57
- ) {
58
- const protocol = new Protocol(modules);
59
-
60
- // Set empty config for all modules, since we don't have that feature yet
61
- // eslint-disable-next-line max-len
62
- // eslint-disable-next-line @typescript-eslint/no-explicit-any,@typescript-eslint/no-unsafe-assignment
63
- const emptyConfig = Object.keys(modules.modules).reduce<any>(
64
- (agg, item: string) => {
65
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
66
- agg[item] = {};
67
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
68
- return agg;
69
- },
70
- {}
71
- );
72
- // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
73
- protocol.configure(emptyConfig as ModulesConfig<Modules>);
74
-
75
- return protocol;
72
+ Modules extends ProtocolModulesRecord & MandatoryProtocolModulesRecord,
73
+ >
74
+ extends ModuleContainer<Modules>
75
+ implements ProtocolEnvironment, Startable
76
+ {
77
+ public static from<
78
+ Modules extends ProtocolModulesRecord & MandatoryProtocolModulesRecord,
79
+ >(modules: Modules): TypedClass<Protocol<Modules>> {
80
+ return class ScopedProtocol extends Protocol<Modules> {
81
+ public constructor() {
82
+ super(modules);
83
+ }
84
+ };
76
85
  }
77
86
 
78
- public definition: ProtocolDefinition<Modules>;
87
+ // No idea why we have to do this, but if we don't re-define it here,
88
+ // js can't access it from the superclass somehow
89
+ public definition: Modules;
79
90
 
80
- private readonly stateServiceProviderInstance = new StateServiceProvider(
81
- // eslint-disable-next-line etc/no-deprecated
82
- this.definition.state
83
- );
84
-
85
- public constructor(definition: ProtocolDefinition<Modules>) {
91
+ public constructor(definition: Modules) {
86
92
  super(definition);
87
93
  this.definition = definition;
88
-
89
- // Register the BlockModules seperately since we need to
90
- // inject them differently later
91
- let atLeastOneTransactionHookRegistered = false;
92
- Object.entries(definition.modules).forEach(([key, value]) => {
93
- if (Object.prototype.isPrototypeOf.call(ProvableTransactionHook, value)) {
94
- this.container.register(
95
- "ProvableTransactionHook",
96
- { useToken: key },
97
- { lifecycle: Lifecycle.ContainerScoped }
98
- );
99
- atLeastOneTransactionHookRegistered = true;
100
- }
101
- });
102
-
103
- // We need this so that tsyringe doesn't throw when no hooks are registered
104
- if (!atLeastOneTransactionHookRegistered) {
105
- this.container.register(
106
- "ProvableTransactionHook",
107
- { useClass: NoopTransactionHook },
108
- { lifecycle: Lifecycle.ContainerScoped }
109
- );
110
- }
111
- // this.container.afterResolution<ProvableTransactionHook>("ProvableTransactionHook", (token, result) => {
112
- // if ()
113
- // })
114
94
  }
115
95
 
116
- public get stateService(): StateService {
117
- return this.stateServiceProviderInstance.stateService;
96
+ public get stateService(): SimpleAsyncStateService {
97
+ return this.stateServiceProvider.stateService;
118
98
  }
119
99
 
120
100
  public get stateServiceProvider(): StateServiceProvider {
121
- return this.stateServiceProviderInstance;
101
+ return this.container.resolve<StateServiceProvider>("StateServiceProvider");
122
102
  }
123
103
 
124
104
  public decorateModule(
@@ -126,14 +106,9 @@ export class Protocol<
126
106
  containedModule: InstanceType<Modules[StringKeyOf<Modules>]>
127
107
  ) {
128
108
  log.debug(`Decorated ${moduleName}`);
129
- containedModule.protocol = this;
109
+ containedModule.parent = this;
130
110
 
131
- log.debug(
132
- "Is instanceof:",
133
- containedModule instanceof ProvableTransactionHook
134
- );
135
- if (containedModule instanceof ProvableTransactionHook) {
136
- console.log(`Setting name to ${moduleName}`);
111
+ if (containedModule instanceof TransitioningProtocolModule) {
137
112
  containedModule.name = moduleName;
138
113
  }
139
114
 
@@ -147,7 +122,15 @@ export class Protocol<
147
122
  private isModule(
148
123
  moduleName: keyof Modules
149
124
  ): moduleName is StringKeyOf<Modules> {
150
- return this.definition.modules[moduleName] !== undefined;
125
+ return this.definition[moduleName] !== undefined;
126
+ }
127
+
128
+ public get transactionProver(): TransactionProvable {
129
+ // Why do I resolve directly here?
130
+ // I don't know exactly but generics don't let me use .resolve()
131
+ return this.container.resolve<InstanceType<Modules["TransactionProver"]>>(
132
+ "TransactionProver"
133
+ );
151
134
  }
152
135
 
153
136
  public get blockProver(): BlockProvable {
@@ -163,29 +146,116 @@ export class Protocol<
163
146
  InstanceType<Modules["StateTransitionProver"]>
164
147
  >("StateTransitionProver");
165
148
  }
166
- }
167
149
 
168
- export const VanillaProtocol = {
169
- create(stateService?: StateService) {
170
- return VanillaProtocol.from({}, stateService);
171
- },
172
-
173
- from<AdditonalModules extends GenericProtocolModuleRecord>(
174
- additionalModules: AdditonalModules,
175
- stateService?: StateService
176
- ): Protocol<
177
- AdditonalModules & {
178
- StateTransitionProver: typeof StateTransitionProver;
179
- BlockProver: typeof BlockProver;
180
- }
181
- > {
182
- return Protocol.from({
183
- modules: {
184
- StateTransitionProver,
185
- BlockProver,
186
- ...additionalModules,
187
- },
188
- state: stateService,
150
+ public static defaultModules() {
151
+ return {
152
+ StateTransitionProver,
153
+ TransactionProver,
154
+ BlockProver,
155
+ AccountState: AccountStateHook,
156
+ BlockHeight: BlockHeightHook,
157
+ LastStateRoot: LastStateRootBlockHook,
158
+ };
159
+ }
160
+
161
+ public static defaultConfig() {
162
+ return {
163
+ StateTransitionProver: {},
164
+ TransactionProver: {},
165
+ BlockProver: {},
166
+ AccountState: {},
167
+ BlockHeight: {},
168
+ LastStateRoot: {},
169
+ } satisfies ModulesConfig<ReturnType<typeof Protocol.defaultModules>>;
170
+ }
171
+
172
+ public getAreProofsEnabled(): AreProofsEnabled {
173
+ return this.container.resolve<AreProofsEnabled>("AreProofsEnabled");
174
+ }
175
+
176
+ public create(childContainerProvider: ChildContainerProvider) {
177
+ super.create(childContainerProvider);
178
+
179
+ // Register the BlockModules seperately since we need to
180
+ // inject them differently later
181
+ const ABSTRACT_MODULE_TYPES = [
182
+ { type: ProvableTransactionHook, defaultType: NoopTransactionHook },
183
+ { type: ProvableBlockHook, defaultType: NoopBlockHook },
184
+ { type: ProvableSettlementHook, defaultType: NoopSettlementHook },
185
+ ] as const;
186
+
187
+ ABSTRACT_MODULE_TYPES.forEach((moduleTypeRegistration) => {
188
+ const abstractType = moduleTypeRegistration.type;
189
+
190
+ const implementingModules = Object.entries(this.definition).filter(
191
+ ([, value]) => Object.prototype.isPrototypeOf.call(abstractType, value)
192
+ );
193
+
194
+ const newInjectionToken: string | undefined =
195
+ PROTOCOL_INJECTION_TOKENS[abstractType.name];
196
+
197
+ if (newInjectionToken === undefined) {
198
+ log.error(
199
+ "Can't inject hook under the underlying hook token: Alias not found in mapping"
200
+ );
201
+ return;
202
+ }
203
+
204
+ implementingModules.forEach(([key]) => {
205
+ this.container.register(
206
+ newInjectionToken,
207
+ { useToken: key },
208
+ { lifecycle: Lifecycle.ContainerScoped }
209
+ );
210
+ });
211
+ if (implementingModules.length === 0) {
212
+ // This type annotation shouldn't change anything but is necessary
213
+ // bcs tsyringe complains
214
+ const { defaultType }: { defaultType: TypedClass<unknown> } =
215
+ moduleTypeRegistration;
216
+
217
+ // Register default (noop) version
218
+ this.container.register(
219
+ newInjectionToken,
220
+ { useClass: defaultType },
221
+ { lifecycle: Lifecycle.ContainerScoped }
222
+ );
223
+ }
189
224
  });
190
- },
191
- };
225
+
226
+ // Cross-register all runtime modules to the protocol container for easier
227
+ // access of runtime modules inside protocol hooks
228
+ if (this.container.isRegistered("Runtime", true)) {
229
+ const runtimeContainer: ModuleContainer<any> =
230
+ this.container.resolve("Runtime");
231
+
232
+ runtimeContainer.moduleNames.forEach((runtimeModuleName) => {
233
+ this.container.register(runtimeModuleName, {
234
+ useFactory: (dependencyContainer) => {
235
+ // Prevents creation of closure
236
+ const runtime: ModuleContainer<any> =
237
+ dependencyContainer.resolve("Runtime");
238
+ return runtime.resolve(runtimeModuleName);
239
+ },
240
+ });
241
+ });
242
+ } else {
243
+ log.warn(
244
+ "Couldn't resolve Runtime reference in Protocol, resolving RuntimeModules in hooks won't be available"
245
+ );
246
+ }
247
+ }
248
+
249
+ public async start() {
250
+ // eslint-disable-next-line guard-for-in
251
+ for (const moduleName in this.definition) {
252
+ const protocolModule = this.resolve(moduleName);
253
+
254
+ log.info(
255
+ `Starting protocol module ${moduleName} (${protocolModule.constructor.name})`
256
+ );
257
+ // eslint-disable-next-line no-await-in-loop
258
+ await protocolModule.start();
259
+ }
260
+ }
261
+ }
@@ -0,0 +1,10 @@
1
+ import { AreProofsEnabled } from "@proto-kit/common";
2
+
3
+ import { SimpleAsyncStateService } from "../state/StateService";
4
+ import { StateServiceProvider } from "../state/StateServiceProvider";
5
+
6
+ export interface ProtocolEnvironment {
7
+ get stateService(): SimpleAsyncStateService;
8
+ get stateServiceProvider(): StateServiceProvider;
9
+ getAreProofsEnabled(): AreProofsEnabled;
10
+ }
@@ -1,20 +1,27 @@
1
1
  import {
2
2
  AreProofsEnabled,
3
- Configurable,
3
+ ChildContainerProvider,
4
+ ConfigurableModule,
5
+ NoConfig,
6
+ noop,
4
7
  } from "@proto-kit/common";
5
8
 
6
- import type { Protocol, ProtocolModulesRecord } from "./Protocol";
9
+ import { ProtocolEnvironment } from "./ProtocolEnvironment";
7
10
 
8
- export abstract class ProtocolModule
9
- implements Configurable<unknown>
10
- {
11
- public config = {};
11
+ export abstract class ProtocolModule<
12
+ Config = NoConfig,
13
+ > extends ConfigurableModule<Config> {
14
+ public parent?: ProtocolEnvironment;
12
15
 
13
- public protocol?: Protocol<ProtocolModulesRecord>;
16
+ public get areProofsEnabled(): AreProofsEnabled | undefined {
17
+ return this.parent?.getAreProofsEnabled();
18
+ }
19
+
20
+ public create(childContainerProvider: ChildContainerProvider): void {
21
+ noop();
22
+ }
14
23
 
15
- public get appChain(): AreProofsEnabled | undefined {
16
- return this.protocol?.dependencyContainer.resolve<AreProofsEnabled>(
17
- "AppChain"
18
- );
24
+ public async start() {
25
+ noop();
19
26
  }
20
27
  }
@@ -0,0 +1,67 @@
1
+ import { Field } from "o1js";
2
+ import { NoConfig } from "@proto-kit/common";
3
+
4
+ import { NetworkState } from "../model/network/NetworkState";
5
+ import {
6
+ BlockProverPublicInput,
7
+ BlockArguments,
8
+ BlockProverState,
9
+ } from "../prover/block/BlockProvable";
10
+
11
+ import { TransitioningProtocolModule } from "./TransitioningProtocolModule";
12
+
13
+ export type ProvableHookBlockState = Pick<
14
+ BlockProverPublicInput & BlockArguments,
15
+ "eternalTransactionsHash" | "incomingMessagesHash" | "blockHashRoot"
16
+ >;
17
+
18
+ export function toBeforeBlockHookArgument(
19
+ state: Pick<
20
+ BlockProverState,
21
+ "eternalTransactionsList" | "incomingMessages" | "blockHashRoot"
22
+ >
23
+ ) {
24
+ const { eternalTransactionsList, incomingMessages, blockHashRoot } = state;
25
+ return {
26
+ eternalTransactionsHash: eternalTransactionsList.commitment,
27
+ incomingMessagesHash: incomingMessages.commitment,
28
+ blockHashRoot,
29
+ };
30
+ }
31
+
32
+ export function toAfterBlockHookArgument(
33
+ state: Pick<
34
+ BlockProverState,
35
+ "eternalTransactionsList" | "incomingMessages" | "blockHashRoot"
36
+ >,
37
+ stateRoot: Field,
38
+ transactionsHash: Field
39
+ ) {
40
+ return {
41
+ ...toBeforeBlockHookArgument(state),
42
+ stateRoot,
43
+ transactionsHash,
44
+ };
45
+ }
46
+
47
+ export interface BeforeBlockHookArguments extends ProvableHookBlockState {}
48
+
49
+ export interface AfterBlockHookArguments extends BeforeBlockHookArguments {
50
+ stateRoot: Field;
51
+ transactionsHash: Field;
52
+ }
53
+
54
+ // Purpose is to build transition from -> to network state
55
+ export abstract class ProvableBlockHook<
56
+ Config = NoConfig,
57
+ > extends TransitioningProtocolModule<Config> {
58
+ public abstract beforeBlock(
59
+ networkState: NetworkState,
60
+ state: BeforeBlockHookArguments
61
+ ): Promise<NetworkState>;
62
+
63
+ public abstract afterBlock(
64
+ networkState: NetworkState,
65
+ state: AfterBlockHookArguments
66
+ ): Promise<NetworkState>;
67
+ }
@@ -1,7 +1,96 @@
1
- import { BlockProverExecutionData } from "../prover/block/BlockProvable";
1
+ import { NoConfig } from "@proto-kit/common";
2
+ import { Field } from "o1js";
3
+
4
+ import { NetworkState } from "../model/network/NetworkState";
5
+ import { MethodPublicOutput } from "../model/MethodPublicOutput";
6
+ import { TransactionProverState } from "../prover/transaction/TransactionProvable";
7
+ import { AuthorizedTransaction } from "../model/transaction/AuthorizedTransaction";
2
8
 
3
9
  import { TransitioningProtocolModule } from "./TransitioningProtocolModule";
4
10
 
5
- export abstract class ProvableTransactionHook extends TransitioningProtocolModule {
6
- public abstract onTransaction(executionData: BlockProverExecutionData): void;
11
+ export type ProvableHookTransactionState = {
12
+ transactionsHash: Field;
13
+ eternalTransactionsHash: Field;
14
+ incomingMessagesHash: Field;
15
+ };
16
+
17
+ export function toProvableHookTransactionState(
18
+ state: Pick<
19
+ TransactionProverState,
20
+ "transactionList" | "eternalTransactionsList" | "incomingMessages"
21
+ >
22
+ ): ProvableHookTransactionState {
23
+ const { transactionList, eternalTransactionsList, incomingMessages } = state;
24
+ return {
25
+ transactionsHash: transactionList.commitment,
26
+ eternalTransactionsHash: eternalTransactionsList.commitment,
27
+ incomingMessagesHash: incomingMessages.commitment,
28
+ };
29
+ }
30
+
31
+ export function toBeforeTransactionHookArgument(
32
+ authorizedTransaction: AuthorizedTransaction,
33
+ networkState: NetworkState,
34
+ state: Parameters<typeof toProvableHookTransactionState>[0]
35
+ ): BeforeTransactionHookArguments {
36
+ return {
37
+ networkState,
38
+ transaction: authorizedTransaction,
39
+ prover: toProvableHookTransactionState(state),
40
+ };
41
+ }
42
+
43
+ export function toAfterTransactionHookArgument(
44
+ authorizedTransaction: AuthorizedTransaction,
45
+ networkState: NetworkState,
46
+ state: Parameters<typeof toProvableHookTransactionState>[0],
47
+ runtimeResult: MethodPublicOutput
48
+ ): AfterTransactionHookArguments {
49
+ return {
50
+ ...toBeforeTransactionHookArgument(
51
+ authorizedTransaction,
52
+ networkState,
53
+ state
54
+ ),
55
+ runtimeResult,
56
+ };
57
+ }
58
+
59
+ /**
60
+ * This type is a reduced set of the runtime method's public output.
61
+ * It omits internal commitments to data that is already present as data in
62
+ * the hook arguments
63
+ */
64
+ export type TransactionResult = Omit<
65
+ MethodPublicOutput,
66
+ "networkStateHash" | "transactionHash"
67
+ >;
68
+
69
+ export interface BeforeTransactionHookArguments {
70
+ transaction: AuthorizedTransaction;
71
+ networkState: NetworkState;
72
+ prover: ProvableHookTransactionState;
73
+ }
74
+
75
+ export interface AfterTransactionHookArguments
76
+ extends BeforeTransactionHookArguments {
77
+ runtimeResult: TransactionResult;
78
+ }
79
+
80
+ export abstract class ProvableTransactionHook<
81
+ Config = NoConfig,
82
+ > extends TransitioningProtocolModule<Config> {
83
+ public abstract beforeTransaction(
84
+ executionData: BeforeTransactionHookArguments
85
+ ): Promise<void>;
86
+
87
+ public abstract afterTransaction(
88
+ execution: AfterTransactionHookArguments
89
+ ): Promise<void>;
90
+
91
+ public async removeTransactionWhen(
92
+ execution: BeforeTransactionHookArguments
93
+ ): Promise<boolean> {
94
+ return false;
95
+ }
7
96
  }
@@ -1,5 +1,12 @@
1
1
  import { ProtocolModule } from "./ProtocolModule";
2
2
 
3
- export abstract class TransitioningProtocolModule extends ProtocolModule {
3
+ /**
4
+ * TransitioningProtocolModule is a base interface that allows inheriting
5
+ * classes to use State and StateMap since it requires the implementation
6
+ * of a `name: string` property, which those classes need to function.
7
+ */
8
+ export abstract class TransitioningProtocolModule<
9
+ Config,
10
+ > extends ProtocolModule<Config> {
4
11
  public name?: string;
5
12
  }
@@ -0,0 +1,32 @@
1
+ import { Bool, Field } from "o1js";
2
+
3
+ import { DefaultProvableHashList } from "../../utils/ProvableHashList";
4
+ import { NonMethods } from "../../utils/utils";
5
+ import { AppliedStateTransitionBatch } from "../../model/AppliedStateTransitionBatch";
6
+
7
+ /**
8
+ * A HashList for AppliedSTBatches, that in addition to the default
9
+ * functionality, checks that the pushed batches are not empty.
10
+ * If they are, the pushing is skipped.
11
+ * Note that if the batch has applied: false, the batch still has to be appended
12
+ * if it has STs inside
13
+ */
14
+ export class AppliedBatchHashList extends DefaultProvableHashList<
15
+ NonMethods<AppliedStateTransitionBatch>
16
+ > {
17
+ public constructor(commitment: Field = Field(0)) {
18
+ super(AppliedStateTransitionBatch, commitment);
19
+ }
20
+
21
+ private isNotEmpty(value: AppliedStateTransitionBatch): Bool {
22
+ return value.batchHash.equals(Field(0)).not();
23
+ }
24
+
25
+ public push(value: AppliedStateTransitionBatch) {
26
+ return super.pushIf(value, this.isNotEmpty(value));
27
+ }
28
+
29
+ public pushIf(value: AppliedStateTransitionBatch, condition: Bool) {
30
+ return super.pushIf(value, condition.and(this.isNotEmpty(value)));
31
+ }
32
+ }