@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
@@ -7,14 +7,15 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  var __metadata = (this && this.__metadata) || function (k, v) {
8
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
9
  };
10
- import { prefixToField, RollupMerkleTree } from "@proto-kit/common";
11
- import { AccountUpdate, Bool, Field, method, Mina, Poseidon, Proof, Provable, PublicKey, Signature, SmartContract, State, state, TokenId, UInt32, UInt64, } from "o1js";
10
+ import { prefixToField, RollupMerkleTree, mapSequential, } from "@proto-kit/common";
11
+ import { AccountUpdate, Bool, Field, method, Mina, Poseidon, Proof, Provable, PublicKey, Signature, State, state, TokenId, UInt32, UInt64, TokenContract, AccountUpdateForest, } from "o1js";
12
12
  import { NetworkState } from "../../model/network/NetworkState";
13
13
  import { Path } from "../../model/Path";
14
14
  import { BlockHashMerkleTree } from "../../prover/block/accummulators/BlockHashMerkleTree";
15
15
  import { BlockProverPublicInput, BlockProverPublicOutput, } from "../../prover/block/BlockProvable";
16
16
  import { OUTGOING_MESSAGE_BATCH_SIZE, OutgoingMessageArgumentBatch, } from "../messages/OutgoingMessageArgument";
17
17
  import { Withdrawal } from "../messages/Withdrawal";
18
+ /* eslint-disable @typescript-eslint/lines-between-class-members */
18
19
  export class LazyBlockProof extends Proof {
19
20
  }
20
21
  LazyBlockProof.publicInputType = BlockProverPublicInput;
@@ -24,7 +25,7 @@ LazyBlockProof.tag = () => {
24
25
  };
25
26
  // Some random prefix for the sequencer signature
26
27
  export const BATCH_SIGNATURE_PREFIX = prefixToField("pk-batchSignature");
27
- export class SettlementSmartContract extends SmartContract {
28
+ export class SettlementSmartContract extends TokenContract {
28
29
  constructor() {
29
30
  super(...arguments);
30
31
  this.sequencerKey = State();
@@ -35,30 +36,33 @@ export class SettlementSmartContract extends SmartContract {
35
36
  this.dispatchContractAddressX = State();
36
37
  this.outgoingMessageCursor = State();
37
38
  }
38
- initialize(sequencer, dispatchContract) {
39
- this.sequencerKey.getAndAssertEquals().assertEquals(Field(0));
40
- this.stateRoot.getAndAssertEquals().assertEquals(Field(0));
41
- this.blockHashRoot.getAndAssertEquals().assertEquals(Field(0));
42
- this.networkStateHash.getAndAssertEquals().assertEquals(Field(0));
43
- this.dispatchContractAddressX.getAndAssertEquals().assertEquals(Field(0));
39
+ async approveBase(forest) {
40
+ this.checkZeroBalanceChange(forest);
41
+ }
42
+ async initialize(sequencer, dispatchContract) {
43
+ this.sequencerKey.getAndRequireEquals().assertEquals(Field(0));
44
+ this.stateRoot.getAndRequireEquals().assertEquals(Field(0));
45
+ this.blockHashRoot.getAndRequireEquals().assertEquals(Field(0));
46
+ this.networkStateHash.getAndRequireEquals().assertEquals(Field(0));
47
+ this.dispatchContractAddressX.getAndRequireEquals().assertEquals(Field(0));
44
48
  this.sequencerKey.set(sequencer.x);
45
49
  this.stateRoot.set(Field(RollupMerkleTree.EMPTY_ROOT));
46
50
  this.blockHashRoot.set(Field(BlockHashMerkleTree.EMPTY_ROOT));
47
51
  this.networkStateHash.set(NetworkState.empty().hash());
48
52
  this.dispatchContractAddressX.set(dispatchContract.x);
49
- const DispatchContract = SettlementSmartContract.args.DispatchContract;
50
- new DispatchContract(dispatchContract).initialize(this.address);
53
+ const { DispatchContract } = SettlementSmartContract.args;
54
+ await new DispatchContract(dispatchContract).initialize(this.address);
51
55
  }
52
- settle(blockProof, signature, dispatchContractAddress, publicKey, inputNetworkState, outputNetworkState, newPromisedMessagesHash) {
56
+ async settle(blockProof, signature, dispatchContractAddress, publicKey, inputNetworkState, outputNetworkState, newPromisedMessagesHash) {
53
57
  // Verify the blockproof
54
58
  blockProof.verify();
55
59
  // Get and assert on-chain values
56
- const stateRoot = this.stateRoot.getAndAssertEquals();
57
- const networkStateHash = this.networkStateHash.getAndAssertEquals();
58
- const blockHashRoot = this.blockHashRoot.getAndAssertEquals();
59
- const sequencerKey = this.sequencerKey.getAndAssertEquals();
60
- const lastSettlementL1Block = this.lastSettlementL1Block.getAndAssertEquals();
61
- const onChainDispatchContractAddressX = this.dispatchContractAddressX.getAndAssertEquals();
60
+ const stateRoot = this.stateRoot.getAndRequireEquals();
61
+ const networkStateHash = this.networkStateHash.getAndRequireEquals();
62
+ const blockHashRoot = this.blockHashRoot.getAndRequireEquals();
63
+ const sequencerKey = this.sequencerKey.getAndRequireEquals();
64
+ const lastSettlementL1Block = this.lastSettlementL1Block.getAndRequireEquals();
65
+ const onChainDispatchContractAddressX = this.dispatchContractAddressX.getAndRequireEquals();
62
66
  onChainDispatchContractAddressX.assertEquals(dispatchContractAddress.x, "DispatchContract address not provided correctly");
63
67
  const { DispatchContract, escapeHatchSlotsInterval, hooks } = SettlementSmartContract.args;
64
68
  // Get dispatch contract values
@@ -68,7 +72,7 @@ export class SettlementSmartContract extends SmartContract {
68
72
  const promisedMessagesHash = dispatchContract.promisedMessagesHash.get();
69
73
  // Get block height and use the lower bound for all ops
70
74
  const minBlockIncluded = this.network.globalSlotSinceGenesis.get();
71
- this.network.globalSlotSinceGenesis.assertBetween(minBlockIncluded,
75
+ this.network.globalSlotSinceGenesis.requireBetween(minBlockIncluded,
72
76
  // 5 because that is the length the newPromisedMessagesHash will be valid
73
77
  minBlockIncluded.add(4));
74
78
  // Check signature/escape catch
@@ -110,8 +114,8 @@ export class SettlementSmartContract extends SmartContract {
110
114
  toNetworkState: outputNetworkState,
111
115
  currentL1Block: minBlockIncluded,
112
116
  };
113
- hooks.forEach((hook) => {
114
- hook.beforeSettlement(this, inputs);
117
+ await mapSequential(hooks, async (hook) => {
118
+ await hook.beforeSettlement(this, inputs);
115
119
  });
116
120
  // Apply blockProof
117
121
  stateRoot.assertEquals(blockProof.publicInput.stateRoot, "Input state root not matching");
@@ -130,12 +134,12 @@ export class SettlementSmartContract extends SmartContract {
130
134
  // to be the blockProofs publicoutput, is actually the current on-chain
131
135
  // promisedMessageHash. It also checks the newPromisedMessagesHash to be
132
136
  // a current sequencestate value
133
- dispatchContract.updateMessagesHash(promisedMessagesHash, newPromisedMessagesHash);
137
+ await dispatchContract.updateMessagesHash(promisedMessagesHash, newPromisedMessagesHash);
134
138
  this.lastSettlementL1Block.set(minBlockIncluded);
135
139
  }
136
- rollupOutgoingMessages(batch) {
137
- let counter = this.outgoingMessageCursor.getAndAssertEquals();
138
- const stateRoot = this.stateRoot.getAndAssertEquals();
140
+ async rollupOutgoingMessages(batch) {
141
+ let counter = this.outgoingMessageCursor.getAndRequireEquals();
142
+ const stateRoot = this.stateRoot.getAndRequireEquals();
139
143
  const [withdrawalModule, withdrawalStateName] = SettlementSmartContract.args.withdrawalStatePath;
140
144
  const mapPath = Path.fromProperty(withdrawalModule, withdrawalStateName);
141
145
  let accountCreationFeePaid = Field(0);
@@ -149,24 +153,24 @@ export class SettlementSmartContract extends SmartContract {
149
153
  // Process message
150
154
  const { address, amount } = args.value;
151
155
  const isDummy = address.equals(this.address);
152
- const tokenAu = this.token.mint({ address, amount });
153
- const isNewAccount = tokenAu.account.isNew.getAndAssertEquals();
156
+ const tokenAu = this.internal.mint({ address, amount });
157
+ const isNewAccount = tokenAu.account.isNew.getAndRequireEquals();
154
158
  tokenAu.body.balanceChange.magnitude =
155
- tokenAu.body.balanceChange.magnitude.sub(Provable.if(isNewAccount, Mina.accountCreationFee().toConstant(), UInt64.zero));
159
+ tokenAu.body.balanceChange.magnitude.sub(Provable.if(isNewAccount, Mina.getNetworkConstants().accountCreationFee.toConstant(), UInt64.zero));
156
160
  accountCreationFeePaid = accountCreationFeePaid.add(Provable.if(isNewAccount, Field(1e9), Field(0)));
157
161
  counter = counter.add(Provable.if(isDummy, Field(0), Field(1)));
158
162
  }
159
- this.balance.subInPlace(UInt64.from(accountCreationFeePaid));
163
+ this.balance.subInPlace(UInt64.Unsafe.fromField(accountCreationFeePaid));
160
164
  this.outgoingMessageCursor.set(counter);
161
165
  }
162
- redeem(additionUpdate) {
166
+ async redeem(additionUpdate) {
163
167
  additionUpdate.body.tokenId.assertEquals(TokenId.default, "Tokenid not default token");
164
168
  additionUpdate.body.balanceChange.sgn
165
169
  .isPositive()
166
170
  .assertTrue("Sign not correct");
167
171
  const amount = additionUpdate.body.balanceChange.magnitude;
168
172
  // Burn tokens
169
- this.token.burn({
173
+ this.internal.burn({
170
174
  address: additionUpdate.publicKey,
171
175
  amount,
172
176
  });
@@ -203,11 +207,17 @@ __decorate([
203
207
  state(Field),
204
208
  __metadata("design:type", Object)
205
209
  ], SettlementSmartContract.prototype, "outgoingMessageCursor", void 0);
210
+ __decorate([
211
+ method,
212
+ __metadata("design:type", Function),
213
+ __metadata("design:paramtypes", [AccountUpdateForest]),
214
+ __metadata("design:returntype", Promise)
215
+ ], SettlementSmartContract.prototype, "approveBase", null);
206
216
  __decorate([
207
217
  method,
208
218
  __metadata("design:type", Function),
209
219
  __metadata("design:paramtypes", [PublicKey, PublicKey]),
210
- __metadata("design:returntype", void 0)
220
+ __metadata("design:returntype", Promise)
211
221
  ], SettlementSmartContract.prototype, "initialize", null);
212
222
  __decorate([
213
223
  method,
@@ -219,17 +229,18 @@ __decorate([
219
229
  NetworkState,
220
230
  NetworkState,
221
231
  Field]),
222
- __metadata("design:returntype", void 0)
232
+ __metadata("design:returntype", Promise)
223
233
  ], SettlementSmartContract.prototype, "settle", null);
224
234
  __decorate([
225
235
  method,
226
236
  __metadata("design:type", Function),
227
237
  __metadata("design:paramtypes", [OutgoingMessageArgumentBatch]),
228
- __metadata("design:returntype", void 0)
238
+ __metadata("design:returntype", Promise)
229
239
  ], SettlementSmartContract.prototype, "rollupOutgoingMessages", null);
230
240
  __decorate([
231
241
  method,
232
242
  __metadata("design:type", Function),
233
243
  __metadata("design:paramtypes", [AccountUpdate]),
234
- __metadata("design:returntype", void 0)
244
+ __metadata("design:returntype", Promise)
235
245
  ], SettlementSmartContract.prototype, "redeem", null);
246
+ /* eslint-enable @typescript-eslint/lines-between-class-members */
@@ -7,16 +7,37 @@ declare const Deposit_base: (new (value: {
7
7
  amount: UInt64;
8
8
  }) & {
9
9
  _isStruct: true;
10
- } & import("o1js/dist/node/snarky").ProvablePure<{
10
+ } & Omit<import("o1js/dist/node/lib/provable/types/provable-intf").Provable<{
11
11
  address: PublicKey;
12
12
  amount: UInt64;
13
- }> & {
13
+ }, {
14
+ address: {
15
+ x: bigint;
16
+ isOdd: boolean;
17
+ };
18
+ amount: bigint;
19
+ }>, "fromFields"> & {
20
+ fromFields: (fields: import("o1js/dist/node/lib/provable/field").Field[]) => {
21
+ address: PublicKey;
22
+ amount: UInt64;
23
+ };
24
+ } & {
25
+ fromValue: (value: {
26
+ address: PublicKey | {
27
+ x: bigint | import("o1js/dist/node/lib/provable/field").Field;
28
+ isOdd: boolean | import("o1js/dist/node/lib/provable/bool").Bool;
29
+ };
30
+ amount: bigint | UInt64;
31
+ }) => {
32
+ address: PublicKey;
33
+ amount: UInt64;
34
+ };
14
35
  toInput: (x: {
15
36
  address: PublicKey;
16
37
  amount: UInt64;
17
38
  }) => {
18
- fields?: import("o1js/dist/node/lib/field").Field[] | undefined;
19
- packed?: [import("o1js/dist/node/lib/field").Field, number][] | undefined;
39
+ fields?: import("o1js/dist/node/lib/provable/field").Field[] | undefined;
40
+ packed?: [import("o1js/dist/node/lib/provable/field").Field, number][] | undefined;
20
41
  };
21
42
  toJSON: (x: {
22
43
  address: PublicKey;
@@ -32,6 +53,10 @@ declare const Deposit_base: (new (value: {
32
53
  address: PublicKey;
33
54
  amount: UInt64;
34
55
  };
56
+ empty: () => {
57
+ address: PublicKey;
58
+ amount: UInt64;
59
+ };
35
60
  };
36
61
  export declare class Deposit extends Deposit_base {
37
62
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Deposit.d.ts","sourceRoot":"","sources":["../../../src/settlement/messages/Deposit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,EAAE,MAAM,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEjD,qBAAa,OAAQ,SAAQ,YAG3B;CAAG"}
1
+ {"version":3,"file":"Deposit.d.ts","sourceRoot":"","sources":["../../../src/settlement/messages/Deposit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,EAAE,MAAM,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEjD,qBAAa,OAAQ,SAAQ,YAG3B;CAAG"}
@@ -9,16 +9,49 @@ declare const OutgoingMessageArgument_base: (new (value: {
9
9
  value: Withdrawal;
10
10
  }) & {
11
11
  _isStruct: true;
12
- } & import("o1js/dist/node/snarky").ProvablePure<{
12
+ } & Omit<import("o1js/dist/node/lib/provable/types/provable-intf").Provable<{
13
13
  witness: RollupMerkleTreeWitness;
14
14
  value: Withdrawal;
15
- }> & {
15
+ }, {
16
+ witness: {
17
+ path: bigint[];
18
+ isLeft: boolean[];
19
+ };
20
+ value: {
21
+ address: {
22
+ x: bigint;
23
+ isOdd: boolean;
24
+ };
25
+ amount: bigint;
26
+ };
27
+ }>, "fromFields"> & {
28
+ fromFields: (fields: import("o1js/dist/node/lib/provable/field").Field[]) => {
29
+ witness: RollupMerkleTreeWitness;
30
+ value: Withdrawal;
31
+ };
32
+ } & {
33
+ fromValue: (value: {
34
+ witness: RollupMerkleTreeWitness | {
35
+ path: import("o1js/dist/node/lib/provable/field").Field[] | bigint[];
36
+ isLeft: import("o1js/dist/node/lib/provable/bool").Bool[] | boolean[];
37
+ };
38
+ value: Withdrawal | {
39
+ address: import("o1js/dist/node/lib/provable/crypto/signature").PublicKey | {
40
+ x: bigint | import("o1js/dist/node/lib/provable/field").Field;
41
+ isOdd: boolean | import("o1js/dist/node/lib/provable/bool").Bool;
42
+ };
43
+ amount: bigint | import("o1js/dist/node/lib/provable/int").UInt64;
44
+ };
45
+ }) => {
46
+ witness: RollupMerkleTreeWitness;
47
+ value: Withdrawal;
48
+ };
16
49
  toInput: (x: {
17
50
  witness: RollupMerkleTreeWitness;
18
51
  value: Withdrawal;
19
52
  }) => {
20
- fields?: import("o1js/dist/node/lib/field").Field[] | undefined;
21
- packed?: [import("o1js/dist/node/lib/field").Field, number][] | undefined;
53
+ fields?: import("o1js/dist/node/lib/provable/field").Field[] | undefined;
54
+ packed?: [import("o1js/dist/node/lib/provable/field").Field, number][] | undefined;
22
55
  };
23
56
  toJSON: (x: {
24
57
  witness: RollupMerkleTreeWitness;
@@ -46,32 +79,75 @@ declare const OutgoingMessageArgument_base: (new (value: {
46
79
  witness: RollupMerkleTreeWitness;
47
80
  value: Withdrawal;
48
81
  };
82
+ empty: () => {
83
+ witness: RollupMerkleTreeWitness;
84
+ value: Withdrawal;
85
+ };
49
86
  };
50
87
  export declare class OutgoingMessageArgument extends OutgoingMessageArgument_base {
51
88
  static dummy(): OutgoingMessageArgument;
52
89
  }
53
90
  declare const OutgoingMessageArgumentBatch_base: (new (value: {
54
91
  arguments: OutgoingMessageArgument[];
55
- isDummys: import("o1js/dist/node/lib/bool").Bool[];
92
+ isDummys: import("o1js/dist/node/lib/provable/bool").Bool[];
56
93
  }) => {
57
94
  arguments: OutgoingMessageArgument[];
58
- isDummys: import("o1js/dist/node/lib/bool").Bool[];
95
+ isDummys: import("o1js/dist/node/lib/provable/bool").Bool[];
59
96
  }) & {
60
97
  _isStruct: true;
61
- } & import("o1js/dist/node/snarky").ProvablePure<{
98
+ } & Omit<import("o1js/dist/node/lib/provable/types/provable-intf").Provable<{
62
99
  arguments: OutgoingMessageArgument[];
63
- isDummys: import("o1js/dist/node/lib/bool").Bool[];
64
- }> & {
100
+ isDummys: import("o1js/dist/node/lib/provable/bool").Bool[];
101
+ }, {
102
+ arguments: {
103
+ witness: {
104
+ path: bigint[];
105
+ isLeft: boolean[];
106
+ };
107
+ value: {
108
+ address: {
109
+ x: bigint;
110
+ isOdd: boolean;
111
+ };
112
+ amount: bigint;
113
+ };
114
+ }[];
115
+ isDummys: boolean[];
116
+ }>, "fromFields"> & {
117
+ fromFields: (fields: import("o1js/dist/node/lib/provable/field").Field[]) => {
118
+ arguments: OutgoingMessageArgument[];
119
+ isDummys: import("o1js/dist/node/lib/provable/bool").Bool[];
120
+ };
121
+ } & {
122
+ fromValue: (value: {
123
+ arguments: OutgoingMessageArgument[] | {
124
+ witness: {
125
+ path: bigint[];
126
+ isLeft: boolean[];
127
+ };
128
+ value: {
129
+ address: {
130
+ x: bigint;
131
+ isOdd: boolean;
132
+ };
133
+ amount: bigint;
134
+ };
135
+ }[];
136
+ isDummys: import("o1js/dist/node/lib/provable/bool").Bool[] | boolean[];
137
+ }) => {
138
+ arguments: OutgoingMessageArgument[];
139
+ isDummys: import("o1js/dist/node/lib/provable/bool").Bool[];
140
+ };
65
141
  toInput: (x: {
66
142
  arguments: OutgoingMessageArgument[];
67
- isDummys: import("o1js/dist/node/lib/bool").Bool[];
143
+ isDummys: import("o1js/dist/node/lib/provable/bool").Bool[];
68
144
  }) => {
69
- fields?: import("o1js/dist/node/lib/field").Field[] | undefined;
70
- packed?: [import("o1js/dist/node/lib/field").Field, number][] | undefined;
145
+ fields?: import("o1js/dist/node/lib/provable/field").Field[] | undefined;
146
+ packed?: [import("o1js/dist/node/lib/provable/field").Field, number][] | undefined;
71
147
  };
72
148
  toJSON: (x: {
73
149
  arguments: OutgoingMessageArgument[];
74
- isDummys: import("o1js/dist/node/lib/bool").Bool[];
150
+ isDummys: import("o1js/dist/node/lib/provable/bool").Bool[];
75
151
  }) => {
76
152
  arguments: {
77
153
  witness: {
@@ -99,7 +175,11 @@ declare const OutgoingMessageArgumentBatch_base: (new (value: {
99
175
  isDummys: boolean[];
100
176
  }) => {
101
177
  arguments: OutgoingMessageArgument[];
102
- isDummys: import("o1js/dist/node/lib/bool").Bool[];
178
+ isDummys: import("o1js/dist/node/lib/provable/bool").Bool[];
179
+ };
180
+ empty: () => {
181
+ arguments: OutgoingMessageArgument[];
182
+ isDummys: import("o1js/dist/node/lib/provable/bool").Bool[];
103
183
  };
104
184
  };
105
185
  export declare class OutgoingMessageArgumentBatch extends OutgoingMessageArgumentBatch_base {
@@ -1 +1 @@
1
- {"version":3,"file":"OutgoingMessageArgument.d.ts","sourceRoot":"","sources":["../../../src/settlement/messages/OutgoingMessageArgument.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,eAAO,MAAM,2BAA2B,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE7C,qBAAa,uBAAwB,SAAQ,4BAG3C;WACc,KAAK,IAAI,uBAAuB;CAM/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAED,qBAAa,4BAA6B,SAAQ,iCAOhD;WACc,YAAY,CAAC,iBAAiB,EAAE,uBAAuB,EAAE;CAcxE"}
1
+ {"version":3,"file":"OutgoingMessageArgument.d.ts","sourceRoot":"","sources":["../../../src/settlement/messages/OutgoingMessageArgument.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,eAAO,MAAM,2BAA2B,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE7C,qBAAa,uBAAwB,SAAQ,4BAG3C;WACc,KAAK,IAAI,uBAAuB;CAM/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAED,qBAAa,4BAA6B,SAAQ,iCAOhD;WACc,YAAY,CAAC,iBAAiB,EAAE,uBAAuB,EAAE;CAcxE"}
@@ -7,16 +7,37 @@ declare const Withdrawal_base: (new (value: {
7
7
  amount: UInt64;
8
8
  }) & {
9
9
  _isStruct: true;
10
- } & import("o1js/dist/node/snarky").ProvablePure<{
10
+ } & Omit<import("o1js/dist/node/lib/provable/types/provable-intf").Provable<{
11
11
  address: PublicKey;
12
12
  amount: UInt64;
13
- }> & {
13
+ }, {
14
+ address: {
15
+ x: bigint;
16
+ isOdd: boolean;
17
+ };
18
+ amount: bigint;
19
+ }>, "fromFields"> & {
20
+ fromFields: (fields: import("o1js/dist/node/lib/provable/field").Field[]) => {
21
+ address: PublicKey;
22
+ amount: UInt64;
23
+ };
24
+ } & {
25
+ fromValue: (value: {
26
+ address: PublicKey | {
27
+ x: bigint | import("o1js/dist/node/lib/provable/field").Field;
28
+ isOdd: boolean | import("o1js/dist/node/lib/provable/bool").Bool;
29
+ };
30
+ amount: bigint | UInt64;
31
+ }) => {
32
+ address: PublicKey;
33
+ amount: UInt64;
34
+ };
14
35
  toInput: (x: {
15
36
  address: PublicKey;
16
37
  amount: UInt64;
17
38
  }) => {
18
- fields?: import("o1js/dist/node/lib/field").Field[] | undefined;
19
- packed?: [import("o1js/dist/node/lib/field").Field, number][] | undefined;
39
+ fields?: import("o1js/dist/node/lib/provable/field").Field[] | undefined;
40
+ packed?: [import("o1js/dist/node/lib/provable/field").Field, number][] | undefined;
20
41
  };
21
42
  toJSON: (x: {
22
43
  address: PublicKey;
@@ -32,6 +53,10 @@ declare const Withdrawal_base: (new (value: {
32
53
  address: PublicKey;
33
54
  amount: UInt64;
34
55
  };
56
+ empty: () => {
57
+ address: PublicKey;
58
+ amount: UInt64;
59
+ };
35
60
  };
36
61
  export declare class Withdrawal extends Withdrawal_base {
37
62
  static dummy(): Withdrawal;
@@ -1 +1 @@
1
- {"version":3,"file":"Withdrawal.d.ts","sourceRoot":"","sources":["../../../src/settlement/messages/Withdrawal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,EAAE,MAAM,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGjD,qBAAa,UAAW,SAAQ,eAG9B;WACc,KAAK;CAMpB"}
1
+ {"version":3,"file":"Withdrawal.d.ts","sourceRoot":"","sources":["../../../src/settlement/messages/Withdrawal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,EAAE,MAAM,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGjD,qBAAa,UAAW,SAAQ,eAG9B;WACc,KAAK;CAMpB"}
@@ -1,7 +1,7 @@
1
1
  import { Field, PublicKey, UInt32 } from "o1js";
2
- import type { BlockProof } from "../../prover/block/BlockProver";
3
2
  import { ProtocolModule } from "../../protocol/ProtocolModule";
4
3
  import { NetworkState } from "../../model/network/NetworkState";
4
+ import type { BlockProof } from "../../prover/block/BlockProver";
5
5
  import type { SettlementSmartContract } from "../contracts/SettlementSmartContract";
6
6
  export type SettlementStateRecord = {
7
7
  sequencerKey: PublicKey;
@@ -19,6 +19,6 @@ export type SettlementHookInputs = {
19
19
  currentL1Block: UInt32;
20
20
  };
21
21
  export declare abstract class ProvableSettlementHook<Config> extends ProtocolModule<Config> {
22
- abstract beforeSettlement(smartContract: SettlementSmartContract, inputs: SettlementHookInputs): void;
22
+ abstract beforeSettlement(smartContract: SettlementSmartContract, inputs: SettlementHookInputs): Promise<void>;
23
23
  }
24
24
  //# sourceMappingURL=ProvableSettlementHook.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProvableSettlementHook.d.ts","sourceRoot":"","sources":["../../../src/settlement/modularity/ProvableSettlementHook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEhD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAEhE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAEpF,MAAM,MAAM,qBAAqB,GAAG;IAClC,YAAY,EAAE,SAAS,CAAC;IACxB,qBAAqB,EAAE,MAAM,CAAC;IAE9B,SAAS,EAAE,KAAK,CAAC;IACjB,gBAAgB,EAAE,KAAK,CAAC;IACxB,aAAa,EAAE,KAAK,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,UAAU,CAAC;IACvB,gBAAgB,EAAE,YAAY,CAAC;IAC/B,cAAc,EAAE,YAAY,CAAC;IAC7B,uBAAuB,EAAE,KAAK,CAAC;IAC/B,aAAa,EAAE,qBAAqB,CAAC;IACrC,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,8BAAsB,sBAAsB,CAC1C,MAAM,CACN,SAAQ,cAAc,CAAC,MAAM,CAAC;aACd,gBAAgB,CAC9B,aAAa,EAAE,uBAAuB,EACtC,MAAM,EAAE,oBAAoB,GAC3B,IAAI;CACR"}
1
+ {"version":3,"file":"ProvableSettlementHook.d.ts","sourceRoot":"","sources":["../../../src/settlement/modularity/ProvableSettlementHook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAEpF,MAAM,MAAM,qBAAqB,GAAG;IAClC,YAAY,EAAE,SAAS,CAAC;IACxB,qBAAqB,EAAE,MAAM,CAAC;IAE9B,SAAS,EAAE,KAAK,CAAC;IACjB,gBAAgB,EAAE,KAAK,CAAC;IACxB,aAAa,EAAE,KAAK,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,UAAU,CAAC;IACvB,gBAAgB,EAAE,YAAY,CAAC;IAC/B,cAAc,EAAE,YAAY,CAAC;IAC7B,uBAAuB,EAAE,KAAK,CAAC;IAC/B,aAAa,EAAE,qBAAqB,CAAC;IACrC,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,8BAAsB,sBAAsB,CAC1C,MAAM,CACN,SAAQ,cAAc,CAAC,MAAM,CAAC;aACd,gBAAgB,CAC9B,aAAa,EAAE,uBAAuB,EACtC,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,IAAI,CAAC;CACjB"}
@@ -5,7 +5,7 @@ type NetworkStateSettlementModuleConfig = {
5
5
  blocksPerL1Block: UInt64;
6
6
  };
7
7
  export declare class NetworkStateSettlementModule extends ProvableSettlementHook<NetworkStateSettlementModuleConfig> {
8
- beforeSettlement(smartContract: SettlementSmartContract, { blockProof, fromNetworkState, toNetworkState, contractState, currentL1Block, }: SettlementHookInputs): void;
8
+ beforeSettlement(smartContract: SettlementSmartContract, { blockProof, fromNetworkState, toNetworkState, contractState, currentL1Block, }: SettlementHookInputs): Promise<void>;
9
9
  }
10
10
  export {};
11
11
  //# sourceMappingURL=NetworkStateSettlementModule.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NetworkStateSettlementModule.d.ts","sourceRoot":"","sources":["../../../src/settlement/modules/NetworkStateSettlementModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAE/E,KAAK,kCAAkC,GAAG;IACxC,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,qBAAa,4BAA6B,SAAQ,sBAAsB,CAAC,kCAAkC,CAAC;IACnG,gBAAgB,CACrB,aAAa,EAAE,uBAAuB,EACtC,EACE,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,cAAc,GACf,EAAE,oBAAoB,GACtB,IAAI;CAgBR"}
1
+ {"version":3,"file":"NetworkStateSettlementModule.d.ts","sourceRoot":"","sources":["../../../src/settlement/modules/NetworkStateSettlementModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAE/E,KAAK,kCAAkC,GAAG;IACxC,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAGF,qBAAa,4BAA6B,SAAQ,sBAAsB,CAAC,kCAAkC,CAAC;IAC7F,gBAAgB,CAC3B,aAAa,EAAE,uBAAuB,EACtC,EACE,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,cAAc,GACf,EAAE,oBAAoB;CAiB1B"}
@@ -1,6 +1,7 @@
1
1
  import { ProvableSettlementHook, } from "../modularity/ProvableSettlementHook";
2
+ /* eslint-disable @typescript-eslint/no-unused-vars */
2
3
  export class NetworkStateSettlementModule extends ProvableSettlementHook {
3
- beforeSettlement(smartContract, { blockProof, fromNetworkState, toNetworkState, contractState, currentL1Block, }) {
4
+ async beforeSettlement(smartContract, { blockProof, fromNetworkState, toNetworkState, contractState, currentL1Block, }) {
4
5
  const { lastSettlementL1Block } = contractState;
5
6
  const blocksPerL1Block = this.config.blocksPerL1Block.toConstant();
6
7
  const numL1Blocks = currentL1Block.sub(lastSettlementL1Block);
@@ -10,3 +11,4 @@ export class NetworkStateSettlementModule extends ProvableSettlementHook {
10
11
  // TODO Check within bounds efficiently
11
12
  }
12
13
  }
14
+ /* eslint-enable @typescript-eslint/no-unused-vars */
@@ -14,7 +14,7 @@ export declare class WithStateServiceProvider {
14
14
  stateServiceProvider: StateServiceProvider;
15
15
  };
16
16
  }
17
- declare const State_base: import("ts-mixer/dist/types/types").Class<any[], WithPath & WithStateServiceProvider, typeof WithPath & typeof WithStateServiceProvider, false>;
17
+ declare const State_base: import("ts-mixer/dist/types/types").Class<any[], WithPath & WithStateServiceProvider, typeof WithPath & typeof WithStateServiceProvider>;
18
18
  /**
19
19
  * Utilities for runtime module state, such as get/set
20
20
  */
@@ -28,6 +28,7 @@ export declare class State<Value> extends State_base {
28
28
  */
29
29
  static from<Value>(valueType: FlexibleProvablePure<Value>): State<Value>;
30
30
  constructor(valueType: FlexibleProvablePure<Value>);
31
+ private stateType;
31
32
  /**
32
33
  * Returns the state that is currently the current state tree
33
34
  * value: The value-fields, or if not state was found, dummy values
@@ -49,7 +50,7 @@ export declare class State<Value> extends State_base {
49
50
  *
50
51
  * @returns Option representation of the current state.
51
52
  */
52
- get(): Option<Value>;
53
+ get(): Promise<Option<Value>>;
53
54
  /**
54
55
  * Sets a new state value by creating a state transition from
55
56
  * the current value to the newly set value.
@@ -61,7 +62,7 @@ export declare class State<Value> extends State_base {
61
62
  *
62
63
  * @param value - Value to be set as the current state
63
64
  */
64
- set(value: Value): void;
65
+ set(value: Value): Promise<void>;
65
66
  }
66
67
  export {};
67
68
  //# sourceMappingURL=State.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"State.d.ts","sourceRoot":"","sources":["../../src/state/State.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,KAAK,EAAY,KAAK,oBAAoB,EAAE,MAAM,MAAM,CAAC;AAIxE,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D,qBAAa,QAAQ;IACZ,IAAI,CAAC,EAAE,KAAK,CAAC;IAEb,aAAa,IAAI,OAAO,CAAC,IAAI,IAAI;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE;CAOvD;AAED,qBAAa,wBAAwB;IAC5B,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAE5C,qBAAqB,IAAI,OAAO,CAAC,IAAI,IAAI;QAC9C,oBAAoB,EAAE,oBAAoB,CAAC;KAC5C;CAOF;;AAED;;GAEG;AACH,qBAAa,KAAK,CAAC,KAAK,CAAE,SAAQ,UAAyC;IAW/C,SAAS,EAAE,oBAAoB,CAAC,KAAK,CAAC;IAVhE;;;;;OAKG;WACW,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,oBAAoB,CAAC,KAAK,CAAC;gBAItC,SAAS,EAAE,oBAAoB,CAAC,KAAK,CAAC;IAIhE;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ;IAwChB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;;;;OAKG;IACI,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC;IAc3B;;;;;;;;;;OAUG;IACI,GAAG,CAAC,KAAK,EAAE,KAAK;CAiBxB"}
1
+ {"version":3,"file":"State.d.ts","sourceRoot":"","sources":["../../src/state/State.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,KAAK,EAAY,KAAK,oBAAoB,EAAU,MAAM,MAAM,CAAC;AAIhF,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D,qBAAa,QAAQ;IACZ,IAAI,CAAC,EAAE,KAAK,CAAC;IAEb,aAAa,IAAI,OAAO,CAAC,IAAI,IAAI;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE;CAOvD;AAED,qBAAa,wBAAwB;IAC5B,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAE5C,qBAAqB,IAAI,OAAO,CAAC,IAAI,IAAI;QAC9C,oBAAoB,EAAE,oBAAoB,CAAC;KAC5C;CAOF;;AAED;;GAEG;AACH,qBAAa,KAAK,CAAC,KAAK,CAAE,SAAQ,UAAyC;IAW/C,SAAS,EAAE,oBAAoB,CAAC,KAAK,CAAC;IAVhE;;;;;OAKG;WACW,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,oBAAoB,CAAC,KAAK,CAAC;gBAItC,SAAS,EAAE,oBAAoB,CAAC,KAAK,CAAC;IAIhE,OAAO,CAAC,SAAS,CAGX;IAEN;;;;;;OAMG;YACW,QAAQ;IAyCtB;;;;;OAKG;YACW,gBAAgB;IAW9B;;;;;OAKG;IACU,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAc1C;;;;;;;;;;OAUG;IACU,GAAG,CAAC,KAAK,EAAE,KAAK;CAiB9B"}
@@ -1,5 +1,5 @@
1
1
  import { Mixin } from "ts-mixer";
2
- import { Bool, Provable } from "o1js";
2
+ import { Bool, Provable, Struct } from "o1js";
3
3
  import { container } from "tsyringe";
4
4
  import { dummyValue } from "@proto-kit/common";
5
5
  import { Option } from "../model/Option";
@@ -35,6 +35,11 @@ export class State extends Mixin(WithPath, WithStateServiceProvider) {
35
35
  constructor(valueType) {
36
36
  super();
37
37
  this.valueType = valueType;
38
+ this.stateType = class StateType extends Struct({
39
+ value: this.valueType,
40
+ isSome: Bool,
41
+ }) {
42
+ };
38
43
  }
39
44
  /**
40
45
  * Returns the state that is currently the current state tree
@@ -43,13 +48,14 @@ export class State extends Mixin(WithPath, WithStateServiceProvider) {
43
48
  * (Basically, whether the value-fields are dummy values or actual values
44
49
  * @private
45
50
  */
46
- getState() {
51
+ async getState() {
47
52
  this.hasStateServiceOrFail();
48
53
  this.hasPathOrFail();
49
54
  const { path, stateServiceProvider, valueType } = this;
50
55
  const { stateTransitions } = container
51
56
  .resolve(RuntimeMethodExecutionContext)
52
57
  .current().result;
58
+ // TODO Use Stateservice for this
53
59
  // First try to find a match inside already created stateTransitions
54
60
  let previousMutatingTransitions = [];
55
61
  previousMutatingTransitions = stateTransitions.filter((transition) => transition.path.equals(path).and(transition.to.isSome).toBoolean());
@@ -62,7 +68,7 @@ export class State extends Mixin(WithPath, WithStateServiceProvider) {
62
68
  return { value, isSome: Bool(true) };
63
69
  }
64
70
  // If the value is still undefined, look it up in the stateService
65
- const fields = stateServiceProvider.stateService.get(path);
71
+ const fields = await stateServiceProvider.stateService.get(path);
66
72
  if (fields) {
67
73
  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
68
74
  value = valueType.fromFields(fields);
@@ -78,11 +84,10 @@ export class State extends Mixin(WithPath, WithStateServiceProvider) {
78
84
  *
79
85
  * @returns Optional value of the current state
80
86
  */
81
- witnessFromState() {
87
+ async witnessFromState() {
82
88
  // get the value from storage, or return a dummy value instead
83
- const value = Provable.witness(this.valueType, () => this.getState().value);
84
- // check if the value exists in the storage or not
85
- const isSome = Provable.witness(Bool, () => this.getState().isSome);
89
+ // also check if the value exists in the storage or not
90
+ const { value, isSome } = await Provable.witnessAsync(this.stateType, async () => await this.getState());
86
91
  return Option.from(isSome, value, this.valueType);
87
92
  }
88
93
  /**
@@ -91,8 +96,8 @@ export class State extends Mixin(WithPath, WithStateServiceProvider) {
91
96
  *
92
97
  * @returns Option representation of the current state.
93
98
  */
94
- get() {
95
- const option = this.witnessFromState();
99
+ async get() {
100
+ const option = await this.witnessFromState();
96
101
  this.hasPathOrFail();
97
102
  const stateTransition = StateTransition.from(this.path, option);
98
103
  container
@@ -111,9 +116,9 @@ export class State extends Mixin(WithPath, WithStateServiceProvider) {
111
116
  *
112
117
  * @param value - Value to be set as the current state
113
118
  */
114
- set(value) {
119
+ async set(value) {
115
120
  // link the transition to the current state
116
- const fromOption = this.witnessFromState();
121
+ const fromOption = await this.witnessFromState();
117
122
  const toOption = Option.fromValue(value, this.valueType);
118
123
  this.hasPathOrFail();
119
124
  const stateTransition = StateTransition.fromTo(this.path, fromOption, toOption);