@proto-kit/protocol 0.1.1-develop.0

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 (333) hide show
  1. package/LICENSE.md +201 -0
  2. package/README.md +45 -0
  3. package/dist/Constants.d.ts +4 -0
  4. package/dist/Constants.d.ts.map +1 -0
  5. package/dist/Constants.js +4 -0
  6. package/dist/Constants.js.map +1 -0
  7. package/dist/hooks/AccountStateHook.d.ts +52 -0
  8. package/dist/hooks/AccountStateHook.d.ts.map +1 -0
  9. package/dist/hooks/AccountStateHook.js +48 -0
  10. package/dist/hooks/AccountStateHook.js.map +1 -0
  11. package/dist/hooks/BlockHeightHook.d.ts +7 -0
  12. package/dist/hooks/BlockHeightHook.d.ts.map +1 -0
  13. package/dist/hooks/BlockHeightHook.js +16 -0
  14. package/dist/hooks/BlockHeightHook.js.map +1 -0
  15. package/dist/hooks/LastStateRootBlockHook.d.ts +8 -0
  16. package/dist/hooks/LastStateRootBlockHook.d.ts.map +1 -0
  17. package/dist/hooks/LastStateRootBlockHook.js +16 -0
  18. package/dist/hooks/LastStateRootBlockHook.js.map +1 -0
  19. package/dist/hooks/NoopBlockHook.d.ts +9 -0
  20. package/dist/hooks/NoopBlockHook.d.ts.map +1 -0
  21. package/dist/hooks/NoopBlockHook.js +10 -0
  22. package/dist/hooks/NoopBlockHook.js.map +1 -0
  23. package/dist/hooks/NoopSettlementHook.d.ts +6 -0
  24. package/dist/hooks/NoopSettlementHook.d.ts.map +1 -0
  25. package/dist/hooks/NoopSettlementHook.js +18 -0
  26. package/dist/hooks/NoopSettlementHook.js.map +1 -0
  27. package/dist/hooks/NoopTransactionHook.d.ts +6 -0
  28. package/dist/hooks/NoopTransactionHook.d.ts.map +1 -0
  29. package/dist/hooks/NoopTransactionHook.js +8 -0
  30. package/dist/hooks/NoopTransactionHook.js.map +1 -0
  31. package/dist/index.d.ts +58 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +58 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/model/MethodPublicOutput.d.ts +113 -0
  36. package/dist/model/MethodPublicOutput.d.ts.map +1 -0
  37. package/dist/model/MethodPublicOutput.js +15 -0
  38. package/dist/model/MethodPublicOutput.js.map +1 -0
  39. package/dist/model/Option.d.ts +122 -0
  40. package/dist/model/Option.d.ts.map +1 -0
  41. package/dist/model/Option.js +111 -0
  42. package/dist/model/Option.js.map +1 -0
  43. package/dist/model/Path.d.ts +31 -0
  44. package/dist/model/Path.d.ts.map +1 -0
  45. package/dist/model/Path.js +43 -0
  46. package/dist/model/Path.js.map +1 -0
  47. package/dist/model/RuntimeLike.d.ts +11 -0
  48. package/dist/model/RuntimeLike.d.ts.map +1 -0
  49. package/dist/model/RuntimeLike.js +2 -0
  50. package/dist/model/RuntimeLike.js.map +1 -0
  51. package/dist/model/StateTransition.d.ts +135 -0
  52. package/dist/model/StateTransition.d.ts.map +1 -0
  53. package/dist/model/StateTransition.js +69 -0
  54. package/dist/model/StateTransition.js.map +1 -0
  55. package/dist/model/StateTransitionProvableBatch.d.ts +198 -0
  56. package/dist/model/StateTransitionProvableBatch.d.ts.map +1 -0
  57. package/dist/model/StateTransitionProvableBatch.js +91 -0
  58. package/dist/model/StateTransitionProvableBatch.js.map +1 -0
  59. package/dist/model/network/NetworkState.d.ts +160 -0
  60. package/dist/model/network/NetworkState.d.ts.map +1 -0
  61. package/dist/model/network/NetworkState.js +32 -0
  62. package/dist/model/network/NetworkState.js.map +1 -0
  63. package/dist/model/transaction/RuntimeTransaction.d.ts +122 -0
  64. package/dist/model/transaction/RuntimeTransaction.d.ts.map +1 -0
  65. package/dist/model/transaction/RuntimeTransaction.js +87 -0
  66. package/dist/model/transaction/RuntimeTransaction.js.map +1 -0
  67. package/dist/model/transaction/SignedTransaction.d.ts +107 -0
  68. package/dist/model/transaction/SignedTransaction.d.ts.map +1 -0
  69. package/dist/model/transaction/SignedTransaction.js +34 -0
  70. package/dist/model/transaction/SignedTransaction.js.map +1 -0
  71. package/dist/model/transaction/ValueOption.d.ts +173 -0
  72. package/dist/model/transaction/ValueOption.d.ts.map +1 -0
  73. package/dist/model/transaction/ValueOption.js +25 -0
  74. package/dist/model/transaction/ValueOption.js.map +1 -0
  75. package/dist/protocol/Protocol.d.ts +43 -0
  76. package/dist/protocol/Protocol.d.ts.map +1 -0
  77. package/dist/protocol/Protocol.js +120 -0
  78. package/dist/protocol/Protocol.js.map +1 -0
  79. package/dist/protocol/ProtocolEnvironment.d.ts +9 -0
  80. package/dist/protocol/ProtocolEnvironment.d.ts.map +1 -0
  81. package/dist/protocol/ProtocolEnvironment.js +2 -0
  82. package/dist/protocol/ProtocolEnvironment.js.map +1 -0
  83. package/dist/protocol/ProtocolModule.d.ts +9 -0
  84. package/dist/protocol/ProtocolModule.d.ts.map +1 -0
  85. package/dist/protocol/ProtocolModule.js +13 -0
  86. package/dist/protocol/ProtocolModule.js.map +1 -0
  87. package/dist/protocol/ProvableBlockHook.d.ts +8 -0
  88. package/dist/protocol/ProvableBlockHook.d.ts.map +1 -0
  89. package/dist/protocol/ProvableBlockHook.js +5 -0
  90. package/dist/protocol/ProvableBlockHook.js.map +1 -0
  91. package/dist/protocol/ProvableTransactionHook.d.ts +7 -0
  92. package/dist/protocol/ProvableTransactionHook.d.ts.map +1 -0
  93. package/dist/protocol/ProvableTransactionHook.js +4 -0
  94. package/dist/protocol/ProvableTransactionHook.js.map +1 -0
  95. package/dist/protocol/TransitioningProtocolModule.d.ts +10 -0
  96. package/dist/protocol/TransitioningProtocolModule.d.ts.map +1 -0
  97. package/dist/protocol/TransitioningProtocolModule.js +9 -0
  98. package/dist/protocol/TransitioningProtocolModule.js.map +1 -0
  99. package/dist/prover/block/BlockProvable.d.ts +409 -0
  100. package/dist/prover/block/BlockProvable.d.ts.map +1 -0
  101. package/dist/prover/block/BlockProvable.js +48 -0
  102. package/dist/prover/block/BlockProvable.js.map +1 -0
  103. package/dist/prover/block/BlockProver.d.ts +94 -0
  104. package/dist/prover/block/BlockProver.d.ts.map +1 -0
  105. package/dist/prover/block/BlockProver.js +510 -0
  106. package/dist/prover/block/BlockProver.js.map +1 -0
  107. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts +64 -0
  108. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts.map +1 -0
  109. package/dist/prover/block/accummulators/BlockHashMerkleTree.js +17 -0
  110. package/dist/prover/block/accummulators/BlockHashMerkleTree.js.map +1 -0
  111. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.d.ts +139 -0
  112. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.d.ts.map +1 -0
  113. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js +21 -0
  114. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js.map +1 -0
  115. package/dist/prover/block/services/RuntimeVerificationKeyRootService.d.ts +7 -0
  116. package/dist/prover/block/services/RuntimeVerificationKeyRootService.d.ts.map +1 -0
  117. package/dist/prover/block/services/RuntimeVerificationKeyRootService.js +23 -0
  118. package/dist/prover/block/services/RuntimeVerificationKeyRootService.js.map +1 -0
  119. package/dist/prover/statetransition/StateTransitionProvable.d.ts +172 -0
  120. package/dist/prover/statetransition/StateTransitionProvable.d.ts.map +1 -0
  121. package/dist/prover/statetransition/StateTransitionProvable.js +16 -0
  122. package/dist/prover/statetransition/StateTransitionProvable.js.map +1 -0
  123. package/dist/prover/statetransition/StateTransitionProver.d.ts +48 -0
  124. package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -0
  125. package/dist/prover/statetransition/StateTransitionProver.js +187 -0
  126. package/dist/prover/statetransition/StateTransitionProver.js.map +1 -0
  127. package/dist/settlement/ContractModule.d.ts +16 -0
  128. package/dist/settlement/ContractModule.d.ts.map +1 -0
  129. package/dist/settlement/ContractModule.js +12 -0
  130. package/dist/settlement/ContractModule.js.map +1 -0
  131. package/dist/settlement/SettlementContractModule.d.ts +53 -0
  132. package/dist/settlement/SettlementContractModule.d.ts.map +1 -0
  133. package/dist/settlement/SettlementContractModule.js +80 -0
  134. package/dist/settlement/SettlementContractModule.js.map +1 -0
  135. package/dist/settlement/contracts/BridgeContract.d.ts +97 -0
  136. package/dist/settlement/contracts/BridgeContract.d.ts.map +1 -0
  137. package/dist/settlement/contracts/BridgeContract.js +164 -0
  138. package/dist/settlement/contracts/BridgeContract.js.map +1 -0
  139. package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts +14 -0
  140. package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts.map +1 -0
  141. package/dist/settlement/contracts/BridgeContractProtocolModule.js +30 -0
  142. package/dist/settlement/contracts/BridgeContractProtocolModule.js.map +1 -0
  143. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts +21 -0
  144. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts.map +1 -0
  145. package/dist/settlement/contracts/DispatchContractProtocolModule.js +57 -0
  146. package/dist/settlement/contracts/DispatchContractProtocolModule.js.map +1 -0
  147. package/dist/settlement/contracts/DispatchSmartContract.d.ts +44 -0
  148. package/dist/settlement/contracts/DispatchSmartContract.d.ts.map +1 -0
  149. package/dist/settlement/contracts/DispatchSmartContract.js +230 -0
  150. package/dist/settlement/contracts/DispatchSmartContract.js.map +1 -0
  151. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts +21 -0
  152. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts.map +1 -0
  153. package/dist/settlement/contracts/SettlementContractProtocolModule.js +82 -0
  154. package/dist/settlement/contracts/SettlementContractProtocolModule.js.map +1 -0
  155. package/dist/settlement/contracts/SettlementSmartContract.d.ts +123 -0
  156. package/dist/settlement/contracts/SettlementSmartContract.d.ts.map +1 -0
  157. package/dist/settlement/contracts/SettlementSmartContract.js +309 -0
  158. package/dist/settlement/contracts/SettlementSmartContract.js.map +1 -0
  159. package/dist/settlement/contracts/TokenBridgeTree.d.ts +228 -0
  160. package/dist/settlement/contracts/TokenBridgeTree.d.ts.map +1 -0
  161. package/dist/settlement/contracts/TokenBridgeTree.js +60 -0
  162. package/dist/settlement/contracts/TokenBridgeTree.js.map +1 -0
  163. package/dist/settlement/contracts/authorizations/ContractAuthorization.d.ts +10 -0
  164. package/dist/settlement/contracts/authorizations/ContractAuthorization.d.ts.map +1 -0
  165. package/dist/settlement/contracts/authorizations/ContractAuthorization.js +2 -0
  166. package/dist/settlement/contracts/authorizations/ContractAuthorization.js.map +1 -0
  167. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.d.ts +85 -0
  168. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.d.ts.map +1 -0
  169. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.js +11 -0
  170. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.js.map +1 -0
  171. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.d.ts +79 -0
  172. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.d.ts.map +1 -0
  173. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.js +11 -0
  174. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.js.map +1 -0
  175. package/dist/settlement/messages/Deposit.d.ts +77 -0
  176. package/dist/settlement/messages/Deposit.d.ts.map +1 -0
  177. package/dist/settlement/messages/Deposit.js +8 -0
  178. package/dist/settlement/messages/Deposit.js.map +1 -0
  179. package/dist/settlement/messages/OutgoingMessageArgument.d.ts +197 -0
  180. package/dist/settlement/messages/OutgoingMessageArgument.d.ts.map +1 -0
  181. package/dist/settlement/messages/OutgoingMessageArgument.js +33 -0
  182. package/dist/settlement/messages/OutgoingMessageArgument.js.map +1 -0
  183. package/dist/settlement/messages/Withdrawal.d.ts +78 -0
  184. package/dist/settlement/messages/Withdrawal.d.ts.map +1 -0
  185. package/dist/settlement/messages/Withdrawal.js +16 -0
  186. package/dist/settlement/messages/Withdrawal.js.map +1 -0
  187. package/dist/settlement/modularity/ProvableSettlementHook.d.ts +26 -0
  188. package/dist/settlement/modularity/ProvableSettlementHook.d.ts.map +1 -0
  189. package/dist/settlement/modularity/ProvableSettlementHook.js +4 -0
  190. package/dist/settlement/modularity/ProvableSettlementHook.js.map +1 -0
  191. package/dist/settlement/modularity/types.d.ts +8 -0
  192. package/dist/settlement/modularity/types.d.ts.map +1 -0
  193. package/dist/settlement/modularity/types.js +2 -0
  194. package/dist/settlement/modularity/types.js.map +1 -0
  195. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts +11 -0
  196. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts.map +1 -0
  197. package/dist/settlement/modules/NetworkStateSettlementModule.js +15 -0
  198. package/dist/settlement/modules/NetworkStateSettlementModule.js.map +1 -0
  199. package/dist/state/State.d.ts +68 -0
  200. package/dist/state/State.d.ts.map +1 -0
  201. package/dist/state/State.js +130 -0
  202. package/dist/state/State.js.map +1 -0
  203. package/dist/state/StateMap.d.ts +37 -0
  204. package/dist/state/StateMap.d.ts.map +1 -0
  205. package/dist/state/StateMap.js +56 -0
  206. package/dist/state/StateMap.js.map +1 -0
  207. package/dist/state/StateService.d.ts +6 -0
  208. package/dist/state/StateService.d.ts.map +1 -0
  209. package/dist/state/StateService.js +2 -0
  210. package/dist/state/StateService.js.map +1 -0
  211. package/dist/state/StateServiceProvider.d.ts +8 -0
  212. package/dist/state/StateServiceProvider.d.ts.map +1 -0
  213. package/dist/state/StateServiceProvider.js +37 -0
  214. package/dist/state/StateServiceProvider.js.map +1 -0
  215. package/dist/state/assert/assert.d.ts +12 -0
  216. package/dist/state/assert/assert.d.ts.map +1 -0
  217. package/dist/state/assert/assert.js +31 -0
  218. package/dist/state/assert/assert.js.map +1 -0
  219. package/dist/state/context/RuntimeMethodExecutionContext.d.ts +193 -0
  220. package/dist/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -0
  221. package/dist/state/context/RuntimeMethodExecutionContext.js +136 -0
  222. package/dist/state/context/RuntimeMethodExecutionContext.js.map +1 -0
  223. package/dist/state/context/TransitionMethodExecutionContext.d.ts +23 -0
  224. package/dist/state/context/TransitionMethodExecutionContext.d.ts.map +1 -0
  225. package/dist/state/context/TransitionMethodExecutionContext.js +6 -0
  226. package/dist/state/context/TransitionMethodExecutionContext.js.map +1 -0
  227. package/dist/state/protocol/ProtocolState.d.ts +7 -0
  228. package/dist/state/protocol/ProtocolState.d.ts.map +1 -0
  229. package/dist/state/protocol/ProtocolState.js +40 -0
  230. package/dist/state/protocol/ProtocolState.js.map +1 -0
  231. package/dist/utils/MinaPrefixedProvableHashList.d.ts +24 -0
  232. package/dist/utils/MinaPrefixedProvableHashList.d.ts.map +1 -0
  233. package/dist/utils/MinaPrefixedProvableHashList.js +53 -0
  234. package/dist/utils/MinaPrefixedProvableHashList.js.map +1 -0
  235. package/dist/utils/PrefixedProvableHashList.d.ts +8 -0
  236. package/dist/utils/PrefixedProvableHashList.d.ts.map +1 -0
  237. package/dist/utils/PrefixedProvableHashList.js +13 -0
  238. package/dist/utils/PrefixedProvableHashList.js.map +1 -0
  239. package/dist/utils/ProvableHashList.d.ts +27 -0
  240. package/dist/utils/ProvableHashList.d.ts.map +1 -0
  241. package/dist/utils/ProvableHashList.js +44 -0
  242. package/dist/utils/ProvableHashList.js.map +1 -0
  243. package/dist/utils/ProvableReductionHashList.d.ts +14 -0
  244. package/dist/utils/ProvableReductionHashList.d.ts.map +1 -0
  245. package/dist/utils/ProvableReductionHashList.js +51 -0
  246. package/dist/utils/ProvableReductionHashList.js.map +1 -0
  247. package/dist/utils/StateTransitionReductionList.d.ts +11 -0
  248. package/dist/utils/StateTransitionReductionList.d.ts.map +1 -0
  249. package/dist/utils/StateTransitionReductionList.js +61 -0
  250. package/dist/utils/StateTransitionReductionList.js.map +1 -0
  251. package/dist/utils/utils.d.ts +11 -0
  252. package/dist/utils/utils.d.ts.map +1 -0
  253. package/dist/utils/utils.js +45 -0
  254. package/dist/utils/utils.js.map +1 -0
  255. package/jest.config.cjs +12 -0
  256. package/package.json +36 -0
  257. package/src/Constants.ts +3 -0
  258. package/src/hooks/AccountStateHook.ts +48 -0
  259. package/src/hooks/BlockHeightHook.ts +17 -0
  260. package/src/hooks/LastStateRootBlockHook.ts +26 -0
  261. package/src/hooks/NoopBlockHook.ts +21 -0
  262. package/src/hooks/NoopSettlementHook.ts +20 -0
  263. package/src/hooks/NoopTransactionHook.ts +10 -0
  264. package/src/index.ts +57 -0
  265. package/src/model/MethodPublicOutput.ts +14 -0
  266. package/src/model/Option.ts +172 -0
  267. package/src/model/Path.ts +50 -0
  268. package/src/model/RuntimeLike.ts +12 -0
  269. package/src/model/StateTransition.ts +88 -0
  270. package/src/model/StateTransitionProvableBatch.ts +145 -0
  271. package/src/model/Transaction.ts +31 -0
  272. package/src/model/network/NetworkState.ts +33 -0
  273. package/src/model/transaction/RuntimeTransaction.ts +105 -0
  274. package/src/model/transaction/SignedTransaction.ts +47 -0
  275. package/src/model/transaction/ValueOption.ts +28 -0
  276. package/src/protocol/Protocol.ts +226 -0
  277. package/src/protocol/ProtocolEnvironment.ts +10 -0
  278. package/src/protocol/ProtocolModule.ts +27 -0
  279. package/src/protocol/ProvableBlockHook.ts +19 -0
  280. package/src/protocol/ProvableTransactionHook.ts +13 -0
  281. package/src/protocol/TransitioningProtocolModule.ts +12 -0
  282. package/src/prover/block/BlockProvable.ts +99 -0
  283. package/src/prover/block/BlockProver.ts +990 -0
  284. package/src/prover/block/accummulators/BlockHashMerkleTree.ts +16 -0
  285. package/src/prover/block/accummulators/RuntimeVerificationKeyTree.ts +24 -0
  286. package/src/prover/block/services/RuntimeVerificationKeyRootService.ts +20 -0
  287. package/src/prover/statetransition/StateTransitionProvable.ts +41 -0
  288. package/src/prover/statetransition/StateTransitionProver.ts +377 -0
  289. package/src/settlement/ContractModule.ts +31 -0
  290. package/src/settlement/SettlementContractModule.ts +145 -0
  291. package/src/settlement/contracts/BridgeContract.ts +237 -0
  292. package/src/settlement/contracts/BridgeContractProtocolModule.ts +43 -0
  293. package/src/settlement/contracts/DispatchContractProtocolModule.ts +73 -0
  294. package/src/settlement/contracts/DispatchSmartContract.ts +326 -0
  295. package/src/settlement/contracts/SettlementContractProtocolModule.ts +108 -0
  296. package/src/settlement/contracts/SettlementSmartContract.ts +498 -0
  297. package/src/settlement/contracts/TokenBridgeTree.ts +73 -0
  298. package/src/settlement/contracts/authorizations/ContractAuthorization.ts +11 -0
  299. package/src/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.ts +16 -0
  300. package/src/settlement/contracts/authorizations/UpdateMessagesHashAuth.ts +16 -0
  301. package/src/settlement/messages/Deposit.ts +7 -0
  302. package/src/settlement/messages/OutgoingMessageArgument.ts +42 -0
  303. package/src/settlement/messages/Withdrawal.ts +16 -0
  304. package/src/settlement/modularity/ProvableSettlementHook.ts +36 -0
  305. package/src/settlement/modularity/types.ts +22 -0
  306. package/src/settlement/modules/NetworkStateSettlementModule.ts +42 -0
  307. package/src/state/State.ts +175 -0
  308. package/src/state/StateMap.ts +73 -0
  309. package/src/state/StateService.ts +6 -0
  310. package/src/state/StateServiceProvider.ts +37 -0
  311. package/src/state/assert/assert.ts +35 -0
  312. package/src/state/context/RuntimeMethodExecutionContext.ts +174 -0
  313. package/src/state/context/TransitionMethodExecutionContext.ts +26 -0
  314. package/src/state/protocol/ProtocolState.ts +61 -0
  315. package/src/utils/MinaPrefixedProvableHashList.ts +73 -0
  316. package/src/utils/PrefixedProvableHashList.ts +21 -0
  317. package/src/utils/ProvableHashList.ts +50 -0
  318. package/src/utils/ProvableReductionHashList.ts +68 -0
  319. package/src/utils/StateTransitionReductionList.ts +89 -0
  320. package/src/utils/utils.ts +75 -0
  321. package/test/BlockProver.test.ts +212 -0
  322. package/test/Protocol.test.ts +37 -0
  323. package/test/State.test.ts +45 -0
  324. package/test/StateTransition.test.ts +174 -0
  325. package/test/TestingProtocol.ts +52 -0
  326. package/test/compiling/types.ts +28 -0
  327. package/test/model/Option.test.ts +72 -0
  328. package/test/modularity/types.ts +35 -0
  329. package/test/state/assert/assert.test.ts +56 -0
  330. package/test/tsconfig.json +7 -0
  331. package/test/utils/ProvableReductionHashList.test.ts +117 -0
  332. package/test/utils.test.ts +27 -0
  333. package/tsconfig.json +8 -0
@@ -0,0 +1,16 @@
1
+ import { createMerkleTree } from "@proto-kit/common";
2
+ import { Bool, Field, Poseidon, Struct } from "o1js";
3
+
4
+ export class BlockHashMerkleTree extends createMerkleTree(40) {}
5
+ export class BlockHashMerkleTreeWitness extends BlockHashMerkleTree.WITNESS {}
6
+
7
+ export class BlockHashTreeEntry extends Struct({
8
+ blockHash: Field,
9
+ closed: Bool,
10
+ // TODO We could add startingEternalTransactionsHash here to offer
11
+ // a more trivial connection to the sequence state
12
+ }) {
13
+ public hash(): Field {
14
+ return Poseidon.hash([this.blockHash, ...this.closed.toFields()]);
15
+ }
16
+ }
@@ -0,0 +1,24 @@
1
+ import { createMerkleTree } from "@proto-kit/common";
2
+ import { Field, Poseidon, Struct, VerificationKey } from "o1js";
3
+
4
+ export const treeFeeHeight = 10;
5
+ export class VKTree extends createMerkleTree(treeFeeHeight) {}
6
+ export class VKTreeWitness extends VKTree.WITNESS {}
7
+
8
+ export class RuntimeVerificationKeyAttestation extends Struct({
9
+ verificationKey: VerificationKey,
10
+ witness: VKTreeWitness,
11
+ }) {}
12
+
13
+ export class MethodVKConfigData extends Struct({
14
+ methodId: Field,
15
+ vkHash: Field,
16
+ }) {
17
+ public hash() {
18
+ return Poseidon.hash(MethodVKConfigData.toFields(this));
19
+ }
20
+ }
21
+
22
+ export interface MinimalVKTreeService {
23
+ getRoot: () => bigint;
24
+ }
@@ -0,0 +1,20 @@
1
+ import { injectable, Lifecycle, scoped } from "tsyringe";
2
+
3
+ import { MinimalVKTreeService } from "../accummulators/RuntimeVerificationKeyTree";
4
+
5
+ @injectable()
6
+ @scoped(Lifecycle.ContainerScoped)
7
+ export class RuntimeVerificationKeyRootService implements MinimalVKTreeService {
8
+ private injectedRoot?: bigint;
9
+
10
+ public setRoot(root: bigint) {
11
+ this.injectedRoot = root;
12
+ }
13
+
14
+ public getRoot() {
15
+ if (this.injectedRoot === undefined) {
16
+ throw new Error("VKTree root not set");
17
+ }
18
+ return this.injectedRoot;
19
+ }
20
+ }
@@ -0,0 +1,41 @@
1
+ import { Field, Proof, Struct } from "o1js";
2
+ import { WithZkProgrammable, CompilableModule } from "@proto-kit/common";
3
+
4
+ import { StateTransitionProvableBatch } from "../../model/StateTransitionProvableBatch";
5
+
6
+ export class StateTransitionProverPublicInput extends Struct({
7
+ stateTransitionsHash: Field,
8
+ protocolTransitionsHash: Field,
9
+ stateRoot: Field,
10
+ protocolStateRoot: Field,
11
+ }) {}
12
+
13
+ export class StateTransitionProverPublicOutput extends Struct({
14
+ stateTransitionsHash: Field,
15
+ protocolTransitionsHash: Field,
16
+ stateRoot: Field,
17
+ protocolStateRoot: Field,
18
+ }) {}
19
+
20
+ export type StateTransitionProof = Proof<
21
+ StateTransitionProverPublicInput,
22
+ StateTransitionProverPublicOutput
23
+ >;
24
+
25
+ export interface StateTransitionProvable
26
+ extends WithZkProgrammable<
27
+ StateTransitionProverPublicInput,
28
+ StateTransitionProverPublicOutput
29
+ >,
30
+ CompilableModule {
31
+ runBatch: (
32
+ publicInput: StateTransitionProverPublicInput,
33
+ batch: StateTransitionProvableBatch
34
+ ) => Promise<StateTransitionProverPublicOutput>;
35
+
36
+ merge: (
37
+ publicInput: StateTransitionProverPublicInput,
38
+ proof1: StateTransitionProof,
39
+ proof2: StateTransitionProof
40
+ ) => Promise<StateTransitionProverPublicOutput>;
41
+ }
@@ -0,0 +1,377 @@
1
+ import {
2
+ AreProofsEnabled,
3
+ PlainZkProgram,
4
+ provableMethod,
5
+ RollupMerkleTreeWitness,
6
+ ZkProgrammable,
7
+ CompilableModule,
8
+ type ArtifactRecord,
9
+ type CompileRegistry,
10
+ } from "@proto-kit/common";
11
+ import { Field, Provable, SelfProof, ZkProgram } from "o1js";
12
+ import { injectable } from "tsyringe";
13
+
14
+ import { constants } from "../../Constants";
15
+ import { ProvableStateTransition } from "../../model/StateTransition";
16
+ import {
17
+ ProvableStateTransitionType,
18
+ StateTransitionProvableBatch,
19
+ } from "../../model/StateTransitionProvableBatch";
20
+ import { StateTransitionProverType } from "../../protocol/Protocol";
21
+ import { ProtocolModule } from "../../protocol/ProtocolModule";
22
+ import {
23
+ DefaultProvableHashList,
24
+ ProvableHashList,
25
+ } from "../../utils/ProvableHashList";
26
+
27
+ import {
28
+ StateTransitionProof,
29
+ StateTransitionProvable,
30
+ StateTransitionProverPublicInput,
31
+ StateTransitionProverPublicOutput,
32
+ } from "./StateTransitionProvable";
33
+
34
+ const errors = {
35
+ propertyNotMatching: (property: string, step: string) =>
36
+ `${property} not matching ${step}`,
37
+
38
+ merkleWitnessNotCorrect: (
39
+ index: number,
40
+ type: ProvableStateTransitionType
41
+ ) => {
42
+ let s = `MerkleWitness not valid for StateTransition (${index}, type unknown)`;
43
+ Provable.asProver(() => {
44
+ s = s.replace(
45
+ "unknown",
46
+ type.isNormal().toBoolean() ? "normal" : "protocol"
47
+ );
48
+ });
49
+ return s;
50
+ },
51
+
52
+ noWitnessProviderSet: () =>
53
+ new Error(
54
+ "WitnessProvider not set, set it before you use StateTransitionProvider"
55
+ ),
56
+ };
57
+
58
+ interface StateTransitionProverExecutionState {
59
+ stateRoot: Field;
60
+ protocolStateRoot: Field;
61
+ stateTransitionList: ProvableHashList<ProvableStateTransition>;
62
+ protocolTransitionList: ProvableHashList<ProvableStateTransition>;
63
+ }
64
+
65
+ const StateTransitionSelfProofClass = SelfProof<
66
+ StateTransitionProverPublicInput,
67
+ StateTransitionProverPublicOutput
68
+ >;
69
+
70
+ /**
71
+ * StateTransitionProver is the prover that proves the application of some state
72
+ * transitions and checks and updates their merkle-tree entries
73
+ */
74
+ export class StateTransitionProverProgrammable extends ZkProgrammable<
75
+ StateTransitionProverPublicInput,
76
+ StateTransitionProverPublicOutput
77
+ > {
78
+ public constructor(
79
+ private readonly stateTransitionProver: StateTransitionProver
80
+ ) {
81
+ super();
82
+ }
83
+
84
+ public get areProofsEnabled(): AreProofsEnabled | undefined {
85
+ return this.stateTransitionProver.areProofsEnabled;
86
+ }
87
+
88
+ public zkProgramFactory(): PlainZkProgram<
89
+ StateTransitionProverPublicInput,
90
+ StateTransitionProverPublicOutput
91
+ >[] {
92
+ const instance = this;
93
+
94
+ const program = ZkProgram({
95
+ name: "StateTransitionProver",
96
+ publicInput: StateTransitionProverPublicInput,
97
+ publicOutput: StateTransitionProverPublicOutput,
98
+
99
+ methods: {
100
+ runBatch: {
101
+ privateInputs: [StateTransitionProvableBatch],
102
+
103
+ async method(
104
+ publicInput: StateTransitionProverPublicInput,
105
+ batch: StateTransitionProvableBatch
106
+ ) {
107
+ return await instance.runBatch(publicInput, batch);
108
+ },
109
+ },
110
+
111
+ merge: {
112
+ privateInputs: [
113
+ StateTransitionSelfProofClass,
114
+ StateTransitionSelfProofClass,
115
+ ],
116
+
117
+ async method(
118
+ publicInput: StateTransitionProverPublicInput,
119
+ proof1: StateTransitionProof,
120
+ proof2: StateTransitionProof
121
+ ) {
122
+ return await instance.merge(publicInput, proof1, proof2);
123
+ },
124
+ },
125
+ },
126
+ });
127
+
128
+ const methods = {
129
+ runBatch: program.runBatch.bind(program),
130
+ merge: program.merge.bind(program),
131
+ };
132
+
133
+ const SelfProofClass = ZkProgram.Proof(program);
134
+
135
+ return [
136
+ {
137
+ name: program.name,
138
+ compile: program.compile.bind(program),
139
+ verify: program.verify.bind(program),
140
+ analyzeMethods: program.analyzeMethods.bind(program),
141
+ Proof: SelfProofClass,
142
+ methods,
143
+ },
144
+ ];
145
+ }
146
+
147
+ /**
148
+ * Applies the state transitions to the current stateRoot
149
+ * and returns the new prover state
150
+ */
151
+ public applyTransitions(
152
+ stateRoot: Field,
153
+ protocolStateRoot: Field,
154
+ stateTransitionCommitmentFrom: Field,
155
+ protocolTransitionCommitmentFrom: Field,
156
+ transitionBatch: StateTransitionProvableBatch
157
+ ): StateTransitionProverExecutionState {
158
+ const state: StateTransitionProverExecutionState = {
159
+ stateRoot,
160
+ protocolStateRoot,
161
+
162
+ stateTransitionList: new DefaultProvableHashList(
163
+ ProvableStateTransition,
164
+ stateTransitionCommitmentFrom
165
+ ),
166
+
167
+ protocolTransitionList: new DefaultProvableHashList(
168
+ ProvableStateTransition,
169
+ protocolTransitionCommitmentFrom
170
+ ),
171
+ };
172
+
173
+ const transitions = transitionBatch.batch;
174
+ const types = transitionBatch.transitionTypes;
175
+ const merkleWitness = transitionBatch.merkleWitnesses;
176
+ for (
177
+ let index = 0;
178
+ index < constants.stateTransitionProverBatchSize;
179
+ index++
180
+ ) {
181
+ this.applyTransition(
182
+ state,
183
+ transitions[index],
184
+ types[index],
185
+ merkleWitness[index],
186
+ index
187
+ );
188
+ }
189
+
190
+ return state;
191
+ }
192
+
193
+ /**
194
+ * Applies a single state transition to the given state
195
+ * and mutates it in place
196
+ */
197
+ public applyTransition(
198
+ state: StateTransitionProverExecutionState,
199
+ transition: ProvableStateTransition,
200
+ type: ProvableStateTransitionType,
201
+ merkleWitness: RollupMerkleTreeWitness,
202
+ index = 0
203
+ ) {
204
+ const membershipValid = merkleWitness.checkMembership(
205
+ state.stateRoot,
206
+ transition.path,
207
+ transition.from.value
208
+ );
209
+
210
+ membershipValid
211
+ .or(transition.from.isSome.not())
212
+ .assertTrue(errors.merkleWitnessNotCorrect(index, type));
213
+
214
+ const newRoot = merkleWitness.calculateRoot(transition.to.value);
215
+
216
+ state.stateRoot = Provable.if(
217
+ transition.to.isSome,
218
+ newRoot,
219
+ state.stateRoot
220
+ );
221
+
222
+ // Only update protocol state root if ST is also of type protocol
223
+ // Since protocol STs are all at the start of the batch, this works
224
+ state.protocolStateRoot = Provable.if(
225
+ transition.to.isSome.and(type.isProtocol()),
226
+ newRoot,
227
+ state.protocolStateRoot
228
+ );
229
+
230
+ const isNotDummy = transition.path.equals(Field(0)).not();
231
+
232
+ state.stateTransitionList.pushIf(
233
+ transition,
234
+ isNotDummy.and(type.isNormal())
235
+ );
236
+ state.protocolTransitionList.pushIf(
237
+ transition,
238
+ isNotDummy.and(type.isProtocol())
239
+ );
240
+ }
241
+
242
+ /**
243
+ * Applies a whole batch of StateTransitions at once
244
+ */
245
+ @provableMethod()
246
+ public async runBatch(
247
+ publicInput: StateTransitionProverPublicInput,
248
+ batch: StateTransitionProvableBatch
249
+ ): Promise<StateTransitionProverPublicOutput> {
250
+ const result = this.applyTransitions(
251
+ publicInput.stateRoot,
252
+ publicInput.protocolStateRoot,
253
+ publicInput.stateTransitionsHash,
254
+ publicInput.protocolTransitionsHash,
255
+ batch
256
+ );
257
+
258
+ return new StateTransitionProverPublicOutput({
259
+ stateRoot: result.stateRoot,
260
+ stateTransitionsHash: result.stateTransitionList.commitment,
261
+ protocolTransitionsHash: result.protocolTransitionList.commitment,
262
+ protocolStateRoot: result.protocolStateRoot,
263
+ });
264
+ }
265
+
266
+ @provableMethod()
267
+ public async merge(
268
+ publicInput: StateTransitionProverPublicInput,
269
+ proof1: StateTransitionProof,
270
+ proof2: StateTransitionProof
271
+ ): Promise<StateTransitionProverPublicOutput> {
272
+ proof1.verify();
273
+ proof2.verify();
274
+
275
+ // Check state
276
+ publicInput.stateRoot.assertEquals(
277
+ proof1.publicInput.stateRoot,
278
+ errors.propertyNotMatching("stateRoot", "publicInput.from -> proof1.from")
279
+ );
280
+ proof1.publicOutput.stateRoot.assertEquals(
281
+ proof2.publicInput.stateRoot,
282
+ errors.propertyNotMatching("stateRoot", "proof1.to -> proof2.from")
283
+ );
284
+
285
+ // Check ST list
286
+ publicInput.stateTransitionsHash.assertEquals(
287
+ proof1.publicInput.stateTransitionsHash,
288
+ errors.propertyNotMatching(
289
+ "stateTransitionsHash",
290
+ "publicInput.from -> proof1.from"
291
+ )
292
+ );
293
+ proof1.publicOutput.stateTransitionsHash.assertEquals(
294
+ proof2.publicInput.stateTransitionsHash,
295
+ errors.propertyNotMatching(
296
+ "stateTransitionsHash",
297
+ "proof1.to -> proof2.from"
298
+ )
299
+ );
300
+
301
+ // Check Protocol ST list
302
+ publicInput.protocolTransitionsHash.assertEquals(
303
+ proof1.publicInput.protocolTransitionsHash,
304
+ errors.propertyNotMatching(
305
+ "protocolTransitionsHash",
306
+ "publicInput.from -> proof1.from"
307
+ )
308
+ );
309
+ proof1.publicOutput.protocolTransitionsHash.assertEquals(
310
+ proof2.publicInput.protocolTransitionsHash,
311
+ errors.propertyNotMatching(
312
+ "protocolTransitionsHash",
313
+ "proof1.to -> proof2.from"
314
+ )
315
+ );
316
+
317
+ // Check protocol state root
318
+ publicInput.protocolStateRoot.assertEquals(
319
+ proof1.publicInput.protocolStateRoot,
320
+ errors.propertyNotMatching(
321
+ "protocolStateRoot",
322
+ "publicInput.from -> proof1.from"
323
+ )
324
+ );
325
+ proof1.publicOutput.protocolStateRoot.assertEquals(
326
+ proof2.publicInput.protocolStateRoot,
327
+ errors.propertyNotMatching(
328
+ "protocolStateRoot",
329
+ "proof1.to -> proof2.from"
330
+ )
331
+ );
332
+
333
+ return new StateTransitionProverPublicInput({
334
+ stateRoot: proof2.publicOutput.stateRoot,
335
+ stateTransitionsHash: proof2.publicOutput.stateTransitionsHash,
336
+ protocolTransitionsHash: proof2.publicOutput.protocolTransitionsHash,
337
+ protocolStateRoot: proof2.publicOutput.protocolStateRoot,
338
+ });
339
+ }
340
+ }
341
+
342
+ @injectable()
343
+ export class StateTransitionProver
344
+ extends ProtocolModule
345
+ implements
346
+ StateTransitionProvable,
347
+ StateTransitionProverType,
348
+ CompilableModule
349
+ {
350
+ public zkProgrammable: StateTransitionProverProgrammable;
351
+
352
+ public constructor() {
353
+ super();
354
+ this.zkProgrammable = new StateTransitionProverProgrammable(this);
355
+ }
356
+
357
+ public async compile(
358
+ registry: CompileRegistry
359
+ ): Promise<void | ArtifactRecord> {
360
+ return await this.zkProgrammable.compile(registry);
361
+ }
362
+
363
+ public runBatch(
364
+ publicInput: StateTransitionProverPublicInput,
365
+ batch: StateTransitionProvableBatch
366
+ ): Promise<StateTransitionProverPublicOutput> {
367
+ return this.zkProgrammable.runBatch(publicInput, batch);
368
+ }
369
+
370
+ public merge(
371
+ publicInput: StateTransitionProverPublicInput,
372
+ proof1: StateTransitionProof,
373
+ proof2: StateTransitionProof
374
+ ): Promise<StateTransitionProverPublicOutput> {
375
+ return this.zkProgrammable.merge(publicInput, proof1, proof2);
376
+ }
377
+ }
@@ -0,0 +1,31 @@
1
+ import {
2
+ ArtifactRecord,
3
+ type CompilableModule,
4
+ CompileRegistry,
5
+ ConfigurableModule,
6
+ NoConfig,
7
+ TypedClass,
8
+ } from "@proto-kit/common";
9
+ import { SmartContract } from "o1js";
10
+
11
+ export type SmartContractClassFromInterface<Type> = typeof SmartContract &
12
+ TypedClass<Type>;
13
+
14
+ /**
15
+ * This module type is used to define a contract module that can be used to
16
+ * construct and inject smart contract instances.
17
+ * It defines a method contractFactory, whose arguments can be configured via
18
+ * the Argument generic. It returns a smart contract class that is a subclass
19
+ * of SmartContract and implements a certain interface as specified by the
20
+ * ContractType generic.
21
+ */
22
+ export abstract class ContractModule<ContractType, Config = NoConfig>
23
+ extends ConfigurableModule<Config>
24
+ implements CompilableModule
25
+ {
26
+ public abstract contractFactory(): SmartContractClassFromInterface<ContractType>;
27
+
28
+ public abstract compile(
29
+ registry: CompileRegistry
30
+ ): Promise<ArtifactRecord | undefined>;
31
+ }
@@ -0,0 +1,145 @@
1
+ import {
2
+ AreProofsEnabled,
3
+ ChildContainerProvider,
4
+ ModuleContainer,
5
+ ModulesRecord,
6
+ TypedClass,
7
+ noop,
8
+ StringKeyOf,
9
+ } from "@proto-kit/common";
10
+ import { Field, PublicKey, SmartContract } from "o1js";
11
+ import { injectable } from "tsyringe";
12
+
13
+ import { ProtocolEnvironment } from "../protocol/ProtocolEnvironment";
14
+ import { ProtocolModule } from "../protocol/ProtocolModule";
15
+
16
+ import { ContractModule } from "./ContractModule";
17
+ import { DispatchContractProtocolModule } from "./contracts/DispatchContractProtocolModule";
18
+ import { DispatchContractType } from "./contracts/DispatchSmartContract";
19
+ import {
20
+ SettlementContractConfig,
21
+ SettlementContractProtocolModule,
22
+ } from "./contracts/SettlementContractProtocolModule";
23
+ import { SettlementContractType } from "./contracts/SettlementSmartContract";
24
+ import { BridgeContractType } from "./contracts/BridgeContract";
25
+ import {
26
+ BridgeContractConfig,
27
+ BridgeContractProtocolModule,
28
+ } from "./contracts/BridgeContractProtocolModule";
29
+ import { GetContracts } from "./modularity/types";
30
+
31
+ export type SettlementModulesRecord = ModulesRecord<
32
+ TypedClass<ContractModule<unknown, unknown>>
33
+ >;
34
+
35
+ export type MandatorySettlementModulesRecord = {
36
+ SettlementContract: TypedClass<
37
+ ContractModule<SettlementContractType, SettlementContractConfig>
38
+ >;
39
+ DispatchContract: TypedClass<ContractModule<DispatchContractType, unknown>>;
40
+ BridgeContract: TypedClass<
41
+ ContractModule<BridgeContractType, BridgeContractConfig>
42
+ >;
43
+ };
44
+
45
+ @injectable()
46
+ export class SettlementContractModule<
47
+ SettlementModules extends SettlementModulesRecord &
48
+ MandatorySettlementModulesRecord,
49
+ >
50
+ extends ModuleContainer<SettlementModules>
51
+ implements ProtocolModule<unknown>
52
+ {
53
+ public constructor(definition: { modules: SettlementModules }) {
54
+ super(definition);
55
+ }
56
+
57
+ public static from<
58
+ SettlementModules extends SettlementModulesRecord &
59
+ MandatorySettlementModulesRecord,
60
+ >(
61
+ modules: SettlementModules
62
+ ): TypedClass<SettlementContractModule<SettlementModules>> {
63
+ return class ScopedSettlementContractModule extends SettlementContractModule<SettlementModules> {
64
+ public constructor() {
65
+ super({ modules });
66
+ }
67
+ };
68
+ }
69
+
70
+ public static mandatoryModules() {
71
+ return {
72
+ SettlementContract: SettlementContractProtocolModule,
73
+ DispatchContract: DispatchContractProtocolModule,
74
+ BridgeContract: BridgeContractProtocolModule,
75
+ } as const;
76
+ }
77
+
78
+ public static fromDefaults() {
79
+ return SettlementContractModule.from(
80
+ SettlementContractModule.mandatoryModules()
81
+ );
82
+ }
83
+
84
+ public static with<AdditionalModules extends SettlementModulesRecord>(
85
+ additionalModules: AdditionalModules
86
+ ) {
87
+ return SettlementContractModule.from({
88
+ ...SettlementContractModule.mandatoryModules(),
89
+ ...additionalModules,
90
+ } as const);
91
+ }
92
+
93
+ // ** For protocol module
94
+ public protocol?: ProtocolEnvironment;
95
+
96
+ public get areProofsEnabled(): AreProofsEnabled | undefined {
97
+ return this.protocol?.getAreProofsEnabled();
98
+ }
99
+ // **
100
+
101
+ public create(childContainerProvider: ChildContainerProvider) {
102
+ super.create(childContainerProvider);
103
+ }
104
+
105
+ public async start() {
106
+ noop();
107
+ }
108
+
109
+ public getContractClasses(): GetContracts<SettlementModules> {
110
+ const contracts =
111
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
112
+ (this.moduleNames as StringKeyOf<SettlementModules>[]).map((name) => {
113
+ const module = this.resolve(name);
114
+ return [name, module.contractFactory()];
115
+ });
116
+ return Object.fromEntries(contracts);
117
+ }
118
+
119
+ public createContracts(addresses: {
120
+ settlement: PublicKey;
121
+ dispatch: PublicKey;
122
+ }): {
123
+ settlement: SettlementContractType & SmartContract;
124
+ dispatch: DispatchContractType & SmartContract;
125
+ } {
126
+ const { DispatchContract, SettlementContract } = this.getContractClasses();
127
+
128
+ const dispatchInstance = new DispatchContract(addresses.dispatch);
129
+ const settlementInstance = new SettlementContract(addresses.settlement);
130
+
131
+ return {
132
+ dispatch: dispatchInstance,
133
+ settlement: settlementInstance,
134
+ };
135
+ }
136
+
137
+ public createBridgeContract(
138
+ address: PublicKey,
139
+ tokenId?: Field
140
+ ): BridgeContractType & SmartContract {
141
+ const { BridgeContract } = this.getContractClasses();
142
+
143
+ return new BridgeContract(address, tokenId);
144
+ }
145
+ }