@proto-kit/protocol 0.1.1-develop.600 → 0.1.1-develop.833

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 (285) hide show
  1. package/LICENSE.md +201 -201
  2. package/dist/blockmodules/AccountStateModule.d.ts +37 -37
  3. package/dist/blockmodules/AccountStateModule.js +43 -43
  4. package/dist/blockmodules/BlockHeightHook.d.ts +6 -6
  5. package/dist/blockmodules/BlockHeightHook.js +15 -15
  6. package/dist/blockmodules/LastStateRootBlockHook.d.ts +7 -7
  7. package/dist/blockmodules/LastStateRootBlockHook.js +15 -15
  8. package/dist/blockmodules/NoopBlockHook.d.ts +8 -8
  9. package/dist/blockmodules/NoopBlockHook.js +9 -9
  10. package/dist/blockmodules/NoopSettlementHook.d.ts +5 -5
  11. package/dist/blockmodules/NoopSettlementHook.d.ts.map +1 -1
  12. package/dist/blockmodules/NoopSettlementHook.js +18 -18
  13. package/dist/blockmodules/NoopTransactionHook.d.ts +5 -5
  14. package/dist/blockmodules/NoopTransactionHook.js +4 -4
  15. package/dist/hooks/AccountStateHook.d.ts +19 -5
  16. package/dist/hooks/AccountStateHook.d.ts.map +1 -1
  17. package/dist/hooks/AccountStateHook.js +15 -9
  18. package/dist/hooks/BlockHeightHook.d.ts +3 -3
  19. package/dist/hooks/BlockHeightHook.d.ts.map +1 -1
  20. package/dist/hooks/BlockHeightHook.js +5 -4
  21. package/dist/hooks/LastStateRootBlockHook.d.ts +8 -0
  22. package/dist/hooks/LastStateRootBlockHook.d.ts.map +1 -0
  23. package/dist/hooks/LastStateRootBlockHook.js +15 -0
  24. package/dist/hooks/NoopBlockHook.d.ts +6 -4
  25. package/dist/hooks/NoopBlockHook.d.ts.map +1 -1
  26. package/dist/hooks/NoopBlockHook.js +4 -4
  27. package/dist/hooks/NoopSettlementHook.d.ts +6 -0
  28. package/dist/hooks/NoopSettlementHook.d.ts.map +1 -0
  29. package/dist/hooks/NoopSettlementHook.js +17 -0
  30. package/dist/hooks/NoopTransactionHook.d.ts +1 -1
  31. package/dist/hooks/NoopTransactionHook.d.ts.map +1 -1
  32. package/dist/hooks/NoopTransactionHook.js +4 -1
  33. package/dist/index.d.ts +18 -8
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +18 -8
  36. package/dist/model/MethodPublicOutput.d.ts +68 -34
  37. package/dist/model/MethodPublicOutput.d.ts.map +1 -1
  38. package/dist/model/Option.d.ts +39 -19
  39. package/dist/model/Option.d.ts.map +1 -1
  40. package/dist/model/Option.js +6 -0
  41. package/dist/model/Path.d.ts +1 -1
  42. package/dist/model/Path.d.ts.map +1 -1
  43. package/dist/model/Path.js +0 -2
  44. package/dist/model/RuntimeLike.d.ts +11 -0
  45. package/dist/model/RuntimeLike.d.ts.map +1 -0
  46. package/dist/model/RuntimeLike.js +1 -0
  47. package/dist/model/StateTransition.d.ts +51 -14
  48. package/dist/model/StateTransition.d.ts.map +1 -1
  49. package/dist/model/StateTransition.js +3 -0
  50. package/dist/model/StateTransitionProvableBatch.d.ts +71 -14
  51. package/dist/model/StateTransitionProvableBatch.d.ts.map +1 -1
  52. package/dist/model/StateTransitionReduction.d.ts +3 -0
  53. package/dist/model/StateTransitionReduction.d.ts.map +1 -0
  54. package/dist/model/StateTransitionReduction.js +26 -0
  55. package/dist/model/network/NetworkState.d.ts +73 -18
  56. package/dist/model/network/NetworkState.d.ts.map +1 -1
  57. package/dist/model/network/NetworkState.js +2 -2
  58. package/dist/model/transaction/ProtocolTransaction.d.ts +69 -69
  59. package/dist/model/transaction/ProtocolTransaction.js +18 -18
  60. package/dist/model/transaction/RuntimeTransaction.d.ts +50 -16
  61. package/dist/model/transaction/RuntimeTransaction.d.ts.map +1 -1
  62. package/dist/model/transaction/RuntimeTransaction.js +4 -4
  63. package/dist/model/transaction/SignedTransaction.d.ts +39 -3
  64. package/dist/model/transaction/SignedTransaction.d.ts.map +1 -1
  65. package/dist/model/transaction/SignedTransaction.js +1 -1
  66. package/dist/model/transaction/ValueOption.d.ts +86 -32
  67. package/dist/model/transaction/ValueOption.d.ts.map +1 -1
  68. package/dist/model/transaction/ValueOption.js +1 -1
  69. package/dist/protocol/Protocol.d.ts +14 -20
  70. package/dist/protocol/Protocol.d.ts.map +1 -1
  71. package/dist/protocol/Protocol.js +13 -27
  72. package/dist/protocol/ProtocolEnvironment.d.ts +3 -3
  73. package/dist/protocol/ProtocolEnvironment.d.ts.map +1 -1
  74. package/dist/protocol/ProtocolModule.d.ts +1 -0
  75. package/dist/protocol/ProtocolModule.d.ts.map +1 -1
  76. package/dist/protocol/ProtocolModule.js +4 -2
  77. package/dist/protocol/ProvableBlockHook.d.ts +2 -2
  78. package/dist/protocol/ProvableBlockHook.d.ts.map +1 -1
  79. package/dist/protocol/ProvableTransactionHook.d.ts +1 -1
  80. package/dist/protocol/ProvableTransactionHook.d.ts.map +1 -1
  81. package/dist/prover/block/BlockProvable.d.ts +240 -98
  82. package/dist/prover/block/BlockProvable.d.ts.map +1 -1
  83. package/dist/prover/block/BlockProver.d.ts +8 -8
  84. package/dist/prover/block/BlockProver.d.ts.map +1 -1
  85. package/dist/prover/block/BlockProver.js +55 -45
  86. package/dist/prover/block/BlockTransactionPosition.d.ts +35 -35
  87. package/dist/prover/block/BlockTransactionPosition.js +25 -25
  88. package/dist/prover/block/BundleTransactionPosition.d.ts +36 -0
  89. package/dist/prover/block/BundleTransactionPosition.d.ts.map +1 -0
  90. package/dist/prover/block/BundleTransactionPosition.js +25 -0
  91. package/dist/prover/block/SplitPrefilledStateService.d.ts +11 -0
  92. package/dist/prover/block/SplitPrefilledStateService.d.ts.map +1 -0
  93. package/dist/prover/block/SplitPrefilledStateService.js +1 -0
  94. package/dist/prover/block/SplitStateService.d.ts +11 -0
  95. package/dist/prover/block/SplitStateService.d.ts.map +1 -0
  96. package/dist/prover/block/SplitStateService.js +1 -0
  97. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts +35 -16
  98. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts.map +1 -1
  99. package/dist/prover/block/accummulators/BlockHashMerkleTree.js +1 -1
  100. package/dist/prover/block/acummulators/BlockHashMerkleTree.d.ts +45 -0
  101. package/dist/prover/block/acummulators/BlockHashMerkleTree.d.ts.map +1 -0
  102. package/dist/prover/block/acummulators/BlockHashMerkleTree.js +16 -0
  103. package/dist/prover/statetransition/StateTransitionProvable.d.ts +116 -58
  104. package/dist/prover/statetransition/StateTransitionProvable.d.ts.map +1 -1
  105. package/dist/prover/statetransition/StateTransitionProver.d.ts +10 -9
  106. package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -1
  107. package/dist/prover/statetransition/StateTransitionProver.js +18 -22
  108. package/dist/prover/statetransition/StateTransitionWitnessProvider.js +1 -2
  109. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.js +1 -2
  110. package/dist/settlement/ContractModule.d.ts +15 -0
  111. package/dist/settlement/ContractModule.d.ts.map +1 -0
  112. package/dist/settlement/ContractModule.js +11 -0
  113. package/dist/settlement/DispatchContract.d.ts +20 -0
  114. package/dist/settlement/DispatchContract.d.ts.map +1 -0
  115. package/dist/settlement/DispatchContract.js +112 -0
  116. package/dist/settlement/OutgoingMessageArgument.d.ts +109 -0
  117. package/dist/settlement/OutgoingMessageArgument.d.ts.map +1 -0
  118. package/dist/settlement/OutgoingMessageArgument.js +32 -0
  119. package/dist/settlement/ProvableSettlementHook.d.ts +25 -25
  120. package/dist/settlement/ProvableSettlementHook.js +3 -3
  121. package/dist/settlement/SettlementContract.d.ts +229 -229
  122. package/dist/settlement/SettlementContract.js +346 -346
  123. package/dist/settlement/SettlementContractModule.d.ts +40 -0
  124. package/dist/settlement/SettlementContractModule.d.ts.map +1 -0
  125. package/dist/settlement/SettlementContractModule.js +71 -0
  126. package/dist/settlement/contracts/DispatchContract.d.ts +21 -0
  127. package/dist/settlement/contracts/DispatchContract.d.ts.map +1 -0
  128. package/dist/settlement/contracts/DispatchContract.js +111 -0
  129. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts +12 -0
  130. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts.map +1 -0
  131. package/dist/{hooks/TransactionFeeHook.js → settlement/contracts/DispatchContractProtocolModule.js} +17 -21
  132. package/dist/settlement/contracts/DispatchSmartContract.d.ts +22 -0
  133. package/dist/settlement/contracts/DispatchSmartContract.d.ts.map +1 -0
  134. package/dist/settlement/contracts/DispatchSmartContract.js +110 -0
  135. package/dist/settlement/contracts/SettlementContract.d.ts +19 -0
  136. package/dist/settlement/contracts/SettlementContract.d.ts.map +1 -0
  137. package/dist/settlement/contracts/SettlementContract.js +43 -0
  138. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts +19 -0
  139. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts.map +1 -0
  140. package/dist/settlement/contracts/SettlementContractProtocolModule.js +44 -0
  141. package/dist/settlement/contracts/SettlementSmartContract.d.ts +42 -0
  142. package/dist/settlement/contracts/SettlementSmartContract.d.ts.map +1 -0
  143. package/dist/settlement/contracts/SettlementSmartContract.js +246 -0
  144. package/dist/settlement/messages/Deposit.d.ts +64 -0
  145. package/dist/settlement/messages/Deposit.d.ts.map +1 -0
  146. package/dist/settlement/messages/Deposit.js +6 -0
  147. package/dist/settlement/messages/OutgoingMessageArgument.d.ts +189 -0
  148. package/dist/settlement/messages/OutgoingMessageArgument.d.ts.map +1 -0
  149. package/dist/settlement/messages/OutgoingMessageArgument.js +32 -0
  150. package/dist/settlement/messages/Withdrawal.d.ts +65 -0
  151. package/dist/settlement/messages/Withdrawal.d.ts.map +1 -0
  152. package/dist/settlement/messages/Withdrawal.js +13 -0
  153. package/dist/settlement/modularity/ProvableSettlementHook.d.ts +24 -0
  154. package/dist/settlement/modularity/ProvableSettlementHook.d.ts.map +1 -0
  155. package/dist/settlement/modularity/ProvableSettlementHook.js +3 -0
  156. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts +3 -3
  157. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts.map +1 -1
  158. package/dist/settlement/modules/NetworkStateSettlementModule.js +4 -2
  159. package/dist/state/State.d.ts +4 -3
  160. package/dist/state/State.d.ts.map +1 -1
  161. package/dist/state/State.js +18 -12
  162. package/dist/state/StateMap.d.ts +3 -3
  163. package/dist/state/StateMap.d.ts.map +1 -1
  164. package/dist/state/StateMap.js +4 -5
  165. package/dist/state/StateService.d.ts +3 -3
  166. package/dist/state/StateService.d.ts.map +1 -1
  167. package/dist/state/StateServiceProvider.d.ts +3 -3
  168. package/dist/state/StateServiceProvider.d.ts.map +1 -1
  169. package/dist/state/StateServiceProvider.js +1 -3
  170. package/dist/state/assert/assert.d.ts +1 -1
  171. package/dist/state/assert/assert.d.ts.map +1 -1
  172. package/dist/state/assert/assert.js +11 -5
  173. package/dist/state/context/ProtocolMethodExecutionContext.d.ts +1 -1
  174. package/dist/state/context/ProtocolMethodExecutionContext.d.ts.map +1 -1
  175. package/dist/state/context/ProtocolMethodExecutionContext.js +1 -1
  176. package/dist/state/context/RuntimeMethodExecutionContext.d.ts +55 -4
  177. package/dist/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -1
  178. package/dist/state/context/RuntimeMethodExecutionContext.js +6 -6
  179. package/dist/state/context/TransitionMethodExecutionContext.d.ts.map +1 -1
  180. package/dist/state/context/TransitionMethodExecutionContext.js +0 -1
  181. package/dist/state/context/contextExecution.d.ts +14 -0
  182. package/dist/state/context/contextExecution.d.ts.map +1 -0
  183. package/dist/state/context/contextExecution.js +30 -0
  184. package/dist/state/protocol/ProtocolState.d.ts.map +1 -1
  185. package/dist/state/protocol/ProtocolState.js +0 -3
  186. package/dist/utils/AppliedBatchHashList.d.ts +17 -0
  187. package/dist/utils/AppliedBatchHashList.d.ts.map +1 -0
  188. package/dist/utils/AppliedBatchHashList.js +24 -0
  189. package/dist/utils/MinaPrefixedProvableHashList.d.ts +2 -2
  190. package/dist/utils/MinaPrefixedProvableHashList.d.ts.map +1 -1
  191. package/dist/utils/MinaPrefixedProvableHashList.js +1 -0
  192. package/dist/utils/PrefixedProvableHashList.d.ts +2 -2
  193. package/dist/utils/PrefixedProvableHashList.d.ts.map +1 -1
  194. package/dist/utils/ProvableHashList.d.ts +4 -4
  195. package/dist/utils/ProvableHashList.d.ts.map +1 -1
  196. package/dist/utils/ProvableReductionHashList.d.ts +14 -0
  197. package/dist/utils/ProvableReductionHashList.d.ts.map +1 -0
  198. package/dist/utils/ProvableReductionHashList.js +50 -0
  199. package/dist/utils/StateTransitionReductionList.d.ts +11 -0
  200. package/dist/utils/StateTransitionReductionList.d.ts.map +1 -0
  201. package/dist/utils/StateTransitionReductionList.js +60 -0
  202. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts +11 -0
  203. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts.map +1 -0
  204. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.js +12 -0
  205. package/dist/utils/merkletree/MerkleTreeStore.d.ts +5 -0
  206. package/dist/utils/merkletree/MerkleTreeStore.d.ts.map +1 -0
  207. package/dist/utils/merkletree/MerkleTreeStore.js +1 -0
  208. package/dist/utils/merkletree/RollupMerkleTree.d.ts +133 -0
  209. package/dist/utils/merkletree/RollupMerkleTree.d.ts.map +1 -0
  210. package/dist/utils/merkletree/RollupMerkleTree.js +255 -0
  211. package/dist/utils/utils.d.ts +1 -1
  212. package/dist/utils/utils.d.ts.map +1 -1
  213. package/dist/utils/utils.js +5 -10
  214. package/package.json +5 -5
  215. package/src/{blockmodules/AccountStateModule.ts → hooks/AccountStateHook.ts} +13 -9
  216. package/src/{blockmodules → hooks}/BlockHeightHook.ts +3 -4
  217. package/src/{blockmodules → hooks}/LastStateRootBlockHook.ts +4 -4
  218. package/src/{blockmodules → hooks}/NoopBlockHook.ts +6 -5
  219. package/src/{blockmodules → hooks}/NoopSettlementHook.ts +3 -4
  220. package/src/{blockmodules → hooks}/NoopTransactionHook.ts +5 -1
  221. package/src/index.ts +18 -8
  222. package/src/model/MethodPublicOutput.ts +2 -2
  223. package/src/model/Option.ts +21 -1
  224. package/src/model/Path.ts +1 -3
  225. package/src/model/RuntimeLike.ts +12 -0
  226. package/src/model/StateTransition.ts +9 -1
  227. package/src/model/Transaction.ts +2 -0
  228. package/src/model/network/NetworkState.ts +2 -2
  229. package/src/model/transaction/RuntimeTransaction.ts +5 -12
  230. package/src/model/transaction/SignedTransaction.ts +1 -8
  231. package/src/model/transaction/ValueOption.ts +1 -1
  232. package/src/protocol/Protocol.ts +34 -48
  233. package/src/protocol/ProtocolEnvironment.ts +7 -6
  234. package/src/protocol/ProtocolModule.ts +8 -4
  235. package/src/protocol/ProvableBlockHook.ts +3 -3
  236. package/src/protocol/ProvableTransactionHook.ts +4 -2
  237. package/src/protocol/TransitioningProtocolModule.ts +1 -1
  238. package/src/prover/block/BlockProvable.ts +3 -3
  239. package/src/prover/block/BlockProver.ts +98 -63
  240. package/src/prover/block/accummulators/BlockHashMerkleTree.ts +2 -2
  241. package/src/prover/statetransition/StateTransitionProvable.ts +3 -3
  242. package/src/prover/statetransition/StateTransitionProver.ts +26 -28
  243. package/src/settlement/ContractModule.ts +24 -0
  244. package/src/settlement/SettlementContractModule.ts +132 -0
  245. package/src/settlement/contracts/DispatchContractProtocolModule.ts +39 -0
  246. package/src/settlement/contracts/DispatchSmartContract.ts +136 -0
  247. package/src/settlement/contracts/SettlementContractProtocolModule.ts +67 -0
  248. package/src/settlement/contracts/SettlementSmartContract.ts +350 -0
  249. package/src/settlement/messages/Deposit.ts +6 -0
  250. package/src/settlement/messages/OutgoingMessageArgument.ts +42 -0
  251. package/src/settlement/messages/Withdrawal.ts +14 -0
  252. package/src/settlement/{ProvableSettlementHook.ts → modularity/ProvableSettlementHook.ts} +9 -13
  253. package/src/settlement/modules/NetworkStateSettlementModule.ts +8 -5
  254. package/src/state/State.ts +21 -13
  255. package/src/state/StateMap.ts +4 -5
  256. package/src/state/StateService.ts +3 -3
  257. package/src/state/StateServiceProvider.ts +6 -7
  258. package/src/state/assert/assert.ts +13 -7
  259. package/src/state/context/RuntimeMethodExecutionContext.ts +13 -7
  260. package/src/state/context/TransitionMethodExecutionContext.ts +0 -1
  261. package/src/state/protocol/ProtocolState.ts +1 -4
  262. package/src/utils/MinaPrefixedProvableHashList.ts +4 -3
  263. package/src/utils/PrefixedProvableHashList.ts +2 -2
  264. package/src/utils/ProvableHashList.ts +2 -2
  265. package/src/utils/ProvableReductionHashList.ts +68 -0
  266. package/src/utils/StateTransitionReductionList.ts +89 -0
  267. package/src/utils/utils.ts +4 -9
  268. package/test/BlockProver.test.ts +110 -128
  269. package/test/Protocol.test.ts +14 -21
  270. package/test/State.test.ts +8 -8
  271. package/test/StateTransition.test.ts +56 -66
  272. package/test/TestingProtocol.ts +48 -0
  273. package/test/model/Option.test.ts +72 -0
  274. package/{src → test}/state/assert/assert.test.ts +4 -4
  275. package/test/tsconfig.json +7 -0
  276. package/test/utils/ProvableReductionHashList.test.ts +117 -0
  277. package/test/utils.test.ts +0 -3
  278. package/dist/hooks/TransactionFeeHook.d.ts +0 -16
  279. package/dist/hooks/TransactionFeeHook.d.ts.map +0 -1
  280. package/src/blockmodules/SequenceStateTransactionModule.ts +0 -25
  281. package/src/model/Option.test.ts +0 -21
  282. package/src/settlement/SettlementContract.ts +0 -444
  283. package/src/state/context/ProtocolMethodExecutionContext.ts +0 -36
  284. package/test/Option.test.ts +0 -64
  285. package/tsconfig.test.json +0 -9
@@ -0,0 +1,255 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ /* eslint-disable id-length */
11
+ /* eslint-disable line-comment-position */
12
+ /* eslint-disable no-inline-comments */
13
+ /* eslint-disable @typescript-eslint/no-magic-numbers */
14
+ import { Bool, Field, Poseidon, Provable, Struct } from "o1js";
15
+ import { range } from "@proto-kit/common";
16
+ import { notInCircuit } from "../utils";
17
+ import { InMemoryMerkleTreeStorage } from "./InMemoryMerkleTreeStorage";
18
+ // external API
19
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
20
+ export { RollupMerkleTree, RollupMerkleWitness };
21
+ // internal API
22
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
23
+ export { maybeSwap };
24
+ /**
25
+ * The {@link BaseMerkleWitness} class defines a circuit-compatible base class
26
+ * for [Merkle Witness'](https://computersciencewiki.org/index.php/Merkle_proof).
27
+ */
28
+ class RollupMerkleWitness extends Struct({
29
+ path: Provable.Array(Field, 256 - 1),
30
+ isLeft: Provable.Array(Bool, 256 - 1),
31
+ }) {
32
+ height() {
33
+ return RollupMerkleWitness.height;
34
+ }
35
+ /**
36
+ * Calculates a root depending on the leaf value.
37
+ * @param leaf Value of the leaf node that belongs to this Witness.
38
+ * @returns The calculated root.
39
+ */
40
+ calculateRoot(hash) {
41
+ const n = this.height();
42
+ for (let index = 1; index < n; ++index) {
43
+ const isLeft = this.isLeft[index - 1];
44
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
45
+ const [left, right] = maybeSwap(isLeft, hash, this.path[index - 1]);
46
+ hash = Poseidon.hash([left, right]);
47
+ }
48
+ return hash;
49
+ }
50
+ /**
51
+ * Calculates the index of the leaf node that belongs to this Witness.
52
+ * @returns Index of the leaf.
53
+ */
54
+ calculateIndex() {
55
+ let powerOfTwo = Field(1);
56
+ let index = Field(0);
57
+ const n = this.height();
58
+ // eslint-disable-next-line no-underscore-dangle
59
+ for (let index_ = 1; index_ < n; ++index_) {
60
+ index = Provable.if(this.isLeft[index_ - 1], index, index.add(powerOfTwo));
61
+ powerOfTwo = powerOfTwo.mul(2);
62
+ }
63
+ return index;
64
+ }
65
+ toShortenedEntries() {
66
+ return range(0, 5)
67
+ .concat(range(251, 255))
68
+ .map((index) => [this.path[index].toString(), this.isLeft[index].toString()].toString());
69
+ }
70
+ }
71
+ RollupMerkleWitness.height = 256;
72
+ /**
73
+ * A [Merkle Tree](https://en.wikipedia.org/wiki/Merkle_tree) is a binary tree in
74
+ * which every leaf is the cryptography hash of a piece of data,
75
+ * and every node is the hash of the concatenation of its two child nodes.
76
+ *
77
+ * A Merkle Tree allows developers to easily and securely verify
78
+ * the integrity of large amounts of data.
79
+ *
80
+ * Take a look at our [documentation](https://docs.minaprotocol.com/en/zkapps)
81
+ * on how to use Merkle Trees in combination with zkApps and
82
+ * zero knowledge programming!
83
+ *
84
+ * Levels are indexed from leaves (level 0) to root (level N - 1).
85
+ */
86
+ class RollupMerkleTree {
87
+ static get leafCount() {
88
+ return 2n ** BigInt(RollupMerkleTree.height - 1);
89
+ }
90
+ constructor(store) {
91
+ this.store = store;
92
+ // eslint-disable-next-line @shopify/prefer-class-properties
93
+ this.zeroes = [0n];
94
+ for (let index = 1; index < RollupMerkleTree.height; index += 1) {
95
+ const previousLevel = Field(this.zeroes[index - 1]);
96
+ this.zeroes.push(Poseidon.hash([previousLevel, previousLevel]).toBigInt());
97
+ }
98
+ }
99
+ /**
100
+ * Returns a node which lives at a given index and level.
101
+ * @param level Level of the node.
102
+ * @param index Index of the node.
103
+ * @returns The data of the node.
104
+ */
105
+ getNode(level, index) {
106
+ return Field(this.store.getNode(index, level) ?? this.zeroes[level]);
107
+ }
108
+ /**
109
+ * Returns the root of the [Merkle Tree](https://en.wikipedia.org/wiki/Merkle_tree).
110
+ * @returns The root of the Merkle Tree.
111
+ */
112
+ getRoot() {
113
+ return this.getNode(RollupMerkleTree.height - 1, 0n);
114
+ }
115
+ // eslint-disable-next-line no-warning-comments
116
+ // TODO: this allows to set a node at an index larger than the size. OK?
117
+ setNode(level, index, value) {
118
+ this.store.setNode(index, level, value.toBigInt());
119
+ }
120
+ /**
121
+ * TODO: if this is passed an index bigger than the max, it will set a couple
122
+ * of out-of-bounds nodes but not affect the real Merkle root. OK?
123
+ */
124
+ /**
125
+ * Sets the value of a leaf node at a given index to a given value.
126
+ * @param index Position of the leaf node.
127
+ * @param leaf New value.
128
+ */
129
+ setLeaf(index, leaf) {
130
+ if (index >= this.leafCount) {
131
+ index %= this.leafCount;
132
+ }
133
+ this.setNode(0, index, leaf);
134
+ let currentIndex = index;
135
+ for (let level = 1; level < RollupMerkleTree.height; level += 1) {
136
+ currentIndex /= 2n;
137
+ const left = this.getNode(level - 1, currentIndex * 2n);
138
+ const right = this.getNode(level - 1, currentIndex * 2n + 1n);
139
+ this.setNode(level, currentIndex, Poseidon.hash([left, right]));
140
+ }
141
+ }
142
+ /**
143
+ * Returns the witness (also known as
144
+ * [Merkle Proof or Merkle Witness](https://computersciencewiki.org/index.php/Merkle_proof))
145
+ * for the leaf at the given index.
146
+ * @param index Position of the leaf node.
147
+ * @returns The witness that belongs to the leaf.
148
+ */
149
+ getWitness(index) {
150
+ if (index >= this.leafCount) {
151
+ throw new Error("Index too large for merkle height");
152
+ }
153
+ const path = [];
154
+ const isLefts = [];
155
+ for (let level = 0; level < RollupMerkleTree.height - 1; level += 1) {
156
+ const isLeft = index % 2n === 0n;
157
+ const sibling = this.getNode(level, isLeft ? index + 1n : index - 1n);
158
+ isLefts.push(Bool(isLeft));
159
+ path.push(sibling);
160
+ index /= 2n;
161
+ }
162
+ return new RollupMerkleWitness({
163
+ isLeft: isLefts,
164
+ path,
165
+ });
166
+ }
167
+ // eslint-disable-next-line no-warning-comments, max-len
168
+ // TODO: should this take an optional offset? should it fail if the array is too long?
169
+ /**
170
+ * Fills all leaves of the tree.
171
+ * @param leaves Values to fill the leaves with.
172
+ */
173
+ fill(leaves) {
174
+ leaves.forEach((value, index) => {
175
+ this.setLeaf(BigInt(index), value);
176
+ });
177
+ }
178
+ /**
179
+ * Returns the amount of leaf nodes.
180
+ * @returns Amount of leaf nodes.
181
+ */
182
+ get leafCount() {
183
+ return RollupMerkleTree.leafCount;
184
+ }
185
+ }
186
+ RollupMerkleTree.height = 256;
187
+ RollupMerkleTree.EMPTY_ROOT = new RollupMerkleTree(new InMemoryMerkleTreeStorage())
188
+ .getRoot()
189
+ .toBigInt();
190
+ __decorate([
191
+ notInCircuit(),
192
+ __metadata("design:type", Function),
193
+ __metadata("design:paramtypes", [Number, BigInt]),
194
+ __metadata("design:returntype", Field)
195
+ ], RollupMerkleTree.prototype, "getNode", null);
196
+ __decorate([
197
+ notInCircuit(),
198
+ __metadata("design:type", Function),
199
+ __metadata("design:paramtypes", []),
200
+ __metadata("design:returntype", Field)
201
+ ], RollupMerkleTree.prototype, "getRoot", null);
202
+ __decorate([
203
+ notInCircuit(),
204
+ __metadata("design:type", Function),
205
+ __metadata("design:paramtypes", [BigInt, Field]),
206
+ __metadata("design:returntype", void 0)
207
+ ], RollupMerkleTree.prototype, "setLeaf", null);
208
+ __decorate([
209
+ notInCircuit(),
210
+ __metadata("design:type", Function),
211
+ __metadata("design:paramtypes", [Array]),
212
+ __metadata("design:returntype", void 0)
213
+ ], RollupMerkleTree.prototype, "fill", null);
214
+ // eslint-disable-next-line @typescript-eslint/no-namespace
215
+ export var MerkleTreeUtils;
216
+ (function (MerkleTreeUtils) {
217
+ function normalizeKey(key) {
218
+ // if(NJORD_MERKLE_TREE_HEIGHT < 256){
219
+ // return fieldMod(key, Field(RollupMerkleTree.leafCount).toConstant())
220
+ // eslint-disable-next-line max-len
221
+ // // return modPower2(key, RollupMerkleTree.height - 1) //TODO Fix modPower2
222
+ // }else{
223
+ return key;
224
+ // }
225
+ }
226
+ MerkleTreeUtils.normalizeKey = normalizeKey;
227
+ function checkMembership(witness, root, key, value) {
228
+ const root2 = witness.calculateRoot(value);
229
+ const key2 = witness.calculateIndex();
230
+ key.assertEquals(key2, "Keys of MerkleWitness does not match");
231
+ return root.equals(root2);
232
+ }
233
+ MerkleTreeUtils.checkMembership = checkMembership;
234
+ function checkMembershipGetRoots(witness, root, key, value) {
235
+ const root2 = witness.calculateRoot(value);
236
+ const key2 = witness.calculateIndex();
237
+ key.assertEquals(key2, "Keys of MerkleWitness does not match");
238
+ return [root.equals(root2), root, root2];
239
+ }
240
+ MerkleTreeUtils.checkMembershipGetRoots = checkMembershipGetRoots;
241
+ function computeRoot(witness, value) {
242
+ return witness.calculateRoot(value);
243
+ }
244
+ MerkleTreeUtils.computeRoot = computeRoot;
245
+ })(MerkleTreeUtils || (MerkleTreeUtils = {}));
246
+ /**
247
+ * More efficient version of `maybeSwapBad` which
248
+ * reuses an intermediate variable
249
+ */
250
+ function maybeSwap(b, x, y) {
251
+ const m = b.toField().mul(x.sub(y)); // b*(x - y)
252
+ const x1 = y.add(m); // y + b*(x - y)
253
+ const y2 = x.sub(m); // x - b*(x - y) = x + b*(y - x)
254
+ return [x1, y2];
255
+ }
@@ -6,6 +6,6 @@ export type Subclass<Class extends new (...args: any) => any> = (new (...args: a
6
6
  prototype: InstanceType<Class>;
7
7
  };
8
8
  export declare function notInCircuit(): MethodDecorator;
9
- export declare function stringToField(value: string): import("o1js/dist/node/lib/field").Field;
9
+ export declare function stringToField(value: string): import("o1js/dist/node/lib/provable/field").Field;
10
10
  export declare function singleFieldToString(value: Field | bigint): string;
11
11
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAsB,MAAM,MAAM,CAAC;AAGjD,MAAM,MAAM,UAAU,CAAC,YAAY,SAAS,QAAQ,IAAI,YAAY,SAAS,CAC3E,GAAG,IAAI,EAAE,GAAG,EAAE,KACX,MAAM,MAAM,GACb,MAAM,GACN,GAAG,CAAC;AAER,MAAM,MAAM,QAAQ,CAAC,KAAK,SAAS,KAAK,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,KAC/D,GAAG,IAAI,EAAE,GAAG,KACT,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG;KACzB,GAAG,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;CACjC,GAAG;IAAE,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,CAAA;CAAE,CAAC;AAEvC,wBAAgB,YAAY,IAAI,eAAe,CAoB9C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,4CAgC1C;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAKjE"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAsB,MAAM,MAAM,CAAC;AAGjD,MAAM,MAAM,UAAU,CAAC,YAAY,SAAS,QAAQ,IAAI,YAAY,SAAS,CAC3E,GAAG,IAAI,EAAE,GAAG,EAAE,KACX,MAAM,MAAM,GACb,MAAM,GACN,GAAG,CAAC;AAER,MAAM,MAAM,QAAQ,CAAC,KAAK,SAAS,KAAK,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,KAC/D,GAAG,IAAI,EAAE,GAAG,KACT,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG;KACzB,GAAG,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;CACjC,GAAG;IAAE,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,CAAA;CAAE,CAAC;AAEvC,wBAAgB,YAAY,IAAI,eAAe,CAkB9C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,qDA+B1C;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAMjE"}
@@ -1,5 +1,3 @@
1
- // eslint-disable-next-line max-len
2
- /* eslint-disable @typescript-eslint/no-explicit-any,@typescript-eslint/ban-types, @typescript-eslint/no-unsafe-return */
3
1
  import { Field, Poseidon, Provable } from "o1js";
4
2
  import floor from "lodash/floor";
5
3
  export function notInCircuit() {
@@ -10,15 +8,13 @@ export function notInCircuit() {
10
8
  if (Provable.inCheckedComputation() || Provable.inProver()) {
11
9
  throw new Error(`Method ${propertyKey.toString()} is supposed to be only called outside of the circuit`);
12
10
  }
13
- // eslint-disable-next-line max-len
14
- // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
15
11
  return childFunction.apply(this, args);
16
12
  };
17
13
  return descriptor;
18
14
  };
19
15
  }
20
16
  export function stringToField(value) {
21
- const fieldSize = Field.sizeInBytes() - 1;
17
+ const fieldSize = Field.sizeInBytes - 1;
22
18
  // Encode string as byte[]
23
19
  const encoder = new TextEncoder();
24
20
  const stringBytes = Array.from(encoder.encode(value));
@@ -32,9 +28,7 @@ export function stringToField(value) {
32
28
  const arrayIndex = floor(index / fieldSize);
33
29
  a[arrayIndex].push(b);
34
30
  return a;
35
- },
36
- // eslint-disable-next-line array-func/from-map
37
- Array.from({ length: floor(data.length / fieldSize) }).map(() => []));
31
+ }, Array.from({ length: floor(data.length / fieldSize) }).map(() => []));
38
32
  const fields = chunks.map((x) =>
39
33
  // We have to add a zero at the highest byte here, because a Field is
40
34
  // a bit smaller than 2^256
@@ -42,8 +36,9 @@ export function stringToField(value) {
42
36
  return Poseidon.hash(fields);
43
37
  }
44
38
  export function singleFieldToString(value) {
39
+ let fieldValue = value;
45
40
  if (typeof value === "bigint") {
46
- value = Field(value);
41
+ fieldValue = Field(value);
47
42
  }
48
- return value.toString();
43
+ return fieldValue.toString();
49
44
  }
package/package.json CHANGED
@@ -3,14 +3,14 @@
3
3
  "license": "MIT",
4
4
  "private": false,
5
5
  "type": "module",
6
- "version": "0.1.1-develop.600+699a7df",
6
+ "version": "0.1.1-develop.833+397881ed",
7
7
  "scripts": {
8
8
  "build": "tsc -p tsconfig.json",
9
9
  "dev": "tsc -p tsconfig.json --watch",
10
10
  "lint": "eslint ./src ./test",
11
11
  "test:file": "node --experimental-vm-modules --experimental-wasm-modules --experimental-wasm-threads ../../node_modules/jest/bin/jest.js",
12
- "test": "npm run test:file -- ./src/** ./test/**",
13
- "test:watch": "npm run test:file -- ./src/** ./test/** --watch"
12
+ "test": "npm run test:file -- ./test/**",
13
+ "test:watch": "npm run test:file -- ./test/** --watch"
14
14
  },
15
15
  "main": "dist/index.js",
16
16
  "publishConfig": {
@@ -24,7 +24,7 @@
24
24
  },
25
25
  "peerDependencies": {
26
26
  "@proto-kit/common": "*",
27
- "o1js": "0.13.1",
27
+ "o1js": "^1.1.0",
28
28
  "ts-pattern": "^4.3.0",
29
29
  "tsyringe": "^4.7.0"
30
30
  },
@@ -32,5 +32,5 @@
32
32
  "@jest/globals": "^29.5.0",
33
33
  "@types/lodash": "^4.14.194"
34
34
  },
35
- "gitHead": "699a7dfa3b5d3415ab4500f0cd495d6781365c6a"
35
+ "gitHead": "397881ed5d8f98f5005bcd7be7f5a12b3bc6f956"
36
36
  }
@@ -1,4 +1,5 @@
1
- import { Provable, PublicKey, Struct, UInt64 } from "o1js";
1
+ import { PublicKey, Struct, UInt64 } from "o1js";
2
+ import { injectable } from "tsyringe";
2
3
 
3
4
  import { BlockProverExecutionData } from "../prover/block/BlockProvable";
4
5
  import { StateMap } from "../state/StateMap";
@@ -10,18 +11,19 @@ export class AccountState extends Struct({
10
11
  nonce: UInt64,
11
12
  }) {}
12
13
 
13
- export class AccountStateModule extends ProvableTransactionHook {
14
+ @injectable()
15
+ export class AccountStateHook extends ProvableTransactionHook {
14
16
  @protocolState() public accountState = StateMap.from<PublicKey, AccountState>(
15
17
  PublicKey,
16
18
  AccountState
17
19
  );
18
20
 
19
- public onTransaction({ transaction }: BlockProverExecutionData): void {
21
+ public async onTransaction({ transaction }: BlockProverExecutionData) {
20
22
  const sender = transaction.sender.value;
21
23
 
22
- const accountState = this.accountState
23
- .get(sender)
24
- .orElse(new AccountState({ nonce: UInt64.zero }));
24
+ const aso = await this.accountState.get(sender);
25
+
26
+ const accountState = aso.orElse(new AccountState({ nonce: UInt64.zero }));
25
27
 
26
28
  const currentNonce = accountState.nonce;
27
29
 
@@ -30,15 +32,17 @@ export class AccountStateModule extends ProvableTransactionHook {
30
32
  currentNonce
31
33
  .equals(transaction.nonce.value)
32
34
  .or(transaction.sender.isSome.not()),
33
- "Nonce not matching"
35
+ () =>
36
+ `Nonce not matching: tx sent ${transaction.nonce.value.toString()}, onchain value is ${currentNonce.toString()}`
34
37
  );
35
38
 
36
39
  // Optimized version of transaction.sender.isSome ? currentNonce.add(1) : Field(0)
37
40
  // Bcs Bool(true).toField() == 1
38
- const newNonce = UInt64.from(
41
+ // TODO Think about if we want to rangecheck this. If not, we should store it as Field
42
+ const newNonce = UInt64.Unsafe.fromField(
39
43
  currentNonce.value.add(1).mul(transaction.sender.isSome.toField())
40
44
  );
41
45
 
42
- this.accountState.set(sender, new AccountState({ nonce: newNonce }));
46
+ await this.accountState.set(sender, new AccountState({ nonce: newNonce }));
43
47
  }
44
48
  }
@@ -1,18 +1,17 @@
1
- import { Provable } from "o1js";
2
1
  import { NetworkState } from "../model/network/NetworkState";
3
2
  import { ProvableBlockHook } from "../protocol/ProvableBlockHook";
4
3
 
5
4
  export class BlockHeightHook extends ProvableBlockHook<Record<string, never>> {
6
- public afterBlock(networkState: NetworkState): NetworkState {
5
+ public async afterBlock(networkState: NetworkState): Promise<NetworkState> {
7
6
  return new NetworkState({
8
7
  block: {
9
8
  height: networkState.block.height.add(1),
10
9
  },
11
- previous: networkState.previous
10
+ previous: networkState.previous,
12
11
  });
13
12
  }
14
13
 
15
- public beforeBlock(networkState: NetworkState): NetworkState {
14
+ public async beforeBlock(networkState: NetworkState): Promise<NetworkState> {
16
15
  return networkState;
17
16
  }
18
17
  }
@@ -5,10 +5,10 @@ import { BlockProverState } from "../prover/block/BlockProver";
5
5
  export class LastStateRootBlockHook extends ProvableBlockHook<
6
6
  Record<string, never>
7
7
  > {
8
- public afterBlock(
8
+ public async afterBlock(
9
9
  networkState: NetworkState,
10
10
  state: BlockProverState
11
- ): NetworkState {
11
+ ): Promise<NetworkState> {
12
12
  return new NetworkState({
13
13
  block: networkState.block,
14
14
  previous: {
@@ -17,10 +17,10 @@ export class LastStateRootBlockHook extends ProvableBlockHook<
17
17
  });
18
18
  }
19
19
 
20
- public beforeBlock(
20
+ public async beforeBlock(
21
21
  networkState: NetworkState,
22
22
  state: BlockProverState
23
- ): NetworkState {
23
+ ): Promise<NetworkState> {
24
24
  return networkState;
25
25
  }
26
26
  }
@@ -1,20 +1,21 @@
1
+ import { NoConfig } from "@proto-kit/common";
2
+
1
3
  import { ProvableBlockHook } from "../protocol/ProvableBlockHook";
2
4
  import { NetworkState } from "../model/network/NetworkState";
3
5
  import { BlockProverState } from "../prover/block/BlockProver";
4
- import { NoConfig } from "@proto-kit/common";
5
6
 
6
7
  export class NoopBlockHook extends ProvableBlockHook<NoConfig> {
7
- public afterBlock(
8
+ public async afterBlock(
8
9
  networkState: NetworkState,
9
10
  state: BlockProverState
10
- ): NetworkState {
11
+ ): Promise<NetworkState> {
11
12
  return networkState;
12
13
  }
13
14
 
14
- public beforeBlock(
15
+ public async beforeBlock(
15
16
  networkState: NetworkState,
16
17
  state: BlockProverState
17
- ): NetworkState {
18
+ ): Promise<NetworkState> {
18
19
  return networkState;
19
20
  }
20
21
  }
@@ -2,20 +2,19 @@ import { injectable } from "tsyringe";
2
2
  import { noop } from "@proto-kit/common";
3
3
  import { SmartContract } from "o1js";
4
4
 
5
- import { BlockProof } from "../prover/block/BlockProver";
6
5
  import {
7
6
  ProvableSettlementHook,
8
7
  SettlementHookInputs,
9
- } from "../settlement/ProvableSettlementHook";
8
+ } from "../settlement/modularity/ProvableSettlementHook";
10
9
 
11
10
  @injectable()
12
11
  export class NoopSettlementHook extends ProvableSettlementHook<
13
12
  Record<string, never>
14
13
  > {
15
- public beforeSettlement(
14
+ public async beforeSettlement(
16
15
  contract: SmartContract,
17
16
  state: SettlementHookInputs
18
- ): void {
17
+ ) {
19
18
  noop();
20
19
  }
21
20
  }
@@ -1,6 +1,10 @@
1
+ import { noop } from "@proto-kit/common";
2
+
1
3
  import { ProvableTransactionHook } from "../protocol/ProvableTransactionHook";
2
4
  import { BlockProverExecutionData } from "../prover/block/BlockProvable";
3
5
 
4
6
  export class NoopTransactionHook extends ProvableTransactionHook {
5
- public onTransaction(executionData: BlockProverExecutionData): void {}
7
+ public async onTransaction(executionData: BlockProverExecutionData) {
8
+ noop();
9
+ }
6
10
  }
package/src/index.ts CHANGED
@@ -1,7 +1,6 @@
1
- export * from "./blockmodules/AccountStateModule";
2
- export * from "./blockmodules/BlockHeightHook";
3
- export * from "./blockmodules/LastStateRootBlockHook";
4
- export * from "./utils/ProvableHashList";
1
+ export * from "./hooks/AccountStateHook";
2
+ export * from "./hooks/BlockHeightHook";
3
+ export * from "./hooks/LastStateRootBlockHook";
5
4
  export * from "./model/StateTransition";
6
5
  export * from "./model/StateTransitionProvableBatch";
7
6
  export * from "./model/Option";
@@ -10,8 +9,13 @@ export * from "./model/network/NetworkState";
10
9
  export * from "./model/transaction/SignedTransaction";
11
10
  export * from "./model/transaction/RuntimeTransaction";
12
11
  export * from "./model/transaction/ValueOption";
12
+ export * from "./model/MethodPublicOutput";
13
+ export * from "./model/RuntimeLike";
14
+ export * from "./utils/ProvableHashList";
13
15
  export * from "./utils/PrefixedProvableHashList";
14
16
  export * from "./utils/MinaPrefixedProvableHashList";
17
+ export * from "./utils/ProvableReductionHashList";
18
+ export * from "./utils/StateTransitionReductionList";
15
19
  export * from "./utils/utils";
16
20
  export * from "./prover/block/BlockProver";
17
21
  export * from "./prover/block/BlockProvable";
@@ -19,14 +23,12 @@ export * from "./prover/block/accummulators/BlockHashMerkleTree";
19
23
  export * from "./prover/statetransition/StateTransitionProver";
20
24
  export * from "./prover/statetransition/StateTransitionProvable";
21
25
  export * from "./prover/statetransition/StateTransitionWitnessProvider";
22
- export * from "./model/MethodPublicOutput";
23
26
  export * from "./prover/statetransition/StateTransitionWitnessProviderReference";
24
27
  export * from "./protocol/Protocol";
25
28
  export * from "./protocol/ProtocolModule";
26
29
  export * from "./protocol/ProtocolEnvironment";
27
30
  export * from "./protocol/ProvableTransactionHook";
28
31
  export * from "./protocol/ProvableBlockHook";
29
- export * from "./state/context/ProtocolMethodExecutionContext";
30
32
  export * from "./state/context/TransitionMethodExecutionContext";
31
33
  export * from "./state/context/RuntimeMethodExecutionContext";
32
34
  export * from "./state/protocol/ProtocolState";
@@ -35,7 +37,15 @@ export * from "./state/StateMap";
35
37
  export * from "./state/StateService";
36
38
  export * from "./state/StateServiceProvider";
37
39
  export * from "./state/assert/assert";
38
- export * from "./settlement/SettlementContract";
39
- export * from "./settlement/ProvableSettlementHook";
40
+ export * from "./settlement/contracts/SettlementSmartContract";
41
+ export * from "./settlement/contracts/SettlementContractProtocolModule";
42
+ export * from "./settlement/contracts/DispatchSmartContract";
43
+ export * from "./settlement/contracts/DispatchContractProtocolModule";
44
+ export * from "./settlement/SettlementContractModule";
45
+ export * from "./settlement/ContractModule";
46
+ export * from "./settlement/modularity/ProvableSettlementHook";
47
+ export * from "./settlement/messages/OutgoingMessageArgument";
40
48
  export * from "./settlement/modules/NetworkStateSettlementModule";
49
+ export * from "./settlement/messages/Deposit";
50
+ export * from "./settlement/messages/Withdrawal";
41
51
  export { constants as ProtocolConstants } from "./Constants";
@@ -1,4 +1,4 @@
1
- import { Bool, Field, Signature, Struct } from "o1js";
1
+ import { Bool, Field, Struct } from "o1js";
2
2
 
3
3
  /**
4
4
  * Public input used to link in-circuit execution with
@@ -10,4 +10,4 @@ export class MethodPublicOutput extends Struct({
10
10
  transactionHash: Field,
11
11
  networkStateHash: Field,
12
12
  isMessage: Bool,
13
- }) {}
13
+ }) {}
@@ -4,6 +4,7 @@ import {
4
4
  type FlexibleProvablePure,
5
5
  Poseidon,
6
6
  Provable,
7
+ ProvablePure,
7
8
  Struct,
8
9
  } from "o1js";
9
10
 
@@ -18,7 +19,10 @@ export class ProvableOption extends Struct({
18
19
  }
19
20
 
20
21
  export abstract class OptionBase {
21
- protected constructor(public isSome: Bool, public isForcedSome: Bool) {}
22
+ protected constructor(
23
+ public isSome: Bool,
24
+ public isForcedSome: Bool
25
+ ) {}
22
26
 
23
27
  protected abstract encodeValueToFields(): Field[];
24
28
 
@@ -149,4 +153,20 @@ export class Option<Value> extends OptionBase {
149
153
  defaultValue
150
154
  );
151
155
  }
156
+
157
+ public toConstant() {
158
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
159
+ const valueConstant = (this.valueType as ProvablePure<Value>).fromFields(
160
+ this.valueType.toFields(this.value).map((field) => field.toConstant())
161
+ );
162
+ const boolConstant = (bool: Bool) =>
163
+ Bool.fromFields([bool.toField().toConstant()]);
164
+
165
+ return new Option(
166
+ boolConstant(this.isSome),
167
+ valueConstant,
168
+ this.valueType,
169
+ boolConstant(this.isForcedSome)
170
+ );
171
+ }
152
172
  }
package/src/model/Path.ts CHANGED
@@ -1,6 +1,4 @@
1
- /* eslint-disable @typescript-eslint/no-extraneous-class */
2
- /* eslint-disable @shopify/no-fully-static-classes */
3
- import { Field, type FlexibleProvablePure, Poseidon, Provable } from "o1js";
1
+ import { Field, type FlexibleProvablePure, Poseidon } from "o1js";
4
2
 
5
3
  import { stringToField } from "../utils/utils";
6
4
 
@@ -0,0 +1,12 @@
1
+ export type RuntimeMethodInvocationType = "INCOMING_MESSAGE" | "SIGNATURE";
2
+
3
+ export type RuntimeMethodIdMapping = Record<
4
+ `${string}.${string}`,
5
+ { methodId: bigint; type: RuntimeMethodInvocationType }
6
+ >;
7
+
8
+ export interface RuntimeLike {
9
+ get methodIdResolver(): {
10
+ methodIdMap: () => RuntimeMethodIdMapping;
11
+ };
12
+ }