@silvana-one/prover 0.2.0

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 (98) hide show
  1. package/README.md +1 -0
  2. package/dist/node/config.d.ts +8 -0
  3. package/dist/node/config.js +9 -0
  4. package/dist/node/config.js.map +1 -0
  5. package/dist/node/index.cjs +551 -0
  6. package/dist/node/index.d.ts +4 -0
  7. package/dist/node/index.js +5 -0
  8. package/dist/node/index.js.map +1 -0
  9. package/dist/node/networks.d.ts +32 -0
  10. package/dist/node/networks.js +81 -0
  11. package/dist/node/networks.js.map +1 -0
  12. package/dist/node/utils/base64.d.ts +6 -0
  13. package/dist/node/utils/base64.js +83 -0
  14. package/dist/node/utils/base64.js.map +1 -0
  15. package/dist/node/utils/graphql.d.ts +11 -0
  16. package/dist/node/utils/graphql.js +225 -0
  17. package/dist/node/utils/graphql.js.map +1 -0
  18. package/dist/node/utils/index.d.ts +3 -0
  19. package/dist/node/utils/index.js +4 -0
  20. package/dist/node/utils/index.js.map +1 -0
  21. package/dist/node/utils/utils.d.ts +8 -0
  22. package/dist/node/utils/utils.js +61 -0
  23. package/dist/node/utils/utils.js.map +1 -0
  24. package/dist/node/worker/cloud.d.ts +250 -0
  25. package/dist/node/worker/cloud.js +54 -0
  26. package/dist/node/worker/cloud.js.map +1 -0
  27. package/dist/node/worker/index.d.ts +5 -0
  28. package/dist/node/worker/index.js +6 -0
  29. package/dist/node/worker/index.js.map +1 -0
  30. package/dist/node/worker/job.d.ts +87 -0
  31. package/dist/node/worker/job.js +2 -0
  32. package/dist/node/worker/job.js.map +1 -0
  33. package/dist/node/worker/task.d.ts +32 -0
  34. package/dist/node/worker/task.js +2 -0
  35. package/dist/node/worker/task.js.map +1 -0
  36. package/dist/node/worker/transaction.d.ts +11 -0
  37. package/dist/node/worker/transaction.js +8 -0
  38. package/dist/node/worker/transaction.js.map +1 -0
  39. package/dist/node/worker/worker.d.ts +40 -0
  40. package/dist/node/worker/worker.js +53 -0
  41. package/dist/node/worker/worker.js.map +1 -0
  42. package/dist/tsconfig.tsbuildinfo +1 -0
  43. package/dist/tsconfig.web.tsbuildinfo +1 -0
  44. package/dist/web/config.d.ts +8 -0
  45. package/dist/web/config.js +9 -0
  46. package/dist/web/config.js.map +1 -0
  47. package/dist/web/index.d.ts +4 -0
  48. package/dist/web/index.js +5 -0
  49. package/dist/web/index.js.map +1 -0
  50. package/dist/web/networks.d.ts +32 -0
  51. package/dist/web/networks.js +81 -0
  52. package/dist/web/networks.js.map +1 -0
  53. package/dist/web/utils/base64.d.ts +6 -0
  54. package/dist/web/utils/base64.js +83 -0
  55. package/dist/web/utils/base64.js.map +1 -0
  56. package/dist/web/utils/graphql.d.ts +11 -0
  57. package/dist/web/utils/graphql.js +225 -0
  58. package/dist/web/utils/graphql.js.map +1 -0
  59. package/dist/web/utils/index.d.ts +3 -0
  60. package/dist/web/utils/index.js +4 -0
  61. package/dist/web/utils/index.js.map +1 -0
  62. package/dist/web/utils/utils.d.ts +8 -0
  63. package/dist/web/utils/utils.js +61 -0
  64. package/dist/web/utils/utils.js.map +1 -0
  65. package/dist/web/worker/cloud.d.ts +250 -0
  66. package/dist/web/worker/cloud.js +54 -0
  67. package/dist/web/worker/cloud.js.map +1 -0
  68. package/dist/web/worker/index.d.ts +5 -0
  69. package/dist/web/worker/index.js +6 -0
  70. package/dist/web/worker/index.js.map +1 -0
  71. package/dist/web/worker/job.d.ts +87 -0
  72. package/dist/web/worker/job.js +2 -0
  73. package/dist/web/worker/job.js.map +1 -0
  74. package/dist/web/worker/task.d.ts +32 -0
  75. package/dist/web/worker/task.js +2 -0
  76. package/dist/web/worker/task.js.map +1 -0
  77. package/dist/web/worker/transaction.d.ts +11 -0
  78. package/dist/web/worker/transaction.js +8 -0
  79. package/dist/web/worker/transaction.js.map +1 -0
  80. package/dist/web/worker/worker.d.ts +40 -0
  81. package/dist/web/worker/worker.js +53 -0
  82. package/dist/web/worker/worker.js.map +1 -0
  83. package/package.json +59 -0
  84. package/src/LICENSE +201 -0
  85. package/src/README.md +77 -0
  86. package/src/config.ts +10 -0
  87. package/src/index.ts +4 -0
  88. package/src/networks.ts +130 -0
  89. package/src/utils/base64.ts +87 -0
  90. package/src/utils/graphql.ts +252 -0
  91. package/src/utils/index.ts +3 -0
  92. package/src/utils/utils.ts +79 -0
  93. package/src/worker/cloud.ts +326 -0
  94. package/src/worker/index.ts +5 -0
  95. package/src/worker/job.ts +123 -0
  96. package/src/worker/task.ts +45 -0
  97. package/src/worker/transaction.ts +12 -0
  98. package/src/worker/worker.ts +62 -0
@@ -0,0 +1,326 @@
1
+ import { blockchain } from "../networks.js";
2
+ import { JobData } from "./job.js";
3
+ import { TransactionMetadata } from "./transaction.js";
4
+
5
+ /**
6
+ * Interface for the deployer key pair
7
+ * Used to get the public and private keys of the deployer for test networks only.
8
+ * Devnet and Zeko are supported.
9
+ */
10
+ export interface DeployerKeyPair {
11
+ /** The public key of the deployer */
12
+ publicKey: string;
13
+
14
+ /** The private key of the deployer */
15
+ privateKey: string;
16
+ }
17
+
18
+ /**
19
+ * Interface for the cloud transaction
20
+ * Used to get the transaction id, the transaction, and the time received
21
+ */
22
+ export interface CloudTransaction {
23
+ /** The transaction id */
24
+ txId: string;
25
+
26
+ /** The transaction */
27
+ transaction: string;
28
+
29
+ /** The time received */
30
+ timeReceived: number;
31
+
32
+ /** The status of the transaction */
33
+ status: string;
34
+ }
35
+
36
+ /*
37
+ * Abstract class for the cloud service
38
+ * Used to define the cloud methods and properties
39
+ * Should be implemented by for local testing and for the zkCloudWorker in the cloud
40
+ * @param id the id of the user
41
+ * @param jobId the job id
42
+ * @param stepId the step id
43
+ * @param taskId the task id
44
+ * @param cache the cache folder. Use it to get the Cache object: cache = Cache.FileSystem(this.cloud.cache);
45
+ * @param developer the developer id
46
+ * @param repo the repo id
47
+ * @param task the task id
48
+ * @param userId the user id
49
+ * @param args the arguments, should be a string or serialized JSON
50
+ * @param metadata the metadata, should be a string or serialized JSON
51
+ * @param chain the blockchain network
52
+ * @param isLocalCloud a boolean to check if the cloud is local or not
53
+ */
54
+ export abstract class Cloud {
55
+ readonly id: string;
56
+ readonly jobId: string;
57
+ readonly stepId: string;
58
+ readonly taskId: string;
59
+ readonly cache: string;
60
+ readonly developer: string;
61
+ readonly repo: string;
62
+ readonly task?: string;
63
+ readonly userId?: string;
64
+ readonly args?: string;
65
+ readonly metadata?: string;
66
+ readonly chain: blockchain;
67
+ readonly isLocalCloud: boolean;
68
+
69
+ /**
70
+ * Constructor for the Cloud class
71
+ * @param params the parameters for the Cloud class
72
+ * @param params.id the id of the user
73
+ * @param params.jobId the job id
74
+ * @param params.stepId the step id
75
+ * @param params.taskId the task id
76
+ * @param params.cache the cache folder. Use it to get the Cache object: cache = Cache.FileSystem(this.cloud.cache);
77
+ * @param params.developer the developer id
78
+ * @param params.repo the repo id
79
+ * @param params.task the task id
80
+ * @param params.userId the user id
81
+ * @param params.args the arguments, should be a string or serialized JSON
82
+ * @param params.metadata the metadata, should be a string or serialized JSON
83
+ * @param params.chain the blockchain network
84
+ * @param params.isLocalCloud a boolean to check if the cloud is local or not
85
+ */
86
+ constructor(params: {
87
+ id: string;
88
+ jobId: string;
89
+ stepId: string;
90
+ taskId: string;
91
+ cache: string;
92
+ developer: string;
93
+ repo: string;
94
+ task?: string;
95
+ userId?: string;
96
+ args?: string;
97
+ metadata?: string;
98
+ isLocalCloud?: boolean;
99
+ chain: blockchain;
100
+ }) {
101
+ const {
102
+ id,
103
+ jobId,
104
+ stepId,
105
+ taskId,
106
+ cache,
107
+ developer,
108
+ repo,
109
+ task,
110
+ userId,
111
+ args,
112
+ metadata,
113
+ isLocalCloud,
114
+ chain,
115
+ } = params;
116
+ this.id = id;
117
+ this.jobId = jobId;
118
+ this.stepId = stepId;
119
+ this.taskId = taskId;
120
+ this.cache = cache;
121
+ this.developer = developer;
122
+ this.repo = repo;
123
+ this.task = task;
124
+ this.userId = userId;
125
+ this.args = args;
126
+ this.metadata = metadata;
127
+ this.isLocalCloud = isLocalCloud ?? false;
128
+ this.chain = chain;
129
+ }
130
+
131
+ /**
132
+ * Abstract method to get the deployer key pair
133
+ * Used to get the public and private keys of the deployer for test networks only
134
+ * Devnet and Zeko are supported
135
+ * @returns the deployer key pair
136
+ */
137
+ abstract getDeployer(): Promise<DeployerKeyPair | undefined>;
138
+
139
+ /**
140
+ * Abstract method to release the deployer
141
+ * @param params the public key of the deployer and the transactions hashes
142
+ * Used to release the deployer after the transactions are sent to the blockchain
143
+ * @param params.publicKey the public key of the deployer
144
+ * @param params.txsHashes the transactions hashes
145
+ */
146
+ abstract releaseDeployer(params: {
147
+ publicKey: string;
148
+ txsHashes: string[];
149
+ }): Promise<void>;
150
+
151
+ /**
152
+ * Abstract method to get the data by key
153
+ * Used to get the data by key from the cloud storage
154
+ * @param key the key
155
+ * @returns the value of the key
156
+ */
157
+ abstract getDataByKey(key: string): Promise<string | undefined>;
158
+
159
+ /**
160
+ * Abstract method to save the data by key
161
+ * Used to save the data by key to the cloud storage
162
+ * @param key the key
163
+ * @param value the value
164
+ */
165
+ abstract saveDataByKey(key: string, value: string | undefined): Promise<void>;
166
+
167
+ /**
168
+ * Abstract method to save the file
169
+ * Used to save the file to the cloud storage
170
+ * @param filename the filename
171
+ * @param value the value
172
+ */
173
+ abstract saveFile(filename: string, value: Buffer): Promise<void>;
174
+
175
+ /**
176
+ * Abstract method to load the file
177
+ * Used to load the file from the cloud storage
178
+ * @param filename the filename
179
+ * @returns the value of the file
180
+ */
181
+ abstract loadFile(filename: string): Promise<Buffer | undefined>;
182
+
183
+ /**
184
+ * Abstract method to encrypt the data
185
+ * @param params
186
+ * @param params.data the data
187
+ * @param params.context the context
188
+ * @param params.keyId the key id, optional
189
+ */
190
+ abstract encrypt(params: {
191
+ data: string;
192
+ context: string;
193
+ keyId?: string;
194
+ }): Promise<string | undefined>;
195
+
196
+ /**
197
+ * Abstract method to decrypt the data
198
+ * @param params
199
+ * @param params.data the data
200
+ * @param params.context the context
201
+ * @param params.keyId the key id, optional
202
+ */
203
+ abstract decrypt(params: {
204
+ data: string;
205
+ context: string;
206
+ keyId?: string;
207
+ }): Promise<string | undefined>;
208
+
209
+ /**
210
+ * Abstract method to calculate the recursive proof
211
+ * Used to calculate the recursive proof
212
+ * @param data the data
213
+ * @param data.transactions the transactions
214
+ * @param data.task the task
215
+ * @param data.userId the user id
216
+ * @param data.args the arguments
217
+ * @param data.metadata the metadata
218
+ * @returns the proof
219
+ */
220
+ abstract recursiveProof(data: {
221
+ transactions: string[];
222
+ task?: string;
223
+ userId?: string;
224
+ args?: string;
225
+ metadata?: string;
226
+ }): Promise<string>;
227
+
228
+ /**
229
+ * Abstract method to execute the transactions
230
+ * Used to execute the transactions
231
+ * @param data the data
232
+ * @param data.transactions the transactions
233
+ * @param data.task the task
234
+ * @param data.userId the user id
235
+ * @param data.args the arguments
236
+ * @param data.metadata the metadata
237
+ * @returns the result
238
+ */
239
+ abstract execute(data: {
240
+ transactions: string[];
241
+ task: string;
242
+ userId?: string;
243
+ args?: string;
244
+ metadata?: string;
245
+ }): Promise<string>;
246
+
247
+ /**
248
+ * Abstract method to add the task
249
+ * Used to add the task
250
+ * @param data the data
251
+ * @param data.task the task
252
+ * @param data.startTime the start time
253
+ * @param data.userId the user id
254
+ * @param data.args the arguments
255
+ * @param data.metadata the metadata
256
+ * @param data.maxAttempts the maximum attempts
257
+ * @returns the task id
258
+ */
259
+ abstract addTask(data: {
260
+ task: string;
261
+ startTime?: number;
262
+ userId?: string;
263
+ args?: string;
264
+ metadata?: string;
265
+ maxAttempts?: number;
266
+ }): Promise<string>;
267
+
268
+ /**
269
+ * Abstract method to send the transactions
270
+ * @param transactions
271
+ */
272
+ abstract sendTransactions(
273
+ transactions: string[] | CloudTransaction[]
274
+ ): Promise<CloudTransaction[]>;
275
+
276
+ /**
277
+ * Abstract method to delete the transaction
278
+ * Used to delete the transaction
279
+ * @param txId the transaction id
280
+ */
281
+ abstract deleteTransaction(txId: string): Promise<void>;
282
+
283
+ /**
284
+ * Abstract method to get the transactions
285
+ * Used to get the transactions
286
+ * @returns the transactions
287
+ */
288
+ abstract getTransactions(): Promise<CloudTransaction[]>;
289
+
290
+ /**
291
+ * Publish the transaction metadata in human-readable format
292
+ * @param params
293
+ * @param params.txId the transaction id
294
+ * @param params.metadata the metadata
295
+ */
296
+ abstract publishTransactionMetadata(params: {
297
+ txId: string;
298
+ metadata: TransactionMetadata;
299
+ }): Promise<void>;
300
+
301
+ /**
302
+ * Abstract method to delete the task
303
+ * Used to delete the task
304
+ * @param taskId the task id
305
+ */
306
+ abstract deleteTask(taskId: string): Promise<void>;
307
+
308
+ /**
309
+ * Abstract method to process the tasks
310
+ */
311
+ abstract processTasks(): Promise<void>;
312
+
313
+ /**
314
+ * Abstract method to get the job result
315
+ * Used to get the job result
316
+ * @param jobId the job id
317
+ * @returns the job result
318
+ */
319
+ abstract jobResult(jobId: string): Promise<JobData | undefined>;
320
+
321
+ /**
322
+ * forces the worker to restart the AWS lambda container
323
+ * See https://github.com/o1-labs/o1js/issues/1651
324
+ */
325
+ abstract forceWorkerRestart(): Promise<void>;
326
+ }
@@ -0,0 +1,5 @@
1
+ export * from "./cloud.js";
2
+ export * from "./job.js";
3
+ export * from "./task.js";
4
+ export * from "./transaction.js";
5
+ export * from "./worker.js";
@@ -0,0 +1,123 @@
1
+ import { blockchain } from "../networks.js";
2
+ export type JobStatus =
3
+ | "created"
4
+ | "started"
5
+ | "finished"
6
+ | "failed"
7
+ | "used"
8
+ | "restarted";
9
+
10
+ /**
11
+ * LogStream is a subset of the log stream data returned by AWS CloudWatch Logs when running the worker.
12
+ * @see {@link https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/cloudwatch-logs/command/GetLogEventsCommand/}
13
+ *
14
+ * Example:
15
+ * ```
16
+ * {
17
+ * logGroupName: '/aws/lambda/zkcloudworker-dev-test',
18
+ * logStreamName: '2024/05/09/[$LATEST]52d048f64e894d2e8ba2800df93629c5',
19
+ * awsRequestId: '581d0d45-9165-47e8-84d9-678599938811'
20
+ * }
21
+ * ```
22
+ */
23
+ export interface LogStream {
24
+ /** The log group name */
25
+ logGroupName: string;
26
+
27
+ /** The log stream name */
28
+ logStreamName: string;
29
+
30
+ /** The AWS request ID */
31
+ awsRequestId: string;
32
+ }
33
+
34
+ /**
35
+ * JobData is the data structure for a job, keeping track of the job status, result, logs, and metadata.
36
+ */
37
+ export interface JobData {
38
+ /** The ID of the user */
39
+ id: string;
40
+
41
+ /** The ID of the job */
42
+ jobId: string;
43
+
44
+ /** The ID of the task (optional) */
45
+ taskId?: string;
46
+
47
+ /** The developer of the repo executing the job */
48
+ developer: string;
49
+
50
+ /** The repo executing the job */
51
+ repo: string;
52
+
53
+ /** The task to execute (optional) */
54
+ task?: string;
55
+
56
+ /** The ID of the user (optional) */
57
+ userId?: string;
58
+
59
+ /** The arguments for the job (optional) */
60
+ args?: string;
61
+
62
+ /** The metadata for the job (optional) */
63
+ metadata?: string;
64
+
65
+ /** The blockchain to execute the job on */
66
+ chain: blockchain;
67
+
68
+ /** The filename where transactions data is stored (optional) */
69
+ filename?: string;
70
+
71
+ /** The number of transactions */
72
+ txNumber: number;
73
+
74
+ /** The time the job was created */
75
+ timeCreated: number;
76
+
77
+ /** The time the job was started (optional) */
78
+ timeStarted?: number;
79
+
80
+ /** The time the job was finished (optional) */
81
+ timeFinished?: number;
82
+
83
+ /** The time the job failed (optional) */
84
+ timeFailed?: number;
85
+
86
+ /** The time the job result was used (optional) */
87
+ timeUsed?: number;
88
+
89
+ /** The status of the job */
90
+ jobStatus: JobStatus;
91
+
92
+ /** The duration the job was billed for in ms (optional) */
93
+ billedDuration?: number;
94
+
95
+ /** The result of the job (optional) */
96
+ result?: string;
97
+
98
+ /** The log streams of the job (optional) */
99
+ logStreams?: LogStream[];
100
+
101
+ /** The logs of the job (optional) */
102
+ logs?: string[];
103
+
104
+ /** Whether the logs are full (optional) */
105
+ isFullLog?: boolean;
106
+ }
107
+
108
+ /**
109
+ * JobEvent is the data structure for a job events, keeping track of the job status changes.
110
+ */
111
+ export interface JobEvent {
112
+ /** The ID of the job */
113
+ jobId: string;
114
+
115
+ /** The time the event occurred */
116
+ eventTime: number;
117
+
118
+ /** The status of the job */
119
+ jobStatus: JobStatus;
120
+
121
+ /** The result of the job (optional) */
122
+ result?: string;
123
+ }
@@ -0,0 +1,45 @@
1
+ import { blockchain } from "../networks.js";
2
+
3
+ /**
4
+ * TaskData is the data structure for a task, keeping track of the task status, result, logs, and metadata.
5
+ */
6
+ export interface TaskData {
7
+ /** The ID of the user */
8
+ id: string;
9
+
10
+ /** The ID of the task */
11
+ taskId: string;
12
+
13
+ /** The time the task was started (optional) */
14
+ startTime?: number;
15
+
16
+ /** The time the task was created */
17
+ timeCreated: number;
18
+
19
+ /** The maximum number of attempts (default is 5) (optional) */
20
+ maxAttempts?: number;
21
+
22
+ /** The number of attempts */
23
+ attempts: number;
24
+
25
+ /** The developer of the repo executing the task */
26
+ developer: string;
27
+
28
+ /** The repo executing the task */
29
+ repo: string;
30
+
31
+ /** The task to execute */
32
+ task: string;
33
+
34
+ /** The ID of the user (optional) */
35
+ userId?: string;
36
+
37
+ /** The arguments for the task (optional) */
38
+ args?: string;
39
+
40
+ /** The metadata for the task (optional) */
41
+ metadata?: string;
42
+
43
+ /** The blockchain to execute the task on */
44
+ chain: blockchain;
45
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Human-readable transaction metadata
3
+ * events: the events
4
+ * actions: the actions
5
+ * custom: the custom metadata defined by the developer
6
+ */
7
+
8
+ export interface TransactionMetadata {
9
+ events?: object[];
10
+ actions?: object[];
11
+ custom?: object;
12
+ }
@@ -0,0 +1,62 @@
1
+ import { Cloud, CloudTransaction } from "./cloud.js";
2
+
3
+ /**
4
+ * Abstract class for the zkCloudWorker
5
+ * Used to define the zkCloudWorker methods and properties
6
+ * Should be implemented for by the developer for the zkCloudWorker in the cloud
7
+ */
8
+ export abstract class zkCloudWorker {
9
+ /** cloud: the cloud instance */
10
+ readonly cloud: Cloud;
11
+
12
+ /**
13
+ * Constructor for the zkCloudWorker class
14
+ * @param cloud the cloud instance provided by the zkCloudWorker in the local environment or in the cloud
15
+ */
16
+ constructor(cloud: Cloud) {
17
+ this.cloud = cloud;
18
+ }
19
+
20
+ // Those methods should be implemented for recursive proofs calculations
21
+ /**
22
+ * Creates a new proof from a transaction
23
+ * @param transaction the transaction
24
+ * @returns the serialized proof
25
+ */
26
+ async create(transaction: string): Promise<string | undefined> {
27
+ return undefined;
28
+ }
29
+
30
+ /**
31
+ * Merges two proofs
32
+ * @param proof1 the first proof
33
+ * @param proof2 the second proof
34
+ * @returns the merged proof
35
+ */
36
+ async merge(proof1: string, proof2: string): Promise<string | undefined> {
37
+ return undefined;
38
+ }
39
+
40
+ // Those methods should be implemented for anything except for recursive proofs
41
+ /**
42
+ * Executes the transactions
43
+ * @param transactions the transactions, can be empty list
44
+ * @returns the result
45
+ */
46
+ async execute(transactions: string[]): Promise<string | undefined> {
47
+ return undefined;
48
+ }
49
+
50
+ /* Process the transactions received by the cloud
51
+ * @param transactions: the transactions
52
+ */
53
+ async processTransactions(transactions: CloudTransaction[]): Promise<void> {}
54
+
55
+ /**
56
+ * process the task defined by the developer
57
+ * @returns the result
58
+ */
59
+ async task(): Promise<string | undefined> {
60
+ return undefined;
61
+ }
62
+ }