@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
@@ -0,0 +1,75 @@
1
+ import {
2
+ State,
3
+ UInt32,
4
+ AccountUpdateForest,
5
+ state,
6
+ method,
7
+ PublicKey,
8
+ Field,
9
+ Signature,
10
+ DeployArgs,
11
+ Permissions,
12
+ } from "o1js";
13
+ import { O1PublicKeyOption } from "@proto-kit/common";
14
+
15
+ import { NetworkState } from "../../../model/network/NetworkState";
16
+
17
+ import {
18
+ DynamicBlockProof,
19
+ SettlementBase,
20
+ SettlementContractType,
21
+ } from "./SettlementBase";
22
+
23
+ export class SettlementContract
24
+ extends SettlementBase
25
+ implements SettlementContractType
26
+ {
27
+ @state(Field) sequencerKey = State<Field>();
28
+
29
+ @state(UInt32) lastSettlementL1BlockHeight = State<UInt32>();
30
+
31
+ @state(Field) stateRoot = State<Field>();
32
+
33
+ @state(Field) networkStateHash = State<Field>();
34
+
35
+ @state(Field) blockHashRoot = State<Field>();
36
+
37
+ public async deployAndInitialize(
38
+ args: DeployArgs | undefined,
39
+ permissions: Permissions,
40
+ sequencer: PublicKey,
41
+ dispatchContract: O1PublicKeyOption
42
+ ): Promise<void> {
43
+ dispatchContract.assertNone(
44
+ "Non-bridging settlement contract doesn't require a dispatch contract"
45
+ );
46
+
47
+ await super.deploy(args);
48
+
49
+ this.self.account.permissions.set(permissions);
50
+
51
+ await this.initializeBase(sequencer);
52
+ }
53
+
54
+ @method async approveBase(forest: AccountUpdateForest) {
55
+ this.checkZeroBalanceChange(forest);
56
+ }
57
+
58
+ @method async settle(
59
+ blockProof: DynamicBlockProof,
60
+ signature: Signature,
61
+ publicKey: PublicKey,
62
+ inputNetworkState: NetworkState,
63
+ outputNetworkState: NetworkState,
64
+ newPromisedMessagesHash: Field
65
+ ): Promise<void> {
66
+ await super.settleBase(
67
+ blockProof,
68
+ signature,
69
+ publicKey,
70
+ inputNetworkState,
71
+ outputNetworkState,
72
+ newPromisedMessagesHash
73
+ );
74
+ }
75
+ }
@@ -0,0 +1,7 @@
1
+ import { Field, PublicKey, Struct, UInt64 } from "o1js";
2
+
3
+ export class Deposit extends Struct({
4
+ tokenId: Field,
5
+ address: PublicKey,
6
+ amount: UInt64,
7
+ }) {}
@@ -0,0 +1,17 @@
1
+ import { Field, Struct } from "o1js";
2
+
3
+ export class OutgoingMessageKeyStruct extends Struct({
4
+ index: Field,
5
+ tokenId: Field,
6
+ }) {}
7
+
8
+ export type OutgoingMessageEvent<T> = {
9
+ key: OutgoingMessageKeyStruct;
10
+ value: T;
11
+ messageType: Field;
12
+ };
13
+
14
+ export type OutgoingMessage<T> = {
15
+ value: T;
16
+ messageType: Field;
17
+ };
@@ -0,0 +1,62 @@
1
+ import {
2
+ Bool,
3
+ Field,
4
+ FlexibleProvablePure,
5
+ Provable,
6
+ Struct,
7
+ Unconstrained,
8
+ } from "o1js";
9
+ import {
10
+ LinkedMerkleTree,
11
+ LinkedMerkleTreeReadWitness,
12
+ } from "@proto-kit/common";
13
+
14
+ import { OutgoingMessage } from "./OutgoingMessage";
15
+
16
+ // TODO Make that dynamic based on processors configured
17
+ export const OUTGOING_MESSAGE_BATCH_SIZE = 1;
18
+
19
+ export function createMessageStruct<T>(type: FlexibleProvablePure<T>) {
20
+ return class MessageStruct extends Struct({
21
+ value: type,
22
+ messageType: Field,
23
+ }) {} satisfies FlexibleProvablePure<OutgoingMessage<T>>;
24
+ }
25
+
26
+ export class OutgoingMessageArgument extends Struct({
27
+ witness: LinkedMerkleTreeReadWitness,
28
+ messageType: Field,
29
+ data: Unconstrained<Field[]>,
30
+ }) {
31
+ public static dummy(): OutgoingMessageArgument {
32
+ return new OutgoingMessageArgument({
33
+ witness: LinkedMerkleTree.dummyReadWitness(),
34
+ messageType: Field(0),
35
+ data: Unconstrained.from([]),
36
+ });
37
+ }
38
+ }
39
+
40
+ export class OutgoingMessageArgumentBatch extends Struct({
41
+ arguments: Provable.Array(
42
+ OutgoingMessageArgument,
43
+ OUTGOING_MESSAGE_BATCH_SIZE
44
+ ),
45
+
46
+ isDummys: Provable.Array(Bool, OUTGOING_MESSAGE_BATCH_SIZE),
47
+ }) {
48
+ public static fromMessages(providedArguments: OutgoingMessageArgument[]) {
49
+ const batch = providedArguments.slice();
50
+ const isDummys = batch.map(() => Bool(false));
51
+
52
+ while (batch.length < OUTGOING_MESSAGE_BATCH_SIZE) {
53
+ batch.push(OutgoingMessageArgument.dummy());
54
+ isDummys.push(Bool(true));
55
+ }
56
+
57
+ return new OutgoingMessageArgumentBatch({
58
+ arguments: batch,
59
+ isDummys,
60
+ });
61
+ }
62
+ }
@@ -0,0 +1,78 @@
1
+ import {
2
+ AccountUpdate,
3
+ Bool,
4
+ Field,
5
+ FlexibleProvablePure,
6
+ Poseidon,
7
+ PublicKey,
8
+ } from "o1js";
9
+ import { implement, NoConfig, prefixToField } from "@proto-kit/common";
10
+
11
+ import { ProtocolModule } from "../../protocol/ProtocolModule";
12
+
13
+ export function outgoingMessageProcessor() {
14
+ return implement("OutgoingMessageProcessor");
15
+ }
16
+
17
+ export type MessageProcessorArgs = {
18
+ bridgeContract: {
19
+ publicKey: PublicKey;
20
+ tokenId: Field;
21
+ };
22
+ };
23
+
24
+ export abstract class OutgoingMessageProcessor<
25
+ T,
26
+ Config = NoConfig,
27
+ > extends ProtocolModule<Config> {
28
+ private status: Bool = Bool(false);
29
+
30
+ private statusMessage?: string = undefined;
31
+
32
+ public assertTrue(b: Bool, msg?: string) {
33
+ this.status = this.status.and(b);
34
+ if (this.statusMessage === undefined) {
35
+ this.statusMessage = msg;
36
+ }
37
+ }
38
+
39
+ processMessage(
40
+ message: T,
41
+ args: MessageProcessorArgs
42
+ ): {
43
+ accountUpdates: AccountUpdate[];
44
+ status: Bool;
45
+ statusMessage?: string;
46
+ } {
47
+ this.status = Bool(true);
48
+ this.statusMessage = undefined;
49
+
50
+ const accountUpdates = this.process(message, args);
51
+
52
+ return {
53
+ accountUpdates,
54
+ status: this.status,
55
+ statusMessage: this.statusMessage,
56
+ };
57
+ }
58
+
59
+ public getMessageType(): Field {
60
+ // TODO static salt/prefix
61
+ // This executes the bigint poseidon behind the scenes, therefore creates a constant
62
+ const messageType = Poseidon.hash([prefixToField(this.messageType)]);
63
+ if (!messageType.isConstant()) {
64
+ throw new Error(
65
+ "Underlying poseidon implementation has changed and doesn't create a constant anymore"
66
+ );
67
+ }
68
+ return messageType;
69
+ }
70
+
71
+ abstract type: FlexibleProvablePure<T> & { name: string };
72
+
73
+ abstract messageType: string;
74
+
75
+ abstract dummy(): T;
76
+
77
+ abstract process(message: T, args: MessageProcessorArgs): AccountUpdate[];
78
+ }
@@ -0,0 +1,36 @@
1
+ import { Field, PublicKey, UInt32 } from "o1js";
2
+ import { InferProofBase } from "@proto-kit/common";
3
+
4
+ import { ProtocolModule } from "../../protocol/ProtocolModule";
5
+ import { NetworkState } from "../../model/network/NetworkState";
6
+ import type { BlockProof } from "../../prover/block/BlockProvable";
7
+ import type { SettlementContractType } from "../contracts/settlement/SettlementBase";
8
+
9
+ export type InputBlockProof = InferProofBase<BlockProof>;
10
+
11
+ export type SettlementStateRecord = {
12
+ sequencerKey: PublicKey;
13
+ lastSettlementL1BlockHeight: UInt32;
14
+
15
+ stateRoot: Field;
16
+ networkStateHash: Field;
17
+ blockHashRoot: Field;
18
+ };
19
+
20
+ export type SettlementHookInputs = {
21
+ blockProof: InputBlockProof;
22
+ fromNetworkState: NetworkState;
23
+ toNetworkState: NetworkState;
24
+ newPromisedMessagesHash: Field;
25
+ contractState: SettlementStateRecord;
26
+ currentL1BlockHeight: UInt32;
27
+ };
28
+
29
+ export abstract class ProvableSettlementHook<
30
+ Config,
31
+ > extends ProtocolModule<Config> {
32
+ public abstract beforeSettlement(
33
+ smartContract: SettlementContractType,
34
+ inputs: SettlementHookInputs
35
+ ): Promise<void>;
36
+ }
@@ -0,0 +1,23 @@
1
+ import { TypedClass } from "@proto-kit/common";
2
+ import { SmartContract } from "o1js";
3
+
4
+ import {
5
+ ContractModule,
6
+ SmartContractClassFromInterface,
7
+ } from "../ContractModule";
8
+ import type { SettlementModulesRecord } from "../SettlementContractModule";
9
+
10
+ export type InferContractType<
11
+ Module extends TypedClass<ContractModule<any, any>>,
12
+ > =
13
+ Module extends TypedClass<infer ConcreteModule>
14
+ ? ConcreteModule extends ContractModule<infer Contract, any>
15
+ ? Contract & SmartContract
16
+ : never
17
+ : never;
18
+
19
+ export type GetContracts<SettlementModules extends SettlementModulesRecord> = {
20
+ [Key in keyof SettlementModules]: SmartContractClassFromInterface<
21
+ InferContractType<SettlementModules[Key]>
22
+ >;
23
+ };
@@ -0,0 +1,42 @@
1
+ import { UInt64 } from "o1js";
2
+
3
+ import {
4
+ ProvableSettlementHook,
5
+ SettlementHookInputs,
6
+ } from "../modularity/ProvableSettlementHook";
7
+ import { SettlementContractType } from "../contracts/settlement/SettlementBase";
8
+
9
+ type NetworkStateSettlementModuleConfig = {
10
+ blocksPerL1Block: UInt64;
11
+ };
12
+
13
+ /* eslint-disable @typescript-eslint/no-unused-vars */
14
+ export class NetworkStateSettlementModule extends ProvableSettlementHook<NetworkStateSettlementModuleConfig> {
15
+ public async beforeSettlement(
16
+ smartContract: SettlementContractType,
17
+ {
18
+ blockProof,
19
+ fromNetworkState,
20
+ toNetworkState,
21
+ contractState,
22
+ currentL1BlockHeight,
23
+ }: SettlementHookInputs
24
+ ) {
25
+ const { lastSettlementL1BlockHeight } = contractState;
26
+
27
+ const blocksPerL1Block = this.config.blocksPerL1Block.toConstant();
28
+
29
+ const numL1Blocks = currentL1BlockHeight.sub(lastSettlementL1BlockHeight);
30
+ const expectedHeightDiff = numL1Blocks.toUInt64().mul(blocksPerL1Block);
31
+
32
+ const actualHeightDiff = toNetworkState.block.height.sub(
33
+ fromNetworkState.block.height
34
+ );
35
+
36
+ const acceptableDerivation = numL1Blocks.mul(1).div(10);
37
+
38
+ // TODO Check within bounds efficiently
39
+ }
40
+ }
41
+
42
+ /* eslint-enable @typescript-eslint/no-unused-vars */
@@ -1,5 +1,5 @@
1
1
  import { Mixin } from "ts-mixer";
2
- import { Bool, Field, Provable, type FlexibleProvablePure } from "snarkyjs";
2
+ import { Bool, Field, Provable, type FlexibleProvablePure, Struct } from "o1js";
3
3
  import { container } from "tsyringe";
4
4
  import { dummyValue } from "@proto-kit/common";
5
5
 
@@ -9,6 +9,7 @@ import { StateTransition } from "../model/StateTransition";
9
9
 
10
10
  import { StateServiceProvider } from "./StateServiceProvider";
11
11
  import { RuntimeMethodExecutionContext } from "./context/RuntimeMethodExecutionContext";
12
+ import { WitnessBlockContext } from "./WitnessBlockContext";
12
13
 
13
14
  export class WithPath {
14
15
  public path?: Field;
@@ -54,7 +55,19 @@ export class State<Value> extends Mixin(WithPath, WithStateServiceProvider) {
54
55
  super();
55
56
  }
56
57
 
57
- private getState(): { value: Value; isSome: Bool } {
58
+ private stateType = class StateType extends Struct({
59
+ value: this.valueType,
60
+ isSome: Bool,
61
+ }) {};
62
+
63
+ /**
64
+ * Returns the state that is currently the current state tree
65
+ * value: The value-fields, or if not state was found, dummy values
66
+ * isSome: Whether the values where found in the state or not
67
+ * (Basically, whether the value-fields are dummy values or actual values
68
+ * @private
69
+ */
70
+ private async getState(): Promise<{ value: Value; isSome: Bool }> {
58
71
  this.hasStateServiceOrFail();
59
72
  this.hasPathOrFail();
60
73
 
@@ -64,9 +77,13 @@ export class State<Value> extends Mixin(WithPath, WithStateServiceProvider) {
64
77
  .resolve(RuntimeMethodExecutionContext)
65
78
  .current().result;
66
79
 
80
+ // TODO Use Stateservice for this
67
81
  // First try to find a match inside already created stateTransitions
68
- const previousMutatingTransitions = stateTransitions.filter((transition) =>
69
- transition.path.equals(path).and(transition.to.isSome).toBoolean()
82
+ let previousMutatingTransitions: StateTransition<any>[] = [];
83
+ previousMutatingTransitions = stateTransitions.filter(
84
+ (transition) =>
85
+ transition.path.toConstant().toBigInt() ===
86
+ path.toConstant().toBigInt() && transition.to.isSome.toBoolean()
70
87
  );
71
88
  const pmtLength = previousMutatingTransitions.length;
72
89
 
@@ -81,7 +98,7 @@ export class State<Value> extends Mixin(WithPath, WithStateServiceProvider) {
81
98
  }
82
99
 
83
100
  // If the value is still undefined, look it up in the stateService
84
- const fields = stateServiceProvider.stateService.get(path);
101
+ const fields = await stateServiceProvider.stateService.get(path);
85
102
  if (fields) {
86
103
  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
87
104
  value = valueType.fromFields(fields) as Value;
@@ -99,12 +116,13 @@ export class State<Value> extends Mixin(WithPath, WithStateServiceProvider) {
99
116
  *
100
117
  * @returns Optional value of the current state
101
118
  */
102
- private witnessState() {
119
+ private async witnessFromState() {
103
120
  // get the value from storage, or return a dummy value instead
104
- const value = Provable.witness(this.valueType, () => this.getState().value);
105
-
106
- // check if the value exists in the storage or not
107
- const isSome = Provable.witness(Bool, () => this.getState().isSome);
121
+ // also check if the value exists in the storage or not
122
+ const { value, isSome } = await Provable.witnessAsync(
123
+ this.stateType,
124
+ async () => await this.getState()
125
+ );
108
126
 
109
127
  return Option.from(isSome, value, this.valueType);
110
128
  }
@@ -115,16 +133,22 @@ export class State<Value> extends Mixin(WithPath, WithStateServiceProvider) {
115
133
  *
116
134
  * @returns Option representation of the current state.
117
135
  */
118
- public get(): Option<Value> {
119
- const option = this.witnessState();
136
+ public async get(): Promise<Option<Value>> {
137
+ const option = await this.witnessFromState();
120
138
 
121
139
  this.hasPathOrFail();
122
140
 
123
- const stateTransition = StateTransition.from(this.path, option);
141
+ const { isInWitnessBlock } = container.resolve(WitnessBlockContext);
124
142
 
125
- container
126
- .resolve(RuntimeMethodExecutionContext)
127
- .addStateTransition(stateTransition);
143
+ // If we're inside a witness block, we only want to retrieve the state
144
+ // to use as a witness but not emit an ST
145
+ if (!isInWitnessBlock) {
146
+ const stateTransition = StateTransition.from(this.path, option);
147
+
148
+ container
149
+ .resolve(RuntimeMethodExecutionContext)
150
+ .addStateTransition(stateTransition);
151
+ }
128
152
 
129
153
  return option;
130
154
  }
@@ -140,10 +164,10 @@ export class State<Value> extends Mixin(WithPath, WithStateServiceProvider) {
140
164
  *
141
165
  * @param value - Value to be set as the current state
142
166
  */
143
- public set(value: Value) {
167
+ public async set(value: Value) {
144
168
  // link the transition to the current state
145
- const fromOption = this.witnessState();
146
- const toOption = Option.from(Bool(true), value, this.valueType);
169
+ const fromOption = await this.witnessFromState();
170
+ const toOption = Option.fromValue(value, this.valueType);
147
171
 
148
172
  this.hasPathOrFail();
149
173
 
@@ -153,6 +177,12 @@ export class State<Value> extends Mixin(WithPath, WithStateServiceProvider) {
153
177
  toOption
154
178
  );
155
179
 
180
+ const { isInWitnessBlock } = container.resolve(WitnessBlockContext);
181
+
182
+ if (isInWitnessBlock) {
183
+ throw new Error("Cannot set state inside of provable block.");
184
+ }
185
+
156
186
  container
157
187
  .resolve(RuntimeMethodExecutionContext)
158
188
  .addStateTransition(stateTransition);
@@ -1,4 +1,4 @@
1
- import type { Field, FlexibleProvablePure } from "snarkyjs";
1
+ import type { Field, FlexibleProvablePure } from "o1js";
2
2
  import { Mixin } from "ts-mixer";
3
3
 
4
4
  import { Path } from "../model/Path";
@@ -9,7 +9,6 @@ import { State, WithStateServiceProvider, WithPath } from "./State";
9
9
  /**
10
10
  * Map-like wrapper for state
11
11
  */
12
- // eslint-disable-next-line new-cap
13
12
  export class StateMap<KeyType, ValueType> extends Mixin(
14
13
  WithPath,
15
14
  WithStateServiceProvider
@@ -46,14 +45,14 @@ export class StateMap<KeyType, ValueType> extends Mixin(
46
45
  * @param key - Key to obtain the state for
47
46
  * @returns Value for the provided key.
48
47
  */
49
- public get(key: KeyType): Option<ValueType> {
48
+ public async get(key: KeyType): Promise<Option<ValueType>> {
50
49
  const state = State.from(this.valueType);
51
50
  this.hasPathOrFail();
52
51
  this.hasStateServiceOrFail();
53
52
 
54
53
  state.path = this.getPath(key);
55
54
  state.stateServiceProvider = this.stateServiceProvider;
56
- return state.get();
55
+ return await state.get();
57
56
  }
58
57
 
59
58
  /**
@@ -62,13 +61,13 @@ export class StateMap<KeyType, ValueType> extends Mixin(
62
61
  * @param key - Key to store the value under
63
62
  * @param value - Value to be stored under the given key
64
63
  */
65
- public set(key: KeyType, value: ValueType): void {
64
+ public async set(key: KeyType, value: ValueType): Promise<void> {
66
65
  const state = State.from(this.valueType);
67
66
  this.hasPathOrFail();
68
67
  this.hasStateServiceOrFail();
69
68
 
70
69
  state.path = Path.fromKey(this.path, this.keyType, key);
71
70
  state.stateServiceProvider = this.stateServiceProvider;
72
- state.set(value);
71
+ return await state.set(value);
73
72
  }
74
73
  }
@@ -1,6 +1,6 @@
1
- import { Field } from "snarkyjs";
1
+ import { Field } from "o1js";
2
2
 
3
- export interface StateService {
4
- get: (key: Field) => Field[] | undefined;
5
- set: (key: Field, value: Field[] | undefined) => void;
6
- }
3
+ export interface SimpleAsyncStateService {
4
+ get: (key: Field) => Promise<Field[] | undefined>;
5
+ set: (key: Field, value: Field[] | undefined) => Promise<void>;
6
+ }
@@ -1,37 +1,37 @@
1
- import { inject, injectable } from "tsyringe";
1
+ import { injectable } from "tsyringe";
2
+ import { log } from "@proto-kit/common";
2
3
 
3
- import { StateService } from "./StateService";
4
+ import { SimpleAsyncStateService } from "./StateService";
4
5
 
5
6
  const errors = {
6
7
  stateServiceNotSet: () =>
7
8
  new Error(
8
- `StateService has not been set yet. Be sure to either call your runtime or
9
- protocol function by creating them with an AppChain or by setting the
10
- stateService manually.`
9
+ "StateService has not been set yet. Be sure to either call your runtime or protocol function by creating them with an AppChain or by setting the stateService manually."
11
10
  ),
12
11
  };
13
12
 
14
13
  @injectable()
15
14
  export class StateServiceProvider {
16
- private readonly defaultStateService?: StateService =
17
- this.currentStateService;
15
+ private readonly stateServiceStack: SimpleAsyncStateService[] = [];
18
16
 
19
- public constructor(
20
- @inject("StateService") private currentStateService?: StateService
21
- ) {}
22
-
23
- public get stateService(): StateService {
24
- if (this.currentStateService === undefined) {
17
+ public get stateService(): SimpleAsyncStateService {
18
+ if (this.stateServiceStack.length === 0) {
25
19
  throw errors.stateServiceNotSet();
26
20
  }
27
- return this.currentStateService;
21
+
22
+ // Assertion here is ok, because we check that the array is not empty above
23
+ return this.stateServiceStack.at(-1)!;
28
24
  }
29
25
 
30
- public setCurrentStateService(service: StateService) {
31
- this.currentStateService = service;
26
+ public setCurrentStateService(service: SimpleAsyncStateService) {
27
+ this.stateServiceStack.push(service);
32
28
  }
33
29
 
34
- public resetToDefault() {
35
- this.currentStateService = this.defaultStateService;
30
+ public popCurrentStateService() {
31
+ if (this.stateServiceStack.length === 0) {
32
+ log.trace("Trying to pop from empty state-service stack");
33
+ return;
34
+ }
35
+ this.stateServiceStack.pop();
36
36
  }
37
37
  }
@@ -0,0 +1,54 @@
1
+ import { container, singleton } from "tsyringe";
2
+ import { Provable } from "o1js";
3
+
4
+ @singleton()
5
+ export class WitnessBlockContext {
6
+ public witnessBlockDepth: number = 0;
7
+
8
+ public get isInWitnessBlock() {
9
+ return this.witnessBlockDepth > 0;
10
+ }
11
+ }
12
+
13
+ const asyncProxyWitnessFunction = <
14
+ Ret,
15
+ F extends (...args: any[]) => Promise<Ret>,
16
+ >(
17
+ originalFuncDef: F
18
+ ) => {
19
+ return async (...args: Parameters<F>) => {
20
+ const context = container.resolve(WitnessBlockContext);
21
+ context.witnessBlockDepth += 1;
22
+ try {
23
+ return await originalFuncDef(...args);
24
+ } finally {
25
+ context.witnessBlockDepth -= 1;
26
+ }
27
+ };
28
+ };
29
+
30
+ const proxySyncWitnessFunction = <
31
+ Params extends any[],
32
+ Ret,
33
+ F extends (...args: Params) => Ret,
34
+ >(
35
+ originalFuncDef: F
36
+ ) => {
37
+ return (...args: Params): Ret => {
38
+ const context = container.resolve(WitnessBlockContext);
39
+ context.witnessBlockDepth += 1;
40
+ try {
41
+ return originalFuncDef(...args);
42
+ } finally {
43
+ context.witnessBlockDepth -= 1;
44
+ }
45
+ };
46
+ };
47
+
48
+ Provable.witnessAsync = asyncProxyWitnessFunction(Provable.witnessAsync);
49
+
50
+ Provable.witness = proxySyncWitnessFunction(Provable.witness);
51
+
52
+ Provable.witnessFields = proxySyncWitnessFunction(Provable.witnessFields);
53
+
54
+ Provable.asProver = proxySyncWitnessFunction(Provable.asProver);