@proto-kit/protocol 0.1.1-develop.1086

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 (251) hide show
  1. package/LICENSE.md +201 -0
  2. package/README.md +45 -0
  3. package/dist/Constants.d.ts +4 -0
  4. package/dist/Constants.d.ts.map +1 -0
  5. package/dist/Constants.js +3 -0
  6. package/dist/hooks/AccountStateHook.d.ts +52 -0
  7. package/dist/hooks/AccountStateHook.d.ts.map +1 -0
  8. package/dist/hooks/AccountStateHook.js +47 -0
  9. package/dist/hooks/BlockHeightHook.d.ts +7 -0
  10. package/dist/hooks/BlockHeightHook.d.ts.map +1 -0
  11. package/dist/hooks/BlockHeightHook.js +15 -0
  12. package/dist/hooks/LastStateRootBlockHook.d.ts +8 -0
  13. package/dist/hooks/LastStateRootBlockHook.d.ts.map +1 -0
  14. package/dist/hooks/LastStateRootBlockHook.js +15 -0
  15. package/dist/hooks/NoopBlockHook.d.ts +9 -0
  16. package/dist/hooks/NoopBlockHook.d.ts.map +1 -0
  17. package/dist/hooks/NoopBlockHook.js +9 -0
  18. package/dist/hooks/NoopSettlementHook.d.ts +6 -0
  19. package/dist/hooks/NoopSettlementHook.d.ts.map +1 -0
  20. package/dist/hooks/NoopSettlementHook.js +17 -0
  21. package/dist/hooks/NoopTransactionHook.d.ts +6 -0
  22. package/dist/hooks/NoopTransactionHook.d.ts.map +1 -0
  23. package/dist/hooks/NoopTransactionHook.js +7 -0
  24. package/dist/index.d.ts +54 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +53 -0
  27. package/dist/model/MethodPublicOutput.d.ts +113 -0
  28. package/dist/model/MethodPublicOutput.d.ts.map +1 -0
  29. package/dist/model/MethodPublicOutput.js +14 -0
  30. package/dist/model/Option.d.ts +122 -0
  31. package/dist/model/Option.d.ts.map +1 -0
  32. package/dist/model/Option.js +110 -0
  33. package/dist/model/Path.d.ts +31 -0
  34. package/dist/model/Path.d.ts.map +1 -0
  35. package/dist/model/Path.js +42 -0
  36. package/dist/model/RuntimeLike.d.ts +11 -0
  37. package/dist/model/RuntimeLike.d.ts.map +1 -0
  38. package/dist/model/RuntimeLike.js +1 -0
  39. package/dist/model/StateTransition.d.ts +135 -0
  40. package/dist/model/StateTransition.d.ts.map +1 -0
  41. package/dist/model/StateTransition.js +68 -0
  42. package/dist/model/StateTransitionProvableBatch.d.ts +172 -0
  43. package/dist/model/StateTransitionProvableBatch.d.ts.map +1 -0
  44. package/dist/model/StateTransitionProvableBatch.js +85 -0
  45. package/dist/model/network/NetworkState.d.ts +160 -0
  46. package/dist/model/network/NetworkState.d.ts.map +1 -0
  47. package/dist/model/network/NetworkState.js +31 -0
  48. package/dist/model/transaction/RuntimeTransaction.d.ts +122 -0
  49. package/dist/model/transaction/RuntimeTransaction.d.ts.map +1 -0
  50. package/dist/model/transaction/RuntimeTransaction.js +86 -0
  51. package/dist/model/transaction/SignedTransaction.d.ts +107 -0
  52. package/dist/model/transaction/SignedTransaction.d.ts.map +1 -0
  53. package/dist/model/transaction/SignedTransaction.js +33 -0
  54. package/dist/model/transaction/ValueOption.d.ts +173 -0
  55. package/dist/model/transaction/ValueOption.d.ts.map +1 -0
  56. package/dist/model/transaction/ValueOption.js +24 -0
  57. package/dist/protocol/Protocol.d.ts +43 -0
  58. package/dist/protocol/Protocol.d.ts.map +1 -0
  59. package/dist/protocol/Protocol.js +95 -0
  60. package/dist/protocol/ProtocolEnvironment.d.ts +9 -0
  61. package/dist/protocol/ProtocolEnvironment.d.ts.map +1 -0
  62. package/dist/protocol/ProtocolEnvironment.js +1 -0
  63. package/dist/protocol/ProtocolModule.d.ts +9 -0
  64. package/dist/protocol/ProtocolModule.d.ts.map +1 -0
  65. package/dist/protocol/ProtocolModule.js +12 -0
  66. package/dist/protocol/ProvableBlockHook.d.ts +8 -0
  67. package/dist/protocol/ProvableBlockHook.d.ts.map +1 -0
  68. package/dist/protocol/ProvableBlockHook.js +4 -0
  69. package/dist/protocol/ProvableTransactionHook.d.ts +7 -0
  70. package/dist/protocol/ProvableTransactionHook.d.ts.map +1 -0
  71. package/dist/protocol/ProvableTransactionHook.js +3 -0
  72. package/dist/protocol/TransitioningProtocolModule.d.ts +10 -0
  73. package/dist/protocol/TransitioningProtocolModule.d.ts.map +1 -0
  74. package/dist/protocol/TransitioningProtocolModule.js +8 -0
  75. package/dist/prover/block/BlockProvable.d.ts +395 -0
  76. package/dist/prover/block/BlockProvable.d.ts.map +1 -0
  77. package/dist/prover/block/BlockProvable.js +45 -0
  78. package/dist/prover/block/BlockProver.d.ts +92 -0
  79. package/dist/prover/block/BlockProver.d.ts.map +1 -0
  80. package/dist/prover/block/BlockProver.js +472 -0
  81. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts +64 -0
  82. package/dist/prover/block/accummulators/BlockHashMerkleTree.d.ts.map +1 -0
  83. package/dist/prover/block/accummulators/BlockHashMerkleTree.js +16 -0
  84. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.d.ts +139 -0
  85. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.d.ts.map +1 -0
  86. package/dist/prover/block/accummulators/RuntimeVerificationKeyTree.js +20 -0
  87. package/dist/prover/block/services/RuntimeVerificationKeyRootService.d.ts +7 -0
  88. package/dist/prover/block/services/RuntimeVerificationKeyRootService.d.ts.map +1 -0
  89. package/dist/prover/block/services/RuntimeVerificationKeyRootService.js +22 -0
  90. package/dist/prover/statetransition/StateTransitionProvable.d.ts +174 -0
  91. package/dist/prover/statetransition/StateTransitionProvable.d.ts.map +1 -0
  92. package/dist/prover/statetransition/StateTransitionProvable.js +15 -0
  93. package/dist/prover/statetransition/StateTransitionProver.d.ts +51 -0
  94. package/dist/prover/statetransition/StateTransitionProver.d.ts.map +1 -0
  95. package/dist/prover/statetransition/StateTransitionProver.js +188 -0
  96. package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts +16 -0
  97. package/dist/prover/statetransition/StateTransitionWitnessProvider.d.ts.map +1 -0
  98. package/dist/prover/statetransition/StateTransitionWitnessProvider.js +16 -0
  99. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts +7 -0
  100. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.d.ts.map +1 -0
  101. package/dist/prover/statetransition/StateTransitionWitnessProviderReference.js +19 -0
  102. package/dist/settlement/ContractModule.d.ts +15 -0
  103. package/dist/settlement/ContractModule.d.ts.map +1 -0
  104. package/dist/settlement/ContractModule.js +11 -0
  105. package/dist/settlement/SettlementContractModule.d.ts +40 -0
  106. package/dist/settlement/SettlementContractModule.d.ts.map +1 -0
  107. package/dist/settlement/SettlementContractModule.js +71 -0
  108. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts +12 -0
  109. package/dist/settlement/contracts/DispatchContractProtocolModule.d.ts.map +1 -0
  110. package/dist/settlement/contracts/DispatchContractProtocolModule.js +35 -0
  111. package/dist/settlement/contracts/DispatchSmartContract.d.ts +22 -0
  112. package/dist/settlement/contracts/DispatchSmartContract.d.ts.map +1 -0
  113. package/dist/settlement/contracts/DispatchSmartContract.js +110 -0
  114. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts +19 -0
  115. package/dist/settlement/contracts/SettlementContractProtocolModule.d.ts.map +1 -0
  116. package/dist/settlement/contracts/SettlementContractProtocolModule.js +44 -0
  117. package/dist/settlement/contracts/SettlementSmartContract.d.ts +42 -0
  118. package/dist/settlement/contracts/SettlementSmartContract.d.ts.map +1 -0
  119. package/dist/settlement/contracts/SettlementSmartContract.js +241 -0
  120. package/dist/settlement/messages/Deposit.d.ts +64 -0
  121. package/dist/settlement/messages/Deposit.d.ts.map +1 -0
  122. package/dist/settlement/messages/Deposit.js +6 -0
  123. package/dist/settlement/messages/OutgoingMessageArgument.d.ts +189 -0
  124. package/dist/settlement/messages/OutgoingMessageArgument.d.ts.map +1 -0
  125. package/dist/settlement/messages/OutgoingMessageArgument.js +32 -0
  126. package/dist/settlement/messages/Withdrawal.d.ts +65 -0
  127. package/dist/settlement/messages/Withdrawal.d.ts.map +1 -0
  128. package/dist/settlement/messages/Withdrawal.js +13 -0
  129. package/dist/settlement/modularity/ProvableSettlementHook.d.ts +24 -0
  130. package/dist/settlement/modularity/ProvableSettlementHook.d.ts.map +1 -0
  131. package/dist/settlement/modularity/ProvableSettlementHook.js +3 -0
  132. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts +11 -0
  133. package/dist/settlement/modules/NetworkStateSettlementModule.d.ts.map +1 -0
  134. package/dist/settlement/modules/NetworkStateSettlementModule.js +14 -0
  135. package/dist/state/State.d.ts +68 -0
  136. package/dist/state/State.d.ts.map +1 -0
  137. package/dist/state/State.js +129 -0
  138. package/dist/state/StateMap.d.ts +37 -0
  139. package/dist/state/StateMap.d.ts.map +1 -0
  140. package/dist/state/StateMap.js +55 -0
  141. package/dist/state/StateService.d.ts +6 -0
  142. package/dist/state/StateService.d.ts.map +1 -0
  143. package/dist/state/StateService.js +1 -0
  144. package/dist/state/StateServiceProvider.d.ts +8 -0
  145. package/dist/state/StateServiceProvider.d.ts.map +1 -0
  146. package/dist/state/StateServiceProvider.js +36 -0
  147. package/dist/state/assert/assert.d.ts +12 -0
  148. package/dist/state/assert/assert.d.ts.map +1 -0
  149. package/dist/state/assert/assert.js +30 -0
  150. package/dist/state/context/ProtocolMethodExecutionContext.d.ts +22 -0
  151. package/dist/state/context/ProtocolMethodExecutionContext.d.ts.map +1 -0
  152. package/dist/state/context/ProtocolMethodExecutionContext.js +28 -0
  153. package/dist/state/context/RuntimeMethodExecutionContext.d.ts +193 -0
  154. package/dist/state/context/RuntimeMethodExecutionContext.d.ts.map +1 -0
  155. package/dist/state/context/RuntimeMethodExecutionContext.js +135 -0
  156. package/dist/state/context/TransitionMethodExecutionContext.d.ts +23 -0
  157. package/dist/state/context/TransitionMethodExecutionContext.d.ts.map +1 -0
  158. package/dist/state/context/TransitionMethodExecutionContext.js +5 -0
  159. package/dist/state/protocol/ProtocolState.d.ts +7 -0
  160. package/dist/state/protocol/ProtocolState.d.ts.map +1 -0
  161. package/dist/state/protocol/ProtocolState.js +39 -0
  162. package/dist/utils/MinaPrefixedProvableHashList.d.ts +24 -0
  163. package/dist/utils/MinaPrefixedProvableHashList.d.ts.map +1 -0
  164. package/dist/utils/MinaPrefixedProvableHashList.js +52 -0
  165. package/dist/utils/PrefixedProvableHashList.d.ts +8 -0
  166. package/dist/utils/PrefixedProvableHashList.d.ts.map +1 -0
  167. package/dist/utils/PrefixedProvableHashList.js +12 -0
  168. package/dist/utils/ProvableHashList.d.ts +27 -0
  169. package/dist/utils/ProvableHashList.d.ts.map +1 -0
  170. package/dist/utils/ProvableHashList.js +43 -0
  171. package/dist/utils/ProvableReductionHashList.d.ts +14 -0
  172. package/dist/utils/ProvableReductionHashList.d.ts.map +1 -0
  173. package/dist/utils/ProvableReductionHashList.js +50 -0
  174. package/dist/utils/StateTransitionReductionList.d.ts +11 -0
  175. package/dist/utils/StateTransitionReductionList.d.ts.map +1 -0
  176. package/dist/utils/StateTransitionReductionList.js +60 -0
  177. package/dist/utils/utils.d.ts +11 -0
  178. package/dist/utils/utils.d.ts.map +1 -0
  179. package/dist/utils/utils.js +44 -0
  180. package/jest.config.cjs +1 -0
  181. package/package.json +36 -0
  182. package/src/Constants.ts +3 -0
  183. package/src/hooks/AccountStateHook.ts +48 -0
  184. package/src/hooks/BlockHeightHook.ts +17 -0
  185. package/src/hooks/LastStateRootBlockHook.ts +26 -0
  186. package/src/hooks/NoopBlockHook.ts +21 -0
  187. package/src/hooks/NoopSettlementHook.ts +20 -0
  188. package/src/hooks/NoopTransactionHook.ts +10 -0
  189. package/src/index.ts +53 -0
  190. package/src/model/MethodPublicOutput.ts +14 -0
  191. package/src/model/Option.ts +172 -0
  192. package/src/model/Path.ts +50 -0
  193. package/src/model/RuntimeLike.ts +12 -0
  194. package/src/model/StateTransition.ts +88 -0
  195. package/src/model/StateTransitionProvableBatch.ts +125 -0
  196. package/src/model/Transaction.ts +31 -0
  197. package/src/model/network/NetworkState.ts +33 -0
  198. package/src/model/transaction/RuntimeTransaction.ts +105 -0
  199. package/src/model/transaction/SignedTransaction.ts +47 -0
  200. package/src/model/transaction/ValueOption.ts +28 -0
  201. package/src/protocol/Protocol.ts +197 -0
  202. package/src/protocol/ProtocolEnvironment.ts +10 -0
  203. package/src/protocol/ProtocolModule.ts +27 -0
  204. package/src/protocol/ProvableBlockHook.ts +19 -0
  205. package/src/protocol/ProvableTransactionHook.ts +13 -0
  206. package/src/protocol/TransitioningProtocolModule.ts +12 -0
  207. package/src/prover/block/BlockProvable.ts +99 -0
  208. package/src/prover/block/BlockProver.ts +954 -0
  209. package/src/prover/block/accummulators/BlockHashMerkleTree.ts +16 -0
  210. package/src/prover/block/accummulators/RuntimeVerificationKeyTree.ts +24 -0
  211. package/src/prover/block/services/RuntimeVerificationKeyRootService.ts +20 -0
  212. package/src/prover/statetransition/StateTransitionProvable.ts +44 -0
  213. package/src/prover/statetransition/StateTransitionProver.ts +371 -0
  214. package/src/prover/statetransition/StateTransitionWitnessProvider.ts +23 -0
  215. package/src/prover/statetransition/StateTransitionWitnessProviderReference.ts +17 -0
  216. package/src/settlement/ContractModule.ts +24 -0
  217. package/src/settlement/SettlementContractModule.ts +132 -0
  218. package/src/settlement/contracts/DispatchContractProtocolModule.ts +39 -0
  219. package/src/settlement/contracts/DispatchSmartContract.ts +136 -0
  220. package/src/settlement/contracts/SettlementContractProtocolModule.ts +67 -0
  221. package/src/settlement/contracts/SettlementSmartContract.ts +344 -0
  222. package/src/settlement/messages/Deposit.ts +6 -0
  223. package/src/settlement/messages/OutgoingMessageArgument.ts +42 -0
  224. package/src/settlement/messages/Withdrawal.ts +14 -0
  225. package/src/settlement/modularity/ProvableSettlementHook.ts +33 -0
  226. package/src/settlement/modules/NetworkStateSettlementModule.ts +42 -0
  227. package/src/state/State.ts +175 -0
  228. package/src/state/StateMap.ts +73 -0
  229. package/src/state/StateService.ts +6 -0
  230. package/src/state/StateServiceProvider.ts +37 -0
  231. package/src/state/assert/assert.ts +35 -0
  232. package/src/state/context/RuntimeMethodExecutionContext.ts +174 -0
  233. package/src/state/context/TransitionMethodExecutionContext.ts +26 -0
  234. package/src/state/protocol/ProtocolState.ts +61 -0
  235. package/src/utils/MinaPrefixedProvableHashList.ts +73 -0
  236. package/src/utils/PrefixedProvableHashList.ts +21 -0
  237. package/src/utils/ProvableHashList.ts +50 -0
  238. package/src/utils/ProvableReductionHashList.ts +68 -0
  239. package/src/utils/StateTransitionReductionList.ts +89 -0
  240. package/src/utils/utils.ts +75 -0
  241. package/test/BlockProver.test.ts +211 -0
  242. package/test/Protocol.test.ts +37 -0
  243. package/test/State.test.ts +45 -0
  244. package/test/StateTransition.test.ts +174 -0
  245. package/test/TestingProtocol.ts +47 -0
  246. package/test/model/Option.test.ts +72 -0
  247. package/test/state/assert/assert.test.ts +56 -0
  248. package/test/tsconfig.json +7 -0
  249. package/test/utils/ProvableReductionHashList.test.ts +117 -0
  250. package/test/utils.test.ts +27 -0
  251. package/tsconfig.json +8 -0
@@ -0,0 +1,193 @@
1
+ import { Bool, FlexibleProvablePure, Provable } from "o1js";
2
+ import { ProvableMethodExecutionContext, ProvableMethodExecutionResult } from "@proto-kit/common";
3
+ import { StateTransition } from "../../model/StateTransition";
4
+ import { RuntimeTransaction } from "../../model/transaction/RuntimeTransaction";
5
+ import { NetworkState } from "../../model/network/NetworkState";
6
+ export declare class RuntimeProvableMethodExecutionResult extends ProvableMethodExecutionResult {
7
+ stateTransitions: StateTransition<any>[];
8
+ status: Bool;
9
+ statusMessage?: string;
10
+ stackTrace?: string;
11
+ events: {
12
+ eventType: FlexibleProvablePure<any>;
13
+ event: any;
14
+ eventName: string;
15
+ condition: Bool;
16
+ }[];
17
+ }
18
+ export interface RuntimeMethodExecutionData {
19
+ transaction: RuntimeTransaction;
20
+ networkState: NetworkState;
21
+ }
22
+ declare const RuntimeMethodExecutionDataStruct_base: (new (value: {
23
+ transaction: RuntimeTransaction;
24
+ networkState: NetworkState;
25
+ }) => {
26
+ transaction: RuntimeTransaction;
27
+ networkState: NetworkState;
28
+ }) & {
29
+ _isStruct: true;
30
+ } & Provable<{
31
+ transaction: RuntimeTransaction;
32
+ networkState: NetworkState;
33
+ }, {
34
+ transaction: {
35
+ methodId: bigint;
36
+ argsHash: bigint;
37
+ nonce: {
38
+ isSome: boolean;
39
+ value: any;
40
+ };
41
+ sender: {
42
+ isSome: boolean;
43
+ value: any;
44
+ };
45
+ };
46
+ networkState: {
47
+ block: {
48
+ height: bigint;
49
+ };
50
+ previous: {
51
+ rootHash: bigint;
52
+ };
53
+ };
54
+ }> & {
55
+ fromValue: (value: {
56
+ transaction: RuntimeTransaction | {
57
+ methodId: string | number | bigint | import("o1js/dist/node/lib/provable/field").Field;
58
+ argsHash: string | number | bigint | import("o1js/dist/node/lib/provable/field").Field;
59
+ nonce: import("../..").UInt64Option | {
60
+ isSome: boolean | import("o1js/dist/node/lib/provable/bool").Bool;
61
+ value: any;
62
+ };
63
+ sender: import("../..").PublicKeyOption | {
64
+ isSome: boolean | import("o1js/dist/node/lib/provable/bool").Bool;
65
+ value: any;
66
+ };
67
+ };
68
+ networkState: NetworkState | {
69
+ block: import("../../model/network/NetworkState").CurrentBlock | {
70
+ height: bigint | import("o1js/dist/node/lib/provable/int").UInt64;
71
+ };
72
+ previous: import("../../model/network/NetworkState").PreviousBlock | {
73
+ rootHash: string | number | bigint | import("o1js/dist/node/lib/provable/field").Field;
74
+ };
75
+ };
76
+ }) => {
77
+ transaction: RuntimeTransaction;
78
+ networkState: NetworkState;
79
+ };
80
+ toInput: (x: {
81
+ transaction: RuntimeTransaction;
82
+ networkState: NetworkState;
83
+ }) => {
84
+ fields?: import("o1js/dist/node/lib/provable/field").Field[] | undefined;
85
+ packed?: [import("o1js/dist/node/lib/provable/field").Field, number][] | undefined;
86
+ };
87
+ toJSON: (x: {
88
+ transaction: RuntimeTransaction;
89
+ networkState: NetworkState;
90
+ }) => {
91
+ transaction: {
92
+ methodId: string;
93
+ argsHash: string;
94
+ nonce: {
95
+ isSome: boolean;
96
+ value: any;
97
+ };
98
+ sender: {
99
+ isSome: boolean;
100
+ value: any;
101
+ };
102
+ };
103
+ networkState: {
104
+ block: {
105
+ height: string;
106
+ };
107
+ previous: {
108
+ rootHash: string;
109
+ };
110
+ };
111
+ };
112
+ fromJSON: (x: {
113
+ transaction: {
114
+ methodId: string;
115
+ argsHash: string;
116
+ nonce: {
117
+ isSome: boolean;
118
+ value: any;
119
+ };
120
+ sender: {
121
+ isSome: boolean;
122
+ value: any;
123
+ };
124
+ };
125
+ networkState: {
126
+ block: {
127
+ height: string;
128
+ };
129
+ previous: {
130
+ rootHash: string;
131
+ };
132
+ };
133
+ }) => {
134
+ transaction: RuntimeTransaction;
135
+ networkState: NetworkState;
136
+ };
137
+ empty: () => {
138
+ transaction: RuntimeTransaction;
139
+ networkState: NetworkState;
140
+ };
141
+ };
142
+ export declare class RuntimeMethodExecutionDataStruct extends RuntimeMethodExecutionDataStruct_base implements RuntimeMethodExecutionData {
143
+ }
144
+ /**
145
+ * Execution context used to wrap runtime module methods,
146
+ * allowing them to post relevant information (such as execution status)
147
+ * into the context without any unnecessary 'prop drilling'.
148
+ */
149
+ export declare class RuntimeMethodExecutionContext extends ProvableMethodExecutionContext {
150
+ methods: string[];
151
+ input: RuntimeMethodExecutionData | undefined;
152
+ private lastInput;
153
+ result: RuntimeProvableMethodExecutionResult;
154
+ private isSimulated;
155
+ private assertSetupCalled;
156
+ /**
157
+ * Adds an in-method generated state transition to the current context
158
+ * @param stateTransition - State transition to add to the context
159
+ */
160
+ addStateTransition<Value>(stateTransition: StateTransition<Value>): void;
161
+ addEvent(eventType: FlexibleProvablePure<any>, event: any, eventName: string, condition?: Bool): void;
162
+ /**
163
+ * @param message - Status message to acompany the current status
164
+ */
165
+ setStatusMessage(message?: string, stackTrace?: string): void;
166
+ /**
167
+ * @param status - Execution status of the current method
168
+ */
169
+ setStatus(status: Bool): void;
170
+ /**
171
+ * @param input Input witness data required for a runtime execution
172
+ */
173
+ setup(input: RuntimeMethodExecutionData): void;
174
+ witnessInput(): RuntimeMethodExecutionDataStruct;
175
+ setSimulated(simulated: boolean): void;
176
+ /**
177
+ * Manually clears/resets the execution context
178
+ */
179
+ clear(): void;
180
+ afterMethod(): void;
181
+ /**
182
+ * Had to override current() otherwise it would not infer
183
+ * the type of result correctly (parent type would be reused)
184
+ */
185
+ current(): {
186
+ isFinished: boolean;
187
+ result: RuntimeProvableMethodExecutionResult;
188
+ input: RuntimeMethodExecutionData | undefined;
189
+ isSimulated: boolean;
190
+ };
191
+ }
192
+ export {};
193
+ //# sourceMappingURL=RuntimeMethodExecutionContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuntimeMethodExecutionContext.d.ts","sourceRoot":"","sources":["../../../src/state/context/RuntimeMethodExecutionContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAU,MAAM,MAAM,CAAC;AAEpE,OAAO,EACL,8BAA8B,EAC9B,6BAA6B,EAC9B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAShE,qBAAa,oCAAqC,SAAQ,6BAA6B;IAC9E,gBAAgB,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,CAAM;IAE9C,MAAM,EAAE,IAAI,CAAc;IAE1B,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,MAAM,EAAE;QACb,SAAS,EAAE,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACrC,KAAK,EAAE,GAAG,CAAC;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,IAAI,CAAC;KACjB,EAAE,CAAM;CACV;AAED,MAAM,WAAW,0BAA0B;IACzC,WAAW,EAAE,kBAAkB,CAAC;IAChC,YAAY,EAAE,YAAY,CAAC;CAC5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAED,qBAAa,gCACX,SAAQ,qCAIR,YAAW,0BAA0B;CAAG;AAE1C;;;;GAIG;AACH,qBACa,6BAA8B,SAAQ,8BAA8B;IACxE,OAAO,EAAE,MAAM,EAAE,CAAM;IAEvB,KAAK,EAAE,0BAA0B,GAAG,SAAS,CAAC;IAGrD,OAAO,CAAC,SAAS,CAAyC;IAE1C,MAAM,uCAA8C;IAEpE,OAAO,CAAC,WAAW,CAAkB;IAErC,OAAO,CAAC,iBAAiB;IAQzB;;;OAGG;IACI,kBAAkB,CAAC,KAAK,EAAE,eAAe,EAAE,eAAe,CAAC,KAAK,CAAC;IAKjE,QAAQ,CACb,SAAS,EAAE,oBAAoB,CAAC,GAAG,CAAC,EACpC,KAAK,EAAE,GAAG,EACV,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,IAAiB;IAY9B;;OAEG;IACI,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;IAS7D;;OAEG;IACI,SAAS,CAAC,MAAM,EAAE,IAAI;IAQ7B;;OAEG;IACI,KAAK,CAAC,KAAK,EAAE,0BAA0B;IAIvC,YAAY,IAAI,gCAAgC;IAYhD,YAAY,CAAC,SAAS,EAAE,OAAO;IAItC;;OAEG;IACI,KAAK;IAIL,WAAW;IAUlB;;;OAGG;IACI,OAAO;;;;;;CAQf"}
@@ -0,0 +1,135 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Bool, Provable, Struct } from "o1js";
8
+ import { singleton } from "tsyringe";
9
+ import { ProvableMethodExecutionContext, ProvableMethodExecutionResult, } from "@proto-kit/common";
10
+ import { RuntimeTransaction } from "../../model/transaction/RuntimeTransaction";
11
+ import { NetworkState } from "../../model/network/NetworkState";
12
+ const errors = {
13
+ setupNotCalled: () => new Error("Setup has not been called prior to executing a runtime method. Be sure to do that so that the Runtime is setup property for execution"),
14
+ };
15
+ export class RuntimeProvableMethodExecutionResult extends ProvableMethodExecutionResult {
16
+ constructor() {
17
+ super(...arguments);
18
+ this.stateTransitions = [];
19
+ this.status = Bool(true);
20
+ this.events = [];
21
+ }
22
+ }
23
+ export class RuntimeMethodExecutionDataStruct extends Struct({
24
+ transaction: RuntimeTransaction,
25
+ networkState: NetworkState,
26
+ }) {
27
+ }
28
+ /**
29
+ * Execution context used to wrap runtime module methods,
30
+ * allowing them to post relevant information (such as execution status)
31
+ * into the context without any unnecessary 'prop drilling'.
32
+ */
33
+ export let RuntimeMethodExecutionContext = class RuntimeMethodExecutionContext extends ProvableMethodExecutionContext {
34
+ constructor() {
35
+ super(...arguments);
36
+ this.methods = [];
37
+ this.result = new RuntimeProvableMethodExecutionResult();
38
+ this.isSimulated = false;
39
+ }
40
+ assertSetupCalled() {
41
+ if (this.input === undefined) {
42
+ throw errors.setupNotCalled();
43
+ }
44
+ }
45
+ /**
46
+ * Adds an in-method generated state transition to the current context
47
+ * @param stateTransition - State transition to add to the context
48
+ */
49
+ addStateTransition(stateTransition) {
50
+ this.assertSetupCalled();
51
+ this.result.stateTransitions.push(stateTransition);
52
+ }
53
+ addEvent(eventType, event, eventName, condition = Bool(true)) {
54
+ this.assertSetupCalled();
55
+ this.result.events.push({
56
+ eventType,
57
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
58
+ event,
59
+ eventName,
60
+ condition,
61
+ });
62
+ }
63
+ /**
64
+ * @param message - Status message to acompany the current status
65
+ */
66
+ setStatusMessage(message, stackTrace) {
67
+ var _a, _b;
68
+ this.assertSetupCalled();
69
+ if (this.isSimulated) {
70
+ return;
71
+ }
72
+ (_a = this.result).statusMessage ?? (_a.statusMessage = message);
73
+ (_b = this.result).stackTrace ?? (_b.stackTrace = stackTrace);
74
+ }
75
+ /**
76
+ * @param status - Execution status of the current method
77
+ */
78
+ setStatus(status) {
79
+ this.assertSetupCalled();
80
+ if (this.isSimulated) {
81
+ return;
82
+ }
83
+ this.result.status = status;
84
+ }
85
+ /**
86
+ * @param input Input witness data required for a runtime execution
87
+ */
88
+ setup(input) {
89
+ this.input = input;
90
+ }
91
+ witnessInput() {
92
+ this.assertSetupCalled();
93
+ return Provable.witness(RuntimeMethodExecutionDataStruct, () => {
94
+ // TODO Is that right? Or this.current().input
95
+ const { transaction, networkState } = this.input;
96
+ return new RuntimeMethodExecutionDataStruct({
97
+ networkState,
98
+ transaction,
99
+ });
100
+ });
101
+ }
102
+ setSimulated(simulated) {
103
+ this.isSimulated = simulated;
104
+ }
105
+ /**
106
+ * Manually clears/resets the execution context
107
+ */
108
+ clear() {
109
+ this.result = new RuntimeProvableMethodExecutionResult();
110
+ }
111
+ afterMethod() {
112
+ super.afterMethod();
113
+ if (this.isFinished) {
114
+ this.lastInput = this.input;
115
+ // TODO: find out why input isnt set in TransactionFeeHook during assert
116
+ // this.input = undefined;
117
+ this.isSimulated = false;
118
+ }
119
+ }
120
+ /**
121
+ * Had to override current() otherwise it would not infer
122
+ * the type of result correctly (parent type would be reused)
123
+ */
124
+ current() {
125
+ return {
126
+ isFinished: this.isFinished,
127
+ result: this.result,
128
+ input: this.lastInput,
129
+ isSimulated: this.isSimulated,
130
+ };
131
+ }
132
+ };
133
+ RuntimeMethodExecutionContext = __decorate([
134
+ singleton()
135
+ ], RuntimeMethodExecutionContext);
@@ -0,0 +1,23 @@
1
+ import { StateTransition } from "../../model/StateTransition";
2
+ export declare class TransitionMethodExecutionResult {
3
+ stateTransitions: StateTransition<any>[];
4
+ }
5
+ export interface TransitionMethodExecutionContext {
6
+ /**
7
+ * Adds an in-method generated state transition to the current context
8
+ * @param stateTransition - State transition to add to the context
9
+ */
10
+ addStateTransition: <Value>(stateTransition: StateTransition<Value>) => void;
11
+ /**
12
+ * Manually clears/resets the execution context
13
+ */
14
+ clear: () => void;
15
+ /**
16
+ * Had to override current() otherwise it would not infer
17
+ * the type of result correctly (parent type would be reused)
18
+ */
19
+ current: () => {
20
+ result: TransitionMethodExecutionResult;
21
+ };
22
+ }
23
+ //# sourceMappingURL=TransitionMethodExecutionContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransitionMethodExecutionContext.d.ts","sourceRoot":"","sources":["../../../src/state/context/TransitionMethodExecutionContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,qBAAa,+BAA+B;IACnC,gBAAgB,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,CAAM;CACtD;AAED,MAAM,WAAW,gCAAgC;IAC/C;;;OAGG;IACH,kBAAkB,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,eAAe,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;IAE7E;;OAEG;IACH,KAAK,EAAE,MAAM,IAAI,CAAC;IAElB;;;OAGG;IACH,OAAO,EAAE,MAAM;QACb,MAAM,EAAE,+BAA+B,CAAC;KACzC,CAAC;CACH"}
@@ -0,0 +1,5 @@
1
+ export class TransitionMethodExecutionResult {
2
+ constructor() {
3
+ this.stateTransitions = [];
4
+ }
5
+ }
@@ -0,0 +1,7 @@
1
+ import { TransitioningProtocolModule } from "../../protocol/TransitioningProtocolModule";
2
+ /**
3
+ * Decorates a runtime module property as state, passing down some
4
+ * underlying values to improve developer experience.
5
+ */
6
+ export declare function protocolState(): <TargetTransitioningModule extends TransitioningProtocolModule<unknown>>(target: TargetTransitioningModule, propertyKey: string) => void;
7
+ //# sourceMappingURL=ProtocolState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProtocolState.d.ts","sourceRoot":"","sources":["../../../src/state/protocol/ProtocolState.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AAgBzF;;;GAGG;AACH,wBAAgB,aAAa,6HAKZ,MAAM,UAiCtB"}
@@ -0,0 +1,39 @@
1
+ import { Path } from "../../model/Path";
2
+ const errors = {
3
+ missingName: (className) => new Error(`Unable to provide a unique identifier for state, ${className} is missing a name.
4
+ Did you forget to extend your block module with 'extends ...Hook'?`),
5
+ missingProtocol: (className) => new Error(`Unable to provide 'procotol' for state, ${className} is missing a name.
6
+ Did you forget to extend your block module with 'extends ...Hook'?`),
7
+ };
8
+ /**
9
+ * Decorates a runtime module property as state, passing down some
10
+ * underlying values to improve developer experience.
11
+ */
12
+ export function protocolState() {
13
+ return (target, propertyKey) => {
14
+ let value;
15
+ Object.defineProperty(target, propertyKey, {
16
+ enumerable: true,
17
+ get: function get() {
18
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
19
+ const self = this;
20
+ if (self.name === undefined) {
21
+ throw errors.missingName(self.constructor.name);
22
+ }
23
+ if (!self.protocol) {
24
+ throw errors.missingProtocol(self.constructor.name);
25
+ }
26
+ // TODO Add Prefix?
27
+ const path = Path.fromProperty(self.name, propertyKey);
28
+ if (value) {
29
+ value.path = path;
30
+ value.stateServiceProvider = self.protocol.stateServiceProvider;
31
+ }
32
+ return value;
33
+ },
34
+ set: (newValue) => {
35
+ value = newValue;
36
+ },
37
+ });
38
+ };
39
+ }
@@ -0,0 +1,24 @@
1
+ import { Field, ProvablePure } from "o1js";
2
+ import { ProvableHashList } from "./ProvableHashList";
3
+ export declare const MINA_EVENT_PREFIXES: {
4
+ readonly event: "MinaZkappEvent******";
5
+ readonly events: "MinaZkappEvents*****";
6
+ readonly sequenceEvents: "MinaZkappSeqEvents**";
7
+ };
8
+ export declare function emptyActions(): Field;
9
+ export declare function emptyEvents(): Field;
10
+ export declare class MinaActions {
11
+ static actionHash(action: Field[], previousHash?: Field): Field;
12
+ }
13
+ export declare class MinaEvents {
14
+ static eventHash(event: Field[], previousHash?: Field): Field;
15
+ }
16
+ export declare class MinaPrefixedProvableHashList<Value> extends ProvableHashList<Value> {
17
+ readonly prefix: string;
18
+ constructor(valueType: ProvablePure<Value>, prefix: string, internalCommitment?: Field);
19
+ protected hash(elements: Field[]): Field;
20
+ }
21
+ export declare class MinaActionsHashList extends MinaPrefixedProvableHashList<Field> {
22
+ constructor(internalCommitment?: Field);
23
+ }
24
+ //# sourceMappingURL=MinaPrefixedProvableHashList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MinaPrefixedProvableHashList.d.ts","sourceRoot":"","sources":["../../src/utils/MinaPrefixedProvableHashList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAY,YAAY,EAAE,MAAM,MAAM,CAAC;AAGrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAUtD,eAAO,MAAM,mBAAmB;;;;CAItB,CAAC;AAEX,wBAAgB,YAAY,IAAI,KAAK,CAEpC;AAED,wBAAgB,WAAW,IAAI,KAAK,CAEnC;AAED,qBAAa,WAAW;IACtB,MAAM,CAAC,UAAU,CACf,MAAM,EAAE,KAAK,EAAE,EACf,YAAY,GAAE,KAAsB,GACnC,KAAK;CAOT;AAED,qBAAa,UAAU;IACrB,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,YAAY,GAAE,KAAqB,GAAG,KAAK;CAO7E;AAED,qBAAa,4BAA4B,CACvC,KAAK,CACL,SAAQ,gBAAgB,CAAC,KAAK,CAAC;aAGb,MAAM,EAAE,MAAM;gBAD9B,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,EACd,MAAM,EAAE,MAAM,EAC9B,kBAAkB,GAAE,KAAgB;IAKtC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK;CAKzC;AAED,qBAAa,mBAAoB,SAAQ,4BAA4B,CAAC,KAAK,CAAC;gBACvD,kBAAkB,GAAE,KAAgB;CAGxD"}
@@ -0,0 +1,52 @@
1
+ import { Field, Poseidon } from "o1js";
2
+ import { hashWithPrefix, prefixToField } from "@proto-kit/common";
3
+ import { ProvableHashList } from "./ProvableHashList";
4
+ function salt(prefix) {
5
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
6
+ return Poseidon.update([Field(0), Field(0), Field(0)], [prefixToField(prefix)]);
7
+ }
8
+ export const MINA_EVENT_PREFIXES = {
9
+ event: "MinaZkappEvent******",
10
+ events: "MinaZkappEvents*****",
11
+ sequenceEvents: "MinaZkappSeqEvents**",
12
+ };
13
+ export function emptyActions() {
14
+ return salt("MinaZkappActionsEmpty")[0];
15
+ }
16
+ export function emptyEvents() {
17
+ return salt("MinaZkappEventsEmpty")[0];
18
+ }
19
+ export class MinaActions {
20
+ static actionHash(action, previousHash = emptyActions()) {
21
+ const actionDataHash = hashWithPrefix(MINA_EVENT_PREFIXES.event, action);
22
+ return hashWithPrefix(MINA_EVENT_PREFIXES.sequenceEvents, [
23
+ previousHash,
24
+ actionDataHash,
25
+ ]);
26
+ }
27
+ }
28
+ export class MinaEvents {
29
+ static eventHash(event, previousHash = emptyEvents()) {
30
+ const actionDataHash = hashWithPrefix(MINA_EVENT_PREFIXES.event, event);
31
+ return hashWithPrefix(MINA_EVENT_PREFIXES.events, [
32
+ previousHash,
33
+ actionDataHash,
34
+ ]);
35
+ }
36
+ }
37
+ export class MinaPrefixedProvableHashList extends ProvableHashList {
38
+ constructor(valueType, prefix, internalCommitment = Field(0)) {
39
+ super(valueType, internalCommitment);
40
+ this.prefix = prefix;
41
+ }
42
+ hash(elements) {
43
+ const init = salt(this.prefix);
44
+ const digest = Poseidon.update(init, elements);
45
+ return digest[0];
46
+ }
47
+ }
48
+ export class MinaActionsHashList extends MinaPrefixedProvableHashList {
49
+ constructor(internalCommitment = Field(0)) {
50
+ super(Field, MINA_EVENT_PREFIXES.sequenceEvents, internalCommitment);
51
+ }
52
+ }
@@ -0,0 +1,8 @@
1
+ import { Field, ProvablePure } from "o1js";
2
+ import { ProvableHashList } from "./ProvableHashList.js";
3
+ export declare class PrefixedProvableHashList<Value> extends ProvableHashList<Value> {
4
+ private readonly prefix;
5
+ constructor(valueType: ProvablePure<Value>, prefix: string, internalCommitment?: Field);
6
+ protected hash(elements: Field[]): Field;
7
+ }
8
+ //# sourceMappingURL=PrefixedProvableHashList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrefixedProvableHashList.d.ts","sourceRoot":"","sources":["../../src/utils/PrefixedProvableHashList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAY,MAAM,MAAM,CAAC;AAErD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD,qBAAa,wBAAwB,CAAC,KAAK,CAAE,SAAQ,gBAAgB,CAAC,KAAK,CAAC;IAC1E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;gBAG7B,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,EAC9B,MAAM,EAAE,MAAM,EACd,kBAAkB,GAAE,KAAgB;IAMtC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK;CAGzC"}
@@ -0,0 +1,12 @@
1
+ import { Field, Poseidon } from "o1js";
2
+ import { ProvableHashList } from "./ProvableHashList.js";
3
+ import { stringToField } from "./utils";
4
+ export class PrefixedProvableHashList extends ProvableHashList {
5
+ constructor(valueType, prefix, internalCommitment = Field(0)) {
6
+ super(valueType, internalCommitment);
7
+ this.prefix = stringToField(prefix);
8
+ }
9
+ hash(elements) {
10
+ return Poseidon.hash([this.prefix, ...elements]);
11
+ }
12
+ }
@@ -0,0 +1,27 @@
1
+ import { Field, Bool, ProvablePure } from "o1js";
2
+ /**
3
+ * Utilities for creating a hash list from a given value type.
4
+ */
5
+ export declare abstract class ProvableHashList<Value> {
6
+ protected readonly valueType: ProvablePure<Value>;
7
+ commitment: Field;
8
+ constructor(valueType: ProvablePure<Value>, commitment?: Field);
9
+ protected abstract hash(elements: Field[]): Field;
10
+ /**
11
+ * Converts the provided value to Field[] and appends it to
12
+ * the current hashlist.
13
+ *
14
+ * @param value - Value to be appended to the hash list
15
+ * @returns Current hash list.
16
+ */
17
+ push(value: Value): this;
18
+ pushIf(value: Value, condition: Bool): this;
19
+ /**
20
+ * @returns Traling hash of the current hashlist.
21
+ */
22
+ toField(): import("o1js/dist/node/lib/provable/field").Field;
23
+ }
24
+ export declare class DefaultProvableHashList<Value> extends ProvableHashList<Value> {
25
+ hash(elements: Field[]): Field;
26
+ }
27
+ //# sourceMappingURL=ProvableHashList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProvableHashList.d.ts","sourceRoot":"","sources":["../../src/utils/ProvableHashList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAY,IAAI,EAAY,YAAY,EAAE,MAAM,MAAM,CAAC;AAErE;;GAEG;AACH,8BAAsB,gBAAgB,CAAC,KAAK;IAExC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC;IAC1C,UAAU,EAAE,KAAK;gBADL,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,EAC1C,UAAU,GAAE,KAAgB;IAGrC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK;IAEjD;;;;;;OAMG;IACI,IAAI,CAAC,KAAK,EAAE,KAAK;IAQjB,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI;IAS3C;;OAEG;IACI,OAAO;CAGf;AAED,qBAAa,uBAAuB,CAAC,KAAK,CAAE,SAAQ,gBAAgB,CAAC,KAAK,CAAC;IAClE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK;CAGtC"}
@@ -0,0 +1,43 @@
1
+ import { Field, Poseidon, Provable } from "o1js";
2
+ /**
3
+ * Utilities for creating a hash list from a given value type.
4
+ */
5
+ export class ProvableHashList {
6
+ constructor(valueType, commitment = Field(0)) {
7
+ this.valueType = valueType;
8
+ this.commitment = commitment;
9
+ }
10
+ /**
11
+ * Converts the provided value to Field[] and appends it to
12
+ * the current hashlist.
13
+ *
14
+ * @param value - Value to be appended to the hash list
15
+ * @returns Current hash list.
16
+ */
17
+ push(value) {
18
+ this.commitment = this.hash([
19
+ this.commitment,
20
+ ...this.valueType.toFields(value),
21
+ ]);
22
+ return this;
23
+ }
24
+ pushIf(value, condition) {
25
+ const newCommitment = this.hash([
26
+ this.commitment,
27
+ ...this.valueType.toFields(value),
28
+ ]);
29
+ this.commitment = Provable.if(condition, newCommitment, this.commitment);
30
+ return this;
31
+ }
32
+ /**
33
+ * @returns Traling hash of the current hashlist.
34
+ */
35
+ toField() {
36
+ return this.commitment;
37
+ }
38
+ }
39
+ export class DefaultProvableHashList extends ProvableHashList {
40
+ hash(elements) {
41
+ return Poseidon.hash(elements);
42
+ }
43
+ }
@@ -0,0 +1,14 @@
1
+ import { Bool, Field } from "o1js";
2
+ import { ProvableHashList } from "./ProvableHashList";
3
+ export declare class ProvableReductionHashList<Value> extends ProvableHashList<Value> {
4
+ unconstrainedList: Value[];
5
+ private constrainedLastValue;
6
+ private preimage;
7
+ pushAndReduce(value: Value, reduce: (previous: Value) => [Value, Bool]): {
8
+ popLast: Bool;
9
+ value: Value;
10
+ };
11
+ pushIf(value: Value, condition: Bool): this;
12
+ hash(elements: Field[]): Field;
13
+ }
14
+ //# sourceMappingURL=ProvableReductionHashList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProvableReductionHashList.d.ts","sourceRoot":"","sources":["../../src/utils/ProvableReductionHashList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAsB,MAAM,MAAM,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,qBAAa,yBAAyB,CAAC,KAAK,CAAE,SAAQ,gBAAgB,CAAC,KAAK,CAAC;IACpE,iBAAiB,EAAE,KAAK,EAAE,CAAM;IAEvC,OAAO,CAAC,oBAAoB,CAAgC;IAE5D,OAAO,CAAC,QAAQ,CAA0B;IAEnC,aAAa,CAClB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GACzC;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE;IA4C3B,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI;IAMpC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK;CAGtC"}