@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
@@ -19,7 +19,10 @@ export class ProvableOption extends Struct({
19
19
  }
20
20
 
21
21
  export abstract class OptionBase {
22
- protected constructor(public isSome: Bool, public isForcedSome: Bool) {}
22
+ protected constructor(
23
+ public isSome: Bool,
24
+ public isForcedSome: Bool
25
+ ) {}
23
26
 
24
27
  protected abstract encodeValueToFields(): Field[];
25
28
 
@@ -152,6 +155,7 @@ export class Option<Value> extends OptionBase {
152
155
  }
153
156
 
154
157
  public toConstant() {
158
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
155
159
  const valueConstant = (this.valueType as ProvablePure<Value>).fromFields(
156
160
  this.valueType.toFields(this.value).map((field) => field.toConstant())
157
161
  );
package/src/model/Path.ts CHANGED
@@ -1,6 +1,4 @@
1
- /* eslint-disable @typescript-eslint/no-extraneous-class */
2
- /* eslint-disable @shopify/no-fully-static-classes */
3
- import { Field, type FlexibleProvablePure, Poseidon, Provable } from "o1js";
1
+ import { Field, type FlexibleProvablePure, Poseidon } from "o1js";
4
2
 
5
3
  import { stringToField } from "../utils/utils";
6
4
 
@@ -1,4 +1,4 @@
1
- import { Bool, Field, ProvablePure, Struct } from "o1js";
1
+ import { Field, Struct } from "o1js";
2
2
 
3
3
  import { Option, ProvableOption } from "./Option";
4
4
 
@@ -8,11 +8,13 @@ import {
8
8
  UInt64,
9
9
  } from "o1js";
10
10
 
11
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
11
12
  function argsToHash(...args: FlexibleProvable<any>[]): Field {
12
13
  const fields = args.flatMap((argument) => argument.toFields(argument));
13
14
  return Poseidon.hash(fields);
14
15
  }
15
16
 
17
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
16
18
  class Transaction extends Struct({
17
19
  // must be checked inside @runtimeMethod
18
20
  methodId: Field,
@@ -26,8 +26,8 @@ export class NetworkState extends Struct({
26
26
  height: UInt64.zero,
27
27
  },
28
28
  previous: {
29
- rootHash: Field(RollupMerkleTree.EMPTY_ROOT)
30
- }
29
+ rootHash: Field(RollupMerkleTree.EMPTY_ROOT),
30
+ },
31
31
  });
32
32
  }
33
33
  }
@@ -1,15 +1,8 @@
1
- import {
2
- Bool,
3
- Field,
4
- Poseidon,
5
- Provable,
6
- PublicKey,
7
- Struct,
8
- UInt64,
9
- } from "o1js";
10
- import { PublicKeyOption, UInt64Option } from "./ValueOption";
1
+ import { Bool, Field, Poseidon, PublicKey, Struct, UInt64 } from "o1js";
11
2
  import { EMPTY_PUBLICKEY, EMPTY_PUBLICKEY_X } from "@proto-kit/common";
12
3
 
4
+ import { PublicKeyOption, UInt64Option } from "./ValueOption";
5
+
13
6
  /**
14
7
  * This struct is used to expose transaction information to the runtime method
15
8
  * execution. This class has not all data included in transactions on purpose.
@@ -30,8 +23,8 @@ export class RuntimeTransaction extends Struct({
30
23
  return new RuntimeTransaction({
31
24
  methodId: input.methodId,
32
25
  argsHash: input.argsHash,
33
- nonce: UInt64Option.fromValue(input.nonce),
34
- sender: PublicKeyOption.fromValue(input.sender),
26
+ nonce: UInt64Option.fromSome(input.nonce),
27
+ sender: PublicKeyOption.fromSome(input.sender),
35
28
  });
36
29
  }
37
30
 
@@ -1,11 +1,4 @@
1
- import {
2
- Bool,
3
- Field,
4
- Scalar,
5
- Signature,
6
- Struct,
7
- UInt64,
8
- } from "o1js";
1
+ import { Bool, Field, Scalar, Signature, Struct, UInt64 } from "o1js";
9
2
 
10
3
  import { RuntimeTransaction } from "./RuntimeTransaction";
11
4
 
@@ -5,7 +5,7 @@ function genericOptionFactory<Type>(valueType: ProvableExtended<Type>) {
5
5
  isSome: Bool,
6
6
  value: valueType,
7
7
  }) {
8
- public static fromValue(value: Type) {
8
+ public static fromSome(value: Type) {
9
9
  return new Generic({
10
10
  isSome: Bool(true),
11
11
  value,
@@ -11,23 +11,21 @@ import {
11
11
  import { DependencyContainer, Lifecycle } from "tsyringe";
12
12
 
13
13
  import { BlockProvable } from "../prover/block/BlockProvable";
14
- import { StateTransitionProver } from "../prover/statetransition/StateTransitionProver";
15
14
  import { StateTransitionProvable } from "../prover/statetransition/StateTransitionProvable";
16
- import { BlockProver } from "../prover/block/BlockProver";
17
15
  import { StateServiceProvider } from "../state/StateServiceProvider";
18
- import { StateService } from "../state/StateService";
19
-
20
- import { ProtocolModule } from "./ProtocolModule";
21
- import { ProvableTransactionHook } from "./ProvableTransactionHook";
22
- import { NoopTransactionHook } from "../hooks/NoopTransactionHook";
23
- import { ProtocolEnvironment } from "./ProtocolEnvironment";
24
- import { AccountStateHook } from "../hooks/AccountStateHook";
25
- import { ProvableBlockHook } from "./ProvableBlockHook";
16
+ import { SimpleAsyncStateService } from "../state/StateService";
26
17
  import { NoopBlockHook } from "../hooks/NoopBlockHook";
27
18
  import { BlockHeightHook } from "../hooks/BlockHeightHook";
28
19
  import { LastStateRootBlockHook } from "../hooks/LastStateRootBlockHook";
29
20
  import { ProvableSettlementHook } from "../settlement/modularity/ProvableSettlementHook";
30
21
  import { NoopSettlementHook } from "../hooks/NoopSettlementHook";
22
+ import { AccountStateHook } from "../hooks/AccountStateHook";
23
+ import { NoopTransactionHook } from "../hooks/NoopTransactionHook";
24
+
25
+ import { ProtocolModule } from "./ProtocolModule";
26
+ import { ProvableTransactionHook } from "./ProvableTransactionHook";
27
+ import { ProtocolEnvironment } from "./ProtocolEnvironment";
28
+ import { ProvableBlockHook } from "./ProvableBlockHook";
31
29
 
32
30
  const PROTOCOL_INJECTION_TOKENS: Record<string, string> = {
33
31
  ProvableTransactionHook: "ProvableTransactionHook",
@@ -59,13 +57,13 @@ export interface ProtocolDefinition<Modules extends ProtocolModulesRecord> {
59
57
  }
60
58
 
61
59
  export class Protocol<
62
- Modules extends ProtocolModulesRecord & MandatoryProtocolModulesRecord
60
+ Modules extends ProtocolModulesRecord & MandatoryProtocolModulesRecord,
63
61
  >
64
62
  extends ModuleContainer<Modules>
65
63
  implements ProtocolEnvironment
66
64
  {
67
65
  public static from<
68
- Modules extends ProtocolModulesRecord & MandatoryProtocolModulesRecord
66
+ Modules extends ProtocolModulesRecord & MandatoryProtocolModulesRecord,
69
67
  >(modules: ProtocolDefinition<Modules>): TypedClass<Protocol<Modules>> {
70
68
  return class ScopedProtocol extends Protocol<Modules> {
71
69
  public constructor() {
@@ -81,7 +79,7 @@ export class Protocol<
81
79
  this.definition = definition;
82
80
  }
83
81
 
84
- public get stateService(): StateService {
82
+ public get stateService(): SimpleAsyncStateService {
85
83
  return this.stateServiceProvider.stateService;
86
84
  }
87
85
 
@@ -183,4 +181,17 @@ export class Protocol<
183
181
  }
184
182
  });
185
183
  }
184
+
185
+ public async start() {
186
+ // eslint-disable-next-line guard-for-in
187
+ for (const moduleName in this.definition.modules) {
188
+ const protocolModule = this.resolve(moduleName);
189
+
190
+ log.info(
191
+ `Starting protocol module ${moduleName} (${protocolModule.constructor.name})`
192
+ );
193
+ // eslint-disable-next-line no-await-in-loop
194
+ await protocolModule.start();
195
+ }
196
+ }
186
197
  }
@@ -1,9 +1,10 @@
1
- import { StateService } from "../state/StateService";
2
- import { StateServiceProvider } from "../state/StateServiceProvider";
3
1
  import { AreProofsEnabled } from "@proto-kit/common";
4
2
 
3
+ import { SimpleAsyncStateService } from "../state/StateService";
4
+ import { StateServiceProvider } from "../state/StateServiceProvider";
5
+
5
6
  export interface ProtocolEnvironment {
6
- get stateService(): StateService
7
- get stateServiceProvider(): StateServiceProvider
8
- getAreProofsEnabled(): AreProofsEnabled
9
- }
7
+ get stateService(): SimpleAsyncStateService;
8
+ get stateServiceProvider(): StateServiceProvider;
9
+ getAreProofsEnabled(): AreProofsEnabled;
10
+ }
@@ -9,7 +9,7 @@ import {
9
9
  import { ProtocolEnvironment } from "./ProtocolEnvironment";
10
10
 
11
11
  export abstract class ProtocolModule<
12
- Config = NoConfig
12
+ Config = NoConfig,
13
13
  > extends ConfigurableModule<Config> {
14
14
  public protocol?: ProtocolEnvironment;
15
15
 
@@ -17,8 +17,11 @@ export abstract class ProtocolModule<
17
17
  return this.protocol?.getAreProofsEnabled();
18
18
  }
19
19
 
20
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
21
20
  public create(childContainerProvider: ChildContainerProvider): void {
22
21
  noop();
23
22
  }
23
+
24
+ public async start() {
25
+ noop();
26
+ }
24
27
  }
@@ -5,15 +5,15 @@ import { TransitioningProtocolModule } from "./TransitioningProtocolModule";
5
5
 
6
6
  // Purpose is to build transition from -> to network state
7
7
  export abstract class ProvableBlockHook<
8
- Config
8
+ Config,
9
9
  > extends TransitioningProtocolModule<Config> {
10
10
  public abstract beforeBlock(
11
11
  networkState: NetworkState,
12
12
  state: BlockProverState
13
- ): NetworkState;
13
+ ): Promise<NetworkState>;
14
14
 
15
15
  public abstract afterBlock(
16
16
  networkState: NetworkState,
17
17
  state: BlockProverState
18
- ): NetworkState;
18
+ ): Promise<NetworkState>;
19
19
  }
@@ -5,7 +5,9 @@ import { BlockProverExecutionData } from "../prover/block/BlockProvable";
5
5
  import { TransitioningProtocolModule } from "./TransitioningProtocolModule";
6
6
 
7
7
  export abstract class ProvableTransactionHook<
8
- Config = NoConfig
8
+ Config = NoConfig,
9
9
  > extends TransitioningProtocolModule<Config> {
10
- public abstract onTransaction(executionData: BlockProverExecutionData): void;
10
+ public abstract onTransaction(
11
+ executionData: BlockProverExecutionData
12
+ ): Promise<void>;
11
13
  }
@@ -6,7 +6,7 @@ import { ProtocolModule } from "./ProtocolModule";
6
6
  * of a `name: string` property, which those classes need to function.
7
7
  */
8
8
  export abstract class TransitioningProtocolModule<
9
- Config
9
+ Config,
10
10
  > extends ProtocolModule<Config> {
11
11
  public name?: string;
12
12
  }
@@ -62,7 +62,7 @@ export interface BlockProvable
62
62
  stateProof: StateTransitionProof,
63
63
  appProof: Proof<void, MethodPublicOutput>,
64
64
  executionData: BlockProverExecutionData
65
- ) => BlockProverPublicOutput;
65
+ ) => Promise<BlockProverPublicOutput>;
66
66
 
67
67
  proveBlock: (
68
68
  publicInput: BlockProverPublicInput,
@@ -70,11 +70,11 @@ export interface BlockProvable
70
70
  blockWitness: BlockHashMerkleTreeWitness,
71
71
  stateTransitionProof: StateTransitionProof,
72
72
  transactionProof: BlockProverProof
73
- ) => BlockProverPublicOutput;
73
+ ) => Promise<BlockProverPublicOutput>;
74
74
 
75
75
  merge: (
76
76
  publicInput: BlockProverPublicInput,
77
77
  proof1: BlockProverProof,
78
78
  proof2: BlockProverProof
79
- ) => BlockProverPublicOutput;
79
+ ) => Promise<BlockProverPublicOutput>;
80
80
  }
@@ -1,17 +1,15 @@
1
- /* eslint-disable max-lines */
2
1
  import {
3
2
  Bool,
4
- Experimental,
5
3
  Field,
6
4
  Poseidon,
7
5
  type Proof,
8
6
  Provable,
9
7
  SelfProof,
8
+ ZkProgram,
10
9
  } from "o1js";
11
10
  import { container, inject, injectable, injectAll } from "tsyringe";
12
11
  import {
13
12
  AreProofsEnabled,
14
- hashWithPrefix,
15
13
  PlainZkProgram,
16
14
  provableMethod,
17
15
  WithZkProgrammable,
@@ -123,7 +121,6 @@ export class BlockProverProgrammable extends ZkProgrammable<
123
121
  BlockProverPublicOutput
124
122
  > {
125
123
  public constructor(
126
- // eslint-disable-next-line @typescript-eslint/no-use-before-define
127
124
  private readonly prover: BlockProver,
128
125
  public readonly stateTransitionProver: ZkProgrammable<
129
126
  StateTransitionProverPublicInput,
@@ -150,7 +147,7 @@ export class BlockProverProgrammable extends ZkProgrammable<
150
147
  * @param executionData
151
148
  * @returns The new BlockProver-state to be used as public output
152
149
  */
153
- public applyTransaction(
150
+ public async applyTransaction(
154
151
  state: BlockProverState,
155
152
  stateTransitionProof: Proof<
156
153
  StateTransitionProverPublicInput,
@@ -158,10 +155,10 @@ export class BlockProverProgrammable extends ZkProgrammable<
158
155
  >,
159
156
  runtimeProof: RuntimeProof,
160
157
  executionData: BlockProverExecutionData
161
- ): BlockProverState {
158
+ ): Promise<BlockProverState> {
162
159
  const { transaction, networkState, signature } = executionData;
163
160
 
164
- const isMessage = runtimeProof.publicOutput.isMessage;
161
+ const { isMessage } = runtimeProof.publicOutput;
165
162
 
166
163
  runtimeProof.verify();
167
164
  stateTransitionProof.verify();
@@ -194,7 +191,7 @@ export class BlockProverProgrammable extends ZkProgrammable<
194
191
  );
195
192
 
196
193
  // Apply protocol state transitions
197
- this.assertProtocolTransitions(
194
+ await this.assertProtocolTransitions(
198
195
  stateTransitionProof,
199
196
  executionData,
200
197
  runtimeProof
@@ -240,10 +237,10 @@ export class BlockProverProgrammable extends ZkProgrammable<
240
237
  return stateTo;
241
238
  }
242
239
 
243
- // eslint-disable-next-line no-warning-comments, max-len
240
+ // eslint-disable-next-line max-len
244
241
  // TODO How does this interact with the RuntimeMethodExecutionContext when executing runtimemethods?
245
242
 
246
- public assertProtocolTransitions(
243
+ public async assertProtocolTransitions(
247
244
  stateTransitionProof: Proof<
248
245
  StateTransitionProverPublicInput,
249
246
  StateTransitionProverPublicOutput
@@ -264,9 +261,10 @@ export class BlockProverProgrammable extends ZkProgrammable<
264
261
  });
265
262
  executionContext.beforeMethod("", "", []);
266
263
 
267
- this.transactionHooks.forEach((module) => {
268
- module.onTransaction(executionData);
269
- });
264
+ for (const module of this.transactionHooks) {
265
+ // eslint-disable-next-line no-await-in-loop
266
+ await module.onTransaction(executionData);
267
+ }
270
268
 
271
269
  executionContext.afterMethod();
272
270
 
@@ -294,38 +292,38 @@ export class BlockProverProgrammable extends ZkProgrammable<
294
292
  );
295
293
  }
296
294
 
297
- private executeBlockHooks(
295
+ private async executeBlockHooks(
298
296
  state: BlockProverState,
299
297
  inputNetworkState: NetworkState,
300
298
  type: "afterBlock" | "beforeBlock"
301
- ): {
299
+ ): Promise<{
302
300
  networkState: NetworkState;
303
301
  stateTransitions: StateTransition<unknown>[];
304
- } {
302
+ }> {
305
303
  const executionContext = container.resolve(RuntimeMethodExecutionContext);
306
304
  executionContext.clear();
307
305
  executionContext.beforeMethod("", "", []);
308
306
 
309
- const resultingNetworkState = this.blockHooks.reduce<NetworkState>(
310
- (networkState, blockHook) => {
311
- // Setup context for potential calls to runtime methods.
312
- // With the special case that we set the new networkstate for every hook
313
- // We also have to put in a dummy transaction for network.transaction
314
- executionContext.setup({
315
- transaction: RuntimeTransaction.dummyTransaction(),
316
- networkState,
317
- });
318
-
319
- if (type === "beforeBlock") {
320
- return blockHook.beforeBlock(networkState, state);
321
- } else if (type === "afterBlock") {
322
- return blockHook.afterBlock(networkState, state);
323
- } else {
324
- throw new Error("Unreachable");
325
- }
326
- },
327
- inputNetworkState
328
- );
307
+ const resultingNetworkState = await this.blockHooks.reduce<
308
+ Promise<NetworkState>
309
+ >(async (networkStatePromise, blockHook) => {
310
+ const networkState = await networkStatePromise;
311
+ // Setup context for potential calls to runtime methods.
312
+ // With the special case that we set the new networkstate for every hook
313
+ // We also have to put in a dummy transaction for network.transaction
314
+ executionContext.setup({
315
+ transaction: RuntimeTransaction.dummyTransaction(),
316
+ networkState,
317
+ });
318
+
319
+ if (type === "beforeBlock") {
320
+ return await blockHook.beforeBlock(networkState, state);
321
+ }
322
+ if (type === "afterBlock") {
323
+ return await blockHook.afterBlock(networkState, state);
324
+ }
325
+ throw new Error("Unreachable");
326
+ }, Promise.resolve(inputNetworkState));
329
327
 
330
328
  executionContext.afterMethod();
331
329
 
@@ -361,7 +359,6 @@ export class BlockProverProgrammable extends ZkProgrammable<
361
359
  stateTo.transactionsHash = transactionList.commitment;
362
360
 
363
361
  // Append tx to eternal transaction list
364
- // eslint-disable-next-line no-warning-comments
365
362
  // TODO Change that to the a sequence-state compatible transaction struct
366
363
  const eternalTransactionList = new DefaultProvableHashList(
367
364
  Field,
@@ -385,12 +382,12 @@ export class BlockProverProgrammable extends ZkProgrammable<
385
382
  }
386
383
 
387
384
  @provableMethod()
388
- public proveTransaction(
385
+ public async proveTransaction(
389
386
  publicInput: BlockProverPublicInput,
390
387
  stateProof: StateTransitionProof,
391
388
  runtimeProof: RuntimeProof,
392
389
  executionData: BlockProverExecutionData
393
- ): BlockProverPublicOutput {
390
+ ): Promise<BlockProverPublicOutput> {
394
391
  const state: BlockProverState = {
395
392
  ...publicInput,
396
393
  };
@@ -406,7 +403,7 @@ export class BlockProverProgrammable extends ZkProgrammable<
406
403
  executionData.transaction
407
404
  );
408
405
 
409
- const stateTo = this.applyTransaction(
406
+ const stateTo = await this.applyTransaction(
410
407
  bundleInclusionState,
411
408
  stateProof,
412
409
  runtimeProof,
@@ -441,13 +438,13 @@ export class BlockProverProgrammable extends ZkProgrammable<
441
438
  }
442
439
 
443
440
  @provableMethod()
444
- public proveBlock(
441
+ public async proveBlock(
445
442
  publicInput: BlockProverPublicInput,
446
443
  networkState: NetworkState,
447
444
  blockWitness: BlockHashMerkleTreeWitness,
448
445
  stateTransitionProof: StateTransitionProof,
449
446
  transactionProof: BlockProverProof
450
- ): BlockProverPublicOutput {
447
+ ): Promise<BlockProverPublicOutput> {
451
448
  const state: BlockProverState = {
452
449
  ...publicInput,
453
450
  };
@@ -507,7 +504,7 @@ export class BlockProverProgrammable extends ZkProgrammable<
507
504
  transactionProof.verifyIf(verifyTransactionProof);
508
505
 
509
506
  // 2. Execute beforeBlock hooks
510
- const beforeBlockResult = this.executeBlockHooks(
507
+ const beforeBlockResult = await this.executeBlockHooks(
511
508
  state,
512
509
  networkState,
513
510
  "beforeBlock"
@@ -555,7 +552,7 @@ export class BlockProverProgrammable extends ZkProgrammable<
555
552
  // 5. Execute afterBlock hooks
556
553
  this.assertSTProofInput(stateTransitionProof, state.stateRoot);
557
554
 
558
- const afterBlockResult = this.executeBlockHooks(
555
+ const afterBlockResult = await this.executeBlockHooks(
559
556
  state,
560
557
  beforeBlockResult.networkState,
561
558
  "afterBlock"
@@ -609,11 +606,11 @@ export class BlockProverProgrammable extends ZkProgrammable<
609
606
  }
610
607
 
611
608
  @provableMethod()
612
- public merge(
609
+ public async merge(
613
610
  publicInput: BlockProverPublicInput,
614
611
  proof1: BlockProverProof,
615
612
  proof2: BlockProverProof
616
- ): BlockProverPublicOutput {
613
+ ): Promise<BlockProverPublicOutput> {
617
614
  proof1.verify();
618
615
  proof2.verify();
619
616
 
@@ -755,9 +752,11 @@ export class BlockProverProgrammable extends ZkProgrammable<
755
752
  const RuntimeProofClass = runtime.zkProgram.Proof;
756
753
 
757
754
  const proveTransaction = prover.proveTransaction.bind(prover);
755
+ const proveBlock = prover.proveBlock.bind(prover);
758
756
  const merge = prover.merge.bind(prover);
759
757
 
760
- const program = Experimental.ZkProgram({
758
+ const program = ZkProgram({
759
+ name: "BlockProver",
761
760
  publicInput: BlockProverPublicInput,
762
761
  publicOutput: BlockProverPublicOutput,
763
762
 
@@ -769,13 +768,13 @@ export class BlockProverProgrammable extends ZkProgrammable<
769
768
  BlockProverExecutionData,
770
769
  ],
771
770
 
772
- method(
771
+ async method(
773
772
  publicInput: BlockProverPublicInput,
774
773
  stateProof: StateTransitionProof,
775
774
  appProof: Proof<void, MethodPublicOutput>,
776
775
  executionData: BlockProverExecutionData
777
776
  ) {
778
- return proveTransaction(
777
+ return await proveTransaction(
779
778
  publicInput,
780
779
  stateProof,
781
780
  appProof,
@@ -784,18 +783,42 @@ export class BlockProverProgrammable extends ZkProgrammable<
784
783
  },
785
784
  },
786
785
 
786
+ proveBlock: {
787
+ privateInputs: [
788
+ NetworkState,
789
+ BlockHashMerkleTreeWitness,
790
+ StateTransitionProofClass,
791
+ SelfProof<BlockProverPublicInput, BlockProverPublicOutput>,
792
+ ],
793
+ async method(
794
+ publicInput: BlockProverPublicInput,
795
+ networkState: NetworkState,
796
+ blockWitness: BlockHashMerkleTreeWitness,
797
+ stateTransitionProof: StateTransitionProof,
798
+ transactionProof: BlockProverProof
799
+ ) {
800
+ return await proveBlock(
801
+ publicInput,
802
+ networkState,
803
+ blockWitness,
804
+ stateTransitionProof,
805
+ transactionProof
806
+ );
807
+ },
808
+ },
809
+
787
810
  merge: {
788
811
  privateInputs: [
789
812
  SelfProof<BlockProverPublicInput, BlockProverPublicOutput>,
790
813
  SelfProof<BlockProverPublicInput, BlockProverPublicOutput>,
791
814
  ],
792
815
 
793
- method(
816
+ async method(
794
817
  publicInput: BlockProverPublicInput,
795
818
  proof1: BlockProverProof,
796
819
  proof2: BlockProverProof
797
820
  ) {
798
- return merge(publicInput, proof1, proof2);
821
+ return await merge(publicInput, proof1, proof2);
799
822
  },
800
823
  },
801
824
  },
@@ -806,7 +829,7 @@ export class BlockProverProgrammable extends ZkProgrammable<
806
829
  merge: program.merge,
807
830
  };
808
831
 
809
- const SelfProofClass = Experimental.ZkProgram.Proof(program);
832
+ const SelfProofClass = ZkProgram.Proof(program);
810
833
 
811
834
  return {
812
835
  compile: program.compile.bind(program),
@@ -855,7 +878,7 @@ export class BlockProver extends ProtocolModule implements BlockProvable {
855
878
  stateProof: StateTransitionProof,
856
879
  appProof: Proof<void, MethodPublicOutput>,
857
880
  executionData: BlockProverExecutionData
858
- ): BlockProverPublicOutput {
881
+ ): Promise<BlockProverPublicOutput> {
859
882
  return this.zkProgrammable.proveTransaction(
860
883
  publicInput,
861
884
  stateProof,
@@ -870,7 +893,7 @@ export class BlockProver extends ProtocolModule implements BlockProvable {
870
893
  blockWitness: BlockHashMerkleTreeWitness,
871
894
  stateTransitionProof: StateTransitionProof,
872
895
  transactionProof: BlockProverProof
873
- ): BlockProverPublicOutput {
896
+ ): Promise<BlockProverPublicOutput> {
874
897
  return this.zkProgrammable.proveBlock(
875
898
  publicInput,
876
899
  networkState,
@@ -884,7 +907,7 @@ export class BlockProver extends ProtocolModule implements BlockProvable {
884
907
  publicInput: BlockProverPublicInput,
885
908
  proof1: BlockProverProof,
886
909
  proof2: BlockProverProof
887
- ): BlockProverPublicOutput {
910
+ ): Promise<BlockProverPublicOutput> {
888
911
  return this.zkProgrammable.merge(publicInput, proof1, proof2);
889
912
  }
890
913
  }
@@ -1,5 +1,5 @@
1
1
  import { createMerkleTree } from "@proto-kit/common";
2
- import { Bool, Field, Poseidon, Provable, Struct } from "o1js";
2
+ import { Bool, Field, Poseidon, Struct } from "o1js";
3
3
 
4
4
  export class BlockHashMerkleTree extends createMerkleTree(40) {}
5
5
  export class BlockHashMerkleTreeWitness extends BlockHashMerkleTree.WITNESS {}
@@ -1,5 +1,5 @@
1
1
  import { Field, Proof, Struct } from "o1js";
2
- import { WithZkProgrammable, ZkProgrammable } from "@proto-kit/common";
2
+ import { WithZkProgrammable } from "@proto-kit/common";
3
3
 
4
4
  import { StateTransitionProvableBatch } from "../../model/StateTransitionProvableBatch";
5
5
 
@@ -34,11 +34,11 @@ export interface StateTransitionProvable
34
34
  runBatch: (
35
35
  publicInput: StateTransitionProverPublicInput,
36
36
  batch: StateTransitionProvableBatch
37
- ) => StateTransitionProverPublicOutput;
37
+ ) => Promise<StateTransitionProverPublicOutput>;
38
38
 
39
39
  merge: (
40
40
  publicInput: StateTransitionProverPublicInput,
41
41
  proof1: StateTransitionProof,
42
42
  proof2: StateTransitionProof
43
- ) => StateTransitionProverPublicOutput;
43
+ ) => Promise<StateTransitionProverPublicOutput>;
44
44
  }