@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
@@ -0,0 +1,181 @@
1
+ import { Bool, FlexibleProvablePure, Provable, Struct } from "o1js";
2
+ import { singleton } from "tsyringe";
3
+ import {
4
+ ProvableMethodExecutionContext,
5
+ ProvableMethodExecutionResult,
6
+ } from "@proto-kit/common";
7
+
8
+ import { StateTransition } from "../../model/StateTransition";
9
+ import { RuntimeTransaction } from "../../model/transaction/RuntimeTransaction";
10
+ import { NetworkState } from "../../model/network/NetworkState";
11
+
12
+ const errors = {
13
+ setupNotCalled: () =>
14
+ new Error(
15
+ "Setup has not been called prior to executing a runtime method. Be sure to do that so that the Runtime is setup property for execution"
16
+ ),
17
+ };
18
+
19
+ export class RuntimeProvableMethodExecutionResult extends ProvableMethodExecutionResult {
20
+ public stateTransitions: StateTransition<any>[] = [];
21
+
22
+ public status: Bool = Bool(true);
23
+
24
+ public statusMessage?: string;
25
+
26
+ public stackTrace?: string;
27
+
28
+ public events: {
29
+ eventType: FlexibleProvablePure<any>;
30
+ event: any;
31
+ eventName: string;
32
+ condition: Bool;
33
+ }[] = [];
34
+ }
35
+
36
+ export interface RuntimeMethodExecutionData {
37
+ transaction: RuntimeTransaction;
38
+ networkState: NetworkState;
39
+ }
40
+
41
+ export class RuntimeMethodExecutionDataStruct
42
+ extends Struct({
43
+ transaction: RuntimeTransaction,
44
+ networkState: NetworkState,
45
+ })
46
+ implements RuntimeMethodExecutionData {}
47
+
48
+ /**
49
+ * Execution context used to wrap runtime module methods,
50
+ * allowing them to post relevant information (such as execution status)
51
+ * into the context without any unnecessary 'prop drilling'.
52
+ */
53
+ @singleton()
54
+ export class RuntimeMethodExecutionContext extends ProvableMethodExecutionContext {
55
+ public methods: string[] = [];
56
+
57
+ public input: RuntimeMethodExecutionData | undefined;
58
+
59
+ private isSimulated: boolean = false;
60
+
61
+ // The inputs corresponding to the current result
62
+ private lastInputs:
63
+ | {
64
+ input: RuntimeMethodExecutionData | undefined;
65
+ isSimulated: boolean;
66
+ }
67
+ | undefined;
68
+
69
+ public override result = new RuntimeProvableMethodExecutionResult();
70
+
71
+ private assertSetupCalled(): asserts this is {
72
+ input: RuntimeMethodExecutionData;
73
+ } {
74
+ if (this.input === undefined) {
75
+ throw errors.setupNotCalled();
76
+ }
77
+ }
78
+
79
+ /**
80
+ * Adds an in-method generated state transition to the current context
81
+ * @param stateTransition - State transition to add to the context
82
+ */
83
+ public addStateTransition<Value>(stateTransition: StateTransition<Value>) {
84
+ this.assertSetupCalled();
85
+ this.result.stateTransitions.push(stateTransition);
86
+ }
87
+
88
+ public addEvent<T>(
89
+ eventType: FlexibleProvablePure<T>,
90
+ event: T,
91
+ eventName: string,
92
+ condition: Bool = Bool(true)
93
+ ) {
94
+ this.assertSetupCalled();
95
+ this.result.events.push({
96
+ eventType,
97
+ event,
98
+ eventName,
99
+ condition,
100
+ });
101
+ }
102
+
103
+ /**
104
+ * @param message - Status message to acompany the current status
105
+ */
106
+ public setStatusMessage(message?: string, stackTrace?: string) {
107
+ this.assertSetupCalled();
108
+ if (this.isSimulated) {
109
+ return;
110
+ }
111
+ this.result.statusMessage ??= message;
112
+ this.result.stackTrace ??= stackTrace;
113
+ }
114
+
115
+ /**
116
+ * @param status - Execution status of the current method
117
+ */
118
+ public setStatus(status: Bool) {
119
+ this.assertSetupCalled();
120
+ if (this.isSimulated) {
121
+ return;
122
+ }
123
+ this.result.status = status;
124
+ }
125
+
126
+ /**
127
+ * @param input Input witness data required for a runtime execution
128
+ */
129
+ public setup(input: RuntimeMethodExecutionData) {
130
+ this.input = input;
131
+ }
132
+
133
+ public witnessInput(): RuntimeMethodExecutionDataStruct {
134
+ this.assertSetupCalled();
135
+ return Provable.witness(RuntimeMethodExecutionDataStruct, () => {
136
+ // TODO Is that right? Or this.current().input
137
+ const { transaction, networkState } = this.input!;
138
+ return new RuntimeMethodExecutionDataStruct({
139
+ networkState,
140
+ transaction,
141
+ });
142
+ });
143
+ }
144
+
145
+ public setSimulated(simulated: boolean) {
146
+ this.isSimulated = simulated;
147
+ }
148
+
149
+ /**
150
+ * Manually clears/resets the execution context
151
+ */
152
+ public clear() {
153
+ this.result = new RuntimeProvableMethodExecutionResult();
154
+ }
155
+
156
+ public afterMethod() {
157
+ super.afterMethod();
158
+ if (this.isFinished) {
159
+ this.lastInputs = {
160
+ input: this.input,
161
+ isSimulated: this.isSimulated,
162
+ };
163
+ // TODO: find out why input isnt set in TransactionFeeHook during assert
164
+ // this.input = undefined;
165
+ this.isSimulated = false;
166
+ }
167
+ }
168
+
169
+ /**
170
+ * Had to override current() otherwise it would not infer
171
+ * the type of result correctly (parent type would be reused)
172
+ */
173
+ public current() {
174
+ return {
175
+ isFinished: this.isFinished,
176
+ result: this.result,
177
+ input: this.lastInputs?.input,
178
+ isSimulated: this.lastInputs?.isSimulated,
179
+ };
180
+ }
181
+ }
@@ -0,0 +1,26 @@
1
+ import { StateTransition } from "../../model/StateTransition";
2
+
3
+ export class TransitionMethodExecutionResult {
4
+ public stateTransitions: StateTransition<any>[] = [];
5
+ }
6
+
7
+ export interface TransitionMethodExecutionContext {
8
+ /**
9
+ * Adds an in-method generated state transition to the current context
10
+ * @param stateTransition - State transition to add to the context
11
+ */
12
+ addStateTransition: <Value>(stateTransition: StateTransition<Value>) => void;
13
+
14
+ /**
15
+ * Manually clears/resets the execution context
16
+ */
17
+ clear: () => void;
18
+
19
+ /**
20
+ * Had to override current() otherwise it would not infer
21
+ * the type of result correctly (parent type would be reused)
22
+ */
23
+ current: () => {
24
+ result: TransitionMethodExecutionResult;
25
+ };
26
+ }
@@ -0,0 +1,98 @@
1
+ import { createReference, Reference } from "@proto-kit/common";
2
+
3
+ import { WithPath, WithStateServiceProvider } from "../State";
4
+ import { Path } from "../../model/Path";
5
+ import { StateServiceProvider } from "../StateServiceProvider";
6
+ import { PROTOKIT_PREFIXES } from "../../hashing/protokit-prefixes";
7
+ import { TransitioningProtocolModule } from "../../protocol/TransitioningProtocolModule";
8
+
9
+ const errors = {
10
+ missingName: (className: string) =>
11
+ new Error(
12
+ `Unable to provide a unique identifier for state, ${className} is missing a name.
13
+ Did you forget to extend your block module with 'extends ...Hook'?`
14
+ ),
15
+
16
+ missingParent: (className: string, type: string, moduleType: string) =>
17
+ new Error(
18
+ `Unable to provide parent '${type}' for state, ${className} is missing a name.
19
+ Did you forget to extend your module with 'extends ${moduleType}'?`
20
+ ),
21
+ };
22
+
23
+ export interface StatefulModule {
24
+ name?: string;
25
+ parent?: {
26
+ stateServiceProvider: StateServiceProvider;
27
+ };
28
+ }
29
+
30
+ /**
31
+ * Decorates a runtime module property as state, passing down some
32
+ * underlying values to improve developer experience.
33
+ */
34
+ export function state() {
35
+ return <TargetTransitioningModule extends StatefulModule>(
36
+ target: TargetTransitioningModule,
37
+ propertyKey: string
38
+ ) => {
39
+ Object.defineProperty(target, propertyKey, {
40
+ enumerable: true,
41
+
42
+ get: function get(this: TargetTransitioningModule) {
43
+ // The reason for why we store the state value in this weird way is that
44
+ // in the decorator on the prototype of the class. This means that if there
45
+ // are multiple instances of this class, any closure that this getter shares
46
+ // will be the same for all instances.
47
+ // Therefore, we need to somehow save the set instance on the instance itself
48
+
49
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
50
+ const reference:
51
+ | Reference<WithPath & WithStateServiceProvider>
52
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
53
+ | undefined = (this as any)[`protokit_state_cache_${propertyKey}`];
54
+
55
+ // Short-circuit this to return the state in case its already initialized
56
+ if (reference !== undefined && reference.value.path !== undefined) {
57
+ return reference.value;
58
+ }
59
+
60
+ if (this.name === undefined) {
61
+ throw errors.missingName(this.constructor.name);
62
+ }
63
+
64
+ const isProtocol = target instanceof TransitioningProtocolModule;
65
+
66
+ if (!this.parent) {
67
+ const debugInfo = isProtocol
68
+ ? { parentName: "protocol", baseModuleNames: "...Hook" }
69
+ : { parentName: "runtime", baseModuleNames: "RuntimeModule" };
70
+
71
+ throw errors.missingParent(
72
+ this.constructor.name,
73
+ debugInfo.parentName,
74
+ debugInfo.baseModuleNames
75
+ );
76
+ }
77
+
78
+ const statePrefix = isProtocol
79
+ ? PROTOKIT_PREFIXES.STATE_PROTOCOL
80
+ : PROTOKIT_PREFIXES.STATE_RUNTIME;
81
+ const path = Path.fromProperty(this.name, propertyKey, statePrefix);
82
+ if (reference) {
83
+ const { value } = reference;
84
+ value.path = path;
85
+ value.stateServiceProvider = this.parent.stateServiceProvider;
86
+ }
87
+ return reference?.value;
88
+ },
89
+
90
+ set: function set(
91
+ this: TargetTransitioningModule & any,
92
+ newValue: WithPath & WithStateServiceProvider
93
+ ) {
94
+ this[`protokit_state_cache_${propertyKey}`] = createReference(newValue);
95
+ },
96
+ });
97
+ };
98
+ }
@@ -0,0 +1,13 @@
1
+ import { Bool, Field, Provable, Struct } from "o1js";
2
+
3
+ export class FieldOption extends Struct({
4
+ isSome: Bool,
5
+ value: Field,
6
+ }) {
7
+ public static from(isSome: Bool, potentialValue: Field) {
8
+ return {
9
+ isSome,
10
+ value: Provable.if(isSome, potentialValue, Field(0)),
11
+ };
12
+ }
13
+ }
@@ -0,0 +1,70 @@
1
+ import { Field, Poseidon, ProvablePure } from "o1js";
2
+ import { hashWithPrefix, prefixToField } from "@proto-kit/common";
3
+
4
+ import { MINA_PREFIXES, MINA_SALTS } from "../hashing/mina-prefixes";
5
+
6
+ import { ProvableHashList } from "./ProvableHashList";
7
+
8
+ function salt(prefix: string) {
9
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
10
+ return Poseidon.update(
11
+ [Field(0), Field(0), Field(0)],
12
+ [prefixToField(prefix)]
13
+ ) as [Field, Field, Field];
14
+ }
15
+
16
+ export function emptyActions(): Field {
17
+ return salt(MINA_SALTS.empty_actions)[0];
18
+ }
19
+
20
+ export function emptyEvents(): Field {
21
+ return salt(MINA_SALTS.empty_events)[0];
22
+ }
23
+
24
+ export class MinaActions {
25
+ static actionHash(
26
+ action: Field[],
27
+ previousHash: Field = emptyActions()
28
+ ): Field {
29
+ const actionDataHash = hashWithPrefix(MINA_PREFIXES.event, action);
30
+ return hashWithPrefix(MINA_PREFIXES.sequenceEvents, [
31
+ previousHash,
32
+ actionDataHash,
33
+ ]);
34
+ }
35
+ }
36
+
37
+ export class MinaEvents {
38
+ static eventHash(event: Field[], previousHash: Field = emptyEvents()): Field {
39
+ const actionDataHash = hashWithPrefix(MINA_PREFIXES.event, event);
40
+ return hashWithPrefix(MINA_PREFIXES.events, [previousHash, actionDataHash]);
41
+ }
42
+ }
43
+
44
+ export class MinaPrefixedProvableHashList<
45
+ Value,
46
+ > extends ProvableHashList<Value> {
47
+ public constructor(
48
+ valueType: ProvablePure<Value>,
49
+ public readonly prefix: string,
50
+ internalCommitment?: Field
51
+ ) {
52
+ super(valueType, internalCommitment);
53
+ }
54
+
55
+ public empty(): Field {
56
+ return Field(0);
57
+ }
58
+
59
+ protected hash(elements: Field[]): Field {
60
+ const init = salt(this.prefix);
61
+ const digest = Poseidon.update(init, elements);
62
+ return digest[0];
63
+ }
64
+ }
65
+
66
+ export class MinaActionsHashList extends MinaPrefixedProvableHashList<Field> {
67
+ public constructor(internalCommitment?: Field) {
68
+ super(Field, MINA_PREFIXES.sequenceEvents, internalCommitment);
69
+ }
70
+ }
@@ -1,4 +1,4 @@
1
- import { Field, FlexibleProvablePure, Poseidon } from "snarkyjs";
1
+ import { Field, ProvablePure, Poseidon } from "o1js";
2
2
 
3
3
  import { ProvableHashList } from "./ProvableHashList.js";
4
4
  import { stringToField } from "./utils";
@@ -7,7 +7,7 @@ export class PrefixedProvableHashList<Value> extends ProvableHashList<Value> {
7
7
  private readonly prefix: Field;
8
8
 
9
9
  public constructor(
10
- valueType: FlexibleProvablePure<Value>,
10
+ valueType: ProvablePure<Value>,
11
11
  prefix: string,
12
12
  internalCommitment: Field = Field(0)
13
13
  ) {
@@ -15,6 +15,10 @@ export class PrefixedProvableHashList<Value> extends ProvableHashList<Value> {
15
15
  this.prefix = stringToField(prefix);
16
16
  }
17
17
 
18
+ public empty(): Field {
19
+ return Field(0);
20
+ }
21
+
18
22
  protected hash(elements: Field[]): Field {
19
23
  return Poseidon.hash([this.prefix, ...elements]);
20
24
  }
@@ -1,16 +1,101 @@
1
- import { Field, Poseidon, FlexibleProvablePure, Bool, Provable } from "snarkyjs";
1
+ import {
2
+ Field,
3
+ Poseidon,
4
+ Bool,
5
+ Provable,
6
+ ProvablePure,
7
+ Unconstrained,
8
+ } from "o1js";
9
+
10
+ import { NonMethods } from "./utils";
11
+
12
+ export type ProvableHashListData<Value> = {
13
+ preimage: Field;
14
+ value: NonMethods<Value>;
15
+ };
16
+
17
+ export type VerifiedTransition<T> = {
18
+ from: T;
19
+ to: T;
20
+ };
2
21
 
3
22
  /**
4
23
  * Utilities for creating a hash list from a given value type.
5
24
  */
6
25
  export abstract class ProvableHashList<Value> {
26
+ public commitment: Field;
27
+
7
28
  public constructor(
8
- private readonly valueType: FlexibleProvablePure<Value>,
9
- public commitment: Field = Field(0)
10
- ) {}
29
+ protected readonly valueType: ProvablePure<Value>,
30
+ commitment?: Field | undefined,
31
+ private unconstrainedList: Unconstrained<
32
+ ProvableHashListData<Value>[]
33
+ > = Unconstrained.from([])
34
+ ) {
35
+ this.commitment = commitment ?? this.empty();
36
+ }
37
+
38
+ protected abstract empty(): Field;
11
39
 
12
40
  protected abstract hash(elements: Field[]): Field;
13
41
 
42
+ private pushUnconstrained(preimage: Field, value: Value, condition?: Bool) {
43
+ this.unconstrainedList.updateAsProver((array) => {
44
+ if (condition !== undefined && !condition.toBoolean()) {
45
+ return array;
46
+ }
47
+ return [
48
+ ...array,
49
+ {
50
+ preimage: preimage.toConstant(),
51
+ value: Provable.toConstant(this.valueType, value),
52
+ },
53
+ ];
54
+ });
55
+ }
56
+
57
+ /**
58
+ * Fast-forwards the state of the hashlist to a specified new tip.
59
+ * This assumes the transition (from -> to) to be already verified somewhere
60
+ * else that is outside this scope.
61
+ */
62
+ public fastForward(
63
+ transition: VerifiedTransition<Field>,
64
+ message: string = "some hashlist"
65
+ ) {
66
+ const { from, to } = transition;
67
+ from.assertEquals(
68
+ this.commitment,
69
+ `From-commitment for ${message} not matching`
70
+ );
71
+
72
+ this.commitment = to;
73
+ }
74
+
75
+ public fastForwardIf(
76
+ transition: VerifiedTransition<Field>,
77
+ condition: Bool,
78
+ message: string = "some hashlist"
79
+ ) {
80
+ const { from, to } = transition;
81
+
82
+ // Equal to condition -> (from == this.commitment)
83
+ from
84
+ .mul(condition.toField())
85
+ .assertEquals(
86
+ this.commitment.mul(condition.toField()),
87
+ `From-commitment for ${message} not matching`
88
+ );
89
+
90
+ this.commitment = Provable.if(condition, to, this.commitment);
91
+ }
92
+
93
+ public witnessTip(preimage: Field, value: Value): Bool {
94
+ return this.hash([preimage, ...this.valueType.toFields(value)]).equals(
95
+ this.commitment
96
+ );
97
+ }
98
+
14
99
  /**
15
100
  * Converts the provided value to Field[] and appends it to
16
101
  * the current hashlist.
@@ -19,19 +104,25 @@ export abstract class ProvableHashList<Value> {
19
104
  * @returns Current hash list.
20
105
  */
21
106
  public push(value: Value) {
107
+ this.pushUnconstrained(this.commitment, value);
108
+
22
109
  this.commitment = this.hash([
23
110
  this.commitment,
24
111
  ...this.valueType.toFields(value),
25
112
  ]);
113
+
26
114
  return this;
27
115
  }
28
116
 
29
117
  public pushIf(value: Value, condition: Bool) {
118
+ this.pushUnconstrained(this.commitment, value, condition);
119
+
30
120
  const newCommitment = this.hash([
31
121
  this.commitment,
32
122
  ...this.valueType.toFields(value),
33
123
  ]);
34
124
  this.commitment = Provable.if(condition, newCommitment, this.commitment);
125
+
35
126
  return this;
36
127
  }
37
128
 
@@ -41,10 +132,24 @@ export abstract class ProvableHashList<Value> {
41
132
  public toField() {
42
133
  return this.commitment;
43
134
  }
135
+
136
+ public isEmpty(): Bool {
137
+ return this.commitment.equals(this.empty());
138
+ }
139
+
140
+ public getUnconstrainedValues(): Unconstrained<
141
+ ProvableHashListData<Value>[]
142
+ > {
143
+ return this.unconstrainedList;
144
+ }
44
145
  }
45
146
 
46
147
  export class DefaultProvableHashList<Value> extends ProvableHashList<Value> {
47
148
  public hash(elements: Field[]): Field {
48
149
  return Poseidon.hash(elements);
49
150
  }
151
+
152
+ public empty(): Field {
153
+ return Field(0);
154
+ }
50
155
  }
@@ -0,0 +1,77 @@
1
+ import { Bool, Field, Poseidon, Provable, ProvablePure } from "o1js";
2
+
3
+ import { NonMethods } from "./utils";
4
+
5
+ export class ProvableReductionHashList<Value> {
6
+ public constructor(
7
+ protected readonly valueType: ProvablePure<Value>,
8
+ public commitment: Field = Field(0)
9
+ ) {}
10
+
11
+ public unconstrainedList: Value[] = [];
12
+
13
+ private constrainedLastValue: Value | undefined = undefined;
14
+
15
+ private preimage: Field = this.commitment;
16
+
17
+ public pushAndReduce(
18
+ value: Value,
19
+ reduce: (previous: Value) => [Value, Bool]
20
+ ): { popLast: Bool; value: Value } {
21
+ let valueToPush = value;
22
+ let popLast = Bool(false);
23
+
24
+ // Theoretically, we can feed the preimage + last value as a witness
25
+ // for non-zero commitment starts (like used in the BlockProver), because
26
+ // currently it won't reduce across chunks. But this is okay for now I think
27
+ if (this.constrainedLastValue !== undefined) {
28
+ [valueToPush, popLast] = reduce(this.constrainedLastValue);
29
+ }
30
+
31
+ Provable.asProver(() => {
32
+ if (popLast.toBoolean()) {
33
+ this.unconstrainedList.pop();
34
+ }
35
+
36
+ const valueAsConstant = this.valueType.fromFields(
37
+ this.valueType.toFields(valueToPush).map((field) => field.toConstant())
38
+ );
39
+ this.unconstrainedList.push(valueAsConstant);
40
+ });
41
+
42
+ const currentCommitment = this.commitment;
43
+ const noPopCommitment = this.hash([
44
+ currentCommitment,
45
+ ...this.valueType.toFields(valueToPush),
46
+ ]);
47
+
48
+ const popCommitment = this.hash([
49
+ this.preimage,
50
+ ...this.valueType.toFields(valueToPush),
51
+ ]);
52
+
53
+ this.commitment = Provable.if(popLast, popCommitment, noPopCommitment);
54
+
55
+ this.constrainedLastValue = valueToPush;
56
+ this.preimage = Provable.if(popLast, this.preimage, currentCommitment);
57
+
58
+ return {
59
+ popLast,
60
+ value: valueToPush,
61
+ };
62
+ }
63
+
64
+ public pushIf(value: Value, condition: Bool) {
65
+ throw new Error("pushIf is not implemented for ReducedHashList");
66
+
67
+ return this;
68
+ }
69
+
70
+ public hash(elements: Field[]): Field {
71
+ return Poseidon.hash(elements);
72
+ }
73
+
74
+ public getUnconstrainedValues(): NonMethods<Value>[] {
75
+ return this.unconstrainedList;
76
+ }
77
+ }