@proto-kit/protocol 0.1.1-develop.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (333) hide show
  1. package/LICENSE.md +201 -0
  2. package/README.md +45 -0
  3. package/dist/Constants.d.ts +4 -0
  4. package/dist/Constants.d.ts.map +1 -0
  5. package/dist/Constants.js +4 -0
  6. package/dist/Constants.js.map +1 -0
  7. package/dist/hooks/AccountStateHook.d.ts +52 -0
  8. package/dist/hooks/AccountStateHook.d.ts.map +1 -0
  9. package/dist/hooks/AccountStateHook.js +48 -0
  10. package/dist/hooks/AccountStateHook.js.map +1 -0
  11. package/dist/hooks/BlockHeightHook.d.ts +7 -0
  12. package/dist/hooks/BlockHeightHook.d.ts.map +1 -0
  13. package/dist/hooks/BlockHeightHook.js +16 -0
  14. package/dist/hooks/BlockHeightHook.js.map +1 -0
  15. package/dist/hooks/LastStateRootBlockHook.d.ts +8 -0
  16. package/dist/hooks/LastStateRootBlockHook.d.ts.map +1 -0
  17. package/dist/hooks/LastStateRootBlockHook.js +16 -0
  18. package/dist/hooks/LastStateRootBlockHook.js.map +1 -0
  19. package/dist/hooks/NoopBlockHook.d.ts +9 -0
  20. package/dist/hooks/NoopBlockHook.d.ts.map +1 -0
  21. package/dist/hooks/NoopBlockHook.js +10 -0
  22. package/dist/hooks/NoopBlockHook.js.map +1 -0
  23. package/dist/hooks/NoopSettlementHook.d.ts +6 -0
  24. package/dist/hooks/NoopSettlementHook.d.ts.map +1 -0
  25. package/dist/hooks/NoopSettlementHook.js +18 -0
  26. package/dist/hooks/NoopSettlementHook.js.map +1 -0
  27. package/dist/hooks/NoopTransactionHook.d.ts +6 -0
  28. package/dist/hooks/NoopTransactionHook.d.ts.map +1 -0
  29. package/dist/hooks/NoopTransactionHook.js +8 -0
  30. package/dist/hooks/NoopTransactionHook.js.map +1 -0
  31. package/dist/index.d.ts +58 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +58 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/model/MethodPublicOutput.d.ts +113 -0
  36. package/dist/model/MethodPublicOutput.d.ts.map +1 -0
  37. package/dist/model/MethodPublicOutput.js +15 -0
  38. package/dist/model/MethodPublicOutput.js.map +1 -0
  39. package/dist/model/Option.d.ts +122 -0
  40. package/dist/model/Option.d.ts.map +1 -0
  41. package/dist/model/Option.js +111 -0
  42. package/dist/model/Option.js.map +1 -0
  43. package/dist/model/Path.d.ts +31 -0
  44. package/dist/model/Path.d.ts.map +1 -0
  45. package/dist/model/Path.js +43 -0
  46. package/dist/model/Path.js.map +1 -0
  47. package/dist/model/RuntimeLike.d.ts +11 -0
  48. package/dist/model/RuntimeLike.d.ts.map +1 -0
  49. package/dist/model/RuntimeLike.js +2 -0
  50. package/dist/model/RuntimeLike.js.map +1 -0
  51. package/dist/model/StateTransition.d.ts +135 -0
  52. package/dist/model/StateTransition.d.ts.map +1 -0
  53. package/dist/model/StateTransition.js +69 -0
  54. package/dist/model/StateTransition.js.map +1 -0
  55. package/dist/model/StateTransitionProvableBatch.d.ts +198 -0
  56. package/dist/model/StateTransitionProvableBatch.d.ts.map +1 -0
  57. package/dist/model/StateTransitionProvableBatch.js +91 -0
  58. package/dist/model/StateTransitionProvableBatch.js.map +1 -0
  59. package/dist/model/network/NetworkState.d.ts +160 -0
  60. package/dist/model/network/NetworkState.d.ts.map +1 -0
  61. package/dist/model/network/NetworkState.js +32 -0
  62. package/dist/model/network/NetworkState.js.map +1 -0
  63. package/dist/model/transaction/RuntimeTransaction.d.ts +122 -0
  64. package/dist/model/transaction/RuntimeTransaction.d.ts.map +1 -0
  65. package/dist/model/transaction/RuntimeTransaction.js +87 -0
  66. package/dist/model/transaction/RuntimeTransaction.js.map +1 -0
  67. package/dist/model/transaction/SignedTransaction.d.ts +107 -0
  68. package/dist/model/transaction/SignedTransaction.d.ts.map +1 -0
  69. package/dist/model/transaction/SignedTransaction.js +34 -0
  70. package/dist/model/transaction/SignedTransaction.js.map +1 -0
  71. package/dist/model/transaction/ValueOption.d.ts +173 -0
  72. package/dist/model/transaction/ValueOption.d.ts.map +1 -0
  73. package/dist/model/transaction/ValueOption.js +25 -0
  74. package/dist/model/transaction/ValueOption.js.map +1 -0
  75. package/dist/protocol/Protocol.d.ts +43 -0
  76. package/dist/protocol/Protocol.d.ts.map +1 -0
  77. package/dist/protocol/Protocol.js +120 -0
  78. package/dist/protocol/Protocol.js.map +1 -0
  79. package/dist/protocol/ProtocolEnvironment.d.ts +9 -0
  80. package/dist/protocol/ProtocolEnvironment.d.ts.map +1 -0
  81. package/dist/protocol/ProtocolEnvironment.js +2 -0
  82. package/dist/protocol/ProtocolEnvironment.js.map +1 -0
  83. package/dist/protocol/ProtocolModule.d.ts +9 -0
  84. package/dist/protocol/ProtocolModule.d.ts.map +1 -0
  85. package/dist/protocol/ProtocolModule.js +13 -0
  86. package/dist/protocol/ProtocolModule.js.map +1 -0
  87. package/dist/protocol/ProvableBlockHook.d.ts +8 -0
  88. package/dist/protocol/ProvableBlockHook.d.ts.map +1 -0
  89. package/dist/protocol/ProvableBlockHook.js +5 -0
  90. package/dist/protocol/ProvableBlockHook.js.map +1 -0
  91. package/dist/protocol/ProvableTransactionHook.d.ts +7 -0
  92. package/dist/protocol/ProvableTransactionHook.d.ts.map +1 -0
  93. package/dist/protocol/ProvableTransactionHook.js +4 -0
  94. package/dist/protocol/ProvableTransactionHook.js.map +1 -0
  95. package/dist/protocol/TransitioningProtocolModule.d.ts +10 -0
  96. package/dist/protocol/TransitioningProtocolModule.d.ts.map +1 -0
  97. package/dist/protocol/TransitioningProtocolModule.js +9 -0
  98. package/dist/protocol/TransitioningProtocolModule.js.map +1 -0
  99. package/dist/prover/block/BlockProvable.d.ts +409 -0
  100. package/dist/prover/block/BlockProvable.d.ts.map +1 -0
  101. package/dist/prover/block/BlockProvable.js +48 -0
  102. package/dist/prover/block/BlockProvable.js.map +1 -0
  103. package/dist/prover/block/BlockProver.d.ts +94 -0
  104. package/dist/prover/block/BlockProver.d.ts.map +1 -0
  105. package/dist/prover/block/BlockProver.js +510 -0
  106. package/dist/prover/block/BlockProver.js.map +1 -0
  107. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts +64 -0
  108. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts.map +1 -0
  109. package/dist/prover/block/accummulators/BlockHashMerkleTree.js +17 -0
  110. package/dist/prover/block/accummulators/BlockHashMerkleTree.js.map +1 -0
  111. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.d.ts +139 -0
  112. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.d.ts.map +1 -0
  113. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js +21 -0
  114. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js.map +1 -0
  115. package/dist/prover/block/services/RuntimeVerificationKeyRootService.d.ts +7 -0
  116. package/dist/prover/block/services/RuntimeVerificationKeyRootService.d.ts.map +1 -0
  117. package/dist/prover/block/services/RuntimeVerificationKeyRootService.js +23 -0
  118. package/dist/prover/block/services/RuntimeVerificationKeyRootService.js.map +1 -0
  119. package/dist/prover/statetransition/StateTransitionProvable.d.ts +172 -0
  120. package/dist/prover/statetransition/StateTransitionProvable.d.ts.map +1 -0
  121. package/dist/prover/statetransition/StateTransitionProvable.js +16 -0
  122. package/dist/prover/statetransition/StateTransitionProvable.js.map +1 -0
  123. package/dist/prover/statetransition/StateTransitionProver.d.ts +48 -0
  124. package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -0
  125. package/dist/prover/statetransition/StateTransitionProver.js +187 -0
  126. package/dist/prover/statetransition/StateTransitionProver.js.map +1 -0
  127. package/dist/settlement/ContractModule.d.ts +16 -0
  128. package/dist/settlement/ContractModule.d.ts.map +1 -0
  129. package/dist/settlement/ContractModule.js +12 -0
  130. package/dist/settlement/ContractModule.js.map +1 -0
  131. package/dist/settlement/SettlementContractModule.d.ts +53 -0
  132. package/dist/settlement/SettlementContractModule.d.ts.map +1 -0
  133. package/dist/settlement/SettlementContractModule.js +80 -0
  134. package/dist/settlement/SettlementContractModule.js.map +1 -0
  135. package/dist/settlement/contracts/BridgeContract.d.ts +97 -0
  136. package/dist/settlement/contracts/BridgeContract.d.ts.map +1 -0
  137. package/dist/settlement/contracts/BridgeContract.js +164 -0
  138. package/dist/settlement/contracts/BridgeContract.js.map +1 -0
  139. package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts +14 -0
  140. package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts.map +1 -0
  141. package/dist/settlement/contracts/BridgeContractProtocolModule.js +30 -0
  142. package/dist/settlement/contracts/BridgeContractProtocolModule.js.map +1 -0
  143. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts +21 -0
  144. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts.map +1 -0
  145. package/dist/settlement/contracts/DispatchContractProtocolModule.js +57 -0
  146. package/dist/settlement/contracts/DispatchContractProtocolModule.js.map +1 -0
  147. package/dist/settlement/contracts/DispatchSmartContract.d.ts +44 -0
  148. package/dist/settlement/contracts/DispatchSmartContract.d.ts.map +1 -0
  149. package/dist/settlement/contracts/DispatchSmartContract.js +230 -0
  150. package/dist/settlement/contracts/DispatchSmartContract.js.map +1 -0
  151. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts +21 -0
  152. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts.map +1 -0
  153. package/dist/settlement/contracts/SettlementContractProtocolModule.js +82 -0
  154. package/dist/settlement/contracts/SettlementContractProtocolModule.js.map +1 -0
  155. package/dist/settlement/contracts/SettlementSmartContract.d.ts +123 -0
  156. package/dist/settlement/contracts/SettlementSmartContract.d.ts.map +1 -0
  157. package/dist/settlement/contracts/SettlementSmartContract.js +309 -0
  158. package/dist/settlement/contracts/SettlementSmartContract.js.map +1 -0
  159. package/dist/settlement/contracts/TokenBridgeTree.d.ts +228 -0
  160. package/dist/settlement/contracts/TokenBridgeTree.d.ts.map +1 -0
  161. package/dist/settlement/contracts/TokenBridgeTree.js +60 -0
  162. package/dist/settlement/contracts/TokenBridgeTree.js.map +1 -0
  163. package/dist/settlement/contracts/authorizations/ContractAuthorization.d.ts +10 -0
  164. package/dist/settlement/contracts/authorizations/ContractAuthorization.d.ts.map +1 -0
  165. package/dist/settlement/contracts/authorizations/ContractAuthorization.js +2 -0
  166. package/dist/settlement/contracts/authorizations/ContractAuthorization.js.map +1 -0
  167. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.d.ts +85 -0
  168. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.d.ts.map +1 -0
  169. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.js +11 -0
  170. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.js.map +1 -0
  171. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.d.ts +79 -0
  172. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.d.ts.map +1 -0
  173. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.js +11 -0
  174. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.js.map +1 -0
  175. package/dist/settlement/messages/Deposit.d.ts +77 -0
  176. package/dist/settlement/messages/Deposit.d.ts.map +1 -0
  177. package/dist/settlement/messages/Deposit.js +8 -0
  178. package/dist/settlement/messages/Deposit.js.map +1 -0
  179. package/dist/settlement/messages/OutgoingMessageArgument.d.ts +197 -0
  180. package/dist/settlement/messages/OutgoingMessageArgument.d.ts.map +1 -0
  181. package/dist/settlement/messages/OutgoingMessageArgument.js +33 -0
  182. package/dist/settlement/messages/OutgoingMessageArgument.js.map +1 -0
  183. package/dist/settlement/messages/Withdrawal.d.ts +78 -0
  184. package/dist/settlement/messages/Withdrawal.d.ts.map +1 -0
  185. package/dist/settlement/messages/Withdrawal.js +16 -0
  186. package/dist/settlement/messages/Withdrawal.js.map +1 -0
  187. package/dist/settlement/modularity/ProvableSettlementHook.d.ts +26 -0
  188. package/dist/settlement/modularity/ProvableSettlementHook.d.ts.map +1 -0
  189. package/dist/settlement/modularity/ProvableSettlementHook.js +4 -0
  190. package/dist/settlement/modularity/ProvableSettlementHook.js.map +1 -0
  191. package/dist/settlement/modularity/types.d.ts +8 -0
  192. package/dist/settlement/modularity/types.d.ts.map +1 -0
  193. package/dist/settlement/modularity/types.js +2 -0
  194. package/dist/settlement/modularity/types.js.map +1 -0
  195. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts +11 -0
  196. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts.map +1 -0
  197. package/dist/settlement/modules/NetworkStateSettlementModule.js +15 -0
  198. package/dist/settlement/modules/NetworkStateSettlementModule.js.map +1 -0
  199. package/dist/state/State.d.ts +68 -0
  200. package/dist/state/State.d.ts.map +1 -0
  201. package/dist/state/State.js +130 -0
  202. package/dist/state/State.js.map +1 -0
  203. package/dist/state/StateMap.d.ts +37 -0
  204. package/dist/state/StateMap.d.ts.map +1 -0
  205. package/dist/state/StateMap.js +56 -0
  206. package/dist/state/StateMap.js.map +1 -0
  207. package/dist/state/StateService.d.ts +6 -0
  208. package/dist/state/StateService.d.ts.map +1 -0
  209. package/dist/state/StateService.js +2 -0
  210. package/dist/state/StateService.js.map +1 -0
  211. package/dist/state/StateServiceProvider.d.ts +8 -0
  212. package/dist/state/StateServiceProvider.d.ts.map +1 -0
  213. package/dist/state/StateServiceProvider.js +37 -0
  214. package/dist/state/StateServiceProvider.js.map +1 -0
  215. package/dist/state/assert/assert.d.ts +12 -0
  216. package/dist/state/assert/assert.d.ts.map +1 -0
  217. package/dist/state/assert/assert.js +31 -0
  218. package/dist/state/assert/assert.js.map +1 -0
  219. package/dist/state/context/RuntimeMethodExecutionContext.d.ts +193 -0
  220. package/dist/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -0
  221. package/dist/state/context/RuntimeMethodExecutionContext.js +136 -0
  222. package/dist/state/context/RuntimeMethodExecutionContext.js.map +1 -0
  223. package/dist/state/context/TransitionMethodExecutionContext.d.ts +23 -0
  224. package/dist/state/context/TransitionMethodExecutionContext.d.ts.map +1 -0
  225. package/dist/state/context/TransitionMethodExecutionContext.js +6 -0
  226. package/dist/state/context/TransitionMethodExecutionContext.js.map +1 -0
  227. package/dist/state/protocol/ProtocolState.d.ts +7 -0
  228. package/dist/state/protocol/ProtocolState.d.ts.map +1 -0
  229. package/dist/state/protocol/ProtocolState.js +40 -0
  230. package/dist/state/protocol/ProtocolState.js.map +1 -0
  231. package/dist/utils/MinaPrefixedProvableHashList.d.ts +24 -0
  232. package/dist/utils/MinaPrefixedProvableHashList.d.ts.map +1 -0
  233. package/dist/utils/MinaPrefixedProvableHashList.js +53 -0
  234. package/dist/utils/MinaPrefixedProvableHashList.js.map +1 -0
  235. package/dist/utils/PrefixedProvableHashList.d.ts +8 -0
  236. package/dist/utils/PrefixedProvableHashList.d.ts.map +1 -0
  237. package/dist/utils/PrefixedProvableHashList.js +13 -0
  238. package/dist/utils/PrefixedProvableHashList.js.map +1 -0
  239. package/dist/utils/ProvableHashList.d.ts +27 -0
  240. package/dist/utils/ProvableHashList.d.ts.map +1 -0
  241. package/dist/utils/ProvableHashList.js +44 -0
  242. package/dist/utils/ProvableHashList.js.map +1 -0
  243. package/dist/utils/ProvableReductionHashList.d.ts +14 -0
  244. package/dist/utils/ProvableReductionHashList.d.ts.map +1 -0
  245. package/dist/utils/ProvableReductionHashList.js +51 -0
  246. package/dist/utils/ProvableReductionHashList.js.map +1 -0
  247. package/dist/utils/StateTransitionReductionList.d.ts +11 -0
  248. package/dist/utils/StateTransitionReductionList.d.ts.map +1 -0
  249. package/dist/utils/StateTransitionReductionList.js +61 -0
  250. package/dist/utils/StateTransitionReductionList.js.map +1 -0
  251. package/dist/utils/utils.d.ts +11 -0
  252. package/dist/utils/utils.d.ts.map +1 -0
  253. package/dist/utils/utils.js +45 -0
  254. package/dist/utils/utils.js.map +1 -0
  255. package/jest.config.cjs +12 -0
  256. package/package.json +36 -0
  257. package/src/Constants.ts +3 -0
  258. package/src/hooks/AccountStateHook.ts +48 -0
  259. package/src/hooks/BlockHeightHook.ts +17 -0
  260. package/src/hooks/LastStateRootBlockHook.ts +26 -0
  261. package/src/hooks/NoopBlockHook.ts +21 -0
  262. package/src/hooks/NoopSettlementHook.ts +20 -0
  263. package/src/hooks/NoopTransactionHook.ts +10 -0
  264. package/src/index.ts +57 -0
  265. package/src/model/MethodPublicOutput.ts +14 -0
  266. package/src/model/Option.ts +172 -0
  267. package/src/model/Path.ts +50 -0
  268. package/src/model/RuntimeLike.ts +12 -0
  269. package/src/model/StateTransition.ts +88 -0
  270. package/src/model/StateTransitionProvableBatch.ts +145 -0
  271. package/src/model/Transaction.ts +31 -0
  272. package/src/model/network/NetworkState.ts +33 -0
  273. package/src/model/transaction/RuntimeTransaction.ts +105 -0
  274. package/src/model/transaction/SignedTransaction.ts +47 -0
  275. package/src/model/transaction/ValueOption.ts +28 -0
  276. package/src/protocol/Protocol.ts +226 -0
  277. package/src/protocol/ProtocolEnvironment.ts +10 -0
  278. package/src/protocol/ProtocolModule.ts +27 -0
  279. package/src/protocol/ProvableBlockHook.ts +19 -0
  280. package/src/protocol/ProvableTransactionHook.ts +13 -0
  281. package/src/protocol/TransitioningProtocolModule.ts +12 -0
  282. package/src/prover/block/BlockProvable.ts +99 -0
  283. package/src/prover/block/BlockProver.ts +990 -0
  284. package/src/prover/block/accummulators/BlockHashMerkleTree.ts +16 -0
  285. package/src/prover/block/accummulators/RuntimeVerificationKeyTree.ts +24 -0
  286. package/src/prover/block/services/RuntimeVerificationKeyRootService.ts +20 -0
  287. package/src/prover/statetransition/StateTransitionProvable.ts +41 -0
  288. package/src/prover/statetransition/StateTransitionProver.ts +377 -0
  289. package/src/settlement/ContractModule.ts +31 -0
  290. package/src/settlement/SettlementContractModule.ts +145 -0
  291. package/src/settlement/contracts/BridgeContract.ts +237 -0
  292. package/src/settlement/contracts/BridgeContractProtocolModule.ts +43 -0
  293. package/src/settlement/contracts/DispatchContractProtocolModule.ts +73 -0
  294. package/src/settlement/contracts/DispatchSmartContract.ts +326 -0
  295. package/src/settlement/contracts/SettlementContractProtocolModule.ts +108 -0
  296. package/src/settlement/contracts/SettlementSmartContract.ts +498 -0
  297. package/src/settlement/contracts/TokenBridgeTree.ts +73 -0
  298. package/src/settlement/contracts/authorizations/ContractAuthorization.ts +11 -0
  299. package/src/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.ts +16 -0
  300. package/src/settlement/contracts/authorizations/UpdateMessagesHashAuth.ts +16 -0
  301. package/src/settlement/messages/Deposit.ts +7 -0
  302. package/src/settlement/messages/OutgoingMessageArgument.ts +42 -0
  303. package/src/settlement/messages/Withdrawal.ts +16 -0
  304. package/src/settlement/modularity/ProvableSettlementHook.ts +36 -0
  305. package/src/settlement/modularity/types.ts +22 -0
  306. package/src/settlement/modules/NetworkStateSettlementModule.ts +42 -0
  307. package/src/state/State.ts +175 -0
  308. package/src/state/StateMap.ts +73 -0
  309. package/src/state/StateService.ts +6 -0
  310. package/src/state/StateServiceProvider.ts +37 -0
  311. package/src/state/assert/assert.ts +35 -0
  312. package/src/state/context/RuntimeMethodExecutionContext.ts +174 -0
  313. package/src/state/context/TransitionMethodExecutionContext.ts +26 -0
  314. package/src/state/protocol/ProtocolState.ts +61 -0
  315. package/src/utils/MinaPrefixedProvableHashList.ts +73 -0
  316. package/src/utils/PrefixedProvableHashList.ts +21 -0
  317. package/src/utils/ProvableHashList.ts +50 -0
  318. package/src/utils/ProvableReductionHashList.ts +68 -0
  319. package/src/utils/StateTransitionReductionList.ts +89 -0
  320. package/src/utils/utils.ts +75 -0
  321. package/test/BlockProver.test.ts +212 -0
  322. package/test/Protocol.test.ts +37 -0
  323. package/test/State.test.ts +45 -0
  324. package/test/StateTransition.test.ts +174 -0
  325. package/test/TestingProtocol.ts +52 -0
  326. package/test/compiling/types.ts +28 -0
  327. package/test/model/Option.test.ts +72 -0
  328. package/test/modularity/types.ts +35 -0
  329. package/test/state/assert/assert.test.ts +56 -0
  330. package/test/tsconfig.json +7 -0
  331. package/test/utils/ProvableReductionHashList.test.ts +117 -0
  332. package/test/utils.test.ts +27 -0
  333. package/tsconfig.json +8 -0
@@ -0,0 +1,237 @@
1
+ import {
2
+ AccountUpdate,
3
+ Bool,
4
+ Field,
5
+ method,
6
+ Permissions,
7
+ Poseidon,
8
+ Provable,
9
+ PublicKey,
10
+ SmartContract,
11
+ State,
12
+ state,
13
+ Struct,
14
+ TokenContractV2,
15
+ TokenId,
16
+ VerificationKey,
17
+ } from "o1js";
18
+ import { noop, range, TypedClass } from "@proto-kit/common";
19
+
20
+ import {
21
+ OUTGOING_MESSAGE_BATCH_SIZE,
22
+ OutgoingMessageArgumentBatch,
23
+ } from "../messages/OutgoingMessageArgument";
24
+ import { Path } from "../../model/Path";
25
+ import { Withdrawal } from "../messages/Withdrawal";
26
+
27
+ import type { SettlementContractType } from "./SettlementSmartContract";
28
+
29
+ export type BridgeContractType = {
30
+ stateRoot: State<Field>;
31
+ outgoingMessageCursor: State<Field>;
32
+
33
+ rollupOutgoingMessages: (
34
+ batch: OutgoingMessageArgumentBatch
35
+ ) => Promise<Field>;
36
+ redeem: (additionUpdate: AccountUpdate) => Promise<void>;
37
+
38
+ deployProvable: (
39
+ args: VerificationKey | undefined,
40
+ signedSettlement: boolean,
41
+ permissions: Permissions,
42
+ settlementContractAddress: PublicKey
43
+ ) => Promise<AccountUpdate>;
44
+
45
+ updateStateRoot: (root: Field) => Promise<void>;
46
+ };
47
+
48
+ // Equal to WithdrawalKey
49
+ export class OutgoingMessageKey extends Struct({
50
+ index: Field,
51
+ tokenId: Field,
52
+ }) {}
53
+
54
+ export abstract class BridgeContractBase extends TokenContractV2 {
55
+ public static args: {
56
+ SettlementContract:
57
+ | (TypedClass<SettlementContractType> & typeof SmartContract)
58
+ | undefined;
59
+ withdrawalStatePath: [string, string];
60
+ };
61
+
62
+ abstract settlementContractAddress: State<PublicKey>;
63
+
64
+ abstract stateRoot: State<Field>;
65
+
66
+ abstract outgoingMessageCursor: State<Field>;
67
+
68
+ /**
69
+ * Function to deploy the bridging contract in a provable way, so that it can be
70
+ * a provable process initiated by the settlement contract with a baked-in vk
71
+ *
72
+ * @returns Creates and returns an account update deploying the bridge contract
73
+ */
74
+ public async deployProvable(
75
+ verificationKey: VerificationKey | undefined,
76
+ signedSettlement: boolean,
77
+ permissions: Permissions,
78
+ settlementContractAddress: PublicKey
79
+ ) {
80
+ const accountUpdate = this.self;
81
+
82
+ if (!signedSettlement) {
83
+ if (verificationKey === undefined) {
84
+ throw new Error("Verification Key not provided, can't deploy");
85
+ }
86
+ accountUpdate.account.verificationKey.set(verificationKey);
87
+ }
88
+
89
+ accountUpdate.requireSignature();
90
+ this.account.permissions.set(permissions);
91
+
92
+ range(0, 8).forEach((i) => {
93
+ accountUpdate.update.appState[i] = {
94
+ isSome: Bool(true),
95
+ value: Field(0),
96
+ };
97
+ });
98
+
99
+ this.settlementContractAddress.set(settlementContractAddress);
100
+
101
+ accountUpdate.body.mayUseToken = {
102
+ // Set to true for custom tokens only
103
+ inheritFromParent: accountUpdate.tokenId.equals(TokenId.default).not(),
104
+ parentsOwnToken: Bool(false),
105
+ };
106
+
107
+ return accountUpdate;
108
+ }
109
+
110
+ public async approveBase(): Promise<void> {
111
+ noop();
112
+ }
113
+
114
+ public async updateStateRootBase(root: Field) {
115
+ this.stateRoot.set(root);
116
+
117
+ const settlementContractAddress =
118
+ this.settlementContractAddress.getAndRequireEquals();
119
+ const SettlementContractClass = BridgeContractBase.args.SettlementContract;
120
+ if (SettlementContractClass === undefined) {
121
+ throw new Error(
122
+ "Settlement Contract class hasn't been set yet, something is wrong with your module composition"
123
+ );
124
+ }
125
+ const settlementContract = new SettlementContractClass(
126
+ settlementContractAddress
127
+ );
128
+ const accountUpdate = settlementContract.assertStateRoot(root);
129
+ this.approve(accountUpdate);
130
+ }
131
+
132
+ public async rollupOutgoingMessagesBase(
133
+ batch: OutgoingMessageArgumentBatch
134
+ ): Promise<Field> {
135
+ let counter = this.outgoingMessageCursor.getAndRequireEquals();
136
+ const stateRoot = this.stateRoot.getAndRequireEquals();
137
+
138
+ const [withdrawalModule, withdrawalStateName] =
139
+ BridgeContractBase.args.withdrawalStatePath;
140
+ const mapPath = Path.fromProperty(withdrawalModule, withdrawalStateName);
141
+
142
+ // Count account creation fee to return later, so that the sender can fund
143
+ // those accounts with a separate AU
144
+ let accountCreationFeePaid = Field(0);
145
+
146
+ for (let i = 0; i < OUTGOING_MESSAGE_BATCH_SIZE; i++) {
147
+ const args = batch.arguments[i];
148
+
149
+ // Check witness
150
+ const path = Path.fromKey(mapPath, OutgoingMessageKey, {
151
+ index: counter,
152
+ tokenId: this.tokenId,
153
+ });
154
+
155
+ // Process message
156
+ const { address, amount } = args.value;
157
+ const isDummy = address.equals(this.address);
158
+
159
+ args.witness
160
+ .checkMembership(
161
+ stateRoot,
162
+ path,
163
+ Poseidon.hash(Withdrawal.toFields(args.value))
164
+ )
165
+ .or(isDummy)
166
+ .assertTrue("Provided Withdrawal witness not valid");
167
+
168
+ const tokenAu = this.internal.mint({ address, amount });
169
+ const isNewAccount = tokenAu.account.isNew.getAndRequireEquals();
170
+
171
+ accountCreationFeePaid = accountCreationFeePaid.add(
172
+ Provable.if(isNewAccount, Field(1e9), Field(0))
173
+ );
174
+
175
+ counter = counter.add(Provable.if(isDummy, Field(0), Field(1)));
176
+ }
177
+
178
+ this.outgoingMessageCursor.set(counter);
179
+
180
+ return accountCreationFeePaid;
181
+ }
182
+
183
+ protected async redeemBase(additionUpdate: AccountUpdate) {
184
+ additionUpdate.body.tokenId.assertEquals(
185
+ this.tokenId,
186
+ "Tokenid not same as this bridging contract's tokenId"
187
+ );
188
+ additionUpdate.body.balanceChange.sgn
189
+ .isPositive()
190
+ .assertTrue("Sign not correct");
191
+ const amount = additionUpdate.body.balanceChange.magnitude;
192
+
193
+ // Burn tokens
194
+ this.internal.burn({
195
+ address: additionUpdate.publicKey,
196
+ amount,
197
+ });
198
+
199
+ // Inherit from parent for custom tokens
200
+ additionUpdate.body.mayUseToken = {
201
+ inheritFromParent: this.tokenId.equals(TokenId.default).not(),
202
+ parentsOwnToken: Bool(false),
203
+ };
204
+
205
+ // Send mina
206
+ this.approve(additionUpdate);
207
+ this.balance.subInPlace(amount);
208
+ }
209
+ }
210
+
211
+ export class BridgeContract
212
+ extends BridgeContractBase
213
+ implements BridgeContractType
214
+ {
215
+ @state(PublicKey) public settlementContractAddress = State<PublicKey>();
216
+
217
+ @state(Field) public stateRoot = State<Field>();
218
+
219
+ @state(Field) public outgoingMessageCursor = State<Field>();
220
+
221
+ @method
222
+ public async updateStateRoot(root: Field) {
223
+ return await this.updateStateRootBase(root);
224
+ }
225
+
226
+ @method.returns(Field)
227
+ public async rollupOutgoingMessages(
228
+ batch: OutgoingMessageArgumentBatch
229
+ ): Promise<Field> {
230
+ return await this.rollupOutgoingMessagesBase(batch);
231
+ }
232
+
233
+ @method
234
+ public async redeem(additionUpdate: AccountUpdate) {
235
+ return await this.redeemBase(additionUpdate);
236
+ }
237
+ }
@@ -0,0 +1,43 @@
1
+ import { injectable } from "tsyringe";
2
+ import { CompileRegistry } from "@proto-kit/common";
3
+
4
+ import { ContractModule } from "../ContractModule";
5
+
6
+ import {
7
+ BridgeContract,
8
+ BridgeContractBase,
9
+ BridgeContractType,
10
+ } from "./BridgeContract";
11
+
12
+ export type BridgeContractConfig = {
13
+ withdrawalStatePath: `${string}.${string}`;
14
+ withdrawalEventName: string;
15
+ };
16
+
17
+ @injectable()
18
+ export class BridgeContractProtocolModule extends ContractModule<
19
+ BridgeContractType,
20
+ BridgeContractConfig
21
+ > {
22
+ public contractFactory() {
23
+ const { config } = this;
24
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
25
+ const withdrawalStatePathSplit = config.withdrawalStatePath.split(".") as [
26
+ string,
27
+ string,
28
+ ];
29
+
30
+ BridgeContractBase.args = {
31
+ withdrawalStatePath: withdrawalStatePathSplit,
32
+ SettlementContract: BridgeContractBase.args?.SettlementContract,
33
+ };
34
+
35
+ return BridgeContract;
36
+ }
37
+
38
+ public async compile(registry: CompileRegistry) {
39
+ return {
40
+ BridgeContract: await registry.compile(BridgeContract),
41
+ };
42
+ }
43
+ }
@@ -0,0 +1,73 @@
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.compile(DispatchSmartContract),
71
+ };
72
+ }
73
+ }
@@ -0,0 +1,326 @@
1
+ import {
2
+ AccountUpdate,
3
+ Bool,
4
+ Field,
5
+ method,
6
+ Poseidon,
7
+ Provable,
8
+ ProvableExtended,
9
+ PublicKey,
10
+ Reducer,
11
+ SmartContract,
12
+ State,
13
+ state,
14
+ TokenId,
15
+ UInt64,
16
+ } from "o1js";
17
+ import { InMemoryMerkleTreeStorage, TypedClass } from "@proto-kit/common";
18
+
19
+ import { RuntimeMethodIdMapping } from "../../model/RuntimeLike";
20
+ import { RuntimeTransaction } from "../../model/transaction/RuntimeTransaction";
21
+ import {
22
+ MinaActions,
23
+ MinaEvents,
24
+ } from "../../utils/MinaPrefixedProvableHashList";
25
+ import { Deposit } from "../messages/Deposit";
26
+
27
+ import type { SettlementContractType } from "./SettlementSmartContract";
28
+ import { TokenBridgeDeploymentAuth } from "./authorizations/TokenBridgeDeploymentAuth";
29
+ import { UpdateMessagesHashAuth } from "./authorizations/UpdateMessagesHashAuth";
30
+ import {
31
+ TokenBridgeAttestation,
32
+ TokenBridgeEntry,
33
+ TokenBridgeTree,
34
+ TokenBridgeTreeAddition,
35
+ TokenBridgeTreeWitness,
36
+ } from "./TokenBridgeTree";
37
+
38
+ export const ACTIONS_EMPTY_HASH = Reducer.initialActionState;
39
+
40
+ export interface DispatchContractType {
41
+ updateMessagesHash: (
42
+ executedMessagesHash: Field,
43
+ newPromisedMessagesHash: Field
44
+ ) => Promise<void>;
45
+ initialize: (settlementContract: PublicKey) => Promise<void>;
46
+ enableTokenDeposits: (
47
+ tokenId: Field,
48
+ bridgeContractAddress: PublicKey,
49
+ settlementContractAddress: PublicKey
50
+ ) => Promise<void>;
51
+
52
+ promisedMessagesHash: State<Field>;
53
+ }
54
+
55
+ const tokenBridgeRoot = new TokenBridgeTree(
56
+ new InMemoryMerkleTreeStorage()
57
+ ).getRoot();
58
+
59
+ export abstract class DispatchSmartContractBase extends SmartContract {
60
+ public static args: {
61
+ methodIdMappings: RuntimeMethodIdMapping;
62
+ incomingMessagesPaths: Record<string, `${string}.${string}`>;
63
+ settlementContractClass?: TypedClass<SettlementContractType> &
64
+ typeof SmartContract;
65
+ };
66
+
67
+ events = {
68
+ "token-bridge-added": TokenBridgeTreeAddition,
69
+ // We need a placeholder event here, so that o1js internally adds a identifier to the
70
+ // emitted event-fields. That will lead to the o1js API being able to distinguish the
71
+ // TokenBridgeEvents from the manually emitted events for the incoming messages
72
+ "incoming-message-placeholder": Field,
73
+ };
74
+
75
+ abstract promisedMessagesHash: State<Field>;
76
+
77
+ abstract honoredMessagesHash: State<Field>;
78
+
79
+ abstract settlementContract: State<PublicKey>;
80
+
81
+ abstract tokenBridgeRoot: State<Field>;
82
+
83
+ abstract tokenBridgeCount: State<Field>;
84
+
85
+ protected updateMessagesHashBase(
86
+ executedMessagesHash: Field,
87
+ newPromisedMessagesHash: Field
88
+ ) {
89
+ const promisedMessagesHash =
90
+ this.promisedMessagesHash.getAndRequireEquals();
91
+ this.honoredMessagesHash.getAndRequireEquals();
92
+
93
+ executedMessagesHash.assertEquals(promisedMessagesHash);
94
+
95
+ this.honoredMessagesHash.set(executedMessagesHash);
96
+
97
+ // Assert and apply new promisedMessagesHash
98
+ this.self.account.actionState.requireEquals(newPromisedMessagesHash);
99
+ this.promisedMessagesHash.set(newPromisedMessagesHash);
100
+
101
+ const settlementContractAddress =
102
+ this.settlementContract.getAndRequireEquals();
103
+ const settlementContract =
104
+ new DispatchSmartContractBase.args.settlementContractClass!(
105
+ settlementContractAddress
106
+ );
107
+
108
+ settlementContract.authorizationField.requireEquals(
109
+ new UpdateMessagesHashAuth({
110
+ target: this.address,
111
+ executedMessagesHash,
112
+ newPromisedMessagesHash,
113
+ }).hash()
114
+ );
115
+ this.approve(settlementContract.self);
116
+ }
117
+
118
+ protected initializeBase(settlementContract: PublicKey) {
119
+ this.promisedMessagesHash.getAndRequireEquals().assertEquals(Field(0));
120
+ this.honoredMessagesHash.getAndRequireEquals().assertEquals(Field(0));
121
+ this.settlementContract
122
+ .getAndRequireEquals()
123
+ .assertEquals(PublicKey.empty<typeof PublicKey>());
124
+
125
+ this.promisedMessagesHash.set(ACTIONS_EMPTY_HASH);
126
+ this.honoredMessagesHash.set(ACTIONS_EMPTY_HASH);
127
+ this.settlementContract.set(settlementContract);
128
+ }
129
+
130
+ protected dispatchMessage<Type>(
131
+ methodId: Field,
132
+ value: Type,
133
+ valueType: ProvableExtended<Type>
134
+ ) {
135
+ const args = valueType.toFields(value);
136
+ // Should be the same as RuntimeTransaction.hash
137
+ const argsHash = Poseidon.hash(args);
138
+ const runtimeTransaction = RuntimeTransaction.fromMessage({
139
+ methodId,
140
+ argsHash,
141
+ });
142
+
143
+ // Append tx to incomingMessagesHash
144
+ const actionData = runtimeTransaction.hashData();
145
+ const actionHash = MinaActions.actionHash(actionData);
146
+
147
+ this.self.body.actions = {
148
+ hash: actionHash,
149
+ data: [actionData],
150
+ };
151
+
152
+ // Find event index of placeholder event that we can use for manual event dispatching
153
+ const eventIndex = Object.keys(this.events)
154
+ .sort()
155
+ .indexOf("incoming-message-placeholder");
156
+ if (eventIndex === -1) {
157
+ throw new Error("Unknown event type for placeholder event");
158
+ }
159
+ const paddedArgs = [Field(eventIndex), ...args];
160
+
161
+ const eventHash = MinaEvents.eventHash(paddedArgs);
162
+ this.self.body.events = {
163
+ hash: eventHash,
164
+ data: [paddedArgs],
165
+ };
166
+ }
167
+
168
+ protected async enableTokenDepositsBase(
169
+ tokenId: Field,
170
+ bridgeContractAddress: PublicKey,
171
+ // Witness it here, since o1js doesn't fetch this state correctly since
172
+ // its updated in a parent AU
173
+ settlementContractAddress: PublicKey
174
+ // treeWitness: TokenBridgeTreeWitness
175
+ ) {
176
+ this.settlementContract.requireEquals(settlementContractAddress);
177
+ const settlementContract =
178
+ new DispatchSmartContractBase.args.settlementContractClass!(
179
+ settlementContractAddress
180
+ );
181
+
182
+ // Append bridge address to the tree
183
+ // TODO This not concurrent and will fail if multiple users deploy bridges at the same time
184
+ const counter = this.tokenBridgeCount.getAndRequireEquals();
185
+ const root = this.tokenBridgeRoot.getAndRequireEquals();
186
+
187
+ const treeWitness = await Provable.witnessAsync(
188
+ TokenBridgeTreeWitness,
189
+ async () => {
190
+ const tree = await TokenBridgeTree.buildTreeFromEvents(this);
191
+ return tree.getWitness(counter.toBigInt());
192
+ }
193
+ );
194
+
195
+ Provable.log(root);
196
+ treeWitness
197
+ .checkMembership(root, counter, Field(0))
198
+ .assertTrue("Bridge Tree Witness not valid");
199
+
200
+ const entry = new TokenBridgeEntry({
201
+ tokenId,
202
+ address: bridgeContractAddress,
203
+ });
204
+ const newRoot = treeWitness.calculateRoot(entry.hash());
205
+ this.tokenBridgeRoot.set(newRoot);
206
+ this.tokenBridgeCount.set(counter.add(1));
207
+
208
+ this.emitEvent(
209
+ "token-bridge-added",
210
+ new TokenBridgeTreeAddition({
211
+ index: counter,
212
+ value: entry,
213
+ })
214
+ );
215
+
216
+ // Authenticate call via callback
217
+ settlementContract.authorizationField.requireEquals(
218
+ new TokenBridgeDeploymentAuth({
219
+ target: this.address,
220
+ tokenId,
221
+ address: bridgeContractAddress,
222
+ }).hash()
223
+ );
224
+
225
+ this.approve(settlementContract.self);
226
+ }
227
+ }
228
+
229
+ export class DispatchSmartContract
230
+ extends DispatchSmartContractBase
231
+ implements DispatchContractType
232
+ {
233
+ @state(Field) public promisedMessagesHash = State<Field>();
234
+
235
+ @state(Field) public honoredMessagesHash = State<Field>();
236
+
237
+ @state(PublicKey) public settlementContract = State<PublicKey>();
238
+
239
+ @state(Field) public tokenBridgeRoot = State<Field>(tokenBridgeRoot);
240
+
241
+ @state(Field) public tokenBridgeCount = State<Field>();
242
+
243
+ @method
244
+ public async enableTokenDeposits(
245
+ tokenId: Field,
246
+ bridgeContractAddress: PublicKey,
247
+ settlementContractAddress: PublicKey
248
+ ) {
249
+ await this.enableTokenDepositsBase(
250
+ tokenId,
251
+ bridgeContractAddress,
252
+ settlementContractAddress
253
+ );
254
+ }
255
+
256
+ @method
257
+ public async updateMessagesHash(
258
+ executedMessagesHash: Field,
259
+ newPromisedMessagesHash: Field
260
+ ) {
261
+ return this.updateMessagesHashBase(
262
+ executedMessagesHash,
263
+ newPromisedMessagesHash
264
+ );
265
+ }
266
+
267
+ @method
268
+ public async initialize(settlementContract: PublicKey) {
269
+ return this.initializeBase(settlementContract);
270
+ }
271
+
272
+ @method
273
+ public async deposit(
274
+ amount: UInt64,
275
+ tokenId: Field,
276
+ bridgingContract: PublicKey,
277
+ bridgingContractAttestation: TokenBridgeAttestation,
278
+ l2Receiver: PublicKey
279
+ ) {
280
+ const childrenMayUseToken: AccountUpdate["body"]["mayUseToken"] = {
281
+ parentsOwnToken: Bool(false),
282
+ // MayUseToken has to be set only for custom tokens
283
+ inheritFromParent: tokenId.equals(TokenId.default).not(),
284
+ };
285
+
286
+ // Check that the bridgingContract parameter is valid => is in the offchain tree
287
+ const bridgeTreeRoot = this.tokenBridgeRoot.getAndRequireEquals();
288
+ const entry = new TokenBridgeEntry({
289
+ tokenId,
290
+ address: bridgingContract,
291
+ });
292
+
293
+ bridgingContractAttestation.witness
294
+ .checkMembership(
295
+ bridgeTreeRoot,
296
+ bridgingContractAttestation.index,
297
+ entry.hash()
298
+ )
299
+ .assertTrue("Bridging Contract Attestation not valid");
300
+
301
+ // Credit the amount to the settlement contract
302
+ const balanceAU = AccountUpdate.create(bridgingContract, tokenId);
303
+ balanceAU.balance.addInPlace(amount);
304
+ balanceAU.body.mayUseToken = childrenMayUseToken;
305
+ this.approve(balanceAU);
306
+
307
+ const action = new Deposit({
308
+ tokenId,
309
+ address: l2Receiver,
310
+ amount,
311
+ });
312
+
313
+ const { methodIdMappings, incomingMessagesPaths } =
314
+ DispatchSmartContractBase.args;
315
+
316
+ const methodId = Field(
317
+ methodIdMappings[incomingMessagesPaths.deposit].methodId
318
+ ).toConstant();
319
+ this.dispatchMessage(methodId.toConstant(), action, Deposit);
320
+
321
+ this.self.body.mayUseToken = {
322
+ parentsOwnToken: tokenId.equals(TokenId.default).not(),
323
+ inheritFromParent: Bool(false),
324
+ };
325
+ }
326
+ }