@sig-net/midnight-contract 0.0.6 → 0.0.7
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.
- package/README.md +1 -1
- package/dist/managed/compiler/contract-info.json +148 -70
- package/dist/managed/compiler/contract-manifest.json +42 -42
- package/dist/managed/contract/index.d.ts +85 -68
- package/dist/managed/contract/index.js +559 -407
- package/dist/managed/contract/index.js.map +2 -2
- package/dist/managed/keys/postRespondBidirectional.prover +0 -0
- package/dist/managed/keys/postRespondBidirectional.verifier +0 -0
- package/dist/managed/keys/postSignatureResponse.prover +0 -0
- package/dist/managed/keys/postSignatureResponse.verifier +0 -0
- package/dist/managed/keys/signBidirectionalEvent.prover +0 -0
- package/dist/managed/keys/signBidirectionalEvent.verifier +0 -0
- package/dist/managed/zkir/postRespondBidirectional.bzkir +0 -0
- package/dist/managed/zkir/postRespondBidirectional.zkir +43 -131
- package/dist/managed/zkir/postSignatureResponse.bzkir +0 -0
- package/dist/managed/zkir/postSignatureResponse.zkir +20 -20
- package/dist/managed/zkir/signBidirectionalEvent.bzkir +0 -0
- package/dist/managed/zkir/signBidirectionalEvent.zkir +56 -0
- package/dist/witnesses.js +2 -2
- package/dist/witnesses.js.map +1 -1
- package/package.json +3 -3
- package/dist/managed/keys/notifyBidirectionalSignatureRequest.prover +0 -0
- package/dist/managed/keys/notifyBidirectionalSignatureRequest.verifier +0 -0
- package/dist/managed/zkir/notifyBidirectionalSignatureRequest.bzkir +0 -0
- package/dist/managed/zkir/notifyBidirectionalSignatureRequest.zkir +0 -27
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
The central [Sig Network](https://sig.network) signet contract on the [Midnight blockchain](https://midnight.network): the singleton that exposes the MPC's [sign bidirectional flow](https://docs.sig.network/architecture/sign-bidirectional) to other Midnight contracts. The MPC posts back to it and clients poll it:
|
|
4
4
|
|
|
5
5
|
- **Signature responses**: an unauthenticated counted log; callers verify the signatures off-chain or in their own circuits.
|
|
6
|
-
- **Remote execution responses**:
|
|
6
|
+
- **Remote execution responses**: Schnorr attestations by the MPC's Jubjub key, verified in-circuit at post time.
|
|
7
7
|
- **Request-notification registry**: how the MPC discovers new signature requests.
|
|
8
8
|
|
|
9
9
|
## What is in it
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"runtime-version": "0.18.0-rc.1",
|
|
5
5
|
"circuits": [
|
|
6
6
|
{
|
|
7
|
-
"name": "
|
|
7
|
+
"name": "signBidirectionalEvent",
|
|
8
8
|
"pure": false,
|
|
9
9
|
"proof": true,
|
|
10
10
|
"arguments": [
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"name": "notification",
|
|
24
24
|
"type": {
|
|
25
25
|
"type-name": "Struct",
|
|
26
|
-
"name": "
|
|
26
|
+
"name": "SignBidirectionalEventNotification",
|
|
27
27
|
"elements": [
|
|
28
28
|
{
|
|
29
29
|
"name": "version",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"name": "payload",
|
|
37
37
|
"type": {
|
|
38
38
|
"type-name": "Bytes",
|
|
39
|
-
"length":
|
|
39
|
+
"length": 128
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
]
|
|
@@ -44,8 +44,27 @@
|
|
|
44
44
|
}
|
|
45
45
|
],
|
|
46
46
|
"result-type": {
|
|
47
|
-
"type-name": "
|
|
48
|
-
"
|
|
47
|
+
"type-name": "Struct",
|
|
48
|
+
"name": "SignetMapKey",
|
|
49
|
+
"elements": [
|
|
50
|
+
{
|
|
51
|
+
"name": "count",
|
|
52
|
+
"type": {
|
|
53
|
+
"type-name": "Uint",
|
|
54
|
+
"maxval": 18446744073709551615
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"name": "requestId",
|
|
59
|
+
"type": {
|
|
60
|
+
"type-name": "Alias",
|
|
61
|
+
"name": "RequestId",
|
|
62
|
+
"type": {
|
|
63
|
+
"type-name": "Bytes",
|
|
64
|
+
"length": 32
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
49
68
|
]
|
|
50
69
|
}
|
|
51
70
|
},
|
|
@@ -66,10 +85,10 @@
|
|
|
66
85
|
}
|
|
67
86
|
},
|
|
68
87
|
{
|
|
69
|
-
"name": "
|
|
88
|
+
"name": "signatureRespondedEvent",
|
|
70
89
|
"type": {
|
|
71
90
|
"type-name": "Struct",
|
|
72
|
-
"name": "
|
|
91
|
+
"name": "SignatureRespondedEvent",
|
|
73
92
|
"elements": [
|
|
74
93
|
{
|
|
75
94
|
"name": "bigRx",
|
|
@@ -126,10 +145,10 @@
|
|
|
126
145
|
}
|
|
127
146
|
},
|
|
128
147
|
{
|
|
129
|
-
"name": "
|
|
148
|
+
"name": "respondBidirectionalEvent",
|
|
130
149
|
"type": {
|
|
131
150
|
"type-name": "Struct",
|
|
132
|
-
"name": "
|
|
151
|
+
"name": "RespondBidirectionalEvent",
|
|
133
152
|
"elements": [
|
|
134
153
|
{
|
|
135
154
|
"name": "serializedOutput",
|
|
@@ -146,32 +165,28 @@
|
|
|
146
165
|
}
|
|
147
166
|
},
|
|
148
167
|
{
|
|
149
|
-
"name": "
|
|
168
|
+
"name": "r",
|
|
150
169
|
"type": {
|
|
151
170
|
"type-name": "Bytes",
|
|
152
171
|
"length": 32
|
|
153
172
|
}
|
|
154
173
|
},
|
|
155
174
|
{
|
|
156
|
-
"name": "
|
|
175
|
+
"name": "s",
|
|
157
176
|
"type": {
|
|
158
177
|
"type-name": "Bytes",
|
|
159
178
|
"length": 32
|
|
160
179
|
}
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
"name": "recoveryId",
|
|
183
|
+
"type": {
|
|
184
|
+
"type-name": "Uint",
|
|
185
|
+
"maxval": 255
|
|
186
|
+
}
|
|
161
187
|
}
|
|
162
188
|
]
|
|
163
189
|
}
|
|
164
|
-
},
|
|
165
|
-
{
|
|
166
|
-
"name": "pk",
|
|
167
|
-
"type": {
|
|
168
|
-
"type-name": "Alias",
|
|
169
|
-
"name": "Secp256k1Point",
|
|
170
|
-
"type": {
|
|
171
|
-
"type-name": "Opaque",
|
|
172
|
-
"tsType": "Secp256k1Point"
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
190
|
}
|
|
176
191
|
],
|
|
177
192
|
"result-type": {
|
|
@@ -187,7 +202,7 @@
|
|
|
187
202
|
],
|
|
188
203
|
"ledger": [
|
|
189
204
|
{
|
|
190
|
-
"name": "
|
|
205
|
+
"name": "signBidirectionalEventNotificationCounterMap",
|
|
191
206
|
"index": 0,
|
|
192
207
|
"exported": true,
|
|
193
208
|
"storage": "Map",
|
|
@@ -204,13 +219,13 @@
|
|
|
204
219
|
}
|
|
205
220
|
},
|
|
206
221
|
{
|
|
207
|
-
"name": "
|
|
222
|
+
"name": "signBidirectionalEventNotificationMap",
|
|
208
223
|
"index": 1,
|
|
209
224
|
"exported": true,
|
|
210
225
|
"storage": "Map",
|
|
211
226
|
"key": {
|
|
212
227
|
"type-name": "Struct",
|
|
213
|
-
"name": "
|
|
228
|
+
"name": "SignetMapKey",
|
|
214
229
|
"elements": [
|
|
215
230
|
{
|
|
216
231
|
"name": "count",
|
|
@@ -234,41 +249,27 @@
|
|
|
234
249
|
},
|
|
235
250
|
"value": {
|
|
236
251
|
"type-name": "Struct",
|
|
237
|
-
"name": "
|
|
252
|
+
"name": "SignBidirectionalEventNotification",
|
|
238
253
|
"elements": [
|
|
239
254
|
{
|
|
240
|
-
"name": "
|
|
241
|
-
"type": {
|
|
242
|
-
"type-name": "Bytes",
|
|
243
|
-
"length": 32
|
|
244
|
-
}
|
|
245
|
-
},
|
|
246
|
-
{
|
|
247
|
-
"name": "bigRy",
|
|
255
|
+
"name": "version",
|
|
248
256
|
"type": {
|
|
249
|
-
"type-name": "
|
|
250
|
-
"
|
|
257
|
+
"type-name": "Uint",
|
|
258
|
+
"maxval": 255
|
|
251
259
|
}
|
|
252
260
|
},
|
|
253
261
|
{
|
|
254
|
-
"name": "
|
|
262
|
+
"name": "payload",
|
|
255
263
|
"type": {
|
|
256
264
|
"type-name": "Bytes",
|
|
257
|
-
"length":
|
|
258
|
-
}
|
|
259
|
-
},
|
|
260
|
-
{
|
|
261
|
-
"name": "recoveryId",
|
|
262
|
-
"type": {
|
|
263
|
-
"type-name": "Uint",
|
|
264
|
-
"maxval": 255
|
|
265
|
+
"length": 128
|
|
265
266
|
}
|
|
266
267
|
}
|
|
267
268
|
]
|
|
268
269
|
}
|
|
269
270
|
},
|
|
270
271
|
{
|
|
271
|
-
"name": "
|
|
272
|
+
"name": "signatureResponseCounterMap",
|
|
272
273
|
"index": 2,
|
|
273
274
|
"exported": true,
|
|
274
275
|
"storage": "Map",
|
|
@@ -281,52 +282,75 @@
|
|
|
281
282
|
}
|
|
282
283
|
},
|
|
283
284
|
"value": {
|
|
285
|
+
"type-name": "Counter"
|
|
286
|
+
}
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
"name": "signatureResponseMap",
|
|
290
|
+
"index": 3,
|
|
291
|
+
"exported": true,
|
|
292
|
+
"storage": "Map",
|
|
293
|
+
"key": {
|
|
284
294
|
"type-name": "Struct",
|
|
285
|
-
"name": "
|
|
295
|
+
"name": "SignetMapKey",
|
|
286
296
|
"elements": [
|
|
287
297
|
{
|
|
288
|
-
"name": "
|
|
298
|
+
"name": "count",
|
|
289
299
|
"type": {
|
|
290
|
-
"type-name": "
|
|
291
|
-
"
|
|
300
|
+
"type-name": "Uint",
|
|
301
|
+
"maxval": 18446744073709551615
|
|
292
302
|
}
|
|
293
303
|
},
|
|
294
304
|
{
|
|
295
|
-
"name": "
|
|
305
|
+
"name": "requestId",
|
|
296
306
|
"type": {
|
|
297
|
-
"type-name": "
|
|
298
|
-
"
|
|
307
|
+
"type-name": "Alias",
|
|
308
|
+
"name": "RequestId",
|
|
309
|
+
"type": {
|
|
310
|
+
"type-name": "Bytes",
|
|
311
|
+
"length": 32
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
]
|
|
316
|
+
},
|
|
317
|
+
"value": {
|
|
318
|
+
"type-name": "Struct",
|
|
319
|
+
"name": "SignatureRespondedEvent",
|
|
320
|
+
"elements": [
|
|
321
|
+
{
|
|
322
|
+
"name": "bigRx",
|
|
323
|
+
"type": {
|
|
324
|
+
"type-name": "Bytes",
|
|
325
|
+
"length": 32
|
|
299
326
|
}
|
|
300
327
|
},
|
|
301
328
|
{
|
|
302
|
-
"name": "
|
|
329
|
+
"name": "bigRy",
|
|
303
330
|
"type": {
|
|
304
331
|
"type-name": "Bytes",
|
|
305
332
|
"length": 32
|
|
306
333
|
}
|
|
307
334
|
},
|
|
308
335
|
{
|
|
309
|
-
"name": "
|
|
336
|
+
"name": "s",
|
|
310
337
|
"type": {
|
|
311
338
|
"type-name": "Bytes",
|
|
312
339
|
"length": 32
|
|
313
340
|
}
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
"name": "recoveryId",
|
|
344
|
+
"type": {
|
|
345
|
+
"type-name": "Uint",
|
|
346
|
+
"maxval": 255
|
|
347
|
+
}
|
|
314
348
|
}
|
|
315
349
|
]
|
|
316
350
|
}
|
|
317
351
|
},
|
|
318
352
|
{
|
|
319
|
-
"name": "
|
|
320
|
-
"index": 3,
|
|
321
|
-
"exported": true,
|
|
322
|
-
"storage": "Cell",
|
|
323
|
-
"type": {
|
|
324
|
-
"type-name": "Bytes",
|
|
325
|
-
"length": 32
|
|
326
|
-
}
|
|
327
|
-
},
|
|
328
|
-
{
|
|
329
|
-
"name": "signBidirectionalNotificationIndex",
|
|
353
|
+
"name": "respondBidirectionalCounterMap",
|
|
330
354
|
"index": 4,
|
|
331
355
|
"exported": true,
|
|
332
356
|
"storage": "Map",
|
|
@@ -339,21 +363,75 @@
|
|
|
339
363
|
}
|
|
340
364
|
},
|
|
341
365
|
"value": {
|
|
366
|
+
"type-name": "Counter"
|
|
367
|
+
}
|
|
368
|
+
},
|
|
369
|
+
{
|
|
370
|
+
"name": "respondBidirectionalMap",
|
|
371
|
+
"index": 5,
|
|
372
|
+
"exported": true,
|
|
373
|
+
"storage": "Map",
|
|
374
|
+
"key": {
|
|
342
375
|
"type-name": "Struct",
|
|
343
|
-
"name": "
|
|
376
|
+
"name": "SignetMapKey",
|
|
344
377
|
"elements": [
|
|
345
378
|
{
|
|
346
|
-
"name": "
|
|
379
|
+
"name": "count",
|
|
380
|
+
"type": {
|
|
381
|
+
"type-name": "Uint",
|
|
382
|
+
"maxval": 18446744073709551615
|
|
383
|
+
}
|
|
384
|
+
},
|
|
385
|
+
{
|
|
386
|
+
"name": "requestId",
|
|
387
|
+
"type": {
|
|
388
|
+
"type-name": "Alias",
|
|
389
|
+
"name": "RequestId",
|
|
390
|
+
"type": {
|
|
391
|
+
"type-name": "Bytes",
|
|
392
|
+
"length": 32
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
]
|
|
397
|
+
},
|
|
398
|
+
"value": {
|
|
399
|
+
"type-name": "Struct",
|
|
400
|
+
"name": "RespondBidirectionalEvent",
|
|
401
|
+
"elements": [
|
|
402
|
+
{
|
|
403
|
+
"name": "serializedOutput",
|
|
404
|
+
"type": {
|
|
405
|
+
"type-name": "Bytes",
|
|
406
|
+
"length": 128
|
|
407
|
+
}
|
|
408
|
+
},
|
|
409
|
+
{
|
|
410
|
+
"name": "outputLen",
|
|
347
411
|
"type": {
|
|
348
412
|
"type-name": "Uint",
|
|
349
413
|
"maxval": 255
|
|
350
414
|
}
|
|
351
415
|
},
|
|
352
416
|
{
|
|
353
|
-
"name": "
|
|
417
|
+
"name": "r",
|
|
418
|
+
"type": {
|
|
419
|
+
"type-name": "Bytes",
|
|
420
|
+
"length": 32
|
|
421
|
+
}
|
|
422
|
+
},
|
|
423
|
+
{
|
|
424
|
+
"name": "s",
|
|
354
425
|
"type": {
|
|
355
426
|
"type-name": "Bytes",
|
|
356
|
-
"length":
|
|
427
|
+
"length": 32
|
|
428
|
+
}
|
|
429
|
+
},
|
|
430
|
+
{
|
|
431
|
+
"name": "recoveryId",
|
|
432
|
+
"type": {
|
|
433
|
+
"type-name": "Uint",
|
|
434
|
+
"maxval": 255
|
|
357
435
|
}
|
|
358
436
|
}
|
|
359
437
|
]
|
|
@@ -7,92 +7,92 @@
|
|
|
7
7
|
"type": "directory",
|
|
8
8
|
"contract-info.json": {
|
|
9
9
|
"type": "file",
|
|
10
|
-
"size":
|
|
11
|
-
"hash": "
|
|
10
|
+
"size": 9940,
|
|
11
|
+
"hash": "2bb608fe05b4a143193c286a8bf7cda7777350e82ae30e9bca5b9088c7f1d3bf"
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
14
|
"contract": {
|
|
15
15
|
"type": "directory",
|
|
16
16
|
"index.d.ts": {
|
|
17
17
|
"type": "file",
|
|
18
|
-
"size":
|
|
19
|
-
"hash": "
|
|
18
|
+
"size": 8450,
|
|
19
|
+
"hash": "f02bccd41dc7a6c929faad7f3a0d68875481ea19f1869ca04d69f25f1fe723a8"
|
|
20
20
|
},
|
|
21
21
|
"index.js": {
|
|
22
22
|
"type": "file",
|
|
23
|
-
"size":
|
|
24
|
-
"hash": "
|
|
23
|
+
"size": 104652,
|
|
24
|
+
"hash": "94e9c8454716f4b2cc6ada9e75e735693d9afbfcf956f83e319c5b745bad4a2a"
|
|
25
25
|
},
|
|
26
26
|
"index.js.map": {
|
|
27
27
|
"type": "file",
|
|
28
|
-
"size":
|
|
29
|
-
"hash": "
|
|
28
|
+
"size": 3057,
|
|
29
|
+
"hash": "93b50f8d99b21457b6ad34e2bc0c8afa366d10135668d46bd065315a10e7a450"
|
|
30
30
|
}
|
|
31
31
|
},
|
|
32
32
|
"zkir": {
|
|
33
33
|
"type": "directory",
|
|
34
|
-
"notifyBidirectionalSignatureRequest.bzkir": {
|
|
35
|
-
"type": "file",
|
|
36
|
-
"size": 469,
|
|
37
|
-
"hash": "7dc07d54258ab2fd49dbfbb71c6971302e548fffa7a8d5a1df33daff8d6508ce"
|
|
38
|
-
},
|
|
39
|
-
"notifyBidirectionalSignatureRequest.zkir": {
|
|
40
|
-
"type": "file",
|
|
41
|
-
"size": 1432,
|
|
42
|
-
"hash": "d8190dfc0e44aca693556a960a94dd3981f8efd6323fb47caf5a436c1f8b6ccc"
|
|
43
|
-
},
|
|
44
34
|
"postRespondBidirectional.bzkir": {
|
|
45
35
|
"type": "file",
|
|
46
|
-
"size":
|
|
47
|
-
"hash": "
|
|
36
|
+
"size": 1910,
|
|
37
|
+
"hash": "0b70b24b36fc6ea5886a95b39d112f495a0eed34b18bde47d93f1c5110f75e99"
|
|
48
38
|
},
|
|
49
39
|
"postRespondBidirectional.zkir": {
|
|
50
40
|
"type": "file",
|
|
51
|
-
"size":
|
|
52
|
-
"hash": "
|
|
41
|
+
"size": 4646,
|
|
42
|
+
"hash": "327dd3e13f92edd2fa6ec08e7dc0588dcfb0b40ce3f4f7c548465c14673ff2f5"
|
|
53
43
|
},
|
|
54
44
|
"postSignatureResponse.bzkir": {
|
|
55
45
|
"type": "file",
|
|
56
|
-
"size":
|
|
57
|
-
"hash": "
|
|
46
|
+
"size": 1479,
|
|
47
|
+
"hash": "f87e8441cc3489b1f7559f2d65445f2ea17fb3016ff15c3f58c4027f12a5fd7a"
|
|
58
48
|
},
|
|
59
49
|
"postSignatureResponse.zkir": {
|
|
60
50
|
"type": "file",
|
|
61
|
-
"size":
|
|
62
|
-
"hash": "
|
|
51
|
+
"size": 3813,
|
|
52
|
+
"hash": "1f6e6a3c95d8fa3952c58e70588fc3661c9dd6115a1b01f530eb16f925bf4d2b"
|
|
53
|
+
},
|
|
54
|
+
"signBidirectionalEvent.bzkir": {
|
|
55
|
+
"type": "file",
|
|
56
|
+
"size": 1248,
|
|
57
|
+
"hash": "df11c0f58df1650875608110fb3844bf6ba733fa1dc466f0faf7d52099ec47c5"
|
|
58
|
+
},
|
|
59
|
+
"signBidirectionalEvent.zkir": {
|
|
60
|
+
"type": "file",
|
|
61
|
+
"size": 3674,
|
|
62
|
+
"hash": "72f63054869b9bb5ee895a3326ec10ff911e83523cf614a476d2b478b9152e11"
|
|
63
63
|
}
|
|
64
64
|
},
|
|
65
65
|
"keys": {
|
|
66
66
|
"type": "directory",
|
|
67
|
-
"
|
|
67
|
+
"postRespondBidirectional.prover": {
|
|
68
68
|
"type": "file",
|
|
69
|
-
"size":
|
|
70
|
-
"hash": "
|
|
69
|
+
"size": 889414,
|
|
70
|
+
"hash": "72beb2cfe9f8ec3266bcf96e495defbf427575f86d310602314177accb354aab"
|
|
71
71
|
},
|
|
72
|
-
"
|
|
72
|
+
"postRespondBidirectional.verifier": {
|
|
73
73
|
"type": "file",
|
|
74
74
|
"size": 1353,
|
|
75
|
-
"hash": "
|
|
75
|
+
"hash": "fa5fd5e2c04bf3553e601fb43482df5e0de872f2469216f6ac1b9f2b7e1248ee"
|
|
76
76
|
},
|
|
77
|
-
"
|
|
77
|
+
"postSignatureResponse.prover": {
|
|
78
78
|
"type": "file",
|
|
79
|
-
"size":
|
|
80
|
-
"hash": "
|
|
79
|
+
"size": 446615,
|
|
80
|
+
"hash": "f43e6a128a257f06e6a19ea6ddceff5f94db81645460301c6d184ab4437c8169"
|
|
81
81
|
},
|
|
82
|
-
"
|
|
82
|
+
"postSignatureResponse.verifier": {
|
|
83
83
|
"type": "file",
|
|
84
|
-
"size":
|
|
85
|
-
"hash": "
|
|
84
|
+
"size": 1353,
|
|
85
|
+
"hash": "22938eaebc029fd624db271e92857b132977c0373bf2f9ce823e21d011973e0d"
|
|
86
86
|
},
|
|
87
|
-
"
|
|
87
|
+
"signBidirectionalEvent.prover": {
|
|
88
88
|
"type": "file",
|
|
89
|
-
"size":
|
|
90
|
-
"hash": "
|
|
89
|
+
"size": 888752,
|
|
90
|
+
"hash": "3c3fb54421ac16821198a626fc2551d4f3201ebdc67995c61f0bcd8351f2e5de"
|
|
91
91
|
},
|
|
92
|
-
"
|
|
92
|
+
"signBidirectionalEvent.verifier": {
|
|
93
93
|
"type": "file",
|
|
94
94
|
"size": 1353,
|
|
95
|
-
"hash": "
|
|
95
|
+
"hash": "3e603e64ac930b8e4e1412e0afb5b3769e3d9db62c3a0bace1fe367eb7dc868e"
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
98
|
}
|