@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,21 @@
1
+ import { NoConfig } from "@proto-kit/common";
2
+
3
+ import { ProvableBlockHook } from "../protocol/ProvableBlockHook";
4
+ import { NetworkState } from "../model/network/NetworkState";
5
+ import { BlockProverState } from "../prover/block/BlockProver";
6
+
7
+ export class NoopBlockHook extends ProvableBlockHook<NoConfig> {
8
+ public async afterBlock(
9
+ networkState: NetworkState,
10
+ state: BlockProverState
11
+ ): Promise<NetworkState> {
12
+ return networkState;
13
+ }
14
+
15
+ public async beforeBlock(
16
+ networkState: NetworkState,
17
+ state: BlockProverState
18
+ ): Promise<NetworkState> {
19
+ return networkState;
20
+ }
21
+ }
@@ -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,10 @@
1
+ import { noop } from "@proto-kit/common";
2
+
3
+ import { ProvableTransactionHook } from "../protocol/ProvableTransactionHook";
4
+ import { BlockProverExecutionData } from "../prover/block/BlockProvable";
5
+
6
+ export class NoopTransactionHook extends ProvableTransactionHook {
7
+ public async onTransaction(executionData: BlockProverExecutionData) {
8
+ noop();
9
+ }
10
+ }
package/src/index.ts ADDED
@@ -0,0 +1,57 @@
1
+ export * from "./hooks/AccountStateHook";
2
+ export * from "./hooks/BlockHeightHook";
3
+ export * from "./hooks/LastStateRootBlockHook";
4
+ export * from "./model/StateTransition";
5
+ export * from "./model/StateTransitionProvableBatch";
6
+ export * from "./model/Option";
7
+ export * from "./model/Path";
8
+ export * from "./model/network/NetworkState";
9
+ export * from "./model/transaction/SignedTransaction";
10
+ export * from "./model/transaction/RuntimeTransaction";
11
+ export * from "./model/transaction/ValueOption";
12
+ export * from "./model/MethodPublicOutput";
13
+ export * from "./model/RuntimeLike";
14
+ export * from "./utils/ProvableHashList";
15
+ export * from "./utils/PrefixedProvableHashList";
16
+ export * from "./utils/MinaPrefixedProvableHashList";
17
+ export * from "./utils/ProvableReductionHashList";
18
+ export * from "./utils/StateTransitionReductionList";
19
+ export * from "./utils/utils";
20
+ export * from "./prover/block/BlockProver";
21
+ export * from "./prover/block/BlockProvable";
22
+ export * from "./prover/block/accummulators/RuntimeVerificationKeyTree";
23
+ export * from "./prover/block/accummulators/BlockHashMerkleTree";
24
+ export * from "./prover/block/services/RuntimeVerificationKeyRootService";
25
+ export * from "./prover/statetransition/StateTransitionProver";
26
+ export * from "./prover/statetransition/StateTransitionProvable";
27
+ export * from "./protocol/Protocol";
28
+ export * from "./protocol/ProtocolModule";
29
+ export * from "./protocol/ProtocolEnvironment";
30
+ export * from "./protocol/ProvableTransactionHook";
31
+ export * from "./protocol/ProvableBlockHook";
32
+ export * from "./state/context/TransitionMethodExecutionContext";
33
+ export * from "./state/context/RuntimeMethodExecutionContext";
34
+ export * from "./state/protocol/ProtocolState";
35
+ export * from "./state/State";
36
+ export * from "./state/StateMap";
37
+ export * from "./state/StateService";
38
+ export * from "./state/StateServiceProvider";
39
+ export * from "./state/assert/assert";
40
+ export * from "./settlement/contracts/authorizations/ContractAuthorization";
41
+ export * from "./settlement/contracts/authorizations/UpdateMessagesHashAuth";
42
+ export * from "./settlement/contracts/authorizations/TokenBridgeDeploymentAuth";
43
+ export * from "./settlement/contracts/SettlementSmartContract";
44
+ export * from "./settlement/contracts/SettlementContractProtocolModule";
45
+ export * from "./settlement/contracts/DispatchSmartContract";
46
+ export * from "./settlement/contracts/DispatchContractProtocolModule";
47
+ export * from "./settlement/contracts/BridgeContract";
48
+ export * from "./settlement/contracts/BridgeContractProtocolModule";
49
+ export * from "./settlement/contracts/TokenBridgeTree";
50
+ export * from "./settlement/SettlementContractModule";
51
+ export * from "./settlement/ContractModule";
52
+ export * from "./settlement/modularity/ProvableSettlementHook";
53
+ export * from "./settlement/messages/OutgoingMessageArgument";
54
+ export * from "./settlement/modules/NetworkStateSettlementModule";
55
+ export * from "./settlement/messages/Deposit";
56
+ export * from "./settlement/messages/Withdrawal";
57
+ export { constants as ProtocolConstants } from "./Constants";
@@ -0,0 +1,14 @@
1
+ import { Bool, Field, Struct } from "o1js";
2
+
3
+ /**
4
+ * Public input used to link in-circuit execution with
5
+ * the proof's public input.
6
+ */
7
+ export class MethodPublicOutput extends Struct({
8
+ stateTransitionsHash: Field,
9
+ status: Bool,
10
+ transactionHash: Field,
11
+ networkStateHash: Field,
12
+ isMessage: Bool,
13
+ eventsHash: Field,
14
+ }) {}
@@ -0,0 +1,172 @@
1
+ import {
2
+ Bool,
3
+ Field,
4
+ type FlexibleProvablePure,
5
+ Poseidon,
6
+ Provable,
7
+ ProvablePure,
8
+ Struct,
9
+ } from "o1js";
10
+
11
+ export class ProvableOption extends Struct({
12
+ isSome: Bool,
13
+ value: Field,
14
+ }) {
15
+ public toSome() {
16
+ this.isSome = Bool(true);
17
+ return this;
18
+ }
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
+
81
+ /**
82
+ * Option facilitating in-circuit values that may or may not exist.
83
+ */
84
+ export class Option<Value> extends OptionBase {
85
+ /**
86
+ * Creates a new Option from the provided parameters
87
+ *
88
+ * @param isSome
89
+ * @param value
90
+ * @param valueType
91
+ * @returns New option from the provided parameters.
92
+ */
93
+ public static from<Value>(
94
+ isSome: Bool,
95
+ value: Value,
96
+ valueType: FlexibleProvablePure<Value>
97
+ ) {
98
+ return new Option(isSome, value, valueType);
99
+ }
100
+
101
+ /**
102
+ * Creates a new Option from the provided parameters
103
+ *
104
+ * @param value
105
+ * @param valueType
106
+ * @returns New option from the provided parameters.
107
+ */
108
+ public static fromValue<Value>(
109
+ value: Value,
110
+ valueType: FlexibleProvablePure<Value>
111
+ ) {
112
+ return this.from(Bool(true), value, valueType);
113
+ }
114
+
115
+ /**
116
+ * @returns Empty / none option
117
+ */
118
+ public static none() {
119
+ return new Option(Bool(false), Field(0), Field);
120
+ }
121
+
122
+ public constructor(
123
+ isSome: Bool,
124
+ public value: Value,
125
+ public valueType: FlexibleProvablePure<Value>,
126
+ isForcedSome = Bool(false)
127
+ ) {
128
+ super(isSome, isForcedSome);
129
+ }
130
+
131
+ public encodeValueToFields(): Field[] {
132
+ return this.valueType.toFields(this.value);
133
+ }
134
+
135
+ public clone(): Option<Value> {
136
+ return new Option(
137
+ this.isSome,
138
+ this.value,
139
+ this.valueType,
140
+ this.isForcedSome
141
+ );
142
+ }
143
+
144
+ /**
145
+ * @returns Returns the value of this option if it isSome,
146
+ * otherwise returns the given defaultValue
147
+ */
148
+ public orElse(defaultValue: Value): Value {
149
+ return Provable.if<Value>(
150
+ this.isSome,
151
+ this.valueType,
152
+ this.value,
153
+ defaultValue
154
+ );
155
+ }
156
+
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
+ );
171
+ }
172
+ }
@@ -0,0 +1,50 @@
1
+ import { Field, type FlexibleProvablePure, Poseidon } from "o1js";
2
+
3
+ import { stringToField } from "../utils/utils";
4
+
5
+ /**
6
+ * Helps manage path (key) identifiers for key-values in trees.
7
+ */
8
+ export class Path {
9
+ /**
10
+ * Encodes a JS string as a Field
11
+ *
12
+ * @param value
13
+ * @returns Field representation of the provided value
14
+ */
15
+ public static toField(value: string) {
16
+ return stringToField(value);
17
+ }
18
+
19
+ /**
20
+ * Encodes a class name and its property name into a Field
21
+ *
22
+ * @param className
23
+ * @param propertyKey
24
+ * @returns Field representation of class name + property name
25
+ */
26
+ public static fromProperty(className: string, propertyKey: string): Field {
27
+ return Poseidon.hash([
28
+ Path.toField(className),
29
+ Path.toField(propertyKey),
30
+ Field(0),
31
+ ]);
32
+ }
33
+
34
+ /**
35
+ * Encodes an existing path with the provided key into a single Field.
36
+ *
37
+ * @param path
38
+ * @param keyType
39
+ * @param key
40
+ * @returns Field representation of the leading path + the provided key.
41
+ */
42
+ public static fromKey<KeyType>(
43
+ path: Field,
44
+ keyType: FlexibleProvablePure<KeyType>,
45
+ key: KeyType
46
+ ): Field {
47
+ const keyHash = Poseidon.hash(keyType.toFields(key));
48
+ return Poseidon.hash([path, keyHash]);
49
+ }
50
+ }
@@ -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
+ }
@@ -0,0 +1,88 @@
1
+ import { Field, Struct } from "o1js";
2
+
3
+ import { Option, ProvableOption } from "./Option";
4
+
5
+ /**
6
+ * Provable representation of a State Transition, used to
7
+ * normalize state transitions of various value types for
8
+ * the state transition circuit.
9
+ */
10
+ export class ProvableStateTransition extends Struct({
11
+ path: Field,
12
+
13
+ // must be applied even if `None`
14
+ from: ProvableOption,
15
+
16
+ // must be ignored if `None`
17
+ to: ProvableOption,
18
+ }) {
19
+ public static dummy(): ProvableStateTransition {
20
+ return new ProvableStateTransition({
21
+ path: Field(0),
22
+ from: Option.none().toProvable(),
23
+ to: Option.none().toProvable(),
24
+ });
25
+ }
26
+ }
27
+
28
+ /**
29
+ * Generic state transition that constraints the current method circuit
30
+ * to external state, by providing a state anchor.
31
+ */
32
+ export class StateTransition<Value> {
33
+ public static from<Value>(path: Field, fromValue: Option<Value>) {
34
+ return new StateTransition(path, fromValue, Option.none());
35
+ }
36
+
37
+ public static fromTo<Value>(
38
+ path: Field,
39
+ fromValue: Option<Value>,
40
+ toValue: Option<Value>
41
+ ) {
42
+ return new StateTransition(path, fromValue, toValue);
43
+ }
44
+
45
+ public constructor(
46
+ public path: Field,
47
+ public fromValue: Option<Value>,
48
+ public toValue: Option<Field> | Option<Value>
49
+ ) {}
50
+
51
+ public get from() {
52
+ const from = this.fromValue.clone();
53
+ from.forceSome();
54
+ return from;
55
+ }
56
+
57
+ public get to() {
58
+ return this.toValue.clone();
59
+ }
60
+
61
+ /**
62
+ * Converts a StateTransition to a ProvableStateTransition,
63
+ * while enforcing the 'from' property to be 'Some' in all cases.
64
+ */
65
+ public toProvable(): ProvableStateTransition {
66
+ return new ProvableStateTransition({
67
+ path: this.path,
68
+ from: this.from.toProvable(),
69
+ to: this.to.toProvable(),
70
+ });
71
+ }
72
+
73
+ public toJSON() {
74
+ return {
75
+ path: this.path.toString(),
76
+ from: this.fromValue.toJSON(),
77
+ to: this.toValue.toJSON(),
78
+ };
79
+ }
80
+
81
+ public toConstant(): StateTransition<Value> {
82
+ return new StateTransition<Value>(
83
+ this.path.toConstant(),
84
+ this.fromValue.toConstant(),
85
+ this.toValue.toConstant()
86
+ );
87
+ }
88
+ }
@@ -0,0 +1,145 @@
1
+ import { Bool, Provable, Struct } from "o1js";
2
+ import {
3
+ InMemoryMerkleTreeStorage,
4
+ range,
5
+ RollupMerkleTree,
6
+ RollupMerkleTreeWitness,
7
+ } from "@proto-kit/common";
8
+
9
+ import { constants } from "../Constants";
10
+
11
+ import { ProvableStateTransition } from "./StateTransition.js";
12
+
13
+ export class StateTransitionType {
14
+ public static readonly normal = true;
15
+
16
+ public static readonly protocol = false;
17
+
18
+ public static isNormal(type: boolean) {
19
+ return type === StateTransitionType.normal;
20
+ }
21
+
22
+ public static isProtocol(type: boolean) {
23
+ return type === StateTransitionType.protocol;
24
+ }
25
+ }
26
+
27
+ export class ProvableStateTransitionType extends Struct({
28
+ type: Bool,
29
+ }) {
30
+ public static get normal(): ProvableStateTransitionType {
31
+ return new ProvableStateTransitionType({
32
+ type: Bool(StateTransitionType.normal),
33
+ });
34
+ }
35
+
36
+ public static get protocol(): ProvableStateTransitionType {
37
+ return new ProvableStateTransitionType({
38
+ type: Bool(StateTransitionType.protocol),
39
+ });
40
+ }
41
+
42
+ public isNormal(): Bool {
43
+ return this.type;
44
+ }
45
+
46
+ public isProtocol(): Bool {
47
+ return this.type.not();
48
+ }
49
+ }
50
+
51
+ /**
52
+ * A Batch of StateTransitions to be consumed by the StateTransitionProver
53
+ * to prove multiple STs at once
54
+ *
55
+ * transitionType:
56
+ * true == normal ST, false == protocol ST
57
+ */
58
+ export class StateTransitionProvableBatch extends Struct({
59
+ batch: Provable.Array(
60
+ ProvableStateTransition,
61
+ constants.stateTransitionProverBatchSize
62
+ ),
63
+
64
+ transitionTypes: Provable.Array(
65
+ ProvableStateTransitionType,
66
+ constants.stateTransitionProverBatchSize
67
+ ),
68
+
69
+ merkleWitnesses: Provable.Array(
70
+ RollupMerkleTreeWitness,
71
+ constants.stateTransitionProverBatchSize
72
+ ),
73
+ }) {
74
+ public static fromMappings(
75
+ transitions: {
76
+ transition: ProvableStateTransition;
77
+ type: ProvableStateTransitionType;
78
+ }[],
79
+ merkleWitnesses: RollupMerkleTreeWitness[]
80
+ ): StateTransitionProvableBatch {
81
+ const batch = transitions.map((entry) => entry.transition);
82
+ const transitionTypes = transitions.map((entry) => entry.type);
83
+ const witnesses = merkleWitnesses.slice();
84
+ // Check that order is correct
85
+ let normalSTsStarted = false;
86
+ transitionTypes.forEach((x) => {
87
+ if (!normalSTsStarted && x.isNormal().toBoolean()) {
88
+ normalSTsStarted = true;
89
+ }
90
+ if (normalSTsStarted && x.isProtocol().toBoolean()) {
91
+ throw new Error("Order in initializing STBatch not correct");
92
+ }
93
+ });
94
+
95
+ while (batch.length < constants.stateTransitionProverBatchSize) {
96
+ batch.push(ProvableStateTransition.dummy());
97
+ transitionTypes.push(ProvableStateTransitionType.normal);
98
+ witnesses.push(
99
+ new RollupMerkleTree(new InMemoryMerkleTreeStorage()).getWitness(
100
+ BigInt(0)
101
+ )
102
+ );
103
+ }
104
+ return new StateTransitionProvableBatch({
105
+ batch,
106
+ transitionTypes,
107
+ merkleWitnesses: witnesses,
108
+ });
109
+ }
110
+
111
+ public static fromTransitions(
112
+ transitions: ProvableStateTransition[],
113
+ protocolTransitions: ProvableStateTransition[],
114
+ merkleWitnesses: RollupMerkleTreeWitness[]
115
+ ): StateTransitionProvableBatch {
116
+ const array = transitions.slice().concat(protocolTransitions);
117
+
118
+ const transitionTypes = range(0, transitions.length)
119
+ .map(() => ProvableStateTransitionType.normal)
120
+ .concat(
121
+ range(0, protocolTransitions.length).map(
122
+ () => ProvableStateTransitionType.protocol
123
+ )
124
+ );
125
+
126
+ while (array.length < constants.stateTransitionProverBatchSize) {
127
+ array.push(ProvableStateTransition.dummy());
128
+ transitionTypes.push(ProvableStateTransitionType.normal);
129
+ }
130
+
131
+ return new StateTransitionProvableBatch({
132
+ batch: array,
133
+ transitionTypes,
134
+ merkleWitnesses,
135
+ });
136
+ }
137
+
138
+ private constructor(object: {
139
+ batch: ProvableStateTransition[];
140
+ transitionTypes: ProvableStateTransitionType[];
141
+ merkleWitnesses: RollupMerkleTreeWitness[];
142
+ }) {
143
+ super(object);
144
+ }
145
+ }
@@ -0,0 +1,31 @@
1
+ import {
2
+ Field,
3
+ FlexibleProvable,
4
+ Poseidon,
5
+ PublicKey,
6
+ Signature,
7
+ Struct,
8
+ UInt64,
9
+ } from "o1js";
10
+
11
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
12
+ function argsToHash(...args: FlexibleProvable<any>[]): Field {
13
+ const fields = args.flatMap((argument) => argument.toFields(argument));
14
+ return Poseidon.hash(fields);
15
+ }
16
+
17
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
18
+ class Transaction extends Struct({
19
+ // must be checked inside @runtimeMethod
20
+ methodId: Field,
21
+ // constructed by hashing args + appending all used proof input/output hashes at the end
22
+ argsHash: Field,
23
+ // must (due to nonce) be checked during applyTransaction
24
+ nonce: UInt64,
25
+ sender: PublicKey,
26
+ signature: Signature,
27
+ }) {
28
+ public toHash(): Field {
29
+ return Poseidon.hash(Transaction.toFields(this));
30
+ }
31
+ }
@@ -0,0 +1,33 @@
1
+ import { Field, Poseidon, Struct, UInt64 } from "o1js";
2
+ import { RollupMerkleTree } from "@proto-kit/common";
3
+
4
+ export class CurrentBlock extends Struct({
5
+ height: UInt64,
6
+ }) {}
7
+
8
+ export class PreviousBlock extends Struct({
9
+ rootHash: Field,
10
+ }) {}
11
+
12
+ export class NetworkState extends Struct({
13
+ block: CurrentBlock,
14
+ previous: PreviousBlock,
15
+ }) {
16
+ public hash(): Field {
17
+ return Poseidon.hash([
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
+ });
32
+ }
33
+ }