@proto-kit/protocol 0.1.1-develop.165 → 0.1.1-develop.1665

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 (441) 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 +52 -0
  12. package/dist/hooks/AccountStateHook.d.ts.map +1 -0
  13. package/dist/hooks/AccountStateHook.js +52 -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 +51 -9
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +52 -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 -29
  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 -42
  48. package/dist/model/Option.d.ts.map +1 -1
  49. package/dist/model/Option.js +62 -47
  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 +67 -16
  60. package/dist/model/StateTransition.d.ts.map +1 -1
  61. package/dist/model/StateTransition.js +18 -2
  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 +88 -11
  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 +20 -2
  70. package/dist/model/network/NetworkState.js.map +1 -0
  71. package/dist/model/transaction/RuntimeTransaction.d.ts +96 -28
  72. package/dist/model/transaction/RuntimeTransaction.d.ts.map +1 -1
  73. package/dist/model/transaction/RuntimeTransaction.js +75 -11
  74. package/dist/model/transaction/RuntimeTransaction.js.map +1 -0
  75. package/dist/model/transaction/SignedTransaction.d.ts +107 -0
  76. package/dist/model/transaction/SignedTransaction.d.ts.map +1 -0
  77. package/dist/model/transaction/SignedTransaction.js +34 -0
  78. package/dist/model/transaction/SignedTransaction.js.map +1 -0
  79. package/dist/model/transaction/ValueOption.d.ts +173 -0
  80. package/dist/model/transaction/ValueOption.d.ts.map +1 -0
  81. package/dist/model/transaction/ValueOption.js +25 -0
  82. package/dist/model/transaction/ValueOption.js.map +1 -0
  83. package/dist/protocol/Protocol.d.ts +27 -25
  84. package/dist/protocol/Protocol.d.ts.map +1 -1
  85. package/dist/protocol/Protocol.js +98 -28
  86. package/dist/protocol/Protocol.js.map +1 -0
  87. package/dist/protocol/ProtocolEnvironment.d.ts +9 -0
  88. package/dist/protocol/ProtocolEnvironment.d.ts.map +1 -0
  89. package/dist/protocol/ProtocolEnvironment.js +2 -0
  90. package/dist/protocol/ProtocolEnvironment.js.map +1 -0
  91. package/dist/protocol/ProtocolModule.d.ts +7 -7
  92. package/dist/protocol/ProtocolModule.d.ts.map +1 -1
  93. package/dist/protocol/ProtocolModule.js +10 -7
  94. package/dist/protocol/ProtocolModule.js.map +1 -0
  95. package/dist/protocol/ProvableBlockHook.d.ts +19 -0
  96. package/dist/protocol/ProvableBlockHook.d.ts.map +1 -0
  97. package/dist/protocol/ProvableBlockHook.js +21 -0
  98. package/dist/protocol/ProvableBlockHook.js.map +1 -0
  99. package/dist/protocol/ProvableTransactionHook.d.ts +34 -0
  100. package/dist/protocol/ProvableTransactionHook.d.ts.map +1 -0
  101. package/dist/protocol/ProvableTransactionHook.js +13 -0
  102. package/dist/protocol/ProvableTransactionHook.js.map +1 -0
  103. package/dist/protocol/TransitioningProtocolModule.d.ts +10 -0
  104. package/dist/protocol/TransitioningProtocolModule.d.ts.map +1 -0
  105. package/dist/protocol/TransitioningProtocolModule.js +9 -0
  106. package/dist/protocol/TransitioningProtocolModule.js.map +1 -0
  107. package/dist/prover/accumulators/AppliedBatchHashList.d.ts +18 -0
  108. package/dist/prover/accumulators/AppliedBatchHashList.d.ts.map +1 -0
  109. package/dist/prover/accumulators/AppliedBatchHashList.js +25 -0
  110. package/dist/prover/accumulators/AppliedBatchHashList.js.map +1 -0
  111. package/dist/prover/accumulators/StateTransitionReductionList.d.ts +12 -0
  112. package/dist/prover/accumulators/StateTransitionReductionList.d.ts.map +1 -0
  113. package/dist/prover/accumulators/StateTransitionReductionList.js +64 -0
  114. package/dist/prover/accumulators/StateTransitionReductionList.js.map +1 -0
  115. package/dist/prover/accumulators/TransactionHashList.d.ts +6 -0
  116. package/dist/prover/accumulators/TransactionHashList.d.ts.map +1 -0
  117. package/dist/prover/accumulators/TransactionHashList.js +8 -0
  118. package/dist/prover/accumulators/TransactionHashList.js.map +1 -0
  119. package/dist/prover/accumulators/WitnessedRootHashList.d.ts +137 -0
  120. package/dist/prover/accumulators/WitnessedRootHashList.d.ts.map +1 -0
  121. package/dist/prover/accumulators/WitnessedRootHashList.js +50 -0
  122. package/dist/prover/accumulators/WitnessedRootHashList.js.map +1 -0
  123. package/dist/prover/block/BlockProvable.d.ts +869 -65
  124. package/dist/prover/block/BlockProvable.d.ts.map +1 -1
  125. package/dist/prover/block/BlockProvable.js +86 -6
  126. package/dist/prover/block/BlockProvable.js.map +1 -0
  127. package/dist/prover/block/BlockProver.d.ts +82 -34
  128. package/dist/prover/block/BlockProver.d.ts.map +1 -1
  129. package/dist/prover/block/BlockProver.js +505 -86
  130. package/dist/prover/block/BlockProver.js.map +1 -0
  131. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts +106 -0
  132. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts.map +1 -0
  133. package/dist/prover/block/accummulators/BlockHashMerkleTree.js +25 -0
  134. package/dist/prover/block/accummulators/BlockHashMerkleTree.js.map +1 -0
  135. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.d.ts +139 -0
  136. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.d.ts.map +1 -0
  137. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js +21 -0
  138. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js.map +1 -0
  139. package/dist/prover/block/services/RuntimeVerificationKeyRootService.d.ts +7 -0
  140. package/dist/prover/block/services/RuntimeVerificationKeyRootService.d.ts.map +1 -0
  141. package/dist/prover/{statetransition/StateTransitionWitnessProviderReference.js → block/services/RuntimeVerificationKeyRootService.js} +11 -8
  142. package/dist/prover/block/services/RuntimeVerificationKeyRootService.js.map +1 -0
  143. package/dist/prover/statetransition/StateTransitionProvable.d.ts +137 -48
  144. package/dist/prover/statetransition/StateTransitionProvable.d.ts.map +1 -1
  145. package/dist/prover/statetransition/StateTransitionProvable.js +10 -5
  146. package/dist/prover/statetransition/StateTransitionProvable.js.map +1 -0
  147. package/dist/prover/statetransition/StateTransitionProver.d.ts +30 -17
  148. package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -1
  149. package/dist/prover/statetransition/StateTransitionProver.js +169 -74
  150. package/dist/prover/statetransition/StateTransitionProver.js.map +1 -0
  151. package/dist/settlement/ContractModule.d.ts +16 -0
  152. package/dist/settlement/ContractModule.d.ts.map +1 -0
  153. package/dist/settlement/ContractModule.js +12 -0
  154. package/dist/settlement/ContractModule.js.map +1 -0
  155. package/dist/settlement/SettlementContractModule.d.ts +51 -0
  156. package/dist/settlement/SettlementContractModule.d.ts.map +1 -0
  157. package/dist/settlement/SettlementContractModule.js +80 -0
  158. package/dist/settlement/SettlementContractModule.js.map +1 -0
  159. package/dist/settlement/contracts/BridgeContract.d.ts +116 -0
  160. package/dist/settlement/contracts/BridgeContract.d.ts.map +1 -0
  161. package/dist/settlement/contracts/BridgeContract.js +259 -0
  162. package/dist/settlement/contracts/BridgeContract.js.map +1 -0
  163. package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts +16 -0
  164. package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts.map +1 -0
  165. package/dist/settlement/contracts/BridgeContractProtocolModule.js +41 -0
  166. package/dist/settlement/contracts/BridgeContractProtocolModule.js.map +1 -0
  167. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts +21 -0
  168. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts.map +1 -0
  169. package/dist/settlement/contracts/DispatchContractProtocolModule.js +57 -0
  170. package/dist/settlement/contracts/DispatchContractProtocolModule.js.map +1 -0
  171. package/dist/settlement/contracts/DispatchSmartContract.d.ts +44 -0
  172. package/dist/settlement/contracts/DispatchSmartContract.d.ts.map +1 -0
  173. package/dist/settlement/contracts/DispatchSmartContract.js +229 -0
  174. package/dist/settlement/contracts/DispatchSmartContract.js.map +1 -0
  175. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts +21 -0
  176. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts.map +1 -0
  177. package/dist/settlement/contracts/SettlementContractProtocolModule.js +84 -0
  178. package/dist/settlement/contracts/SettlementContractProtocolModule.js.map +1 -0
  179. package/dist/settlement/contracts/SettlementSmartContract.d.ts +123 -0
  180. package/dist/settlement/contracts/SettlementSmartContract.d.ts.map +1 -0
  181. package/dist/settlement/contracts/SettlementSmartContract.js +310 -0
  182. package/dist/settlement/contracts/SettlementSmartContract.js.map +1 -0
  183. package/dist/settlement/contracts/TokenBridgeTree.d.ts +228 -0
  184. package/dist/settlement/contracts/TokenBridgeTree.d.ts.map +1 -0
  185. package/dist/settlement/contracts/TokenBridgeTree.js +60 -0
  186. package/dist/settlement/contracts/TokenBridgeTree.js.map +1 -0
  187. package/dist/settlement/contracts/authorizations/ContractAuthorization.d.ts +10 -0
  188. package/dist/settlement/contracts/authorizations/ContractAuthorization.d.ts.map +1 -0
  189. package/dist/settlement/contracts/authorizations/ContractAuthorization.js +2 -0
  190. package/dist/settlement/contracts/authorizations/ContractAuthorization.js.map +1 -0
  191. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.d.ts +85 -0
  192. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.d.ts.map +1 -0
  193. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.js +11 -0
  194. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.js.map +1 -0
  195. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.d.ts +79 -0
  196. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.d.ts.map +1 -0
  197. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.js +11 -0
  198. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.js.map +1 -0
  199. package/dist/settlement/messages/Deposit.d.ts +77 -0
  200. package/dist/settlement/messages/Deposit.d.ts.map +1 -0
  201. package/dist/settlement/messages/Deposit.js +8 -0
  202. package/dist/settlement/messages/Deposit.js.map +1 -0
  203. package/dist/settlement/messages/OutgoingMessage.d.ts +67 -0
  204. package/dist/settlement/messages/OutgoingMessage.d.ts.map +1 -0
  205. package/dist/settlement/messages/OutgoingMessage.js +7 -0
  206. package/dist/settlement/messages/OutgoingMessage.js.map +1 -0
  207. package/dist/settlement/messages/OutgoingMessageArgument.d.ts +462 -0
  208. package/dist/settlement/messages/OutgoingMessageArgument.d.ts.map +1 -0
  209. package/dist/settlement/messages/OutgoingMessageArgument.js +40 -0
  210. package/dist/settlement/messages/OutgoingMessageArgument.js.map +1 -0
  211. package/dist/settlement/modularity/OutgoingMessageProcessor.d.ts +25 -0
  212. package/dist/settlement/modularity/OutgoingMessageProcessor.d.ts.map +1 -0
  213. package/dist/settlement/modularity/OutgoingMessageProcessor.js +30 -0
  214. package/dist/settlement/modularity/OutgoingMessageProcessor.js.map +1 -0
  215. package/dist/settlement/modularity/ProvableSettlementHook.d.ts +26 -0
  216. package/dist/settlement/modularity/ProvableSettlementHook.d.ts.map +1 -0
  217. package/dist/settlement/modularity/ProvableSettlementHook.js +4 -0
  218. package/dist/settlement/modularity/ProvableSettlementHook.js.map +1 -0
  219. package/dist/settlement/modularity/types.d.ts +8 -0
  220. package/dist/settlement/modularity/types.d.ts.map +1 -0
  221. package/dist/settlement/modularity/types.js +2 -0
  222. package/dist/settlement/modularity/types.js.map +1 -0
  223. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts +11 -0
  224. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts.map +1 -0
  225. package/dist/settlement/modules/NetworkStateSettlementModule.js +15 -0
  226. package/dist/settlement/modules/NetworkStateSettlementModule.js.map +1 -0
  227. package/dist/state/State.d.ts +68 -0
  228. package/dist/state/State.d.ts.map +1 -0
  229. package/dist/state/State.js +131 -0
  230. package/dist/state/State.js.map +1 -0
  231. package/dist/state/StateMap.d.ts +37 -0
  232. package/dist/state/StateMap.d.ts.map +1 -0
  233. package/dist/state/StateMap.js +56 -0
  234. package/dist/state/StateMap.js.map +1 -0
  235. package/dist/state/StateService.d.ts +6 -0
  236. package/dist/state/StateService.d.ts.map +1 -0
  237. package/dist/state/StateService.js +2 -0
  238. package/dist/state/StateService.js.map +1 -0
  239. package/dist/state/StateServiceProvider.d.ts +8 -0
  240. package/dist/state/StateServiceProvider.d.ts.map +1 -0
  241. package/dist/state/StateServiceProvider.js +37 -0
  242. package/dist/state/StateServiceProvider.js.map +1 -0
  243. package/dist/state/assert/assert.d.ts +12 -0
  244. package/dist/state/assert/assert.d.ts.map +1 -0
  245. package/dist/state/assert/assert.js +33 -0
  246. package/dist/state/assert/assert.js.map +1 -0
  247. package/dist/state/context/RuntimeMethodExecutionContext.d.ts +193 -0
  248. package/dist/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -0
  249. package/dist/state/context/RuntimeMethodExecutionContext.js +138 -0
  250. package/dist/state/context/RuntimeMethodExecutionContext.js.map +1 -0
  251. package/dist/state/context/TransitionMethodExecutionContext.d.ts +23 -0
  252. package/dist/state/context/TransitionMethodExecutionContext.d.ts.map +1 -0
  253. package/dist/state/context/TransitionMethodExecutionContext.js +6 -0
  254. package/dist/state/context/TransitionMethodExecutionContext.js.map +1 -0
  255. package/dist/state/protocol/ProtocolState.d.ts +13 -0
  256. package/dist/state/protocol/ProtocolState.d.ts.map +1 -0
  257. package/dist/state/protocol/ProtocolState.js +58 -0
  258. package/dist/state/protocol/ProtocolState.js.map +1 -0
  259. package/dist/utils/FieldOptions.d.ts +62 -0
  260. package/dist/utils/FieldOptions.d.ts.map +1 -0
  261. package/dist/utils/FieldOptions.js +13 -0
  262. package/dist/utils/FieldOptions.js.map +1 -0
  263. package/dist/utils/MinaPrefixedProvableHashList.d.ts +19 -0
  264. package/dist/utils/MinaPrefixedProvableHashList.d.ts.map +1 -0
  265. package/dist/utils/MinaPrefixedProvableHashList.js +46 -0
  266. package/dist/utils/MinaPrefixedProvableHashList.js.map +1 -0
  267. package/dist/utils/PrefixedProvableHashList.d.ts +2 -2
  268. package/dist/utils/PrefixedProvableHashList.d.ts.map +1 -1
  269. package/dist/utils/PrefixedProvableHashList.js +2 -1
  270. package/dist/utils/PrefixedProvableHashList.js.map +1 -0
  271. package/dist/utils/ProvableHashList.d.ts +23 -4
  272. package/dist/utils/ProvableHashList.d.ts.map +1 -1
  273. package/dist/utils/ProvableHashList.js +38 -2
  274. package/dist/utils/ProvableHashList.js.map +1 -0
  275. package/dist/utils/ProvableReductionHashList.d.ts +18 -0
  276. package/dist/utils/ProvableReductionHashList.d.ts.map +1 -0
  277. package/dist/utils/ProvableReductionHashList.js +54 -0
  278. package/dist/utils/ProvableReductionHashList.js.map +1 -0
  279. package/dist/utils/utils.d.ts +20 -0
  280. package/dist/utils/utils.d.ts.map +1 -0
  281. package/dist/utils/utils.js +51 -0
  282. package/dist/utils/utils.js.map +1 -0
  283. package/jest.config.cjs +12 -1
  284. package/package.json +11 -9
  285. package/src/hashing/mina-prefixes.ts +10 -0
  286. package/src/hashing/protokit-prefixes.ts +37 -0
  287. package/src/hooks/AccountStateHook.ts +57 -0
  288. package/src/hooks/BlockHeightHook.ts +17 -0
  289. package/src/hooks/LastStateRootBlockHook.ts +25 -0
  290. package/src/hooks/NoopBlockHook.ts +24 -0
  291. package/src/hooks/NoopSettlementHook.ts +20 -0
  292. package/src/hooks/NoopTransactionHook.ts +13 -0
  293. package/src/index.ts +51 -9
  294. package/src/model/AppliedStateTransitionBatch.ts +16 -0
  295. package/src/model/MethodPublicOutput.ts +3 -1
  296. package/src/model/Option.ts +99 -60
  297. package/src/model/Path.ts +9 -5
  298. package/src/model/RuntimeLike.ts +12 -0
  299. package/src/model/StateTransition.ts +25 -3
  300. package/src/model/StateTransitionProvableBatch.ts +117 -14
  301. package/src/model/Transaction.ts +3 -1
  302. package/src/model/network/NetworkState.ts +21 -3
  303. package/src/model/transaction/RuntimeTransaction.ts +90 -15
  304. package/src/model/transaction/SignedTransaction.ts +47 -0
  305. package/src/model/transaction/ValueOption.ts +28 -0
  306. package/src/protocol/Protocol.ts +166 -74
  307. package/src/protocol/ProtocolEnvironment.ts +10 -0
  308. package/src/protocol/ProtocolModule.ts +16 -16
  309. package/src/protocol/ProvableBlockHook.ts +68 -0
  310. package/src/protocol/ProvableTransactionHook.ts +77 -0
  311. package/src/protocol/TransitioningProtocolModule.ts +12 -0
  312. package/src/prover/accumulators/AppliedBatchHashList.ts +32 -0
  313. package/src/prover/accumulators/StateTransitionReductionList.ts +92 -0
  314. package/src/prover/accumulators/TransactionHashList.ts +9 -0
  315. package/src/prover/accumulators/WitnessedRootHashList.ts +61 -0
  316. package/src/prover/block/BlockProvable.ts +188 -15
  317. package/src/prover/block/BlockProver.ts +979 -143
  318. package/src/prover/block/accummulators/BlockHashMerkleTree.ts +24 -0
  319. package/src/prover/block/accummulators/RuntimeVerificationKeyTree.ts +24 -0
  320. package/src/prover/block/services/RuntimeVerificationKeyRootService.ts +20 -0
  321. package/src/prover/statetransition/StateTransitionProvable.ts +26 -19
  322. package/src/prover/statetransition/StateTransitionProver.ts +338 -130
  323. package/src/settlement/ContractModule.ts +31 -0
  324. package/src/settlement/SettlementContractModule.ts +145 -0
  325. package/src/settlement/contracts/BridgeContract.ts +366 -0
  326. package/src/settlement/contracts/BridgeContractProtocolModule.ts +48 -0
  327. package/src/settlement/contracts/DispatchContractProtocolModule.ts +75 -0
  328. package/src/settlement/contracts/DispatchSmartContract.ts +325 -0
  329. package/src/settlement/contracts/SettlementContractProtocolModule.ts +113 -0
  330. package/src/settlement/contracts/SettlementSmartContract.ts +502 -0
  331. package/src/settlement/contracts/TokenBridgeTree.ts +73 -0
  332. package/src/settlement/contracts/authorizations/ContractAuthorization.ts +11 -0
  333. package/src/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.ts +16 -0
  334. package/src/settlement/contracts/authorizations/UpdateMessagesHashAuth.ts +16 -0
  335. package/src/settlement/messages/Deposit.ts +7 -0
  336. package/src/settlement/messages/OutgoingMessage.ts +17 -0
  337. package/src/settlement/messages/OutgoingMessageArgument.ts +53 -0
  338. package/src/settlement/modularity/OutgoingMessageProcessor.ts +65 -0
  339. package/src/settlement/modularity/ProvableSettlementHook.ts +36 -0
  340. package/src/settlement/modularity/types.ts +22 -0
  341. package/src/settlement/modules/NetworkStateSettlementModule.ts +42 -0
  342. package/src/state/State.ts +177 -0
  343. package/src/state/StateMap.ts +73 -0
  344. package/src/state/StateService.ts +6 -0
  345. package/src/state/StateServiceProvider.ts +37 -0
  346. package/src/state/assert/assert.ts +38 -0
  347. package/src/state/context/RuntimeMethodExecutionContext.ts +181 -0
  348. package/src/state/context/TransitionMethodExecutionContext.ts +26 -0
  349. package/src/state/protocol/ProtocolState.ts +98 -0
  350. package/src/utils/FieldOptions.ts +13 -0
  351. package/src/utils/MinaPrefixedProvableHashList.ts +66 -0
  352. package/src/utils/PrefixedProvableHashList.ts +2 -2
  353. package/src/utils/ProvableHashList.ts +78 -3
  354. package/src/utils/ProvableReductionHashList.ts +77 -0
  355. package/src/utils/utils.ts +44 -55
  356. package/test/BlockProver.test.ts +161 -74
  357. package/test/Protocol.test.ts +20 -10
  358. package/test/State.test.ts +45 -0
  359. package/test/StateTransition.test.ts +57 -65
  360. package/test/TestingProtocol.ts +56 -0
  361. package/test/compiling/types.ts +28 -0
  362. package/test/model/Option.test.ts +72 -0
  363. package/test/model/StateTransitionProvableBatch.test.ts +137 -0
  364. package/test/modularity/types.ts +35 -0
  365. package/test/prover/block/BlockProver.test.ts +18 -0
  366. package/test/prover/statetransition/StateTransitionProver.test.ts +261 -0
  367. package/test/state/assert/assert.test.ts +56 -0
  368. package/test/tsconfig.json +7 -0
  369. package/test/utils/ProvableHashList.test.ts +44 -0
  370. package/test/utils/ProvableReductionHashList.test.ts +117 -0
  371. package/test/utils.test.ts +27 -0
  372. package/dist/config/ConfigurableModule.d.ts +0 -18
  373. package/dist/config/ConfigurableModule.d.ts.map +0 -1
  374. package/dist/config/ConfigurableModule.js +0 -20
  375. package/dist/config/ConfigurationAggregator.d.ts +0 -10
  376. package/dist/config/ConfigurationAggregator.d.ts.map +0 -1
  377. package/dist/config/ConfigurationAggregator.js +0 -35
  378. package/dist/config/ConfigurationReceiver.d.ts +0 -25
  379. package/dist/config/ConfigurationReceiver.d.ts.map +0 -1
  380. package/dist/config/ConfigurationReceiver.js +0 -36
  381. package/dist/config/ModuleContainer.d.ts +0 -44
  382. package/dist/config/ModuleContainer.d.ts.map +0 -1
  383. package/dist/config/ModuleContainer.js +0 -89
  384. package/dist/config/types.d.ts +0 -2
  385. package/dist/config/types.d.ts.map +0 -1
  386. package/dist/config/types.js +0 -1
  387. package/dist/model/MethodPublicInput.d.ts +0 -51
  388. package/dist/model/MethodPublicInput.d.ts.map +0 -1
  389. package/dist/model/MethodPublicInput.js +0 -11
  390. package/dist/model/transaction/ProtocolTransaction.d.ts +0 -70
  391. package/dist/model/transaction/ProtocolTransaction.d.ts.map +0 -1
  392. package/dist/model/transaction/ProtocolTransaction.js +0 -18
  393. package/dist/prover/block/BlockScopedModule.d.ts +0 -3
  394. package/dist/prover/block/BlockScopedModule.d.ts.map +0 -1
  395. package/dist/prover/block/BlockScopedModule.js +0 -6
  396. package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts +0 -16
  397. package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts.map +0 -1
  398. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts +0 -7
  399. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts.map +0 -1
  400. package/dist/src/model/Option.d.ts +0 -158
  401. package/dist/src/model/Option.d.ts.map +0 -1
  402. package/dist/src/model/Option.js +0 -53
  403. package/dist/src/model/Path.d.ts +0 -35
  404. package/dist/src/model/Path.d.ts.map +0 -1
  405. package/dist/src/model/Path.js +0 -51
  406. package/dist/src/model/StateTransition.d.ts +0 -201
  407. package/dist/src/model/StateTransition.d.ts.map +0 -1
  408. package/dist/src/model/StateTransition.js +0 -43
  409. package/dist/src/utils/PrefixedHashList.d.ts +0 -15
  410. package/dist/src/utils/PrefixedHashList.d.ts.map +0 -1
  411. package/dist/src/utils/PrefixedHashList.js +0 -28
  412. package/dist/src/utils/ProvableHashList.d.ts +0 -30
  413. package/dist/src/utils/ProvableHashList.d.ts.map +0 -1
  414. package/dist/src/utils/ProvableHashList.js +0 -43
  415. package/dist/utils/PrefixedHashList.d.ts +0 -14
  416. package/dist/utils/PrefixedHashList.d.ts.map +0 -1
  417. package/dist/utils/PrefixedHashList.js +0 -12
  418. package/dist/utils/Utils.d.ts +0 -17
  419. package/dist/utils/Utils.d.ts.map +0 -1
  420. package/dist/utils/Utils.js +0 -64
  421. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts +0 -25
  422. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts.map +0 -1
  423. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.js +0 -77
  424. package/dist/utils/merkletree/MemoryMerkleTreeStorage.d.ts +0 -26
  425. package/dist/utils/merkletree/MemoryMerkleTreeStorage.d.ts.map +0 -1
  426. package/dist/utils/merkletree/MemoryMerkleTreeStorage.js +0 -79
  427. package/dist/utils/merkletree/MerkleTreeStore.d.ts +0 -11
  428. package/dist/utils/merkletree/MerkleTreeStore.d.ts.map +0 -1
  429. package/dist/utils/merkletree/MerkleTreeStore.js +0 -1
  430. package/dist/utils/merkletree/RollupMerkleTree.d.ts +0 -130
  431. package/dist/utils/merkletree/RollupMerkleTree.d.ts.map +0 -1
  432. package/dist/utils/merkletree/RollupMerkleTree.js +0 -244
  433. package/src/model/Option.test.ts +0 -21
  434. package/src/model/transaction/ProtocolTransaction.ts +0 -25
  435. package/src/prover/statetransition/StateTransitionWitnessProvider.ts +0 -24
  436. package/src/prover/statetransition/StateTransitionWitnessProviderReference.ts +0 -17
  437. package/src/utils/merkletree/InMemoryMerkleTreeStorage.ts +0 -106
  438. package/src/utils/merkletree/MerkleTreeStore.ts +0 -15
  439. package/src/utils/merkletree/RollupMerkleTree.ts +0 -250
  440. package/src/utils/merkletree/VirtualMerkleTreeStore.ts +0 -21
  441. package/tsconfig.test.json +0 -9
@@ -0,0 +1,145 @@
1
+ import {
2
+ AreProofsEnabled,
3
+ ChildContainerProvider,
4
+ ModuleContainer,
5
+ ModulesRecord,
6
+ TypedClass,
7
+ noop,
8
+ StringKeyOf,
9
+ } from "@proto-kit/common";
10
+ import { Field, PublicKey, SmartContract } from "o1js";
11
+ import { injectable } from "tsyringe";
12
+
13
+ import { ProtocolEnvironment } from "../protocol/ProtocolEnvironment";
14
+ import { ProtocolModule } from "../protocol/ProtocolModule";
15
+
16
+ import { ContractModule } from "./ContractModule";
17
+ import { DispatchContractProtocolModule } from "./contracts/DispatchContractProtocolModule";
18
+ import { DispatchContractType } from "./contracts/DispatchSmartContract";
19
+ import {
20
+ SettlementContractConfig,
21
+ SettlementContractProtocolModule,
22
+ } from "./contracts/SettlementContractProtocolModule";
23
+ import { SettlementContractType } from "./contracts/SettlementSmartContract";
24
+ import { BridgeContractType } from "./contracts/BridgeContract";
25
+ import {
26
+ BridgeContractConfig,
27
+ BridgeContractProtocolModule,
28
+ } from "./contracts/BridgeContractProtocolModule";
29
+ import { GetContracts } from "./modularity/types";
30
+
31
+ export type SettlementModulesRecord = ModulesRecord<
32
+ TypedClass<ContractModule<unknown, unknown>>
33
+ >;
34
+
35
+ export type MandatorySettlementModulesRecord = {
36
+ SettlementContract: TypedClass<
37
+ ContractModule<SettlementContractType, SettlementContractConfig>
38
+ >;
39
+ DispatchContract: TypedClass<ContractModule<DispatchContractType, unknown>>;
40
+ BridgeContract: TypedClass<
41
+ ContractModule<BridgeContractType, BridgeContractConfig>
42
+ >;
43
+ };
44
+
45
+ @injectable()
46
+ export class SettlementContractModule<
47
+ SettlementModules extends SettlementModulesRecord &
48
+ MandatorySettlementModulesRecord,
49
+ >
50
+ extends ModuleContainer<SettlementModules>
51
+ implements ProtocolModule<unknown>
52
+ {
53
+ public constructor(definition: SettlementModules) {
54
+ super(definition);
55
+ }
56
+
57
+ public static from<
58
+ SettlementModules extends SettlementModulesRecord &
59
+ MandatorySettlementModulesRecord,
60
+ >(
61
+ modules: SettlementModules
62
+ ): TypedClass<SettlementContractModule<SettlementModules>> {
63
+ return class ScopedSettlementContractModule extends SettlementContractModule<SettlementModules> {
64
+ public constructor() {
65
+ super(modules);
66
+ }
67
+ };
68
+ }
69
+
70
+ public static mandatoryModules() {
71
+ return {
72
+ SettlementContract: SettlementContractProtocolModule,
73
+ DispatchContract: DispatchContractProtocolModule,
74
+ BridgeContract: BridgeContractProtocolModule,
75
+ } as const;
76
+ }
77
+
78
+ public static fromDefaults() {
79
+ return SettlementContractModule.from(
80
+ SettlementContractModule.mandatoryModules()
81
+ );
82
+ }
83
+
84
+ public static with<AdditionalModules extends SettlementModulesRecord>(
85
+ additionalModules: AdditionalModules
86
+ ) {
87
+ return SettlementContractModule.from({
88
+ ...SettlementContractModule.mandatoryModules(),
89
+ ...additionalModules,
90
+ } as const);
91
+ }
92
+
93
+ // ** For protocol module
94
+ public protocol?: ProtocolEnvironment;
95
+
96
+ public get areProofsEnabled(): AreProofsEnabled | undefined {
97
+ return this.protocol?.getAreProofsEnabled();
98
+ }
99
+ // **
100
+
101
+ public create(childContainerProvider: ChildContainerProvider) {
102
+ super.create(childContainerProvider);
103
+ }
104
+
105
+ public async start() {
106
+ noop();
107
+ }
108
+
109
+ public getContractClasses(): GetContracts<SettlementModules> {
110
+ const contracts =
111
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
112
+ (this.moduleNames as StringKeyOf<SettlementModules>[]).map((name) => {
113
+ const module = this.resolve(name);
114
+ return [name, module.contractFactory()];
115
+ });
116
+ return Object.fromEntries(contracts);
117
+ }
118
+
119
+ public createContracts(addresses: {
120
+ settlement: PublicKey;
121
+ dispatch: PublicKey;
122
+ }): {
123
+ settlement: SettlementContractType & SmartContract;
124
+ dispatch: DispatchContractType & SmartContract;
125
+ } {
126
+ const { DispatchContract, SettlementContract } = this.getContractClasses();
127
+
128
+ const dispatchInstance = new DispatchContract(addresses.dispatch);
129
+ const settlementInstance = new SettlementContract(addresses.settlement);
130
+
131
+ return {
132
+ dispatch: dispatchInstance,
133
+ settlement: settlementInstance,
134
+ };
135
+ }
136
+
137
+ public createBridgeContract(
138
+ address: PublicKey,
139
+ tokenId?: Field
140
+ ): BridgeContractType & SmartContract {
141
+ const { BridgeContract } = this.getContractClasses();
142
+
143
+ return new BridgeContract(address, tokenId);
144
+ }
145
+ }
@@ -0,0 +1,366 @@
1
+ import {
2
+ AccountUpdate,
3
+ Bool,
4
+ Experimental,
5
+ Field,
6
+ method,
7
+ Permissions,
8
+ Poseidon,
9
+ Provable,
10
+ PublicKey,
11
+ SmartContract,
12
+ State,
13
+ state,
14
+ Struct,
15
+ TokenContractV2,
16
+ TokenId,
17
+ VerificationKey,
18
+ } from "o1js";
19
+ import { noop, range, TypedClass } from "@proto-kit/common";
20
+ import { container, injectable, singleton } from "tsyringe";
21
+
22
+ import {
23
+ OUTGOING_MESSAGE_BATCH_SIZE,
24
+ OutgoingMessageArgumentBatch,
25
+ createMessageStruct,
26
+ OutgoingMessageArgument,
27
+ } from "../messages/OutgoingMessageArgument";
28
+ import { Path } from "../../model/Path";
29
+ import { OutgoingMessageProcessor } from "../modularity/OutgoingMessageProcessor";
30
+ import { PROTOKIT_FIELD_PREFIXES } from "../../hashing/protokit-prefixes";
31
+
32
+ import type { SettlementContractType } from "./SettlementSmartContract";
33
+
34
+ export type BridgeContractType = {
35
+ stateRoot: State<Field>;
36
+ outgoingMessageCursor: State<Field>;
37
+
38
+ rollupOutgoingMessages: (
39
+ batch: OutgoingMessageArgumentBatch
40
+ ) => Promise<Field>;
41
+ redeem: (additionUpdate: AccountUpdate) => Promise<void>;
42
+
43
+ deployProvable: (
44
+ args: VerificationKey | undefined,
45
+ signedSettlement: boolean,
46
+ permissions: Permissions,
47
+ settlementContractAddress: PublicKey
48
+ ) => Promise<AccountUpdate>;
49
+
50
+ updateStateRoot: (root: Field) => Promise<void>;
51
+ };
52
+
53
+ // Equal to WithdrawalKey
54
+ export class OutgoingMessageKey extends Struct({
55
+ index: Field,
56
+ tokenId: Field,
57
+ }) {}
58
+
59
+ @injectable()
60
+ @singleton()
61
+ export class BridgeContractContext {
62
+ public data: {
63
+ messageInputs: any[][];
64
+ } = { messageInputs: [] };
65
+ }
66
+
67
+ export abstract class BridgeContractBase extends TokenContractV2 {
68
+ public static args: {
69
+ SettlementContract:
70
+ | (TypedClass<SettlementContractType> & typeof SmartContract)
71
+ | undefined;
72
+ messageProcessors: OutgoingMessageProcessor<unknown>[];
73
+ batchSize?: number;
74
+ };
75
+
76
+ public constructor(address: PublicKey, tokenId?: Field) {
77
+ super(address, tokenId);
78
+ }
79
+
80
+ abstract settlementContractAddress: State<PublicKey>;
81
+
82
+ abstract stateRoot: State<Field>;
83
+
84
+ abstract outgoingMessageCursor: State<Field>;
85
+
86
+ /**
87
+ * Function to deploy the bridging contract in a provable way, so that it can be
88
+ * a provable process initiated by the settlement contract with a baked-in vk
89
+ *
90
+ * @returns Creates and returns an account update deploying the bridge contract
91
+ */
92
+ public async deployProvable(
93
+ verificationKey: VerificationKey | undefined,
94
+ signedSettlement: boolean,
95
+ permissions: Permissions,
96
+ settlementContractAddress: PublicKey
97
+ ) {
98
+ const accountUpdate = this.self;
99
+
100
+ if (!signedSettlement) {
101
+ if (verificationKey === undefined) {
102
+ throw new Error("Verification Key not provided, can't deploy");
103
+ }
104
+ accountUpdate.account.verificationKey.set(verificationKey);
105
+ }
106
+
107
+ accountUpdate.requireSignature();
108
+ this.account.permissions.set(permissions);
109
+
110
+ range(0, 8).forEach((i) => {
111
+ accountUpdate.update.appState[i] = {
112
+ isSome: Bool(true),
113
+ value: Field(0),
114
+ };
115
+ });
116
+
117
+ this.settlementContractAddress.set(settlementContractAddress);
118
+
119
+ accountUpdate.body.mayUseToken = {
120
+ // Set to true for custom tokens only
121
+ inheritFromParent: accountUpdate.tokenId.equals(TokenId.default).not(),
122
+ parentsOwnToken: Bool(false),
123
+ };
124
+
125
+ return accountUpdate;
126
+ }
127
+
128
+ public async approveBase(): Promise<void> {
129
+ noop();
130
+ }
131
+
132
+ public async updateStateRootBase(root: Field) {
133
+ // It's fine for us to only store the actual root since we only have to
134
+ // witness values, not update/insert
135
+ this.stateRoot.set(root);
136
+
137
+ const settlementContractAddress =
138
+ this.settlementContractAddress.getAndRequireEquals();
139
+ const SettlementContractClass = BridgeContractBase.args.SettlementContract;
140
+ if (SettlementContractClass === undefined) {
141
+ throw new Error(
142
+ "Settlement Contract class hasn't been set yet, something is wrong with your module composition"
143
+ );
144
+ }
145
+ const settlementContract = new SettlementContractClass(
146
+ settlementContractAddress
147
+ );
148
+ const accountUpdate = settlementContract.assertStateRoot(root);
149
+ this.approve(accountUpdate);
150
+ }
151
+
152
+ private batchSize() {
153
+ return BridgeContractBase.args.batchSize ?? OUTGOING_MESSAGE_BATCH_SIZE;
154
+ }
155
+
156
+ private executeProcessors(batchIndex: number, args: OutgoingMessageArgument) {
157
+ return BridgeContractBase.args.messageProcessors.map((processor, j) => {
158
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
159
+ const value = Experimental.memoizeWitness(processor.type, () => {
160
+ return container.resolve(BridgeContractContext).data.messageInputs[
161
+ batchIndex
162
+ ][j];
163
+ });
164
+
165
+ const MessageType = createMessageStruct(processor.type);
166
+ const message = new MessageType({
167
+ messageType: args.messageType,
168
+ value,
169
+ });
170
+ return {
171
+ messageType: args.messageType,
172
+ result: processor.processMessage(value, {
173
+ bridgeContract: {
174
+ publicKey: this.address,
175
+ tokenId: this.tokenId,
176
+ },
177
+ }),
178
+ hash: Poseidon.hash(MessageType.toFields(message)),
179
+ };
180
+ });
181
+ }
182
+
183
+ public processMessage(
184
+ batchIndex: number,
185
+ args: OutgoingMessageArgument,
186
+ isDummy: Bool
187
+ ) {
188
+ const results = this.executeProcessors(batchIndex, args);
189
+
190
+ const maxAccountUpdates = Math.max(
191
+ 0,
192
+ ...results.map(({ result: { accountUpdates } }) => accountUpdates.length)
193
+ );
194
+ const AccountUpdateArray = Provable.Array(AccountUpdate, maxAccountUpdates);
195
+
196
+ const dummyMessageType =
197
+ PROTOKIT_FIELD_PREFIXES.OUTGOING_MESSAGE_DUMMY_TYPE;
198
+ const argMessageType = Provable.if(
199
+ isDummy,
200
+ dummyMessageType,
201
+ args.messageType
202
+ );
203
+ const dummyAU = AccountUpdate.dummy();
204
+
205
+ const chosen = results
206
+ .map((a) => {
207
+ a.result.accountUpdates = a.result.accountUpdates.concat(
208
+ ...Array<AccountUpdate>(
209
+ maxAccountUpdates - a.result.accountUpdates.length
210
+ ).fill(dummyAU)
211
+ );
212
+ return a;
213
+ })
214
+ .concat({
215
+ messageType: dummyMessageType,
216
+ hash: Field(0),
217
+ result: {
218
+ accountUpdates: Array<AccountUpdate>(maxAccountUpdates).fill(dummyAU),
219
+ status: Bool(true),
220
+ statusMessage: undefined,
221
+ },
222
+ })
223
+ .reduce((a, b) => {
224
+ const isA = a.messageType.equals(argMessageType);
225
+
226
+ const messageType = Provable.if(isA, a.messageType, b.messageType);
227
+ const hash = Provable.if(isA, a.hash, b.hash);
228
+ const accountUpdates = Provable.if(
229
+ isA,
230
+ AccountUpdateArray,
231
+ a.result.accountUpdates,
232
+ b.result.accountUpdates
233
+ );
234
+ const status = Provable.if(isA, a.result.status, b.result.status);
235
+ let statusMessage: string | undefined = undefined;
236
+ Provable.asProver(() => {
237
+ if (isA.toBoolean()) {
238
+ statusMessage = a.result.statusMessage;
239
+ } else {
240
+ statusMessage = b.result.statusMessage;
241
+ }
242
+ });
243
+
244
+ return {
245
+ messageType,
246
+ hash,
247
+ result: { accountUpdates, status, statusMessage },
248
+ };
249
+ });
250
+
251
+ // If no processor picks up our message type, the reduce above returns
252
+ // the first candidate. This statement asserts that this is not the case
253
+ chosen.messageType.assertEquals(
254
+ argMessageType,
255
+ "No processor found for message type"
256
+ );
257
+
258
+ return chosen;
259
+ }
260
+
261
+ public async rollupOutgoingMessagesBase(batch: OutgoingMessageArgumentBatch) {
262
+ let counter = this.outgoingMessageCursor.getAndRequireEquals();
263
+ const stateRoot = this.stateRoot.getAndRequireEquals();
264
+
265
+ // Count account creation fee to return later, so that the sender can fund
266
+ // those accounts with a separate AU
267
+ let accountCreationFeePaid = Field(0);
268
+
269
+ for (let i = 0; i < this.batchSize(); i++) {
270
+ const args = batch.arguments[i];
271
+
272
+ const isDummy = batch.isDummys[i];
273
+
274
+ const message = this.processMessage(i, args, isDummy);
275
+
276
+ // Check witness
277
+ const path = Path.fromKey(
278
+ PROTOKIT_FIELD_PREFIXES.OUTGOING_MESSAGE_BASE_PATH,
279
+ OutgoingMessageKey,
280
+ {
281
+ index: counter,
282
+ tokenId: this.tokenId,
283
+ }
284
+ );
285
+
286
+ args.witness
287
+ .checkMembership(stateRoot, path, message.hash)
288
+ .or(isDummy)
289
+ .assertTrue("Provided Withdrawal witness not valid");
290
+
291
+ message.result.status.assertTrue(message.result.statusMessage);
292
+
293
+ message.result.accountUpdates.forEach((accountUpdate) => {
294
+ Provable.log("Approving account update", accountUpdate.label);
295
+ this.approve(accountUpdate);
296
+ });
297
+ counter = counter.add(Provable.if(isDummy, Field(0), Field(1)));
298
+
299
+ // Track new accounts to be able to know how much new accounts to fund
300
+ const newAccounts = message.result.accountUpdates
301
+ .map((accountUpdate) => {
302
+ const isNew = accountUpdate.account.isNew.getAndRequireEquals();
303
+ return Provable.if(isNew, Field(1), Field(0));
304
+ })
305
+ .reduce((a, b) => a.add(b));
306
+ accountCreationFeePaid = accountCreationFeePaid.add(newAccounts);
307
+ }
308
+
309
+ this.outgoingMessageCursor.set(counter);
310
+
311
+ return accountCreationFeePaid;
312
+ }
313
+
314
+ protected async redeemBase(additionUpdate: AccountUpdate) {
315
+ additionUpdate.body.tokenId.assertEquals(
316
+ this.tokenId,
317
+ "Tokenid not same as this bridging contract's tokenId"
318
+ );
319
+ additionUpdate.body.balanceChange.sgn
320
+ .isPositive()
321
+ .assertTrue("Sign not correct");
322
+ const amount = additionUpdate.body.balanceChange.magnitude;
323
+
324
+ // Burn tokens
325
+ this.internal.burn({
326
+ address: additionUpdate.publicKey,
327
+ amount,
328
+ });
329
+
330
+ // Inherit from parent for custom tokens
331
+ additionUpdate.body.mayUseToken = {
332
+ inheritFromParent: this.tokenId.equals(TokenId.default).not(),
333
+ parentsOwnToken: Bool(false),
334
+ };
335
+
336
+ // Send mina
337
+ this.approve(additionUpdate);
338
+ this.balance.subInPlace(amount);
339
+ }
340
+ }
341
+
342
+ export class BridgeContract
343
+ extends BridgeContractBase
344
+ implements BridgeContractType
345
+ {
346
+ @state(PublicKey) public settlementContractAddress = State<PublicKey>();
347
+
348
+ @state(Field) public stateRoot = State<Field>();
349
+
350
+ @state(Field) public outgoingMessageCursor = State<Field>();
351
+
352
+ @method
353
+ public async updateStateRoot(root: Field) {
354
+ return await this.updateStateRootBase(root);
355
+ }
356
+
357
+ @method.returns(Field)
358
+ public async rollupOutgoingMessages(batch: OutgoingMessageArgumentBatch) {
359
+ return await this.rollupOutgoingMessagesBase(batch);
360
+ }
361
+
362
+ @method
363
+ public async redeem(additionUpdate: AccountUpdate) {
364
+ return await this.redeemBase(additionUpdate);
365
+ }
366
+ }
@@ -0,0 +1,48 @@
1
+ import { injectable, injectAll } from "tsyringe";
2
+ import { CompileRegistry } from "@proto-kit/common";
3
+
4
+ import { ContractModule } from "../ContractModule";
5
+ import { OutgoingMessageProcessor } from "../modularity/OutgoingMessageProcessor";
6
+
7
+ import {
8
+ BridgeContract,
9
+ BridgeContractBase,
10
+ BridgeContractType,
11
+ } from "./BridgeContract";
12
+
13
+ export type BridgeContractConfig = {
14
+ outgoingBatchSize?: number;
15
+ };
16
+
17
+ @injectable()
18
+ export class BridgeContractProtocolModule extends ContractModule<
19
+ BridgeContractType,
20
+ BridgeContractConfig
21
+ > {
22
+ public constructor(
23
+ @injectAll("OutgoingMessageProcessor", { isOptional: true })
24
+ private readonly messageProcessors: OutgoingMessageProcessor<unknown>[]
25
+ ) {
26
+ super();
27
+ }
28
+
29
+ public contractFactory() {
30
+ const { config } = this;
31
+
32
+ BridgeContractBase.args = {
33
+ SettlementContract: BridgeContractBase.args?.SettlementContract,
34
+ messageProcessors: this.messageProcessors,
35
+ batchSize: config.outgoingBatchSize,
36
+ };
37
+
38
+ return BridgeContract;
39
+ }
40
+
41
+ public async compile(registry: CompileRegistry) {
42
+ return {
43
+ BridgeContract: await registry.forceProverExists(
44
+ async () => await registry.compile(BridgeContract)
45
+ ),
46
+ };
47
+ }
48
+ }
@@ -0,0 +1,75 @@
1
+ import { inject, injectable } from "tsyringe";
2
+ import { PublicKey } from "o1js";
3
+ import { CompileRegistry } from "@proto-kit/common";
4
+
5
+ import { RuntimeLike, RuntimeMethodIdMapping } from "../../model/RuntimeLike";
6
+ import {
7
+ ContractModule,
8
+ SmartContractClassFromInterface,
9
+ } from "../ContractModule";
10
+
11
+ import {
12
+ DispatchSmartContract,
13
+ DispatchContractType,
14
+ DispatchSmartContractBase,
15
+ } from "./DispatchSmartContract";
16
+
17
+ export type DispatchContractConfig = {
18
+ incomingMessagesMethods: Record<string, `${string}.${string}`>;
19
+ };
20
+
21
+ @injectable()
22
+ export class DispatchContractProtocolModule extends ContractModule<
23
+ DispatchContractType,
24
+ DispatchContractConfig
25
+ > {
26
+ public constructor(@inject("Runtime") private readonly runtime: RuntimeLike) {
27
+ super();
28
+ }
29
+
30
+ public eventsDefinition() {
31
+ return new DispatchSmartContract(PublicKey.empty<typeof PublicKey>())
32
+ .events;
33
+ }
34
+
35
+ private checkConfigIntegrity(
36
+ incomingMessagesMethods: Record<string, `${string}.${string}`>,
37
+ runtimeMethodIds: RuntimeMethodIdMapping
38
+ ) {
39
+ const missing = Object.values(incomingMessagesMethods).filter(
40
+ (method) => runtimeMethodIds[method] === undefined
41
+ );
42
+ if (missing.length > 0) {
43
+ throw new Error(
44
+ `Incoming messages config references a unknown methods: [${missing}]`
45
+ );
46
+ }
47
+ }
48
+
49
+ public contractFactory(): SmartContractClassFromInterface<DispatchContractType> {
50
+ const { incomingMessagesMethods } = this.config;
51
+ const methodIdMappings = this.runtime.methodIdResolver.methodIdMap();
52
+
53
+ this.checkConfigIntegrity(incomingMessagesMethods, methodIdMappings);
54
+
55
+ DispatchSmartContractBase.args = {
56
+ incomingMessagesPaths: incomingMessagesMethods,
57
+ methodIdMappings,
58
+ settlementContractClass:
59
+ DispatchSmartContractBase.args?.settlementContractClass,
60
+ };
61
+
62
+ return DispatchSmartContract;
63
+ }
64
+
65
+ public async compile(registry: CompileRegistry) {
66
+ if (DispatchSmartContractBase.args.settlementContractClass === undefined) {
67
+ throw new Error("Reference to Settlement Contract not set");
68
+ }
69
+ return {
70
+ DispatchSmartContract: await registry.forceProverExists(
71
+ async () => await registry.compile(DispatchSmartContract)
72
+ ),
73
+ };
74
+ }
75
+ }