@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,60 @@
1
+ import { injectable, singleton } from "tsyringe";
2
+ import merge from "lodash/merge";
3
+
4
+ export interface StaticInitializationContract<Args> {
5
+ getInitializationArgs(): Args;
6
+ }
7
+
8
+ export type NaiveObjectSchema<Obj> = {
9
+ [Key in keyof Obj]: undefined extends Obj[Key] ? "Optional" : "Required";
10
+ };
11
+
12
+ /*
13
+ interface Test {
14
+ one: string;
15
+ two?: string;
16
+ }
17
+
18
+ const x: NaiveObjectSchema<Test> = {
19
+ one: "Required",
20
+ two: "Optional",
21
+ };
22
+ */
23
+
24
+ @injectable()
25
+ @singleton()
26
+ export class ContractArgsRegistry {
27
+ args: Record<string, any> = {};
28
+
29
+ public addArgs<Type>(name: string, addition: Partial<Type>) {
30
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
31
+ const args: Partial<Type> = this.args[name] ?? {};
32
+ this.args[name] = merge(args, addition);
33
+ }
34
+
35
+ public resetArgs(name: string) {
36
+ delete this.args[name];
37
+ }
38
+
39
+ public getArgs<Type>(name: string, schema: NaiveObjectSchema<Type>): Type {
40
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
41
+ const args = this.args[name] ?? {};
42
+
43
+ const missing = Object.entries<"Optional" | "Required">(schema).filter(
44
+ ([key, type]) => {
45
+ // We filter only if the key is required and isn't present
46
+ return type === "Required" && args[key] === undefined;
47
+ }
48
+ );
49
+
50
+ if (missing.length > 0) {
51
+ const missingKeys = missing.map(([key]) => key);
52
+ throw new Error(
53
+ `Contract args for ${name} not all present, ${missingKeys} are missing`
54
+ );
55
+ } else {
56
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
57
+ return args as Type;
58
+ }
59
+ }
60
+ }
@@ -0,0 +1,31 @@
1
+ import {
2
+ ArtifactRecord,
3
+ type CompilableModule,
4
+ CompileRegistry,
5
+ ConfigurableModule,
6
+ NoConfig,
7
+ TypedClass,
8
+ } from "@proto-kit/common";
9
+ import { SmartContract } from "o1js";
10
+
11
+ export type SmartContractClassFromInterface<Type> = typeof SmartContract &
12
+ TypedClass<Type>;
13
+
14
+ /**
15
+ * This module type is used to define a contract module that can be used to
16
+ * construct and inject smart contract instances.
17
+ * It defines a method contractFactory, whose arguments can be configured via
18
+ * the Argument generic. It returns a smart contract class that is a subclass
19
+ * of SmartContract and implements a certain interface as specified by the
20
+ * ContractType generic.
21
+ */
22
+ export abstract class ContractModule<ContractType, Config = NoConfig>
23
+ extends ConfigurableModule<Config>
24
+ implements CompilableModule
25
+ {
26
+ public abstract contractFactory(): SmartContractClassFromInterface<ContractType>;
27
+
28
+ public abstract compile(
29
+ registry: CompileRegistry
30
+ ): Promise<ArtifactRecord | undefined>;
31
+ }
@@ -0,0 +1,150 @@
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 { BridgingSettlementContractModule } from "./contracts/BridgingSettlementContractModule";
20
+ import { BridgeContractType } from "./contracts/BridgeContract";
21
+ import {
22
+ BridgeContractConfig,
23
+ BridgeContractProtocolModule,
24
+ } from "./contracts/BridgeContractProtocolModule";
25
+ import { GetContracts, InferContractType } from "./modularity/types";
26
+ import { BridgingSettlementContractType } from "./contracts/settlement/BridgingSettlementContract";
27
+ import { SettlementContractType } from "./contracts/settlement/SettlementBase";
28
+ import {
29
+ SettlementContractConfig,
30
+ SettlementSmartContractModule,
31
+ } from "./contracts/SettlementSmartContractModule";
32
+
33
+ export type SettlementModulesRecord = ModulesRecord<
34
+ TypedClass<ContractModule<unknown, unknown>>
35
+ >;
36
+
37
+ export type MandatorySettlementModulesRecord = {
38
+ SettlementContract: TypedClass<
39
+ ContractModule<SettlementContractType, SettlementContractConfig>
40
+ >;
41
+ };
42
+
43
+ export type BridgingSettlementModulesRecord = {
44
+ SettlementContract: TypedClass<
45
+ ContractModule<BridgingSettlementContractType, SettlementContractConfig>
46
+ >;
47
+ DispatchContract: TypedClass<ContractModule<DispatchContractType, unknown>>;
48
+ BridgeContract: TypedClass<
49
+ ContractModule<BridgeContractType, BridgeContractConfig>
50
+ >;
51
+ };
52
+
53
+ @injectable()
54
+ export class SettlementContractModule<
55
+ SettlementModules extends SettlementModulesRecord,
56
+ >
57
+ extends ModuleContainer<SettlementModules>
58
+ implements ProtocolModule<unknown>
59
+ {
60
+ public constructor(definition: SettlementModules) {
61
+ super(definition);
62
+ }
63
+
64
+ public static from<SettlementModules extends SettlementModulesRecord>(
65
+ modules: SettlementModules
66
+ ): TypedClass<SettlementContractModule<SettlementModules>> {
67
+ return class ScopedSettlementContractModule extends SettlementContractModule<SettlementModules> {
68
+ public constructor() {
69
+ super(modules);
70
+ }
71
+ };
72
+ }
73
+
74
+ public static settlementOnly() {
75
+ return {
76
+ SettlementContract: SettlementSmartContractModule,
77
+ } as const;
78
+ }
79
+
80
+ public static settlementAndBridging() {
81
+ return {
82
+ SettlementContract: BridgingSettlementContractModule,
83
+ DispatchContract: DispatchContractProtocolModule,
84
+ BridgeContract: BridgeContractProtocolModule,
85
+ } as const;
86
+ }
87
+
88
+ // ** For protocol module
89
+ public protocol?: ProtocolEnvironment;
90
+
91
+ public get areProofsEnabled(): AreProofsEnabled | undefined {
92
+ return this.protocol?.getAreProofsEnabled();
93
+ }
94
+ // **
95
+
96
+ public create(childContainerProvider: ChildContainerProvider) {
97
+ super.create(childContainerProvider);
98
+ }
99
+
100
+ public async start() {
101
+ noop();
102
+ }
103
+
104
+ public getContractClasses(): GetContracts<SettlementModules> {
105
+ const contracts =
106
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
107
+ (this.moduleNames as StringKeyOf<SettlementModules>[]).map((name) => {
108
+ const module = this.resolve(name);
109
+ return [name, module.contractFactory()];
110
+ });
111
+ return Object.fromEntries(contracts);
112
+ }
113
+
114
+ public createContract<ContractName extends StringKeyOf<SettlementModules>>(
115
+ contractName: ContractName,
116
+ address: PublicKey,
117
+ tokenId?: Field
118
+ ): InferContractType<SettlementModules[ContractName]> {
119
+ const module = this.resolve(contractName);
120
+ const ContractClass = module.contractFactory();
121
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
122
+ return new ContractClass(address, tokenId) as InferContractType<
123
+ SettlementModules[ContractName]
124
+ >;
125
+ }
126
+
127
+ public createContracts<
128
+ ContractName extends keyof SettlementModules,
129
+ >(addresses: {
130
+ [Key in ContractName]: PublicKey;
131
+ }): {
132
+ [Key in ContractName]: SmartContract &
133
+ InferContractType<SettlementModules[Key]>;
134
+ } {
135
+ const classes = this.getContractClasses();
136
+
137
+ const obj: Record<string, SmartContract> = {};
138
+ // eslint-disable-next-line guard-for-in
139
+ for (const key in addresses) {
140
+ const ContractClass = classes[key];
141
+ obj[key] = new ContractClass(addresses[key]);
142
+ }
143
+
144
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
145
+ return obj as {
146
+ [Key in keyof SettlementModules]: SmartContract &
147
+ InferContractType<SettlementModules[Key]>;
148
+ };
149
+ }
150
+ }
@@ -0,0 +1,385 @@
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
+ TokenContract,
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
+ import {
32
+ ContractArgsRegistry,
33
+ NaiveObjectSchema,
34
+ StaticInitializationContract,
35
+ } from "../ContractArgsRegistry";
36
+
37
+ import type { BridgingSettlementContractType } from "./settlement/BridgingSettlementContract";
38
+
39
+ export type BridgeContractType = {
40
+ stateRoot: State<Field>;
41
+ outgoingMessageCursor: State<Field>;
42
+
43
+ rollupOutgoingMessages: (
44
+ batch: OutgoingMessageArgumentBatch
45
+ ) => Promise<Field>;
46
+ redeem: (additionUpdate: AccountUpdate) => Promise<void>;
47
+
48
+ deployProvable: (
49
+ args: VerificationKey | undefined,
50
+ signedSettlement: boolean,
51
+ permissions: Permissions,
52
+ settlementContractAddress: PublicKey
53
+ ) => Promise<AccountUpdate>;
54
+
55
+ updateStateRoot: (root: Field) => Promise<void>;
56
+ };
57
+
58
+ // Equal to WithdrawalKey
59
+ export class OutgoingMessageKey extends Struct({
60
+ index: Field,
61
+ tokenId: Field,
62
+ }) {}
63
+
64
+ @injectable()
65
+ @singleton()
66
+ export class BridgeContractContext {
67
+ public data: {
68
+ messageInputs: any[][];
69
+ } = { messageInputs: [] };
70
+ }
71
+
72
+ export interface BridgeContractArgs {
73
+ SettlementContract: TypedClass<BridgingSettlementContractType> &
74
+ typeof SmartContract;
75
+ messageProcessors: OutgoingMessageProcessor<unknown>[];
76
+ batchSize?: number;
77
+ }
78
+
79
+ export const BridgeContractArgsSchema: NaiveObjectSchema<BridgeContractArgs> = {
80
+ batchSize: "Optional",
81
+ SettlementContract: "Required",
82
+ messageProcessors: "Required",
83
+ };
84
+
85
+ export abstract class BridgeContractBase
86
+ extends TokenContract
87
+ implements StaticInitializationContract<BridgeContractArgs>
88
+ {
89
+ public constructor(address: PublicKey, tokenId?: Field) {
90
+ super(address, tokenId);
91
+ }
92
+
93
+ getInitializationArgs(): BridgeContractArgs {
94
+ return container
95
+ .resolve(ContractArgsRegistry)
96
+ .getArgs("BridgeContract", BridgeContractArgsSchema);
97
+ }
98
+
99
+ abstract settlementContractAddress: State<PublicKey>;
100
+
101
+ abstract stateRoot: State<Field>;
102
+
103
+ abstract outgoingMessageCursor: State<Field>;
104
+
105
+ /**
106
+ * Function to deploy the bridging contract in a provable way, so that it can be
107
+ * a provable process initiated by the settlement contract with a baked-in vk
108
+ *
109
+ * @returns Creates and returns an account update deploying the bridge contract
110
+ */
111
+ public async deployProvable(
112
+ verificationKey: VerificationKey | undefined,
113
+ signedSettlement: boolean,
114
+ permissions: Permissions,
115
+ settlementContractAddress: PublicKey
116
+ ) {
117
+ const accountUpdate = this.self;
118
+
119
+ if (!signedSettlement) {
120
+ if (verificationKey === undefined) {
121
+ throw new Error("Verification Key not provided, can't deploy");
122
+ }
123
+ accountUpdate.account.verificationKey.set(verificationKey);
124
+ }
125
+
126
+ accountUpdate.requireSignature();
127
+ this.account.permissions.set(permissions);
128
+
129
+ range(0, 8).forEach((i) => {
130
+ accountUpdate.update.appState[i] = {
131
+ isSome: Bool(true),
132
+ value: Field(0),
133
+ };
134
+ });
135
+
136
+ this.settlementContractAddress.set(settlementContractAddress);
137
+
138
+ accountUpdate.body.mayUseToken = {
139
+ // Set to true for custom tokens only
140
+ inheritFromParent: accountUpdate.tokenId.equals(TokenId.default).not(),
141
+ parentsOwnToken: Bool(false),
142
+ };
143
+
144
+ return accountUpdate;
145
+ }
146
+
147
+ public async approveBase(): Promise<void> {
148
+ noop();
149
+ }
150
+
151
+ public async updateStateRootBase(root: Field) {
152
+ // It's fine for us to only store the actual root since we only have to
153
+ // witness values, not update/insert
154
+ this.stateRoot.set(root);
155
+
156
+ const args = this.getInitializationArgs();
157
+
158
+ const settlementContractAddress =
159
+ this.settlementContractAddress.getAndRequireEquals();
160
+ const SettlementContractClass = args.SettlementContract;
161
+ const settlementContract = new SettlementContractClass(
162
+ settlementContractAddress
163
+ );
164
+ const accountUpdate = settlementContract.assertStateRoot(root);
165
+ this.approve(accountUpdate);
166
+ }
167
+
168
+ private batchSize() {
169
+ return (
170
+ this.getInitializationArgs().batchSize ?? OUTGOING_MESSAGE_BATCH_SIZE
171
+ );
172
+ }
173
+
174
+ private executeProcessors(batchIndex: number, args: OutgoingMessageArgument) {
175
+ const { messageProcessors } = this.getInitializationArgs();
176
+ return messageProcessors.map((processor, j) => {
177
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
178
+ const value = Experimental.memoizeWitness(processor.type, () => {
179
+ return container.resolve(BridgeContractContext).data.messageInputs[
180
+ batchIndex
181
+ ][j];
182
+ });
183
+
184
+ const MessageType = createMessageStruct(processor.type);
185
+ const message = new MessageType({
186
+ messageType: args.messageType,
187
+ value,
188
+ });
189
+ return {
190
+ messageType: args.messageType,
191
+ result: processor.processMessage(value, {
192
+ bridgeContract: {
193
+ publicKey: this.address,
194
+ tokenId: this.tokenId,
195
+ },
196
+ }),
197
+ hash: Poseidon.hash(MessageType.toFields(message)),
198
+ };
199
+ });
200
+ }
201
+
202
+ public processMessage(
203
+ batchIndex: number,
204
+ args: OutgoingMessageArgument,
205
+ isDummy: Bool
206
+ ) {
207
+ const results = this.executeProcessors(batchIndex, args);
208
+
209
+ const maxAccountUpdates = Math.max(
210
+ 0,
211
+ ...results.map(({ result: { accountUpdates } }) => accountUpdates.length)
212
+ );
213
+ const AccountUpdateArray = Provable.Array(AccountUpdate, maxAccountUpdates);
214
+
215
+ const dummyMessageType =
216
+ PROTOKIT_FIELD_PREFIXES.OUTGOING_MESSAGE_DUMMY_TYPE;
217
+ const argMessageType = Provable.if(
218
+ isDummy,
219
+ dummyMessageType,
220
+ args.messageType
221
+ );
222
+ const dummyAU = AccountUpdate.dummy();
223
+
224
+ const chosen = results
225
+ .map((a) => {
226
+ a.result.accountUpdates = a.result.accountUpdates.concat(
227
+ ...Array<AccountUpdate>(
228
+ maxAccountUpdates - a.result.accountUpdates.length
229
+ ).fill(dummyAU)
230
+ );
231
+ return a;
232
+ })
233
+ .concat({
234
+ messageType: dummyMessageType,
235
+ hash: Field(0),
236
+ result: {
237
+ accountUpdates: Array<AccountUpdate>(maxAccountUpdates).fill(dummyAU),
238
+ status: Bool(true),
239
+ statusMessage: undefined,
240
+ },
241
+ })
242
+ .reduce((a, b) => {
243
+ const isA = a.messageType.equals(argMessageType);
244
+
245
+ const messageType = Provable.if(isA, a.messageType, b.messageType);
246
+ const hash = Provable.if(isA, a.hash, b.hash);
247
+ const accountUpdates = Provable.if(
248
+ isA,
249
+ AccountUpdateArray,
250
+ a.result.accountUpdates,
251
+ b.result.accountUpdates
252
+ );
253
+ const status = Provable.if(isA, a.result.status, b.result.status);
254
+ let statusMessage: string | undefined = undefined;
255
+ Provable.asProver(() => {
256
+ if (isA.toBoolean()) {
257
+ statusMessage = a.result.statusMessage;
258
+ } else {
259
+ statusMessage = b.result.statusMessage;
260
+ }
261
+ });
262
+
263
+ return {
264
+ messageType,
265
+ hash,
266
+ result: { accountUpdates, status, statusMessage },
267
+ };
268
+ });
269
+
270
+ // If no processor picks up our message type, the reduce above returns
271
+ // the first candidate. This statement asserts that this is not the case
272
+ chosen.messageType.assertEquals(
273
+ argMessageType,
274
+ "No processor found for message type"
275
+ );
276
+
277
+ return chosen;
278
+ }
279
+
280
+ public async rollupOutgoingMessagesBase(batch: OutgoingMessageArgumentBatch) {
281
+ let counter = this.outgoingMessageCursor.getAndRequireEquals();
282
+ const stateRoot = this.stateRoot.getAndRequireEquals();
283
+
284
+ // Count account creation fee to return later, so that the sender can fund
285
+ // those accounts with a separate AU
286
+ let accountCreationFeePaid = Field(0);
287
+
288
+ for (let i = 0; i < this.batchSize(); i++) {
289
+ const args = batch.arguments[i];
290
+
291
+ const isDummy = batch.isDummys[i];
292
+
293
+ const message = this.processMessage(i, args, isDummy);
294
+
295
+ // Check witness
296
+ const path = Path.fromKey(
297
+ PROTOKIT_FIELD_PREFIXES.OUTGOING_MESSAGE_BASE_PATH,
298
+ OutgoingMessageKey,
299
+ {
300
+ index: counter,
301
+ tokenId: this.tokenId,
302
+ }
303
+ );
304
+
305
+ args.witness
306
+ .checkMembership(stateRoot, path, message.hash)
307
+ .or(isDummy)
308
+ .assertTrue("Provided Withdrawal witness not valid");
309
+
310
+ message.result.status.assertTrue(message.result.statusMessage);
311
+
312
+ message.result.accountUpdates.forEach((accountUpdate) => {
313
+ Provable.log("Approving account update", accountUpdate.label);
314
+ this.approve(accountUpdate);
315
+ });
316
+ counter = counter.add(Provable.if(isDummy, Field(0), Field(1)));
317
+
318
+ // Track new accounts to be able to know how much new accounts to fund
319
+ const newAccounts = message.result.accountUpdates
320
+ .map((accountUpdate) => {
321
+ const isNew = accountUpdate.account.isNew.getAndRequireEquals();
322
+ return Provable.if(isNew, Field(1), Field(0));
323
+ })
324
+ .reduce((a, b) => a.add(b));
325
+ accountCreationFeePaid = accountCreationFeePaid.add(newAccounts);
326
+ }
327
+
328
+ this.outgoingMessageCursor.set(counter);
329
+
330
+ return accountCreationFeePaid;
331
+ }
332
+
333
+ protected async redeemBase(additionUpdate: AccountUpdate) {
334
+ additionUpdate.body.tokenId.assertEquals(
335
+ this.tokenId,
336
+ "Tokenid not same as this bridging contract's tokenId"
337
+ );
338
+ additionUpdate.body.balanceChange.sgn
339
+ .isPositive()
340
+ .assertTrue("Sign not correct");
341
+ const amount = additionUpdate.body.balanceChange.magnitude;
342
+
343
+ // Burn tokens
344
+ this.internal.burn({
345
+ address: additionUpdate.publicKey,
346
+ amount,
347
+ });
348
+
349
+ // Inherit from parent for custom tokens
350
+ additionUpdate.body.mayUseToken = {
351
+ inheritFromParent: this.tokenId.equals(TokenId.default).not(),
352
+ parentsOwnToken: Bool(false),
353
+ };
354
+
355
+ // Send mina
356
+ this.approve(additionUpdate);
357
+ this.balance.subInPlace(amount);
358
+ }
359
+ }
360
+
361
+ export class BridgeContract
362
+ extends BridgeContractBase
363
+ implements BridgeContractType
364
+ {
365
+ @state(PublicKey) public settlementContractAddress = State<PublicKey>();
366
+
367
+ @state(Field) public stateRoot = State<Field>();
368
+
369
+ @state(Field) public outgoingMessageCursor = State<Field>();
370
+
371
+ @method
372
+ public async updateStateRoot(root: Field) {
373
+ return await this.updateStateRootBase(root);
374
+ }
375
+
376
+ @method.returns(Field)
377
+ public async rollupOutgoingMessages(batch: OutgoingMessageArgumentBatch) {
378
+ return await this.rollupOutgoingMessagesBase(batch);
379
+ }
380
+
381
+ @method
382
+ public async redeem(additionUpdate: AccountUpdate) {
383
+ return await this.redeemBase(additionUpdate);
384
+ }
385
+ }
@@ -0,0 +1,49 @@
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
+ import { ContractArgsRegistry } from "../ContractArgsRegistry";
7
+
8
+ import {
9
+ BridgeContract,
10
+ BridgeContractArgs,
11
+ BridgeContractType,
12
+ } from "./BridgeContract";
13
+
14
+ export type BridgeContractConfig = {
15
+ outgoingBatchSize?: number;
16
+ };
17
+
18
+ @injectable()
19
+ export class BridgeContractProtocolModule extends ContractModule<
20
+ BridgeContractType,
21
+ BridgeContractConfig
22
+ > {
23
+ public constructor(
24
+ @injectAll("OutgoingMessageProcessor", { isOptional: true })
25
+ private readonly messageProcessors: OutgoingMessageProcessor<unknown>[],
26
+ private readonly contractArgsRegistry: ContractArgsRegistry
27
+ ) {
28
+ super();
29
+ }
30
+
31
+ public contractFactory() {
32
+ const { config } = this;
33
+
34
+ this.contractArgsRegistry.addArgs<BridgeContractArgs>("BridgeContract", {
35
+ messageProcessors: this.messageProcessors,
36
+ batchSize: config.outgoingBatchSize,
37
+ });
38
+
39
+ return BridgeContract;
40
+ }
41
+
42
+ public async compile(registry: CompileRegistry) {
43
+ return {
44
+ BridgeContract: await registry.forceProverExists(
45
+ async () => await registry.compile(BridgeContract)
46
+ ),
47
+ };
48
+ }
49
+ }