@proto-kit/protocol 0.1.1-develop.191 → 0.1.1-develop.2024

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 (466) hide show
  1. package/dist/Constants.js +1 -0
  2. package/dist/Constants.js.map +1 -0
  3. package/dist/hashing/mina-prefixes.d.ts +10 -0
  4. package/dist/hashing/mina-prefixes.d.ts.map +1 -0
  5. package/dist/hashing/mina-prefixes.js +10 -0
  6. package/dist/hashing/mina-prefixes.js.map +1 -0
  7. package/dist/hashing/protokit-prefixes.d.ts +10 -0
  8. package/dist/hashing/protokit-prefixes.d.ts.map +1 -0
  9. package/dist/hashing/protokit-prefixes.js +24 -0
  10. package/dist/hashing/protokit-prefixes.js.map +1 -0
  11. package/dist/hooks/AccountStateHook.d.ts +56 -0
  12. package/dist/hooks/AccountStateHook.d.ts.map +1 -0
  13. package/dist/hooks/AccountStateHook.js +62 -0
  14. package/dist/hooks/AccountStateHook.js.map +1 -0
  15. package/dist/hooks/BlockHeightHook.d.ts +7 -0
  16. package/dist/hooks/BlockHeightHook.d.ts.map +1 -0
  17. package/dist/hooks/BlockHeightHook.js +16 -0
  18. package/dist/hooks/BlockHeightHook.js.map +1 -0
  19. package/dist/hooks/LastStateRootBlockHook.d.ts +7 -0
  20. package/dist/hooks/LastStateRootBlockHook.d.ts.map +1 -0
  21. package/dist/hooks/LastStateRootBlockHook.js +16 -0
  22. package/dist/hooks/LastStateRootBlockHook.js.map +1 -0
  23. package/dist/hooks/NoopBlockHook.d.ts +8 -0
  24. package/dist/hooks/NoopBlockHook.d.ts.map +1 -0
  25. package/dist/hooks/NoopBlockHook.js +10 -0
  26. package/dist/hooks/NoopBlockHook.js.map +1 -0
  27. package/dist/hooks/NoopSettlementHook.d.ts +6 -0
  28. package/dist/hooks/NoopSettlementHook.d.ts.map +1 -0
  29. package/dist/{prover/statetransition/StateTransitionWitnessProvider.js → hooks/NoopSettlementHook.js} +8 -7
  30. package/dist/hooks/NoopSettlementHook.js.map +1 -0
  31. package/dist/hooks/NoopTransactionHook.d.ts +6 -0
  32. package/dist/hooks/NoopTransactionHook.d.ts.map +1 -0
  33. package/dist/hooks/NoopTransactionHook.js +11 -0
  34. package/dist/hooks/NoopTransactionHook.js.map +1 -0
  35. package/dist/index.d.ts +59 -9
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +60 -9
  38. package/dist/index.js.map +1 -0
  39. package/dist/model/AppliedStateTransitionBatch.d.ts +114 -0
  40. package/dist/model/AppliedStateTransitionBatch.d.ts.map +1 -0
  41. package/dist/model/AppliedStateTransitionBatch.js +16 -0
  42. package/dist/model/AppliedStateTransitionBatch.js.map +1 -0
  43. package/dist/model/MethodPublicOutput.d.ts +83 -28
  44. package/dist/model/MethodPublicOutput.d.ts.map +1 -1
  45. package/dist/model/MethodPublicOutput.js +4 -1
  46. package/dist/model/MethodPublicOutput.js.map +1 -0
  47. package/dist/model/Option.d.ts +70 -46
  48. package/dist/model/Option.d.ts.map +1 -1
  49. package/dist/model/Option.js +62 -57
  50. package/dist/model/Option.js.map +1 -0
  51. package/dist/model/Path.d.ts +4 -3
  52. package/dist/model/Path.d.ts.map +1 -1
  53. package/dist/model/Path.js +6 -5
  54. package/dist/model/Path.js.map +1 -0
  55. package/dist/model/RuntimeLike.d.ts +11 -0
  56. package/dist/model/RuntimeLike.d.ts.map +1 -0
  57. package/dist/model/RuntimeLike.js +2 -0
  58. package/dist/model/RuntimeLike.js.map +1 -0
  59. package/dist/model/StateTransition.d.ts +58 -18
  60. package/dist/model/StateTransition.d.ts.map +1 -1
  61. package/dist/model/StateTransition.js +13 -4
  62. package/dist/model/StateTransition.js.map +1 -0
  63. package/dist/model/StateTransitionProvableBatch.d.ts +389 -16
  64. package/dist/model/StateTransitionProvableBatch.d.ts.map +1 -1
  65. package/dist/model/StateTransitionProvableBatch.js +87 -10
  66. package/dist/model/StateTransitionProvableBatch.js.map +1 -0
  67. package/dist/model/network/NetworkState.d.ts +105 -9
  68. package/dist/model/network/NetworkState.d.ts.map +1 -1
  69. package/dist/model/network/NetworkState.js +22 -2
  70. package/dist/model/network/NetworkState.js.map +1 -0
  71. package/dist/model/transaction/AuthorizedTransaction.d.ts +122 -0
  72. package/dist/model/transaction/AuthorizedTransaction.d.ts.map +1 -0
  73. package/dist/model/transaction/AuthorizedTransaction.js +39 -0
  74. package/dist/model/transaction/AuthorizedTransaction.js.map +1 -0
  75. package/dist/model/transaction/RuntimeTransaction.d.ts +94 -34
  76. package/dist/model/transaction/RuntimeTransaction.d.ts.map +1 -1
  77. package/dist/model/transaction/RuntimeTransaction.js +72 -11
  78. package/dist/model/transaction/RuntimeTransaction.js.map +1 -0
  79. package/dist/model/transaction/SignedTransaction.d.ts +110 -0
  80. package/dist/model/transaction/SignedTransaction.d.ts.map +1 -0
  81. package/dist/model/transaction/SignedTransaction.js +34 -0
  82. package/dist/model/transaction/SignedTransaction.js.map +1 -0
  83. package/dist/model/transaction/ValueOption.d.ts +187 -0
  84. package/dist/model/transaction/ValueOption.d.ts.map +1 -0
  85. package/dist/model/transaction/ValueOption.js +25 -0
  86. package/dist/model/transaction/ValueOption.js.map +1 -0
  87. package/dist/protocol/Protocol.d.ts +47 -21
  88. package/dist/protocol/Protocol.d.ts.map +1 -1
  89. package/dist/protocol/Protocol.js +127 -26
  90. package/dist/protocol/Protocol.js.map +1 -0
  91. package/dist/protocol/ProtocolEnvironment.d.ts +9 -0
  92. package/dist/protocol/ProtocolEnvironment.d.ts.map +1 -0
  93. package/dist/protocol/ProtocolEnvironment.js +2 -0
  94. package/dist/protocol/ProtocolEnvironment.js.map +1 -0
  95. package/dist/protocol/ProtocolModule.d.ts +7 -7
  96. package/dist/protocol/ProtocolModule.d.ts.map +1 -1
  97. package/dist/protocol/ProtocolModule.js +10 -7
  98. package/dist/protocol/ProtocolModule.js.map +1 -0
  99. package/dist/protocol/ProvableBlockHook.d.ts +29 -0
  100. package/dist/protocol/ProvableBlockHook.d.ts.map +1 -0
  101. package/dist/protocol/ProvableBlockHook.js +20 -0
  102. package/dist/protocol/ProvableBlockHook.js.map +1 -0
  103. package/dist/protocol/ProvableTransactionHook.d.ts +35 -0
  104. package/dist/protocol/ProvableTransactionHook.d.ts.map +1 -0
  105. package/dist/protocol/ProvableTransactionHook.js +28 -0
  106. package/dist/protocol/ProvableTransactionHook.js.map +1 -0
  107. package/dist/protocol/TransitioningProtocolModule.d.ts +10 -0
  108. package/dist/protocol/TransitioningProtocolModule.d.ts.map +1 -0
  109. package/dist/protocol/TransitioningProtocolModule.js +9 -0
  110. package/dist/protocol/TransitioningProtocolModule.js.map +1 -0
  111. package/dist/prover/accumulators/AppliedBatchHashList.d.ts +18 -0
  112. package/dist/prover/accumulators/AppliedBatchHashList.d.ts.map +1 -0
  113. package/dist/prover/accumulators/AppliedBatchHashList.js +25 -0
  114. package/dist/prover/accumulators/AppliedBatchHashList.js.map +1 -0
  115. package/dist/prover/accumulators/BlockHashList.d.ts +263 -0
  116. package/dist/prover/accumulators/BlockHashList.d.ts.map +1 -0
  117. package/dist/prover/accumulators/BlockHashList.js +97 -0
  118. package/dist/prover/accumulators/BlockHashList.js.map +1 -0
  119. package/dist/prover/accumulators/StateTransitionReductionList.d.ts +12 -0
  120. package/dist/prover/accumulators/StateTransitionReductionList.d.ts.map +1 -0
  121. package/dist/prover/accumulators/StateTransitionReductionList.js +64 -0
  122. package/dist/prover/accumulators/StateTransitionReductionList.js.map +1 -0
  123. package/dist/prover/accumulators/TransactionHashList.d.ts +6 -0
  124. package/dist/prover/accumulators/TransactionHashList.d.ts.map +1 -0
  125. package/dist/prover/accumulators/TransactionHashList.js +8 -0
  126. package/dist/prover/accumulators/TransactionHashList.js.map +1 -0
  127. package/dist/prover/accumulators/WitnessedRootHashList.d.ts +123 -0
  128. package/dist/prover/accumulators/WitnessedRootHashList.d.ts.map +1 -0
  129. package/dist/prover/accumulators/WitnessedRootHashList.js +51 -0
  130. package/dist/prover/accumulators/WitnessedRootHashList.js.map +1 -0
  131. package/dist/prover/block/BlockProvable.d.ts +565 -96
  132. package/dist/prover/block/BlockProvable.d.ts.map +1 -1
  133. package/dist/prover/block/BlockProvable.js +196 -12
  134. package/dist/prover/block/BlockProvable.js.map +1 -0
  135. package/dist/prover/block/BlockProver.d.ts +52 -37
  136. package/dist/prover/block/BlockProver.d.ts.map +1 -1
  137. package/dist/prover/block/BlockProver.js +327 -107
  138. package/dist/prover/block/BlockProver.js.map +1 -0
  139. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts +106 -0
  140. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts.map +1 -0
  141. package/dist/prover/block/accummulators/BlockHashMerkleTree.js +25 -0
  142. package/dist/prover/block/accummulators/BlockHashMerkleTree.js.map +1 -0
  143. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.d.ts +139 -0
  144. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.d.ts.map +1 -0
  145. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js +21 -0
  146. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js.map +1 -0
  147. package/dist/prover/block/services/RuntimeVerificationKeyRootService.d.ts +7 -0
  148. package/dist/prover/block/services/RuntimeVerificationKeyRootService.d.ts.map +1 -0
  149. package/dist/prover/{statetransition/StateTransitionWitnessProviderReference.js → block/services/RuntimeVerificationKeyRootService.js} +11 -8
  150. package/dist/prover/block/services/RuntimeVerificationKeyRootService.js.map +1 -0
  151. package/dist/prover/statetransition/StateTransitionProvable.d.ts +137 -48
  152. package/dist/prover/statetransition/StateTransitionProvable.d.ts.map +1 -1
  153. package/dist/prover/statetransition/StateTransitionProvable.js +10 -5
  154. package/dist/prover/statetransition/StateTransitionProvable.js.map +1 -0
  155. package/dist/prover/statetransition/StateTransitionProver.d.ts +29 -17
  156. package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -1
  157. package/dist/prover/statetransition/StateTransitionProver.js +171 -73
  158. package/dist/prover/statetransition/StateTransitionProver.js.map +1 -0
  159. package/dist/prover/transaction/TransactionProvable.d.ts +626 -0
  160. package/dist/prover/transaction/TransactionProvable.d.ts.map +1 -0
  161. package/dist/prover/transaction/TransactionProvable.js +87 -0
  162. package/dist/prover/transaction/TransactionProvable.js.map +1 -0
  163. package/dist/prover/transaction/TransactionProver.d.ts +68 -0
  164. package/dist/prover/transaction/TransactionProver.d.ts.map +1 -0
  165. package/dist/prover/transaction/TransactionProver.js +301 -0
  166. package/dist/prover/transaction/TransactionProver.js.map +1 -0
  167. package/dist/prover/utils.d.ts +19 -0
  168. package/dist/prover/utils.d.ts.map +1 -0
  169. package/dist/prover/utils.js +67 -0
  170. package/dist/prover/utils.js.map +1 -0
  171. package/dist/settlement/ContractArgsRegistry.d.ts +13 -0
  172. package/dist/settlement/ContractArgsRegistry.d.ts.map +1 -0
  173. package/dist/settlement/ContractArgsRegistry.js +53 -0
  174. package/dist/settlement/ContractArgsRegistry.js.map +1 -0
  175. package/dist/settlement/ContractModule.d.ts +16 -0
  176. package/dist/settlement/ContractModule.d.ts.map +1 -0
  177. package/dist/settlement/ContractModule.js +12 -0
  178. package/dist/settlement/ContractModule.js.map +1 -0
  179. package/dist/settlement/SettlementContractModule.d.ts +47 -0
  180. package/dist/settlement/SettlementContractModule.d.ts.map +1 -0
  181. package/dist/settlement/SettlementContractModule.js +81 -0
  182. package/dist/settlement/SettlementContractModule.js.map +1 -0
  183. package/dist/settlement/contracts/BridgeContract.d.ts +119 -0
  184. package/dist/settlement/contracts/BridgeContract.d.ts.map +1 -0
  185. package/dist/settlement/contracts/BridgeContract.js +269 -0
  186. package/dist/settlement/contracts/BridgeContract.js.map +1 -0
  187. package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts +18 -0
  188. package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts.map +1 -0
  189. package/dist/settlement/contracts/BridgeContractProtocolModule.js +42 -0
  190. package/dist/settlement/contracts/BridgeContractProtocolModule.js.map +1 -0
  191. package/dist/settlement/contracts/BridgingSettlementContractModule.d.ts +21 -0
  192. package/dist/settlement/contracts/BridgingSettlementContractModule.d.ts.map +1 -0
  193. package/dist/settlement/contracts/BridgingSettlementContractModule.js +81 -0
  194. package/dist/settlement/contracts/BridgingSettlementContractModule.js.map +1 -0
  195. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts +23 -0
  196. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts.map +1 -0
  197. package/dist/settlement/contracts/DispatchContractProtocolModule.js +55 -0
  198. package/dist/settlement/contracts/DispatchContractProtocolModule.js.map +1 -0
  199. package/dist/settlement/contracts/DispatchSmartContract.d.ts +50 -0
  200. package/dist/settlement/contracts/DispatchSmartContract.d.ts.map +1 -0
  201. package/dist/settlement/contracts/DispatchSmartContract.js +234 -0
  202. package/dist/settlement/contracts/DispatchSmartContract.js.map +1 -0
  203. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts +21 -0
  204. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts.map +1 -0
  205. package/dist/settlement/contracts/SettlementContractProtocolModule.js +84 -0
  206. package/dist/settlement/contracts/SettlementContractProtocolModule.js.map +1 -0
  207. package/dist/settlement/contracts/SettlementSmartContract.d.ts +123 -0
  208. package/dist/settlement/contracts/SettlementSmartContract.d.ts.map +1 -0
  209. package/dist/settlement/contracts/SettlementSmartContract.js +310 -0
  210. package/dist/settlement/contracts/SettlementSmartContract.js.map +1 -0
  211. package/dist/settlement/contracts/SettlementSmartContractModule.d.ts +20 -0
  212. package/dist/settlement/contracts/SettlementSmartContractModule.d.ts.map +1 -0
  213. package/dist/settlement/contracts/SettlementSmartContractModule.js +56 -0
  214. package/dist/settlement/contracts/SettlementSmartContractModule.js.map +1 -0
  215. package/dist/settlement/contracts/TokenBridgeTree.d.ts +228 -0
  216. package/dist/settlement/contracts/TokenBridgeTree.d.ts.map +1 -0
  217. package/dist/settlement/contracts/TokenBridgeTree.js +60 -0
  218. package/dist/settlement/contracts/TokenBridgeTree.js.map +1 -0
  219. package/dist/settlement/contracts/authorizations/ContractAuthorization.d.ts +10 -0
  220. package/dist/settlement/contracts/authorizations/ContractAuthorization.d.ts.map +1 -0
  221. package/dist/settlement/contracts/authorizations/ContractAuthorization.js +2 -0
  222. package/dist/settlement/contracts/authorizations/ContractAuthorization.js.map +1 -0
  223. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.d.ts +85 -0
  224. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.d.ts.map +1 -0
  225. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.js +11 -0
  226. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.js.map +1 -0
  227. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.d.ts +79 -0
  228. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.d.ts.map +1 -0
  229. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.js +11 -0
  230. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.js.map +1 -0
  231. package/dist/settlement/contracts/settlement/BridgingSettlementContract.d.ts +107 -0
  232. package/dist/settlement/contracts/settlement/BridgingSettlementContract.d.ts.map +1 -0
  233. package/dist/settlement/contracts/settlement/BridgingSettlementContract.js +188 -0
  234. package/dist/settlement/contracts/settlement/BridgingSettlementContract.js.map +1 -0
  235. package/dist/settlement/contracts/settlement/SettlementBase.d.ts +41 -0
  236. package/dist/settlement/contracts/settlement/SettlementBase.d.ts.map +1 -0
  237. package/dist/settlement/contracts/settlement/SettlementBase.js +105 -0
  238. package/dist/settlement/contracts/settlement/SettlementBase.js.map +1 -0
  239. package/dist/settlement/contracts/settlement/SettlementContract.d.ts +15 -0
  240. package/dist/settlement/contracts/settlement/SettlementContract.d.ts.map +1 -0
  241. package/dist/settlement/contracts/settlement/SettlementContract.js +72 -0
  242. package/dist/settlement/contracts/settlement/SettlementContract.js.map +1 -0
  243. package/dist/settlement/messages/Deposit.d.ts +77 -0
  244. package/dist/settlement/messages/Deposit.d.ts.map +1 -0
  245. package/dist/settlement/messages/Deposit.js +8 -0
  246. package/dist/settlement/messages/Deposit.js.map +1 -0
  247. package/dist/settlement/messages/OutgoingMessage.d.ts +67 -0
  248. package/dist/settlement/messages/OutgoingMessage.d.ts.map +1 -0
  249. package/dist/settlement/messages/OutgoingMessage.js +7 -0
  250. package/dist/settlement/messages/OutgoingMessage.js.map +1 -0
  251. package/dist/settlement/messages/OutgoingMessageArgument.d.ts +494 -0
  252. package/dist/settlement/messages/OutgoingMessageArgument.d.ts.map +1 -0
  253. package/dist/settlement/messages/OutgoingMessageArgument.js +40 -0
  254. package/dist/settlement/messages/OutgoingMessageArgument.js.map +1 -0
  255. package/dist/settlement/messages/Withdrawal.d.ts +2 -0
  256. package/dist/settlement/messages/Withdrawal.d.ts.map +1 -0
  257. package/dist/settlement/messages/Withdrawal.js +3 -0
  258. package/dist/settlement/messages/Withdrawal.js.map +1 -0
  259. package/dist/settlement/modularity/OutgoingMessageProcessor.d.ts +25 -0
  260. package/dist/settlement/modularity/OutgoingMessageProcessor.d.ts.map +1 -0
  261. package/dist/settlement/modularity/OutgoingMessageProcessor.js +30 -0
  262. package/dist/settlement/modularity/OutgoingMessageProcessor.js.map +1 -0
  263. package/dist/settlement/modularity/ProvableSettlementHook.d.ts +26 -0
  264. package/dist/settlement/modularity/ProvableSettlementHook.d.ts.map +1 -0
  265. package/dist/settlement/modularity/ProvableSettlementHook.js +4 -0
  266. package/dist/settlement/modularity/ProvableSettlementHook.js.map +1 -0
  267. package/dist/settlement/modularity/types.d.ts +9 -0
  268. package/dist/settlement/modularity/types.d.ts.map +1 -0
  269. package/dist/settlement/modularity/types.js +2 -0
  270. package/dist/settlement/modularity/types.js.map +1 -0
  271. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts +11 -0
  272. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts.map +1 -0
  273. package/dist/settlement/modules/NetworkStateSettlementModule.js +15 -0
  274. package/dist/settlement/modules/NetworkStateSettlementModule.js.map +1 -0
  275. package/dist/state/SimpleAsyncStateService.d.ts +6 -0
  276. package/dist/state/SimpleAsyncStateService.d.ts.map +1 -0
  277. package/dist/state/SimpleAsyncStateService.js +2 -0
  278. package/dist/state/SimpleAsyncStateService.js.map +1 -0
  279. package/dist/state/State.d.ts +68 -0
  280. package/dist/state/State.d.ts.map +1 -0
  281. package/dist/state/State.js +141 -0
  282. package/dist/state/State.js.map +1 -0
  283. package/dist/state/StateMap.d.ts +37 -0
  284. package/dist/state/StateMap.d.ts.map +1 -0
  285. package/dist/state/StateMap.js +56 -0
  286. package/dist/state/StateMap.js.map +1 -0
  287. package/dist/state/StateService.d.ts +6 -0
  288. package/dist/state/StateService.d.ts.map +1 -0
  289. package/dist/state/StateService.js +2 -0
  290. package/dist/state/StateService.js.map +1 -0
  291. package/dist/state/StateServiceProvider.d.ts +8 -0
  292. package/dist/state/StateServiceProvider.d.ts.map +1 -0
  293. package/dist/state/StateServiceProvider.js +37 -0
  294. package/dist/state/StateServiceProvider.js.map +1 -0
  295. package/dist/state/WitnessBlockContext.d.ts +5 -0
  296. package/dist/state/WitnessBlockContext.d.ts.map +1 -0
  297. package/dist/state/WitnessBlockContext.js +42 -0
  298. package/dist/state/WitnessBlockContext.js.map +1 -0
  299. package/dist/state/assert/assert.d.ts +12 -0
  300. package/dist/state/assert/assert.d.ts.map +1 -0
  301. package/dist/state/assert/assert.js +33 -0
  302. package/dist/state/assert/assert.js.map +1 -0
  303. package/dist/state/context/RuntimeMethodExecutionContext.d.ts +193 -0
  304. package/dist/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -0
  305. package/dist/state/context/RuntimeMethodExecutionContext.js +138 -0
  306. package/dist/state/context/RuntimeMethodExecutionContext.js.map +1 -0
  307. package/dist/state/context/TransitionMethodExecutionContext.d.ts +23 -0
  308. package/dist/state/context/TransitionMethodExecutionContext.d.ts.map +1 -0
  309. package/dist/state/context/TransitionMethodExecutionContext.js +6 -0
  310. package/dist/state/context/TransitionMethodExecutionContext.js.map +1 -0
  311. package/dist/state/protocol/ProtocolState.d.ts +13 -0
  312. package/dist/state/protocol/ProtocolState.d.ts.map +1 -0
  313. package/dist/state/protocol/ProtocolState.js +58 -0
  314. package/dist/state/protocol/ProtocolState.js.map +1 -0
  315. package/dist/utils/FieldOptions.d.ts +62 -0
  316. package/dist/utils/FieldOptions.d.ts.map +1 -0
  317. package/dist/utils/FieldOptions.js +13 -0
  318. package/dist/utils/FieldOptions.js.map +1 -0
  319. package/dist/utils/MinaPrefixedProvableHashList.d.ts +20 -0
  320. package/dist/utils/MinaPrefixedProvableHashList.d.ts.map +1 -0
  321. package/dist/utils/MinaPrefixedProvableHashList.js +49 -0
  322. package/dist/utils/MinaPrefixedProvableHashList.js.map +1 -0
  323. package/dist/utils/PrefixedProvableHashList.d.ts +3 -2
  324. package/dist/utils/PrefixedProvableHashList.d.ts.map +1 -1
  325. package/dist/utils/PrefixedProvableHashList.js +5 -1
  326. package/dist/utils/PrefixedProvableHashList.js.map +1 -0
  327. package/dist/utils/ProvableHashList.d.ts +27 -4
  328. package/dist/utils/ProvableHashList.d.ts.map +1 -1
  329. package/dist/utils/ProvableHashList.js +51 -3
  330. package/dist/utils/ProvableHashList.js.map +1 -0
  331. package/dist/utils/ProvableReductionHashList.d.ts +18 -0
  332. package/dist/utils/ProvableReductionHashList.d.ts.map +1 -0
  333. package/dist/utils/ProvableReductionHashList.js +54 -0
  334. package/dist/utils/ProvableReductionHashList.js.map +1 -0
  335. package/dist/utils/StateTransitionReductionList.d.ts +11 -0
  336. package/dist/utils/StateTransitionReductionList.d.ts.map +1 -0
  337. package/dist/utils/StateTransitionReductionList.js +61 -0
  338. package/dist/utils/StateTransitionReductionList.js.map +1 -0
  339. package/dist/utils/utils.d.ts +11 -5
  340. package/dist/utils/utils.d.ts.map +1 -1
  341. package/dist/utils/utils.js +13 -13
  342. package/dist/utils/utils.js.map +1 -0
  343. package/jest.config.cjs +12 -1
  344. package/package.json +11 -9
  345. package/src/hashing/mina-prefixes.ts +10 -0
  346. package/src/hashing/protokit-prefixes.ts +37 -0
  347. package/src/hooks/AccountStateHook.ts +80 -0
  348. package/src/hooks/BlockHeightHook.ts +17 -0
  349. package/src/hooks/LastStateRootBlockHook.ts +25 -0
  350. package/src/hooks/NoopBlockHook.ts +24 -0
  351. package/src/hooks/NoopSettlementHook.ts +20 -0
  352. package/src/hooks/NoopTransactionHook.ts +13 -0
  353. package/src/index.ts +59 -9
  354. package/src/model/AppliedStateTransitionBatch.ts +16 -0
  355. package/src/model/MethodPublicOutput.ts +3 -1
  356. package/src/model/Option.ts +99 -73
  357. package/src/model/Path.ts +9 -5
  358. package/src/model/RuntimeLike.ts +12 -0
  359. package/src/model/StateTransition.ts +19 -5
  360. package/src/model/StateTransitionProvableBatch.ts +114 -12
  361. package/src/model/Transaction.ts +3 -1
  362. package/src/model/network/NetworkState.ts +22 -2
  363. package/src/model/transaction/AuthorizedTransaction.ts +50 -0
  364. package/src/model/transaction/RuntimeTransaction.ts +86 -15
  365. package/src/model/transaction/ValueOption.ts +28 -0
  366. package/src/protocol/Protocol.ts +201 -69
  367. package/src/protocol/ProtocolEnvironment.ts +10 -0
  368. package/src/protocol/ProtocolModule.ts +16 -15
  369. package/src/protocol/ProvableBlockHook.ts +67 -0
  370. package/src/protocol/ProvableTransactionHook.ts +96 -0
  371. package/src/protocol/TransitioningProtocolModule.ts +12 -0
  372. package/src/prover/accumulators/AppliedBatchHashList.ts +32 -0
  373. package/src/prover/accumulators/BlockHashList.ts +117 -0
  374. package/src/prover/accumulators/StateTransitionReductionList.ts +92 -0
  375. package/src/prover/accumulators/TransactionHashList.ts +9 -0
  376. package/src/prover/accumulators/WitnessedRootHashList.ts +62 -0
  377. package/src/prover/block/BlockProvable.ts +360 -28
  378. package/src/prover/block/BlockProver.ts +721 -186
  379. package/src/prover/block/accummulators/BlockHashMerkleTree.ts +24 -0
  380. package/src/prover/block/accummulators/RuntimeVerificationKeyTree.ts +24 -0
  381. package/src/prover/block/services/RuntimeVerificationKeyRootService.ts +20 -0
  382. package/src/prover/statetransition/StateTransitionProvable.ts +26 -19
  383. package/src/prover/statetransition/StateTransitionProver.ts +337 -126
  384. package/src/prover/transaction/TransactionProvable.ts +183 -0
  385. package/src/prover/transaction/TransactionProver.ts +561 -0
  386. package/src/prover/utils.ts +108 -0
  387. package/src/settlement/ContractArgsRegistry.ts +60 -0
  388. package/src/settlement/ContractModule.ts +31 -0
  389. package/src/settlement/SettlementContractModule.ts +150 -0
  390. package/src/settlement/contracts/BridgeContract.ts +385 -0
  391. package/src/settlement/contracts/BridgeContractProtocolModule.ts +49 -0
  392. package/src/settlement/contracts/BridgingSettlementContractModule.ts +116 -0
  393. package/src/settlement/contracts/DispatchContractProtocolModule.ts +77 -0
  394. package/src/settlement/contracts/DispatchSmartContract.ts +359 -0
  395. package/src/settlement/contracts/SettlementSmartContractModule.ts +79 -0
  396. package/src/settlement/contracts/TokenBridgeTree.ts +73 -0
  397. package/src/settlement/contracts/authorizations/ContractAuthorization.ts +11 -0
  398. package/src/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.ts +16 -0
  399. package/src/settlement/contracts/authorizations/UpdateMessagesHashAuth.ts +16 -0
  400. package/src/settlement/contracts/settlement/BridgingSettlementContract.ts +283 -0
  401. package/src/settlement/contracts/settlement/SettlementBase.ts +249 -0
  402. package/src/settlement/contracts/settlement/SettlementContract.ts +75 -0
  403. package/src/settlement/messages/Deposit.ts +7 -0
  404. package/src/settlement/messages/OutgoingMessage.ts +17 -0
  405. package/src/settlement/messages/OutgoingMessageArgument.ts +53 -0
  406. package/src/settlement/modularity/OutgoingMessageProcessor.ts +65 -0
  407. package/src/settlement/modularity/ProvableSettlementHook.ts +36 -0
  408. package/src/settlement/modularity/types.ts +23 -0
  409. package/src/settlement/modules/NetworkStateSettlementModule.ts +42 -0
  410. package/src/state/State.ts +190 -0
  411. package/src/state/StateMap.ts +73 -0
  412. package/src/state/StateService.ts +6 -0
  413. package/src/state/StateServiceProvider.ts +37 -0
  414. package/src/state/WitnessBlockContext.ts +50 -0
  415. package/src/state/assert/assert.ts +38 -0
  416. package/src/state/context/RuntimeMethodExecutionContext.ts +181 -0
  417. package/src/state/context/TransitionMethodExecutionContext.ts +26 -0
  418. package/src/state/protocol/ProtocolState.ts +98 -0
  419. package/src/utils/FieldOptions.ts +13 -0
  420. package/src/utils/MinaPrefixedProvableHashList.ts +70 -0
  421. package/src/utils/PrefixedProvableHashList.ts +6 -2
  422. package/src/utils/ProvableHashList.ts +109 -4
  423. package/src/utils/ProvableReductionHashList.ts +77 -0
  424. package/src/utils/utils.ts +21 -16
  425. package/test/BlockProver.test.ts +161 -74
  426. package/test/Protocol.test.ts +20 -10
  427. package/test/State.test.ts +45 -0
  428. package/test/StateTransition.test.ts +57 -65
  429. package/test/TestingProtocol.ts +36 -0
  430. package/test/compiling/types.ts +28 -0
  431. package/test/model/Option.test.ts +72 -0
  432. package/test/model/StateTransitionProvableBatch.test.ts +137 -0
  433. package/test/modularity/types.ts +35 -0
  434. package/test/prover/block/BlockProver.test.ts +18 -0
  435. package/test/prover/statetransition/StateTransitionProver.test.ts +261 -0
  436. package/test/state/assert/assert.test.ts +56 -0
  437. package/test/tsconfig.json +7 -0
  438. package/test/utils/ProvableHashList.test.ts +44 -0
  439. package/test/utils/ProvableReductionHashList.test.ts +117 -0
  440. package/test/utils.test.ts +0 -3
  441. package/LICENSE.md +0 -201
  442. package/dist/model/transaction/ProtocolTransaction.d.ts +0 -70
  443. package/dist/model/transaction/ProtocolTransaction.d.ts.map +0 -1
  444. package/dist/model/transaction/ProtocolTransaction.js +0 -18
  445. package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts +0 -16
  446. package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts.map +0 -1
  447. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts +0 -7
  448. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts.map +0 -1
  449. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts +0 -25
  450. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts.map +0 -1
  451. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.js +0 -77
  452. package/dist/utils/merkletree/MerkleTreeStore.d.ts +0 -11
  453. package/dist/utils/merkletree/MerkleTreeStore.d.ts.map +0 -1
  454. package/dist/utils/merkletree/MerkleTreeStore.js +0 -1
  455. package/dist/utils/merkletree/RollupMerkleTree.d.ts +0 -130
  456. package/dist/utils/merkletree/RollupMerkleTree.d.ts.map +0 -1
  457. package/dist/utils/merkletree/RollupMerkleTree.js +0 -244
  458. package/src/model/Option.test.ts +0 -21
  459. package/src/model/transaction/ProtocolTransaction.ts +0 -25
  460. package/src/prover/statetransition/StateTransitionWitnessProvider.ts +0 -24
  461. package/src/prover/statetransition/StateTransitionWitnessProviderReference.ts +0 -17
  462. package/src/utils/merkletree/InMemoryMerkleTreeStorage.ts +0 -106
  463. package/src/utils/merkletree/MerkleTreeStore.ts +0 -15
  464. package/src/utils/merkletree/RollupMerkleTree.ts +0 -255
  465. package/src/utils/merkletree/VirtualMerkleTreeStore.ts +0 -21
  466. package/tsconfig.test.json +0 -9
@@ -0,0 +1,11 @@
1
+ import { Field, PublicKey } from "o1js";
2
+
3
+ /**
4
+ * Interface for cross-contract call authorization
5
+ * See https://github.com/proto-kit/framework/issues/202#issuecomment-2407263173
6
+ */
7
+ export interface ContractAuthorization {
8
+ target: PublicKey;
9
+
10
+ hash: () => Field;
11
+ }
@@ -0,0 +1,16 @@
1
+ import { Field, Poseidon, PublicKey, Struct } from "o1js";
2
+
3
+ import { ContractAuthorization } from "./ContractAuthorization";
4
+
5
+ export class TokenBridgeDeploymentAuth
6
+ extends Struct({
7
+ target: PublicKey,
8
+ tokenId: Field,
9
+ address: PublicKey,
10
+ })
11
+ implements ContractAuthorization
12
+ {
13
+ public hash() {
14
+ return Poseidon.hash(TokenBridgeDeploymentAuth.toFields(this));
15
+ }
16
+ }
@@ -0,0 +1,16 @@
1
+ import { Field, Poseidon, PublicKey, Struct } from "o1js";
2
+
3
+ import { ContractAuthorization } from "./ContractAuthorization";
4
+
5
+ export class UpdateMessagesHashAuth
6
+ extends Struct({
7
+ target: PublicKey,
8
+ executedMessagesHash: Field,
9
+ newPromisedMessagesHash: Field,
10
+ })
11
+ implements ContractAuthorization
12
+ {
13
+ public hash() {
14
+ return Poseidon.hash(UpdateMessagesHashAuth.toFields(this));
15
+ }
16
+ }
@@ -0,0 +1,283 @@
1
+ import { TypedClass, O1PublicKeyOption } from "@proto-kit/common";
2
+ import {
3
+ AccountUpdate,
4
+ Bool,
5
+ Field,
6
+ method,
7
+ PublicKey,
8
+ Signature,
9
+ SmartContract,
10
+ State,
11
+ state,
12
+ UInt32,
13
+ AccountUpdateForest,
14
+ VerificationKey,
15
+ Permissions,
16
+ Struct,
17
+ TokenId,
18
+ DeployArgs,
19
+ } from "o1js";
20
+ import { container } from "tsyringe";
21
+
22
+ import { NetworkState } from "../../../model/network/NetworkState";
23
+ import { DispatchContractType } from "../DispatchSmartContract";
24
+ import { BridgeContractType } from "../BridgeContract";
25
+ import { TokenBridgeDeploymentAuth } from "../authorizations/TokenBridgeDeploymentAuth";
26
+ import { UpdateMessagesHashAuth } from "../authorizations/UpdateMessagesHashAuth";
27
+ import {
28
+ ContractArgsRegistry,
29
+ NaiveObjectSchema,
30
+ StaticInitializationContract,
31
+ } from "../../ContractArgsRegistry";
32
+
33
+ import {
34
+ DynamicBlockProof,
35
+ SettlementBase,
36
+ SettlementContractArgs,
37
+ SettlementContractArgsSchema,
38
+ SettlementContractType,
39
+ } from "./SettlementBase";
40
+
41
+ /* eslint-disable @typescript-eslint/lines-between-class-members */
42
+
43
+ export class TokenMapping extends Struct({
44
+ tokenId: Field,
45
+ publicKey: PublicKey,
46
+ }) {}
47
+
48
+ export interface BridgingSettlementContractType extends SettlementContractType {
49
+ authorizationField: State<Field>;
50
+
51
+ assertStateRoot: (root: Field) => AccountUpdate;
52
+ addTokenBridge: (tokenId: Field, address: PublicKey) => Promise<void>;
53
+ }
54
+
55
+ export interface BridgingSettlementContractArgs extends SettlementContractArgs {
56
+ DispatchContract: TypedClass<DispatchContractType & SmartContract>;
57
+ BridgeContract: TypedClass<BridgeContractType> & typeof SmartContract;
58
+ // Lazily initialized
59
+ BridgeContractVerificationKey: VerificationKey | undefined;
60
+ BridgeContractPermissions: Permissions;
61
+ }
62
+
63
+ export const BridgingSettlementContractArgsSchema: NaiveObjectSchema<BridgingSettlementContractArgs> =
64
+ {
65
+ ...SettlementContractArgsSchema,
66
+ DispatchContract: "Required",
67
+ BridgeContract: "Required",
68
+ BridgeContractVerificationKey: "Optional",
69
+ BridgeContractPermissions: "Required",
70
+ };
71
+
72
+ export abstract class BridgingSettlementContractBase
73
+ extends SettlementBase
74
+ implements StaticInitializationContract<BridgingSettlementContractArgs>
75
+ {
76
+ public getInitializationArgs(): BridgingSettlementContractArgs {
77
+ return container
78
+ .resolve(ContractArgsRegistry)
79
+ .getArgs("SettlementContract", BridgingSettlementContractArgsSchema);
80
+ }
81
+
82
+ events = {
83
+ "token-bridge-deployed": TokenMapping,
84
+ };
85
+
86
+ abstract dispatchContractAddress: State<PublicKey>;
87
+
88
+ abstract authorizationField: State<Field>;
89
+
90
+ // Not @state
91
+ // abstract offchainStateCommitmentsHash: State<Field>;
92
+
93
+ public assertStateRoot(root: Field): AccountUpdate {
94
+ this.stateRoot.requireEquals(root);
95
+ return this.self;
96
+ }
97
+
98
+ protected async initializeBaseBridging(
99
+ sequencer: PublicKey,
100
+ dispatchContract: PublicKey
101
+ ) {
102
+ await super.initializeBase(sequencer);
103
+
104
+ this.dispatchContractAddress.set(dispatchContract);
105
+ }
106
+
107
+ // TODO We should move this to the dispatchcontract eventually - or after mesa
108
+ // to the combined settlement & dispatch contract
109
+ protected async deployTokenBridge(tokenId: Field, address: PublicKey) {
110
+ const {
111
+ BridgeContractVerificationKey,
112
+ signedSettlements,
113
+ BridgeContractPermissions,
114
+ BridgeContract: BridgeContractClass,
115
+ DispatchContract,
116
+ } = this.getInitializationArgs();
117
+
118
+ const bridgeContract = new BridgeContractClass(address, tokenId);
119
+
120
+ if (
121
+ BridgeContractVerificationKey !== undefined &&
122
+ !BridgeContractVerificationKey.hash.isConstant()
123
+ ) {
124
+ throw new Error("Bridge contract verification key has to be constants");
125
+ }
126
+
127
+ // This function is not a zkapps method, therefore it will be part of this methods execution
128
+ // The returning account update (owner.self) is therefore part of this circuit and is assertable
129
+ const deploymentAccountUpdate = await bridgeContract.deployProvable(
130
+ BridgeContractVerificationKey,
131
+ signedSettlements!,
132
+ BridgeContractPermissions!,
133
+ this.address
134
+ );
135
+
136
+ this.approve(deploymentAccountUpdate);
137
+
138
+ this.self.body.mayUseToken = {
139
+ // Only set this if we deploy a custom token
140
+ parentsOwnToken: tokenId.equals(TokenId.default).not(),
141
+ inheritFromParent: Bool(false),
142
+ };
143
+
144
+ this.emitEvent(
145
+ "token-bridge-deployed",
146
+ new TokenMapping({
147
+ tokenId: tokenId,
148
+ publicKey: address,
149
+ })
150
+ );
151
+
152
+ const dispatchContractAddress =
153
+ this.dispatchContractAddress.getAndRequireEquals();
154
+
155
+ // Set authorization for the auth callback, that we need
156
+ this.authorizationField.set(
157
+ new TokenBridgeDeploymentAuth({
158
+ target: dispatchContractAddress,
159
+ tokenId,
160
+ address,
161
+ }).hash()
162
+ );
163
+ const dispatchContract = new DispatchContract(dispatchContractAddress);
164
+ await dispatchContract.enableTokenDeposits(tokenId, address, this.address);
165
+ }
166
+
167
+ protected async settleBaseBridging(
168
+ blockProof: DynamicBlockProof,
169
+ signature: Signature,
170
+ publicKey: PublicKey,
171
+ inputNetworkState: NetworkState,
172
+ outputNetworkState: NetworkState,
173
+ newPromisedMessagesHash: Field
174
+ ) {
175
+ await super.settleBase(
176
+ blockProof,
177
+ signature,
178
+ publicKey,
179
+ inputNetworkState,
180
+ outputNetworkState,
181
+ newPromisedMessagesHash
182
+ );
183
+
184
+ const dispatchContractAddress =
185
+ this.dispatchContractAddress.getAndRequireEquals();
186
+
187
+ const { DispatchContract } = this.getInitializationArgs();
188
+
189
+ // Get dispatch contract values
190
+ // These values are witnesses but will be checked later on the AU
191
+ // call to the dispatch contract via .updateMessagesHash()
192
+ const dispatchContract = new DispatchContract(dispatchContractAddress);
193
+ const promisedMessagesHash = dispatchContract.promisedMessagesHash.get();
194
+
195
+ // Assert and apply deposit commitments
196
+ promisedMessagesHash.assertEquals(
197
+ blockProof.publicOutput.incomingMessagesHash,
198
+ "Promised messages not honored"
199
+ );
200
+
201
+ // Set authorization for the dispatchContract to verify the messages hash update
202
+ this.authorizationField.set(
203
+ new UpdateMessagesHashAuth({
204
+ target: dispatchContract.address,
205
+ executedMessagesHash: promisedMessagesHash,
206
+ newPromisedMessagesHash,
207
+ }).hash()
208
+ );
209
+
210
+ // Call DispatchContract
211
+ // This call checks that the promisedMessagesHash, which is already proven
212
+ // to be the blockProofs publicoutput, is actually the current on-chain
213
+ // promisedMessageHash. It also checks the newPromisedMessagesHash to be
214
+ // a current sequencestate value
215
+ await dispatchContract.updateMessagesHash(
216
+ promisedMessagesHash,
217
+ newPromisedMessagesHash
218
+ );
219
+ }
220
+ }
221
+
222
+ export class BridgingSettlementContract
223
+ extends BridgingSettlementContractBase
224
+ implements BridgingSettlementContractType
225
+ {
226
+ @state(Field) public sequencerKey = State<Field>();
227
+ @state(UInt32) public lastSettlementL1BlockHeight = State<UInt32>();
228
+
229
+ @state(Field) public stateRoot = State<Field>();
230
+ @state(Field) public networkStateHash = State<Field>();
231
+ @state(Field) public blockHashRoot = State<Field>();
232
+
233
+ @state(PublicKey) public dispatchContractAddress = State<PublicKey>();
234
+
235
+ @state(Field) public authorizationField = State<Field>();
236
+
237
+ public async deployAndInitialize(
238
+ args: DeployArgs | undefined,
239
+ permissions: Permissions,
240
+ sequencer: PublicKey,
241
+ dispatchContract: O1PublicKeyOption
242
+ ): Promise<void> {
243
+ dispatchContract.assertSome(
244
+ "Bridging-enabled settlement contract requires a dispatch contract address"
245
+ );
246
+
247
+ await super.deploy(args);
248
+
249
+ this.self.account.permissions.set(permissions);
250
+
251
+ await this.initializeBaseBridging(sequencer, dispatchContract.value);
252
+ }
253
+
254
+ @method async approveBase(forest: AccountUpdateForest) {
255
+ this.checkZeroBalanceChange(forest);
256
+ }
257
+
258
+ @method
259
+ public async addTokenBridge(tokenId: Field, address: PublicKey) {
260
+ await this.deployTokenBridge(tokenId, address);
261
+ }
262
+
263
+ @method
264
+ public async settle(
265
+ blockProof: DynamicBlockProof,
266
+ signature: Signature,
267
+ publicKey: PublicKey,
268
+ inputNetworkState: NetworkState,
269
+ outputNetworkState: NetworkState,
270
+ newPromisedMessagesHash: Field
271
+ ) {
272
+ return await this.settleBaseBridging(
273
+ blockProof,
274
+ signature,
275
+ publicKey,
276
+ inputNetworkState,
277
+ outputNetworkState,
278
+ newPromisedMessagesHash
279
+ );
280
+ }
281
+ }
282
+
283
+ /* eslint-enable @typescript-eslint/lines-between-class-members */
@@ -0,0 +1,249 @@
1
+ import {
2
+ DeployArgs,
3
+ DynamicProof,
4
+ Field,
5
+ Option,
6
+ PublicKey,
7
+ Signature,
8
+ State,
9
+ TokenContract,
10
+ UInt32,
11
+ Permissions,
12
+ } from "o1js";
13
+ import {
14
+ ChildVerificationKeyService,
15
+ LinkedMerkleTree,
16
+ mapSequential,
17
+ prefixToField,
18
+ } from "@proto-kit/common";
19
+ import { container } from "tsyringe";
20
+
21
+ import { BlockHashMerkleTree } from "../../../prover/block/accummulators/BlockHashMerkleTree";
22
+ import { NetworkState } from "../../../model/network/NetworkState";
23
+ import {
24
+ ProvableSettlementHook,
25
+ SettlementHookInputs,
26
+ SettlementStateRecord,
27
+ } from "../../modularity/ProvableSettlementHook";
28
+ import {
29
+ BlockProverPublicInput,
30
+ BlockProverPublicOutput,
31
+ } from "../../../prover/block/BlockProvable";
32
+ import {
33
+ ContractArgsRegistry,
34
+ NaiveObjectSchema,
35
+ StaticInitializationContract,
36
+ } from "../../ContractArgsRegistry";
37
+
38
+ /* eslint-disable @typescript-eslint/lines-between-class-members */
39
+
40
+ // Some random prefix for the sequencer signature
41
+ export const BATCH_SIGNATURE_PREFIX = prefixToField("pk-batchSignature");
42
+
43
+ export class DynamicBlockProof extends DynamicProof<
44
+ BlockProverPublicInput,
45
+ BlockProverPublicOutput
46
+ > {
47
+ public static publicInputType = BlockProverPublicInput;
48
+
49
+ public static publicOutputType = BlockProverPublicOutput;
50
+
51
+ public static maxProofsVerified = 2 as const;
52
+ }
53
+
54
+ export interface SettlementContractType {
55
+ sequencerKey: State<Field>;
56
+ lastSettlementL1BlockHeight: State<UInt32>;
57
+ stateRoot: State<Field>;
58
+ networkStateHash: State<Field>;
59
+ blockHashRoot: State<Field>;
60
+
61
+ deployAndInitialize: (
62
+ args: DeployArgs | undefined,
63
+ permissions: Permissions,
64
+ sequencer: PublicKey,
65
+ dispatchContract: Option<PublicKey>
66
+ ) => Promise<void>;
67
+
68
+ settle: (
69
+ blockProof: DynamicBlockProof,
70
+ signature: Signature,
71
+ publicKey: PublicKey,
72
+ inputNetworkState: NetworkState,
73
+ outputNetworkState: NetworkState,
74
+ newPromisedMessagesHash: Field
75
+ ) => Promise<void>;
76
+ }
77
+
78
+ export interface SettlementContractArgs {
79
+ hooks: ProvableSettlementHook<unknown>[];
80
+ escapeHatchSlotsInterval: number;
81
+ signedSettlements: boolean;
82
+ ChildVerificationKeyService: ChildVerificationKeyService;
83
+ }
84
+
85
+ export const SettlementContractArgsSchema: NaiveObjectSchema<SettlementContractArgs> =
86
+ {
87
+ ChildVerificationKeyService: "Required",
88
+ hooks: "Required",
89
+ escapeHatchSlotsInterval: "Required",
90
+ signedSettlements: "Required",
91
+ };
92
+
93
+ export abstract class SettlementBase
94
+ extends TokenContract
95
+ implements StaticInitializationContract<SettlementContractArgs>
96
+ {
97
+ getInitializationArgs(): SettlementContractArgs {
98
+ return container
99
+ .resolve(ContractArgsRegistry)
100
+ .getArgs("SettlementContract", SettlementContractArgsSchema);
101
+ }
102
+
103
+ abstract sequencerKey: State<Field>;
104
+ abstract lastSettlementL1BlockHeight: State<UInt32>;
105
+ abstract stateRoot: State<Field>;
106
+ abstract networkStateHash: State<Field>;
107
+ abstract blockHashRoot: State<Field>;
108
+
109
+ protected async initializeBase(sequencer: PublicKey) {
110
+ this.sequencerKey.set(sequencer.x);
111
+ this.stateRoot.set(LinkedMerkleTree.EMPTY_ROOT);
112
+ this.blockHashRoot.set(Field(BlockHashMerkleTree.EMPTY_ROOT));
113
+ this.networkStateHash.set(NetworkState.empty().hash());
114
+ }
115
+
116
+ abstract settle(
117
+ blockProof: DynamicBlockProof,
118
+ signature: Signature,
119
+ publicKey: PublicKey,
120
+ inputNetworkState: NetworkState,
121
+ outputNetworkState: NetworkState,
122
+ newPromisedMessagesHash: Field
123
+ ): Promise<void>;
124
+
125
+ abstract deployAndInitialize(
126
+ args: DeployArgs | undefined,
127
+ permissions: Permissions,
128
+ sequencer: PublicKey,
129
+ dispatchContract: Option<PublicKey>
130
+ ): Promise<void>;
131
+
132
+ protected async settleBase(
133
+ blockProof: DynamicBlockProof,
134
+ signature: Signature,
135
+ publicKey: PublicKey,
136
+ inputNetworkState: NetworkState,
137
+ outputNetworkState: NetworkState,
138
+ newPromisedMessagesHash: Field
139
+ ) {
140
+ const {
141
+ escapeHatchSlotsInterval,
142
+ hooks,
143
+ ChildVerificationKeyService: childVerificationKeyService,
144
+ } = this.getInitializationArgs();
145
+
146
+ // Brought in as a constant
147
+ const blockProofVk =
148
+ childVerificationKeyService.getVerificationKey("BlockProver");
149
+ if (!blockProofVk.hash.isConstant()) {
150
+ throw new Error("Sanity check - vk hash has to be constant");
151
+ }
152
+ // Verify the blockproof
153
+
154
+ blockProof.verify(blockProofVk);
155
+ // Get and assert on-chain values
156
+ const stateRoot = this.stateRoot.getAndRequireEquals();
157
+ const networkStateHash = this.networkStateHash.getAndRequireEquals();
158
+ const blockHashRoot = this.blockHashRoot.getAndRequireEquals();
159
+ const sequencerKey = this.sequencerKey.getAndRequireEquals();
160
+
161
+ const lastSettlementL1BlockHeight =
162
+ this.lastSettlementL1BlockHeight.getAndRequireEquals();
163
+
164
+ // Get block height and use the lower bound for all ops
165
+ const minBlockHeightIncluded = this.network.blockchainLength.get();
166
+ this.network.blockchainLength.requireBetween(
167
+ minBlockHeightIncluded,
168
+ // 5 because that is the length the newPromisedMessagesHash will be valid
169
+ minBlockHeightIncluded.add(4)
170
+ );
171
+
172
+ // Check signature/escape catch
173
+ publicKey.x.assertEquals(
174
+ sequencerKey,
175
+ "Sequencer public key witness not matching"
176
+ );
177
+ const signatureValid = signature.verify(publicKey, [
178
+ BATCH_SIGNATURE_PREFIX,
179
+ lastSettlementL1BlockHeight.value,
180
+ ]);
181
+ const escapeHatchActivated = lastSettlementL1BlockHeight
182
+ .add(UInt32.from(escapeHatchSlotsInterval))
183
+ .lessThan(minBlockHeightIncluded);
184
+ signatureValid
185
+ .or(escapeHatchActivated)
186
+ .assertTrue(
187
+ "Sequencer signature not valid and escape hatch not activated"
188
+ );
189
+
190
+ // Assert correctness of networkState witness
191
+ inputNetworkState
192
+ .hash()
193
+ .assertEquals(networkStateHash, "InputNetworkState witness not valid");
194
+ outputNetworkState
195
+ .hash()
196
+ .assertEquals(
197
+ blockProof.publicOutput.networkStateHash,
198
+ "OutputNetworkState witness not valid"
199
+ );
200
+
201
+ // Check remainders are zero
202
+ blockProof.publicOutput.proverStateRemainder.assertEquals(
203
+ Field(0),
204
+ "Supplied proof is has outstanding block prover state to be proven"
205
+ );
206
+
207
+ // Execute onSettlementHooks for additional checks
208
+ const stateRecord: SettlementStateRecord = {
209
+ blockHashRoot,
210
+ stateRoot,
211
+ networkStateHash,
212
+ lastSettlementL1BlockHeight,
213
+ sequencerKey: publicKey,
214
+ };
215
+ const inputs: SettlementHookInputs = {
216
+ blockProof,
217
+ contractState: stateRecord,
218
+ newPromisedMessagesHash,
219
+ fromNetworkState: inputNetworkState,
220
+ toNetworkState: outputNetworkState,
221
+ currentL1BlockHeight: minBlockHeightIncluded,
222
+ };
223
+ await mapSequential(hooks, async (hook) => {
224
+ await hook.beforeSettlement(this, inputs);
225
+ });
226
+
227
+ // Apply blockProof
228
+ stateRoot.assertEquals(
229
+ blockProof.publicInput.stateRoot,
230
+ "Input state root not matching"
231
+ );
232
+
233
+ networkStateHash.assertEquals(
234
+ blockProof.publicInput.networkStateHash,
235
+ "Input networkStateHash not matching"
236
+ );
237
+ blockHashRoot.assertEquals(
238
+ blockProof.publicInput.blockHashRoot,
239
+ "Input blockHashRoot not matching"
240
+ );
241
+ this.stateRoot.set(blockProof.publicOutput.stateRoot);
242
+ this.networkStateHash.set(blockProof.publicOutput.networkStateHash);
243
+ this.blockHashRoot.set(blockProof.publicOutput.blockHashRoot);
244
+
245
+ this.lastSettlementL1BlockHeight.set(minBlockHeightIncluded);
246
+ }
247
+ }
248
+
249
+ /* eslint-enable @typescript-eslint/lines-between-class-members */
@@ -0,0 +1,75 @@
1
+ import {
2
+ State,
3
+ UInt32,
4
+ AccountUpdateForest,
5
+ state,
6
+ method,
7
+ PublicKey,
8
+ Field,
9
+ Signature,
10
+ DeployArgs,
11
+ Permissions,
12
+ } from "o1js";
13
+ import { O1PublicKeyOption } from "@proto-kit/common";
14
+
15
+ import { NetworkState } from "../../../model/network/NetworkState";
16
+
17
+ import {
18
+ DynamicBlockProof,
19
+ SettlementBase,
20
+ SettlementContractType,
21
+ } from "./SettlementBase";
22
+
23
+ export class SettlementContract
24
+ extends SettlementBase
25
+ implements SettlementContractType
26
+ {
27
+ @state(Field) sequencerKey = State<Field>();
28
+
29
+ @state(UInt32) lastSettlementL1BlockHeight = State<UInt32>();
30
+
31
+ @state(Field) stateRoot = State<Field>();
32
+
33
+ @state(Field) networkStateHash = State<Field>();
34
+
35
+ @state(Field) blockHashRoot = State<Field>();
36
+
37
+ public async deployAndInitialize(
38
+ args: DeployArgs | undefined,
39
+ permissions: Permissions,
40
+ sequencer: PublicKey,
41
+ dispatchContract: O1PublicKeyOption
42
+ ): Promise<void> {
43
+ dispatchContract.assertNone(
44
+ "Non-bridging settlement contract doesn't require a dispatch contract"
45
+ );
46
+
47
+ await super.deploy(args);
48
+
49
+ this.self.account.permissions.set(permissions);
50
+
51
+ await this.initializeBase(sequencer);
52
+ }
53
+
54
+ @method async approveBase(forest: AccountUpdateForest) {
55
+ this.checkZeroBalanceChange(forest);
56
+ }
57
+
58
+ @method async settle(
59
+ blockProof: DynamicBlockProof,
60
+ signature: Signature,
61
+ publicKey: PublicKey,
62
+ inputNetworkState: NetworkState,
63
+ outputNetworkState: NetworkState,
64
+ newPromisedMessagesHash: Field
65
+ ): Promise<void> {
66
+ await super.settleBase(
67
+ blockProof,
68
+ signature,
69
+ publicKey,
70
+ inputNetworkState,
71
+ outputNetworkState,
72
+ newPromisedMessagesHash
73
+ );
74
+ }
75
+ }
@@ -0,0 +1,7 @@
1
+ import { Field, PublicKey, Struct, UInt64 } from "o1js";
2
+
3
+ export class Deposit extends Struct({
4
+ tokenId: Field,
5
+ address: PublicKey,
6
+ amount: UInt64,
7
+ }) {}
@@ -0,0 +1,17 @@
1
+ import { Field, Struct } from "o1js";
2
+
3
+ export class OutgoingMessageKeyStruct extends Struct({
4
+ index: Field,
5
+ tokenId: Field,
6
+ }) {}
7
+
8
+ export type OutgoingMessageEvent<T> = {
9
+ key: OutgoingMessageKeyStruct;
10
+ value: T;
11
+ messageType: Field;
12
+ };
13
+
14
+ export type OutgoingMessage<T> = {
15
+ value: T;
16
+ messageType: Field;
17
+ };