@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
@@ -9,7 +9,6 @@ import { State, WithStateServiceProvider, WithPath } from "./State";
9
9
  /**
10
10
  * Map-like wrapper for state
11
11
  */
12
- // eslint-disable-next-line new-cap
13
12
  export class StateMap<KeyType, ValueType> extends Mixin(
14
13
  WithPath,
15
14
  WithStateServiceProvider
@@ -46,14 +45,14 @@ export class StateMap<KeyType, ValueType> extends Mixin(
46
45
  * @param key - Key to obtain the state for
47
46
  * @returns Value for the provided key.
48
47
  */
49
- public get(key: KeyType): Option<ValueType> {
48
+ public async get(key: KeyType): Promise<Option<ValueType>> {
50
49
  const state = State.from(this.valueType);
51
50
  this.hasPathOrFail();
52
51
  this.hasStateServiceOrFail();
53
52
 
54
53
  state.path = this.getPath(key);
55
54
  state.stateServiceProvider = this.stateServiceProvider;
56
- return state.get();
55
+ return await state.get();
57
56
  }
58
57
 
59
58
  /**
@@ -62,13 +61,13 @@ export class StateMap<KeyType, ValueType> extends Mixin(
62
61
  * @param key - Key to store the value under
63
62
  * @param value - Value to be stored under the given key
64
63
  */
65
- public set(key: KeyType, value: ValueType): void {
64
+ public async set(key: KeyType, value: ValueType): Promise<void> {
66
65
  const state = State.from(this.valueType);
67
66
  this.hasPathOrFail();
68
67
  this.hasStateServiceOrFail();
69
68
 
70
69
  state.path = Path.fromKey(this.path, this.keyType, key);
71
70
  state.stateServiceProvider = this.stateServiceProvider;
72
- state.set(value);
71
+ return await state.set(value);
73
72
  }
74
73
  }
@@ -1,6 +1,6 @@
1
1
  import { Field } from "o1js";
2
2
 
3
- export interface StateService {
4
- get: (key: Field) => Field[] | undefined;
5
- set: (key: Field, value: Field[] | undefined) => void;
3
+ export interface SimpleAsyncStateService {
4
+ get: (key: Field) => Promise<Field[] | undefined>;
5
+ set: (key: Field, value: Field[] | undefined) => Promise<void>;
6
6
  }
@@ -1,8 +1,8 @@
1
- import { inject, injectable } from "tsyringe";
2
-
3
- import { StateService } from "./StateService";
1
+ import { injectable } from "tsyringe";
4
2
  import { log } from "@proto-kit/common";
5
3
 
4
+ import { SimpleAsyncStateService } from "./StateService";
5
+
6
6
  const errors = {
7
7
  stateServiceNotSet: () =>
8
8
  new Error(
@@ -12,19 +12,18 @@ const errors = {
12
12
 
13
13
  @injectable()
14
14
  export class StateServiceProvider {
15
- private readonly stateServiceStack: StateService[] = [];
15
+ private readonly stateServiceStack: SimpleAsyncStateService[] = [];
16
16
 
17
- public get stateService(): StateService {
17
+ public get stateService(): SimpleAsyncStateService {
18
18
  if (this.stateServiceStack.length === 0) {
19
19
  throw errors.stateServiceNotSet();
20
20
  }
21
21
 
22
22
  // Assertion here is ok, because we check that the array is not empty above
23
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
24
23
  return this.stateServiceStack.at(-1)!;
25
24
  }
26
25
 
27
- public setCurrentStateService(service: StateService) {
26
+ public setCurrentStateService(service: SimpleAsyncStateService) {
28
27
  this.stateServiceStack.push(service);
29
28
  }
30
29
 
@@ -13,7 +13,7 @@ import { RuntimeMethodExecutionContext } from "../context/RuntimeMethodExecution
13
13
  * @param condition - Result of the assertion made about the execution status
14
14
  * @param message - Optional message describing the prior status
15
15
  */
16
- export function assert(condition: Bool, message?: string) {
16
+ export function assert(condition: Bool, message?: string | (() => string)) {
17
17
  const executionContext = container.resolve(RuntimeMethodExecutionContext);
18
18
  const previousStatus = executionContext.current().result.status;
19
19
  const status = condition.and(previousStatus);
@@ -23,7 +23,11 @@ export function assert(condition: Bool, message?: string) {
23
23
  if (!executionContext.current().isSimulated) {
24
24
  log.debug("Assertion failed: ", message);
25
25
  }
26
- executionContext.setStatusMessage(message);
26
+ const messageString =
27
+ message !== undefined && typeof message === "function"
28
+ ? message()
29
+ : message;
30
+ executionContext.setStatusMessage(messageString, new Error().stack);
27
31
  }
28
32
  });
29
33
 
@@ -4,6 +4,7 @@ import {
4
4
  ProvableMethodExecutionContext,
5
5
  ProvableMethodExecutionResult,
6
6
  } from "@proto-kit/common";
7
+
7
8
  import { StateTransition } from "../../model/StateTransition";
8
9
  import { RuntimeTransaction } from "../../model/transaction/RuntimeTransaction";
9
10
  import { NetworkState } from "../../model/network/NetworkState";
@@ -16,12 +17,13 @@ const errors = {
16
17
  };
17
18
 
18
19
  export class RuntimeProvableMethodExecutionResult extends ProvableMethodExecutionResult {
19
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
20
  public stateTransitions: StateTransition<any>[] = [];
21
21
 
22
22
  public status: Bool = Bool(true);
23
23
 
24
24
  public statusMessage?: string;
25
+
26
+ public stackTrace?: string;
25
27
  }
26
28
 
27
29
  export interface RuntimeMethodExecutionData {
@@ -74,12 +76,13 @@ export class RuntimeMethodExecutionContext extends ProvableMethodExecutionContex
74
76
  /**
75
77
  * @param message - Status message to acompany the current status
76
78
  */
77
- public setStatusMessage(message?: string) {
79
+ public setStatusMessage(message?: string, stackTrace?: string) {
78
80
  this.assertSetupCalled();
79
81
  if (this.isSimulated) {
80
82
  return;
81
83
  }
82
84
  this.result.statusMessage ??= message;
85
+ this.result.stackTrace ??= stackTrace;
83
86
  }
84
87
 
85
88
  /**
@@ -1,7 +1,6 @@
1
1
  import { StateTransition } from "../../model/StateTransition";
2
2
 
3
3
  export class TransitionMethodExecutionResult {
4
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
5
4
  public stateTransitions: StateTransition<any>[] = [];
6
5
  }
7
6
 
@@ -22,19 +22,17 @@ const errors = {
22
22
  */
23
23
  export function protocolState() {
24
24
  return <
25
- TargetTransitioningModule extends TransitioningProtocolModule<unknown>
25
+ TargetTransitioningModule extends TransitioningProtocolModule<unknown>,
26
26
  >(
27
27
  target: TargetTransitioningModule,
28
28
  propertyKey: string
29
29
  ) => {
30
- // eslint-disable-next-line @typescript-eslint/init-declarations
31
30
  let value: State<unknown> | undefined;
32
31
 
33
32
  Object.defineProperty(target, propertyKey, {
34
33
  enumerable: true,
35
34
 
36
35
  get: function get() {
37
- // eslint-disable-next-line max-len
38
36
  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
39
37
  const self = this as TargetTransitioningModule;
40
38
 
@@ -46,7 +44,6 @@ export function protocolState() {
46
44
  throw errors.missingProtocol(self.constructor.name);
47
45
  }
48
46
 
49
- // eslint-disable-next-line no-warning-comments
50
47
  // TODO Add Prefix?
51
48
  const path = Path.fromProperty(self.name, propertyKey);
52
49
  if (value) {
@@ -4,6 +4,7 @@ import { hashWithPrefix, prefixToField } from "@proto-kit/common";
4
4
  import { ProvableHashList } from "./ProvableHashList";
5
5
 
6
6
  function salt(prefix: string) {
7
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
7
8
  return Poseidon.update(
8
9
  [Field(0), Field(0), Field(0)],
9
10
  [prefixToField(prefix)]
@@ -48,7 +49,7 @@ export class MinaEvents {
48
49
  }
49
50
 
50
51
  export class MinaPrefixedProvableHashList<
51
- Value
52
+ Value,
52
53
  > extends ProvableHashList<Value> {
53
54
  public constructor(
54
55
  valueType: ProvablePure<Value>,
@@ -47,4 +47,4 @@ export class DefaultProvableHashList<Value> extends ProvableHashList<Value> {
47
47
  public hash(elements: Field[]): Field {
48
48
  return Poseidon.hash(elements);
49
49
  }
50
- }
50
+ }
@@ -1,4 +1,5 @@
1
1
  import { Provable } from "o1js";
2
+
2
3
  import { ProvableOption } from "../model/Option";
3
4
  import {
4
5
  ProvableStateTransition,
@@ -62,10 +63,10 @@ export function reduceStateTransitions(
62
63
  ): StateTransition<unknown>[] {
63
64
  const reduced: StateTransition<unknown>[] = [];
64
65
 
65
- for (const st of transitions) {
66
+ transitions.forEach((st) => {
66
67
  if (reduced.length === 0) {
67
68
  reduced.push(st);
68
- continue;
69
+ return;
69
70
  }
70
71
 
71
72
  const last = reduced.at(-1)!;
@@ -83,6 +84,6 @@ export function reduceStateTransitions(
83
84
  } else {
84
85
  reduced.push(st);
85
86
  }
86
- }
87
+ });
87
88
  return reduced;
88
89
  }
@@ -1,6 +1,3 @@
1
- // eslint-disable-next-line max-len
2
- /* eslint-disable @typescript-eslint/no-explicit-any,@typescript-eslint/ban-types, @typescript-eslint/no-unsafe-return */
3
-
4
1
  import { Field, Poseidon, Provable } from "o1js";
5
2
  import floor from "lodash/floor";
6
3
 
@@ -30,8 +27,6 @@ export function notInCircuit(): MethodDecorator {
30
27
  `Method ${propertyKey.toString()} is supposed to be only called outside of the circuit`
31
28
  );
32
29
  }
33
- // eslint-disable-next-line max-len
34
- // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
35
30
  return childFunction.apply(this, args);
36
31
  };
37
32
  return descriptor;
@@ -39,7 +34,7 @@ export function notInCircuit(): MethodDecorator {
39
34
  }
40
35
 
41
36
  export function stringToField(value: string) {
42
- const fieldSize = Field.sizeInBytes() - 1;
37
+ const fieldSize = Field.sizeInBytes - 1;
43
38
 
44
39
  // Encode string as byte[]
45
40
  const encoder = new TextEncoder();
@@ -59,7 +54,6 @@ export function stringToField(value: string) {
59
54
  return a;
60
55
  },
61
56
 
62
- // eslint-disable-next-line array-func/from-map
63
57
  Array.from<number[]>({ length: floor(data.length / fieldSize) }).map(
64
58
  () => []
65
59
  )
@@ -73,8 +67,9 @@ export function stringToField(value: string) {
73
67
  }
74
68
 
75
69
  export function singleFieldToString(value: Field | bigint): string {
70
+ let fieldValue = value;
76
71
  if (typeof value === "bigint") {
77
- value = Field(value);
72
+ fieldValue = Field(value);
78
73
  }
79
- return value.toString();
74
+ return fieldValue.toString();
80
75
  }
@@ -1,41 +1,25 @@
1
- import "reflect-metadata";
2
- import { Bool, Experimental, Field, PrivateKey, Proof, UInt64 } from "o1js";
3
-
4
- import {
5
- BlockProver,
6
- type BlockProverState,
7
- } from "../src/prover/block/BlockProver";
8
- import { NoOpStateTransitionWitnessProvider } from "../src/prover/statetransition/StateTransitionWitnessProvider";
9
- import {
10
- StateTransitionProverPublicInput,
11
- StateTransitionProverPublicOutput,
12
- } from "../src/prover/statetransition/StateTransitionProvable";
13
- import { BlockProverPublicInput } from "../src/prover/block/BlockProvable";
1
+ /* eslint-disable @typescript-eslint/no-unused-vars */
14
2
  import {
15
3
  AreProofsEnabled,
16
4
  PlainZkProgram,
17
- WithZkProgrammable,
18
5
  ZkProgrammable,
19
6
  } from "@proto-kit/common";
20
- import ZkProgram = Experimental.ZkProgram;
21
- import { UnsignedTransaction } from "@proto-kit/sequencer";
22
- import { AccountStateHook } from "../src/blockmodules/AccountStateHook";
23
- import { container } from "tsyringe";
7
+ import { Bool, Field, Proof, UInt64, ZkProgram } from "o1js";
8
+ import "reflect-metadata";
9
+
24
10
  import {
25
- DefaultProvableHashList,
26
11
  MethodPublicOutput,
27
12
  NetworkState,
28
- Protocol,
29
- ProtocolMethodExecutionContext,
30
13
  SignedTransaction,
31
- ProvableStateTransition,
32
- RuntimeTransaction,
33
- StateTransitionProver,
14
+ StateTransitionProverPublicInput,
15
+ StateTransitionProverPublicOutput,
34
16
  } from "../src";
35
17
 
18
+ import { createAndInitTestingProtocol } from "./TestingProtocol";
19
+
36
20
  type BlockProverProofPair = [
37
21
  Proof<void, MethodPublicOutput>,
38
- Proof<StateTransitionProverPublicInput, StateTransitionProverPublicOutput>
22
+ Proof<StateTransitionProverPublicInput, StateTransitionProverPublicOutput>,
39
23
  ];
40
24
 
41
25
  class MockAppChain implements AreProofsEnabled {
@@ -55,56 +39,44 @@ class RuntimeZkProgrammable extends ZkProgrammable<
55
39
  }
56
40
 
57
41
  zkProgramFactory(): PlainZkProgram<undefined, MethodPublicOutput> {
58
- const program = Experimental.ZkProgram({
42
+ const program = ZkProgram({
43
+ name: "BlockProverTestProgram",
59
44
  publicOutput: MethodPublicOutput,
60
45
  methods: {},
61
46
  });
62
47
 
63
48
  return {
64
- compile: program.compile,
65
- verify: program.verify,
49
+ compile: program.compile.bind(program),
50
+ verify: program.verify.bind(program),
51
+ analyzeMethods: program.analyzeMethods.bind(program),
66
52
  methods: {},
67
53
  Proof: ZkProgram.Proof(program),
68
54
  };
69
55
  }
70
56
  }
71
57
 
72
- class RuntimeMock implements WithZkProgrammable<undefined, MethodPublicOutput> {
73
- zkProgrammable: ZkProgrammable<undefined, MethodPublicOutput> =
74
- new RuntimeZkProgrammable();
75
- }
76
-
77
58
  describe("blockProver", () => {
78
59
  const networkState = new NetworkState({
79
60
  block: {
80
61
  height: UInt64.zero,
81
62
  },
82
- });
83
-
84
- const protocol = Protocol.from({
85
- modules: {
86
- StateTransitionProver: StateTransitionProver,
87
- BlockProver: BlockProver,
63
+ previous: {
64
+ rootHash: Field(0),
88
65
  },
89
- blockModules: [AccountStateHook],
90
66
  });
91
67
 
92
- beforeEach(() => {
93
- protocol.registerValue({
94
- StateTransitionWitnessProvider: new NoOpStateTransitionWitnessProvider(),
95
- Runtime: new RuntimeMock(),
96
- });
97
- });
68
+ const protocol = createAndInitTestingProtocol();
98
69
 
99
70
  function generateTestProofs(
100
71
  fromStateRoot: Field,
101
72
  toStateRoot: Field,
73
+ toProtocolRoot: Field,
102
74
  protocolHash: Field,
103
75
  tx: SignedTransaction,
76
+ // eslint-disable-next-line @typescript-eslint/no-shadow
104
77
  networkState: NetworkState
105
78
  ): BlockProverProofPair {
106
- const transactionHash =
107
- RuntimeTransaction.fromProtocolTransaction(tx).hash();
79
+ const transactionHash = tx.transaction.hash();
108
80
  const sthash = Field(123);
109
81
 
110
82
  const appProof = new Proof<undefined, MethodPublicOutput>({
@@ -114,6 +86,7 @@ describe("blockProver", () => {
114
86
  stateTransitionsHash: sthash,
115
87
  status: Bool(true),
116
88
  networkStateHash: networkState.hash(),
89
+ isMessage: Bool(false),
117
90
  }),
118
91
 
119
92
  proof: "",
@@ -128,11 +101,13 @@ describe("blockProver", () => {
128
101
  stateTransitionsHash: Field(0),
129
102
  protocolTransitionsHash: Field(0),
130
103
  stateRoot: fromStateRoot,
104
+ protocolStateRoot: fromStateRoot,
131
105
  }),
132
106
  publicOutput: new StateTransitionProverPublicOutput({
133
107
  stateTransitionsHash: sthash,
134
108
  protocolTransitionsHash: protocolHash,
135
109
  stateRoot: toStateRoot,
110
+ protocolStateRoot: toProtocolRoot,
136
111
  }),
137
112
 
138
113
  proof: "",
@@ -142,85 +117,92 @@ describe("blockProver", () => {
142
117
  return [appProof, stProof];
143
118
  }
144
119
 
145
- it("previously applied transaction should also pass with derived publicInputs", () => {
146
- expect.assertions(2);
147
-
148
- const priv = PrivateKey.random();
149
-
150
- const tx = new UnsignedTransaction({
151
- methodId: Field(0),
152
- args: [Field(0)],
153
- nonce: UInt64.zero,
154
- sender: priv.toPublicKey(),
155
- })
156
- .sign(priv)
157
- .toProtocolTransaction();
158
-
159
- const executionData = {
160
- networkState,
161
- transaction: tx,
162
- };
163
-
164
- // const asmodule = protocol.resolve()
165
-
166
- protocol.dependencyContainer
167
- .resolveAll<BlockModule>("BlockModule")
168
- .forEach((module) => {
169
- module.createTransitions(executionData);
170
- });
171
-
172
- const hashList = new DefaultProvableHashList(ProvableStateTransition);
173
-
174
- container
175
- .resolve(ProtocolMethodExecutionContext)
176
- .current()
177
- .result.stateTransitions.map((x) => x.toProvable())
178
- .forEach((st) => {
179
- hashList.push(st);
180
- });
181
-
182
- const blockProver = protocol.resolve("BlockProver");
183
-
184
- const fromState = Field(1);
185
- const toState = Field(2);
186
-
187
- const [appProof, stProof] = generateTestProofs(
188
- fromState,
189
- toState,
190
- hashList.commitment,
191
- tx,
192
- networkState
193
- );
194
-
195
- const fromProverState: BlockProverState = {
196
- stateRoot: fromState,
197
- transactionsHash: Field(0),
198
- networkStateHash: networkState.hash(),
199
- };
200
-
201
- const toProverState = blockProver.applyTransaction(
202
- fromProverState,
203
- stProof,
204
- appProof,
205
- executionData
206
- );
207
-
208
- const publicInput = new BlockProverPublicInput({
209
- stateRoot: fromProverState.stateRoot,
210
- transactionsHash: fromProverState.transactionsHash,
211
- networkStateHash: networkState.hash(),
212
- });
213
-
214
- const publicOutput = blockProver.proveTransaction(
215
- publicInput,
216
- stProof,
217
- appProof,
218
- { networkState, transaction: tx }
219
- );
220
-
221
- expect(publicOutput.stateRoot).toStrictEqual(toProverState.stateRoot);
222
- expect(publicOutput.transactionsHash).toStrictEqual(
223
- toProverState.transactionsHash
224
- );
120
+ it("dummy", () => {
121
+ expect(1).toBe(1);
225
122
  });
123
+
124
+ // TODO
125
+ // it("previously applied transaction should also pass with derived publicInputs", () => {
126
+ // expect.assertions(2);
127
+ //
128
+ // const priv = PrivateKey.random();
129
+ //
130
+ // const tx = new UnsignedTransaction({
131
+ // methodId: Field(0),
132
+ // args: [Field(0)],
133
+ // nonce: UInt64.zero,
134
+ // sender: priv.toPublicKey(),
135
+ // })
136
+ // .sign(priv)
137
+ // .toProtocolTransaction();
138
+ //
139
+ // const executionData = {
140
+ // networkState,
141
+ // transaction: tx,
142
+ // };
143
+ //
144
+ // // const asmodule = protocol.resolve()
145
+ //
146
+ // protocol.dependencyContainer
147
+ // .resolveAll<ProvableBlockHook<unknown>>("ProvableBlockHook")
148
+ // .forEach((module) => {
149
+ // module.beforeBlock(executionData);
150
+ // });
151
+ //
152
+ // const hashList = new DefaultProvableHashList(ProvableStateTransition);
153
+ //
154
+ // container
155
+ // .resolve(ProtocolMethodExecutionContext)
156
+ // .current()
157
+ // .result.stateTransitions.map((x) => x.toProvable())
158
+ // .forEach((st) => {
159
+ // hashList.push(st);
160
+ // });
161
+ //
162
+ // const blockProver = protocol.resolve("BlockProver");
163
+ //
164
+ // const fromState = Field(1);
165
+ // const toState = Field(2);
166
+ //
167
+ // const [appProof, stProof] = generateTestProofs(
168
+ // fromState,
169
+ // toState,
170
+ // hashList.commitment,
171
+ // tx,
172
+ // networkState
173
+ // );
174
+ //
175
+ // const fromProverState: BlockProverState = {
176
+ // stateRoot: fromState,
177
+ // transactionsHash: Field(0),
178
+ // networkStateHash: networkState.hash(),
179
+ // };
180
+ //
181
+ // const toProverState = blockProver.applyTransaction(
182
+ // fromProverState,
183
+ // stProof,
184
+ // appProof,
185
+ // executionData
186
+ // );
187
+ //
188
+ // const publicInput = new BlockProverPublicInput({
189
+ // stateRoot: fromProverState.stateRoot,
190
+ // transactionsHash: fromProverState.transactionsHash,
191
+ // networkStateHash: networkState.hash(),
192
+ // });
193
+ //
194
+ // const publicOutput = blockProver.proveTransaction(
195
+ // publicInput,
196
+ // stProof,
197
+ // appProof,
198
+ // { networkState, transaction: tx }
199
+ // );
200
+ //
201
+ // expect(publicOutput.stateRoot).toStrictEqual(toProverState.stateRoot);
202
+ // expect(publicOutput.transactionsHash).toStrictEqual(
203
+ // toProverState.transactionsHash
204
+ // );
205
+ // });
226
206
  });
207
+
208
+ /* eslint-enable */
@@ -1,13 +1,11 @@
1
1
  import "reflect-metadata";
2
- import { Protocol, VanillaProtocol } from "../src/protocol/Protocol";
3
2
  import { beforeEach } from "@jest/globals";
3
+
4
4
  import { BlockProver } from "../src/prover/block/BlockProver";
5
5
  import { StateTransitionProver } from "../src/prover/statetransition/StateTransitionProver";
6
- import {
7
- NoOpStateTransitionWitnessProvider,
8
- ProvableTransactionHook,
9
- } from "../src";
10
- import { AccountStateHook } from "../src/blockmodules/AccountStateHook";
6
+ import { ProvableTransactionHook } from "../src";
7
+
8
+ import { createAndInitTestingProtocol } from "./TestingProtocol";
11
9
 
12
10
  describe("protocol", () => {
13
11
  beforeEach(() => {});
@@ -15,11 +13,7 @@ describe("protocol", () => {
15
13
  it("should resolve all provers correctly", async () => {
16
14
  expect.assertions(2);
17
15
 
18
- const protocol = VanillaProtocol.create();
19
-
20
- protocol.dependencyContainer.register("StateTransitionWitnessProvider", {
21
- useValue: new NoOpStateTransitionWitnessProvider(),
22
- });
16
+ const protocol = createAndInitTestingProtocol();
23
17
 
24
18
  expect(protocol.blockProver instanceof BlockProver).toBe(true);
25
19
  expect(
@@ -27,16 +21,10 @@ describe("protocol", () => {
27
21
  ).toBe(true);
28
22
  });
29
23
 
30
- it.only("should initialize hooks correctly", () => {
24
+ it("should initialize hooks correctly", () => {
31
25
  expect.assertions(2);
32
26
 
33
- const protocol = Protocol.from({
34
- modules: {
35
- BlockProver,
36
- StateTransitionProver,
37
- AccountStateHook,
38
- },
39
- });
27
+ const protocol = createAndInitTestingProtocol();
40
28
 
41
29
  const hooks =
42
30
  protocol.dependencyContainer.resolveAll<ProvableTransactionHook>(
@@ -44,6 +32,6 @@ describe("protocol", () => {
44
32
  );
45
33
 
46
34
  expect(hooks).toHaveLength(1);
47
- expect(hooks[0].name).toBe("AccountStateHook");
35
+ expect(hooks[0].name).toBe("AccountState");
48
36
  });
49
37
  });