@proto-kit/protocol 0.1.1-develop.651 → 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 (257) 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 +9 -10
  18. package/dist/hooks/BlockHeightHook.d.ts +2 -2
  19. package/dist/hooks/BlockHeightHook.d.ts.map +1 -1
  20. package/dist/hooks/BlockHeightHook.js +3 -3
  21. package/dist/hooks/LastStateRootBlockHook.d.ts +2 -2
  22. package/dist/hooks/LastStateRootBlockHook.d.ts.map +1 -1
  23. package/dist/hooks/LastStateRootBlockHook.js +2 -2
  24. package/dist/hooks/NoopBlockHook.d.ts +3 -3
  25. package/dist/hooks/NoopBlockHook.d.ts.map +1 -1
  26. package/dist/hooks/NoopBlockHook.js +2 -2
  27. package/dist/hooks/NoopSettlementHook.d.ts +1 -1
  28. package/dist/hooks/NoopSettlementHook.d.ts.map +1 -1
  29. package/dist/hooks/NoopSettlementHook.js +2 -3
  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 +0 -2
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +0 -2
  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 -20
  39. package/dist/model/Option.d.ts.map +1 -1
  40. package/dist/model/Option.js +1 -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/StateTransition.d.ts +48 -12
  45. package/dist/model/StateTransition.d.ts.map +1 -1
  46. package/dist/model/StateTransitionProvableBatch.d.ts +71 -14
  47. package/dist/model/StateTransitionProvableBatch.d.ts.map +1 -1
  48. package/dist/model/StateTransitionReduction.d.ts +2 -2
  49. package/dist/model/StateTransitionReduction.js +26 -26
  50. package/dist/model/network/NetworkState.d.ts +73 -18
  51. package/dist/model/network/NetworkState.d.ts.map +1 -1
  52. package/dist/model/network/NetworkState.js +2 -2
  53. package/dist/model/transaction/ProtocolTransaction.d.ts +69 -69
  54. package/dist/model/transaction/ProtocolTransaction.js +18 -18
  55. package/dist/model/transaction/RuntimeTransaction.d.ts +50 -16
  56. package/dist/model/transaction/RuntimeTransaction.d.ts.map +1 -1
  57. package/dist/model/transaction/RuntimeTransaction.js +4 -4
  58. package/dist/model/transaction/SignedTransaction.d.ts +39 -3
  59. package/dist/model/transaction/SignedTransaction.d.ts.map +1 -1
  60. package/dist/model/transaction/SignedTransaction.js +1 -1
  61. package/dist/model/transaction/ValueOption.d.ts +86 -32
  62. package/dist/model/transaction/ValueOption.d.ts.map +1 -1
  63. package/dist/model/transaction/ValueOption.js +1 -1
  64. package/dist/protocol/Protocol.d.ts +6 -5
  65. package/dist/protocol/Protocol.d.ts.map +1 -1
  66. package/dist/protocol/Protocol.js +12 -3
  67. package/dist/protocol/ProtocolEnvironment.d.ts +3 -3
  68. package/dist/protocol/ProtocolEnvironment.d.ts.map +1 -1
  69. package/dist/protocol/ProtocolModule.d.ts +1 -0
  70. package/dist/protocol/ProtocolModule.d.ts.map +1 -1
  71. package/dist/protocol/ProtocolModule.js +3 -1
  72. package/dist/protocol/ProvableBlockHook.d.ts +2 -2
  73. package/dist/protocol/ProvableBlockHook.d.ts.map +1 -1
  74. package/dist/protocol/ProvableTransactionHook.d.ts +1 -1
  75. package/dist/protocol/ProvableTransactionHook.d.ts.map +1 -1
  76. package/dist/prover/block/BlockProvable.d.ts +240 -98
  77. package/dist/prover/block/BlockProvable.d.ts.map +1 -1
  78. package/dist/prover/block/BlockProver.d.ts +8 -8
  79. package/dist/prover/block/BlockProver.d.ts.map +1 -1
  80. package/dist/prover/block/BlockProver.js +48 -40
  81. package/dist/prover/block/BlockTransactionPosition.d.ts +35 -35
  82. package/dist/prover/block/BlockTransactionPosition.js +25 -25
  83. package/dist/prover/block/BundleTransactionPosition.d.ts +36 -0
  84. package/dist/prover/block/BundleTransactionPosition.d.ts.map +1 -0
  85. package/dist/prover/block/BundleTransactionPosition.js +25 -0
  86. package/dist/prover/block/SplitPrefilledStateService.d.ts +11 -0
  87. package/dist/prover/block/SplitPrefilledStateService.d.ts.map +1 -0
  88. package/dist/prover/block/SplitPrefilledStateService.js +1 -0
  89. package/dist/prover/block/SplitStateService.d.ts +11 -0
  90. package/dist/prover/block/SplitStateService.d.ts.map +1 -0
  91. package/dist/prover/block/SplitStateService.js +1 -0
  92. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts +35 -16
  93. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts.map +1 -1
  94. package/dist/prover/block/acummulators/BlockHashMerkleTree.d.ts +45 -0
  95. package/dist/prover/block/acummulators/BlockHashMerkleTree.d.ts.map +1 -0
  96. package/dist/prover/block/acummulators/BlockHashMerkleTree.js +16 -0
  97. package/dist/prover/statetransition/StateTransitionProvable.d.ts +116 -58
  98. package/dist/prover/statetransition/StateTransitionProvable.d.ts.map +1 -1
  99. package/dist/prover/statetransition/StateTransitionProver.d.ts +8 -8
  100. package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -1
  101. package/dist/prover/statetransition/StateTransitionProver.js +17 -22
  102. package/dist/prover/statetransition/StateTransitionWitnessProvider.js +1 -2
  103. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.js +1 -2
  104. package/dist/settlement/DispatchContract.d.ts +20 -0
  105. package/dist/settlement/DispatchContract.d.ts.map +1 -0
  106. package/dist/settlement/DispatchContract.js +112 -0
  107. package/dist/settlement/OutgoingMessageArgument.d.ts +109 -0
  108. package/dist/settlement/OutgoingMessageArgument.d.ts.map +1 -0
  109. package/dist/settlement/OutgoingMessageArgument.js +32 -0
  110. package/dist/settlement/ProvableSettlementHook.d.ts +25 -25
  111. package/dist/settlement/ProvableSettlementHook.js +3 -3
  112. package/dist/settlement/SettlementContract.d.ts +229 -229
  113. package/dist/settlement/SettlementContract.js +346 -346
  114. package/dist/settlement/SettlementContractModule.d.ts +1 -0
  115. package/dist/settlement/SettlementContractModule.d.ts.map +1 -1
  116. package/dist/settlement/SettlementContractModule.js +7 -4
  117. package/dist/settlement/contracts/DispatchContract.d.ts +21 -0
  118. package/dist/settlement/contracts/DispatchContract.d.ts.map +1 -0
  119. package/dist/settlement/contracts/DispatchContract.js +111 -0
  120. package/dist/settlement/contracts/DispatchContractProtocolModule.js +1 -2
  121. package/dist/settlement/contracts/DispatchSmartContract.d.ts +8 -8
  122. package/dist/settlement/contracts/DispatchSmartContract.d.ts.map +1 -1
  123. package/dist/settlement/contracts/DispatchSmartContract.js +14 -14
  124. package/dist/settlement/contracts/SettlementContract.d.ts +19 -0
  125. package/dist/settlement/contracts/SettlementContract.d.ts.map +1 -0
  126. package/dist/settlement/contracts/SettlementContract.js +43 -0
  127. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts.map +1 -1
  128. package/dist/settlement/contracts/SettlementContractProtocolModule.js +4 -4
  129. package/dist/settlement/contracts/SettlementSmartContract.d.ts +18 -17
  130. package/dist/settlement/contracts/SettlementSmartContract.d.ts.map +1 -1
  131. package/dist/settlement/contracts/SettlementSmartContract.js +46 -35
  132. package/dist/settlement/messages/Deposit.d.ts +29 -4
  133. package/dist/settlement/messages/Deposit.d.ts.map +1 -1
  134. package/dist/settlement/messages/OutgoingMessageArgument.d.ts +94 -14
  135. package/dist/settlement/messages/OutgoingMessageArgument.d.ts.map +1 -1
  136. package/dist/settlement/messages/Withdrawal.d.ts +29 -4
  137. package/dist/settlement/messages/Withdrawal.d.ts.map +1 -1
  138. package/dist/settlement/modularity/ProvableSettlementHook.d.ts +2 -2
  139. package/dist/settlement/modularity/ProvableSettlementHook.d.ts.map +1 -1
  140. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts +1 -1
  141. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts.map +1 -1
  142. package/dist/settlement/modules/NetworkStateSettlementModule.js +3 -1
  143. package/dist/state/State.d.ts +4 -3
  144. package/dist/state/State.d.ts.map +1 -1
  145. package/dist/state/State.js +16 -11
  146. package/dist/state/StateMap.d.ts +3 -3
  147. package/dist/state/StateMap.d.ts.map +1 -1
  148. package/dist/state/StateMap.js +4 -5
  149. package/dist/state/StateService.d.ts +3 -3
  150. package/dist/state/StateService.d.ts.map +1 -1
  151. package/dist/state/StateServiceProvider.d.ts +3 -3
  152. package/dist/state/StateServiceProvider.d.ts.map +1 -1
  153. package/dist/state/StateServiceProvider.js +1 -3
  154. package/dist/state/assert/assert.d.ts +1 -1
  155. package/dist/state/assert/assert.d.ts.map +1 -1
  156. package/dist/state/assert/assert.js +4 -1
  157. package/dist/state/context/ProtocolMethodExecutionContext.d.ts +1 -1
  158. package/dist/state/context/ProtocolMethodExecutionContext.d.ts.map +1 -1
  159. package/dist/state/context/ProtocolMethodExecutionContext.js +1 -1
  160. package/dist/state/context/RuntimeMethodExecutionContext.d.ts +54 -3
  161. package/dist/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -1
  162. package/dist/state/context/RuntimeMethodExecutionContext.js +4 -5
  163. package/dist/state/context/TransitionMethodExecutionContext.d.ts.map +1 -1
  164. package/dist/state/context/TransitionMethodExecutionContext.js +0 -1
  165. package/dist/state/context/contextExecution.d.ts +14 -0
  166. package/dist/state/context/contextExecution.d.ts.map +1 -0
  167. package/dist/state/context/contextExecution.js +30 -0
  168. package/dist/state/protocol/ProtocolState.d.ts.map +1 -1
  169. package/dist/state/protocol/ProtocolState.js +0 -3
  170. package/dist/utils/AppliedBatchHashList.d.ts +17 -0
  171. package/dist/utils/AppliedBatchHashList.d.ts.map +1 -0
  172. package/dist/utils/AppliedBatchHashList.js +24 -0
  173. package/dist/utils/MinaPrefixedProvableHashList.d.ts.map +1 -1
  174. package/dist/utils/MinaPrefixedProvableHashList.js +1 -0
  175. package/dist/utils/ProvableHashList.d.ts +1 -1
  176. package/dist/utils/StateTransitionReductionList.d.ts +1 -1
  177. package/dist/utils/StateTransitionReductionList.d.ts.map +1 -1
  178. package/dist/utils/StateTransitionReductionList.js +3 -3
  179. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts +11 -0
  180. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts.map +1 -0
  181. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.js +12 -0
  182. package/dist/utils/merkletree/MerkleTreeStore.d.ts +5 -0
  183. package/dist/utils/merkletree/MerkleTreeStore.d.ts.map +1 -0
  184. package/dist/utils/merkletree/MerkleTreeStore.js +1 -0
  185. package/dist/utils/merkletree/RollupMerkleTree.d.ts +133 -0
  186. package/dist/utils/merkletree/RollupMerkleTree.d.ts.map +1 -0
  187. package/dist/utils/merkletree/RollupMerkleTree.js +255 -0
  188. package/dist/utils/utils.d.ts +1 -1
  189. package/dist/utils/utils.d.ts.map +1 -1
  190. package/dist/utils/utils.js +5 -10
  191. package/package.json +5 -5
  192. package/src/hooks/AccountStateHook.ts +11 -9
  193. package/src/hooks/BlockHeightHook.ts +3 -4
  194. package/src/hooks/LastStateRootBlockHook.ts +4 -4
  195. package/src/hooks/NoopBlockHook.ts +6 -5
  196. package/src/hooks/NoopSettlementHook.ts +2 -2
  197. package/src/hooks/NoopTransactionHook.ts +5 -1
  198. package/src/index.ts +0 -2
  199. package/src/model/MethodPublicOutput.ts +2 -2
  200. package/src/model/Option.ts +5 -1
  201. package/src/model/Path.ts +1 -3
  202. package/src/model/StateTransition.ts +1 -1
  203. package/src/model/Transaction.ts +2 -0
  204. package/src/model/network/NetworkState.ts +2 -2
  205. package/src/model/transaction/RuntimeTransaction.ts +5 -12
  206. package/src/model/transaction/SignedTransaction.ts +1 -8
  207. package/src/model/transaction/ValueOption.ts +1 -1
  208. package/src/protocol/Protocol.ts +24 -13
  209. package/src/protocol/ProtocolEnvironment.ts +7 -6
  210. package/src/protocol/ProtocolModule.ts +5 -2
  211. package/src/protocol/ProvableBlockHook.ts +3 -3
  212. package/src/protocol/ProvableTransactionHook.ts +4 -2
  213. package/src/protocol/TransitioningProtocolModule.ts +1 -1
  214. package/src/prover/block/BlockProvable.ts +3 -3
  215. package/src/prover/block/BlockProver.ts +78 -55
  216. package/src/prover/block/accummulators/BlockHashMerkleTree.ts +1 -1
  217. package/src/prover/statetransition/StateTransitionProvable.ts +3 -3
  218. package/src/prover/statetransition/StateTransitionProver.ts +23 -27
  219. package/src/settlement/ContractModule.ts +1 -1
  220. package/src/settlement/SettlementContractModule.ts +14 -9
  221. package/src/settlement/contracts/DispatchSmartContract.ts +15 -14
  222. package/src/settlement/contracts/SettlementContractProtocolModule.ts +6 -4
  223. package/src/settlement/contracts/SettlementSmartContract.ts +55 -34
  224. package/src/settlement/messages/OutgoingMessageArgument.ts +1 -0
  225. package/src/settlement/modularity/ProvableSettlementHook.ts +3 -4
  226. package/src/settlement/modules/NetworkStateSettlementModule.ts +5 -2
  227. package/src/state/State.ts +19 -12
  228. package/src/state/StateMap.ts +4 -5
  229. package/src/state/StateService.ts +3 -3
  230. package/src/state/StateServiceProvider.ts +6 -7
  231. package/src/state/assert/assert.ts +6 -2
  232. package/src/state/context/RuntimeMethodExecutionContext.ts +5 -2
  233. package/src/state/context/TransitionMethodExecutionContext.ts +0 -1
  234. package/src/state/protocol/ProtocolState.ts +1 -4
  235. package/src/utils/MinaPrefixedProvableHashList.ts +2 -1
  236. package/src/utils/ProvableHashList.ts +1 -1
  237. package/src/utils/StateTransitionReductionList.ts +4 -3
  238. package/src/utils/utils.ts +4 -9
  239. package/test/BlockProver.test.ts +110 -128
  240. package/test/Protocol.test.ts +8 -20
  241. package/test/State.test.ts +8 -8
  242. package/test/StateTransition.test.ts +56 -66
  243. package/test/TestingProtocol.ts +48 -0
  244. package/test/model/Option.test.ts +72 -0
  245. package/{src → test}/state/assert/assert.test.ts +4 -4
  246. package/test/tsconfig.json +7 -0
  247. package/test/utils/ProvableReductionHashList.test.ts +5 -2
  248. package/test/utils.test.ts +0 -3
  249. package/dist/hooks/TransactionFeeHook.d.ts +0 -16
  250. package/dist/hooks/TransactionFeeHook.d.ts.map +0 -1
  251. package/dist/hooks/TransactionFeeHook.js +0 -39
  252. package/src/hooks/SequenceStateTransactionModule.ts +0 -25
  253. package/src/model/Option.test.ts +0 -21
  254. package/src/state/context/ProtocolMethodExecutionContext.ts +0 -36
  255. package/test/Option.test.ts +0 -64
  256. package/test/settlement/SettlementContract.test.ts +0 -45
  257. package/tsconfig.test.json +0 -9
@@ -1,36 +1,34 @@
1
- /* eslint-disable max-lines */
2
- import { Bool, Experimental, Field, Provable, SelfProof } from "o1js";
3
- import { injectable } from "tsyringe";
4
1
  import {
5
2
  AreProofsEnabled,
6
- log,
7
3
  PlainZkProgram,
8
4
  provableMethod,
9
5
  RollupMerkleTreeWitness,
10
6
  ZkProgrammable,
11
7
  } from "@proto-kit/common";
8
+ import { Field, Provable, SelfProof, ZkProgram } from "o1js";
9
+ import { injectable } from "tsyringe";
12
10
 
13
- import {
14
- DefaultProvableHashList,
15
- ProvableHashList,
16
- } from "../../utils/ProvableHashList";
11
+ import { constants } from "../../Constants";
17
12
  import { ProvableStateTransition } from "../../model/StateTransition";
18
13
  import {
19
14
  ProvableStateTransitionType,
20
15
  StateTransitionProvableBatch,
21
16
  } from "../../model/StateTransitionProvableBatch";
22
- import { constants } from "../../Constants";
17
+ import { StateTransitionProverType } from "../../protocol/Protocol";
23
18
  import { ProtocolModule } from "../../protocol/ProtocolModule";
19
+ import {
20
+ DefaultProvableHashList,
21
+ ProvableHashList,
22
+ } from "../../utils/ProvableHashList";
24
23
 
25
- import { StateTransitionWitnessProvider } from "./StateTransitionWitnessProvider";
26
24
  import {
25
+ StateTransitionProof,
27
26
  StateTransitionProvable,
28
27
  StateTransitionProverPublicInput,
29
- StateTransitionProof,
30
28
  StateTransitionProverPublicOutput,
31
29
  } from "./StateTransitionProvable";
30
+ import { StateTransitionWitnessProvider } from "./StateTransitionWitnessProvider";
32
31
  import { StateTransitionWitnessProviderReference } from "./StateTransitionWitnessProviderReference";
33
- import { StateTransitionProverType } from "../../protocol/Protocol";
34
32
 
35
33
  const errors = {
36
34
  propertyNotMatching: (property: string, step: string) =>
@@ -66,7 +64,6 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
66
64
  StateTransitionProverPublicOutput
67
65
  > {
68
66
  public constructor(
69
- // eslint-disable-next-line @typescript-eslint/no-use-before-define
70
67
  private readonly stateTransitionProver: StateTransitionProver,
71
68
  public readonly witnessProviderReference: StateTransitionWitnessProviderReference
72
69
  ) {
@@ -81,11 +78,10 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
81
78
  StateTransitionProverPublicInput,
82
79
  StateTransitionProverPublicOutput
83
80
  > {
84
- // eslint-disable-next-line max-len
85
- // eslint-disable-next-line @typescript-eslint/no-this-alias,consistent-this,unicorn/no-this-assignment
86
81
  const instance = this;
87
82
 
88
- const program = Experimental.ZkProgram({
83
+ const program = ZkProgram({
84
+ name: "StateTransitionProver",
89
85
  publicInput: StateTransitionProverPublicInput,
90
86
  publicOutput: StateTransitionProverPublicOutput,
91
87
 
@@ -93,11 +89,11 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
93
89
  proveBatch: {
94
90
  privateInputs: [StateTransitionProvableBatch],
95
91
 
96
- method(
92
+ async method(
97
93
  publicInput: StateTransitionProverPublicInput,
98
94
  batch: StateTransitionProvableBatch
99
95
  ) {
100
- return instance.runBatch(publicInput, batch);
96
+ return await instance.runBatch(publicInput, batch);
101
97
  },
102
98
  },
103
99
 
@@ -107,12 +103,12 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
107
103
  StateTransitionSelfProofClass,
108
104
  ],
109
105
 
110
- method(
106
+ async method(
111
107
  publicInput: StateTransitionProverPublicInput,
112
108
  proof1: StateTransitionProof,
113
109
  proof2: StateTransitionProof
114
110
  ) {
115
- return instance.merge(publicInput, proof1, proof2);
111
+ return await instance.merge(publicInput, proof1, proof2);
116
112
  },
117
113
  },
118
114
  },
@@ -123,7 +119,7 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
123
119
  merge: program.merge.bind(program),
124
120
  };
125
121
 
126
- const SelfProofClass = Experimental.ZkProgram.Proof(program);
122
+ const SelfProofClass = ZkProgram.Proof(program);
127
123
 
128
124
  return {
129
125
  compile: program.compile.bind(program),
@@ -242,10 +238,10 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
242
238
  * Applies a whole batch of StateTransitions at once
243
239
  */
244
240
  @provableMethod()
245
- public runBatch(
241
+ public async runBatch(
246
242
  publicInput: StateTransitionProverPublicInput,
247
243
  batch: StateTransitionProvableBatch
248
- ): StateTransitionProverPublicOutput {
244
+ ): Promise<StateTransitionProverPublicOutput> {
249
245
  const result = this.applyTransitions(
250
246
  publicInput.stateRoot,
251
247
  publicInput.protocolStateRoot,
@@ -263,11 +259,11 @@ export class StateTransitionProverProgrammable extends ZkProgrammable<
263
259
  }
264
260
 
265
261
  @provableMethod()
266
- public merge(
262
+ public async merge(
267
263
  publicInput: StateTransitionProverPublicInput,
268
264
  proof1: StateTransitionProof,
269
265
  proof2: StateTransitionProof
270
- ): StateTransitionProverPublicOutput {
266
+ ): Promise<StateTransitionProverPublicOutput> {
271
267
  proof1.verify();
272
268
  proof2.verify();
273
269
 
@@ -359,7 +355,7 @@ export class StateTransitionProver
359
355
  public runBatch(
360
356
  publicInput: StateTransitionProverPublicInput,
361
357
  batch: StateTransitionProvableBatch
362
- ): StateTransitionProverPublicOutput {
358
+ ): Promise<StateTransitionProverPublicOutput> {
363
359
  return this.zkProgrammable.runBatch(publicInput, batch);
364
360
  }
365
361
 
@@ -367,7 +363,7 @@ export class StateTransitionProver
367
363
  publicInput: StateTransitionProverPublicInput,
368
364
  proof1: StateTransitionProof,
369
365
  proof2: StateTransitionProof
370
- ): StateTransitionProverPublicOutput {
366
+ ): Promise<StateTransitionProverPublicOutput> {
371
367
  return this.zkProgrammable.merge(publicInput, proof1, proof2);
372
368
  }
373
369
  }
@@ -16,7 +16,7 @@ export abstract class ContractModule<
16
16
  ContractType,
17
17
  // undefined = no args
18
18
  Arguments = undefined,
19
- Config = NoConfig
19
+ Config = NoConfig,
20
20
  > extends ConfigurableModule<Config> {
21
21
  public abstract contractFactory(
22
22
  args: Arguments
@@ -2,8 +2,9 @@ import {
2
2
  AreProofsEnabled,
3
3
  ChildContainerProvider,
4
4
  ModuleContainer,
5
- ModulesRecord, ResolvableModules, StringKeyOf,
6
- TypedClass
5
+ ModulesRecord,
6
+ TypedClass,
7
+ noop,
7
8
  } from "@proto-kit/common";
8
9
  import { PublicKey, SmartContract } from "o1js";
9
10
  import { injectable } from "tsyringe";
@@ -43,7 +44,7 @@ export type MandatorySettlementModulesRecord = {
43
44
  @injectable()
44
45
  export class SettlementContractModule<
45
46
  SettlementModules extends SettlementModulesRecord &
46
- MandatorySettlementModulesRecord
47
+ MandatorySettlementModulesRecord,
47
48
  >
48
49
  extends ModuleContainer<SettlementModules>
49
50
  implements ProtocolModule<unknown>
@@ -54,7 +55,7 @@ export class SettlementContractModule<
54
55
 
55
56
  public static from<
56
57
  SettlementModules extends SettlementModulesRecord &
57
- MandatorySettlementModulesRecord
58
+ MandatorySettlementModulesRecord,
58
59
  >(
59
60
  modules: SettlementModules
60
61
  ): TypedClass<SettlementContractModule<SettlementModules>> {
@@ -84,16 +85,18 @@ export class SettlementContractModule<
84
85
  super.create(childContainerProvider);
85
86
  }
86
87
 
87
- // private assertIsKeyofModules
88
+ public async start() {
89
+ noop();
90
+ }
88
91
 
89
92
  public getContractClasses(): {
90
93
  settlement: SmartContractClassFromInterface<SettlementContractType>;
91
94
  dispatch: SmartContractClassFromInterface<DispatchContractType>;
92
95
  } {
93
- const settlementContractKey = "SettlementContract"
94
- const dispatchContractKey = "DispatchContract"
95
- this.assertIsValidModuleName(settlementContractKey)
96
- this.assertIsValidModuleName(dispatchContractKey)
96
+ const settlementContractKey = "SettlementContract";
97
+ const dispatchContractKey = "DispatchContract";
98
+ this.assertIsValidModuleName(settlementContractKey);
99
+ this.assertIsValidModuleName(dispatchContractKey);
97
100
 
98
101
  const settlementModule = this.resolve(settlementContractKey);
99
102
  const dispatchModule = this.resolve(dispatchContractKey);
@@ -116,7 +119,9 @@ export class SettlementContractModule<
116
119
  } {
117
120
  const { dispatch, settlement } = this.getContractClasses();
118
121
 
122
+ // eslint-disable-next-line new-cap
119
123
  const dispatchInstance = new dispatch(addresses.dispatch);
124
+ // eslint-disable-next-line new-cap
120
125
  const settlementInstance = new settlement(addresses.settlement);
121
126
 
122
127
  return {
@@ -26,8 +26,8 @@ export interface DispatchContractType {
26
26
  updateMessagesHash: (
27
27
  executedMessagesHash: Field,
28
28
  newPromisedMessagesHash: Field
29
- ) => void;
30
- initialize: (settlementContract: PublicKey) => void;
29
+ ) => Promise<void>;
30
+ initialize: (settlementContract: PublicKey) => Promise<void>;
31
31
 
32
32
  promisedMessagesHash: State<Field>;
33
33
  }
@@ -48,29 +48,30 @@ export class DispatchSmartContract
48
48
  @state(PublicKey) public settlementContract = State<PublicKey>();
49
49
 
50
50
  @method
51
- public updateMessagesHash(
51
+ public async updateMessagesHash(
52
52
  executedMessagesHash: Field,
53
53
  newPromisedMessagesHash: Field
54
54
  ) {
55
- const promisedMessagesHash = this.promisedMessagesHash.getAndAssertEquals();
56
- this.honoredMessagesHash.getAndAssertEquals();
55
+ const promisedMessagesHash =
56
+ this.promisedMessagesHash.getAndRequireEquals();
57
+ this.honoredMessagesHash.getAndRequireEquals();
57
58
 
58
59
  executedMessagesHash.assertEquals(promisedMessagesHash);
59
60
 
60
61
  this.honoredMessagesHash.set(executedMessagesHash);
61
62
 
62
63
  // Assert and apply new promisedMessagesHash
63
- this.self.account.actionState.assertEquals(newPromisedMessagesHash);
64
+ this.self.account.actionState.requireEquals(newPromisedMessagesHash);
64
65
  this.promisedMessagesHash.set(newPromisedMessagesHash);
65
66
  }
66
67
 
67
68
  @method
68
- public initialize(settlementContract: PublicKey) {
69
- this.promisedMessagesHash.getAndAssertEquals().assertEquals(Field(0));
70
- this.honoredMessagesHash.getAndAssertEquals().assertEquals(Field(0));
69
+ public async initialize(settlementContract: PublicKey) {
70
+ this.promisedMessagesHash.getAndRequireEquals().assertEquals(Field(0));
71
+ this.honoredMessagesHash.getAndRequireEquals().assertEquals(Field(0));
71
72
  this.settlementContract
72
- .getAndAssertEquals()
73
- .assertEquals(PublicKey.empty());
73
+ .getAndRequireEquals()
74
+ .assertEquals(PublicKey.empty<typeof PublicKey>());
74
75
 
75
76
  this.promisedMessagesHash.set(ACTIONS_EMPTY_HASH);
76
77
  this.honoredMessagesHash.set(ACTIONS_EMPTY_HASH);
@@ -107,12 +108,12 @@ export class DispatchSmartContract
107
108
  }
108
109
 
109
110
  @method
110
- public deposit(amount: UInt64) {
111
+ public async deposit(amount: UInt64) {
111
112
  // Save this, since otherwise it would be a second witness later,
112
113
  // which could be a different values than the first
113
- const { sender } = this;
114
+ const sender = this.sender.getUnconstrained();
114
115
 
115
- const settlementContract = this.settlementContract.getAndAssertEquals();
116
+ const settlementContract = this.settlementContract.getAndRequireEquals();
116
117
 
117
118
  // Credit the amount to the settlement contract
118
119
  const balanceAU = AccountUpdate.create(settlementContract);
@@ -46,12 +46,14 @@ export class SettlementContractProtocolModule extends ContractModule<
46
46
  ): SmartContractClassFromInterface<SettlementContractType> {
47
47
  const { hooks, config } = this;
48
48
 
49
- const withdrawalStatePathSplit = this.config.withdrawalStatePath.split(
50
- "."
51
- ) as [string, string];
49
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
50
+ const withdrawalStatePathSplit = config.withdrawalStatePath.split(".") as [
51
+ string,
52
+ string,
53
+ ];
52
54
 
53
55
  const escapeHatchSlotsInterval =
54
- this.config.escapeHatchSlotsInterval ?? DEFAULT_ESCAPE_HATCH;
56
+ config.escapeHatchSlotsInterval ?? DEFAULT_ESCAPE_HATCH;
55
57
 
56
58
  SettlementSmartContract.args = {
57
59
  DispatchContract: dispatchContract,
@@ -1,4 +1,9 @@
1
- import { prefixToField, RollupMerkleTree, TypedClass } from "@proto-kit/common";
1
+ import {
2
+ prefixToField,
3
+ RollupMerkleTree,
4
+ TypedClass,
5
+ mapSequential,
6
+ } from "@proto-kit/common";
2
7
  import {
3
8
  AccountUpdate,
4
9
  Bool,
@@ -16,7 +21,10 @@ import {
16
21
  TokenId,
17
22
  UInt32,
18
23
  UInt64,
24
+ TokenContract,
25
+ AccountUpdateForest,
19
26
  } from "o1js";
27
+
20
28
  import { NetworkState } from "../../model/network/NetworkState";
21
29
  import { Path } from "../../model/Path";
22
30
  import { BlockHashMerkleTree } from "../../prover/block/accummulators/BlockHashMerkleTree";
@@ -37,6 +45,8 @@ import {
37
45
 
38
46
  import { DispatchContractType } from "./DispatchSmartContract";
39
47
 
48
+ /* eslint-disable @typescript-eslint/lines-between-class-members */
49
+
40
50
  export class LazyBlockProof extends Proof<
41
51
  BlockProverPublicInput,
42
52
  BlockProverPublicOutput
@@ -51,7 +61,10 @@ export class LazyBlockProof extends Proof<
51
61
  }
52
62
 
53
63
  export interface SettlementContractType {
54
- initialize: (sequencer: PublicKey, dispatchContract: PublicKey) => void;
64
+ initialize: (
65
+ sequencer: PublicKey,
66
+ dispatchContract: PublicKey
67
+ ) => Promise<void>;
55
68
  settle: (
56
69
  blockProof: LazyBlockProof,
57
70
  signature: Signature,
@@ -60,16 +73,18 @@ export interface SettlementContractType {
60
73
  inputNetworkState: NetworkState,
61
74
  outputNetworkState: NetworkState,
62
75
  newPromisedMessagesHash: Field
63
- ) => void;
64
- rollupOutgoingMessages: (batch: OutgoingMessageArgumentBatch) => void;
65
- redeem: (additionUpdate: AccountUpdate) => void;
76
+ ) => Promise<void>;
77
+ rollupOutgoingMessages: (
78
+ batch: OutgoingMessageArgumentBatch
79
+ ) => Promise<void>;
80
+ redeem: (additionUpdate: AccountUpdate) => Promise<void>;
66
81
  }
67
82
 
68
83
  // Some random prefix for the sequencer signature
69
84
  export const BATCH_SIGNATURE_PREFIX = prefixToField("pk-batchSignature");
70
85
 
71
86
  export class SettlementSmartContract
72
- extends SmartContract
87
+ extends TokenContract
73
88
  implements SettlementContractType
74
89
  {
75
90
  // This pattern of injecting args into a smartcontract is currently the only
@@ -92,13 +107,17 @@ export class SettlementSmartContract
92
107
 
93
108
  @state(Field) public outgoingMessageCursor = State<Field>();
94
109
 
110
+ @method async approveBase(forest: AccountUpdateForest) {
111
+ this.checkZeroBalanceChange(forest);
112
+ }
113
+
95
114
  @method
96
- public initialize(sequencer: PublicKey, dispatchContract: PublicKey) {
97
- this.sequencerKey.getAndAssertEquals().assertEquals(Field(0));
98
- this.stateRoot.getAndAssertEquals().assertEquals(Field(0));
99
- this.blockHashRoot.getAndAssertEquals().assertEquals(Field(0));
100
- this.networkStateHash.getAndAssertEquals().assertEquals(Field(0));
101
- this.dispatchContractAddressX.getAndAssertEquals().assertEquals(Field(0));
115
+ public async initialize(sequencer: PublicKey, dispatchContract: PublicKey) {
116
+ this.sequencerKey.getAndRequireEquals().assertEquals(Field(0));
117
+ this.stateRoot.getAndRequireEquals().assertEquals(Field(0));
118
+ this.blockHashRoot.getAndRequireEquals().assertEquals(Field(0));
119
+ this.networkStateHash.getAndRequireEquals().assertEquals(Field(0));
120
+ this.dispatchContractAddressX.getAndRequireEquals().assertEquals(Field(0));
102
121
 
103
122
  this.sequencerKey.set(sequencer.x);
104
123
  this.stateRoot.set(Field(RollupMerkleTree.EMPTY_ROOT));
@@ -106,12 +125,12 @@ export class SettlementSmartContract
106
125
  this.networkStateHash.set(NetworkState.empty().hash());
107
126
  this.dispatchContractAddressX.set(dispatchContract.x);
108
127
 
109
- const DispatchContract = SettlementSmartContract.args.DispatchContract;
110
- new DispatchContract(dispatchContract).initialize(this.address);
128
+ const { DispatchContract } = SettlementSmartContract.args;
129
+ await new DispatchContract(dispatchContract).initialize(this.address);
111
130
  }
112
131
 
113
132
  @method
114
- public settle(
133
+ public async settle(
115
134
  blockProof: LazyBlockProof,
116
135
  signature: Signature,
117
136
  dispatchContractAddress: PublicKey,
@@ -124,14 +143,14 @@ export class SettlementSmartContract
124
143
  blockProof.verify();
125
144
 
126
145
  // Get and assert on-chain values
127
- const stateRoot = this.stateRoot.getAndAssertEquals();
128
- const networkStateHash = this.networkStateHash.getAndAssertEquals();
129
- const blockHashRoot = this.blockHashRoot.getAndAssertEquals();
130
- const sequencerKey = this.sequencerKey.getAndAssertEquals();
146
+ const stateRoot = this.stateRoot.getAndRequireEquals();
147
+ const networkStateHash = this.networkStateHash.getAndRequireEquals();
148
+ const blockHashRoot = this.blockHashRoot.getAndRequireEquals();
149
+ const sequencerKey = this.sequencerKey.getAndRequireEquals();
131
150
  const lastSettlementL1Block =
132
- this.lastSettlementL1Block.getAndAssertEquals();
151
+ this.lastSettlementL1Block.getAndRequireEquals();
133
152
  const onChainDispatchContractAddressX =
134
- this.dispatchContractAddressX.getAndAssertEquals();
153
+ this.dispatchContractAddressX.getAndRequireEquals();
135
154
 
136
155
  onChainDispatchContractAddressX.assertEquals(
137
156
  dispatchContractAddress.x,
@@ -149,7 +168,7 @@ export class SettlementSmartContract
149
168
 
150
169
  // Get block height and use the lower bound for all ops
151
170
  const minBlockIncluded = this.network.globalSlotSinceGenesis.get();
152
- this.network.globalSlotSinceGenesis.assertBetween(
171
+ this.network.globalSlotSinceGenesis.requireBetween(
153
172
  minBlockIncluded,
154
173
  // 5 because that is the length the newPromisedMessagesHash will be valid
155
174
  minBlockIncluded.add(4)
@@ -209,8 +228,8 @@ export class SettlementSmartContract
209
228
  toNetworkState: outputNetworkState,
210
229
  currentL1Block: minBlockIncluded,
211
230
  };
212
- hooks.forEach((hook) => {
213
- hook.beforeSettlement(this, inputs);
231
+ await mapSequential(hooks, async (hook) => {
232
+ await hook.beforeSettlement(this, inputs);
214
233
  });
215
234
 
216
235
  // Apply blockProof
@@ -245,7 +264,7 @@ export class SettlementSmartContract
245
264
  // to be the blockProofs publicoutput, is actually the current on-chain
246
265
  // promisedMessageHash. It also checks the newPromisedMessagesHash to be
247
266
  // a current sequencestate value
248
- dispatchContract.updateMessagesHash(
267
+ await dispatchContract.updateMessagesHash(
249
268
  promisedMessagesHash,
250
269
  newPromisedMessagesHash
251
270
  );
@@ -254,9 +273,9 @@ export class SettlementSmartContract
254
273
  }
255
274
 
256
275
  @method
257
- public rollupOutgoingMessages(batch: OutgoingMessageArgumentBatch) {
258
- let counter = this.outgoingMessageCursor.getAndAssertEquals();
259
- const stateRoot = this.stateRoot.getAndAssertEquals();
276
+ public async rollupOutgoingMessages(batch: OutgoingMessageArgumentBatch) {
277
+ let counter = this.outgoingMessageCursor.getAndRequireEquals();
278
+ const stateRoot = this.stateRoot.getAndRequireEquals();
260
279
 
261
280
  const [withdrawalModule, withdrawalStateName] =
262
281
  SettlementSmartContract.args.withdrawalStatePath;
@@ -282,13 +301,13 @@ export class SettlementSmartContract
282
301
  const { address, amount } = args.value;
283
302
  const isDummy = address.equals(this.address);
284
303
 
285
- const tokenAu = this.token.mint({ address, amount });
286
- const isNewAccount = tokenAu.account.isNew.getAndAssertEquals();
304
+ const tokenAu = this.internal.mint({ address, amount });
305
+ const isNewAccount = tokenAu.account.isNew.getAndRequireEquals();
287
306
  tokenAu.body.balanceChange.magnitude =
288
307
  tokenAu.body.balanceChange.magnitude.sub(
289
308
  Provable.if(
290
309
  isNewAccount,
291
- Mina.accountCreationFee().toConstant(),
310
+ Mina.getNetworkConstants().accountCreationFee.toConstant(),
292
311
  UInt64.zero
293
312
  )
294
313
  );
@@ -300,13 +319,13 @@ export class SettlementSmartContract
300
319
  counter = counter.add(Provable.if(isDummy, Field(0), Field(1)));
301
320
  }
302
321
 
303
- this.balance.subInPlace(UInt64.from(accountCreationFeePaid));
322
+ this.balance.subInPlace(UInt64.Unsafe.fromField(accountCreationFeePaid));
304
323
 
305
324
  this.outgoingMessageCursor.set(counter);
306
325
  }
307
326
 
308
327
  @method
309
- public redeem(additionUpdate: AccountUpdate) {
328
+ public async redeem(additionUpdate: AccountUpdate) {
310
329
  additionUpdate.body.tokenId.assertEquals(
311
330
  TokenId.default,
312
331
  "Tokenid not default token"
@@ -317,7 +336,7 @@ export class SettlementSmartContract
317
336
  const amount = additionUpdate.body.balanceChange.magnitude;
318
337
 
319
338
  // Burn tokens
320
- this.token.burn({
339
+ this.internal.burn({
321
340
  address: additionUpdate.publicKey,
322
341
  amount,
323
342
  });
@@ -327,3 +346,5 @@ export class SettlementSmartContract
327
346
  this.balance.subInPlace(amount);
328
347
  }
329
348
  }
349
+
350
+ /* eslint-enable @typescript-eslint/lines-between-class-members */
@@ -1,5 +1,6 @@
1
1
  import { Bool, Provable, Struct } from "o1js";
2
2
  import { RollupMerkleTreeWitness } from "@proto-kit/common";
3
+
3
4
  import { Withdrawal } from "./Withdrawal";
4
5
 
5
6
  export const OUTGOING_MESSAGE_BATCH_SIZE = 1;
@@ -1,9 +1,8 @@
1
1
  import { Field, PublicKey, UInt32 } from "o1js";
2
2
 
3
- import type { BlockProof } from "../../prover/block/BlockProver";
4
3
  import { ProtocolModule } from "../../protocol/ProtocolModule";
5
4
  import { NetworkState } from "../../model/network/NetworkState";
6
-
5
+ import type { BlockProof } from "../../prover/block/BlockProver";
7
6
  import type { SettlementSmartContract } from "../contracts/SettlementSmartContract";
8
7
 
9
8
  export type SettlementStateRecord = {
@@ -25,10 +24,10 @@ export type SettlementHookInputs = {
25
24
  };
26
25
 
27
26
  export abstract class ProvableSettlementHook<
28
- Config
27
+ Config,
29
28
  > extends ProtocolModule<Config> {
30
29
  public abstract beforeSettlement(
31
30
  smartContract: SettlementSmartContract,
32
31
  inputs: SettlementHookInputs
33
- ): void;
32
+ ): Promise<void>;
34
33
  }
@@ -10,8 +10,9 @@ type NetworkStateSettlementModuleConfig = {
10
10
  blocksPerL1Block: UInt64;
11
11
  };
12
12
 
13
+ /* eslint-disable @typescript-eslint/no-unused-vars */
13
14
  export class NetworkStateSettlementModule extends ProvableSettlementHook<NetworkStateSettlementModuleConfig> {
14
- public beforeSettlement(
15
+ public async beforeSettlement(
15
16
  smartContract: SettlementSmartContract,
16
17
  {
17
18
  blockProof,
@@ -20,7 +21,7 @@ export class NetworkStateSettlementModule extends ProvableSettlementHook<Network
20
21
  contractState,
21
22
  currentL1Block,
22
23
  }: SettlementHookInputs
23
- ): void {
24
+ ) {
24
25
  const { lastSettlementL1Block } = contractState;
25
26
 
26
27
  const blocksPerL1Block = this.config.blocksPerL1Block.toConstant();
@@ -37,3 +38,5 @@ export class NetworkStateSettlementModule extends ProvableSettlementHook<Network
37
38
  // TODO Check within bounds efficiently
38
39
  }
39
40
  }
41
+
42
+ /* eslint-enable @typescript-eslint/no-unused-vars */
@@ -1,5 +1,5 @@
1
1
  import { Mixin } from "ts-mixer";
2
- import { Bool, Field, Provable, type FlexibleProvablePure } from "o1js";
2
+ import { Bool, Field, Provable, type FlexibleProvablePure, Struct } from "o1js";
3
3
  import { container } from "tsyringe";
4
4
  import { dummyValue } from "@proto-kit/common";
5
5
 
@@ -54,6 +54,11 @@ export class State<Value> extends Mixin(WithPath, WithStateServiceProvider) {
54
54
  super();
55
55
  }
56
56
 
57
+ private stateType = class StateType extends Struct({
58
+ value: this.valueType,
59
+ isSome: Bool,
60
+ }) {};
61
+
57
62
  /**
58
63
  * Returns the state that is currently the current state tree
59
64
  * value: The value-fields, or if not state was found, dummy values
@@ -61,7 +66,7 @@ export class State<Value> extends Mixin(WithPath, WithStateServiceProvider) {
61
66
  * (Basically, whether the value-fields are dummy values or actual values
62
67
  * @private
63
68
  */
64
- private getState(): { value: Value; isSome: Bool } {
69
+ private async getState(): Promise<{ value: Value; isSome: Bool }> {
65
70
  this.hasStateServiceOrFail();
66
71
  this.hasPathOrFail();
67
72
 
@@ -71,6 +76,7 @@ export class State<Value> extends Mixin(WithPath, WithStateServiceProvider) {
71
76
  .resolve(RuntimeMethodExecutionContext)
72
77
  .current().result;
73
78
 
79
+ // TODO Use Stateservice for this
74
80
  // First try to find a match inside already created stateTransitions
75
81
  let previousMutatingTransitions: StateTransition<any>[] = [];
76
82
  previousMutatingTransitions = stateTransitions.filter((transition) =>
@@ -89,7 +95,7 @@ export class State<Value> extends Mixin(WithPath, WithStateServiceProvider) {
89
95
  }
90
96
 
91
97
  // If the value is still undefined, look it up in the stateService
92
- const fields = stateServiceProvider.stateService.get(path);
98
+ const fields = await stateServiceProvider.stateService.get(path);
93
99
  if (fields) {
94
100
  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
95
101
  value = valueType.fromFields(fields) as Value;
@@ -107,12 +113,13 @@ export class State<Value> extends Mixin(WithPath, WithStateServiceProvider) {
107
113
  *
108
114
  * @returns Optional value of the current state
109
115
  */
110
- private witnessFromState() {
116
+ private async witnessFromState() {
111
117
  // get the value from storage, or return a dummy value instead
112
- const value = Provable.witness(this.valueType, () => this.getState().value);
113
-
114
- // check if the value exists in the storage or not
115
- const isSome = Provable.witness(Bool, () => this.getState().isSome);
118
+ // also check if the value exists in the storage or not
119
+ const { value, isSome } = await Provable.witnessAsync(
120
+ this.stateType,
121
+ async () => await this.getState()
122
+ );
116
123
 
117
124
  return Option.from(isSome, value, this.valueType);
118
125
  }
@@ -123,8 +130,8 @@ export class State<Value> extends Mixin(WithPath, WithStateServiceProvider) {
123
130
  *
124
131
  * @returns Option representation of the current state.
125
132
  */
126
- public get(): Option<Value> {
127
- const option = this.witnessFromState();
133
+ public async get(): Promise<Option<Value>> {
134
+ const option = await this.witnessFromState();
128
135
 
129
136
  this.hasPathOrFail();
130
137
 
@@ -148,9 +155,9 @@ export class State<Value> extends Mixin(WithPath, WithStateServiceProvider) {
148
155
  *
149
156
  * @param value - Value to be set as the current state
150
157
  */
151
- public set(value: Value) {
158
+ public async set(value: Value) {
152
159
  // link the transition to the current state
153
- const fromOption = this.witnessFromState();
160
+ const fromOption = await this.witnessFromState();
154
161
  const toOption = Option.fromValue(value, this.valueType);
155
162
 
156
163
  this.hasPathOrFail();