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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (285) hide show
  1. package/LICENSE.md +201 -201
  2. package/dist/blockmodules/AccountStateModule.d.ts +37 -37
  3. package/dist/blockmodules/AccountStateModule.js +43 -43
  4. package/dist/blockmodules/BlockHeightHook.d.ts +6 -6
  5. package/dist/blockmodules/BlockHeightHook.js +15 -15
  6. package/dist/blockmodules/LastStateRootBlockHook.d.ts +7 -7
  7. package/dist/blockmodules/LastStateRootBlockHook.js +15 -15
  8. package/dist/blockmodules/NoopBlockHook.d.ts +8 -8
  9. package/dist/blockmodules/NoopBlockHook.js +9 -9
  10. package/dist/blockmodules/NoopSettlementHook.d.ts +5 -5
  11. package/dist/blockmodules/NoopSettlementHook.d.ts.map +1 -1
  12. package/dist/blockmodules/NoopSettlementHook.js +18 -18
  13. package/dist/blockmodules/NoopTransactionHook.d.ts +5 -5
  14. package/dist/blockmodules/NoopTransactionHook.js +4 -4
  15. package/dist/hooks/AccountStateHook.d.ts +19 -5
  16. package/dist/hooks/AccountStateHook.d.ts.map +1 -1
  17. package/dist/hooks/AccountStateHook.js +15 -9
  18. package/dist/hooks/BlockHeightHook.d.ts +3 -3
  19. package/dist/hooks/BlockHeightHook.d.ts.map +1 -1
  20. package/dist/hooks/BlockHeightHook.js +5 -4
  21. package/dist/hooks/LastStateRootBlockHook.d.ts +8 -0
  22. package/dist/hooks/LastStateRootBlockHook.d.ts.map +1 -0
  23. package/dist/hooks/LastStateRootBlockHook.js +15 -0
  24. package/dist/hooks/NoopBlockHook.d.ts +6 -4
  25. package/dist/hooks/NoopBlockHook.d.ts.map +1 -1
  26. package/dist/hooks/NoopBlockHook.js +4 -4
  27. package/dist/hooks/NoopSettlementHook.d.ts +6 -0
  28. package/dist/hooks/NoopSettlementHook.d.ts.map +1 -0
  29. package/dist/hooks/NoopSettlementHook.js +17 -0
  30. package/dist/hooks/NoopTransactionHook.d.ts +1 -1
  31. package/dist/hooks/NoopTransactionHook.d.ts.map +1 -1
  32. package/dist/hooks/NoopTransactionHook.js +4 -1
  33. package/dist/index.d.ts +18 -8
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +18 -8
  36. package/dist/model/MethodPublicOutput.d.ts +68 -34
  37. package/dist/model/MethodPublicOutput.d.ts.map +1 -1
  38. package/dist/model/Option.d.ts +39 -19
  39. package/dist/model/Option.d.ts.map +1 -1
  40. package/dist/model/Option.js +6 -0
  41. package/dist/model/Path.d.ts +1 -1
  42. package/dist/model/Path.d.ts.map +1 -1
  43. package/dist/model/Path.js +0 -2
  44. package/dist/model/RuntimeLike.d.ts +11 -0
  45. package/dist/model/RuntimeLike.d.ts.map +1 -0
  46. package/dist/model/RuntimeLike.js +1 -0
  47. package/dist/model/StateTransition.d.ts +51 -14
  48. package/dist/model/StateTransition.d.ts.map +1 -1
  49. package/dist/model/StateTransition.js +3 -0
  50. package/dist/model/StateTransitionProvableBatch.d.ts +71 -14
  51. package/dist/model/StateTransitionProvableBatch.d.ts.map +1 -1
  52. package/dist/model/StateTransitionReduction.d.ts +3 -0
  53. package/dist/model/StateTransitionReduction.d.ts.map +1 -0
  54. package/dist/model/StateTransitionReduction.js +26 -0
  55. package/dist/model/network/NetworkState.d.ts +73 -18
  56. package/dist/model/network/NetworkState.d.ts.map +1 -1
  57. package/dist/model/network/NetworkState.js +2 -2
  58. package/dist/model/transaction/ProtocolTransaction.d.ts +69 -69
  59. package/dist/model/transaction/ProtocolTransaction.js +18 -18
  60. package/dist/model/transaction/RuntimeTransaction.d.ts +50 -16
  61. package/dist/model/transaction/RuntimeTransaction.d.ts.map +1 -1
  62. package/dist/model/transaction/RuntimeTransaction.js +4 -4
  63. package/dist/model/transaction/SignedTransaction.d.ts +39 -3
  64. package/dist/model/transaction/SignedTransaction.d.ts.map +1 -1
  65. package/dist/model/transaction/SignedTransaction.js +1 -1
  66. package/dist/model/transaction/ValueOption.d.ts +86 -32
  67. package/dist/model/transaction/ValueOption.d.ts.map +1 -1
  68. package/dist/model/transaction/ValueOption.js +1 -1
  69. package/dist/protocol/Protocol.d.ts +14 -20
  70. package/dist/protocol/Protocol.d.ts.map +1 -1
  71. package/dist/protocol/Protocol.js +13 -27
  72. package/dist/protocol/ProtocolEnvironment.d.ts +3 -3
  73. package/dist/protocol/ProtocolEnvironment.d.ts.map +1 -1
  74. package/dist/protocol/ProtocolModule.d.ts +1 -0
  75. package/dist/protocol/ProtocolModule.d.ts.map +1 -1
  76. package/dist/protocol/ProtocolModule.js +4 -2
  77. package/dist/protocol/ProvableBlockHook.d.ts +2 -2
  78. package/dist/protocol/ProvableBlockHook.d.ts.map +1 -1
  79. package/dist/protocol/ProvableTransactionHook.d.ts +1 -1
  80. package/dist/protocol/ProvableTransactionHook.d.ts.map +1 -1
  81. package/dist/prover/block/BlockProvable.d.ts +240 -98
  82. package/dist/prover/block/BlockProvable.d.ts.map +1 -1
  83. package/dist/prover/block/BlockProver.d.ts +8 -8
  84. package/dist/prover/block/BlockProver.d.ts.map +1 -1
  85. package/dist/prover/block/BlockProver.js +55 -45
  86. package/dist/prover/block/BlockTransactionPosition.d.ts +35 -35
  87. package/dist/prover/block/BlockTransactionPosition.js +25 -25
  88. package/dist/prover/block/BundleTransactionPosition.d.ts +36 -0
  89. package/dist/prover/block/BundleTransactionPosition.d.ts.map +1 -0
  90. package/dist/prover/block/BundleTransactionPosition.js +25 -0
  91. package/dist/prover/block/SplitPrefilledStateService.d.ts +11 -0
  92. package/dist/prover/block/SplitPrefilledStateService.d.ts.map +1 -0
  93. package/dist/prover/block/SplitPrefilledStateService.js +1 -0
  94. package/dist/prover/block/SplitStateService.d.ts +11 -0
  95. package/dist/prover/block/SplitStateService.d.ts.map +1 -0
  96. package/dist/prover/block/SplitStateService.js +1 -0
  97. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts +35 -16
  98. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts.map +1 -1
  99. package/dist/prover/block/accummulators/BlockHashMerkleTree.js +1 -1
  100. package/dist/prover/block/acummulators/BlockHashMerkleTree.d.ts +45 -0
  101. package/dist/prover/block/acummulators/BlockHashMerkleTree.d.ts.map +1 -0
  102. package/dist/prover/block/acummulators/BlockHashMerkleTree.js +16 -0
  103. package/dist/prover/statetransition/StateTransitionProvable.d.ts +116 -58
  104. package/dist/prover/statetransition/StateTransitionProvable.d.ts.map +1 -1
  105. package/dist/prover/statetransition/StateTransitionProver.d.ts +10 -9
  106. package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -1
  107. package/dist/prover/statetransition/StateTransitionProver.js +18 -22
  108. package/dist/prover/statetransition/StateTransitionWitnessProvider.js +1 -2
  109. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.js +1 -2
  110. package/dist/settlement/ContractModule.d.ts +15 -0
  111. package/dist/settlement/ContractModule.d.ts.map +1 -0
  112. package/dist/settlement/ContractModule.js +11 -0
  113. package/dist/settlement/DispatchContract.d.ts +20 -0
  114. package/dist/settlement/DispatchContract.d.ts.map +1 -0
  115. package/dist/settlement/DispatchContract.js +112 -0
  116. package/dist/settlement/OutgoingMessageArgument.d.ts +109 -0
  117. package/dist/settlement/OutgoingMessageArgument.d.ts.map +1 -0
  118. package/dist/settlement/OutgoingMessageArgument.js +32 -0
  119. package/dist/settlement/ProvableSettlementHook.d.ts +25 -25
  120. package/dist/settlement/ProvableSettlementHook.js +3 -3
  121. package/dist/settlement/SettlementContract.d.ts +229 -229
  122. package/dist/settlement/SettlementContract.js +346 -346
  123. package/dist/settlement/SettlementContractModule.d.ts +40 -0
  124. package/dist/settlement/SettlementContractModule.d.ts.map +1 -0
  125. package/dist/settlement/SettlementContractModule.js +71 -0
  126. package/dist/settlement/contracts/DispatchContract.d.ts +21 -0
  127. package/dist/settlement/contracts/DispatchContract.d.ts.map +1 -0
  128. package/dist/settlement/contracts/DispatchContract.js +111 -0
  129. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts +12 -0
  130. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts.map +1 -0
  131. package/dist/{hooks/TransactionFeeHook.js → settlement/contracts/DispatchContractProtocolModule.js} +17 -21
  132. package/dist/settlement/contracts/DispatchSmartContract.d.ts +22 -0
  133. package/dist/settlement/contracts/DispatchSmartContract.d.ts.map +1 -0
  134. package/dist/settlement/contracts/DispatchSmartContract.js +110 -0
  135. package/dist/settlement/contracts/SettlementContract.d.ts +19 -0
  136. package/dist/settlement/contracts/SettlementContract.d.ts.map +1 -0
  137. package/dist/settlement/contracts/SettlementContract.js +43 -0
  138. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts +19 -0
  139. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts.map +1 -0
  140. package/dist/settlement/contracts/SettlementContractProtocolModule.js +44 -0
  141. package/dist/settlement/contracts/SettlementSmartContract.d.ts +42 -0
  142. package/dist/settlement/contracts/SettlementSmartContract.d.ts.map +1 -0
  143. package/dist/settlement/contracts/SettlementSmartContract.js +246 -0
  144. package/dist/settlement/messages/Deposit.d.ts +64 -0
  145. package/dist/settlement/messages/Deposit.d.ts.map +1 -0
  146. package/dist/settlement/messages/Deposit.js +6 -0
  147. package/dist/settlement/messages/OutgoingMessageArgument.d.ts +189 -0
  148. package/dist/settlement/messages/OutgoingMessageArgument.d.ts.map +1 -0
  149. package/dist/settlement/messages/OutgoingMessageArgument.js +32 -0
  150. package/dist/settlement/messages/Withdrawal.d.ts +65 -0
  151. package/dist/settlement/messages/Withdrawal.d.ts.map +1 -0
  152. package/dist/settlement/messages/Withdrawal.js +13 -0
  153. package/dist/settlement/modularity/ProvableSettlementHook.d.ts +24 -0
  154. package/dist/settlement/modularity/ProvableSettlementHook.d.ts.map +1 -0
  155. package/dist/settlement/modularity/ProvableSettlementHook.js +3 -0
  156. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts +3 -3
  157. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts.map +1 -1
  158. package/dist/settlement/modules/NetworkStateSettlementModule.js +4 -2
  159. package/dist/state/State.d.ts +4 -3
  160. package/dist/state/State.d.ts.map +1 -1
  161. package/dist/state/State.js +18 -12
  162. package/dist/state/StateMap.d.ts +3 -3
  163. package/dist/state/StateMap.d.ts.map +1 -1
  164. package/dist/state/StateMap.js +4 -5
  165. package/dist/state/StateService.d.ts +3 -3
  166. package/dist/state/StateService.d.ts.map +1 -1
  167. package/dist/state/StateServiceProvider.d.ts +3 -3
  168. package/dist/state/StateServiceProvider.d.ts.map +1 -1
  169. package/dist/state/StateServiceProvider.js +1 -3
  170. package/dist/state/assert/assert.d.ts +1 -1
  171. package/dist/state/assert/assert.d.ts.map +1 -1
  172. package/dist/state/assert/assert.js +11 -5
  173. package/dist/state/context/ProtocolMethodExecutionContext.d.ts +1 -1
  174. package/dist/state/context/ProtocolMethodExecutionContext.d.ts.map +1 -1
  175. package/dist/state/context/ProtocolMethodExecutionContext.js +1 -1
  176. package/dist/state/context/RuntimeMethodExecutionContext.d.ts +55 -4
  177. package/dist/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -1
  178. package/dist/state/context/RuntimeMethodExecutionContext.js +6 -6
  179. package/dist/state/context/TransitionMethodExecutionContext.d.ts.map +1 -1
  180. package/dist/state/context/TransitionMethodExecutionContext.js +0 -1
  181. package/dist/state/context/contextExecution.d.ts +14 -0
  182. package/dist/state/context/contextExecution.d.ts.map +1 -0
  183. package/dist/state/context/contextExecution.js +30 -0
  184. package/dist/state/protocol/ProtocolState.d.ts.map +1 -1
  185. package/dist/state/protocol/ProtocolState.js +0 -3
  186. package/dist/utils/AppliedBatchHashList.d.ts +17 -0
  187. package/dist/utils/AppliedBatchHashList.d.ts.map +1 -0
  188. package/dist/utils/AppliedBatchHashList.js +24 -0
  189. package/dist/utils/MinaPrefixedProvableHashList.d.ts +2 -2
  190. package/dist/utils/MinaPrefixedProvableHashList.d.ts.map +1 -1
  191. package/dist/utils/MinaPrefixedProvableHashList.js +1 -0
  192. package/dist/utils/PrefixedProvableHashList.d.ts +2 -2
  193. package/dist/utils/PrefixedProvableHashList.d.ts.map +1 -1
  194. package/dist/utils/ProvableHashList.d.ts +4 -4
  195. package/dist/utils/ProvableHashList.d.ts.map +1 -1
  196. package/dist/utils/ProvableReductionHashList.d.ts +14 -0
  197. package/dist/utils/ProvableReductionHashList.d.ts.map +1 -0
  198. package/dist/utils/ProvableReductionHashList.js +50 -0
  199. package/dist/utils/StateTransitionReductionList.d.ts +11 -0
  200. package/dist/utils/StateTransitionReductionList.d.ts.map +1 -0
  201. package/dist/utils/StateTransitionReductionList.js +60 -0
  202. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts +11 -0
  203. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.d.ts.map +1 -0
  204. package/dist/utils/merkletree/InMemoryMerkleTreeStorage.js +12 -0
  205. package/dist/utils/merkletree/MerkleTreeStore.d.ts +5 -0
  206. package/dist/utils/merkletree/MerkleTreeStore.d.ts.map +1 -0
  207. package/dist/utils/merkletree/MerkleTreeStore.js +1 -0
  208. package/dist/utils/merkletree/RollupMerkleTree.d.ts +133 -0
  209. package/dist/utils/merkletree/RollupMerkleTree.d.ts.map +1 -0
  210. package/dist/utils/merkletree/RollupMerkleTree.js +255 -0
  211. package/dist/utils/utils.d.ts +1 -1
  212. package/dist/utils/utils.d.ts.map +1 -1
  213. package/dist/utils/utils.js +5 -10
  214. package/package.json +5 -5
  215. package/src/{blockmodules/AccountStateModule.ts → hooks/AccountStateHook.ts} +13 -9
  216. package/src/{blockmodules → hooks}/BlockHeightHook.ts +3 -4
  217. package/src/{blockmodules → hooks}/LastStateRootBlockHook.ts +4 -4
  218. package/src/{blockmodules → hooks}/NoopBlockHook.ts +6 -5
  219. package/src/{blockmodules → hooks}/NoopSettlementHook.ts +3 -4
  220. package/src/{blockmodules → hooks}/NoopTransactionHook.ts +5 -1
  221. package/src/index.ts +18 -8
  222. package/src/model/MethodPublicOutput.ts +2 -2
  223. package/src/model/Option.ts +21 -1
  224. package/src/model/Path.ts +1 -3
  225. package/src/model/RuntimeLike.ts +12 -0
  226. package/src/model/StateTransition.ts +9 -1
  227. package/src/model/Transaction.ts +2 -0
  228. package/src/model/network/NetworkState.ts +2 -2
  229. package/src/model/transaction/RuntimeTransaction.ts +5 -12
  230. package/src/model/transaction/SignedTransaction.ts +1 -8
  231. package/src/model/transaction/ValueOption.ts +1 -1
  232. package/src/protocol/Protocol.ts +34 -48
  233. package/src/protocol/ProtocolEnvironment.ts +7 -6
  234. package/src/protocol/ProtocolModule.ts +8 -4
  235. package/src/protocol/ProvableBlockHook.ts +3 -3
  236. package/src/protocol/ProvableTransactionHook.ts +4 -2
  237. package/src/protocol/TransitioningProtocolModule.ts +1 -1
  238. package/src/prover/block/BlockProvable.ts +3 -3
  239. package/src/prover/block/BlockProver.ts +98 -63
  240. package/src/prover/block/accummulators/BlockHashMerkleTree.ts +2 -2
  241. package/src/prover/statetransition/StateTransitionProvable.ts +3 -3
  242. package/src/prover/statetransition/StateTransitionProver.ts +26 -28
  243. package/src/settlement/ContractModule.ts +24 -0
  244. package/src/settlement/SettlementContractModule.ts +132 -0
  245. package/src/settlement/contracts/DispatchContractProtocolModule.ts +39 -0
  246. package/src/settlement/contracts/DispatchSmartContract.ts +136 -0
  247. package/src/settlement/contracts/SettlementContractProtocolModule.ts +67 -0
  248. package/src/settlement/contracts/SettlementSmartContract.ts +350 -0
  249. package/src/settlement/messages/Deposit.ts +6 -0
  250. package/src/settlement/messages/OutgoingMessageArgument.ts +42 -0
  251. package/src/settlement/messages/Withdrawal.ts +14 -0
  252. package/src/settlement/{ProvableSettlementHook.ts → modularity/ProvableSettlementHook.ts} +9 -13
  253. package/src/settlement/modules/NetworkStateSettlementModule.ts +8 -5
  254. package/src/state/State.ts +21 -13
  255. package/src/state/StateMap.ts +4 -5
  256. package/src/state/StateService.ts +3 -3
  257. package/src/state/StateServiceProvider.ts +6 -7
  258. package/src/state/assert/assert.ts +13 -7
  259. package/src/state/context/RuntimeMethodExecutionContext.ts +13 -7
  260. package/src/state/context/TransitionMethodExecutionContext.ts +0 -1
  261. package/src/state/protocol/ProtocolState.ts +1 -4
  262. package/src/utils/MinaPrefixedProvableHashList.ts +4 -3
  263. package/src/utils/PrefixedProvableHashList.ts +2 -2
  264. package/src/utils/ProvableHashList.ts +2 -2
  265. package/src/utils/ProvableReductionHashList.ts +68 -0
  266. package/src/utils/StateTransitionReductionList.ts +89 -0
  267. package/src/utils/utils.ts +4 -9
  268. package/test/BlockProver.test.ts +110 -128
  269. package/test/Protocol.test.ts +14 -21
  270. package/test/State.test.ts +8 -8
  271. package/test/StateTransition.test.ts +56 -66
  272. package/test/TestingProtocol.ts +48 -0
  273. package/test/model/Option.test.ts +72 -0
  274. package/{src → test}/state/assert/assert.test.ts +4 -4
  275. package/test/tsconfig.json +7 -0
  276. package/test/utils/ProvableReductionHashList.test.ts +117 -0
  277. package/test/utils.test.ts +0 -3
  278. package/dist/hooks/TransactionFeeHook.d.ts +0 -16
  279. package/dist/hooks/TransactionFeeHook.d.ts.map +0 -1
  280. package/src/blockmodules/SequenceStateTransactionModule.ts +0 -25
  281. package/src/model/Option.test.ts +0 -21
  282. package/src/settlement/SettlementContract.ts +0 -444
  283. package/src/state/context/ProtocolMethodExecutionContext.ts +0 -36
  284. package/test/Option.test.ts +0 -64
  285. package/tsconfig.test.json +0 -9
@@ -44,7 +44,7 @@ export class StateTransition<Value> {
44
44
 
45
45
  public constructor(
46
46
  public path: Field,
47
- public fromValue: Option<Field> | Option<Value>,
47
+ public fromValue: Option<Value>,
48
48
  public toValue: Option<Field> | Option<Value>
49
49
  ) {}
50
50
 
@@ -77,4 +77,12 @@ export class StateTransition<Value> {
77
77
  to: this.toValue.toJSON(),
78
78
  };
79
79
  }
80
+
81
+ public toConstant(): StateTransition<Value> {
82
+ return new StateTransition<Value>(
83
+ this.path.toConstant(),
84
+ this.fromValue.toConstant(),
85
+ this.toValue.toConstant()
86
+ );
87
+ }
80
88
  }
@@ -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";
16
+ import { SimpleAsyncStateService } from "../state/StateService";
17
+ import { NoopBlockHook } from "../hooks/NoopBlockHook";
18
+ import { BlockHeightHook } from "../hooks/BlockHeightHook";
19
+ import { LastStateRootBlockHook } from "../hooks/LastStateRootBlockHook";
20
+ import { ProvableSettlementHook } from "../settlement/modularity/ProvableSettlementHook";
21
+ import { NoopSettlementHook } from "../hooks/NoopSettlementHook";
22
+ import { AccountStateHook } from "../hooks/AccountStateHook";
23
+ import { NoopTransactionHook } from "../hooks/NoopTransactionHook";
19
24
 
20
25
  import { ProtocolModule } from "./ProtocolModule";
21
26
  import { ProvableTransactionHook } from "./ProvableTransactionHook";
22
- import { NoopTransactionHook } from "../blockmodules/NoopTransactionHook";
23
27
  import { ProtocolEnvironment } from "./ProtocolEnvironment";
24
- import { AccountStateModule } from "../blockmodules/AccountStateModule";
25
28
  import { ProvableBlockHook } from "./ProvableBlockHook";
26
- import { NoopBlockHook } from "../blockmodules/NoopBlockHook";
27
- import { BlockHeightHook } from "../blockmodules/BlockHeightHook";
28
- import { LastStateRootBlockHook } from "../blockmodules/LastStateRootBlockHook";
29
- import { ProvableSettlementHook } from "../settlement/ProvableSettlementHook";
30
- import { NoopSettlementHook } from "../blockmodules/NoopSettlementHook";
31
29
 
32
30
  const PROTOCOL_INJECTION_TOKENS: Record<string, string> = {
33
31
  ProvableTransactionHook: "ProvableTransactionHook",
@@ -35,42 +33,38 @@ const PROTOCOL_INJECTION_TOKENS: Record<string, string> = {
35
33
  ProvableSettlementHook: "ProvableSettlementHook",
36
34
  };
37
35
 
38
- export type GenericProtocolModuleRecord = ModulesRecord<
36
+ export type ProtocolModulesRecord = ModulesRecord<
39
37
  TypedClass<ProtocolModule<unknown>>
40
38
  >;
41
39
 
42
- interface BlockProverType extends ProtocolModule, BlockProvable {}
40
+ export interface BlockProverType extends ProtocolModule, BlockProvable {}
43
41
 
44
- interface StateTransitionProverType
42
+ export interface StateTransitionProverType
45
43
  extends ProtocolModule,
46
44
  StateTransitionProvable {}
47
45
 
48
- export interface ProtocolCustomModulesRecord
49
- extends GenericProtocolModuleRecord {
46
+ export type MandatoryProtocolModulesRecord = {
50
47
  BlockProver: TypedClass<BlockProverType>;
51
48
  StateTransitionProver: TypedClass<StateTransitionProverType>;
52
- AccountState: TypedClass<AccountStateModule>;
49
+ AccountState: TypedClass<AccountStateHook>;
53
50
  BlockHeight: TypedClass<BlockHeightHook>;
54
51
  LastStateRoot: TypedClass<LastStateRootBlockHook>;
55
- }
56
-
57
- export interface ProtocolModulesRecord
58
- extends GenericProtocolModuleRecord,
59
- ProtocolCustomModulesRecord {}
52
+ };
60
53
 
61
54
  export interface ProtocolDefinition<Modules extends ProtocolModulesRecord> {
62
55
  modules: Modules;
63
56
  config?: ModulesConfig<Modules>;
64
57
  }
65
58
 
66
- export class Protocol<Modules extends ProtocolModulesRecord>
59
+ export class Protocol<
60
+ Modules extends ProtocolModulesRecord & MandatoryProtocolModulesRecord,
61
+ >
67
62
  extends ModuleContainer<Modules>
68
63
  implements ProtocolEnvironment
69
64
  {
70
- // .from() to create Protocol
71
- public static from<Modules extends ProtocolModulesRecord>(
72
- modules: ProtocolDefinition<Modules>
73
- ): TypedClass<Protocol<Modules>> {
65
+ public static from<
66
+ Modules extends ProtocolModulesRecord & MandatoryProtocolModulesRecord,
67
+ >(modules: ProtocolDefinition<Modules>): TypedClass<Protocol<Modules>> {
74
68
  return class ScopedProtocol extends Protocol<Modules> {
75
69
  public constructor() {
76
70
  super(modules);
@@ -85,7 +79,7 @@ export class Protocol<Modules extends ProtocolModulesRecord>
85
79
  this.definition = definition;
86
80
  }
87
81
 
88
- public get stateService(): StateService {
82
+ public get stateService(): SimpleAsyncStateService {
89
83
  return this.stateServiceProvider.stateService;
90
84
  }
91
85
 
@@ -187,25 +181,17 @@ export class Protocol<Modules extends ProtocolModulesRecord>
187
181
  }
188
182
  });
189
183
  }
190
- }
191
184
 
192
- export const VanillaProtocol = {
193
- create() {
194
- return VanillaProtocol.from({});
195
- },
196
-
197
- from<AdditonalModules extends GenericProtocolModuleRecord>(
198
- additionalModules: AdditonalModules
199
- ): TypedClass<Protocol<ProtocolCustomModulesRecord & AdditonalModules>> {
200
- return Protocol.from<ProtocolCustomModulesRecord & AdditonalModules>({
201
- modules: {
202
- StateTransitionProver,
203
- BlockProver,
204
- AccountState: AccountStateModule,
205
- BlockHeight: BlockHeightHook,
206
- LastStateRoot: LastStateRootBlockHook,
207
- ...additionalModules,
208
- },
209
- });
210
- },
211
- };
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
+ }
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
+ }
@@ -1,14 +1,15 @@
1
1
  import {
2
2
  AreProofsEnabled,
3
3
  ChildContainerProvider,
4
- ConfigurableModule, NoConfig,
5
- noop
4
+ ConfigurableModule,
5
+ NoConfig,
6
+ noop,
6
7
  } from "@proto-kit/common";
7
8
 
8
9
  import { ProtocolEnvironment } from "./ProtocolEnvironment";
9
10
 
10
11
  export abstract class ProtocolModule<
11
- Config = NoConfig
12
+ Config = NoConfig,
12
13
  > extends ConfigurableModule<Config> {
13
14
  public protocol?: ProtocolEnvironment;
14
15
 
@@ -16,8 +17,11 @@ export abstract class ProtocolModule<
16
17
  return this.protocol?.getAreProofsEnabled();
17
18
  }
18
19
 
19
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
20
20
  public create(childContainerProvider: ChildContainerProvider): void {
21
21
  noop();
22
22
  }
23
+
24
+ public async start() {
25
+ noop();
26
+ }
23
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
  }