@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
@@ -1,4 +1,4 @@
1
- import { Bool } from "o1js";
1
+ import { Bool, Provable } from "o1js";
2
2
  import { container } from "tsyringe";
3
3
  import { log } from "@proto-kit/common";
4
4
 
@@ -13,17 +13,23 @@ 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);
20
20
 
21
- if (!condition.toBoolean()) {
22
- if (!executionContext.current().isSimulated) {
23
- log.debug("Assertion failed: ", message);
21
+ Provable.asProver(() => {
22
+ if (!condition.toBoolean()) {
23
+ if (!executionContext.current().isSimulated) {
24
+ log.debug("Assertion failed: ", message);
25
+ }
26
+ const messageString =
27
+ message !== undefined && typeof message === "function"
28
+ ? message()
29
+ : message;
30
+ executionContext.setStatusMessage(messageString, new Error().stack);
24
31
  }
25
- executionContext.setStatusMessage(message);
26
- }
32
+ });
27
33
 
28
34
  executionContext.setStatus(status);
29
35
  }
@@ -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 {
@@ -29,10 +31,12 @@ export interface RuntimeMethodExecutionData {
29
31
  networkState: NetworkState;
30
32
  }
31
33
 
32
- export class RuntimeMethodExecutionDataStruct extends Struct({
33
- transaction: RuntimeTransaction,
34
- networkState: NetworkState,
35
- }) {}
34
+ export class RuntimeMethodExecutionDataStruct
35
+ extends Struct({
36
+ transaction: RuntimeTransaction,
37
+ networkState: NetworkState,
38
+ })
39
+ implements RuntimeMethodExecutionData {}
36
40
 
37
41
  /**
38
42
  * Execution context used to wrap runtime module methods,
@@ -72,12 +76,13 @@ export class RuntimeMethodExecutionContext extends ProvableMethodExecutionContex
72
76
  /**
73
77
  * @param message - Status message to acompany the current status
74
78
  */
75
- public setStatusMessage(message?: string) {
79
+ public setStatusMessage(message?: string, stackTrace?: string) {
76
80
  this.assertSetupCalled();
77
81
  if (this.isSimulated) {
78
82
  return;
79
83
  }
80
84
  this.result.statusMessage ??= message;
85
+ this.result.stackTrace ??= stackTrace;
81
86
  }
82
87
 
83
88
  /**
@@ -125,7 +130,8 @@ export class RuntimeMethodExecutionContext extends ProvableMethodExecutionContex
125
130
  super.afterMethod();
126
131
  if (this.isFinished) {
127
132
  this.lastInput = this.input;
128
- this.input = undefined;
133
+ // TODO: find out why input isnt set in TransactionFeeHook during assert
134
+ // this.input = undefined;
129
135
  this.isSimulated = false;
130
136
  }
131
137
  }
@@ -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) {
@@ -1,9 +1,10 @@
1
- import { Field, FlexibleProvablePure, Poseidon } from "o1js";
1
+ import { Field, Poseidon, ProvablePure } from "o1js";
2
2
  import { hashWithPrefix, prefixToField } from "@proto-kit/common";
3
3
 
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,10 +49,10 @@ 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
- valueType: FlexibleProvablePure<Value>,
55
+ valueType: ProvablePure<Value>,
55
56
  public readonly prefix: string,
56
57
  internalCommitment: Field = Field(0)
57
58
  ) {
@@ -1,4 +1,4 @@
1
- import { Field, FlexibleProvablePure, Poseidon } from "o1js";
1
+ import { Field, ProvablePure, Poseidon } from "o1js";
2
2
 
3
3
  import { ProvableHashList } from "./ProvableHashList.js";
4
4
  import { stringToField } from "./utils";
@@ -7,7 +7,7 @@ export class PrefixedProvableHashList<Value> extends ProvableHashList<Value> {
7
7
  private readonly prefix: Field;
8
8
 
9
9
  public constructor(
10
- valueType: FlexibleProvablePure<Value>,
10
+ valueType: ProvablePure<Value>,
11
11
  prefix: string,
12
12
  internalCommitment: Field = Field(0)
13
13
  ) {
@@ -1,11 +1,11 @@
1
- import { Field, Poseidon, FlexibleProvablePure, Bool, Provable } from "o1js";
1
+ import { Field, Poseidon, Bool, Provable, ProvablePure } from "o1js";
2
2
 
3
3
  /**
4
4
  * Utilities for creating a hash list from a given value type.
5
5
  */
6
6
  export abstract class ProvableHashList<Value> {
7
7
  public constructor(
8
- private readonly valueType: FlexibleProvablePure<Value>,
8
+ protected readonly valueType: ProvablePure<Value>,
9
9
  public commitment: Field = Field(0)
10
10
  ) {}
11
11
 
@@ -0,0 +1,68 @@
1
+ import { Bool, Field, Poseidon, Provable } from "o1js";
2
+
3
+ import { ProvableHashList } from "./ProvableHashList";
4
+
5
+ export class ProvableReductionHashList<Value> extends ProvableHashList<Value> {
6
+ public unconstrainedList: Value[] = [];
7
+
8
+ private constrainedLastValue: Value | undefined = undefined;
9
+
10
+ private preimage: Field = this.commitment;
11
+
12
+ public pushAndReduce(
13
+ value: Value,
14
+ reduce: (previous: Value) => [Value, Bool]
15
+ ): { popLast: Bool; value: Value } {
16
+ let valueToPush = value;
17
+ let popLast = Bool(false);
18
+
19
+ // Theoretically, we can feed the preimage + last value as a witness
20
+ // for non-zero commitment starts (like used in the BlockProver), because
21
+ // currently it won't reduce across chunks. But this is okay for now I think
22
+ if (this.constrainedLastValue !== undefined) {
23
+ [valueToPush, popLast] = reduce(this.constrainedLastValue);
24
+ }
25
+
26
+ Provable.asProver(() => {
27
+ if (popLast.toBoolean()) {
28
+ this.unconstrainedList.pop();
29
+ }
30
+
31
+ const valueAsConstant = this.valueType.fromFields(
32
+ this.valueType.toFields(valueToPush).map((field) => field.toConstant())
33
+ );
34
+ this.unconstrainedList.push(valueAsConstant);
35
+ });
36
+
37
+ const currentCommitment = this.commitment;
38
+ const noPopCommitment = this.hash([
39
+ currentCommitment,
40
+ ...this.valueType.toFields(valueToPush),
41
+ ]);
42
+
43
+ const popCommitment = this.hash([
44
+ this.preimage,
45
+ ...this.valueType.toFields(valueToPush),
46
+ ]);
47
+
48
+ this.commitment = Provable.if(popLast, popCommitment, noPopCommitment);
49
+
50
+ this.constrainedLastValue = valueToPush;
51
+ this.preimage = Provable.if(popLast, this.preimage, currentCommitment);
52
+
53
+ return {
54
+ popLast,
55
+ value: valueToPush,
56
+ };
57
+ }
58
+
59
+ public pushIf(value: Value, condition: Bool) {
60
+ throw new Error("pushIf is not implemented for ReducedHashList");
61
+
62
+ return this;
63
+ }
64
+
65
+ public hash(elements: Field[]): Field {
66
+ return Poseidon.hash(elements);
67
+ }
68
+ }
@@ -0,0 +1,89 @@
1
+ import { Provable } from "o1js";
2
+
3
+ import { ProvableOption } from "../model/Option";
4
+ import {
5
+ ProvableStateTransition,
6
+ StateTransition,
7
+ } from "../model/StateTransition";
8
+
9
+ import { ProvableReductionHashList } from "./ProvableReductionHashList";
10
+
11
+ export class StateTransitionReductionList extends ProvableReductionHashList<ProvableStateTransition> {
12
+ public push(value: ProvableStateTransition) {
13
+ this.pushWithMetadata(value);
14
+
15
+ return this;
16
+ }
17
+
18
+ public pushWithMetadata(value: ProvableStateTransition) {
19
+ return this.pushAndReduce(value, (previous: ProvableStateTransition) => {
20
+ const pathsMatch = previous.path.equals(value.path);
21
+
22
+ // Take the previous.from if the paths match, otherwise leave ST as is
23
+ const from = Provable.if(
24
+ pathsMatch,
25
+ ProvableOption,
26
+ previous.from,
27
+ value.from
28
+ );
29
+ // In case we have a layout like
30
+ // { from: 5, to: 10 }, { from: 10, to: none }
31
+ // we just take the first and discard the second
32
+ const to = Provable.if(
33
+ value.to.isSome.or(pathsMatch.not()),
34
+ ProvableOption,
35
+ value.to,
36
+ previous.to
37
+ );
38
+
39
+ const transition = new ProvableStateTransition({
40
+ path: value.path,
41
+ from: new ProvableOption(from),
42
+ to: new ProvableOption(to),
43
+ });
44
+
45
+ // Assert that connection is correct
46
+ previous.to.value
47
+ .equals(value.from.value)
48
+ .or(
49
+ previous.to.isSome
50
+ .not()
51
+ .and(previous.from.value.equals(value.from.value))
52
+ )
53
+ .or(pathsMatch.not())
54
+ .assertTrue();
55
+
56
+ return [transition, pathsMatch];
57
+ });
58
+ }
59
+ }
60
+
61
+ export function reduceStateTransitions(
62
+ transitions: StateTransition<unknown>[]
63
+ ): StateTransition<unknown>[] {
64
+ const reduced: StateTransition<unknown>[] = [];
65
+
66
+ transitions.forEach((st) => {
67
+ if (reduced.length === 0) {
68
+ reduced.push(st);
69
+ return;
70
+ }
71
+
72
+ const last = reduced.at(-1)!;
73
+ if (last.path.equals(st.path).toBoolean()) {
74
+ if (st.toValue.isSome.toBoolean()) {
75
+ reduced.pop();
76
+ reduced.push(
77
+ new StateTransition<unknown>(st.path, last.fromValue, st.toValue)
78
+ );
79
+ } else {
80
+ // Do nothing, because we discard that ST
81
+ // { from: 5, to: 10 }, { from: 10, to: none }
82
+ // cancel the 2nd
83
+ }
84
+ } else {
85
+ reduced.push(st);
86
+ }
87
+ });
88
+ return reduced;
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
  }