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

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 (453) hide show
  1. package/dist/Constants.js +1 -0
  2. package/dist/Constants.js.map +1 -0
  3. package/dist/hashing/mina-prefixes.d.ts +10 -0
  4. package/dist/hashing/mina-prefixes.d.ts.map +1 -0
  5. package/dist/hashing/mina-prefixes.js +10 -0
  6. package/dist/hashing/mina-prefixes.js.map +1 -0
  7. package/dist/hashing/protokit-prefixes.d.ts +10 -0
  8. package/dist/hashing/protokit-prefixes.d.ts.map +1 -0
  9. package/dist/hashing/protokit-prefixes.js +24 -0
  10. package/dist/hashing/protokit-prefixes.js.map +1 -0
  11. package/dist/hooks/AccountStateHook.d.ts +52 -0
  12. package/dist/hooks/AccountStateHook.d.ts.map +1 -0
  13. package/dist/hooks/AccountStateHook.js +52 -0
  14. package/dist/hooks/AccountStateHook.js.map +1 -0
  15. package/dist/hooks/BlockHeightHook.d.ts +7 -0
  16. package/dist/hooks/BlockHeightHook.d.ts.map +1 -0
  17. package/dist/hooks/BlockHeightHook.js +16 -0
  18. package/dist/hooks/BlockHeightHook.js.map +1 -0
  19. package/dist/hooks/LastStateRootBlockHook.d.ts +7 -0
  20. package/dist/hooks/LastStateRootBlockHook.d.ts.map +1 -0
  21. package/dist/hooks/LastStateRootBlockHook.js +16 -0
  22. package/dist/hooks/LastStateRootBlockHook.js.map +1 -0
  23. package/dist/hooks/NoopBlockHook.d.ts +8 -0
  24. package/dist/hooks/NoopBlockHook.d.ts.map +1 -0
  25. package/dist/hooks/NoopBlockHook.js +10 -0
  26. package/dist/hooks/NoopBlockHook.js.map +1 -0
  27. package/dist/hooks/NoopSettlementHook.d.ts +6 -0
  28. package/dist/hooks/NoopSettlementHook.d.ts.map +1 -0
  29. package/dist/{prover/statetransition/StateTransitionWitnessProvider.js → hooks/NoopSettlementHook.js} +8 -7
  30. package/dist/hooks/NoopSettlementHook.js.map +1 -0
  31. package/dist/hooks/NoopTransactionHook.d.ts +6 -0
  32. package/dist/hooks/NoopTransactionHook.d.ts.map +1 -0
  33. package/dist/hooks/NoopTransactionHook.js +11 -0
  34. package/dist/hooks/NoopTransactionHook.js.map +1 -0
  35. package/dist/index.d.ts +51 -9
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +52 -9
  38. package/dist/index.js.map +1 -0
  39. package/dist/model/AppliedStateTransitionBatch.d.ts +114 -0
  40. package/dist/model/AppliedStateTransitionBatch.d.ts.map +1 -0
  41. package/dist/model/AppliedStateTransitionBatch.js +16 -0
  42. package/dist/model/AppliedStateTransitionBatch.js.map +1 -0
  43. package/dist/model/MethodPublicOutput.d.ts +83 -29
  44. package/dist/model/MethodPublicOutput.d.ts.map +1 -1
  45. package/dist/model/MethodPublicOutput.js +4 -1
  46. package/dist/model/MethodPublicOutput.js.map +1 -0
  47. package/dist/model/Option.d.ts +70 -42
  48. package/dist/model/Option.d.ts.map +1 -1
  49. package/dist/model/Option.js +62 -47
  50. package/dist/model/Option.js.map +1 -0
  51. package/dist/model/Path.d.ts +4 -3
  52. package/dist/model/Path.d.ts.map +1 -1
  53. package/dist/model/Path.js +6 -5
  54. package/dist/model/Path.js.map +1 -0
  55. package/dist/model/RuntimeLike.d.ts +11 -0
  56. package/dist/model/RuntimeLike.d.ts.map +1 -0
  57. package/dist/model/RuntimeLike.js +2 -0
  58. package/dist/model/RuntimeLike.js.map +1 -0
  59. package/dist/model/StateTransition.d.ts +67 -16
  60. package/dist/model/StateTransition.d.ts.map +1 -1
  61. package/dist/model/StateTransition.js +18 -2
  62. package/dist/model/StateTransition.js.map +1 -0
  63. package/dist/model/StateTransitionProvableBatch.d.ts +389 -16
  64. package/dist/model/StateTransitionProvableBatch.d.ts.map +1 -1
  65. package/dist/model/StateTransitionProvableBatch.js +88 -11
  66. package/dist/model/StateTransitionProvableBatch.js.map +1 -0
  67. package/dist/model/network/NetworkState.d.ts +105 -9
  68. package/dist/model/network/NetworkState.d.ts.map +1 -1
  69. package/dist/model/network/NetworkState.js +20 -2
  70. package/dist/model/network/NetworkState.js.map +1 -0
  71. package/dist/model/transaction/RuntimeTransaction.d.ts +96 -28
  72. package/dist/model/transaction/RuntimeTransaction.d.ts.map +1 -1
  73. package/dist/model/transaction/RuntimeTransaction.js +75 -11
  74. package/dist/model/transaction/RuntimeTransaction.js.map +1 -0
  75. package/dist/model/transaction/SignedTransaction.d.ts +107 -0
  76. package/dist/model/transaction/SignedTransaction.d.ts.map +1 -0
  77. package/dist/model/transaction/SignedTransaction.js +34 -0
  78. package/dist/model/transaction/SignedTransaction.js.map +1 -0
  79. package/dist/model/transaction/ValueOption.d.ts +173 -0
  80. package/dist/model/transaction/ValueOption.d.ts.map +1 -0
  81. package/dist/model/transaction/ValueOption.js +25 -0
  82. package/dist/model/transaction/ValueOption.js.map +1 -0
  83. package/dist/protocol/Protocol.d.ts +27 -25
  84. package/dist/protocol/Protocol.d.ts.map +1 -1
  85. package/dist/protocol/Protocol.js +98 -28
  86. package/dist/protocol/Protocol.js.map +1 -0
  87. package/dist/protocol/ProtocolEnvironment.d.ts +9 -0
  88. package/dist/protocol/ProtocolEnvironment.d.ts.map +1 -0
  89. package/dist/protocol/ProtocolEnvironment.js +2 -0
  90. package/dist/protocol/ProtocolEnvironment.js.map +1 -0
  91. package/dist/protocol/ProtocolModule.d.ts +7 -7
  92. package/dist/protocol/ProtocolModule.d.ts.map +1 -1
  93. package/dist/protocol/ProtocolModule.js +10 -7
  94. package/dist/protocol/ProtocolModule.js.map +1 -0
  95. package/dist/protocol/ProvableBlockHook.d.ts +19 -0
  96. package/dist/protocol/ProvableBlockHook.d.ts.map +1 -0
  97. package/dist/protocol/ProvableBlockHook.js +21 -0
  98. package/dist/protocol/ProvableBlockHook.js.map +1 -0
  99. package/dist/protocol/ProvableTransactionHook.d.ts +34 -0
  100. package/dist/protocol/ProvableTransactionHook.d.ts.map +1 -0
  101. package/dist/protocol/ProvableTransactionHook.js +13 -0
  102. package/dist/protocol/ProvableTransactionHook.js.map +1 -0
  103. package/dist/protocol/TransitioningProtocolModule.d.ts +10 -0
  104. package/dist/protocol/TransitioningProtocolModule.d.ts.map +1 -0
  105. package/dist/protocol/TransitioningProtocolModule.js +9 -0
  106. package/dist/protocol/TransitioningProtocolModule.js.map +1 -0
  107. package/dist/prover/accumulators/AppliedBatchHashList.d.ts +18 -0
  108. package/dist/prover/accumulators/AppliedBatchHashList.d.ts.map +1 -0
  109. package/dist/prover/accumulators/AppliedBatchHashList.js +25 -0
  110. package/dist/prover/accumulators/AppliedBatchHashList.js.map +1 -0
  111. package/dist/prover/accumulators/StateTransitionReductionList.d.ts +12 -0
  112. package/dist/prover/accumulators/StateTransitionReductionList.d.ts.map +1 -0
  113. package/dist/prover/accumulators/StateTransitionReductionList.js +64 -0
  114. package/dist/prover/accumulators/StateTransitionReductionList.js.map +1 -0
  115. package/dist/prover/accumulators/TransactionHashList.d.ts +6 -0
  116. package/dist/prover/accumulators/TransactionHashList.d.ts.map +1 -0
  117. package/dist/prover/accumulators/TransactionHashList.js +8 -0
  118. package/dist/prover/accumulators/TransactionHashList.js.map +1 -0
  119. package/dist/prover/accumulators/WitnessedRootHashList.d.ts +137 -0
  120. package/dist/prover/accumulators/WitnessedRootHashList.d.ts.map +1 -0
  121. package/dist/prover/accumulators/WitnessedRootHashList.js +50 -0
  122. package/dist/prover/accumulators/WitnessedRootHashList.js.map +1 -0
  123. package/dist/prover/block/BlockProvable.d.ts +869 -65
  124. package/dist/prover/block/BlockProvable.d.ts.map +1 -1
  125. package/dist/prover/block/BlockProvable.js +86 -6
  126. package/dist/prover/block/BlockProvable.js.map +1 -0
  127. package/dist/prover/block/BlockProver.d.ts +82 -34
  128. package/dist/prover/block/BlockProver.d.ts.map +1 -1
  129. package/dist/prover/block/BlockProver.js +505 -86
  130. package/dist/prover/block/BlockProver.js.map +1 -0
  131. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts +106 -0
  132. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts.map +1 -0
  133. package/dist/prover/block/accummulators/BlockHashMerkleTree.js +25 -0
  134. package/dist/prover/block/accummulators/BlockHashMerkleTree.js.map +1 -0
  135. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.d.ts +139 -0
  136. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.d.ts.map +1 -0
  137. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js +21 -0
  138. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js.map +1 -0
  139. package/dist/prover/block/services/RuntimeVerificationKeyRootService.d.ts +7 -0
  140. package/dist/prover/block/services/RuntimeVerificationKeyRootService.d.ts.map +1 -0
  141. package/dist/prover/{statetransition/StateTransitionWitnessProviderReference.js → block/services/RuntimeVerificationKeyRootService.js} +11 -8
  142. package/dist/prover/block/services/RuntimeVerificationKeyRootService.js.map +1 -0
  143. package/dist/prover/statetransition/StateTransitionProvable.d.ts +137 -48
  144. package/dist/prover/statetransition/StateTransitionProvable.d.ts.map +1 -1
  145. package/dist/prover/statetransition/StateTransitionProvable.js +10 -5
  146. package/dist/prover/statetransition/StateTransitionProvable.js.map +1 -0
  147. package/dist/prover/statetransition/StateTransitionProver.d.ts +30 -17
  148. package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -1
  149. package/dist/prover/statetransition/StateTransitionProver.js +169 -74
  150. package/dist/prover/statetransition/StateTransitionProver.js.map +1 -0
  151. package/dist/settlement/ContractModule.d.ts +16 -0
  152. package/dist/settlement/ContractModule.d.ts.map +1 -0
  153. package/dist/settlement/ContractModule.js +12 -0
  154. package/dist/settlement/ContractModule.js.map +1 -0
  155. package/dist/settlement/SettlementContractModule.d.ts +51 -0
  156. package/dist/settlement/SettlementContractModule.d.ts.map +1 -0
  157. package/dist/settlement/SettlementContractModule.js +80 -0
  158. package/dist/settlement/SettlementContractModule.js.map +1 -0
  159. package/dist/settlement/contracts/BridgeContract.d.ts +116 -0
  160. package/dist/settlement/contracts/BridgeContract.d.ts.map +1 -0
  161. package/dist/settlement/contracts/BridgeContract.js +259 -0
  162. package/dist/settlement/contracts/BridgeContract.js.map +1 -0
  163. package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts +16 -0
  164. package/dist/settlement/contracts/BridgeContractProtocolModule.d.ts.map +1 -0
  165. package/dist/settlement/contracts/BridgeContractProtocolModule.js +41 -0
  166. package/dist/settlement/contracts/BridgeContractProtocolModule.js.map +1 -0
  167. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts +21 -0
  168. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts.map +1 -0
  169. package/dist/settlement/contracts/DispatchContractProtocolModule.js +57 -0
  170. package/dist/settlement/contracts/DispatchContractProtocolModule.js.map +1 -0
  171. package/dist/settlement/contracts/DispatchSmartContract.d.ts +44 -0
  172. package/dist/settlement/contracts/DispatchSmartContract.d.ts.map +1 -0
  173. package/dist/settlement/contracts/DispatchSmartContract.js +229 -0
  174. package/dist/settlement/contracts/DispatchSmartContract.js.map +1 -0
  175. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts +21 -0
  176. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts.map +1 -0
  177. package/dist/settlement/contracts/SettlementContractProtocolModule.js +84 -0
  178. package/dist/settlement/contracts/SettlementContractProtocolModule.js.map +1 -0
  179. package/dist/settlement/contracts/SettlementSmartContract.d.ts +123 -0
  180. package/dist/settlement/contracts/SettlementSmartContract.d.ts.map +1 -0
  181. package/dist/settlement/contracts/SettlementSmartContract.js +310 -0
  182. package/dist/settlement/contracts/SettlementSmartContract.js.map +1 -0
  183. package/dist/settlement/contracts/TokenBridgeTree.d.ts +228 -0
  184. package/dist/settlement/contracts/TokenBridgeTree.d.ts.map +1 -0
  185. package/dist/settlement/contracts/TokenBridgeTree.js +60 -0
  186. package/dist/settlement/contracts/TokenBridgeTree.js.map +1 -0
  187. package/dist/settlement/contracts/authorizations/ContractAuthorization.d.ts +10 -0
  188. package/dist/settlement/contracts/authorizations/ContractAuthorization.d.ts.map +1 -0
  189. package/dist/settlement/contracts/authorizations/ContractAuthorization.js +2 -0
  190. package/dist/settlement/contracts/authorizations/ContractAuthorization.js.map +1 -0
  191. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.d.ts +85 -0
  192. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.d.ts.map +1 -0
  193. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.js +11 -0
  194. package/dist/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.js.map +1 -0
  195. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.d.ts +79 -0
  196. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.d.ts.map +1 -0
  197. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.js +11 -0
  198. package/dist/settlement/contracts/authorizations/UpdateMessagesHashAuth.js.map +1 -0
  199. package/dist/settlement/messages/Deposit.d.ts +77 -0
  200. package/dist/settlement/messages/Deposit.d.ts.map +1 -0
  201. package/dist/settlement/messages/Deposit.js +8 -0
  202. package/dist/settlement/messages/Deposit.js.map +1 -0
  203. package/dist/settlement/messages/OutgoingMessage.d.ts +67 -0
  204. package/dist/settlement/messages/OutgoingMessage.d.ts.map +1 -0
  205. package/dist/settlement/messages/OutgoingMessage.js +7 -0
  206. package/dist/settlement/messages/OutgoingMessage.js.map +1 -0
  207. package/dist/settlement/messages/OutgoingMessageArgument.d.ts +462 -0
  208. package/dist/settlement/messages/OutgoingMessageArgument.d.ts.map +1 -0
  209. package/dist/settlement/messages/OutgoingMessageArgument.js +40 -0
  210. package/dist/settlement/messages/OutgoingMessageArgument.js.map +1 -0
  211. package/dist/settlement/messages/Withdrawal.d.ts +2 -0
  212. package/dist/settlement/messages/Withdrawal.d.ts.map +1 -0
  213. package/dist/settlement/messages/Withdrawal.js +3 -0
  214. package/dist/settlement/messages/Withdrawal.js.map +1 -0
  215. package/dist/settlement/modularity/OutgoingMessageProcessor.d.ts +25 -0
  216. package/dist/settlement/modularity/OutgoingMessageProcessor.d.ts.map +1 -0
  217. package/dist/settlement/modularity/OutgoingMessageProcessor.js +30 -0
  218. package/dist/settlement/modularity/OutgoingMessageProcessor.js.map +1 -0
  219. package/dist/settlement/modularity/ProvableSettlementHook.d.ts +26 -0
  220. package/dist/settlement/modularity/ProvableSettlementHook.d.ts.map +1 -0
  221. package/dist/settlement/modularity/ProvableSettlementHook.js +4 -0
  222. package/dist/settlement/modularity/ProvableSettlementHook.js.map +1 -0
  223. package/dist/settlement/modularity/types.d.ts +8 -0
  224. package/dist/settlement/modularity/types.d.ts.map +1 -0
  225. package/dist/settlement/modularity/types.js +2 -0
  226. package/dist/settlement/modularity/types.js.map +1 -0
  227. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts +11 -0
  228. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts.map +1 -0
  229. package/dist/settlement/modules/NetworkStateSettlementModule.js +15 -0
  230. package/dist/settlement/modules/NetworkStateSettlementModule.js.map +1 -0
  231. package/dist/state/SimpleAsyncStateService.d.ts +6 -0
  232. package/dist/state/SimpleAsyncStateService.d.ts.map +1 -0
  233. package/dist/state/SimpleAsyncStateService.js +2 -0
  234. package/dist/state/SimpleAsyncStateService.js.map +1 -0
  235. package/dist/state/State.d.ts +68 -0
  236. package/dist/state/State.d.ts.map +1 -0
  237. package/dist/state/State.js +131 -0
  238. package/dist/state/State.js.map +1 -0
  239. package/dist/state/StateMap.d.ts +37 -0
  240. package/dist/state/StateMap.d.ts.map +1 -0
  241. package/dist/state/StateMap.js +56 -0
  242. package/dist/state/StateMap.js.map +1 -0
  243. package/dist/state/StateService.d.ts +6 -0
  244. package/dist/state/StateService.d.ts.map +1 -0
  245. package/dist/state/StateService.js +2 -0
  246. package/dist/state/StateService.js.map +1 -0
  247. package/dist/state/StateServiceProvider.d.ts +8 -0
  248. package/dist/state/StateServiceProvider.d.ts.map +1 -0
  249. package/dist/state/StateServiceProvider.js +37 -0
  250. package/dist/state/StateServiceProvider.js.map +1 -0
  251. package/dist/state/assert/assert.d.ts +12 -0
  252. package/dist/state/assert/assert.d.ts.map +1 -0
  253. package/dist/state/assert/assert.js +33 -0
  254. package/dist/state/assert/assert.js.map +1 -0
  255. package/dist/state/context/RuntimeMethodExecutionContext.d.ts +193 -0
  256. package/dist/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -0
  257. package/dist/state/context/RuntimeMethodExecutionContext.js +138 -0
  258. package/dist/state/context/RuntimeMethodExecutionContext.js.map +1 -0
  259. package/dist/state/context/TransitionMethodExecutionContext.d.ts +23 -0
  260. package/dist/state/context/TransitionMethodExecutionContext.d.ts.map +1 -0
  261. package/dist/state/context/TransitionMethodExecutionContext.js +6 -0
  262. package/dist/state/context/TransitionMethodExecutionContext.js.map +1 -0
  263. package/dist/state/protocol/ProtocolState.d.ts +13 -0
  264. package/dist/state/protocol/ProtocolState.d.ts.map +1 -0
  265. package/dist/state/protocol/ProtocolState.js +58 -0
  266. package/dist/state/protocol/ProtocolState.js.map +1 -0
  267. package/dist/utils/FieldOptions.d.ts +62 -0
  268. package/dist/utils/FieldOptions.d.ts.map +1 -0
  269. package/dist/utils/FieldOptions.js +13 -0
  270. package/dist/utils/FieldOptions.js.map +1 -0
  271. package/dist/utils/MinaPrefixedProvableHashList.d.ts +19 -0
  272. package/dist/utils/MinaPrefixedProvableHashList.d.ts.map +1 -0
  273. package/dist/utils/MinaPrefixedProvableHashList.js +46 -0
  274. package/dist/utils/MinaPrefixedProvableHashList.js.map +1 -0
  275. package/dist/utils/PrefixedProvableHashList.d.ts +2 -2
  276. package/dist/utils/PrefixedProvableHashList.d.ts.map +1 -1
  277. package/dist/utils/PrefixedProvableHashList.js +2 -1
  278. package/dist/utils/PrefixedProvableHashList.js.map +1 -0
  279. package/dist/utils/ProvableHashList.d.ts +23 -4
  280. package/dist/utils/ProvableHashList.d.ts.map +1 -1
  281. package/dist/utils/ProvableHashList.js +38 -2
  282. package/dist/utils/ProvableHashList.js.map +1 -0
  283. package/dist/utils/ProvableReductionHashList.d.ts +18 -0
  284. package/dist/utils/ProvableReductionHashList.d.ts.map +1 -0
  285. package/dist/utils/ProvableReductionHashList.js +54 -0
  286. package/dist/utils/ProvableReductionHashList.js.map +1 -0
  287. package/dist/utils/StateTransitionReductionList.d.ts +11 -0
  288. package/dist/utils/StateTransitionReductionList.d.ts.map +1 -0
  289. package/dist/utils/StateTransitionReductionList.js +61 -0
  290. package/dist/utils/StateTransitionReductionList.js.map +1 -0
  291. package/dist/utils/utils.d.ts +20 -0
  292. package/dist/utils/utils.d.ts.map +1 -0
  293. package/dist/utils/utils.js +51 -0
  294. package/dist/utils/utils.js.map +1 -0
  295. package/jest.config.cjs +12 -1
  296. package/package.json +11 -9
  297. package/src/hashing/mina-prefixes.ts +10 -0
  298. package/src/hashing/protokit-prefixes.ts +37 -0
  299. package/src/hooks/AccountStateHook.ts +57 -0
  300. package/src/hooks/BlockHeightHook.ts +17 -0
  301. package/src/hooks/LastStateRootBlockHook.ts +25 -0
  302. package/src/hooks/NoopBlockHook.ts +24 -0
  303. package/src/hooks/NoopSettlementHook.ts +20 -0
  304. package/src/hooks/NoopTransactionHook.ts +13 -0
  305. package/src/index.ts +51 -9
  306. package/src/model/AppliedStateTransitionBatch.ts +16 -0
  307. package/src/model/MethodPublicOutput.ts +3 -1
  308. package/src/model/Option.ts +99 -60
  309. package/src/model/Path.ts +9 -5
  310. package/src/model/RuntimeLike.ts +12 -0
  311. package/src/model/StateTransition.ts +25 -3
  312. package/src/model/StateTransitionProvableBatch.ts +117 -14
  313. package/src/model/Transaction.ts +3 -1
  314. package/src/model/network/NetworkState.ts +21 -3
  315. package/src/model/transaction/RuntimeTransaction.ts +90 -15
  316. package/src/model/transaction/SignedTransaction.ts +47 -0
  317. package/src/model/transaction/ValueOption.ts +28 -0
  318. package/src/protocol/Protocol.ts +166 -74
  319. package/src/protocol/ProtocolEnvironment.ts +10 -0
  320. package/src/protocol/ProtocolModule.ts +16 -16
  321. package/src/protocol/ProvableBlockHook.ts +68 -0
  322. package/src/protocol/ProvableTransactionHook.ts +77 -0
  323. package/src/protocol/TransitioningProtocolModule.ts +12 -0
  324. package/src/prover/accumulators/AppliedBatchHashList.ts +32 -0
  325. package/src/prover/accumulators/StateTransitionReductionList.ts +92 -0
  326. package/src/prover/accumulators/TransactionHashList.ts +9 -0
  327. package/src/prover/accumulators/WitnessedRootHashList.ts +61 -0
  328. package/src/prover/block/BlockProvable.ts +188 -15
  329. package/src/prover/block/BlockProver.ts +979 -143
  330. package/src/prover/block/accummulators/BlockHashMerkleTree.ts +24 -0
  331. package/src/prover/block/accummulators/RuntimeVerificationKeyTree.ts +24 -0
  332. package/src/prover/block/services/RuntimeVerificationKeyRootService.ts +20 -0
  333. package/src/prover/statetransition/StateTransitionProvable.ts +26 -19
  334. package/src/prover/statetransition/StateTransitionProver.ts +338 -130
  335. package/src/settlement/ContractModule.ts +31 -0
  336. package/src/settlement/SettlementContractModule.ts +145 -0
  337. package/src/settlement/contracts/BridgeContract.ts +366 -0
  338. package/src/settlement/contracts/BridgeContractProtocolModule.ts +48 -0
  339. package/src/settlement/contracts/DispatchContractProtocolModule.ts +75 -0
  340. package/src/settlement/contracts/DispatchSmartContract.ts +325 -0
  341. package/src/settlement/contracts/SettlementContractProtocolModule.ts +113 -0
  342. package/src/settlement/contracts/SettlementSmartContract.ts +502 -0
  343. package/src/settlement/contracts/TokenBridgeTree.ts +73 -0
  344. package/src/settlement/contracts/authorizations/ContractAuthorization.ts +11 -0
  345. package/src/settlement/contracts/authorizations/TokenBridgeDeploymentAuth.ts +16 -0
  346. package/src/settlement/contracts/authorizations/UpdateMessagesHashAuth.ts +16 -0
  347. package/src/settlement/messages/Deposit.ts +7 -0
  348. package/src/settlement/messages/OutgoingMessage.ts +17 -0
  349. package/src/settlement/messages/OutgoingMessageArgument.ts +53 -0
  350. package/src/settlement/modularity/OutgoingMessageProcessor.ts +65 -0
  351. package/src/settlement/modularity/ProvableSettlementHook.ts +36 -0
  352. package/src/settlement/modularity/types.ts +22 -0
  353. package/src/settlement/modules/NetworkStateSettlementModule.ts +42 -0
  354. package/src/state/State.ts +177 -0
  355. package/src/state/StateMap.ts +73 -0
  356. package/src/state/StateService.ts +6 -0
  357. package/src/state/StateServiceProvider.ts +37 -0
  358. package/src/state/assert/assert.ts +38 -0
  359. package/src/state/context/RuntimeMethodExecutionContext.ts +181 -0
  360. package/src/state/context/TransitionMethodExecutionContext.ts +26 -0
  361. package/src/state/protocol/ProtocolState.ts +98 -0
  362. package/src/utils/FieldOptions.ts +13 -0
  363. package/src/utils/MinaPrefixedProvableHashList.ts +66 -0
  364. package/src/utils/PrefixedProvableHashList.ts +2 -2
  365. package/src/utils/ProvableHashList.ts +78 -3
  366. package/src/utils/ProvableReductionHashList.ts +77 -0
  367. package/src/utils/utils.ts +44 -55
  368. package/test/BlockProver.test.ts +161 -74
  369. package/test/Protocol.test.ts +20 -10
  370. package/test/State.test.ts +45 -0
  371. package/test/StateTransition.test.ts +57 -65
  372. package/test/TestingProtocol.ts +56 -0
  373. package/test/compiling/types.ts +28 -0
  374. package/test/model/Option.test.ts +72 -0
  375. package/test/model/StateTransitionProvableBatch.test.ts +137 -0
  376. package/test/modularity/types.ts +35 -0
  377. package/test/prover/block/BlockProver.test.ts +18 -0
  378. package/test/prover/statetransition/StateTransitionProver.test.ts +261 -0
  379. package/test/state/assert/assert.test.ts +56 -0
  380. package/test/tsconfig.json +7 -0
  381. package/test/utils/ProvableHashList.test.ts +44 -0
  382. package/test/utils/ProvableReductionHashList.test.ts +117 -0
  383. package/test/utils.test.ts +27 -0
  384. package/dist/config/ConfigurableModule.d.ts +0 -18
  385. package/dist/config/ConfigurableModule.d.ts.map +0 -1
  386. package/dist/config/ConfigurableModule.js +0 -20
  387. package/dist/config/ConfigurationAggregator.d.ts +0 -10
  388. package/dist/config/ConfigurationAggregator.d.ts.map +0 -1
  389. package/dist/config/ConfigurationAggregator.js +0 -35
  390. package/dist/config/ConfigurationReceiver.d.ts +0 -25
  391. package/dist/config/ConfigurationReceiver.d.ts.map +0 -1
  392. package/dist/config/ConfigurationReceiver.js +0 -36
  393. package/dist/config/ModuleContainer.d.ts +0 -44
  394. package/dist/config/ModuleContainer.d.ts.map +0 -1
  395. package/dist/config/ModuleContainer.js +0 -89
  396. package/dist/config/types.d.ts +0 -2
  397. package/dist/config/types.d.ts.map +0 -1
  398. package/dist/config/types.js +0 -1
  399. package/dist/model/MethodPublicInput.d.ts +0 -51
  400. package/dist/model/MethodPublicInput.d.ts.map +0 -1
  401. package/dist/model/MethodPublicInput.js +0 -11
  402. package/dist/model/transaction/ProtocolTransaction.d.ts +0 -70
  403. package/dist/model/transaction/ProtocolTransaction.d.ts.map +0 -1
  404. package/dist/model/transaction/ProtocolTransaction.js +0 -18
  405. package/dist/prover/block/BlockScopedModule.d.ts +0 -3
  406. package/dist/prover/block/BlockScopedModule.d.ts.map +0 -1
  407. package/dist/prover/block/BlockScopedModule.js +0 -6
  408. package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts +0 -16
  409. package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts.map +0 -1
  410. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts +0 -7
  411. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts.map +0 -1
  412. package/dist/src/model/Option.d.ts +0 -158
  413. package/dist/src/model/Option.d.ts.map +0 -1
  414. package/dist/src/model/Option.js +0 -53
  415. package/dist/src/model/Path.d.ts +0 -35
  416. package/dist/src/model/Path.d.ts.map +0 -1
  417. package/dist/src/model/Path.js +0 -51
  418. package/dist/src/model/StateTransition.d.ts +0 -201
  419. package/dist/src/model/StateTransition.d.ts.map +0 -1
  420. package/dist/src/model/StateTransition.js +0 -43
  421. package/dist/src/utils/PrefixedHashList.d.ts +0 -15
  422. package/dist/src/utils/PrefixedHashList.d.ts.map +0 -1
  423. package/dist/src/utils/PrefixedHashList.js +0 -28
  424. package/dist/src/utils/ProvableHashList.d.ts +0 -30
  425. package/dist/src/utils/ProvableHashList.d.ts.map +0 -1
  426. package/dist/src/utils/ProvableHashList.js +0 -43
  427. package/dist/utils/PrefixedHashList.d.ts +0 -14
  428. package/dist/utils/PrefixedHashList.d.ts.map +0 -1
  429. package/dist/utils/PrefixedHashList.js +0 -12
  430. package/dist/utils/Utils.d.ts +0 -17
  431. package/dist/utils/Utils.d.ts.map +0 -1
  432. package/dist/utils/Utils.js +0 -64
  433. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts +0 -25
  434. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts.map +0 -1
  435. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.js +0 -77
  436. package/dist/utils/merkletree/MemoryMerkleTreeStorage.d.ts +0 -26
  437. package/dist/utils/merkletree/MemoryMerkleTreeStorage.d.ts.map +0 -1
  438. package/dist/utils/merkletree/MemoryMerkleTreeStorage.js +0 -79
  439. package/dist/utils/merkletree/MerkleTreeStore.d.ts +0 -11
  440. package/dist/utils/merkletree/MerkleTreeStore.d.ts.map +0 -1
  441. package/dist/utils/merkletree/MerkleTreeStore.js +0 -1
  442. package/dist/utils/merkletree/RollupMerkleTree.d.ts +0 -130
  443. package/dist/utils/merkletree/RollupMerkleTree.d.ts.map +0 -1
  444. package/dist/utils/merkletree/RollupMerkleTree.js +0 -244
  445. package/src/model/Option.test.ts +0 -21
  446. package/src/model/transaction/ProtocolTransaction.ts +0 -25
  447. package/src/prover/statetransition/StateTransitionWitnessProvider.ts +0 -24
  448. package/src/prover/statetransition/StateTransitionWitnessProviderReference.ts +0 -17
  449. package/src/utils/merkletree/InMemoryMerkleTreeStorage.ts +0 -106
  450. package/src/utils/merkletree/MerkleTreeStore.ts +0 -15
  451. package/src/utils/merkletree/RollupMerkleTree.ts +0 -250
  452. package/src/utils/merkletree/VirtualMerkleTreeStore.ts +0 -21
  453. package/tsconfig.test.json +0 -9
@@ -0,0 +1,26 @@
1
+ import { StateTransition } from "../../model/StateTransition";
2
+
3
+ export class TransitionMethodExecutionResult {
4
+ public stateTransitions: StateTransition<any>[] = [];
5
+ }
6
+
7
+ export interface TransitionMethodExecutionContext {
8
+ /**
9
+ * Adds an in-method generated state transition to the current context
10
+ * @param stateTransition - State transition to add to the context
11
+ */
12
+ addStateTransition: <Value>(stateTransition: StateTransition<Value>) => void;
13
+
14
+ /**
15
+ * Manually clears/resets the execution context
16
+ */
17
+ clear: () => void;
18
+
19
+ /**
20
+ * Had to override current() otherwise it would not infer
21
+ * the type of result correctly (parent type would be reused)
22
+ */
23
+ current: () => {
24
+ result: TransitionMethodExecutionResult;
25
+ };
26
+ }
@@ -0,0 +1,98 @@
1
+ import { createReference, Reference } from "@proto-kit/common";
2
+
3
+ import { WithPath, WithStateServiceProvider } from "../State";
4
+ import { Path } from "../../model/Path";
5
+ import { StateServiceProvider } from "../StateServiceProvider";
6
+ import { PROTOKIT_PREFIXES } from "../../hashing/protokit-prefixes";
7
+ import { TransitioningProtocolModule } from "../../protocol/TransitioningProtocolModule";
8
+
9
+ const errors = {
10
+ missingName: (className: string) =>
11
+ new Error(
12
+ `Unable to provide a unique identifier for state, ${className} is missing a name.
13
+ Did you forget to extend your block module with 'extends ...Hook'?`
14
+ ),
15
+
16
+ missingParent: (className: string, type: string, moduleType: string) =>
17
+ new Error(
18
+ `Unable to provide parent '${type}' for state, ${className} is missing a name.
19
+ Did you forget to extend your module with 'extends ${moduleType}'?`
20
+ ),
21
+ };
22
+
23
+ export interface StatefulModule {
24
+ name?: string;
25
+ parent?: {
26
+ stateServiceProvider: StateServiceProvider;
27
+ };
28
+ }
29
+
30
+ /**
31
+ * Decorates a runtime module property as state, passing down some
32
+ * underlying values to improve developer experience.
33
+ */
34
+ export function state() {
35
+ return <TargetTransitioningModule extends StatefulModule>(
36
+ target: TargetTransitioningModule,
37
+ propertyKey: string
38
+ ) => {
39
+ Object.defineProperty(target, propertyKey, {
40
+ enumerable: true,
41
+
42
+ get: function get(this: TargetTransitioningModule) {
43
+ // The reason for why we store the state value in this weird way is that
44
+ // in the decorator on the prototype of the class. This means that if there
45
+ // are multiple instances of this class, any closure that this getter shares
46
+ // will be the same for all instances.
47
+ // Therefore, we need to somehow save the set instance on the instance itself
48
+
49
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
50
+ const reference:
51
+ | Reference<WithPath & WithStateServiceProvider>
52
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
53
+ | undefined = (this as any)[`protokit_state_cache_${propertyKey}`];
54
+
55
+ // Short-circuit this to return the state in case its already initialized
56
+ if (reference !== undefined && reference.value.path !== undefined) {
57
+ return reference.value;
58
+ }
59
+
60
+ if (this.name === undefined) {
61
+ throw errors.missingName(this.constructor.name);
62
+ }
63
+
64
+ const isProtocol = target instanceof TransitioningProtocolModule;
65
+
66
+ if (!this.parent) {
67
+ const debugInfo = isProtocol
68
+ ? { parentName: "protocol", baseModuleNames: "...Hook" }
69
+ : { parentName: "runtime", baseModuleNames: "RuntimeModule" };
70
+
71
+ throw errors.missingParent(
72
+ this.constructor.name,
73
+ debugInfo.parentName,
74
+ debugInfo.baseModuleNames
75
+ );
76
+ }
77
+
78
+ const statePrefix = isProtocol
79
+ ? PROTOKIT_PREFIXES.STATE_PROTOCOL
80
+ : PROTOKIT_PREFIXES.STATE_RUNTIME;
81
+ const path = Path.fromProperty(this.name, propertyKey, statePrefix);
82
+ if (reference) {
83
+ const { value } = reference;
84
+ value.path = path;
85
+ value.stateServiceProvider = this.parent.stateServiceProvider;
86
+ }
87
+ return reference?.value;
88
+ },
89
+
90
+ set: function set(
91
+ this: TargetTransitioningModule & any,
92
+ newValue: WithPath & WithStateServiceProvider
93
+ ) {
94
+ this[`protokit_state_cache_${propertyKey}`] = createReference(newValue);
95
+ },
96
+ });
97
+ };
98
+ }
@@ -0,0 +1,13 @@
1
+ import { Bool, Field, Provable, Struct } from "o1js";
2
+
3
+ export class FieldOption extends Struct({
4
+ isSome: Bool,
5
+ value: Field,
6
+ }) {
7
+ public static from(isSome: Bool, potentialValue: Field) {
8
+ return {
9
+ isSome,
10
+ value: Provable.if(isSome, potentialValue, Field(0)),
11
+ };
12
+ }
13
+ }
@@ -0,0 +1,66 @@
1
+ import { Field, Poseidon, ProvablePure } from "o1js";
2
+ import { hashWithPrefix, prefixToField } from "@proto-kit/common";
3
+
4
+ import { MINA_PREFIXES, MINA_SALTS } from "../hashing/mina-prefixes";
5
+
6
+ import { ProvableHashList } from "./ProvableHashList";
7
+
8
+ function salt(prefix: string) {
9
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
10
+ return Poseidon.update(
11
+ [Field(0), Field(0), Field(0)],
12
+ [prefixToField(prefix)]
13
+ ) as [Field, Field, Field];
14
+ }
15
+
16
+ export function emptyActions(): Field {
17
+ return salt(MINA_SALTS.empty_actions)[0];
18
+ }
19
+
20
+ export function emptyEvents(): Field {
21
+ return salt(MINA_SALTS.empty_events)[0];
22
+ }
23
+
24
+ export class MinaActions {
25
+ static actionHash(
26
+ action: Field[],
27
+ previousHash: Field = emptyActions()
28
+ ): Field {
29
+ const actionDataHash = hashWithPrefix(MINA_PREFIXES.event, action);
30
+ return hashWithPrefix(MINA_PREFIXES.sequenceEvents, [
31
+ previousHash,
32
+ actionDataHash,
33
+ ]);
34
+ }
35
+ }
36
+
37
+ export class MinaEvents {
38
+ static eventHash(event: Field[], previousHash: Field = emptyEvents()): Field {
39
+ const actionDataHash = hashWithPrefix(MINA_PREFIXES.event, event);
40
+ return hashWithPrefix(MINA_PREFIXES.events, [previousHash, actionDataHash]);
41
+ }
42
+ }
43
+
44
+ export class MinaPrefixedProvableHashList<
45
+ Value,
46
+ > extends ProvableHashList<Value> {
47
+ public constructor(
48
+ valueType: ProvablePure<Value>,
49
+ public readonly prefix: string,
50
+ internalCommitment: Field = Field(0)
51
+ ) {
52
+ super(valueType, internalCommitment);
53
+ }
54
+
55
+ protected hash(elements: Field[]): Field {
56
+ const init = salt(this.prefix);
57
+ const digest = Poseidon.update(init, elements);
58
+ return digest[0];
59
+ }
60
+ }
61
+
62
+ export class MinaActionsHashList extends MinaPrefixedProvableHashList<Field> {
63
+ public constructor(internalCommitment: Field = Field(0)) {
64
+ super(Field, MINA_PREFIXES.sequenceEvents, internalCommitment);
65
+ }
66
+ }
@@ -1,4 +1,4 @@
1
- import { Field, FlexibleProvablePure, Poseidon } from "snarkyjs";
1
+ import { Field, ProvablePure, Poseidon } from "o1js";
2
2
 
3
3
  import { ProvableHashList } from "./ProvableHashList.js";
4
4
  import { stringToField } from "./utils";
@@ -7,7 +7,7 @@ export class PrefixedProvableHashList<Value> extends ProvableHashList<Value> {
7
7
  private readonly prefix: Field;
8
8
 
9
9
  public constructor(
10
- valueType: FlexibleProvablePure<Value>,
10
+ valueType: ProvablePure<Value>,
11
11
  prefix: string,
12
12
  internalCommitment: Field = Field(0)
13
13
  ) {
@@ -1,16 +1,73 @@
1
- import { Field, Poseidon, FlexibleProvablePure, Bool, Provable } from "snarkyjs";
1
+ import {
2
+ Field,
3
+ Poseidon,
4
+ Bool,
5
+ Provable,
6
+ ProvablePure,
7
+ Unconstrained,
8
+ } from "o1js";
9
+
10
+ import { NonMethods } from "./utils";
11
+
12
+ export type ProvableHashListData<Value> = {
13
+ preimage: Field;
14
+ value: NonMethods<Value>;
15
+ };
16
+
17
+ export type VerifiedTransition<T> = {
18
+ from: T;
19
+ to: T;
20
+ };
2
21
 
3
22
  /**
4
23
  * Utilities for creating a hash list from a given value type.
5
24
  */
6
25
  export abstract class ProvableHashList<Value> {
7
26
  public constructor(
8
- private readonly valueType: FlexibleProvablePure<Value>,
9
- public commitment: Field = Field(0)
27
+ protected readonly valueType: ProvablePure<Value>,
28
+ public commitment: Field = Field(0),
29
+ private unconstrainedList: Unconstrained<
30
+ ProvableHashListData<Value>[]
31
+ > = Unconstrained.from([])
10
32
  ) {}
11
33
 
12
34
  protected abstract hash(elements: Field[]): Field;
13
35
 
36
+ private pushUnconstrained(preimage: Field, value: Value) {
37
+ const valueConstant = this.valueType.fromFields(
38
+ this.valueType.toFields(value).map((field) => field.toConstant())
39
+ );
40
+ this.unconstrainedList.get().push({
41
+ preimage: preimage.toConstant(),
42
+ value: valueConstant,
43
+ });
44
+ }
45
+
46
+ /**
47
+ * Fast-forwards the state of the hashlist to a specified new tip.
48
+ * This assumes the transition (from -> to) to be already verified somewhere
49
+ * else that is outside this scope.
50
+ */
51
+ public fastForward(
52
+ transition: VerifiedTransition<Field>,
53
+ message: string = "some hashlist"
54
+ ) {
55
+ const { from, to } = transition;
56
+ from.assertEquals(
57
+ this.commitment,
58
+ `From-commitment for ${message} not matching`
59
+ );
60
+
61
+ this.commitment = to;
62
+ }
63
+
64
+ public witnessTip(preimage: Field, value: Value): Bool {
65
+ return this.hash([
66
+ this.commitment,
67
+ ...this.valueType.toFields(value),
68
+ ]).equals(this.commitment);
69
+ }
70
+
14
71
  /**
15
72
  * Converts the provided value to Field[] and appends it to
16
73
  * the current hashlist.
@@ -19,19 +76,31 @@ export abstract class ProvableHashList<Value> {
19
76
  * @returns Current hash list.
20
77
  */
21
78
  public push(value: Value) {
79
+ Provable.asProver(() => {
80
+ this.pushUnconstrained(this.commitment, value);
81
+ });
82
+
22
83
  this.commitment = this.hash([
23
84
  this.commitment,
24
85
  ...this.valueType.toFields(value),
25
86
  ]);
87
+
26
88
  return this;
27
89
  }
28
90
 
29
91
  public pushIf(value: Value, condition: Bool) {
92
+ Provable.asProver(() => {
93
+ if (condition.toBoolean()) {
94
+ this.pushUnconstrained(this.commitment, value);
95
+ }
96
+ });
97
+
30
98
  const newCommitment = this.hash([
31
99
  this.commitment,
32
100
  ...this.valueType.toFields(value),
33
101
  ]);
34
102
  this.commitment = Provable.if(condition, newCommitment, this.commitment);
103
+
35
104
  return this;
36
105
  }
37
106
 
@@ -41,6 +110,12 @@ export abstract class ProvableHashList<Value> {
41
110
  public toField() {
42
111
  return this.commitment;
43
112
  }
113
+
114
+ public getUnconstrainedValues(): Unconstrained<
115
+ ProvableHashListData<Value>[]
116
+ > {
117
+ return this.unconstrainedList;
118
+ }
44
119
  }
45
120
 
46
121
  export class DefaultProvableHashList<Value> extends ProvableHashList<Value> {
@@ -0,0 +1,77 @@
1
+ import { Bool, Field, Poseidon, Provable, ProvablePure } from "o1js";
2
+
3
+ import { NonMethods } from "./utils";
4
+
5
+ export class ProvableReductionHashList<Value> {
6
+ public constructor(
7
+ protected readonly valueType: ProvablePure<Value>,
8
+ public commitment: Field = Field(0)
9
+ ) {}
10
+
11
+ public unconstrainedList: Value[] = [];
12
+
13
+ private constrainedLastValue: Value | undefined = undefined;
14
+
15
+ private preimage: Field = this.commitment;
16
+
17
+ public pushAndReduce(
18
+ value: Value,
19
+ reduce: (previous: Value) => [Value, Bool]
20
+ ): { popLast: Bool; value: Value } {
21
+ let valueToPush = value;
22
+ let popLast = Bool(false);
23
+
24
+ // Theoretically, we can feed the preimage + last value as a witness
25
+ // for non-zero commitment starts (like used in the BlockProver), because
26
+ // currently it won't reduce across chunks. But this is okay for now I think
27
+ if (this.constrainedLastValue !== undefined) {
28
+ [valueToPush, popLast] = reduce(this.constrainedLastValue);
29
+ }
30
+
31
+ Provable.asProver(() => {
32
+ if (popLast.toBoolean()) {
33
+ this.unconstrainedList.pop();
34
+ }
35
+
36
+ const valueAsConstant = this.valueType.fromFields(
37
+ this.valueType.toFields(valueToPush).map((field) => field.toConstant())
38
+ );
39
+ this.unconstrainedList.push(valueAsConstant);
40
+ });
41
+
42
+ const currentCommitment = this.commitment;
43
+ const noPopCommitment = this.hash([
44
+ currentCommitment,
45
+ ...this.valueType.toFields(valueToPush),
46
+ ]);
47
+
48
+ const popCommitment = this.hash([
49
+ this.preimage,
50
+ ...this.valueType.toFields(valueToPush),
51
+ ]);
52
+
53
+ this.commitment = Provable.if(popLast, popCommitment, noPopCommitment);
54
+
55
+ this.constrainedLastValue = valueToPush;
56
+ this.preimage = Provable.if(popLast, this.preimage, currentCommitment);
57
+
58
+ return {
59
+ popLast,
60
+ value: valueToPush,
61
+ };
62
+ }
63
+
64
+ public pushIf(value: Value, condition: Bool) {
65
+ throw new Error("pushIf is not implemented for ReducedHashList");
66
+
67
+ return this;
68
+ }
69
+
70
+ public hash(elements: Field[]): Field {
71
+ return Poseidon.hash(elements);
72
+ }
73
+
74
+ public getUnconstrainedValues(): NonMethods<Value>[] {
75
+ return this.unconstrainedList;
76
+ }
77
+ }
@@ -1,7 +1,5 @@
1
- // eslint-disable-next-line max-len
2
- /* eslint-disable @typescript-eslint/no-explicit-any,@typescript-eslint/ban-types, @typescript-eslint/no-unsafe-return,@typescript-eslint/no-empty-function */
3
-
4
- import { Circuit, Field, Poseidon, Proof } from "snarkyjs";
1
+ import { Bool, Field, Poseidon, Provable } from "o1js";
2
+ import floor from "lodash/floor";
5
3
 
6
4
  export type ReturnType<FunctionType extends Function> = FunctionType extends (
7
5
  ...args: any[]
@@ -9,10 +7,6 @@ export type ReturnType<FunctionType extends Function> = FunctionType extends (
9
7
  ? Return
10
8
  : any;
11
9
 
12
- export type UnTypedClass = new (...args: any[]) => any;
13
-
14
- export type TypedClass<Class> = new (...args: any[]) => Class;
15
-
16
10
  export type Subclass<Class extends new (...args: any) => any> = (new (
17
11
  ...args: any
18
12
  ) => InstanceType<Class>) & {
@@ -28,76 +22,71 @@ export function notInCircuit(): MethodDecorator {
28
22
  // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
29
23
  const childFunction = descriptor.value;
30
24
  descriptor.value = function value(this: any, ...args: any[]) {
31
- if (Circuit.inCheckedComputation() || Circuit.inProver()) {
25
+ if (Provable.inCheckedComputation() || Provable.inProver()) {
32
26
  throw new Error(
33
27
  `Method ${propertyKey.toString()} is supposed to be only called outside of the circuit`
34
28
  );
35
29
  }
36
- // eslint-disable-next-line max-len
37
- // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
38
30
  return childFunction.apply(this, args);
39
31
  };
40
32
  return descriptor;
41
33
  };
42
34
  }
43
35
 
44
- export function stringToField(value: string, throwOnOverflow = false) {
45
- const fieldSize = Field.sizeInBytes();
36
+ export function stringToField(value: string) {
37
+ const fieldSize = Field.sizeInBytes - 1;
46
38
 
47
- // eslint-disable-next-line putout/putout
39
+ // Encode string as byte[]
48
40
  const encoder = new TextEncoder();
49
-
50
41
  const stringBytes = Array.from(encoder.encode(value));
51
42
 
43
+ // Add padding in case the string is not a multiple of Field.sizeInBytes
52
44
  const padding = Array.from<number>({
53
- length: fieldSize - stringBytes.length,
45
+ length: fieldSize - (stringBytes.length % fieldSize),
54
46
  }).fill(0);
55
- const data = stringBytes.concat(padding);
47
+ const data = stringBytes.concat(padding).reverse();
56
48
 
57
- if (data.length > fieldSize) {
58
- if (throwOnOverflow) {
59
- throw new Error(
60
- "Trying to encode a stringt that is larger than 256 bits"
61
- );
62
- }
63
-
64
- // Hash the result Field[] to reduce it to
65
- const chunks = data.reduce<number[][]>((a, b, index) => {
66
- const arrayIndex = index / fieldSize;
67
- if (a.length <= arrayIndex) {
68
- a.push([]);
69
- }
49
+ // Hash the result Field[] to reduce it to
50
+ const chunks = data.reduce<number[][]>(
51
+ (a, b, index) => {
52
+ const arrayIndex = floor(index / fieldSize);
70
53
  a[arrayIndex].push(b);
71
54
  return a;
72
- }, []);
73
- return Poseidon.hash(chunks.map((x) => Field.fromBytes(x)));
74
- }
75
-
76
- return Field.fromBytes(data);
55
+ },
56
+
57
+ Array.from<number[]>({ length: floor(data.length / fieldSize) }).map(
58
+ () => []
59
+ )
60
+ );
61
+ const fields = chunks.map((x) =>
62
+ // We have to add a zero at the highest byte here, because a Field is
63
+ // a bit smaller than 2^256
64
+ Field.fromBytes(x.concat([0]))
65
+ );
66
+ return Poseidon.hash(fields);
77
67
  }
78
68
 
79
- /**
80
- * Note: This only works for strings that have been encoded using the `throwOnOverflow` set to true
81
- */
82
- export function fieldToString(value: Field | bigint): string {
69
+ export function singleFieldToString(value: Field | bigint): string {
70
+ let fieldValue = value;
83
71
  if (typeof value === "bigint") {
84
- value = Field(value);
72
+ fieldValue = Field(value);
85
73
  }
86
- let bytes = Field.toBytes(value);
87
- // Find start of padded zeroes in order to remove them.
88
- const zeroesStart =
89
- bytes.length -
90
- bytes
91
- .slice()
92
- .reverse()
93
- .findIndex((element) => element !== 0);
94
-
95
- bytes = bytes.slice(0, zeroesStart);
74
+ return fieldValue.toString();
75
+ }
96
76
 
97
- // eslint-disable-next-line putout/putout
98
- const decoder = new TextDecoder();
77
+ type NonMethodKeys<T> = {
78
+ [K in keyof T]: T[K] extends Function ? never : K;
79
+ }[keyof T];
80
+ export type NonMethods<T> = Pick<T, NonMethodKeys<T>>;
99
81
 
100
- return decoder.decode(new Uint8Array(bytes));
82
+ /**
83
+ * Asserts the equality of a and b, but only if doAssertion is true, otherwise it will assert 0 = 0
84
+ */
85
+ export function assertEqualsIf(
86
+ a: Field,
87
+ b: Field,
88
+ doAssertion: Bool,
89
+ msg: string
90
+ ) {
91
+ a.mul(doAssertion.toField()).assertEquals(b.mul(doAssertion.toField()), msg);
101
92
  }
102
-
103
- export function noop(): void {}