@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,105 @@
1
+ import { Bool, Field, Poseidon, PublicKey, Struct, UInt64 } from "o1js";
2
+ import { EMPTY_PUBLICKEY, EMPTY_PUBLICKEY_X } from "@proto-kit/common";
3
+
4
+ import { PublicKeyOption, UInt64Option } from "./ValueOption";
5
+
6
+ /**
7
+ * This struct is used to expose transaction information to the runtime method
8
+ * execution. This class has not all data included in transactions on purpose.
9
+ * For example, we don't want to expose the signature or args as fields.
10
+ */
11
+ export class RuntimeTransaction extends Struct({
12
+ methodId: Field,
13
+ argsHash: Field,
14
+ nonce: UInt64Option,
15
+ sender: PublicKeyOption,
16
+ }) {
17
+ public static fromTransaction(input: {
18
+ methodId: Field;
19
+ argsHash: Field;
20
+ nonce: UInt64;
21
+ sender: PublicKey;
22
+ }) {
23
+ return new RuntimeTransaction({
24
+ methodId: input.methodId,
25
+ argsHash: input.argsHash,
26
+ nonce: UInt64Option.fromSome(input.nonce),
27
+ sender: PublicKeyOption.fromSome(input.sender),
28
+ });
29
+ }
30
+
31
+ public static fromMessage({
32
+ methodId,
33
+ argsHash,
34
+ }: {
35
+ methodId: Field;
36
+ argsHash: Field;
37
+ }) {
38
+ return new RuntimeTransaction({
39
+ methodId,
40
+ argsHash,
41
+ nonce: UInt64Option.none(UInt64.zero),
42
+ sender: PublicKeyOption.none(EMPTY_PUBLICKEY),
43
+ });
44
+ }
45
+
46
+ public static dummyTransaction(): RuntimeTransaction {
47
+ return new RuntimeTransaction({
48
+ methodId: Field(0),
49
+ nonce: new UInt64Option({
50
+ isSome: Bool(true),
51
+ value: UInt64.zero,
52
+ }),
53
+ sender: new PublicKeyOption({
54
+ isSome: Bool(true),
55
+ value: EMPTY_PUBLICKEY,
56
+ }),
57
+ argsHash: Field(0),
58
+ });
59
+ }
60
+
61
+ public assertTransactionType(isMessage: Bool) {
62
+ const isTransaction = isMessage.not();
63
+ // isSome has to be true when it is a transaction, otherwise false
64
+ this.nonce.isSome
65
+ .equals(isTransaction)
66
+ .assertTrue("Nonce is not right option isSome for type");
67
+ this.sender.isSome
68
+ .equals(isTransaction)
69
+ .assertTrue("Sender is not right option isSome for type");
70
+ this.sender.value.x
71
+ .equals(EMPTY_PUBLICKEY_X)
72
+ .equals(isMessage)
73
+ .assertTrue("Transaction sender is not set to dummy");
74
+ }
75
+
76
+ public hashData(): Field[] {
77
+ return [
78
+ this.methodId,
79
+ ...this.sender.value.toFields(),
80
+ ...this.nonce.value.toFields(),
81
+ this.argsHash,
82
+ ];
83
+ }
84
+
85
+ public static fromHashData(fields: Field[]) {
86
+ // sender is 2nd and the first element is x (2nd isOdd)
87
+ const isMessage = fields[1].equals(EMPTY_PUBLICKEY_X);
88
+ return new RuntimeTransaction({
89
+ methodId: fields[0],
90
+ sender: new PublicKeyOption({
91
+ isSome: isMessage.not(),
92
+ value: PublicKey.fromFields([fields[1], fields[2]]),
93
+ }),
94
+ nonce: new UInt64Option({
95
+ isSome: isMessage.not(),
96
+ value: UInt64.fromFields([fields[3]]),
97
+ }),
98
+ argsHash: fields[4],
99
+ });
100
+ }
101
+
102
+ public hash(): Field {
103
+ return Poseidon.hash(this.hashData());
104
+ }
105
+ }
@@ -0,0 +1,47 @@
1
+ import { Bool, Field, Scalar, Signature, Struct, UInt64 } from "o1js";
2
+
3
+ import { RuntimeTransaction } from "./RuntimeTransaction";
4
+
5
+ export class SignedTransaction extends Struct({
6
+ transaction: RuntimeTransaction,
7
+ signature: Signature,
8
+ }) {
9
+ public static getSignatureData(args: {
10
+ methodId: Field;
11
+ nonce: UInt64;
12
+ argsHash: Field;
13
+ }): Field[] {
14
+ return [args.methodId, ...args.nonce.value.toFields(), args.argsHash];
15
+ }
16
+
17
+ public static dummy(): SignedTransaction {
18
+ return new SignedTransaction({
19
+ transaction: RuntimeTransaction.dummyTransaction(),
20
+
21
+ signature: Signature.fromObject({
22
+ s: Scalar.from(0),
23
+ r: Field(0),
24
+ }),
25
+ });
26
+ }
27
+
28
+ public hash(): Field {
29
+ return this.transaction.hash();
30
+ }
31
+
32
+ public getSignatureData(): Field[] {
33
+ const { methodId, argsHash, nonce } = this.transaction;
34
+ return SignedTransaction.getSignatureData({
35
+ nonce: nonce.value,
36
+ methodId,
37
+ argsHash,
38
+ });
39
+ }
40
+
41
+ public validateSignature(): Bool {
42
+ return this.signature.verify(
43
+ this.transaction.sender.value,
44
+ this.getSignatureData()
45
+ );
46
+ }
47
+ }
@@ -0,0 +1,28 @@
1
+ import { Bool, ProvableExtended, PublicKey, Struct, UInt64 } from "o1js";
2
+
3
+ function genericOptionFactory<Type>(valueType: ProvableExtended<Type>) {
4
+ return class Generic extends Struct({
5
+ isSome: Bool,
6
+ value: valueType,
7
+ }) {
8
+ public static fromSome(value: Type) {
9
+ return new Generic({
10
+ isSome: Bool(true),
11
+ value,
12
+ });
13
+ }
14
+
15
+ public static none(value: Type) {
16
+ return new Generic({
17
+ isSome: Bool(false),
18
+ value,
19
+ });
20
+ }
21
+ };
22
+ }
23
+
24
+ export class UInt64Option extends genericOptionFactory<UInt64>(UInt64) {}
25
+
26
+ export class PublicKeyOption extends genericOptionFactory<PublicKey>(
27
+ PublicKey
28
+ ) {}
@@ -0,0 +1,226 @@
1
+ import {
2
+ AreProofsEnabled,
3
+ ChildContainerProvider,
4
+ log,
5
+ ModuleContainer,
6
+ ModulesConfig,
7
+ ModulesRecord,
8
+ StringKeyOf,
9
+ TypedClass,
10
+ } from "@proto-kit/common";
11
+ import { DependencyContainer, Lifecycle } from "tsyringe";
12
+
13
+ import { BlockProvable } from "../prover/block/BlockProvable";
14
+ import { StateTransitionProvable } from "../prover/statetransition/StateTransitionProvable";
15
+ import { StateServiceProvider } from "../state/StateServiceProvider";
16
+ import { SimpleAsyncStateService } from "../state/StateService";
17
+ import { NoopBlockHook } from "../hooks/NoopBlockHook";
18
+ import { BlockHeightHook } from "../hooks/BlockHeightHook";
19
+ import { LastStateRootBlockHook } from "../hooks/LastStateRootBlockHook";
20
+ import { ProvableSettlementHook } from "../settlement/modularity/ProvableSettlementHook";
21
+ import { NoopSettlementHook } from "../hooks/NoopSettlementHook";
22
+ import { AccountStateHook } from "../hooks/AccountStateHook";
23
+ import { NoopTransactionHook } from "../hooks/NoopTransactionHook";
24
+
25
+ import { ProtocolModule } from "./ProtocolModule";
26
+ import { ProvableTransactionHook } from "./ProvableTransactionHook";
27
+ import { ProtocolEnvironment } from "./ProtocolEnvironment";
28
+ import { ProvableBlockHook } from "./ProvableBlockHook";
29
+ import { TransitioningProtocolModule } from "./TransitioningProtocolModule";
30
+
31
+ /**
32
+ * This is a mapping of abstract classes to their respective injection tokens.
33
+ * Keys are the abstract classes names, which need to be set dynamically
34
+ * and can't be hardcoded since producing optimized builds may mangle the
35
+ * class names, making them different from the ones in the source code.
36
+ */
37
+ const PROTOCOL_INJECTION_TOKENS: Record<string, string> = {
38
+ [ProvableTransactionHook.name]: "ProvableTransactionHook",
39
+ [ProvableBlockHook.name]: "ProvableBlockHook",
40
+ [ProvableSettlementHook.name]: "ProvableSettlementHook",
41
+ };
42
+
43
+ export type ProtocolModulesRecord = ModulesRecord<
44
+ TypedClass<ProtocolModule<unknown>>
45
+ >;
46
+
47
+ export interface BlockProverType extends ProtocolModule, BlockProvable {}
48
+
49
+ export interface StateTransitionProverType
50
+ extends ProtocolModule,
51
+ StateTransitionProvable {}
52
+
53
+ export type MandatoryProtocolModulesRecord = {
54
+ BlockProver: TypedClass<BlockProverType>;
55
+ StateTransitionProver: TypedClass<StateTransitionProverType>;
56
+ AccountState: TypedClass<AccountStateHook>;
57
+ BlockHeight: TypedClass<BlockHeightHook>;
58
+ LastStateRoot: TypedClass<LastStateRootBlockHook>;
59
+ };
60
+
61
+ export interface ProtocolDefinition<Modules extends ProtocolModulesRecord> {
62
+ modules: Modules;
63
+ config?: ModulesConfig<Modules>;
64
+ }
65
+
66
+ export class Protocol<
67
+ Modules extends ProtocolModulesRecord & MandatoryProtocolModulesRecord,
68
+ >
69
+ extends ModuleContainer<Modules>
70
+ implements ProtocolEnvironment
71
+ {
72
+ public static from<
73
+ Modules extends ProtocolModulesRecord & MandatoryProtocolModulesRecord,
74
+ >(modules: ProtocolDefinition<Modules>): TypedClass<Protocol<Modules>> {
75
+ return class ScopedProtocol extends Protocol<Modules> {
76
+ public constructor() {
77
+ super(modules);
78
+ }
79
+ };
80
+ }
81
+
82
+ public definition: ProtocolDefinition<Modules>;
83
+
84
+ public constructor(definition: ProtocolDefinition<Modules>) {
85
+ super(definition);
86
+ this.definition = definition;
87
+ }
88
+
89
+ public get stateService(): SimpleAsyncStateService {
90
+ return this.stateServiceProvider.stateService;
91
+ }
92
+
93
+ public get stateServiceProvider(): StateServiceProvider {
94
+ return this.container.resolve<StateServiceProvider>("StateServiceProvider");
95
+ }
96
+
97
+ public decorateModule(
98
+ moduleName: StringKeyOf<Modules>,
99
+ containedModule: InstanceType<Modules[StringKeyOf<Modules>]>
100
+ ) {
101
+ log.debug(`Decorated ${moduleName}`);
102
+ containedModule.protocol = this;
103
+
104
+ if (containedModule instanceof TransitioningProtocolModule) {
105
+ containedModule.name = moduleName;
106
+ }
107
+
108
+ super.decorateModule(moduleName, containedModule);
109
+ }
110
+
111
+ public get dependencyContainer(): DependencyContainer {
112
+ return this.container;
113
+ }
114
+
115
+ private isModule(
116
+ moduleName: keyof Modules
117
+ ): moduleName is StringKeyOf<Modules> {
118
+ return this.definition.modules[moduleName] !== undefined;
119
+ }
120
+
121
+ public get blockProver(): BlockProvable {
122
+ // Why do I resolve directly here?
123
+ // I don't know exactly but generics don't let me use .resolve()
124
+ return this.container.resolve<InstanceType<Modules["BlockProver"]>>(
125
+ "BlockProver"
126
+ );
127
+ }
128
+
129
+ public get stateTransitionProver(): StateTransitionProvable {
130
+ return this.container.resolve<
131
+ InstanceType<Modules["StateTransitionProver"]>
132
+ >("StateTransitionProver");
133
+ }
134
+
135
+ public getAreProofsEnabled(): AreProofsEnabled {
136
+ return this.container.resolve<AreProofsEnabled>("AreProofsEnabled");
137
+ }
138
+
139
+ public create(childContainerProvider: ChildContainerProvider) {
140
+ super.create(childContainerProvider);
141
+
142
+ // Register the BlockModules seperately since we need to
143
+ // inject them differently later
144
+ const ABSTRACT_MODULE_TYPES = [
145
+ { type: ProvableTransactionHook, defaultType: NoopTransactionHook },
146
+ { type: ProvableBlockHook, defaultType: NoopBlockHook },
147
+ { type: ProvableSettlementHook, defaultType: NoopSettlementHook },
148
+ ] as const;
149
+
150
+ ABSTRACT_MODULE_TYPES.forEach((moduleTypeRegistration) => {
151
+ const abstractType = moduleTypeRegistration.type;
152
+
153
+ const implementingModules = Object.entries(
154
+ this.definition.modules
155
+ ).filter(([, value]) =>
156
+ Object.prototype.isPrototypeOf.call(abstractType, value)
157
+ );
158
+
159
+ const newInjectionToken: string | undefined =
160
+ PROTOCOL_INJECTION_TOKENS[abstractType.name];
161
+
162
+ if (newInjectionToken === undefined) {
163
+ log.error(
164
+ "Can't inject hook under the underlying hook token: Alias not found in mapping"
165
+ );
166
+ return;
167
+ }
168
+
169
+ implementingModules.forEach(([key]) => {
170
+ this.container.register(
171
+ newInjectionToken,
172
+ { useToken: key },
173
+ { lifecycle: Lifecycle.ContainerScoped }
174
+ );
175
+ });
176
+ if (implementingModules.length === 0) {
177
+ // This type annotation shouldn't change anything but is necessary
178
+ // bcs tsyringe complains
179
+ const { defaultType }: { defaultType: TypedClass<unknown> } =
180
+ moduleTypeRegistration;
181
+
182
+ // Register default (noop) version
183
+ this.container.register(
184
+ newInjectionToken,
185
+ { useClass: defaultType },
186
+ { lifecycle: Lifecycle.ContainerScoped }
187
+ );
188
+ }
189
+ });
190
+
191
+ // Cross-register all runtime modules to the protocol container for easier
192
+ // access of runtime modules inside protocol hooks
193
+ if (this.container.isRegistered("Runtime", true)) {
194
+ const runtimeContainer: ModuleContainer<any> =
195
+ this.container.resolve("Runtime");
196
+
197
+ runtimeContainer.moduleNames.forEach((runtimeModuleName) => {
198
+ this.container.register(runtimeModuleName, {
199
+ useFactory: (dependencyContainer) => {
200
+ // Prevents creation of closure
201
+ const runtime: ModuleContainer<any> =
202
+ dependencyContainer.resolve("Runtime");
203
+ return runtime.resolve(runtimeModuleName);
204
+ },
205
+ });
206
+ });
207
+ } else {
208
+ log.warn(
209
+ "Couldn't resolve Runtime reference in Protocol, resolving RuntimeModules in hooks won't be available"
210
+ );
211
+ }
212
+ }
213
+
214
+ public async start() {
215
+ // eslint-disable-next-line guard-for-in
216
+ for (const moduleName in this.definition.modules) {
217
+ const protocolModule = this.resolve(moduleName);
218
+
219
+ log.info(
220
+ `Starting protocol module ${moduleName} (${protocolModule.constructor.name})`
221
+ );
222
+ // eslint-disable-next-line no-await-in-loop
223
+ await protocolModule.start();
224
+ }
225
+ }
226
+ }
@@ -0,0 +1,10 @@
1
+ import { AreProofsEnabled } from "@proto-kit/common";
2
+
3
+ import { SimpleAsyncStateService } from "../state/StateService";
4
+ import { StateServiceProvider } from "../state/StateServiceProvider";
5
+
6
+ export interface ProtocolEnvironment {
7
+ get stateService(): SimpleAsyncStateService;
8
+ get stateServiceProvider(): StateServiceProvider;
9
+ getAreProofsEnabled(): AreProofsEnabled;
10
+ }
@@ -0,0 +1,27 @@
1
+ import {
2
+ AreProofsEnabled,
3
+ ChildContainerProvider,
4
+ ConfigurableModule,
5
+ NoConfig,
6
+ noop,
7
+ } from "@proto-kit/common";
8
+
9
+ import { ProtocolEnvironment } from "./ProtocolEnvironment";
10
+
11
+ export abstract class ProtocolModule<
12
+ Config = NoConfig,
13
+ > extends ConfigurableModule<Config> {
14
+ public protocol?: ProtocolEnvironment;
15
+
16
+ public get areProofsEnabled(): AreProofsEnabled | undefined {
17
+ return this.protocol?.getAreProofsEnabled();
18
+ }
19
+
20
+ public create(childContainerProvider: ChildContainerProvider): void {
21
+ noop();
22
+ }
23
+
24
+ public async start() {
25
+ noop();
26
+ }
27
+ }
@@ -0,0 +1,19 @@
1
+ import type { BlockProverState } from "../prover/block/BlockProver";
2
+ import { NetworkState } from "../model/network/NetworkState";
3
+
4
+ import { TransitioningProtocolModule } from "./TransitioningProtocolModule";
5
+
6
+ // Purpose is to build transition from -> to network state
7
+ export abstract class ProvableBlockHook<
8
+ Config,
9
+ > extends TransitioningProtocolModule<Config> {
10
+ public abstract beforeBlock(
11
+ networkState: NetworkState,
12
+ state: BlockProverState
13
+ ): Promise<NetworkState>;
14
+
15
+ public abstract afterBlock(
16
+ networkState: NetworkState,
17
+ state: BlockProverState
18
+ ): Promise<NetworkState>;
19
+ }
@@ -0,0 +1,13 @@
1
+ import { NoConfig } from "@proto-kit/common";
2
+
3
+ import { BlockProverExecutionData } from "../prover/block/BlockProvable";
4
+
5
+ import { TransitioningProtocolModule } from "./TransitioningProtocolModule";
6
+
7
+ export abstract class ProvableTransactionHook<
8
+ Config = NoConfig,
9
+ > extends TransitioningProtocolModule<Config> {
10
+ public abstract onTransaction(
11
+ executionData: BlockProverExecutionData
12
+ ): Promise<void>;
13
+ }
@@ -0,0 +1,12 @@
1
+ import { ProtocolModule } from "./ProtocolModule";
2
+
3
+ /**
4
+ * TransitioningProtocolModule is a base interface that allows inheriting
5
+ * classes to use State and StateMap since it requires the implementation
6
+ * of a `name: string` property, which those classes need to function.
7
+ */
8
+ export abstract class TransitioningProtocolModule<
9
+ Config,
10
+ > extends ProtocolModule<Config> {
11
+ public name?: string;
12
+ }
@@ -0,0 +1,99 @@
1
+ import {
2
+ Bool,
3
+ DynamicProof,
4
+ Field,
5
+ Proof,
6
+ Signature,
7
+ Struct,
8
+ Void,
9
+ } from "o1js";
10
+ import { WithZkProgrammable, CompilableModule } from "@proto-kit/common";
11
+
12
+ import { StateTransitionProof } from "../statetransition/StateTransitionProvable";
13
+ import { MethodPublicOutput } from "../../model/MethodPublicOutput";
14
+ import { RuntimeTransaction } from "../../model/transaction/RuntimeTransaction";
15
+ import { NetworkState } from "../../model/network/NetworkState";
16
+
17
+ import { BlockHashMerkleTreeWitness } from "./accummulators/BlockHashMerkleTree";
18
+ import { RuntimeVerificationKeyAttestation } from "./accummulators/RuntimeVerificationKeyTree";
19
+
20
+ export class BlockProverPublicInput extends Struct({
21
+ transactionsHash: Field,
22
+ stateRoot: Field,
23
+ networkStateHash: Field,
24
+ blockHashRoot: Field,
25
+ eternalTransactionsHash: Field,
26
+ incomingMessagesHash: Field,
27
+ blockNumber: Field,
28
+ }) {}
29
+
30
+ export class BlockProverPublicOutput extends Struct({
31
+ transactionsHash: Field,
32
+ stateRoot: Field,
33
+ networkStateHash: Field,
34
+ blockHashRoot: Field,
35
+ eternalTransactionsHash: Field,
36
+ incomingMessagesHash: Field,
37
+ closed: Bool,
38
+ blockNumber: Field,
39
+ }) {
40
+ public equals(input: BlockProverPublicInput, closed: Bool): Bool {
41
+ const output2 = BlockProverPublicOutput.toFields({
42
+ ...input,
43
+ closed,
44
+ });
45
+ const output1 = BlockProverPublicOutput.toFields(this);
46
+ return output1
47
+ .map((value1, index) => value1.equals(output2[index]))
48
+ .reduce((a, b) => a.and(b));
49
+ }
50
+ }
51
+
52
+ export type BlockProverProof = Proof<
53
+ BlockProverPublicInput,
54
+ BlockProverPublicOutput
55
+ >;
56
+
57
+ export class BlockProverExecutionData extends Struct({
58
+ transaction: RuntimeTransaction,
59
+ signature: Signature,
60
+ networkState: NetworkState,
61
+ }) {}
62
+
63
+ export class DynamicRuntimeProof extends DynamicProof<
64
+ Void,
65
+ MethodPublicOutput
66
+ > {
67
+ static publicInputType = Void;
68
+
69
+ static publicOutputType = MethodPublicOutput;
70
+
71
+ // TODO this won't be 0 for proofs-as-args
72
+ static maxProofsVerified = 0 as const;
73
+ }
74
+
75
+ export interface BlockProvable
76
+ extends WithZkProgrammable<BlockProverPublicInput, BlockProverPublicOutput>,
77
+ CompilableModule {
78
+ proveTransaction: (
79
+ publicInput: BlockProverPublicInput,
80
+ stateProof: StateTransitionProof,
81
+ appProof: DynamicRuntimeProof,
82
+ executionData: BlockProverExecutionData,
83
+ verificationKeyAttestation: RuntimeVerificationKeyAttestation
84
+ ) => Promise<BlockProverPublicOutput>;
85
+
86
+ proveBlock: (
87
+ publicInput: BlockProverPublicInput,
88
+ networkState: NetworkState,
89
+ blockWitness: BlockHashMerkleTreeWitness,
90
+ // stateTransitionProof: StateTransitionProof,
91
+ transactionProof: BlockProverProof
92
+ ) => Promise<BlockProverPublicOutput>;
93
+
94
+ merge: (
95
+ publicInput: BlockProverPublicInput,
96
+ proof1: BlockProverProof,
97
+ proof2: BlockProverProof
98
+ ) => Promise<BlockProverPublicOutput>;
99
+ }