@primuslabs/por-client-sdk 0.1.1 → 0.1.2
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 +74 -40
- package/dist/cli.js +17 -3
- package/dist/cli.js.map +1 -1
- package/dist/client/data_service_client.d.ts +1 -0
- package/dist/client/data_service_client.js +1 -0
- package/dist/client/data_service_client.js.map +1 -1
- package/dist/client/por_client.d.ts +3 -3
- package/dist/client/por_client.js +16 -12
- package/dist/client/por_client.js.map +1 -1
- package/dist/client/prover_client.d.ts +12 -6
- package/dist/client/prover_client.js +14 -17
- package/dist/client/prover_client.js.map +1 -1
- package/dist/client/zktls_client.d.ts +3 -3
- package/dist/client/zktls_client.js +38 -27
- package/dist/client/zktls_client.js.map +1 -1
- package/dist/config_schema.d.ts +167 -0
- package/dist/config_schema.js +88 -0
- package/dist/config_schema.js.map +1 -0
- package/dist/datasource/aster.d.ts +24 -0
- package/dist/datasource/aster.js +51 -0
- package/dist/datasource/aster.js.map +1 -0
- package/dist/datasource/base_exchange.d.ts +9 -0
- package/dist/datasource/base_exchange.js +13 -0
- package/dist/datasource/base_exchange.js.map +1 -0
- package/dist/datasource/binance.d.ts +40 -13
- package/dist/datasource/binance.js +46 -39
- package/dist/datasource/binance.js.map +1 -1
- package/dist/datasource/exchange_manager.d.ts +15 -0
- package/dist/datasource/exchange_manager.js +20 -0
- package/dist/datasource/exchange_manager.js.map +1 -0
- package/dist/datasource/helper.d.ts +1 -0
- package/dist/datasource/helper.js +6 -0
- package/dist/datasource/helper.js.map +1 -1
- package/dist/datasource/index.d.ts +2 -0
- package/dist/datasource/index.js +2 -0
- package/dist/datasource/index.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +3 -2
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +6 -3
package/README.md
CHANGED
|
@@ -17,75 +17,109 @@ npm run build
|
|
|
17
17
|
|
|
18
18
|
## Getting Started
|
|
19
19
|
|
|
20
|
-
1. Copy `.
|
|
20
|
+
1. Copy `.config.example.yml` to `.config.yml` and configure your environment variables (see [Configuration](#configuration)).
|
|
21
21
|
|
|
22
22
|
2. Ensure required fields are set:
|
|
23
23
|
|
|
24
|
-
* `
|
|
25
|
-
* `
|
|
24
|
+
* `app.identity.token` and `app.identity.projectId` for authentication
|
|
25
|
+
* `app.identity.programId` for program execution
|
|
26
26
|
|
|
27
27
|
3. Run an example:
|
|
28
28
|
|
|
29
29
|
```bash
|
|
30
|
-
npx tsx example/
|
|
30
|
+
npx tsx example/binance.ts
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
## Configuration
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
### Structure Overview
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
```yaml
|
|
39
|
+
app: # Core application configuration
|
|
40
|
+
identity: # Application identity and authorization info
|
|
41
|
+
runtime: # Runtime environment configuration
|
|
42
|
+
services: # External service endpoints
|
|
43
|
+
blockchain: # Blockchain connection and signer info
|
|
41
44
|
|
|
42
|
-
|
|
45
|
+
exchanges: # Exchange account configurations
|
|
46
|
+
binance: # Binance exchange accounts
|
|
47
|
+
aster: # Aster exchange accounts
|
|
48
|
+
```
|
|
43
49
|
|
|
44
|
-
### Configuration Fields and Defaults
|
|
45
50
|
|
|
46
|
-
|
|
47
|
-
| ------------------ | ---------------- | ------ | --------------------- | -------------------------------------- | ---------------------------------------------------------- |
|
|
48
|
-
| `TOKEN` | `token` | string | Required | `""` | Authentication token assigned by Primus Labs. |
|
|
49
|
-
| `PROJECT_ID` | `projectId` | string | Required | `""` | Project identifier associated with your account. |
|
|
50
|
-
| `PROGRAM_ID` | `programId` | string | Required | `""` | Program identifier for zkVM execution. |
|
|
51
|
-
| `LOG_VERBOSE` | `logVerbose` | number | Optional | `0` | Logging verbosity level (`0` = off; higher = more detail). |
|
|
52
|
-
| `RPC_URL` | `rpcUrl` | string | Optional | `https://mainnet.base.org` | RPC endpoint for blockchain interactions. |
|
|
51
|
+
### Application Configuration (`app`)
|
|
53
52
|
|
|
53
|
+
#### 1. Identity (`app.identity`)
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
Contains application authorization and identification.
|
|
56
56
|
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
| Field | Type | Description | Example |
|
|
58
|
+
| --------- | ------ | ------------------------------------------------ | ----------------- |
|
|
59
|
+
| token | string | Authentication token issued for this application | `"my-auth-token"` |
|
|
60
|
+
| projectId | string | Unique project identifier | `"project-123"` |
|
|
61
|
+
| programId | string | Unique program identifier | `"program-abc"` |
|
|
59
62
|
|
|
60
|
-
|
|
61
|
-
token: "my-token",
|
|
62
|
-
projectId: "my-project",
|
|
63
|
-
programId: "my-program",
|
|
64
|
-
logVerbose: 2,
|
|
65
|
-
});
|
|
66
|
-
```
|
|
63
|
+
#### 2. Runtime (`app.runtime`)
|
|
67
64
|
|
|
65
|
+
Specifies the runtime environment and logging.
|
|
68
66
|
|
|
69
|
-
|
|
67
|
+
| Field | Type | Default | Description | Example |
|
|
68
|
+
| ---------- | ------- | -------------- | ------------------------------------------------------ | -------------- |
|
|
69
|
+
| version | string | - | Application version in semantic version format (x.y.z) | `"1.0.0"` |
|
|
70
|
+
| env | string | `"production"` | Runtime environment (`development` or `production`) | `"production"` |
|
|
71
|
+
| mode | string | `"POR"` | Application execution mode (`POR` or `DVC`) | `"POR"` |
|
|
72
|
+
| logVerbose | integer | `0` | Log verbosity (0 = off, higher = more detail) | `3` |
|
|
70
73
|
|
|
71
|
-
|
|
72
|
-
import { DataSource, PoRClient } from "@primuslabs/por-client-sdk";
|
|
74
|
+
#### 3. Services (`app.services`)
|
|
73
75
|
|
|
74
|
-
|
|
75
|
-
const ds = new DataSource.Okx();
|
|
76
|
-
const requestParams = ds.getSampleRequests();
|
|
76
|
+
External service endpoints used by the application.
|
|
77
77
|
|
|
78
|
-
|
|
79
|
-
const result = await client.run(requestParams);
|
|
78
|
+
##### zkVM Service (`app.services.zkvm`)
|
|
80
79
|
|
|
81
|
-
|
|
82
|
-
|
|
80
|
+
| Field | Type | Description | Example |
|
|
81
|
+
| ----- | ------ | ------------------------- | ---------------------------- |
|
|
82
|
+
| url | string | zkVM service endpoint URL | `"https://zkvm.example.com"` |
|
|
83
83
|
|
|
84
|
-
|
|
85
|
-
|
|
84
|
+
##### Data Service (`app.services.data`)
|
|
85
|
+
|
|
86
|
+
| Field | Type | Description | Example |
|
|
87
|
+
| ----- | ------ | ------------------------- | ---------------------------- |
|
|
88
|
+
| url | string | Data service endpoint URL | `"https://data.example.com"` |
|
|
89
|
+
|
|
90
|
+
#### 4. Blockchain (`app.blockchain`)
|
|
91
|
+
|
|
92
|
+
Blockchain connection and signer configuration.
|
|
93
|
+
|
|
94
|
+
| Field | Type | Default | Description | Example |
|
|
95
|
+
| ------- | ------ | -------- | ------------------------------------------------------------------------ | --------------------------- |
|
|
96
|
+
| network | string | `"base"` | Target blockchain network (`base` or `base-sepolia`) | `"base-sepolia"` |
|
|
97
|
+
| rpcUrl | string | - | Optional custom RPC URL. If not set, default RPC for the network is used | `"https://rpc.example.com"` |
|
|
98
|
+
| signer | object | - | Transaction signer info (required if `mode` is `DVC`) | - |
|
|
99
|
+
|
|
100
|
+
##### Signer (`app.blockchain.signer`)
|
|
101
|
+
|
|
102
|
+
| Field | Type | Description | Example |
|
|
103
|
+
| ---------- | ------ | ------------------------------------------- | ------------------ |
|
|
104
|
+
| privateKey | string | Private key to sign blockchain transactions | `"0xabcdef123..."` |
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
### Exchange Accounts (`exchanges`)
|
|
109
|
+
|
|
110
|
+
Supports multiple exchange accounts. At least one exchange is required. Now only support Binance and Aster.
|
|
111
|
+
|
|
112
|
+
#### Fields of `exchange`
|
|
113
|
+
|
|
114
|
+
| Field | Type | Description | Example |
|
|
115
|
+
| ----------- | ------- | ---------------------------------------------- | --------------------------- |
|
|
116
|
+
| apiKey | string | API key used to authenticate with Binance | `"binance-key-123"` |
|
|
117
|
+
| apiSecret | string | API secret corresponding to the API key | `"binance-secret-abc"` |
|
|
118
|
+
| enabled | boolean | Whether this account is active (default: true) | `true` |
|
|
119
|
+
| description | string | Optional description for this account | `"My Binance spot account"` |
|
|
120
|
+
| kind | array | Supported Binance account types | `["spot","usds-futures"]` |
|
|
86
121
|
|
|
87
122
|
|
|
88
123
|
## Data Sources
|
|
89
124
|
|
|
90
125
|
> TODO: Document supported data sources and sample requests.
|
|
91
|
-
|
package/dist/cli.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { Command } from "commander";
|
|
3
3
|
import { ProverClient } from "./client/prover_client.js";
|
|
4
|
+
import { loadConfigFromFile } from "./config_schema.js";
|
|
4
5
|
import fs from "fs";
|
|
5
6
|
async function main() {
|
|
6
|
-
const
|
|
7
|
+
const config = loadConfigFromFile();
|
|
8
|
+
const api = new ProverClient(config.app.services.zkvm.url);
|
|
7
9
|
const program = new Command();
|
|
8
10
|
program
|
|
9
11
|
.command("uploadProgram")
|
|
@@ -24,7 +26,13 @@ async function main() {
|
|
|
24
26
|
.action(async (opts) => {
|
|
25
27
|
console.log("submitTask");
|
|
26
28
|
const attestation_data = fs.readFileSync(opts.filepath, { encoding: "utf-8" });
|
|
27
|
-
const result = await api.submitTask(
|
|
29
|
+
const result = await api.submitTask({
|
|
30
|
+
token: config.app.identity.token,
|
|
31
|
+
projectId: config.app.identity.projectId,
|
|
32
|
+
programId: config.app.identity.programId,
|
|
33
|
+
attestationData: attestation_data,
|
|
34
|
+
zktlsMode: config.app.runtime.mode,
|
|
35
|
+
});
|
|
28
36
|
console.log('Task submitted:', result);
|
|
29
37
|
});
|
|
30
38
|
program
|
|
@@ -43,7 +51,13 @@ async function main() {
|
|
|
43
51
|
.action(async (opts) => {
|
|
44
52
|
console.log("submitTask and getResult.");
|
|
45
53
|
const attestation_data = fs.readFileSync(opts.filepath, { encoding: "utf-8" });
|
|
46
|
-
const result = await api.doZkVM(
|
|
54
|
+
const result = await api.doZkVM({
|
|
55
|
+
token: config.app.identity.token,
|
|
56
|
+
projectId: config.app.identity.projectId,
|
|
57
|
+
programId: config.app.identity.programId,
|
|
58
|
+
attestationData: attestation_data,
|
|
59
|
+
zktlsMode: config.app.runtime.mode,
|
|
60
|
+
});
|
|
47
61
|
console.log('result:', result);
|
|
48
62
|
});
|
|
49
63
|
program.parseAsync();
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,KAAK,UAAU,IAAI;IACjB,MAAM,GAAG,GAAG,IAAI,YAAY,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data_service_client.js","sourceRoot":"","sources":["../../src/client/data_service_client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"data_service_client.js","sourceRoot":"","sources":["../../src/client/data_service_client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAgB1C,MAAM,OAAO,iBAAiB;IACX,MAAM,CAAgB;IACvC,YAAY,OAAe,EAAE,UAAkB,MAAM;QACnD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,UAAU,CACd,KAAa,EACb,SAAiB,EACjB,KAAa;QAEb,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAC/B,4BAA4B,EAC5B;YACE,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;YAC5B,OAAO,EAAE;gBACP,WAAW,EAAE,KAAK;aACnB;SACF,CACF,CAAC;QAEF,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAChD,OAAO;YACL,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;SACvC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,KAAa,EACb,SAAiB,EACjB,KAAa;QAEb,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAC/B,+BAA+B,EAC/B;YACE,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;YAC5B,OAAO,EAAE;gBACP,WAAW,EAAE,KAAK;aACnB;SACF,CACF,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAGO,MAAM,CAAI,EAAU,EAAE,IAAoB;QAChD,IAAI,IAAI,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;QAED,gBAAgB;QAChB,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QACzB,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAClE,CAAC;CACF"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Options, RequestParamsInput } from "../types.js";
|
|
2
|
-
import {
|
|
2
|
+
import { AppConfig } from "../config_schema.js";
|
|
3
3
|
export declare class PoRClient {
|
|
4
4
|
private readonly config;
|
|
5
5
|
private zktlsClient;
|
|
6
6
|
private proverClient;
|
|
7
|
-
constructor(config
|
|
7
|
+
constructor(config: AppConfig);
|
|
8
8
|
/**
|
|
9
9
|
* zkTLS + zkVM (optional)
|
|
10
10
|
*/
|
|
11
|
-
run(
|
|
11
|
+
run(params: RequestParamsInput, options?: Options): Promise<any>;
|
|
12
12
|
}
|
|
@@ -2,31 +2,35 @@ import { saveToFile } from "../utils.js";
|
|
|
2
2
|
import { getDefaultOptions } from "../types.js";
|
|
3
3
|
import { ZkTLSClient } from "./zktls_client.js";
|
|
4
4
|
import { ProverClient } from "./prover_client.js";
|
|
5
|
-
import { resolveSdkConfig, printConfig } from "../config.js";
|
|
6
5
|
export class PoRClient {
|
|
7
6
|
config;
|
|
8
7
|
zktlsClient;
|
|
9
8
|
proverClient;
|
|
10
|
-
constructor(config
|
|
11
|
-
this.config =
|
|
12
|
-
|
|
13
|
-
this.
|
|
14
|
-
this.proverClient = new ProverClient(this.config);
|
|
9
|
+
constructor(config) {
|
|
10
|
+
this.config = { ...config };
|
|
11
|
+
this.zktlsClient = new ZkTLSClient({ ...config });
|
|
12
|
+
this.proverClient = new ProverClient(config.services.zkvm.url);
|
|
15
13
|
}
|
|
16
14
|
/**
|
|
17
15
|
* zkTLS + zkVM (optional)
|
|
18
16
|
*/
|
|
19
|
-
async run(
|
|
17
|
+
async run(params, options = {}) {
|
|
20
18
|
const opts = getDefaultOptions(options);
|
|
21
19
|
console.log("do zkTLS");
|
|
22
|
-
const attestationData = await this.zktlsClient.doZkTLS(
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
const attestationData = await this.zktlsClient.doZkTLS(params, opts);
|
|
21
|
+
const hasAny = Object.values(attestationData).some(v => v !== undefined);
|
|
22
|
+
if (opts.saveAtt && hasAny) {
|
|
25
23
|
saveToFile("attestation.json", JSON.stringify(attestationData));
|
|
26
24
|
}
|
|
27
|
-
if (opts.runZkvm &&
|
|
25
|
+
if (opts.runZkvm && hasAny) {
|
|
28
26
|
console.log("do zkVM");
|
|
29
|
-
const result = await this.proverClient.doZkVM(
|
|
27
|
+
const result = await this.proverClient.doZkVM({
|
|
28
|
+
token: this.config.identity.token,
|
|
29
|
+
projectId: this.config.identity.projectId,
|
|
30
|
+
programId: this.config.identity.programId,
|
|
31
|
+
attestationData: JSON.stringify(attestationData),
|
|
32
|
+
zktlsMode: this.config.runtime.mode,
|
|
33
|
+
});
|
|
30
34
|
console.log("result", result);
|
|
31
35
|
return result;
|
|
32
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"por_client.js","sourceRoot":"","sources":["../../src/client/por_client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAW,iBAAiB,EAAsB,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"por_client.js","sourceRoot":"","sources":["../../src/client/por_client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAW,iBAAiB,EAAsB,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,MAAM,OAAO,SAAS;IACH,MAAM,CAAsB;IACrC,WAAW,CAAc;IACzB,YAAY,CAAe;IAEnC,YAAY,MAAiB;QAC3B,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;QAC5B,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,MAA0B,EAAE,UAAmB,EAAE;QACzD,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAExC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxB,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;QAEzE,IAAI,IAAI,CAAC,OAAO,IAAI,MAAM,EAAE,CAAC;YAC3B,UAAU,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,IAAI,MAAM,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;gBAC5C,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK;gBACjC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS;gBACzC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS;gBACzC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC;gBAChD,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI;aACpC,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC9B,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,OAAO,eAAe,CAAC;IACzB,CAAC;CACF"}
|
|
@@ -1,14 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
interface SubmitTaskInput {
|
|
2
|
+
token: string;
|
|
3
|
+
projectId: string;
|
|
4
|
+
programId: string;
|
|
5
|
+
attestationData: string;
|
|
6
|
+
zktlsMode: string;
|
|
7
|
+
}
|
|
2
8
|
export declare class ProverClient {
|
|
3
|
-
private readonly config;
|
|
4
9
|
private client;
|
|
5
|
-
constructor(
|
|
10
|
+
constructor(url: string, timeout?: number);
|
|
6
11
|
uploadProgram(filePath: string, name: string, version: string, desc: string, prover?: string): Promise<any>;
|
|
7
|
-
submitTask(
|
|
12
|
+
submitTask(input: SubmitTaskInput): Promise<any>;
|
|
8
13
|
getResult(taskId: string): Promise<any>;
|
|
9
14
|
private unwrap;
|
|
10
|
-
submitTaskWithRetry(
|
|
15
|
+
submitTaskWithRetry(input: SubmitTaskInput, maxRetries?: number, baseDelay?: number): Promise<any>;
|
|
11
16
|
getResultWithTimeout(taskId: string, timeoutMs?: number, intervalMs?: number): Promise<any>;
|
|
12
17
|
private _doZkVM;
|
|
13
|
-
doZkVM(
|
|
18
|
+
doZkVM(input: SubmitTaskInput): Promise<any>;
|
|
14
19
|
}
|
|
20
|
+
export {};
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
import axios from "axios";
|
|
2
2
|
import FormData from "form-data";
|
|
3
3
|
import fs from "fs";
|
|
4
|
-
import { resolveSdkConfig } from "../config.js";
|
|
5
4
|
import { ClientError } from "../error.js";
|
|
6
5
|
import { sleepMs, mockErrorReport, makeErrData } from "../utils.js";
|
|
7
6
|
export class ProverClient {
|
|
8
|
-
config;
|
|
9
7
|
client;
|
|
10
|
-
constructor(
|
|
11
|
-
this.
|
|
12
|
-
this.client = axios.create({ baseURL: this.config.zkvmServiceUrl, timeout });
|
|
8
|
+
constructor(url, timeout = 30_000) {
|
|
9
|
+
this.client = axios.create({ baseURL: url, timeout });
|
|
13
10
|
}
|
|
14
11
|
async uploadProgram(filePath, name, version, desc, prover = "succinct") {
|
|
15
12
|
const form = new FormData();
|
|
@@ -23,13 +20,13 @@ export class ProverClient {
|
|
|
23
20
|
});
|
|
24
21
|
return this.unwrap("uploadProgram", res.data);
|
|
25
22
|
}
|
|
26
|
-
async submitTask(
|
|
23
|
+
async submitTask(input) {
|
|
27
24
|
const form = new FormData();
|
|
28
|
-
form.append("
|
|
29
|
-
form.append("
|
|
30
|
-
form.append("
|
|
31
|
-
form.append("
|
|
32
|
-
form.append("
|
|
25
|
+
form.append("token", input.token);
|
|
26
|
+
form.append("project_id", input.projectId);
|
|
27
|
+
form.append("program_id", input.programId);
|
|
28
|
+
form.append("attestation_data", input.attestationData);
|
|
29
|
+
form.append("zktls_mode", input.zktlsMode);
|
|
33
30
|
const res = await this.client.post("/submitTask", form, {
|
|
34
31
|
headers: form.getHeaders()
|
|
35
32
|
});
|
|
@@ -49,13 +46,13 @@ export class ProverClient {
|
|
|
49
46
|
const { mc, msg } = data;
|
|
50
47
|
throw new ClientError("73001", `${op} failed`, { op, mc, msg });
|
|
51
48
|
}
|
|
52
|
-
async submitTaskWithRetry(
|
|
49
|
+
async submitTaskWithRetry(input, maxRetries = 4, baseDelay = 1000) {
|
|
53
50
|
let attempt = 0;
|
|
54
51
|
const start = Date.now();
|
|
55
52
|
console.log("Submitting task...");
|
|
56
53
|
while (true) {
|
|
57
54
|
try {
|
|
58
|
-
const result = await this.submitTask(
|
|
55
|
+
const result = await this.submitTask(input);
|
|
59
56
|
console.log(`Submitting task done (${Date.now() - start}ms):`, result);
|
|
60
57
|
return result;
|
|
61
58
|
}
|
|
@@ -100,9 +97,9 @@ export class ProverClient {
|
|
|
100
97
|
await sleepMs(intervalMs);
|
|
101
98
|
}
|
|
102
99
|
}
|
|
103
|
-
async _doZkVM(
|
|
100
|
+
async _doZkVM(input) {
|
|
104
101
|
try {
|
|
105
|
-
const submitResult = await this.submitTaskWithRetry(
|
|
102
|
+
const submitResult = await this.submitTaskWithRetry(input);
|
|
106
103
|
const result = await this.getResultWithTimeout(submitResult.task_id);
|
|
107
104
|
return result;
|
|
108
105
|
}
|
|
@@ -114,8 +111,8 @@ export class ProverClient {
|
|
|
114
111
|
throw err;
|
|
115
112
|
}
|
|
116
113
|
}
|
|
117
|
-
async doZkVM(
|
|
118
|
-
return await this._doZkVM(
|
|
114
|
+
async doZkVM(input) {
|
|
115
|
+
return await this._doZkVM(input);
|
|
119
116
|
}
|
|
120
117
|
}
|
|
121
118
|
//# sourceMappingURL=prover_client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prover_client.js","sourceRoot":"","sources":["../../src/client/prover_client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,
|
|
1
|
+
{"version":3,"file":"prover_client.js","sourceRoot":"","sources":["../../src/client/prover_client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Options, RequestParamsInput } from "../types.js";
|
|
2
|
-
import {
|
|
2
|
+
import { AppConfig } from "../config_schema.js";
|
|
3
3
|
export declare class ZkTLSClient {
|
|
4
4
|
private readonly config;
|
|
5
5
|
private primusNetwork;
|
|
6
|
-
constructor(config
|
|
6
|
+
constructor(config: AppConfig);
|
|
7
7
|
/**
|
|
8
8
|
* Initialize PrimusNetwork SDK
|
|
9
9
|
*/
|
|
@@ -28,5 +28,5 @@ export declare class ZkTLSClient {
|
|
|
28
28
|
* Main entry: perform zkTLS attestation and task flow
|
|
29
29
|
*/
|
|
30
30
|
private _doZkTLS;
|
|
31
|
-
doZkTLS(params: RequestParamsInput, options?: Options): Promise<any
|
|
31
|
+
doZkTLS(params: RequestParamsInput, options?: Options): Promise<Record<string, any>>;
|
|
32
32
|
}
|
|
@@ -2,15 +2,14 @@ import { PrimusNetwork } from "@primuslabs/network-core-sdk";
|
|
|
2
2
|
import { ethers } from "ethers";
|
|
3
3
|
import { sleepMs, mockErrorReport, makeErrData } from "../utils.js";
|
|
4
4
|
import { getDefaultOptions } from "../types.js";
|
|
5
|
-
import { resolveSdkConfig } from "../config.js";
|
|
6
5
|
import { ClientError } from "../error.js";
|
|
7
6
|
import { DataServiceClient } from "./data_service_client.js";
|
|
8
7
|
import { v4 as uuidv4 } from 'uuid';
|
|
9
8
|
export class ZkTLSClient {
|
|
10
9
|
config;
|
|
11
10
|
primusNetwork;
|
|
12
|
-
constructor(config
|
|
13
|
-
this.config =
|
|
11
|
+
constructor(config) {
|
|
12
|
+
this.config = { ...config };
|
|
14
13
|
this.primusNetwork = new PrimusNetwork();
|
|
15
14
|
}
|
|
16
15
|
/**
|
|
@@ -36,15 +35,17 @@ export class ZkTLSClient {
|
|
|
36
35
|
while (true) {
|
|
37
36
|
try {
|
|
38
37
|
let result;
|
|
39
|
-
if (this.config.
|
|
38
|
+
if (this.config.runtime.mode === "DVC") {
|
|
40
39
|
result = await this.primusNetwork.submitTask(attestParams);
|
|
41
40
|
}
|
|
42
|
-
else if (this.config.
|
|
43
|
-
const client = new DataServiceClient(this.config.
|
|
41
|
+
else if (this.config.runtime.mode === "POR") {
|
|
42
|
+
const client = new DataServiceClient(this.config.services.data.url);
|
|
44
43
|
const bizId = uuidv4();
|
|
45
|
-
const token = this.config.token;
|
|
46
|
-
const projectId = this.config.projectId;
|
|
47
|
-
|
|
44
|
+
const token = this.config.identity.token;
|
|
45
|
+
const projectId = this.config.identity.projectId;
|
|
46
|
+
const { taskId, taskTxHash, taskAttestors, submitterAddress } = await client.submitTask(bizId, projectId, token);
|
|
47
|
+
result = { taskId, taskTxHash, taskAttestors };
|
|
48
|
+
attestParams.address = submitterAddress;
|
|
48
49
|
}
|
|
49
50
|
console.log(`✅ submitTask done (${Date.now() - start}ms):`, result);
|
|
50
51
|
return result;
|
|
@@ -176,17 +177,30 @@ export class ZkTLSClient {
|
|
|
176
177
|
*/
|
|
177
178
|
async _doZkTLS(requestParams, options = {}, requestParamsCallback) {
|
|
178
179
|
const startTime = Date.now();
|
|
179
|
-
const attestParams = {
|
|
180
|
-
address: "0x9b7706746c6e19AD5EB5c1DaeEa4b4C09EEC8a5f"
|
|
181
|
-
};
|
|
182
180
|
const opts = getDefaultOptions(options);
|
|
183
181
|
try {
|
|
184
|
-
|
|
185
|
-
|
|
182
|
+
let rpcUrl = this.config.blockchain.rpcUrl;
|
|
183
|
+
if (!rpcUrl) {
|
|
184
|
+
// TODO: using mapping
|
|
185
|
+
const network = this.config.blockchain.network;
|
|
186
|
+
if (network === "base") {
|
|
187
|
+
rpcUrl = "https://mainnet.base.org";
|
|
188
|
+
}
|
|
189
|
+
else if (network === "base-sepolia") {
|
|
190
|
+
rpcUrl = "https://sepolia.base.org";
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
const provider = new ethers.providers.JsonRpcProvider(rpcUrl);
|
|
194
|
+
const privateKey = this.config.blockchain.signer?.privateKey;
|
|
195
|
+
const wallet = privateKey ? new ethers.Wallet(privateKey, provider) : provider;
|
|
186
196
|
const { chainId } = await provider.getNetwork();
|
|
197
|
+
const attestParams = { address: "" };
|
|
198
|
+
if (privateKey) {
|
|
199
|
+
attestParams.address = wallet.address;
|
|
200
|
+
}
|
|
187
201
|
await this._initializePrimusNetwork(opts, wallet, chainId);
|
|
188
|
-
const submitResult = await this._submitZkTLSTaskWithRetry(opts, attestParams);
|
|
189
|
-
const attestResult = await this._attestWithRetry(requestParams, opts, attestParams, submitResult, requestParamsCallback);
|
|
202
|
+
const submitResult = await this._submitZkTLSTaskWithRetry(opts, attestParams, 4, 5000);
|
|
203
|
+
const attestResult = await this._attestWithRetry(requestParams, opts, attestParams, submitResult, requestParamsCallback, 4, 5000);
|
|
190
204
|
await this._verifyAndPollTaskResultWithRetry(attestResult);
|
|
191
205
|
const zkVmRequestData = await this._prepareZkVmRequestData(requestParams.verifyType, attestResult);
|
|
192
206
|
console.log(`✅ Total execution time: ${Date.now() - startTime}ms`);
|
|
@@ -201,17 +215,14 @@ export class ZkTLSClient {
|
|
|
201
215
|
}
|
|
202
216
|
}
|
|
203
217
|
async doZkTLS(params, options = {}) {
|
|
204
|
-
const
|
|
205
|
-
const
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
for (let i = 0; i < requestParams.length; i++) {
|
|
213
|
-
const data = await this._doZkTLS(requestParams[i], options, callbacks[i]);
|
|
214
|
-
attestations.push(data.attestationData);
|
|
218
|
+
const attestations = {}; // key => attestation
|
|
219
|
+
for (const [key, cb] of Object.entries(params)) {
|
|
220
|
+
if (!cb)
|
|
221
|
+
continue; // skip undefined cb
|
|
222
|
+
const reqParams = cb();
|
|
223
|
+
if (!reqParams)
|
|
224
|
+
continue; // skip undefined requestParams
|
|
225
|
+
attestations[key] = await this._doZkTLS(reqParams, options, cb);
|
|
215
226
|
}
|
|
216
227
|
return attestations;
|
|
217
228
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zktls_client.js","sourceRoot":"","sources":["../../src/client/zktls_client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAW,iBAAiB,EAAyE,MAAM,aAAa,CAAC;AAChI,OAAO,
|
|
1
|
+
{"version":3,"file":"zktls_client.js","sourceRoot":"","sources":["../../src/client/zktls_client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAW,iBAAiB,EAAyE,MAAM,aAAa,CAAC;AAChI,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAIpC,MAAM,OAAO,WAAW;IACL,MAAM,CAAsB;IACrC,aAAa,CAAgB;IAErC,YAAY,MAAiB;QAC3B,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;QAC5B,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAC3C,CAAC;IAGD;;OAEG;IACK,KAAK,CAAC,wBAAwB,CAAC,IAAa,EAAE,MAAW,EAAE,OAAe;QAChF,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAChD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC5G,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,MAAM,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,mCAAmC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,yBAAyB,CACrC,KAAc,EACd,YAAiB,EACjB,UAAU,GAAG,CAAC,EACd,SAAS,GAAG,IAAI;QAEhB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAE3C,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,IAAI,MAAM,CAAC;gBACX,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;oBACvC,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;gBAC7D,CAAC;qBAAM,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;oBAC9C,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACpE,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC;oBACvB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;oBACzC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;oBACjD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;oBACjH,MAAM,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC;oBAC/C,YAAY,CAAC,OAAO,GAAG,gBAAgB,CAAC;gBAC1C,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,EAAE,MAAM,CAAC,CAAC;gBACpE,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,MAAM,cAAc,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B;gBAC7D,IAAI,GAAG,YAAY,WAAW,IAAI,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,MAAM,GAAG,CAAC;gBAE/E,OAAO,EAAE,CAAC;gBACV,OAAO,CAAC,IAAI,CAAC,yBAAyB,OAAO,YAAY,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBACxE,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;oBACzB,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,sCAAsC,UAAU,UAAU,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC/G,CAAC;gBAED,MAAM,KAAK,GAAG,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;gBAC7C,OAAO,CAAC,IAAI,CAAC,4BAA4B,KAAK,OAAO,CAAC,CAAC;gBACvD,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB,CAC5B,aAA4B,EAC5B,IAAa,EACb,YAAiB,EACjB,YAAiB,EACjB,qBAA6C,EAC7C,UAAU,GAAG,CAAC,EACd,SAAS,GAAG,IAAI;QAEhB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QAEzC,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,qBAAqB,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;gBAClF,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC;oBACpE,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,gCAAgC,SAAS,CAAC,QAAQ,CAAC,MAAM,OAAO,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;gBACtI,CAAC;gBAED,MAAM,MAAM,GAAG;oBACb,GAAG,YAAY;oBACf,GAAG,YAAY;oBACf,QAAQ,EAAE,SAAS,CAAC,QAAQ;oBAC5B,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;oBAC5C,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE;oBAC9C,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,kBAAkB,EAAE,MAAM;iBAC3B,CAAC;gBAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;gBACtE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,EAAE,MAAM,CAAC,CAAC;gBAChE,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO,EAAE,CAAC;gBAEV,IAAI,GAAG,EAAE,CAAC;oBACR,MAAM,IAAI,GAAwB,EAAE,CAAC;oBACrC,IAAI,GAAG,CAAC,IAAI;wBAAE,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;oBACnC,IAAI,GAAG,CAAC,OAAO;wBAAE,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;oBAC5C,IAAI,GAAG,CAAC,IAAI;wBAAE,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;oBACnC,OAAO,CAAC,IAAI,CAAC,qBAAqB,OAAO,UAAU,EAAE,IAAI,CAAC,CAAC;oBAE3D,MAAM,cAAc,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ;oBAC1C,IAAI,IAAI,CAAC,IAAI,IAAI,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;wBACpD,IAAI,GAAG,YAAY,WAAW;4BAAE,MAAM,GAAG,CAAC;wBAC1C,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,wBAAwB,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC7E,CAAC;gBACH,CAAC;gBAED,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;oBACzB,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,gCAAgC,UAAU,UAAU,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;gBACzG,CAAC;gBAED,MAAM,KAAK,GAAG,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;gBAC7C,OAAO,CAAC,IAAI,CAAC,wBAAwB,KAAK,OAAO,CAAC,CAAC;gBACnD,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iCAAiC,CAC7C,YAAiB,EACjB,UAAU,GAAG,CAAC,EACd,SAAS,GAAG,IAAI;QAEhB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QAEpC,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC;oBAC9D,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM;oBAC9B,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY;iBAC3C,CAAC,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,EAAE,MAAM,CAAC,CAAC;gBAChE,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO,EAAE,CAAC;gBACV,OAAO,CAAC,IAAI,CAAC,qBAAqB,OAAO,YAAY,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBACpE,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;oBACzB,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,+BAA+B,UAAU,UAAU,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;gBACxG,CAAC;gBAED,MAAM,KAAK,GAAG,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;gBAC7C,OAAO,CAAC,IAAI,CAAC,wBAAwB,KAAK,OAAO,CAAC,CAAC;gBACnD,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,uBAAuB,CAAC,UAAuB,EAAE,YAAiB;QAC9E,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACtC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAEpE,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,oCAAoC,CAAC,CAAC;QACvE,CAAC;QAED,IAAI,UAAU,IAAI,iBAAiB,EAAE,CAAC;YACpC,QAAQ;YACR,OAAO;gBACL,eAAe,EAAE;oBACf,iBAAiB,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC;oBACxF,WAAW,EAAE,YAAY;oBACzB,YAAY,EAAE,aAAa;iBAC5B;gBACD,SAAS,EAAE,MAAM;aAClB,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,EAAE,CAAC;QACZ,CAAC;IAEH,CAAC;IAGD;;OAEG;IACK,KAAK,CAAC,QAAQ,CAAC,aAA4B,EAAE,UAAmB,EAAE,EAAE,qBAA6C;QACvH,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC;YACH,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;YAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,sBAAsB;gBACtB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC/C,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;oBAAC,MAAM,GAAG,0BAA0B,CAAC;gBAAC,CAAC;qBAC3D,IAAI,OAAO,KAAK,cAAc,EAAE,CAAC;oBAAC,MAAM,GAAG,0BAA0B,CAAC;gBAAC,CAAC;YAC/E,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC;YAC7D,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC/E,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;YAEhD,MAAM,YAAY,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YACrC,IAAI,UAAU,EAAE,CAAC;gBACf,YAAY,CAAC,OAAO,GAAI,MAAwB,CAAC,OAAO,CAAC;YAC3D,CAAC;YAED,MAAM,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAE3D,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAEvF,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAC9C,aAAa,EACb,IAAI,EACJ,YAAY,EACZ,YAAY,EACZ,qBAAqB,EACrB,CAAC,EAAE,IAAI,CACR,CAAC;YAEF,MAAM,IAAI,CAAC,iCAAiC,CAAC,YAAY,CAAC,CAAC;YAE3D,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;YAEnG,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,IAAI,CAAC,CAAC;YAEnE,OAAO,eAAe,CAAC;QACzB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,CAAC,GAAG,YAAY,WAAW,CAAC,EAAE,CAAC;gBAClC,GAAG,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,iBAAiB,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;YACtE,CAAC;YACD,MAAM,eAAe,CAAC,GAAG,CAAC,CAAC;YAE3B,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAA0B,EAAE,UAAmB,EAAE;QAC7D,MAAM,YAAY,GAAwB,EAAE,CAAC,CAAC,qBAAqB;QAEnE,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC,EAAE;gBAAE,SAAS,CAAC,oBAAoB;YACvC,MAAM,SAAS,GAAG,EAAE,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS;gBAAE,SAAS,CAAC,+BAA+B;YAEzD,YAAY,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,EAAE,EAA2B,CAAC,CAAC;QAC3F,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;CACF"}
|