@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,197 @@
1
+ import { RollupMerkleTreeWitness } from "@proto-kit/common";
2
+ import { Withdrawal } from "./Withdrawal";
3
+ export declare const OUTGOING_MESSAGE_BATCH_SIZE = 1;
4
+ declare const OutgoingMessageArgument_base: (new (value: {
5
+ witness: RollupMerkleTreeWitness;
6
+ value: Withdrawal;
7
+ }) => {
8
+ witness: RollupMerkleTreeWitness;
9
+ value: Withdrawal;
10
+ }) & {
11
+ _isStruct: true;
12
+ } & Omit<import("o1js/dist/node/lib/provable/types/provable-intf").Provable<{
13
+ witness: RollupMerkleTreeWitness;
14
+ value: Withdrawal;
15
+ }, {
16
+ witness: {
17
+ path: bigint[];
18
+ isLeft: boolean[];
19
+ };
20
+ value: {
21
+ tokenId: bigint;
22
+ address: {
23
+ x: bigint;
24
+ isOdd: boolean;
25
+ };
26
+ amount: bigint;
27
+ };
28
+ }>, "fromFields"> & {
29
+ fromFields: (fields: import("o1js/dist/node/lib/provable/field").Field[]) => {
30
+ witness: RollupMerkleTreeWitness;
31
+ value: Withdrawal;
32
+ };
33
+ } & {
34
+ fromValue: (value: {
35
+ witness: RollupMerkleTreeWitness | {
36
+ path: import("o1js/dist/node/lib/provable/field").Field[] | bigint[];
37
+ isLeft: import("o1js/dist/node/lib/provable/bool").Bool[] | boolean[];
38
+ };
39
+ value: Withdrawal | {
40
+ tokenId: string | number | bigint | import("o1js/dist/node/lib/provable/field").Field;
41
+ address: import("o1js/dist/node/lib/provable/crypto/signature").PublicKey | {
42
+ x: bigint | import("o1js/dist/node/lib/provable/field").Field;
43
+ isOdd: boolean | import("o1js/dist/node/lib/provable/bool").Bool;
44
+ };
45
+ amount: bigint | import("o1js/dist/node/lib/provable/int").UInt64;
46
+ };
47
+ }) => {
48
+ witness: RollupMerkleTreeWitness;
49
+ value: Withdrawal;
50
+ };
51
+ toInput: (x: {
52
+ witness: RollupMerkleTreeWitness;
53
+ value: Withdrawal;
54
+ }) => {
55
+ fields?: import("o1js/dist/node/lib/provable/field").Field[] | undefined;
56
+ packed?: [import("o1js/dist/node/lib/provable/field").Field, number][] | undefined;
57
+ };
58
+ toJSON: (x: {
59
+ witness: RollupMerkleTreeWitness;
60
+ value: Withdrawal;
61
+ }) => {
62
+ witness: {
63
+ path: string[];
64
+ isLeft: boolean[];
65
+ };
66
+ value: {
67
+ tokenId: string;
68
+ address: string;
69
+ amount: string;
70
+ };
71
+ };
72
+ fromJSON: (x: {
73
+ witness: {
74
+ path: string[];
75
+ isLeft: boolean[];
76
+ };
77
+ value: {
78
+ tokenId: string;
79
+ address: string;
80
+ amount: string;
81
+ };
82
+ }) => {
83
+ witness: RollupMerkleTreeWitness;
84
+ value: Withdrawal;
85
+ };
86
+ empty: () => {
87
+ witness: RollupMerkleTreeWitness;
88
+ value: Withdrawal;
89
+ };
90
+ };
91
+ export declare class OutgoingMessageArgument extends OutgoingMessageArgument_base {
92
+ static dummy(): OutgoingMessageArgument;
93
+ }
94
+ declare const OutgoingMessageArgumentBatch_base: (new (value: {
95
+ arguments: OutgoingMessageArgument[];
96
+ isDummys: import("o1js/dist/node/lib/provable/bool").Bool[];
97
+ }) => {
98
+ arguments: OutgoingMessageArgument[];
99
+ isDummys: import("o1js/dist/node/lib/provable/bool").Bool[];
100
+ }) & {
101
+ _isStruct: true;
102
+ } & Omit<import("o1js/dist/node/lib/provable/types/provable-intf").Provable<{
103
+ arguments: OutgoingMessageArgument[];
104
+ isDummys: import("o1js/dist/node/lib/provable/bool").Bool[];
105
+ }, {
106
+ arguments: {
107
+ witness: {
108
+ path: bigint[];
109
+ isLeft: boolean[];
110
+ };
111
+ value: {
112
+ tokenId: bigint;
113
+ address: {
114
+ x: bigint;
115
+ isOdd: boolean;
116
+ };
117
+ amount: bigint;
118
+ };
119
+ }[];
120
+ isDummys: boolean[];
121
+ }>, "fromFields"> & {
122
+ fromFields: (fields: import("o1js/dist/node/lib/provable/field").Field[]) => {
123
+ arguments: OutgoingMessageArgument[];
124
+ isDummys: import("o1js/dist/node/lib/provable/bool").Bool[];
125
+ };
126
+ } & {
127
+ fromValue: (value: {
128
+ arguments: OutgoingMessageArgument[] | {
129
+ witness: {
130
+ path: bigint[];
131
+ isLeft: boolean[];
132
+ };
133
+ value: {
134
+ tokenId: bigint;
135
+ address: {
136
+ x: bigint;
137
+ isOdd: boolean;
138
+ };
139
+ amount: bigint;
140
+ };
141
+ }[];
142
+ isDummys: import("o1js/dist/node/lib/provable/bool").Bool[] | boolean[];
143
+ }) => {
144
+ arguments: OutgoingMessageArgument[];
145
+ isDummys: import("o1js/dist/node/lib/provable/bool").Bool[];
146
+ };
147
+ toInput: (x: {
148
+ arguments: OutgoingMessageArgument[];
149
+ isDummys: import("o1js/dist/node/lib/provable/bool").Bool[];
150
+ }) => {
151
+ fields?: import("o1js/dist/node/lib/provable/field").Field[] | undefined;
152
+ packed?: [import("o1js/dist/node/lib/provable/field").Field, number][] | undefined;
153
+ };
154
+ toJSON: (x: {
155
+ arguments: OutgoingMessageArgument[];
156
+ isDummys: import("o1js/dist/node/lib/provable/bool").Bool[];
157
+ }) => {
158
+ arguments: {
159
+ witness: {
160
+ path: string[];
161
+ isLeft: boolean[];
162
+ };
163
+ value: {
164
+ tokenId: string;
165
+ address: string;
166
+ amount: string;
167
+ };
168
+ }[];
169
+ isDummys: boolean[];
170
+ };
171
+ fromJSON: (x: {
172
+ arguments: {
173
+ witness: {
174
+ path: string[];
175
+ isLeft: boolean[];
176
+ };
177
+ value: {
178
+ tokenId: string;
179
+ address: string;
180
+ amount: string;
181
+ };
182
+ }[];
183
+ isDummys: boolean[];
184
+ }) => {
185
+ arguments: OutgoingMessageArgument[];
186
+ isDummys: import("o1js/dist/node/lib/provable/bool").Bool[];
187
+ };
188
+ empty: () => {
189
+ arguments: OutgoingMessageArgument[];
190
+ isDummys: import("o1js/dist/node/lib/provable/bool").Bool[];
191
+ };
192
+ };
193
+ export declare class OutgoingMessageArgumentBatch extends OutgoingMessageArgumentBatch_base {
194
+ static fromMessages(providedArguments: OutgoingMessageArgument[]): OutgoingMessageArgumentBatch;
195
+ }
196
+ export {};
197
+ //# sourceMappingURL=OutgoingMessageArgument.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OutgoingMessageArgument.d.ts","sourceRoot":"","sources":["../../../src/settlement/messages/OutgoingMessageArgument.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,eAAO,MAAM,2BAA2B,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE7C,qBAAa,uBAAwB,SAAQ,4BAG3C;WACc,KAAK,IAAI,uBAAuB;CAM/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAED,qBAAa,4BAA6B,SAAQ,iCAOhD;WACc,YAAY,CAAC,iBAAiB,EAAE,uBAAuB,EAAE;CAcxE"}
@@ -0,0 +1,33 @@
1
+ import { Bool, Provable, Struct } from "o1js";
2
+ import { RollupMerkleTreeWitness } from "@proto-kit/common";
3
+ import { Withdrawal } from "./Withdrawal";
4
+ export const OUTGOING_MESSAGE_BATCH_SIZE = 1;
5
+ export class OutgoingMessageArgument extends Struct({
6
+ witness: RollupMerkleTreeWitness,
7
+ value: Withdrawal,
8
+ }) {
9
+ static dummy() {
10
+ return new OutgoingMessageArgument({
11
+ witness: RollupMerkleTreeWitness.dummy(),
12
+ value: Withdrawal.dummy(),
13
+ });
14
+ }
15
+ }
16
+ export class OutgoingMessageArgumentBatch extends Struct({
17
+ arguments: Provable.Array(OutgoingMessageArgument, OUTGOING_MESSAGE_BATCH_SIZE),
18
+ isDummys: Provable.Array(Bool, OUTGOING_MESSAGE_BATCH_SIZE),
19
+ }) {
20
+ static fromMessages(providedArguments) {
21
+ const batch = providedArguments.slice();
22
+ const isDummys = batch.map(() => Bool(false));
23
+ while (batch.length < OUTGOING_MESSAGE_BATCH_SIZE) {
24
+ batch.push(OutgoingMessageArgument.dummy());
25
+ isDummys.push(Bool(true));
26
+ }
27
+ return new OutgoingMessageArgumentBatch({
28
+ arguments: batch,
29
+ isDummys,
30
+ });
31
+ }
32
+ }
33
+ //# sourceMappingURL=OutgoingMessageArgument.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OutgoingMessageArgument.js","sourceRoot":"","sources":["../../../src/settlement/messages/OutgoingMessageArgument.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAE7C,MAAM,OAAO,uBAAwB,SAAQ,MAAM,CAAC;IAClD,OAAO,EAAE,uBAAuB;IAChC,KAAK,EAAE,UAAU;CAClB,CAAC;IACO,MAAM,CAAC,KAAK;QACjB,OAAO,IAAI,uBAAuB,CAAC;YACjC,OAAO,EAAE,uBAAuB,CAAC,KAAK,EAAE;YACxC,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE;SAC1B,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,OAAO,4BAA6B,SAAQ,MAAM,CAAC;IACvD,SAAS,EAAE,QAAQ,CAAC,KAAK,CACvB,uBAAuB,EACvB,2BAA2B,CAC5B;IAED,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,2BAA2B,CAAC;CAC5D,CAAC;IACO,MAAM,CAAC,YAAY,CAAC,iBAA4C;QACrE,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAE9C,OAAO,KAAK,CAAC,MAAM,GAAG,2BAA2B,EAAE;YACjD,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC,CAAC;YAC5C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;SAC3B;QAED,OAAO,IAAI,4BAA4B,CAAC;YACtC,SAAS,EAAE,KAAK;YAChB,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,78 @@
1
+ import { PublicKey, UInt64 } from "o1js";
2
+ declare const Withdrawal_base: (new (value: {
3
+ tokenId: import("o1js/dist/node/lib/provable/field").Field;
4
+ address: PublicKey;
5
+ amount: UInt64;
6
+ }) => {
7
+ tokenId: import("o1js/dist/node/lib/provable/field").Field;
8
+ address: PublicKey;
9
+ amount: UInt64;
10
+ }) & {
11
+ _isStruct: true;
12
+ } & Omit<import("o1js/dist/node/lib/provable/types/provable-intf").Provable<{
13
+ tokenId: import("o1js/dist/node/lib/provable/field").Field;
14
+ address: PublicKey;
15
+ amount: UInt64;
16
+ }, {
17
+ tokenId: bigint;
18
+ address: {
19
+ x: bigint;
20
+ isOdd: boolean;
21
+ };
22
+ amount: bigint;
23
+ }>, "fromFields"> & {
24
+ fromFields: (fields: import("o1js/dist/node/lib/provable/field").Field[]) => {
25
+ tokenId: import("o1js/dist/node/lib/provable/field").Field;
26
+ address: PublicKey;
27
+ amount: UInt64;
28
+ };
29
+ } & {
30
+ fromValue: (value: {
31
+ tokenId: string | number | bigint | import("o1js/dist/node/lib/provable/field").Field;
32
+ address: PublicKey | {
33
+ x: bigint | import("o1js/dist/node/lib/provable/field").Field;
34
+ isOdd: boolean | import("o1js/dist/node/lib/provable/bool").Bool;
35
+ };
36
+ amount: bigint | UInt64;
37
+ }) => {
38
+ tokenId: import("o1js/dist/node/lib/provable/field").Field;
39
+ address: PublicKey;
40
+ amount: UInt64;
41
+ };
42
+ toInput: (x: {
43
+ tokenId: import("o1js/dist/node/lib/provable/field").Field;
44
+ address: PublicKey;
45
+ amount: UInt64;
46
+ }) => {
47
+ fields?: import("o1js/dist/node/lib/provable/field").Field[] | undefined;
48
+ packed?: [import("o1js/dist/node/lib/provable/field").Field, number][] | undefined;
49
+ };
50
+ toJSON: (x: {
51
+ tokenId: import("o1js/dist/node/lib/provable/field").Field;
52
+ address: PublicKey;
53
+ amount: UInt64;
54
+ }) => {
55
+ tokenId: string;
56
+ address: string;
57
+ amount: string;
58
+ };
59
+ fromJSON: (x: {
60
+ tokenId: string;
61
+ address: string;
62
+ amount: string;
63
+ }) => {
64
+ tokenId: import("o1js/dist/node/lib/provable/field").Field;
65
+ address: PublicKey;
66
+ amount: UInt64;
67
+ };
68
+ empty: () => {
69
+ tokenId: import("o1js/dist/node/lib/provable/field").Field;
70
+ address: PublicKey;
71
+ amount: UInt64;
72
+ };
73
+ };
74
+ export declare class Withdrawal extends Withdrawal_base {
75
+ static dummy(): Withdrawal;
76
+ }
77
+ export {};
78
+ //# sourceMappingURL=Withdrawal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Withdrawal.d.ts","sourceRoot":"","sources":["../../../src/settlement/messages/Withdrawal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,SAAS,EAAU,MAAM,EAAE,MAAM,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGxD,qBAAa,UAAW,SAAQ,eAI9B;WACc,KAAK;CAOpB"}
@@ -0,0 +1,16 @@
1
+ import { Field, PublicKey, Struct, UInt64 } from "o1js";
2
+ import { EMPTY_PUBLICKEY } from "@proto-kit/common";
3
+ export class Withdrawal extends Struct({
4
+ tokenId: Field,
5
+ address: PublicKey,
6
+ amount: UInt64,
7
+ }) {
8
+ static dummy() {
9
+ return new Withdrawal({
10
+ tokenId: Field(0),
11
+ address: EMPTY_PUBLICKEY,
12
+ amount: UInt64.from(0),
13
+ });
14
+ }
15
+ }
16
+ //# sourceMappingURL=Withdrawal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Withdrawal.js","sourceRoot":"","sources":["../../../src/settlement/messages/Withdrawal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,OAAO,UAAW,SAAQ,MAAM,CAAC;IACrC,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,MAAM;CACf,CAAC;IACO,MAAM,CAAC,KAAK;QACjB,OAAO,IAAI,UAAU,CAAC;YACpB,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YACjB,OAAO,EAAE,eAAe;YACxB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;SACvB,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,26 @@
1
+ import { Field, PublicKey, UInt32 } from "o1js";
2
+ import { InferProofBase } from "@proto-kit/common";
3
+ import { ProtocolModule } from "../../protocol/ProtocolModule";
4
+ import { NetworkState } from "../../model/network/NetworkState";
5
+ import type { BlockProof } from "../../prover/block/BlockProver";
6
+ import type { SettlementSmartContractBase } from "../contracts/SettlementSmartContract";
7
+ export type InputBlockProof = InferProofBase<BlockProof>;
8
+ export type SettlementStateRecord = {
9
+ sequencerKey: PublicKey;
10
+ lastSettlementL1BlockHeight: UInt32;
11
+ stateRoot: Field;
12
+ networkStateHash: Field;
13
+ blockHashRoot: Field;
14
+ };
15
+ export type SettlementHookInputs = {
16
+ blockProof: InputBlockProof;
17
+ fromNetworkState: NetworkState;
18
+ toNetworkState: NetworkState;
19
+ newPromisedMessagesHash: Field;
20
+ contractState: SettlementStateRecord;
21
+ currentL1BlockHeight: UInt32;
22
+ };
23
+ export declare abstract class ProvableSettlementHook<Config> extends ProtocolModule<Config> {
24
+ abstract beforeSettlement(smartContract: SettlementSmartContractBase, inputs: SettlementHookInputs): Promise<void>;
25
+ }
26
+ //# sourceMappingURL=ProvableSettlementHook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProvableSettlementHook.d.ts","sourceRoot":"","sources":["../../../src/settlement/modularity/ProvableSettlementHook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAC;AAExF,MAAM,MAAM,eAAe,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;AAEzD,MAAM,MAAM,qBAAqB,GAAG;IAClC,YAAY,EAAE,SAAS,CAAC;IACxB,2BAA2B,EAAE,MAAM,CAAC;IAEpC,SAAS,EAAE,KAAK,CAAC;IACjB,gBAAgB,EAAE,KAAK,CAAC;IACxB,aAAa,EAAE,KAAK,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,eAAe,CAAC;IAC5B,gBAAgB,EAAE,YAAY,CAAC;IAC/B,cAAc,EAAE,YAAY,CAAC;IAC7B,uBAAuB,EAAE,KAAK,CAAC;IAC/B,aAAa,EAAE,qBAAqB,CAAC;IACrC,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,8BAAsB,sBAAsB,CAC1C,MAAM,CACN,SAAQ,cAAc,CAAC,MAAM,CAAC;aACd,gBAAgB,CAC9B,aAAa,EAAE,2BAA2B,EAC1C,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,IAAI,CAAC;CACjB"}
@@ -0,0 +1,4 @@
1
+ import { ProtocolModule } from "../../protocol/ProtocolModule";
2
+ export class ProvableSettlementHook extends ProtocolModule {
3
+ }
4
+ //# sourceMappingURL=ProvableSettlementHook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProvableSettlementHook.js","sourceRoot":"","sources":["../../../src/settlement/modularity/ProvableSettlementHook.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAyB/D,MAAM,OAAgB,sBAEpB,SAAQ,cAAsB;CAK/B"}
@@ -0,0 +1,8 @@
1
+ import { TypedClass } from "@proto-kit/common";
2
+ import { ContractModule, SmartContractClassFromInterface } from "../ContractModule";
3
+ import type { SettlementModulesRecord } from "../SettlementContractModule";
4
+ export type InferContractType<Module extends TypedClass<ContractModule<any, any>>> = Module extends TypedClass<infer ConcreteModule> ? ConcreteModule extends ContractModule<infer Contract, any> ? Contract : never : never;
5
+ export type GetContracts<SettlementModules extends SettlementModulesRecord> = {
6
+ [Key in keyof SettlementModules]: SmartContractClassFromInterface<InferContractType<SettlementModules[Key]>>;
7
+ };
8
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/settlement/modularity/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EACL,cAAc,EACd,+BAA+B,EAChC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAE3E,MAAM,MAAM,iBAAiB,CAC3B,MAAM,SAAS,UAAU,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,IAEnD,MAAM,SAAS,UAAU,CAAC,MAAM,cAAc,CAAC,GAC3C,cAAc,SAAS,cAAc,CAAC,MAAM,QAAQ,EAAE,GAAG,CAAC,GACxD,QAAQ,GACR,KAAK,GACP,KAAK,CAAC;AAEZ,MAAM,MAAM,YAAY,CAAC,iBAAiB,SAAS,uBAAuB,IAAI;KAC3E,GAAG,IAAI,MAAM,iBAAiB,GAAG,+BAA+B,CAC/D,iBAAiB,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAC1C;CACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/settlement/modularity/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import { UInt64 } from "o1js";
2
+ import { ProvableSettlementHook, SettlementHookInputs } from "../modularity/ProvableSettlementHook";
3
+ import { SettlementSmartContract } from "../contracts/SettlementSmartContract";
4
+ type NetworkStateSettlementModuleConfig = {
5
+ blocksPerL1Block: UInt64;
6
+ };
7
+ export declare class NetworkStateSettlementModule extends ProvableSettlementHook<NetworkStateSettlementModuleConfig> {
8
+ beforeSettlement(smartContract: SettlementSmartContract, { blockProof, fromNetworkState, toNetworkState, contractState, currentL1BlockHeight, }: SettlementHookInputs): Promise<void>;
9
+ }
10
+ export {};
11
+ //# sourceMappingURL=NetworkStateSettlementModule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NetworkStateSettlementModule.d.ts","sourceRoot":"","sources":["../../../src/settlement/modules/NetworkStateSettlementModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAE/E,KAAK,kCAAkC,GAAG;IACxC,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAGF,qBAAa,4BAA6B,SAAQ,sBAAsB,CAAC,kCAAkC,CAAC;IAC7F,gBAAgB,CAC3B,aAAa,EAAE,uBAAuB,EACtC,EACE,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,oBAAoB,GACrB,EAAE,oBAAoB;CAiB1B"}
@@ -0,0 +1,15 @@
1
+ import { ProvableSettlementHook, } from "../modularity/ProvableSettlementHook";
2
+ /* eslint-disable @typescript-eslint/no-unused-vars */
3
+ export class NetworkStateSettlementModule extends ProvableSettlementHook {
4
+ async beforeSettlement(smartContract, { blockProof, fromNetworkState, toNetworkState, contractState, currentL1BlockHeight, }) {
5
+ const { lastSettlementL1BlockHeight } = contractState;
6
+ const blocksPerL1Block = this.config.blocksPerL1Block.toConstant();
7
+ const numL1Blocks = currentL1BlockHeight.sub(lastSettlementL1BlockHeight);
8
+ const expectedHeightDiff = numL1Blocks.toUInt64().mul(blocksPerL1Block);
9
+ const actualHeightDiff = toNetworkState.block.height.sub(fromNetworkState.block.height);
10
+ const acceptableDerivation = numL1Blocks.mul(1).div(10);
11
+ // TODO Check within bounds efficiently
12
+ }
13
+ }
14
+ /* eslint-enable @typescript-eslint/no-unused-vars */
15
+ //# sourceMappingURL=NetworkStateSettlementModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NetworkStateSettlementModule.js","sourceRoot":"","sources":["../../../src/settlement/modules/NetworkStateSettlementModule.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,sBAAsB,GAEvB,MAAM,sCAAsC,CAAC;AAO9C,sDAAsD;AACtD,MAAM,OAAO,4BAA6B,SAAQ,sBAA0D;IACnG,KAAK,CAAC,gBAAgB,CAC3B,aAAsC,EACtC,EACE,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,oBAAoB,GACC;QAEvB,MAAM,EAAE,2BAA2B,EAAE,GAAG,aAAa,CAAC;QAEtD,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;QAEnE,MAAM,WAAW,GAAG,oBAAoB,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QAC1E,MAAM,kBAAkB,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAExE,MAAM,gBAAgB,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CACtD,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAC9B,CAAC;QAEF,MAAM,oBAAoB,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAExD,uCAAuC;IACzC,CAAC;CACF;AAED,qDAAqD"}
@@ -0,0 +1,68 @@
1
+ import { Field, type FlexibleProvablePure } from "o1js";
2
+ import { Path } from "../model/Path";
3
+ import { Option } from "../model/Option";
4
+ import { StateServiceProvider } from "./StateServiceProvider";
5
+ export declare class WithPath {
6
+ path?: Field;
7
+ hasPathOrFail(): asserts this is {
8
+ path: Path;
9
+ };
10
+ }
11
+ export declare class WithStateServiceProvider {
12
+ stateServiceProvider?: StateServiceProvider;
13
+ hasStateServiceOrFail(): asserts this is {
14
+ stateServiceProvider: StateServiceProvider;
15
+ };
16
+ }
17
+ declare const State_base: import("ts-mixer/dist/types/types").Class<any[], WithPath & WithStateServiceProvider, typeof WithPath & typeof WithStateServiceProvider>;
18
+ /**
19
+ * Utilities for runtime module state, such as get/set
20
+ */
21
+ export declare class State<Value> extends State_base {
22
+ valueType: FlexibleProvablePure<Value>;
23
+ /**
24
+ * Creates a new state wrapper for the provided value type.
25
+ *
26
+ * @param valueType - Type of value to be stored (e.g. UInt64, Struct, ...)
27
+ * @returns New state for the given value type.
28
+ */
29
+ static from<Value>(valueType: FlexibleProvablePure<Value>): State<Value>;
30
+ constructor(valueType: FlexibleProvablePure<Value>);
31
+ private stateType;
32
+ /**
33
+ * Returns the state that is currently the current state tree
34
+ * value: The value-fields, or if not state was found, dummy values
35
+ * isSome: Whether the values where found in the state or not
36
+ * (Basically, whether the value-fields are dummy values or actual values
37
+ * @private
38
+ */
39
+ private getState;
40
+ /**
41
+ * Provides an in-circuit witness for the current state representation,
42
+ * and constructs an Option out of it.
43
+ *
44
+ * @returns Optional value of the current state
45
+ */
46
+ private witnessFromState;
47
+ /**
48
+ * Retrieves the current state and creates a state transition
49
+ * anchoring the use of the current state value in the circuit.
50
+ *
51
+ * @returns Option representation of the current state.
52
+ */
53
+ get(): Promise<Option<Value>>;
54
+ /**
55
+ * Sets a new state value by creating a state transition from
56
+ * the current value to the newly set value.
57
+ *
58
+ * The newly set value isn't available via state.get(), since the
59
+ * state transitions are not applied within the same circuit.
60
+ * You can however store and access your new value in
61
+ * a separate circuit variable.
62
+ *
63
+ * @param value - Value to be set as the current state
64
+ */
65
+ set(value: Value): Promise<void>;
66
+ }
67
+ export {};
68
+ //# sourceMappingURL=State.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"State.d.ts","sourceRoot":"","sources":["../../src/state/State.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,KAAK,EAAY,KAAK,oBAAoB,EAAU,MAAM,MAAM,CAAC;AAIhF,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D,qBAAa,QAAQ;IACZ,IAAI,CAAC,EAAE,KAAK,CAAC;IAEb,aAAa,IAAI,OAAO,CAAC,IAAI,IAAI;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE;CAOvD;AAED,qBAAa,wBAAwB;IAC5B,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAE5C,qBAAqB,IAAI,OAAO,CAAC,IAAI,IAAI;QAC9C,oBAAoB,EAAE,oBAAoB,CAAC;KAC5C;CAOF;;AAED;;GAEG;AACH,qBAAa,KAAK,CAAC,KAAK,CAAE,SAAQ,UAAyC;IAW/C,SAAS,EAAE,oBAAoB,CAAC,KAAK,CAAC;IAVhE;;;;;OAKG;WACW,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,oBAAoB,CAAC,KAAK,CAAC;gBAItC,SAAS,EAAE,oBAAoB,CAAC,KAAK,CAAC;IAIhE,OAAO,CAAC,SAAS,CAGX;IAEN;;;;;;OAMG;YACW,QAAQ;IAyCtB;;;;;OAKG;YACW,gBAAgB;IAW9B;;;;;OAKG;IACU,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAc1C;;;;;;;;;;OAUG;IACU,GAAG,CAAC,KAAK,EAAE,KAAK;CAiB9B"}
@@ -0,0 +1,130 @@
1
+ import { Mixin } from "ts-mixer";
2
+ import { Bool, Provable, Struct } from "o1js";
3
+ import { container } from "tsyringe";
4
+ import { dummyValue } from "@proto-kit/common";
5
+ import { Option } from "../model/Option";
6
+ import { StateTransition } from "../model/StateTransition";
7
+ import { RuntimeMethodExecutionContext } from "./context/RuntimeMethodExecutionContext";
8
+ export class WithPath {
9
+ hasPathOrFail() {
10
+ if (!this.path) {
11
+ throw new Error("Could not find 'path', did you forget to add '@state' to your state property?");
12
+ }
13
+ }
14
+ }
15
+ export class WithStateServiceProvider {
16
+ hasStateServiceOrFail() {
17
+ if (!this.stateServiceProvider) {
18
+ throw new Error("Could not find 'stateServiceProvider', did you forget to add '@state' to your state property?");
19
+ }
20
+ }
21
+ }
22
+ /**
23
+ * Utilities for runtime module state, such as get/set
24
+ */
25
+ export class State extends Mixin(WithPath, WithStateServiceProvider) {
26
+ /**
27
+ * Creates a new state wrapper for the provided value type.
28
+ *
29
+ * @param valueType - Type of value to be stored (e.g. UInt64, Struct, ...)
30
+ * @returns New state for the given value type.
31
+ */
32
+ static from(valueType) {
33
+ return new State(valueType);
34
+ }
35
+ constructor(valueType) {
36
+ super();
37
+ this.valueType = valueType;
38
+ this.stateType = class StateType extends Struct({
39
+ value: this.valueType,
40
+ isSome: Bool,
41
+ }) {
42
+ };
43
+ }
44
+ /**
45
+ * Returns the state that is currently the current state tree
46
+ * value: The value-fields, or if not state was found, dummy values
47
+ * isSome: Whether the values where found in the state or not
48
+ * (Basically, whether the value-fields are dummy values or actual values
49
+ * @private
50
+ */
51
+ async getState() {
52
+ this.hasStateServiceOrFail();
53
+ this.hasPathOrFail();
54
+ const { path, stateServiceProvider, valueType } = this;
55
+ const { stateTransitions } = container
56
+ .resolve(RuntimeMethodExecutionContext)
57
+ .current().result;
58
+ // TODO Use Stateservice for this
59
+ // First try to find a match inside already created stateTransitions
60
+ let previousMutatingTransitions = [];
61
+ previousMutatingTransitions = stateTransitions.filter((transition) => transition.path.equals(path).and(transition.to.isSome).toBoolean());
62
+ const pmtLength = previousMutatingTransitions.length;
63
+ let value = pmtLength > 0
64
+ ? // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
65
+ previousMutatingTransitions[pmtLength - 1].to.value
66
+ : undefined;
67
+ if (value !== undefined) {
68
+ return { value, isSome: Bool(true) };
69
+ }
70
+ // If the value is still undefined, look it up in the stateService
71
+ const fields = await stateServiceProvider.stateService.get(path);
72
+ if (fields) {
73
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
74
+ value = valueType.fromFields(fields);
75
+ }
76
+ if (value !== undefined) {
77
+ return { value, isSome: Bool(true) };
78
+ }
79
+ return { value: dummyValue(valueType), isSome: Bool(false) };
80
+ }
81
+ /**
82
+ * Provides an in-circuit witness for the current state representation,
83
+ * and constructs an Option out of it.
84
+ *
85
+ * @returns Optional value of the current state
86
+ */
87
+ async witnessFromState() {
88
+ // get the value from storage, or return a dummy value instead
89
+ // also check if the value exists in the storage or not
90
+ const { value, isSome } = await Provable.witnessAsync(this.stateType, async () => await this.getState());
91
+ return Option.from(isSome, value, this.valueType);
92
+ }
93
+ /**
94
+ * Retrieves the current state and creates a state transition
95
+ * anchoring the use of the current state value in the circuit.
96
+ *
97
+ * @returns Option representation of the current state.
98
+ */
99
+ async get() {
100
+ const option = await this.witnessFromState();
101
+ this.hasPathOrFail();
102
+ const stateTransition = StateTransition.from(this.path, option);
103
+ container
104
+ .resolve(RuntimeMethodExecutionContext)
105
+ .addStateTransition(stateTransition);
106
+ return option;
107
+ }
108
+ /**
109
+ * Sets a new state value by creating a state transition from
110
+ * the current value to the newly set value.
111
+ *
112
+ * The newly set value isn't available via state.get(), since the
113
+ * state transitions are not applied within the same circuit.
114
+ * You can however store and access your new value in
115
+ * a separate circuit variable.
116
+ *
117
+ * @param value - Value to be set as the current state
118
+ */
119
+ async set(value) {
120
+ // link the transition to the current state
121
+ const fromOption = await this.witnessFromState();
122
+ const toOption = Option.fromValue(value, this.valueType);
123
+ this.hasPathOrFail();
124
+ const stateTransition = StateTransition.fromTo(this.path, fromOption, toOption);
125
+ container
126
+ .resolve(RuntimeMethodExecutionContext)
127
+ .addStateTransition(stateTransition);
128
+ }
129
+ }
130
+ //# sourceMappingURL=State.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"State.js","sourceRoot":"","sources":["../../src/state/State.ts"],"names":[],"mappings":"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"}