@proto-kit/protocol 0.1.1-develop.211 → 0.1.1-develop.2137

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