@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 @@
1
+ {"version":3,"file":"SettlementContractProtocolModule.d.ts","sourceRoot":"","sources":["../../../src/settlement/contracts/SettlementContractProtocolModule.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,2BAA2B,EAC3B,eAAe,EAEhB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EACL,cAAc,EACd,+BAA+B,EAChC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAG9E,OAAO,EACL,sBAAsB,EAGvB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAClF,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAE9E,MAAM,MAAM,wBAAwB,GAAG;IACrC,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC,CAAC;AAKF,qBACa,gCAAiC,SAAQ,cAAc,CAClE,sBAAsB,EACtB,wBAAwB,CACzB;IAGG,OAAO,CAAC,QAAQ,CAAC,KAAK;IAEtB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAE5B,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IAEvC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,2BAA2B;gBAP3B,KAAK,EAAE,sBAAsB,CAAC,OAAO,CAAC,EAAE,EAExC,WAAW,EAAE,aAAa,EAE1B,sBAAsB,EAAE,8BAA8B,EAEtD,oBAAoB,EAAE,4BAA4B,EAClD,2BAA2B,EAAE,2BAA2B;IAKpE,eAAe,IAAI,+BAA+B,CAAC,sBAAsB,CAAC;IA8BpE,OAAO,CAClB,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;CAwBvC"}
@@ -0,0 +1,82 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ import { inject, injectable, injectAll } from "tsyringe";
14
+ import { ChildVerificationKeyService, log, } from "@proto-kit/common";
15
+ import { ContractModule, } from "../ContractModule";
16
+ import { DispatchSmartContractBase } from "./DispatchSmartContract";
17
+ import { SettlementSmartContract, SettlementSmartContractBase, } from "./SettlementSmartContract";
18
+ import { BridgeContractBase } from "./BridgeContract";
19
+ import { DispatchContractProtocolModule } from "./DispatchContractProtocolModule";
20
+ import { BridgeContractProtocolModule } from "./BridgeContractProtocolModule";
21
+ // 24 hours
22
+ const DEFAULT_ESCAPE_HATCH = (60 / 3) * 24;
23
+ export let SettlementContractProtocolModule = class SettlementContractProtocolModule extends ContractModule {
24
+ constructor(hooks, blockProver, dispatchContractModule, bridgeContractModule, childVerificationKeyService) {
25
+ super();
26
+ this.hooks = hooks;
27
+ this.blockProver = blockProver;
28
+ this.dispatchContractModule = dispatchContractModule;
29
+ this.bridgeContractModule = bridgeContractModule;
30
+ this.childVerificationKeyService = childVerificationKeyService;
31
+ }
32
+ contractFactory() {
33
+ const { hooks, config } = this;
34
+ const dispatchContract = this.dispatchContractModule.contractFactory();
35
+ const bridgeContract = this.bridgeContractModule.contractFactory();
36
+ const escapeHatchSlotsInterval = config.escapeHatchSlotsInterval ?? DEFAULT_ESCAPE_HATCH;
37
+ const { args } = SettlementSmartContractBase;
38
+ SettlementSmartContractBase.args = {
39
+ DispatchContract: dispatchContract,
40
+ hooks,
41
+ escapeHatchSlotsInterval,
42
+ BridgeContract: bridgeContract,
43
+ BridgeContractVerificationKey: args?.BridgeContractVerificationKey,
44
+ BridgeContractPermissions: args?.BridgeContractPermissions,
45
+ signedSettlements: args?.signedSettlements,
46
+ ChildVerificationKeyService: this.childVerificationKeyService,
47
+ };
48
+ // Ideally we don't want to have this cyclic dependency, but we have it in the protocol,
49
+ // So its logical that we can't avoid that here
50
+ BridgeContractBase.args.SettlementContract = SettlementSmartContract;
51
+ DispatchSmartContractBase.args.settlementContractClass =
52
+ SettlementSmartContract;
53
+ return SettlementSmartContract;
54
+ }
55
+ async compile(registry) {
56
+ // Dependencies
57
+ const bridgeArtifact = await this.bridgeContractModule.compile(registry);
58
+ await this.blockProver.compile(registry);
59
+ // Init params
60
+ SettlementSmartContractBase.args.BridgeContractVerificationKey =
61
+ bridgeArtifact.BridgeContract.verificationKey;
62
+ if (SettlementSmartContractBase.args.signedSettlements === undefined) {
63
+ throw new Error("Args not fully initialized - make sure to also include the SettlementModule in the sequencer");
64
+ }
65
+ log.debug("Compiling Settlement Contract");
66
+ const artifact = await registry.compile(SettlementSmartContract);
67
+ return {
68
+ SettlementSmartContract: artifact,
69
+ };
70
+ }
71
+ };
72
+ SettlementContractProtocolModule = __decorate([
73
+ injectable(),
74
+ __param(0, injectAll("ProvableSettlementHook")),
75
+ __param(1, inject("BlockProver")),
76
+ __param(2, inject("DispatchContract")),
77
+ __param(3, inject("BridgeContract")),
78
+ __metadata("design:paramtypes", [Array, Object, DispatchContractProtocolModule,
79
+ BridgeContractProtocolModule,
80
+ ChildVerificationKeyService])
81
+ ], SettlementContractProtocolModule);
82
+ //# sourceMappingURL=SettlementContractProtocolModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettlementContractProtocolModule.js","sourceRoot":"","sources":["../../../src/settlement/contracts/SettlementContractProtocolModule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,123 @@
1
+ import { TypedClass, ChildVerificationKeyService } from "@proto-kit/common";
2
+ import { AccountUpdate, Field, PublicKey, Signature, SmartContract, State, UInt32, AccountUpdateForest, TokenContractV2, PrivateKey, VerificationKey, Permissions, DynamicProof } from "o1js";
3
+ import { NetworkState } from "../../model/network/NetworkState";
4
+ import { BlockProverPublicInput, BlockProverPublicOutput } from "../../prover/block/BlockProvable";
5
+ import { ProvableSettlementHook } from "../modularity/ProvableSettlementHook";
6
+ import { DispatchContractType } from "./DispatchSmartContract";
7
+ import { BridgeContractType } from "./BridgeContract";
8
+ export declare class DynamicBlockProof extends DynamicProof<BlockProverPublicInput, BlockProverPublicOutput> {
9
+ static publicInputType: typeof BlockProverPublicInput;
10
+ static publicOutputType: typeof BlockProverPublicOutput;
11
+ static maxProofsVerified: 2;
12
+ }
13
+ declare const TokenMapping_base: (new (value: {
14
+ tokenId: import("o1js/dist/node/lib/provable/field").Field;
15
+ publicKey: PublicKey;
16
+ }) => {
17
+ tokenId: import("o1js/dist/node/lib/provable/field").Field;
18
+ publicKey: PublicKey;
19
+ }) & {
20
+ _isStruct: true;
21
+ } & Omit<import("o1js/dist/node/lib/provable/types/provable-intf").Provable<{
22
+ tokenId: import("o1js/dist/node/lib/provable/field").Field;
23
+ publicKey: PublicKey;
24
+ }, {
25
+ tokenId: bigint;
26
+ publicKey: {
27
+ x: bigint;
28
+ isOdd: boolean;
29
+ };
30
+ }>, "fromFields"> & {
31
+ fromFields: (fields: import("o1js/dist/node/lib/provable/field").Field[]) => {
32
+ tokenId: import("o1js/dist/node/lib/provable/field").Field;
33
+ publicKey: PublicKey;
34
+ };
35
+ } & {
36
+ fromValue: (value: {
37
+ tokenId: string | number | bigint | import("o1js/dist/node/lib/provable/field").Field;
38
+ publicKey: PublicKey | {
39
+ x: bigint | import("o1js/dist/node/lib/provable/field").Field;
40
+ isOdd: boolean | import("o1js/dist/node/lib/provable/bool").Bool;
41
+ };
42
+ }) => {
43
+ tokenId: import("o1js/dist/node/lib/provable/field").Field;
44
+ publicKey: PublicKey;
45
+ };
46
+ toInput: (x: {
47
+ tokenId: import("o1js/dist/node/lib/provable/field").Field;
48
+ publicKey: PublicKey;
49
+ }) => {
50
+ fields?: import("o1js/dist/node/lib/provable/field").Field[] | undefined;
51
+ packed?: [import("o1js/dist/node/lib/provable/field").Field, number][] | undefined;
52
+ };
53
+ toJSON: (x: {
54
+ tokenId: import("o1js/dist/node/lib/provable/field").Field;
55
+ publicKey: PublicKey;
56
+ }) => {
57
+ tokenId: string;
58
+ publicKey: string;
59
+ };
60
+ fromJSON: (x: {
61
+ tokenId: string;
62
+ publicKey: string;
63
+ }) => {
64
+ tokenId: import("o1js/dist/node/lib/provable/field").Field;
65
+ publicKey: PublicKey;
66
+ };
67
+ empty: () => {
68
+ tokenId: import("o1js/dist/node/lib/provable/field").Field;
69
+ publicKey: PublicKey;
70
+ };
71
+ };
72
+ export declare class TokenMapping extends TokenMapping_base {
73
+ }
74
+ export interface SettlementContractType {
75
+ authorizationField: State<Field>;
76
+ initialize: (sequencer: PublicKey, dispatchContract: PublicKey, bridgeContract: PublicKey, contractKey: PrivateKey) => Promise<void>;
77
+ assertStateRoot: (root: Field) => AccountUpdate;
78
+ settle: (blockProof: DynamicBlockProof, signature: Signature, dispatchContractAddress: PublicKey, publicKey: PublicKey, inputNetworkState: NetworkState, outputNetworkState: NetworkState, newPromisedMessagesHash: Field) => Promise<void>;
79
+ addTokenBridge: (tokenId: Field, address: PublicKey, dispatchContract: PublicKey) => Promise<void>;
80
+ }
81
+ export declare const BATCH_SIGNATURE_PREFIX: import("o1js/dist/node/lib/provable/field").Field;
82
+ export declare abstract class SettlementSmartContractBase extends TokenContractV2 {
83
+ static args: {
84
+ DispatchContract: TypedClass<DispatchContractType & SmartContract>;
85
+ hooks: ProvableSettlementHook<unknown>[];
86
+ escapeHatchSlotsInterval: number;
87
+ BridgeContract: TypedClass<BridgeContractType> & typeof SmartContract;
88
+ BridgeContractVerificationKey: VerificationKey | undefined;
89
+ BridgeContractPermissions: Permissions | undefined;
90
+ signedSettlements: boolean | undefined;
91
+ ChildVerificationKeyService: ChildVerificationKeyService;
92
+ };
93
+ events: {
94
+ "token-bridge-deployed": typeof TokenMapping;
95
+ };
96
+ abstract sequencerKey: State<Field>;
97
+ abstract lastSettlementL1BlockHeight: State<UInt32>;
98
+ abstract stateRoot: State<Field>;
99
+ abstract networkStateHash: State<Field>;
100
+ abstract blockHashRoot: State<Field>;
101
+ abstract dispatchContractAddressX: State<Field>;
102
+ abstract authorizationField: State<Field>;
103
+ assertStateRoot(root: Field): AccountUpdate;
104
+ private assertLazyConfigsInitialized;
105
+ protected deployTokenBridge(tokenId: Field, address: PublicKey, dispatchContractAddress: PublicKey, dispatchContractPreconditionEnforced?: boolean): Promise<void>;
106
+ protected initializeBase(sequencer: PublicKey, dispatchContract: PublicKey, bridgeContract: PublicKey, contractKey: PrivateKey): Promise<void>;
107
+ protected settleBase(blockProof: DynamicBlockProof, signature: Signature, dispatchContractAddress: PublicKey, publicKey: PublicKey, inputNetworkState: NetworkState, outputNetworkState: NetworkState, newPromisedMessagesHash: Field): Promise<void>;
108
+ }
109
+ export declare class SettlementSmartContract extends SettlementSmartContractBase implements SettlementContractType {
110
+ sequencerKey: State<import("o1js/dist/node/lib/provable/field").Field>;
111
+ lastSettlementL1BlockHeight: State<UInt32>;
112
+ stateRoot: State<import("o1js/dist/node/lib/provable/field").Field>;
113
+ networkStateHash: State<import("o1js/dist/node/lib/provable/field").Field>;
114
+ blockHashRoot: State<import("o1js/dist/node/lib/provable/field").Field>;
115
+ dispatchContractAddressX: State<import("o1js/dist/node/lib/provable/field").Field>;
116
+ authorizationField: State<import("o1js/dist/node/lib/provable/field").Field>;
117
+ approveBase(forest: AccountUpdateForest): Promise<void>;
118
+ initialize(sequencer: PublicKey, dispatchContract: PublicKey, bridgeContract: PublicKey, contractKey: PrivateKey): Promise<void>;
119
+ addTokenBridge(tokenId: Field, address: PublicKey, dispatchContract: PublicKey): Promise<void>;
120
+ settle(blockProof: DynamicBlockProof, signature: Signature, dispatchContractAddress: PublicKey, publicKey: PublicKey, inputNetworkState: NetworkState, outputNetworkState: NetworkState, newPromisedMessagesHash: Field): Promise<void>;
121
+ }
122
+ export {};
123
+ //# sourceMappingURL=SettlementSmartContract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettlementSmartContract.d.ts","sourceRoot":"","sources":["../../../src/settlement/contracts/SettlementSmartContract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,309 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { prefixToField, RollupMerkleTree, mapSequential, } from "@proto-kit/common";
11
+ import { Bool, Field, method, PublicKey, Signature, State, state, UInt32, AccountUpdateForest, TokenContractV2, PrivateKey, Struct, Provable, TokenId, DynamicProof, } from "o1js";
12
+ import { NetworkState } from "../../model/network/NetworkState";
13
+ import { BlockHashMerkleTree } from "../../prover/block/accummulators/BlockHashMerkleTree";
14
+ import { BlockProverPublicInput, BlockProverPublicOutput, } from "../../prover/block/BlockProvable";
15
+ import { TokenBridgeDeploymentAuth } from "./authorizations/TokenBridgeDeploymentAuth";
16
+ import { UpdateMessagesHashAuth } from "./authorizations/UpdateMessagesHashAuth";
17
+ /* eslint-disable @typescript-eslint/lines-between-class-members */
18
+ export class DynamicBlockProof extends DynamicProof {
19
+ }
20
+ DynamicBlockProof.publicInputType = BlockProverPublicInput;
21
+ DynamicBlockProof.publicOutputType = BlockProverPublicOutput;
22
+ DynamicBlockProof.maxProofsVerified = 2;
23
+ export class TokenMapping extends Struct({
24
+ tokenId: Field,
25
+ publicKey: PublicKey,
26
+ }) {
27
+ }
28
+ // Some random prefix for the sequencer signature
29
+ export const BATCH_SIGNATURE_PREFIX = prefixToField("pk-batchSignature");
30
+ // @singleton()
31
+ // export class SettlementSmartContractStaticArgs {
32
+ // public args?: {
33
+ // DispatchContract: TypedClass<DispatchContractType & SmartContract>;
34
+ // hooks: ProvableSettlementHook<unknown>[];
35
+ // escapeHatchSlotsInterval: number;
36
+ // BridgeContract: TypedClass<BridgeContractType> & typeof SmartContract;
37
+ // // Lazily initialized
38
+ // BridgeContractVerificationKey: VerificationKey | undefined;
39
+ // BridgeContractPermissions: Permissions | undefined;
40
+ // signedSettlements: boolean | undefined;
41
+ // };
42
+ // }
43
+ export class SettlementSmartContractBase extends TokenContractV2 {
44
+ constructor() {
45
+ super(...arguments);
46
+ this.events = {
47
+ "token-bridge-deployed": TokenMapping,
48
+ };
49
+ }
50
+ // Not @state
51
+ // abstract offchainStateCommitmentsHash: State<Field>;
52
+ assertStateRoot(root) {
53
+ this.stateRoot.requireEquals(root);
54
+ return this.self;
55
+ }
56
+ // TODO Like these properties, I am too lazy to properly infer the types here
57
+ assertLazyConfigsInitialized() {
58
+ const uninitializedProperties = [];
59
+ const { args } = SettlementSmartContractBase;
60
+ if (args.BridgeContractPermissions === undefined) {
61
+ uninitializedProperties.push("BridgeContractPermissions");
62
+ }
63
+ if (args.signedSettlements === undefined) {
64
+ uninitializedProperties.push("signedSettlements");
65
+ }
66
+ if (uninitializedProperties.length > 0) {
67
+ throw new Error(`Lazy configs of SettlementSmartContract haven't been initialized ${uninitializedProperties.reduce((a, b) => `${a},${b}`)}`);
68
+ }
69
+ }
70
+ async deployTokenBridge(tokenId, address, dispatchContractAddress, dispatchContractPreconditionEnforced = false) {
71
+ Provable.asProver(() => {
72
+ this.assertLazyConfigsInitialized();
73
+ });
74
+ const { args } = SettlementSmartContractBase;
75
+ const BridgeContractClass = args.BridgeContract;
76
+ const bridgeContract = new BridgeContractClass(address, tokenId);
77
+ const { BridgeContractVerificationKey, signedSettlements, BridgeContractPermissions, } = args;
78
+ if (signedSettlements === undefined ||
79
+ BridgeContractPermissions === undefined) {
80
+ throw new Error("Static arguments for SettlementSmartContract not initialized");
81
+ }
82
+ if (BridgeContractVerificationKey !== undefined &&
83
+ !BridgeContractVerificationKey.hash.isConstant()) {
84
+ throw new Error("Bridge contract verification key has to be constants");
85
+ }
86
+ // This function is not a zkapps method, therefore it will be part of this methods execution
87
+ // The returning account update (owner.self) is therefore part of this circuit and is assertable
88
+ const deploymentAccountUpdate = await bridgeContract.deployProvable(args.BridgeContractVerificationKey, args.signedSettlements, args.BridgeContractPermissions, this.address);
89
+ this.approve(deploymentAccountUpdate);
90
+ this.self.body.mayUseToken = {
91
+ // Only set this if we deploy a custom token
92
+ parentsOwnToken: tokenId.equals(TokenId.default).not(),
93
+ inheritFromParent: Bool(false),
94
+ };
95
+ this.emitEvent("token-bridge-deployed", new TokenMapping({
96
+ tokenId: tokenId,
97
+ publicKey: address,
98
+ }));
99
+ // We can't set a precondition twice, for the $mina bridge deployment that
100
+ // would be the case, so we disable it in this case
101
+ if (!dispatchContractPreconditionEnforced) {
102
+ this.dispatchContractAddressX.requireEquals(dispatchContractAddress.x);
103
+ }
104
+ // Set authorization for the auth callback, that we need
105
+ this.authorizationField.set(new TokenBridgeDeploymentAuth({
106
+ target: dispatchContractAddress,
107
+ tokenId,
108
+ address,
109
+ }).hash());
110
+ const dispatchContract = new SettlementSmartContractBase.args.DispatchContract(dispatchContractAddress);
111
+ await dispatchContract.enableTokenDeposits(tokenId, address, this.address);
112
+ }
113
+ async initializeBase(sequencer, dispatchContract, bridgeContract, contractKey) {
114
+ this.sequencerKey.getAndRequireEquals().assertEquals(Field(0));
115
+ this.stateRoot.getAndRequireEquals().assertEquals(Field(0));
116
+ this.blockHashRoot.getAndRequireEquals().assertEquals(Field(0));
117
+ this.networkStateHash.getAndRequireEquals().assertEquals(Field(0));
118
+ this.dispatchContractAddressX.getAndRequireEquals().assertEquals(Field(0));
119
+ this.sequencerKey.set(sequencer.x);
120
+ this.stateRoot.set(Field(RollupMerkleTree.EMPTY_ROOT));
121
+ this.blockHashRoot.set(Field(BlockHashMerkleTree.EMPTY_ROOT));
122
+ this.networkStateHash.set(NetworkState.empty().hash());
123
+ this.dispatchContractAddressX.set(dispatchContract.x);
124
+ const { DispatchContract } = SettlementSmartContractBase.args;
125
+ const contractInstance = new DispatchContract(dispatchContract);
126
+ await contractInstance.initialize(this.address);
127
+ // Deploy bridge contract for $Mina
128
+ await this.deployTokenBridge(this.tokenId, bridgeContract, dispatchContract, true);
129
+ contractKey.toPublicKey().assertEquals(this.address);
130
+ }
131
+ async settleBase(blockProof, signature, dispatchContractAddress, publicKey, inputNetworkState, outputNetworkState, newPromisedMessagesHash) {
132
+ // Brought in as a constant
133
+ const blockProofVk = SettlementSmartContractBase.args.ChildVerificationKeyService.getVerificationKey("BlockProver");
134
+ if (!blockProofVk.hash.isConstant()) {
135
+ throw new Error("Sanity check - vk hash has to be constant");
136
+ }
137
+ // Verify the blockproof
138
+ blockProof.verify(blockProofVk);
139
+ // Get and assert on-chain values
140
+ const stateRoot = this.stateRoot.getAndRequireEquals();
141
+ const networkStateHash = this.networkStateHash.getAndRequireEquals();
142
+ const blockHashRoot = this.blockHashRoot.getAndRequireEquals();
143
+ const sequencerKey = this.sequencerKey.getAndRequireEquals();
144
+ const lastSettlementL1BlockHeight = this.lastSettlementL1BlockHeight.getAndRequireEquals();
145
+ const onChainDispatchContractAddressX = this.dispatchContractAddressX.getAndRequireEquals();
146
+ onChainDispatchContractAddressX.assertEquals(dispatchContractAddress.x, "DispatchContract address not provided correctly");
147
+ const { DispatchContract, escapeHatchSlotsInterval, hooks } = SettlementSmartContractBase.args;
148
+ // Get dispatch contract values
149
+ // These values are witnesses but will be checked later on the AU
150
+ // call to the dispatch contract via .updateMessagesHash()
151
+ const dispatchContract = new DispatchContract(dispatchContractAddress);
152
+ const promisedMessagesHash = dispatchContract.promisedMessagesHash.get();
153
+ // Get block height and use the lower bound for all ops
154
+ const minBlockHeightIncluded = this.network.blockchainLength.get();
155
+ this.network.blockchainLength.requireBetween(minBlockHeightIncluded,
156
+ // 5 because that is the length the newPromisedMessagesHash will be valid
157
+ minBlockHeightIncluded.add(4));
158
+ // Check signature/escape catch
159
+ publicKey.x.assertEquals(sequencerKey, "Sequencer public key witness not matching");
160
+ const signatureValid = signature.verify(publicKey, [
161
+ BATCH_SIGNATURE_PREFIX,
162
+ lastSettlementL1BlockHeight.value,
163
+ ]);
164
+ const escapeHatchActivated = lastSettlementL1BlockHeight
165
+ .add(UInt32.from(escapeHatchSlotsInterval))
166
+ .lessThan(minBlockHeightIncluded);
167
+ signatureValid
168
+ .or(escapeHatchActivated)
169
+ .assertTrue("Sequencer signature not valid and escape hatch not activated");
170
+ // Assert correctness of networkState witness
171
+ inputNetworkState
172
+ .hash()
173
+ .assertEquals(networkStateHash, "InputNetworkState witness not valid");
174
+ outputNetworkState
175
+ .hash()
176
+ .assertEquals(blockProof.publicOutput.networkStateHash, "OutputNetworkState witness not valid");
177
+ blockProof.publicOutput.closed.assertEquals(Bool(true), "Supplied proof is not a closed BlockProof");
178
+ // Execute onSettlementHooks for additional checks
179
+ const stateRecord = {
180
+ blockHashRoot,
181
+ stateRoot,
182
+ networkStateHash,
183
+ lastSettlementL1BlockHeight,
184
+ sequencerKey: publicKey,
185
+ };
186
+ const inputs = {
187
+ blockProof,
188
+ contractState: stateRecord,
189
+ newPromisedMessagesHash,
190
+ fromNetworkState: inputNetworkState,
191
+ toNetworkState: outputNetworkState,
192
+ currentL1BlockHeight: minBlockHeightIncluded,
193
+ };
194
+ await mapSequential(hooks, async (hook) => {
195
+ await hook.beforeSettlement(this, inputs);
196
+ });
197
+ // Apply blockProof
198
+ stateRoot.assertEquals(blockProof.publicInput.stateRoot, "Input state root not matching");
199
+ networkStateHash.assertEquals(blockProof.publicInput.networkStateHash, "Input networkStateHash not matching");
200
+ blockHashRoot.assertEquals(blockProof.publicInput.blockHashRoot, "Input blockHashRoot not matching");
201
+ this.stateRoot.set(blockProof.publicOutput.stateRoot);
202
+ this.networkStateHash.set(blockProof.publicOutput.networkStateHash);
203
+ this.blockHashRoot.set(blockProof.publicOutput.blockHashRoot);
204
+ // Assert and apply deposit commitments
205
+ promisedMessagesHash.assertEquals(blockProof.publicOutput.incomingMessagesHash, "Promised messages not honored");
206
+ // Set authorization for the dispatchContract to verify the messages hash update
207
+ this.authorizationField.set(new UpdateMessagesHashAuth({
208
+ target: dispatchContract.address,
209
+ executedMessagesHash: promisedMessagesHash,
210
+ newPromisedMessagesHash,
211
+ }).hash());
212
+ // Call DispatchContract
213
+ // This call checks that the promisedMessagesHash, which is already proven
214
+ // to be the blockProofs publicoutput, is actually the current on-chain
215
+ // promisedMessageHash. It also checks the newPromisedMessagesHash to be
216
+ // a current sequencestate value
217
+ await dispatchContract.updateMessagesHash(promisedMessagesHash, newPromisedMessagesHash);
218
+ this.lastSettlementL1BlockHeight.set(minBlockHeightIncluded);
219
+ }
220
+ }
221
+ export class SettlementSmartContract extends SettlementSmartContractBase {
222
+ constructor() {
223
+ super(...arguments);
224
+ this.sequencerKey = State();
225
+ this.lastSettlementL1BlockHeight = State();
226
+ this.stateRoot = State();
227
+ this.networkStateHash = State();
228
+ this.blockHashRoot = State();
229
+ this.dispatchContractAddressX = State();
230
+ this.authorizationField = State();
231
+ }
232
+ async approveBase(forest) {
233
+ this.checkZeroBalanceChange(forest);
234
+ }
235
+ async initialize(sequencer, dispatchContract, bridgeContract, contractKey) {
236
+ await this.initializeBase(sequencer, dispatchContract, bridgeContract, contractKey);
237
+ }
238
+ async addTokenBridge(tokenId, address, dispatchContract) {
239
+ await this.deployTokenBridge(tokenId, address, dispatchContract);
240
+ }
241
+ async settle(blockProof, signature, dispatchContractAddress, publicKey, inputNetworkState, outputNetworkState, newPromisedMessagesHash) {
242
+ return await this.settleBase(blockProof, signature, dispatchContractAddress, publicKey, inputNetworkState, outputNetworkState, newPromisedMessagesHash);
243
+ }
244
+ }
245
+ __decorate([
246
+ state(Field),
247
+ __metadata("design:type", Object)
248
+ ], SettlementSmartContract.prototype, "sequencerKey", void 0);
249
+ __decorate([
250
+ state(UInt32),
251
+ __metadata("design:type", Object)
252
+ ], SettlementSmartContract.prototype, "lastSettlementL1BlockHeight", void 0);
253
+ __decorate([
254
+ state(Field),
255
+ __metadata("design:type", Object)
256
+ ], SettlementSmartContract.prototype, "stateRoot", void 0);
257
+ __decorate([
258
+ state(Field),
259
+ __metadata("design:type", Object)
260
+ ], SettlementSmartContract.prototype, "networkStateHash", void 0);
261
+ __decorate([
262
+ state(Field),
263
+ __metadata("design:type", Object)
264
+ ], SettlementSmartContract.prototype, "blockHashRoot", void 0);
265
+ __decorate([
266
+ state(Field),
267
+ __metadata("design:type", Object)
268
+ ], SettlementSmartContract.prototype, "dispatchContractAddressX", void 0);
269
+ __decorate([
270
+ state(Field),
271
+ __metadata("design:type", Object)
272
+ ], SettlementSmartContract.prototype, "authorizationField", void 0);
273
+ __decorate([
274
+ method,
275
+ __metadata("design:type", Function),
276
+ __metadata("design:paramtypes", [AccountUpdateForest]),
277
+ __metadata("design:returntype", Promise)
278
+ ], SettlementSmartContract.prototype, "approveBase", null);
279
+ __decorate([
280
+ method,
281
+ __metadata("design:type", Function),
282
+ __metadata("design:paramtypes", [PublicKey,
283
+ PublicKey,
284
+ PublicKey,
285
+ PrivateKey]),
286
+ __metadata("design:returntype", Promise)
287
+ ], SettlementSmartContract.prototype, "initialize", null);
288
+ __decorate([
289
+ method,
290
+ __metadata("design:type", Function),
291
+ __metadata("design:paramtypes", [Field,
292
+ PublicKey,
293
+ PublicKey]),
294
+ __metadata("design:returntype", Promise)
295
+ ], SettlementSmartContract.prototype, "addTokenBridge", null);
296
+ __decorate([
297
+ method,
298
+ __metadata("design:type", Function),
299
+ __metadata("design:paramtypes", [DynamicBlockProof,
300
+ Signature,
301
+ PublicKey,
302
+ PublicKey,
303
+ NetworkState,
304
+ NetworkState,
305
+ Field]),
306
+ __metadata("design:returntype", Promise)
307
+ ], SettlementSmartContract.prototype, "settle", null);
308
+ /* eslint-enable @typescript-eslint/lines-between-class-members */
309
+ //# sourceMappingURL=SettlementSmartContract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettlementSmartContract.js","sourceRoot":"","sources":["../../../src/settlement/contracts/SettlementSmartContract.ts"],"names":[],"mappings":"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"}