@proto-kit/protocol 0.1.1-develop.164 → 0.1.1-develop.1661

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 (453) 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 +52 -0
  12. package/dist/hooks/AccountStateHook.d.ts.map +1 -0
  13. package/dist/hooks/AccountStateHook.js +52 -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 -9
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +52 -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 -29
  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 -42
  48. package/dist/model/Option.d.ts.map +1 -1
  49. package/dist/model/Option.js +62 -47
  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 +67 -16
  60. package/dist/model/StateTransition.d.ts.map +1 -1
  61. package/dist/model/StateTransition.js +18 -2
  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 +88 -11
  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 +20 -2
  70. package/dist/model/network/NetworkState.js.map +1 -0
  71. package/dist/model/transaction/RuntimeTransaction.d.ts +96 -28
  72. package/dist/model/transaction/RuntimeTransaction.d.ts.map +1 -1
  73. package/dist/model/transaction/RuntimeTransaction.js +75 -11
  74. package/dist/model/transaction/RuntimeTransaction.js.map +1 -0
  75. package/dist/model/transaction/SignedTransaction.d.ts +107 -0
  76. package/dist/model/transaction/SignedTransaction.d.ts.map +1 -0
  77. package/dist/model/transaction/SignedTransaction.js +34 -0
  78. package/dist/model/transaction/SignedTransaction.js.map +1 -0
  79. package/dist/model/transaction/ValueOption.d.ts +173 -0
  80. package/dist/model/transaction/ValueOption.d.ts.map +1 -0
  81. package/dist/model/transaction/ValueOption.js +25 -0
  82. package/dist/model/transaction/ValueOption.js.map +1 -0
  83. package/dist/protocol/Protocol.d.ts +27 -25
  84. package/dist/protocol/Protocol.d.ts.map +1 -1
  85. package/dist/protocol/Protocol.js +98 -28
  86. package/dist/protocol/Protocol.js.map +1 -0
  87. package/dist/protocol/ProtocolEnvironment.d.ts +9 -0
  88. package/dist/protocol/ProtocolEnvironment.d.ts.map +1 -0
  89. package/dist/protocol/ProtocolEnvironment.js +2 -0
  90. package/dist/protocol/ProtocolEnvironment.js.map +1 -0
  91. package/dist/protocol/ProtocolModule.d.ts +7 -7
  92. package/dist/protocol/ProtocolModule.d.ts.map +1 -1
  93. package/dist/protocol/ProtocolModule.js +10 -7
  94. package/dist/protocol/ProtocolModule.js.map +1 -0
  95. package/dist/protocol/ProvableBlockHook.d.ts +19 -0
  96. package/dist/protocol/ProvableBlockHook.d.ts.map +1 -0
  97. package/dist/protocol/ProvableBlockHook.js +21 -0
  98. package/dist/protocol/ProvableBlockHook.js.map +1 -0
  99. package/dist/protocol/ProvableTransactionHook.d.ts +34 -0
  100. package/dist/protocol/ProvableTransactionHook.d.ts.map +1 -0
  101. package/dist/protocol/ProvableTransactionHook.js +13 -0
  102. package/dist/protocol/ProvableTransactionHook.js.map +1 -0
  103. package/dist/protocol/TransitioningProtocolModule.d.ts +10 -0
  104. package/dist/protocol/TransitioningProtocolModule.d.ts.map +1 -0
  105. package/dist/protocol/TransitioningProtocolModule.js +9 -0
  106. package/dist/protocol/TransitioningProtocolModule.js.map +1 -0
  107. package/dist/prover/accumulators/AppliedBatchHashList.d.ts +18 -0
  108. package/dist/prover/accumulators/AppliedBatchHashList.d.ts.map +1 -0
  109. package/dist/prover/accumulators/AppliedBatchHashList.js +25 -0
  110. package/dist/prover/accumulators/AppliedBatchHashList.js.map +1 -0
  111. package/dist/prover/accumulators/StateTransitionReductionList.d.ts +12 -0
  112. package/dist/prover/accumulators/StateTransitionReductionList.d.ts.map +1 -0
  113. package/dist/prover/accumulators/StateTransitionReductionList.js +64 -0
  114. package/dist/prover/accumulators/StateTransitionReductionList.js.map +1 -0
  115. package/dist/prover/accumulators/TransactionHashList.d.ts +6 -0
  116. package/dist/prover/accumulators/TransactionHashList.d.ts.map +1 -0
  117. package/dist/prover/accumulators/TransactionHashList.js +8 -0
  118. package/dist/prover/accumulators/TransactionHashList.js.map +1 -0
  119. package/dist/prover/accumulators/WitnessedRootHashList.d.ts +137 -0
  120. package/dist/prover/accumulators/WitnessedRootHashList.d.ts.map +1 -0
  121. package/dist/prover/accumulators/WitnessedRootHashList.js +50 -0
  122. package/dist/prover/accumulators/WitnessedRootHashList.js.map +1 -0
  123. package/dist/prover/block/BlockProvable.d.ts +869 -65
  124. package/dist/prover/block/BlockProvable.d.ts.map +1 -1
  125. package/dist/prover/block/BlockProvable.js +86 -6
  126. package/dist/prover/block/BlockProvable.js.map +1 -0
  127. package/dist/prover/block/BlockProver.d.ts +82 -34
  128. package/dist/prover/block/BlockProver.d.ts.map +1 -1
  129. package/dist/prover/block/BlockProver.js +505 -86
  130. package/dist/prover/block/BlockProver.js.map +1 -0
  131. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts +106 -0
  132. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts.map +1 -0
  133. package/dist/prover/block/accummulators/BlockHashMerkleTree.js +25 -0
  134. package/dist/prover/block/accummulators/BlockHashMerkleTree.js.map +1 -0
  135. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.d.ts +139 -0
  136. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.d.ts.map +1 -0
  137. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js +21 -0
  138. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js.map +1 -0
  139. package/dist/prover/block/services/RuntimeVerificationKeyRootService.d.ts +7 -0
  140. package/dist/prover/block/services/RuntimeVerificationKeyRootService.d.ts.map +1 -0
  141. package/dist/prover/{statetransition/StateTransitionWitnessProviderReference.js → block/services/RuntimeVerificationKeyRootService.js} +11 -8
  142. package/dist/prover/block/services/RuntimeVerificationKeyRootService.js.map +1 -0
  143. package/dist/prover/statetransition/StateTransitionProvable.d.ts +137 -48
  144. package/dist/prover/statetransition/StateTransitionProvable.d.ts.map +1 -1
  145. package/dist/prover/statetransition/StateTransitionProvable.js +10 -5
  146. package/dist/prover/statetransition/StateTransitionProvable.js.map +1 -0
  147. package/dist/prover/statetransition/StateTransitionProver.d.ts +30 -17
  148. package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -1
  149. package/dist/prover/statetransition/StateTransitionProver.js +169 -74
  150. package/dist/prover/statetransition/StateTransitionProver.js.map +1 -0
  151. package/dist/settlement/ContractModule.d.ts +16 -0
  152. package/dist/settlement/ContractModule.d.ts.map +1 -0
  153. package/dist/settlement/ContractModule.js +12 -0
  154. package/dist/settlement/ContractModule.js.map +1 -0
  155. package/dist/settlement/SettlementContractModule.d.ts +51 -0
  156. package/dist/settlement/SettlementContractModule.d.ts.map +1 -0
  157. package/dist/settlement/SettlementContractModule.js +80 -0
  158. package/dist/settlement/SettlementContractModule.js.map +1 -0
  159. package/dist/settlement/contracts/BridgeContract.d.ts +116 -0
  160. package/dist/settlement/contracts/BridgeContract.d.ts.map +1 -0
  161. package/dist/settlement/contracts/BridgeContract.js +259 -0
  162. package/dist/settlement/contracts/BridgeContract.js.map +1 -0
  163. package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts +16 -0
  164. package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts.map +1 -0
  165. package/dist/settlement/contracts/BridgeContractProtocolModule.js +41 -0
  166. package/dist/settlement/contracts/BridgeContractProtocolModule.js.map +1 -0
  167. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts +21 -0
  168. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts.map +1 -0
  169. package/dist/settlement/contracts/DispatchContractProtocolModule.js +57 -0
  170. package/dist/settlement/contracts/DispatchContractProtocolModule.js.map +1 -0
  171. package/dist/settlement/contracts/DispatchSmartContract.d.ts +44 -0
  172. package/dist/settlement/contracts/DispatchSmartContract.d.ts.map +1 -0
  173. package/dist/settlement/contracts/DispatchSmartContract.js +229 -0
  174. package/dist/settlement/contracts/DispatchSmartContract.js.map +1 -0
  175. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts +21 -0
  176. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts.map +1 -0
  177. package/dist/settlement/contracts/SettlementContractProtocolModule.js +84 -0
  178. package/dist/settlement/contracts/SettlementContractProtocolModule.js.map +1 -0
  179. package/dist/settlement/contracts/SettlementSmartContract.d.ts +123 -0
  180. package/dist/settlement/contracts/SettlementSmartContract.d.ts.map +1 -0
  181. package/dist/settlement/contracts/SettlementSmartContract.js +310 -0
  182. package/dist/settlement/contracts/SettlementSmartContract.js.map +1 -0
  183. package/dist/settlement/contracts/TokenBridgeTree.d.ts +228 -0
  184. package/dist/settlement/contracts/TokenBridgeTree.d.ts.map +1 -0
  185. package/dist/settlement/contracts/TokenBridgeTree.js +60 -0
  186. package/dist/settlement/contracts/TokenBridgeTree.js.map +1 -0
  187. package/dist/settlement/contracts/authorizations/ContractAuthorization.d.ts +10 -0
  188. package/dist/settlement/contracts/authorizations/ContractAuthorization.d.ts.map +1 -0
  189. package/dist/settlement/contracts/authorizations/ContractAuthorization.js +2 -0
  190. package/dist/settlement/contracts/authorizations/ContractAuthorization.js.map +1 -0
  191. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.d.ts +85 -0
  192. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.d.ts.map +1 -0
  193. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.js +11 -0
  194. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.js.map +1 -0
  195. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.d.ts +79 -0
  196. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.d.ts.map +1 -0
  197. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.js +11 -0
  198. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.js.map +1 -0
  199. package/dist/settlement/messages/Deposit.d.ts +77 -0
  200. package/dist/settlement/messages/Deposit.d.ts.map +1 -0
  201. package/dist/settlement/messages/Deposit.js +8 -0
  202. package/dist/settlement/messages/Deposit.js.map +1 -0
  203. package/dist/settlement/messages/OutgoingMessage.d.ts +67 -0
  204. package/dist/settlement/messages/OutgoingMessage.d.ts.map +1 -0
  205. package/dist/settlement/messages/OutgoingMessage.js +7 -0
  206. package/dist/settlement/messages/OutgoingMessage.js.map +1 -0
  207. package/dist/settlement/messages/OutgoingMessageArgument.d.ts +462 -0
  208. package/dist/settlement/messages/OutgoingMessageArgument.d.ts.map +1 -0
  209. package/dist/settlement/messages/OutgoingMessageArgument.js +40 -0
  210. package/dist/settlement/messages/OutgoingMessageArgument.js.map +1 -0
  211. package/dist/settlement/messages/Withdrawal.d.ts +2 -0
  212. package/dist/settlement/messages/Withdrawal.d.ts.map +1 -0
  213. package/dist/settlement/messages/Withdrawal.js +3 -0
  214. package/dist/settlement/messages/Withdrawal.js.map +1 -0
  215. package/dist/settlement/modularity/OutgoingMessageProcessor.d.ts +25 -0
  216. package/dist/settlement/modularity/OutgoingMessageProcessor.d.ts.map +1 -0
  217. package/dist/settlement/modularity/OutgoingMessageProcessor.js +30 -0
  218. package/dist/settlement/modularity/OutgoingMessageProcessor.js.map +1 -0
  219. package/dist/settlement/modularity/ProvableSettlementHook.d.ts +26 -0
  220. package/dist/settlement/modularity/ProvableSettlementHook.d.ts.map +1 -0
  221. package/dist/settlement/modularity/ProvableSettlementHook.js +4 -0
  222. package/dist/settlement/modularity/ProvableSettlementHook.js.map +1 -0
  223. package/dist/settlement/modularity/types.d.ts +8 -0
  224. package/dist/settlement/modularity/types.d.ts.map +1 -0
  225. package/dist/settlement/modularity/types.js +2 -0
  226. package/dist/settlement/modularity/types.js.map +1 -0
  227. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts +11 -0
  228. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts.map +1 -0
  229. package/dist/settlement/modules/NetworkStateSettlementModule.js +15 -0
  230. package/dist/settlement/modules/NetworkStateSettlementModule.js.map +1 -0
  231. package/dist/state/SimpleAsyncStateService.d.ts +6 -0
  232. package/dist/state/SimpleAsyncStateService.d.ts.map +1 -0
  233. package/dist/state/SimpleAsyncStateService.js +2 -0
  234. package/dist/state/SimpleAsyncStateService.js.map +1 -0
  235. package/dist/state/State.d.ts +68 -0
  236. package/dist/state/State.d.ts.map +1 -0
  237. package/dist/state/State.js +131 -0
  238. package/dist/state/State.js.map +1 -0
  239. package/dist/state/StateMap.d.ts +37 -0
  240. package/dist/state/StateMap.d.ts.map +1 -0
  241. package/dist/state/StateMap.js +56 -0
  242. package/dist/state/StateMap.js.map +1 -0
  243. package/dist/state/StateService.d.ts +6 -0
  244. package/dist/state/StateService.d.ts.map +1 -0
  245. package/dist/state/StateService.js +2 -0
  246. package/dist/state/StateService.js.map +1 -0
  247. package/dist/state/StateServiceProvider.d.ts +8 -0
  248. package/dist/state/StateServiceProvider.d.ts.map +1 -0
  249. package/dist/state/StateServiceProvider.js +37 -0
  250. package/dist/state/StateServiceProvider.js.map +1 -0
  251. package/dist/state/assert/assert.d.ts +12 -0
  252. package/dist/state/assert/assert.d.ts.map +1 -0
  253. package/dist/state/assert/assert.js +33 -0
  254. package/dist/state/assert/assert.js.map +1 -0
  255. package/dist/state/context/RuntimeMethodExecutionContext.d.ts +193 -0
  256. package/dist/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -0
  257. package/dist/state/context/RuntimeMethodExecutionContext.js +138 -0
  258. package/dist/state/context/RuntimeMethodExecutionContext.js.map +1 -0
  259. package/dist/state/context/TransitionMethodExecutionContext.d.ts +23 -0
  260. package/dist/state/context/TransitionMethodExecutionContext.d.ts.map +1 -0
  261. package/dist/state/context/TransitionMethodExecutionContext.js +6 -0
  262. package/dist/state/context/TransitionMethodExecutionContext.js.map +1 -0
  263. package/dist/state/protocol/ProtocolState.d.ts +13 -0
  264. package/dist/state/protocol/ProtocolState.d.ts.map +1 -0
  265. package/dist/state/protocol/ProtocolState.js +58 -0
  266. package/dist/state/protocol/ProtocolState.js.map +1 -0
  267. package/dist/utils/FieldOptions.d.ts +62 -0
  268. package/dist/utils/FieldOptions.d.ts.map +1 -0
  269. package/dist/utils/FieldOptions.js +13 -0
  270. package/dist/utils/FieldOptions.js.map +1 -0
  271. package/dist/utils/MinaPrefixedProvableHashList.d.ts +19 -0
  272. package/dist/utils/MinaPrefixedProvableHashList.d.ts.map +1 -0
  273. package/dist/utils/MinaPrefixedProvableHashList.js +46 -0
  274. package/dist/utils/MinaPrefixedProvableHashList.js.map +1 -0
  275. package/dist/utils/PrefixedProvableHashList.d.ts +2 -2
  276. package/dist/utils/PrefixedProvableHashList.d.ts.map +1 -1
  277. package/dist/utils/PrefixedProvableHashList.js +2 -1
  278. package/dist/utils/PrefixedProvableHashList.js.map +1 -0
  279. package/dist/utils/ProvableHashList.d.ts +23 -4
  280. package/dist/utils/ProvableHashList.d.ts.map +1 -1
  281. package/dist/utils/ProvableHashList.js +38 -2
  282. package/dist/utils/ProvableHashList.js.map +1 -0
  283. package/dist/utils/ProvableReductionHashList.d.ts +18 -0
  284. package/dist/utils/ProvableReductionHashList.d.ts.map +1 -0
  285. package/dist/utils/ProvableReductionHashList.js +54 -0
  286. package/dist/utils/ProvableReductionHashList.js.map +1 -0
  287. package/dist/utils/StateTransitionReductionList.d.ts +11 -0
  288. package/dist/utils/StateTransitionReductionList.d.ts.map +1 -0
  289. package/dist/utils/StateTransitionReductionList.js +61 -0
  290. package/dist/utils/StateTransitionReductionList.js.map +1 -0
  291. package/dist/utils/utils.d.ts +20 -0
  292. package/dist/utils/utils.d.ts.map +1 -0
  293. package/dist/utils/utils.js +51 -0
  294. package/dist/utils/utils.js.map +1 -0
  295. package/jest.config.cjs +12 -1
  296. package/package.json +10 -9
  297. package/src/hashing/mina-prefixes.ts +10 -0
  298. package/src/hashing/protokit-prefixes.ts +37 -0
  299. package/src/hooks/AccountStateHook.ts +57 -0
  300. package/src/hooks/BlockHeightHook.ts +17 -0
  301. package/src/hooks/LastStateRootBlockHook.ts +25 -0
  302. package/src/hooks/NoopBlockHook.ts +24 -0
  303. package/src/hooks/NoopSettlementHook.ts +20 -0
  304. package/src/hooks/NoopTransactionHook.ts +13 -0
  305. package/src/index.ts +51 -9
  306. package/src/model/AppliedStateTransitionBatch.ts +16 -0
  307. package/src/model/MethodPublicOutput.ts +3 -1
  308. package/src/model/Option.ts +99 -60
  309. package/src/model/Path.ts +9 -5
  310. package/src/model/RuntimeLike.ts +12 -0
  311. package/src/model/StateTransition.ts +25 -3
  312. package/src/model/StateTransitionProvableBatch.ts +117 -14
  313. package/src/model/Transaction.ts +3 -1
  314. package/src/model/network/NetworkState.ts +21 -3
  315. package/src/model/transaction/RuntimeTransaction.ts +90 -15
  316. package/src/model/transaction/SignedTransaction.ts +47 -0
  317. package/src/model/transaction/ValueOption.ts +28 -0
  318. package/src/protocol/Protocol.ts +166 -74
  319. package/src/protocol/ProtocolEnvironment.ts +10 -0
  320. package/src/protocol/ProtocolModule.ts +16 -16
  321. package/src/protocol/ProvableBlockHook.ts +68 -0
  322. package/src/protocol/ProvableTransactionHook.ts +77 -0
  323. package/src/protocol/TransitioningProtocolModule.ts +12 -0
  324. package/src/prover/accumulators/AppliedBatchHashList.ts +32 -0
  325. package/src/prover/accumulators/StateTransitionReductionList.ts +92 -0
  326. package/src/prover/accumulators/TransactionHashList.ts +9 -0
  327. package/src/prover/accumulators/WitnessedRootHashList.ts +61 -0
  328. package/src/prover/block/BlockProvable.ts +188 -15
  329. package/src/prover/block/BlockProver.ts +979 -143
  330. package/src/prover/block/accummulators/BlockHashMerkleTree.ts +24 -0
  331. package/src/prover/block/accummulators/RuntimeVerificationKeyTree.ts +24 -0
  332. package/src/prover/block/services/RuntimeVerificationKeyRootService.ts +20 -0
  333. package/src/prover/statetransition/StateTransitionProvable.ts +26 -19
  334. package/src/prover/statetransition/StateTransitionProver.ts +338 -130
  335. package/src/settlement/ContractModule.ts +31 -0
  336. package/src/settlement/SettlementContractModule.ts +145 -0
  337. package/src/settlement/contracts/BridgeContract.ts +366 -0
  338. package/src/settlement/contracts/BridgeContractProtocolModule.ts +48 -0
  339. package/src/settlement/contracts/DispatchContractProtocolModule.ts +75 -0
  340. package/src/settlement/contracts/DispatchSmartContract.ts +325 -0
  341. package/src/settlement/contracts/SettlementContractProtocolModule.ts +113 -0
  342. package/src/settlement/contracts/SettlementSmartContract.ts +502 -0
  343. package/src/settlement/contracts/TokenBridgeTree.ts +73 -0
  344. package/src/settlement/contracts/authorizations/ContractAuthorization.ts +11 -0
  345. package/src/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.ts +16 -0
  346. package/src/settlement/contracts/authorizations/UpdateMessagesHashAuth.ts +16 -0
  347. package/src/settlement/messages/Deposit.ts +7 -0
  348. package/src/settlement/messages/OutgoingMessage.ts +17 -0
  349. package/src/settlement/messages/OutgoingMessageArgument.ts +53 -0
  350. package/src/settlement/modularity/OutgoingMessageProcessor.ts +65 -0
  351. package/src/settlement/modularity/ProvableSettlementHook.ts +36 -0
  352. package/src/settlement/modularity/types.ts +22 -0
  353. package/src/settlement/modules/NetworkStateSettlementModule.ts +42 -0
  354. package/src/state/State.ts +177 -0
  355. package/src/state/StateMap.ts +73 -0
  356. package/src/state/StateService.ts +6 -0
  357. package/src/state/StateServiceProvider.ts +37 -0
  358. package/src/state/assert/assert.ts +38 -0
  359. package/src/state/context/RuntimeMethodExecutionContext.ts +181 -0
  360. package/src/state/context/TransitionMethodExecutionContext.ts +26 -0
  361. package/src/state/protocol/ProtocolState.ts +98 -0
  362. package/src/utils/FieldOptions.ts +13 -0
  363. package/src/utils/MinaPrefixedProvableHashList.ts +66 -0
  364. package/src/utils/PrefixedProvableHashList.ts +2 -2
  365. package/src/utils/ProvableHashList.ts +78 -3
  366. package/src/utils/ProvableReductionHashList.ts +77 -0
  367. package/src/utils/utils.ts +44 -55
  368. package/test/BlockProver.test.ts +161 -74
  369. package/test/Protocol.test.ts +20 -10
  370. package/test/State.test.ts +45 -0
  371. package/test/StateTransition.test.ts +57 -65
  372. package/test/TestingProtocol.ts +56 -0
  373. package/test/compiling/types.ts +28 -0
  374. package/test/model/Option.test.ts +72 -0
  375. package/test/model/StateTransitionProvableBatch.test.ts +137 -0
  376. package/test/modularity/types.ts +35 -0
  377. package/test/prover/block/BlockProver.test.ts +18 -0
  378. package/test/prover/statetransition/StateTransitionProver.test.ts +261 -0
  379. package/test/state/assert/assert.test.ts +56 -0
  380. package/test/tsconfig.json +7 -0
  381. package/test/utils/ProvableHashList.test.ts +44 -0
  382. package/test/utils/ProvableReductionHashList.test.ts +117 -0
  383. package/test/utils.test.ts +27 -0
  384. package/dist/config/ConfigurableModule.d.ts +0 -18
  385. package/dist/config/ConfigurableModule.d.ts.map +0 -1
  386. package/dist/config/ConfigurableModule.js +0 -20
  387. package/dist/config/ConfigurationAggregator.d.ts +0 -10
  388. package/dist/config/ConfigurationAggregator.d.ts.map +0 -1
  389. package/dist/config/ConfigurationAggregator.js +0 -35
  390. package/dist/config/ConfigurationReceiver.d.ts +0 -25
  391. package/dist/config/ConfigurationReceiver.d.ts.map +0 -1
  392. package/dist/config/ConfigurationReceiver.js +0 -36
  393. package/dist/config/ModuleContainer.d.ts +0 -44
  394. package/dist/config/ModuleContainer.d.ts.map +0 -1
  395. package/dist/config/ModuleContainer.js +0 -89
  396. package/dist/config/types.d.ts +0 -2
  397. package/dist/config/types.d.ts.map +0 -1
  398. package/dist/config/types.js +0 -1
  399. package/dist/model/MethodPublicInput.d.ts +0 -51
  400. package/dist/model/MethodPublicInput.d.ts.map +0 -1
  401. package/dist/model/MethodPublicInput.js +0 -11
  402. package/dist/model/transaction/ProtocolTransaction.d.ts +0 -70
  403. package/dist/model/transaction/ProtocolTransaction.d.ts.map +0 -1
  404. package/dist/model/transaction/ProtocolTransaction.js +0 -18
  405. package/dist/prover/block/BlockScopedModule.d.ts +0 -3
  406. package/dist/prover/block/BlockScopedModule.d.ts.map +0 -1
  407. package/dist/prover/block/BlockScopedModule.js +0 -6
  408. package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts +0 -16
  409. package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts.map +0 -1
  410. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts +0 -7
  411. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts.map +0 -1
  412. package/dist/src/model/Option.d.ts +0 -158
  413. package/dist/src/model/Option.d.ts.map +0 -1
  414. package/dist/src/model/Option.js +0 -53
  415. package/dist/src/model/Path.d.ts +0 -35
  416. package/dist/src/model/Path.d.ts.map +0 -1
  417. package/dist/src/model/Path.js +0 -51
  418. package/dist/src/model/StateTransition.d.ts +0 -201
  419. package/dist/src/model/StateTransition.d.ts.map +0 -1
  420. package/dist/src/model/StateTransition.js +0 -43
  421. package/dist/src/utils/PrefixedHashList.d.ts +0 -15
  422. package/dist/src/utils/PrefixedHashList.d.ts.map +0 -1
  423. package/dist/src/utils/PrefixedHashList.js +0 -28
  424. package/dist/src/utils/ProvableHashList.d.ts +0 -30
  425. package/dist/src/utils/ProvableHashList.d.ts.map +0 -1
  426. package/dist/src/utils/ProvableHashList.js +0 -43
  427. package/dist/utils/PrefixedHashList.d.ts +0 -14
  428. package/dist/utils/PrefixedHashList.d.ts.map +0 -1
  429. package/dist/utils/PrefixedHashList.js +0 -12
  430. package/dist/utils/Utils.d.ts +0 -17
  431. package/dist/utils/Utils.d.ts.map +0 -1
  432. package/dist/utils/Utils.js +0 -64
  433. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts +0 -25
  434. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts.map +0 -1
  435. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.js +0 -77
  436. package/dist/utils/merkletree/MemoryMerkleTreeStorage.d.ts +0 -26
  437. package/dist/utils/merkletree/MemoryMerkleTreeStorage.d.ts.map +0 -1
  438. package/dist/utils/merkletree/MemoryMerkleTreeStorage.js +0 -79
  439. package/dist/utils/merkletree/MerkleTreeStore.d.ts +0 -11
  440. package/dist/utils/merkletree/MerkleTreeStore.d.ts.map +0 -1
  441. package/dist/utils/merkletree/MerkleTreeStore.js +0 -1
  442. package/dist/utils/merkletree/RollupMerkleTree.d.ts +0 -130
  443. package/dist/utils/merkletree/RollupMerkleTree.d.ts.map +0 -1
  444. package/dist/utils/merkletree/RollupMerkleTree.js +0 -244
  445. package/src/model/Option.test.ts +0 -21
  446. package/src/model/transaction/ProtocolTransaction.ts +0 -25
  447. package/src/prover/statetransition/StateTransitionWitnessProvider.ts +0 -24
  448. package/src/prover/statetransition/StateTransitionWitnessProviderReference.ts +0 -17
  449. package/src/utils/merkletree/InMemoryMerkleTreeStorage.ts +0 -106
  450. package/src/utils/merkletree/MerkleTreeStore.ts +0 -15
  451. package/src/utils/merkletree/RollupMerkleTree.ts +0 -250
  452. package/src/utils/merkletree/VirtualMerkleTreeStore.ts +0 -21
  453. package/tsconfig.test.json +0 -9
@@ -0,0 +1,20 @@
1
+ import { injectable } from "tsyringe";
2
+ import { noop } from "@proto-kit/common";
3
+
4
+ import {
5
+ ProvableSettlementHook,
6
+ SettlementHookInputs,
7
+ } from "../settlement/modularity/ProvableSettlementHook";
8
+ import { SettlementSmartContractBase } from "../settlement/contracts/SettlementSmartContract";
9
+
10
+ @injectable()
11
+ export class NoopSettlementHook extends ProvableSettlementHook<
12
+ Record<string, never>
13
+ > {
14
+ public async beforeSettlement(
15
+ contract: SettlementSmartContractBase,
16
+ state: SettlementHookInputs
17
+ ) {
18
+ noop();
19
+ }
20
+ }
@@ -0,0 +1,13 @@
1
+ import { noop } from "@proto-kit/common";
2
+
3
+ import { ProvableTransactionHook } from "../protocol/ProvableTransactionHook";
4
+
5
+ export class NoopTransactionHook extends ProvableTransactionHook {
6
+ public async beforeTransaction() {
7
+ noop();
8
+ }
9
+
10
+ public async afterTransaction() {
11
+ noop();
12
+ }
13
+ }
package/src/index.ts CHANGED
@@ -1,23 +1,65 @@
1
- export * from "./utils/ProvableHashList";
1
+ export * from "./hooks/AccountStateHook";
2
+ export * from "./hooks/BlockHeightHook";
3
+ export * from "./hooks/LastStateRootBlockHook";
2
4
  export * from "./model/StateTransition";
3
5
  export * from "./model/StateTransitionProvableBatch";
4
6
  export * from "./model/Option";
5
7
  export * from "./model/Path";
6
8
  export * from "./model/network/NetworkState";
7
- export * from "./model/transaction/ProtocolTransaction";
9
+ export * from "./model/transaction/SignedTransaction";
8
10
  export * from "./model/transaction/RuntimeTransaction";
9
- export * from "./utils/PrefixedProvableHashList.js";
11
+ export * from "./model/transaction/ValueOption";
12
+ export * from "./model/MethodPublicOutput";
13
+ export * from "./model/RuntimeLike";
14
+ export * from "./model/AppliedStateTransitionBatch";
15
+ export * from "./utils/ProvableHashList";
16
+ export * from "./utils/PrefixedProvableHashList";
17
+ export * from "./utils/MinaPrefixedProvableHashList";
18
+ export * from "./utils/ProvableReductionHashList";
10
19
  export * from "./utils/utils";
20
+ export * from "./utils/FieldOptions";
21
+ export * from "./prover/accumulators/StateTransitionReductionList";
22
+ export * from "./prover/accumulators/AppliedBatchHashList";
23
+ export * from "./prover/accumulators/WitnessedRootHashList";
24
+ export * from "./prover/accumulators/TransactionHashList";
11
25
  export * from "./prover/block/BlockProver";
12
26
  export * from "./prover/block/BlockProvable";
27
+ export * from "./prover/block/accummulators/RuntimeVerificationKeyTree";
28
+ export * from "./prover/block/accummulators/BlockHashMerkleTree";
29
+ export * from "./prover/block/services/RuntimeVerificationKeyRootService";
13
30
  export * from "./prover/statetransition/StateTransitionProver";
14
31
  export * from "./prover/statetransition/StateTransitionProvable";
15
- export * from "./prover/statetransition/StateTransitionWitnessProvider";
16
- export * from "./utils/merkletree/MerkleTreeStore";
17
- export * from "./utils/merkletree/InMemoryMerkleTreeStorage";
18
- export * from "./utils/merkletree/RollupMerkleTree";
19
- export * from "./model/MethodPublicOutput";
20
- export * from "./prover/statetransition/StateTransitionWitnessProviderReference";
21
32
  export * from "./protocol/Protocol";
22
33
  export * from "./protocol/ProtocolModule";
34
+ export * from "./protocol/ProtocolEnvironment";
35
+ export * from "./protocol/ProvableTransactionHook";
36
+ export * from "./protocol/ProvableBlockHook";
37
+ export * from "./state/context/TransitionMethodExecutionContext";
38
+ export * from "./state/context/RuntimeMethodExecutionContext";
39
+ export * from "./state/protocol/ProtocolState";
40
+ export * from "./state/State";
41
+ export * from "./state/StateMap";
42
+ export * from "./state/StateService";
43
+ export * from "./state/StateServiceProvider";
44
+ export * from "./state/assert/assert";
45
+ export * from "./settlement/contracts/authorizations/ContractAuthorization";
46
+ export * from "./settlement/contracts/authorizations/UpdateMessagesHashAuth";
47
+ export * from "./settlement/contracts/authorizations/TokenBridgeDeploymentAuth";
48
+ export * from "./settlement/contracts/SettlementSmartContract";
49
+ export * from "./settlement/contracts/SettlementContractProtocolModule";
50
+ export * from "./settlement/contracts/DispatchSmartContract";
51
+ export * from "./settlement/contracts/DispatchContractProtocolModule";
52
+ export * from "./settlement/contracts/BridgeContract";
53
+ export * from "./settlement/contracts/BridgeContractProtocolModule";
54
+ export * from "./settlement/contracts/TokenBridgeTree";
55
+ export * from "./settlement/SettlementContractModule";
56
+ export * from "./settlement/ContractModule";
57
+ export * from "./settlement/modularity/ProvableSettlementHook";
58
+ export * from "./settlement/modularity/OutgoingMessageProcessor";
59
+ export * from "./settlement/messages/OutgoingMessageArgument";
60
+ export * from "./settlement/messages/OutgoingMessage";
61
+ export * from "./settlement/modules/NetworkStateSettlementModule";
62
+ export * from "./settlement/messages/Deposit";
23
63
  export { constants as ProtocolConstants } from "./Constants";
64
+ export * from "./hashing/protokit-prefixes";
65
+ export * from "./hashing/mina-prefixes";
@@ -0,0 +1,16 @@
1
+ import { Bool, Field, Poseidon, Provable, Struct } from "o1js";
2
+
3
+ export class AppliedStateTransitionBatch extends Struct({
4
+ batchHash: Field,
5
+ applied: Bool,
6
+ }) {}
7
+
8
+ export class AppliedStateTransitionBatchState extends Struct({
9
+ batchHash: Field,
10
+ root: Field,
11
+ }) {
12
+ public hashOrZero(): Field {
13
+ const hash = Poseidon.hash(AppliedStateTransitionBatchState.toFields(this));
14
+ return Provable.if(this.batchHash.equals(0), Field(0), hash);
15
+ }
16
+ }
@@ -1,4 +1,4 @@
1
- import { Bool, Field, Struct } from "snarkyjs";
1
+ import { Bool, Field, Struct } from "o1js";
2
2
 
3
3
  /**
4
4
  * Public input used to link in-circuit execution with
@@ -9,4 +9,6 @@ export class MethodPublicOutput extends Struct({
9
9
  status: Bool,
10
10
  transactionHash: Field,
11
11
  networkStateHash: Field,
12
+ isMessage: Bool,
13
+ eventsHash: Field,
12
14
  }) {}
@@ -4,8 +4,9 @@ import {
4
4
  type FlexibleProvablePure,
5
5
  Poseidon,
6
6
  Provable,
7
+ ProvablePure,
7
8
  Struct,
8
- } from "snarkyjs";
9
+ } from "o1js";
9
10
 
10
11
  export class ProvableOption extends Struct({
11
12
  isSome: Bool,
@@ -17,10 +18,70 @@ export class ProvableOption extends Struct({
17
18
  }
18
19
  }
19
20
 
21
+ export abstract class OptionBase {
22
+ protected constructor(
23
+ public isSome: Bool,
24
+ public isForcedSome: Bool
25
+ ) {}
26
+
27
+ protected abstract encodeValueToFields(): Field[];
28
+
29
+ protected abstract clone(): OptionBase;
30
+
31
+ /**
32
+ * @returns Tree representation of the current value
33
+ */
34
+ public get treeValue() {
35
+ const treeValue = Poseidon.hash(this.encodeValueToFields());
36
+
37
+ return Provable.if(
38
+ this.isSome.and(this.isForcedSome.not()),
39
+ treeValue,
40
+ Field(0)
41
+ );
42
+ }
43
+
44
+ public forceSome() {
45
+ this.isForcedSome = Provable.if(this.isSome, Bool(false), Bool(true));
46
+ this.isSome = Bool(true);
47
+ }
48
+
49
+ /**
50
+ * Returns the `to`-value as decoded as a list of fields
51
+ * Not in circuit
52
+ */
53
+ public toFields(): Field[] {
54
+ if (this.isSome.toBoolean()) {
55
+ return this.encodeValueToFields();
56
+ }
57
+ return [Field(0)];
58
+ }
59
+
60
+ /**
61
+ * @returns Provable representation of the current option.
62
+ */
63
+ public toProvable() {
64
+ return new ProvableOption({
65
+ isSome: this.isSome,
66
+ value: this.treeValue,
67
+ });
68
+ }
69
+
70
+ public toJSON() {
71
+ const value = this.encodeValueToFields().map((field) => field.toString());
72
+
73
+ return {
74
+ isSome: this.isSome.toBoolean(),
75
+ isForcedSome: this.isForcedSome.toBoolean(),
76
+ value,
77
+ };
78
+ }
79
+ }
80
+
20
81
  /**
21
82
  * Option facilitating in-circuit values that may or may not exist.
22
83
  */
23
- export class Option<Value> {
84
+ export class Option<Value> extends OptionBase {
24
85
  /**
25
86
  * Creates a new Option from the provided parameters
26
87
  *
@@ -58,76 +119,54 @@ export class Option<Value> {
58
119
  return new Option(Bool(false), Field(0), Field);
59
120
  }
60
121
 
61
- public static dummyValueFields<Value>(
62
- valueType: FlexibleProvablePure<Value>
63
- ): Field[] {
64
- const length = valueType.sizeInFields();
65
- return Array.from({ length }, () => Field(0));
66
- }
67
-
68
- /**
69
- * Computes a dummy value for the given value type.
70
- *
71
- * @param valueType - Value type to generate the dummy value for
72
- * @returns Dummy value for the given value type
73
- */
74
- public static dummyValue<Value>(
75
- valueType: FlexibleProvablePure<Value>
76
- ): Value {
77
- const fields = Option.dummyValueFields(valueType);
78
-
79
- // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
80
- return valueType.fromFields(fields) as Value;
81
- }
82
-
83
- public isForcedSome = Bool(false);
84
-
85
122
  public constructor(
86
- public isSome: Bool,
123
+ isSome: Bool,
87
124
  public value: Value,
88
- public valueType: FlexibleProvablePure<Value>
89
- ) {}
90
-
91
- public clone() {
92
- return new Option(this.isSome, this.value, this.valueType);
125
+ public valueType: FlexibleProvablePure<Value>,
126
+ isForcedSome = Bool(false)
127
+ ) {
128
+ super(isSome, isForcedSome);
93
129
  }
94
130
 
95
- public forceSome() {
96
- this.isForcedSome = Provable.if(this.isSome, Bool(false), Bool(true));
97
- this.isSome = Bool(true);
131
+ public encodeValueToFields(): Field[] {
132
+ return this.valueType.toFields(this.value);
98
133
  }
99
134
 
100
- /**
101
- * @returns Tree representation of the current value
102
- */
103
- public get treeValue() {
104
- const treeValue = Poseidon.hash(this.valueType.toFields(this.value));
105
-
106
- return Provable.if(
107
- this.isSome.and(this.isForcedSome.not()),
108
- treeValue,
109
- Field(0)
135
+ public clone(): Option<Value> {
136
+ return new Option(
137
+ this.isSome,
138
+ this.value,
139
+ this.valueType,
140
+ this.isForcedSome
110
141
  );
111
142
  }
112
143
 
113
144
  /**
114
- * Returns the `to`-value as decoded as a list of fields
115
- * Not in circuit
145
+ * @returns Returns the value of this option if it isSome,
146
+ * otherwise returns the given defaultValue
116
147
  */
117
- public toFields(): Field[] {
118
- if (this.isSome.toBoolean()) {
119
- return this.valueType.toFields(this.value);
120
- }
121
- return [Field(0)];
148
+ public orElse(defaultValue: Value): Value {
149
+ return Provable.if<Value>(
150
+ this.isSome,
151
+ this.valueType,
152
+ this.value,
153
+ defaultValue
154
+ );
122
155
  }
123
156
 
124
- /**
125
- * @returns Provable representation of the current option.
126
- */
127
- public toProvable() {
128
- return new ProvableOption({
129
- isSome: this.isSome,
130
- value: this.treeValue,
131
- });
157
+ public toConstant() {
158
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
159
+ const valueConstant = (this.valueType as ProvablePure<Value>).fromFields(
160
+ this.valueType.toFields(this.value).map((field) => field.toConstant())
161
+ );
162
+ const boolConstant = (bool: Bool) =>
163
+ Bool.fromFields([bool.toField().toConstant()]);
164
+
165
+ return new Option(
166
+ boolConstant(this.isSome),
167
+ valueConstant,
168
+ this.valueType,
169
+ boolConstant(this.isForcedSome)
170
+ );
132
171
  }
133
172
  }
package/src/model/Path.ts CHANGED
@@ -1,6 +1,5 @@
1
- /* eslint-disable @typescript-eslint/no-extraneous-class */
2
- /* eslint-disable @shopify/no-fully-static-classes */
3
- import { Field, type FlexibleProvablePure, Poseidon } from "snarkyjs";
1
+ import { Field, type FlexibleProvablePure, Poseidon } from "o1js";
2
+ import { hashWithPrefix } from "@proto-kit/common";
4
3
 
5
4
  import { stringToField } from "../utils/utils";
6
5
 
@@ -23,10 +22,15 @@ export class Path {
23
22
  *
24
23
  * @param className
25
24
  * @param propertyKey
25
+ * @param prefix
26
26
  * @returns Field representation of class name + property name
27
27
  */
28
- public static fromProperty(className: string, propertyKey: string): Field {
29
- return Poseidon.hash([
28
+ public static fromProperty(
29
+ className: string,
30
+ propertyKey: string,
31
+ prefix: string
32
+ ): Field {
33
+ return hashWithPrefix(prefix, [
30
34
  Path.toField(className),
31
35
  Path.toField(propertyKey),
32
36
  Field(0),
@@ -0,0 +1,12 @@
1
+ export type RuntimeMethodInvocationType = "INCOMING_MESSAGE" | "SIGNATURE";
2
+
3
+ export type RuntimeMethodIdMapping = Record<
4
+ `${string}.${string}`,
5
+ { methodId: bigint; type: RuntimeMethodInvocationType }
6
+ >;
7
+
8
+ export interface RuntimeLike {
9
+ get methodIdResolver(): {
10
+ methodIdMap: () => RuntimeMethodIdMapping;
11
+ };
12
+ }
@@ -1,6 +1,6 @@
1
- import { Field, Struct } from "snarkyjs";
1
+ import { Field, Struct } from "o1js";
2
2
 
3
- import { Option, ProvableOption } from "./Option.js";
3
+ import { Option, ProvableOption } from "./Option";
4
4
 
5
5
  /**
6
6
  * Provable representation of a State Transition, used to
@@ -23,6 +23,12 @@ export class ProvableStateTransition extends Struct({
23
23
  to: Option.none().toProvable(),
24
24
  });
25
25
  }
26
+
27
+ public static isDummy(stateTransition: ProvableStateTransition) {
28
+ return stateTransition.path
29
+ .equals(0)
30
+ .and(stateTransition.from.isSome.not());
31
+ }
26
32
  }
27
33
 
28
34
  /**
@@ -44,7 +50,7 @@ export class StateTransition<Value> {
44
50
 
45
51
  public constructor(
46
52
  public path: Field,
47
- public fromValue: Option<Field> | Option<Value>,
53
+ public fromValue: Option<Value>,
48
54
  public toValue: Option<Field> | Option<Value>
49
55
  ) {}
50
56
 
@@ -69,4 +75,20 @@ export class StateTransition<Value> {
69
75
  to: this.to.toProvable(),
70
76
  });
71
77
  }
78
+
79
+ public toJSON() {
80
+ return {
81
+ path: this.path.toString(),
82
+ from: this.fromValue.toJSON(),
83
+ to: this.toValue.toJSON(),
84
+ };
85
+ }
86
+
87
+ public toConstant(): StateTransition<Value> {
88
+ return new StateTransition<Value>(
89
+ this.path.toConstant(),
90
+ this.fromValue.toConstant(),
91
+ this.toValue.toConstant()
92
+ );
93
+ }
72
94
  }
@@ -1,31 +1,134 @@
1
- import { Circuit, Struct } from "snarkyjs";
1
+ import { Bool, Field, Provable, Struct } from "o1js";
2
+ import { batch, LinkedMerkleTreeWitness } from "@proto-kit/common";
2
3
 
3
- import { ProvableStateTransition } from "./StateTransition.js";
4
4
  import { constants } from "../Constants";
5
5
 
6
+ import { ProvableStateTransition } from "./StateTransition.js";
7
+
8
+ export class StateTransitionType {
9
+ public static readonly nothing = 2;
10
+
11
+ // The reason these are 0 and 1 is to efficiently check
12
+ // x in [inside, closing] in-circuit via the boolean trick
13
+ public static readonly closeAndApply = 1;
14
+
15
+ public static readonly closeAndThrowAway = 0;
16
+ }
17
+
18
+ /**
19
+ * STType is encoding both the type and whether it should be accumulated or not in one field
20
+ */
21
+ export class ProvableStateTransitionType extends Struct({
22
+ type: Field,
23
+ }) {
24
+ public static get nothing(): ProvableStateTransitionType {
25
+ return this.from(StateTransitionType.nothing);
26
+ }
27
+
28
+ public static get closeAndApply(): ProvableStateTransitionType {
29
+ return this.from(StateTransitionType.closeAndApply);
30
+ }
31
+
32
+ public static get closeAndThrowAway(): ProvableStateTransitionType {
33
+ return this.from(StateTransitionType.closeAndThrowAway);
34
+ }
35
+
36
+ private static from(constant: number) {
37
+ return new ProvableStateTransitionType({
38
+ type: Field(constant),
39
+ });
40
+ }
41
+
42
+ public isClosing() {
43
+ const { type } = this;
44
+ // check if base is 0 or 1
45
+ // 0^2 == 0 && 1^2 == 1
46
+ return type.mul(type).equals(type);
47
+ }
48
+
49
+ public isNothing() {
50
+ return this.type.equals(ProvableStateTransitionType.nothing.type);
51
+ }
52
+ }
53
+
54
+ export class MerkleWitnessBatch extends Struct({
55
+ witnesses: Provable.Array(
56
+ LinkedMerkleTreeWitness,
57
+ constants.stateTransitionProverBatchSize
58
+ ),
59
+ }) {}
60
+
61
+ export class ProvableStateTransitionEntry extends Struct({
62
+ stateTransition: ProvableStateTransition,
63
+ type: ProvableStateTransitionType,
64
+ witnessRoot: Bool,
65
+ }) {
66
+ public static dummy(): ProvableStateTransitionEntry {
67
+ return {
68
+ stateTransition: ProvableStateTransition.dummy(),
69
+ type: ProvableStateTransitionType.nothing,
70
+ witnessRoot: Bool(false),
71
+ };
72
+ }
73
+ }
74
+
6
75
  /**
7
76
  * A Batch of StateTransitions to be consumed by the StateTransitionProver
8
77
  * to prove multiple STs at once
78
+ *
79
+ * The batch is formed as an array fo ProvableSTEntries, which have a type and
80
+ * witnessesRoot flag attached to them.
9
81
  */
10
82
  export class StateTransitionProvableBatch extends Struct({
11
- batch: Circuit.array(
12
- ProvableStateTransition,
83
+ batch: Provable.Array(
84
+ ProvableStateTransitionEntry,
13
85
  constants.stateTransitionProverBatchSize
14
86
  ),
15
87
  }) {
16
- private constructor(object: { batch: ProvableStateTransition[] }) {
17
- super(object);
18
- }
88
+ public static fromBatches(
89
+ batches: {
90
+ stateTransitions: ProvableStateTransition[];
91
+ applied: Bool;
92
+ witnessRoot: Bool;
93
+ }[]
94
+ ): StateTransitionProvableBatch[] {
95
+ const flattened: ProvableStateTransitionEntry[] = [];
19
96
 
20
- public static fromTransitions(
21
- transitions: ProvableStateTransition[]
22
- ): StateTransitionProvableBatch {
23
- const array = transitions.slice();
97
+ for (const stBatch of batches) {
98
+ const entries =
99
+ stBatch.stateTransitions.map<ProvableStateTransitionEntry>(
100
+ (stateTransition, j, sts) => {
101
+ return {
102
+ stateTransition,
103
+ type:
104
+ // eslint-disable-next-line no-nested-ternary
105
+ j === sts.length - 1
106
+ ? stBatch.applied.toBoolean()
107
+ ? ProvableStateTransitionType.closeAndApply
108
+ : ProvableStateTransitionType.closeAndThrowAway
109
+ : ProvableStateTransitionType.nothing,
110
+ witnessRoot: Bool(false),
111
+ };
112
+ }
113
+ );
24
114
 
25
- while (array.length < constants.stateTransitionProverBatchSize) {
26
- array.push(ProvableStateTransition.dummy());
115
+ flattened.push(...entries);
116
+
117
+ if (stBatch.witnessRoot.toBoolean() && flattened.length > 0) {
118
+ flattened.at(-1)!.witnessRoot = Bool(true);
119
+ }
27
120
  }
28
121
 
29
- return new StateTransitionProvableBatch({ batch: array });
122
+ const values = batch(
123
+ flattened,
124
+ constants.stateTransitionProverBatchSize,
125
+ () => ProvableStateTransitionEntry.dummy()
126
+ );
127
+
128
+ return values.map((stBatch) => {
129
+ return new StateTransitionProvableBatch({
130
+ batch: stBatch,
131
+ });
132
+ });
30
133
  }
31
134
  }
@@ -6,13 +6,15 @@ import {
6
6
  Signature,
7
7
  Struct,
8
8
  UInt64,
9
- } from "snarkyjs";
9
+ } from "o1js";
10
10
 
11
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
11
12
  function argsToHash(...args: FlexibleProvable<any>[]): Field {
12
13
  const fields = args.flatMap((argument) => argument.toFields(argument));
13
14
  return Poseidon.hash(fields);
14
15
  }
15
16
 
17
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
16
18
  class Transaction extends Struct({
17
19
  // must be checked inside @runtimeMethod
18
20
  methodId: Field,
@@ -1,15 +1,33 @@
1
- import { Field, Poseidon, Struct, UInt64 } from "snarkyjs";
1
+ import { Field, Poseidon, Struct, UInt64 } from "o1js";
2
+ import { RollupMerkleTree } from "@proto-kit/common";
2
3
 
3
4
  export class CurrentBlock extends Struct({
4
5
  height: UInt64,
5
6
  }) {}
6
7
 
8
+ export class PreviousBlock extends Struct({
9
+ rootHash: Field,
10
+ }) {}
11
+
7
12
  export class NetworkState extends Struct({
8
13
  block: CurrentBlock,
14
+ previous: PreviousBlock,
9
15
  }) {
10
16
  public hash(): Field {
11
17
  return Poseidon.hash([
12
- ...CurrentBlock.toFields(this.block)
13
- ])
18
+ ...CurrentBlock.toFields(this.block),
19
+ ...PreviousBlock.toFields(this.previous),
20
+ ]);
21
+ }
22
+
23
+ public static empty() {
24
+ return new NetworkState({
25
+ block: {
26
+ height: UInt64.zero,
27
+ },
28
+ previous: {
29
+ rootHash: Field(RollupMerkleTree.EMPTY_ROOT),
30
+ },
31
+ });
14
32
  }
15
33
  }