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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (466) hide show
  1. package/dist/Constants.js +1 -0
  2. package/dist/Constants.js.map +1 -0
  3. package/dist/hashing/mina-prefixes.d.ts +10 -0
  4. package/dist/hashing/mina-prefixes.d.ts.map +1 -0
  5. package/dist/hashing/mina-prefixes.js +10 -0
  6. package/dist/hashing/mina-prefixes.js.map +1 -0
  7. package/dist/hashing/protokit-prefixes.d.ts +10 -0
  8. package/dist/hashing/protokit-prefixes.d.ts.map +1 -0
  9. package/dist/hashing/protokit-prefixes.js +24 -0
  10. package/dist/hashing/protokit-prefixes.js.map +1 -0
  11. package/dist/hooks/AccountStateHook.d.ts +56 -0
  12. package/dist/hooks/AccountStateHook.d.ts.map +1 -0
  13. package/dist/hooks/AccountStateHook.js +62 -0
  14. package/dist/hooks/AccountStateHook.js.map +1 -0
  15. package/dist/hooks/BlockHeightHook.d.ts +7 -0
  16. package/dist/hooks/BlockHeightHook.d.ts.map +1 -0
  17. package/dist/hooks/BlockHeightHook.js +16 -0
  18. package/dist/hooks/BlockHeightHook.js.map +1 -0
  19. package/dist/hooks/LastStateRootBlockHook.d.ts +7 -0
  20. package/dist/hooks/LastStateRootBlockHook.d.ts.map +1 -0
  21. package/dist/hooks/LastStateRootBlockHook.js +16 -0
  22. package/dist/hooks/LastStateRootBlockHook.js.map +1 -0
  23. package/dist/hooks/NoopBlockHook.d.ts +8 -0
  24. package/dist/hooks/NoopBlockHook.d.ts.map +1 -0
  25. package/dist/hooks/NoopBlockHook.js +10 -0
  26. package/dist/hooks/NoopBlockHook.js.map +1 -0
  27. package/dist/hooks/NoopSettlementHook.d.ts +6 -0
  28. package/dist/hooks/NoopSettlementHook.d.ts.map +1 -0
  29. package/dist/{prover/statetransition/StateTransitionWitnessProvider.js → hooks/NoopSettlementHook.js} +8 -7
  30. package/dist/hooks/NoopSettlementHook.js.map +1 -0
  31. package/dist/hooks/NoopTransactionHook.d.ts +6 -0
  32. package/dist/hooks/NoopTransactionHook.d.ts.map +1 -0
  33. package/dist/hooks/NoopTransactionHook.js +11 -0
  34. package/dist/hooks/NoopTransactionHook.js.map +1 -0
  35. package/dist/index.d.ts +59 -9
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +60 -9
  38. package/dist/index.js.map +1 -0
  39. package/dist/model/AppliedStateTransitionBatch.d.ts +114 -0
  40. package/dist/model/AppliedStateTransitionBatch.d.ts.map +1 -0
  41. package/dist/model/AppliedStateTransitionBatch.js +16 -0
  42. package/dist/model/AppliedStateTransitionBatch.js.map +1 -0
  43. package/dist/model/MethodPublicOutput.d.ts +83 -28
  44. package/dist/model/MethodPublicOutput.d.ts.map +1 -1
  45. package/dist/model/MethodPublicOutput.js +4 -1
  46. package/dist/model/MethodPublicOutput.js.map +1 -0
  47. package/dist/model/Option.d.ts +70 -46
  48. package/dist/model/Option.d.ts.map +1 -1
  49. package/dist/model/Option.js +62 -57
  50. package/dist/model/Option.js.map +1 -0
  51. package/dist/model/Path.d.ts +4 -3
  52. package/dist/model/Path.d.ts.map +1 -1
  53. package/dist/model/Path.js +6 -5
  54. package/dist/model/Path.js.map +1 -0
  55. package/dist/model/RuntimeLike.d.ts +11 -0
  56. package/dist/model/RuntimeLike.d.ts.map +1 -0
  57. package/dist/model/RuntimeLike.js +2 -0
  58. package/dist/model/RuntimeLike.js.map +1 -0
  59. package/dist/model/StateTransition.d.ts +58 -18
  60. package/dist/model/StateTransition.d.ts.map +1 -1
  61. package/dist/model/StateTransition.js +13 -4
  62. package/dist/model/StateTransition.js.map +1 -0
  63. package/dist/model/StateTransitionProvableBatch.d.ts +389 -16
  64. package/dist/model/StateTransitionProvableBatch.d.ts.map +1 -1
  65. package/dist/model/StateTransitionProvableBatch.js +87 -10
  66. package/dist/model/StateTransitionProvableBatch.js.map +1 -0
  67. package/dist/model/network/NetworkState.d.ts +105 -9
  68. package/dist/model/network/NetworkState.d.ts.map +1 -1
  69. package/dist/model/network/NetworkState.js +22 -2
  70. package/dist/model/network/NetworkState.js.map +1 -0
  71. package/dist/model/transaction/AuthorizedTransaction.d.ts +122 -0
  72. package/dist/model/transaction/AuthorizedTransaction.d.ts.map +1 -0
  73. package/dist/model/transaction/AuthorizedTransaction.js +39 -0
  74. package/dist/model/transaction/AuthorizedTransaction.js.map +1 -0
  75. package/dist/model/transaction/RuntimeTransaction.d.ts +94 -34
  76. package/dist/model/transaction/RuntimeTransaction.d.ts.map +1 -1
  77. package/dist/model/transaction/RuntimeTransaction.js +72 -11
  78. package/dist/model/transaction/RuntimeTransaction.js.map +1 -0
  79. package/dist/model/transaction/SignedTransaction.d.ts +110 -0
  80. package/dist/model/transaction/SignedTransaction.d.ts.map +1 -0
  81. package/dist/model/transaction/SignedTransaction.js +34 -0
  82. package/dist/model/transaction/SignedTransaction.js.map +1 -0
  83. package/dist/model/transaction/ValueOption.d.ts +187 -0
  84. package/dist/model/transaction/ValueOption.d.ts.map +1 -0
  85. package/dist/model/transaction/ValueOption.js +25 -0
  86. package/dist/model/transaction/ValueOption.js.map +1 -0
  87. package/dist/protocol/Protocol.d.ts +47 -21
  88. package/dist/protocol/Protocol.d.ts.map +1 -1
  89. package/dist/protocol/Protocol.js +127 -26
  90. package/dist/protocol/Protocol.js.map +1 -0
  91. package/dist/protocol/ProtocolEnvironment.d.ts +9 -0
  92. package/dist/protocol/ProtocolEnvironment.d.ts.map +1 -0
  93. package/dist/protocol/ProtocolEnvironment.js +2 -0
  94. package/dist/protocol/ProtocolEnvironment.js.map +1 -0
  95. package/dist/protocol/ProtocolModule.d.ts +7 -7
  96. package/dist/protocol/ProtocolModule.d.ts.map +1 -1
  97. package/dist/protocol/ProtocolModule.js +10 -7
  98. package/dist/protocol/ProtocolModule.js.map +1 -0
  99. package/dist/protocol/ProvableBlockHook.d.ts +29 -0
  100. package/dist/protocol/ProvableBlockHook.d.ts.map +1 -0
  101. package/dist/protocol/ProvableBlockHook.js +20 -0
  102. package/dist/protocol/ProvableBlockHook.js.map +1 -0
  103. package/dist/protocol/ProvableTransactionHook.d.ts +35 -0
  104. package/dist/protocol/ProvableTransactionHook.d.ts.map +1 -0
  105. package/dist/protocol/ProvableTransactionHook.js +28 -0
  106. package/dist/protocol/ProvableTransactionHook.js.map +1 -0
  107. package/dist/protocol/TransitioningProtocolModule.d.ts +10 -0
  108. package/dist/protocol/TransitioningProtocolModule.d.ts.map +1 -0
  109. package/dist/protocol/TransitioningProtocolModule.js +9 -0
  110. package/dist/protocol/TransitioningProtocolModule.js.map +1 -0
  111. package/dist/prover/accumulators/AppliedBatchHashList.d.ts +18 -0
  112. package/dist/prover/accumulators/AppliedBatchHashList.d.ts.map +1 -0
  113. package/dist/prover/accumulators/AppliedBatchHashList.js +25 -0
  114. package/dist/prover/accumulators/AppliedBatchHashList.js.map +1 -0
  115. package/dist/prover/accumulators/BlockHashList.d.ts +263 -0
  116. package/dist/prover/accumulators/BlockHashList.d.ts.map +1 -0
  117. package/dist/prover/accumulators/BlockHashList.js +97 -0
  118. package/dist/prover/accumulators/BlockHashList.js.map +1 -0
  119. package/dist/prover/accumulators/StateTransitionReductionList.d.ts +12 -0
  120. package/dist/prover/accumulators/StateTransitionReductionList.d.ts.map +1 -0
  121. package/dist/prover/accumulators/StateTransitionReductionList.js +64 -0
  122. package/dist/prover/accumulators/StateTransitionReductionList.js.map +1 -0
  123. package/dist/prover/accumulators/TransactionHashList.d.ts +6 -0
  124. package/dist/prover/accumulators/TransactionHashList.d.ts.map +1 -0
  125. package/dist/prover/accumulators/TransactionHashList.js +8 -0
  126. package/dist/prover/accumulators/TransactionHashList.js.map +1 -0
  127. package/dist/prover/accumulators/WitnessedRootHashList.d.ts +123 -0
  128. package/dist/prover/accumulators/WitnessedRootHashList.d.ts.map +1 -0
  129. package/dist/prover/accumulators/WitnessedRootHashList.js +51 -0
  130. package/dist/prover/accumulators/WitnessedRootHashList.js.map +1 -0
  131. package/dist/prover/block/BlockProvable.d.ts +565 -96
  132. package/dist/prover/block/BlockProvable.d.ts.map +1 -1
  133. package/dist/prover/block/BlockProvable.js +196 -12
  134. package/dist/prover/block/BlockProvable.js.map +1 -0
  135. package/dist/prover/block/BlockProver.d.ts +52 -37
  136. package/dist/prover/block/BlockProver.d.ts.map +1 -1
  137. package/dist/prover/block/BlockProver.js +327 -107
  138. package/dist/prover/block/BlockProver.js.map +1 -0
  139. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts +106 -0
  140. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts.map +1 -0
  141. package/dist/prover/block/accummulators/BlockHashMerkleTree.js +25 -0
  142. package/dist/prover/block/accummulators/BlockHashMerkleTree.js.map +1 -0
  143. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.d.ts +139 -0
  144. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.d.ts.map +1 -0
  145. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js +21 -0
  146. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js.map +1 -0
  147. package/dist/prover/block/services/RuntimeVerificationKeyRootService.d.ts +7 -0
  148. package/dist/prover/block/services/RuntimeVerificationKeyRootService.d.ts.map +1 -0
  149. package/dist/prover/{statetransition/StateTransitionWitnessProviderReference.js → block/services/RuntimeVerificationKeyRootService.js} +11 -8
  150. package/dist/prover/block/services/RuntimeVerificationKeyRootService.js.map +1 -0
  151. package/dist/prover/statetransition/StateTransitionProvable.d.ts +137 -48
  152. package/dist/prover/statetransition/StateTransitionProvable.d.ts.map +1 -1
  153. package/dist/prover/statetransition/StateTransitionProvable.js +10 -5
  154. package/dist/prover/statetransition/StateTransitionProvable.js.map +1 -0
  155. package/dist/prover/statetransition/StateTransitionProver.d.ts +29 -17
  156. package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -1
  157. package/dist/prover/statetransition/StateTransitionProver.js +171 -73
  158. package/dist/prover/statetransition/StateTransitionProver.js.map +1 -0
  159. package/dist/prover/transaction/TransactionProvable.d.ts +626 -0
  160. package/dist/prover/transaction/TransactionProvable.d.ts.map +1 -0
  161. package/dist/prover/transaction/TransactionProvable.js +87 -0
  162. package/dist/prover/transaction/TransactionProvable.js.map +1 -0
  163. package/dist/prover/transaction/TransactionProver.d.ts +68 -0
  164. package/dist/prover/transaction/TransactionProver.d.ts.map +1 -0
  165. package/dist/prover/transaction/TransactionProver.js +301 -0
  166. package/dist/prover/transaction/TransactionProver.js.map +1 -0
  167. package/dist/prover/utils.d.ts +19 -0
  168. package/dist/prover/utils.d.ts.map +1 -0
  169. package/dist/prover/utils.js +67 -0
  170. package/dist/prover/utils.js.map +1 -0
  171. package/dist/settlement/ContractArgsRegistry.d.ts +13 -0
  172. package/dist/settlement/ContractArgsRegistry.d.ts.map +1 -0
  173. package/dist/settlement/ContractArgsRegistry.js +53 -0
  174. package/dist/settlement/ContractArgsRegistry.js.map +1 -0
  175. package/dist/settlement/ContractModule.d.ts +16 -0
  176. package/dist/settlement/ContractModule.d.ts.map +1 -0
  177. package/dist/settlement/ContractModule.js +12 -0
  178. package/dist/settlement/ContractModule.js.map +1 -0
  179. package/dist/settlement/SettlementContractModule.d.ts +47 -0
  180. package/dist/settlement/SettlementContractModule.d.ts.map +1 -0
  181. package/dist/settlement/SettlementContractModule.js +81 -0
  182. package/dist/settlement/SettlementContractModule.js.map +1 -0
  183. package/dist/settlement/contracts/BridgeContract.d.ts +119 -0
  184. package/dist/settlement/contracts/BridgeContract.d.ts.map +1 -0
  185. package/dist/settlement/contracts/BridgeContract.js +269 -0
  186. package/dist/settlement/contracts/BridgeContract.js.map +1 -0
  187. package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts +18 -0
  188. package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts.map +1 -0
  189. package/dist/settlement/contracts/BridgeContractProtocolModule.js +42 -0
  190. package/dist/settlement/contracts/BridgeContractProtocolModule.js.map +1 -0
  191. package/dist/settlement/contracts/BridgingSettlementContractModule.d.ts +21 -0
  192. package/dist/settlement/contracts/BridgingSettlementContractModule.d.ts.map +1 -0
  193. package/dist/settlement/contracts/BridgingSettlementContractModule.js +81 -0
  194. package/dist/settlement/contracts/BridgingSettlementContractModule.js.map +1 -0
  195. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts +23 -0
  196. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts.map +1 -0
  197. package/dist/settlement/contracts/DispatchContractProtocolModule.js +55 -0
  198. package/dist/settlement/contracts/DispatchContractProtocolModule.js.map +1 -0
  199. package/dist/settlement/contracts/DispatchSmartContract.d.ts +50 -0
  200. package/dist/settlement/contracts/DispatchSmartContract.d.ts.map +1 -0
  201. package/dist/settlement/contracts/DispatchSmartContract.js +234 -0
  202. package/dist/settlement/contracts/DispatchSmartContract.js.map +1 -0
  203. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts +21 -0
  204. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts.map +1 -0
  205. package/dist/settlement/contracts/SettlementContractProtocolModule.js +84 -0
  206. package/dist/settlement/contracts/SettlementContractProtocolModule.js.map +1 -0
  207. package/dist/settlement/contracts/SettlementSmartContract.d.ts +123 -0
  208. package/dist/settlement/contracts/SettlementSmartContract.d.ts.map +1 -0
  209. package/dist/settlement/contracts/SettlementSmartContract.js +310 -0
  210. package/dist/settlement/contracts/SettlementSmartContract.js.map +1 -0
  211. package/dist/settlement/contracts/SettlementSmartContractModule.d.ts +20 -0
  212. package/dist/settlement/contracts/SettlementSmartContractModule.d.ts.map +1 -0
  213. package/dist/settlement/contracts/SettlementSmartContractModule.js +56 -0
  214. package/dist/settlement/contracts/SettlementSmartContractModule.js.map +1 -0
  215. package/dist/settlement/contracts/TokenBridgeTree.d.ts +228 -0
  216. package/dist/settlement/contracts/TokenBridgeTree.d.ts.map +1 -0
  217. package/dist/settlement/contracts/TokenBridgeTree.js +60 -0
  218. package/dist/settlement/contracts/TokenBridgeTree.js.map +1 -0
  219. package/dist/settlement/contracts/authorizations/ContractAuthorization.d.ts +10 -0
  220. package/dist/settlement/contracts/authorizations/ContractAuthorization.d.ts.map +1 -0
  221. package/dist/settlement/contracts/authorizations/ContractAuthorization.js +2 -0
  222. package/dist/settlement/contracts/authorizations/ContractAuthorization.js.map +1 -0
  223. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.d.ts +85 -0
  224. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.d.ts.map +1 -0
  225. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.js +11 -0
  226. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.js.map +1 -0
  227. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.d.ts +79 -0
  228. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.d.ts.map +1 -0
  229. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.js +11 -0
  230. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.js.map +1 -0
  231. package/dist/settlement/contracts/settlement/BridgingSettlementContract.d.ts +107 -0
  232. package/dist/settlement/contracts/settlement/BridgingSettlementContract.d.ts.map +1 -0
  233. package/dist/settlement/contracts/settlement/BridgingSettlementContract.js +188 -0
  234. package/dist/settlement/contracts/settlement/BridgingSettlementContract.js.map +1 -0
  235. package/dist/settlement/contracts/settlement/SettlementBase.d.ts +41 -0
  236. package/dist/settlement/contracts/settlement/SettlementBase.d.ts.map +1 -0
  237. package/dist/settlement/contracts/settlement/SettlementBase.js +105 -0
  238. package/dist/settlement/contracts/settlement/SettlementBase.js.map +1 -0
  239. package/dist/settlement/contracts/settlement/SettlementContract.d.ts +15 -0
  240. package/dist/settlement/contracts/settlement/SettlementContract.d.ts.map +1 -0
  241. package/dist/settlement/contracts/settlement/SettlementContract.js +72 -0
  242. package/dist/settlement/contracts/settlement/SettlementContract.js.map +1 -0
  243. package/dist/settlement/messages/Deposit.d.ts +77 -0
  244. package/dist/settlement/messages/Deposit.d.ts.map +1 -0
  245. package/dist/settlement/messages/Deposit.js +8 -0
  246. package/dist/settlement/messages/Deposit.js.map +1 -0
  247. package/dist/settlement/messages/OutgoingMessage.d.ts +67 -0
  248. package/dist/settlement/messages/OutgoingMessage.d.ts.map +1 -0
  249. package/dist/settlement/messages/OutgoingMessage.js +7 -0
  250. package/dist/settlement/messages/OutgoingMessage.js.map +1 -0
  251. package/dist/settlement/messages/OutgoingMessageArgument.d.ts +494 -0
  252. package/dist/settlement/messages/OutgoingMessageArgument.d.ts.map +1 -0
  253. package/dist/settlement/messages/OutgoingMessageArgument.js +40 -0
  254. package/dist/settlement/messages/OutgoingMessageArgument.js.map +1 -0
  255. package/dist/settlement/messages/Withdrawal.d.ts +2 -0
  256. package/dist/settlement/messages/Withdrawal.d.ts.map +1 -0
  257. package/dist/settlement/messages/Withdrawal.js +3 -0
  258. package/dist/settlement/messages/Withdrawal.js.map +1 -0
  259. package/dist/settlement/modularity/OutgoingMessageProcessor.d.ts +25 -0
  260. package/dist/settlement/modularity/OutgoingMessageProcessor.d.ts.map +1 -0
  261. package/dist/settlement/modularity/OutgoingMessageProcessor.js +30 -0
  262. package/dist/settlement/modularity/OutgoingMessageProcessor.js.map +1 -0
  263. package/dist/settlement/modularity/ProvableSettlementHook.d.ts +26 -0
  264. package/dist/settlement/modularity/ProvableSettlementHook.d.ts.map +1 -0
  265. package/dist/settlement/modularity/ProvableSettlementHook.js +4 -0
  266. package/dist/settlement/modularity/ProvableSettlementHook.js.map +1 -0
  267. package/dist/settlement/modularity/types.d.ts +9 -0
  268. package/dist/settlement/modularity/types.d.ts.map +1 -0
  269. package/dist/settlement/modularity/types.js +2 -0
  270. package/dist/settlement/modularity/types.js.map +1 -0
  271. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts +11 -0
  272. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts.map +1 -0
  273. package/dist/settlement/modules/NetworkStateSettlementModule.js +15 -0
  274. package/dist/settlement/modules/NetworkStateSettlementModule.js.map +1 -0
  275. package/dist/state/SimpleAsyncStateService.d.ts +6 -0
  276. package/dist/state/SimpleAsyncStateService.d.ts.map +1 -0
  277. package/dist/state/SimpleAsyncStateService.js +2 -0
  278. package/dist/state/SimpleAsyncStateService.js.map +1 -0
  279. package/dist/state/State.d.ts +68 -0
  280. package/dist/state/State.d.ts.map +1 -0
  281. package/dist/state/State.js +141 -0
  282. package/dist/state/State.js.map +1 -0
  283. package/dist/state/StateMap.d.ts +37 -0
  284. package/dist/state/StateMap.d.ts.map +1 -0
  285. package/dist/state/StateMap.js +56 -0
  286. package/dist/state/StateMap.js.map +1 -0
  287. package/dist/state/StateService.d.ts +6 -0
  288. package/dist/state/StateService.d.ts.map +1 -0
  289. package/dist/state/StateService.js +2 -0
  290. package/dist/state/StateService.js.map +1 -0
  291. package/dist/state/StateServiceProvider.d.ts +8 -0
  292. package/dist/state/StateServiceProvider.d.ts.map +1 -0
  293. package/dist/state/StateServiceProvider.js +37 -0
  294. package/dist/state/StateServiceProvider.js.map +1 -0
  295. package/dist/state/WitnessBlockContext.d.ts +5 -0
  296. package/dist/state/WitnessBlockContext.d.ts.map +1 -0
  297. package/dist/state/WitnessBlockContext.js +42 -0
  298. package/dist/state/WitnessBlockContext.js.map +1 -0
  299. package/dist/state/assert/assert.d.ts +12 -0
  300. package/dist/state/assert/assert.d.ts.map +1 -0
  301. package/dist/state/assert/assert.js +33 -0
  302. package/dist/state/assert/assert.js.map +1 -0
  303. package/dist/state/context/RuntimeMethodExecutionContext.d.ts +193 -0
  304. package/dist/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -0
  305. package/dist/state/context/RuntimeMethodExecutionContext.js +138 -0
  306. package/dist/state/context/RuntimeMethodExecutionContext.js.map +1 -0
  307. package/dist/state/context/TransitionMethodExecutionContext.d.ts +23 -0
  308. package/dist/state/context/TransitionMethodExecutionContext.d.ts.map +1 -0
  309. package/dist/state/context/TransitionMethodExecutionContext.js +6 -0
  310. package/dist/state/context/TransitionMethodExecutionContext.js.map +1 -0
  311. package/dist/state/protocol/ProtocolState.d.ts +13 -0
  312. package/dist/state/protocol/ProtocolState.d.ts.map +1 -0
  313. package/dist/state/protocol/ProtocolState.js +58 -0
  314. package/dist/state/protocol/ProtocolState.js.map +1 -0
  315. package/dist/utils/FieldOptions.d.ts +62 -0
  316. package/dist/utils/FieldOptions.d.ts.map +1 -0
  317. package/dist/utils/FieldOptions.js +13 -0
  318. package/dist/utils/FieldOptions.js.map +1 -0
  319. package/dist/utils/MinaPrefixedProvableHashList.d.ts +20 -0
  320. package/dist/utils/MinaPrefixedProvableHashList.d.ts.map +1 -0
  321. package/dist/utils/MinaPrefixedProvableHashList.js +49 -0
  322. package/dist/utils/MinaPrefixedProvableHashList.js.map +1 -0
  323. package/dist/utils/PrefixedProvableHashList.d.ts +3 -2
  324. package/dist/utils/PrefixedProvableHashList.d.ts.map +1 -1
  325. package/dist/utils/PrefixedProvableHashList.js +5 -1
  326. package/dist/utils/PrefixedProvableHashList.js.map +1 -0
  327. package/dist/utils/ProvableHashList.d.ts +27 -4
  328. package/dist/utils/ProvableHashList.d.ts.map +1 -1
  329. package/dist/utils/ProvableHashList.js +51 -3
  330. package/dist/utils/ProvableHashList.js.map +1 -0
  331. package/dist/utils/ProvableReductionHashList.d.ts +18 -0
  332. package/dist/utils/ProvableReductionHashList.d.ts.map +1 -0
  333. package/dist/utils/ProvableReductionHashList.js +54 -0
  334. package/dist/utils/ProvableReductionHashList.js.map +1 -0
  335. package/dist/utils/StateTransitionReductionList.d.ts +11 -0
  336. package/dist/utils/StateTransitionReductionList.d.ts.map +1 -0
  337. package/dist/utils/StateTransitionReductionList.js +61 -0
  338. package/dist/utils/StateTransitionReductionList.js.map +1 -0
  339. package/dist/utils/utils.d.ts +11 -5
  340. package/dist/utils/utils.d.ts.map +1 -1
  341. package/dist/utils/utils.js +13 -13
  342. package/dist/utils/utils.js.map +1 -0
  343. package/jest.config.cjs +12 -1
  344. package/package.json +11 -9
  345. package/src/hashing/mina-prefixes.ts +10 -0
  346. package/src/hashing/protokit-prefixes.ts +37 -0
  347. package/src/hooks/AccountStateHook.ts +80 -0
  348. package/src/hooks/BlockHeightHook.ts +17 -0
  349. package/src/hooks/LastStateRootBlockHook.ts +25 -0
  350. package/src/hooks/NoopBlockHook.ts +24 -0
  351. package/src/hooks/NoopSettlementHook.ts +20 -0
  352. package/src/hooks/NoopTransactionHook.ts +13 -0
  353. package/src/index.ts +59 -9
  354. package/src/model/AppliedStateTransitionBatch.ts +16 -0
  355. package/src/model/MethodPublicOutput.ts +3 -1
  356. package/src/model/Option.ts +99 -73
  357. package/src/model/Path.ts +9 -5
  358. package/src/model/RuntimeLike.ts +12 -0
  359. package/src/model/StateTransition.ts +19 -5
  360. package/src/model/StateTransitionProvableBatch.ts +114 -12
  361. package/src/model/Transaction.ts +3 -1
  362. package/src/model/network/NetworkState.ts +22 -2
  363. package/src/model/transaction/AuthorizedTransaction.ts +50 -0
  364. package/src/model/transaction/RuntimeTransaction.ts +86 -15
  365. package/src/model/transaction/ValueOption.ts +28 -0
  366. package/src/protocol/Protocol.ts +201 -69
  367. package/src/protocol/ProtocolEnvironment.ts +10 -0
  368. package/src/protocol/ProtocolModule.ts +16 -15
  369. package/src/protocol/ProvableBlockHook.ts +67 -0
  370. package/src/protocol/ProvableTransactionHook.ts +96 -0
  371. package/src/protocol/TransitioningProtocolModule.ts +12 -0
  372. package/src/prover/accumulators/AppliedBatchHashList.ts +32 -0
  373. package/src/prover/accumulators/BlockHashList.ts +117 -0
  374. package/src/prover/accumulators/StateTransitionReductionList.ts +92 -0
  375. package/src/prover/accumulators/TransactionHashList.ts +9 -0
  376. package/src/prover/accumulators/WitnessedRootHashList.ts +62 -0
  377. package/src/prover/block/BlockProvable.ts +360 -28
  378. package/src/prover/block/BlockProver.ts +721 -186
  379. package/src/prover/block/accummulators/BlockHashMerkleTree.ts +24 -0
  380. package/src/prover/block/accummulators/RuntimeVerificationKeyTree.ts +24 -0
  381. package/src/prover/block/services/RuntimeVerificationKeyRootService.ts +20 -0
  382. package/src/prover/statetransition/StateTransitionProvable.ts +26 -19
  383. package/src/prover/statetransition/StateTransitionProver.ts +337 -126
  384. package/src/prover/transaction/TransactionProvable.ts +183 -0
  385. package/src/prover/transaction/TransactionProver.ts +561 -0
  386. package/src/prover/utils.ts +108 -0
  387. package/src/settlement/ContractArgsRegistry.ts +60 -0
  388. package/src/settlement/ContractModule.ts +31 -0
  389. package/src/settlement/SettlementContractModule.ts +150 -0
  390. package/src/settlement/contracts/BridgeContract.ts +385 -0
  391. package/src/settlement/contracts/BridgeContractProtocolModule.ts +49 -0
  392. package/src/settlement/contracts/BridgingSettlementContractModule.ts +116 -0
  393. package/src/settlement/contracts/DispatchContractProtocolModule.ts +77 -0
  394. package/src/settlement/contracts/DispatchSmartContract.ts +359 -0
  395. package/src/settlement/contracts/SettlementSmartContractModule.ts +79 -0
  396. package/src/settlement/contracts/TokenBridgeTree.ts +73 -0
  397. package/src/settlement/contracts/authorizations/ContractAuthorization.ts +11 -0
  398. package/src/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.ts +16 -0
  399. package/src/settlement/contracts/authorizations/UpdateMessagesHashAuth.ts +16 -0
  400. package/src/settlement/contracts/settlement/BridgingSettlementContract.ts +283 -0
  401. package/src/settlement/contracts/settlement/SettlementBase.ts +249 -0
  402. package/src/settlement/contracts/settlement/SettlementContract.ts +75 -0
  403. package/src/settlement/messages/Deposit.ts +7 -0
  404. package/src/settlement/messages/OutgoingMessage.ts +17 -0
  405. package/src/settlement/messages/OutgoingMessageArgument.ts +53 -0
  406. package/src/settlement/modularity/OutgoingMessageProcessor.ts +65 -0
  407. package/src/settlement/modularity/ProvableSettlementHook.ts +36 -0
  408. package/src/settlement/modularity/types.ts +23 -0
  409. package/src/settlement/modules/NetworkStateSettlementModule.ts +42 -0
  410. package/src/state/State.ts +190 -0
  411. package/src/state/StateMap.ts +73 -0
  412. package/src/state/StateService.ts +6 -0
  413. package/src/state/StateServiceProvider.ts +37 -0
  414. package/src/state/WitnessBlockContext.ts +50 -0
  415. package/src/state/assert/assert.ts +38 -0
  416. package/src/state/context/RuntimeMethodExecutionContext.ts +181 -0
  417. package/src/state/context/TransitionMethodExecutionContext.ts +26 -0
  418. package/src/state/protocol/ProtocolState.ts +98 -0
  419. package/src/utils/FieldOptions.ts +13 -0
  420. package/src/utils/MinaPrefixedProvableHashList.ts +70 -0
  421. package/src/utils/PrefixedProvableHashList.ts +6 -2
  422. package/src/utils/ProvableHashList.ts +109 -4
  423. package/src/utils/ProvableReductionHashList.ts +77 -0
  424. package/src/utils/utils.ts +21 -16
  425. package/test/BlockProver.test.ts +161 -74
  426. package/test/Protocol.test.ts +20 -10
  427. package/test/State.test.ts +45 -0
  428. package/test/StateTransition.test.ts +57 -65
  429. package/test/TestingProtocol.ts +36 -0
  430. package/test/compiling/types.ts +28 -0
  431. package/test/model/Option.test.ts +72 -0
  432. package/test/model/StateTransitionProvableBatch.test.ts +137 -0
  433. package/test/modularity/types.ts +35 -0
  434. package/test/prover/block/BlockProver.test.ts +18 -0
  435. package/test/prover/statetransition/StateTransitionProver.test.ts +261 -0
  436. package/test/state/assert/assert.test.ts +56 -0
  437. package/test/tsconfig.json +7 -0
  438. package/test/utils/ProvableHashList.test.ts +44 -0
  439. package/test/utils/ProvableReductionHashList.test.ts +117 -0
  440. package/test/utils.test.ts +0 -3
  441. package/LICENSE.md +0 -201
  442. package/dist/model/transaction/ProtocolTransaction.d.ts +0 -70
  443. package/dist/model/transaction/ProtocolTransaction.d.ts.map +0 -1
  444. package/dist/model/transaction/ProtocolTransaction.js +0 -18
  445. package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts +0 -16
  446. package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts.map +0 -1
  447. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts +0 -7
  448. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts.map +0 -1
  449. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts +0 -25
  450. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts.map +0 -1
  451. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.js +0 -77
  452. package/dist/utils/merkletree/MerkleTreeStore.d.ts +0 -11
  453. package/dist/utils/merkletree/MerkleTreeStore.d.ts.map +0 -1
  454. package/dist/utils/merkletree/MerkleTreeStore.js +0 -1
  455. package/dist/utils/merkletree/RollupMerkleTree.d.ts +0 -130
  456. package/dist/utils/merkletree/RollupMerkleTree.d.ts.map +0 -1
  457. package/dist/utils/merkletree/RollupMerkleTree.js +0 -244
  458. package/src/model/Option.test.ts +0 -21
  459. package/src/model/transaction/ProtocolTransaction.ts +0 -25
  460. package/src/prover/statetransition/StateTransitionWitnessProvider.ts +0 -24
  461. package/src/prover/statetransition/StateTransitionWitnessProviderReference.ts +0 -17
  462. package/src/utils/merkletree/InMemoryMerkleTreeStorage.ts +0 -106
  463. package/src/utils/merkletree/MerkleTreeStore.ts +0 -15
  464. package/src/utils/merkletree/RollupMerkleTree.ts +0 -255
  465. package/src/utils/merkletree/VirtualMerkleTreeStore.ts +0 -21
  466. package/tsconfig.test.json +0 -9
@@ -1,82 +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
- import { DependencyContainer } from "tsyringe";
12
+ import { DependencyContainer, Lifecycle } from "tsyringe";
10
13
 
11
- import {
12
- BlockProvable,
13
- BlockProverPublicInput,
14
- BlockProverPublicOutput,
15
- } from "../prover/block/BlockProvable";
14
+ import { BlockProvable } from "../prover/block/BlockProvable";
15
+ import { StateTransitionProvable } from "../prover/statetransition/StateTransitionProvable";
16
+ import { StateServiceProvider } from "../state/StateServiceProvider";
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";
16
26
  import { StateTransitionProver } from "../prover/statetransition/StateTransitionProver";
17
- import {
18
- StateTransitionProvable,
19
- StateTransitionProverPublicInput,
20
- StateTransitionProverPublicOutput,
21
- } from "../prover/statetransition/StateTransitionProvable";
27
+ import { TransactionProver } from "../prover/transaction/TransactionProver";
22
28
  import { BlockProver } from "../prover/block/BlockProver";
23
29
 
24
30
  import { ProtocolModule } from "./ProtocolModule";
31
+ import { ProvableTransactionHook } from "./ProvableTransactionHook";
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
+ };
25
47
 
26
- export type GenericProtocolModuleRecord = ModulesRecord<
27
- TypedClass<ProtocolModule<any, any>>
48
+ export type ProtocolModulesRecord = ModulesRecord<
49
+ TypedClass<ProtocolModule<unknown>>
28
50
  >;
29
51
 
30
- interface BlockProverType
31
- extends ProtocolModule<BlockProverPublicInput, BlockProverPublicOutput>,
32
- BlockProvable {}
52
+ export interface TransactionProverType
53
+ extends ProtocolModule,
54
+ TransactionProvable {}
55
+
56
+ export interface BlockProverType extends ProtocolModule, BlockProvable {}
33
57
 
34
- interface StateTransitionProverType
35
- extends ProtocolModule<
36
- StateTransitionProverPublicInput,
37
- StateTransitionProverPublicOutput
38
- >,
58
+ export interface StateTransitionProverType
59
+ extends ProtocolModule,
39
60
  StateTransitionProvable {}
40
61
 
41
- export interface ProtocolCustomModulesRecord {
62
+ export type MandatoryProtocolModulesRecord = {
63
+ TransactionProver: TypedClass<TransactionProverType>;
42
64
  BlockProver: TypedClass<BlockProverType>;
43
65
  StateTransitionProver: TypedClass<StateTransitionProverType>;
44
- }
66
+ AccountState: TypedClass<AccountStateHook>;
67
+ BlockHeight: TypedClass<BlockHeightHook>;
68
+ LastStateRoot: TypedClass<LastStateRootBlockHook>;
69
+ };
45
70
 
46
- export interface ProtocolModulesRecord
47
- extends GenericProtocolModuleRecord,
48
- ProtocolCustomModulesRecord {}
71
+ export class 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
+ };
85
+ }
49
86
 
50
- export interface ProtocolDefinition<Modules extends ProtocolModulesRecord> {
51
- modules: Modules;
52
- // config: ModulesConfig<Modules>
53
- }
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;
54
90
 
55
- export class Protocol<
56
- Modules extends ProtocolModulesRecord
57
- > extends ModuleContainer<Modules> {
58
- // .from() to create Protocol
59
- public static from<Modules extends ProtocolModulesRecord>(
60
- modules: ProtocolDefinition<Modules>
61
- ) {
62
- const protocol = new Protocol(modules);
63
-
64
- // Set empty config for all modules, since we don't have that feature yet
65
- // eslint-disable-next-line max-len
66
- // eslint-disable-next-line @typescript-eslint/no-explicit-any,@typescript-eslint/no-unsafe-assignment
67
- const emptyConfig = Object.keys(modules.modules).reduce<any>(
68
- (agg, item: string) => {
69
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
70
- agg[item] = {};
71
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
72
- return agg;
73
- },
74
- {}
75
- );
76
- // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
77
- protocol.configure(emptyConfig as ModulesConfig<Modules>);
91
+ public constructor(definition: Modules) {
92
+ super(definition);
93
+ this.definition = definition;
94
+ }
78
95
 
79
- return protocol;
96
+ public get stateService(): SimpleAsyncStateService {
97
+ return this.stateServiceProvider.stateService;
98
+ }
99
+
100
+ public get stateServiceProvider(): StateServiceProvider {
101
+ return this.container.resolve<StateServiceProvider>("StateServiceProvider");
80
102
  }
81
103
 
82
104
  public decorateModule(
@@ -84,7 +106,11 @@ export class Protocol<
84
106
  containedModule: InstanceType<Modules[StringKeyOf<Modules>]>
85
107
  ) {
86
108
  log.debug(`Decorated ${moduleName}`);
87
- containedModule.protocol = this;
109
+ containedModule.parent = this;
110
+
111
+ if (containedModule instanceof TransitioningProtocolModule) {
112
+ containedModule.name = moduleName;
113
+ }
88
114
 
89
115
  super.decorateModule(moduleName, containedModule);
90
116
  }
@@ -96,7 +122,15 @@ export class Protocol<
96
122
  private isModule(
97
123
  moduleName: keyof Modules
98
124
  ): moduleName is StringKeyOf<Modules> {
99
- 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
+ );
100
134
  }
101
135
 
102
136
  public get blockProver(): BlockProvable {
@@ -112,18 +146,116 @@ export class Protocol<
112
146
  InstanceType<Modules["StateTransitionProver"]>
113
147
  >("StateTransitionProver");
114
148
  }
115
- }
116
149
 
117
- export const VanillaProtocol = {
118
- create(): Protocol<{
119
- StateTransitionProver: typeof StateTransitionProver;
120
- BlockProver: typeof BlockProver;
121
- }> {
122
- return Protocol.from({
123
- modules: {
124
- StateTransitionProver,
125
- BlockProver,
126
- },
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
+ }
127
224
  });
128
- },
129
- };
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,26 +1,27 @@
1
1
  import {
2
2
  AreProofsEnabled,
3
- Configurable,
4
- ZkProgrammable,
3
+ ChildContainerProvider,
4
+ ConfigurableModule,
5
+ NoConfig,
6
+ noop,
5
7
  } from "@proto-kit/common";
6
8
 
7
- import type { Protocol, ProtocolModulesRecord } from "./Protocol";
9
+ import { ProtocolEnvironment } from "./ProtocolEnvironment";
8
10
 
9
- export abstract class ProtocolModule<PublicInput, PublicOutput>
10
- extends ZkProgrammable<PublicInput, PublicOutput>
11
- implements Configurable<unknown>
12
- {
13
- public config = {};
11
+ export abstract class ProtocolModule<
12
+ Config = NoConfig,
13
+ > extends ConfigurableModule<Config> {
14
+ public parent?: ProtocolEnvironment;
14
15
 
15
- public protocol?: Protocol<ProtocolModulesRecord>;
16
+ public get areProofsEnabled(): AreProofsEnabled | undefined {
17
+ return this.parent?.getAreProofsEnabled();
18
+ }
16
19
 
17
- public constructor() {
18
- super();
20
+ public create(childContainerProvider: ChildContainerProvider): void {
21
+ noop();
19
22
  }
20
23
 
21
- public get appChain(): AreProofsEnabled | undefined {
22
- return this.protocol?.dependencyContainer.resolve<AreProofsEnabled>(
23
- "AppChain"
24
- );
24
+ public async start() {
25
+ noop();
25
26
  }
26
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
+ }
@@ -0,0 +1,96 @@
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";
8
+
9
+ import { TransitioningProtocolModule } from "./TransitioningProtocolModule";
10
+
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
+ }
96
+ }
@@ -0,0 +1,12 @@
1
+ import { ProtocolModule } from "./ProtocolModule";
2
+
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> {
11
+ public name?: string;
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
+ }