@zama-fhe/sdk 1.0.0-alpha.10
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/LICENSE +28 -0
- package/README.md +801 -0
- package/dist/chunk-5QJTGZHY.js +101 -0
- package/dist/chunk-5QJTGZHY.js.map +1 -0
- package/dist/chunk-6JRD26PS.js +114 -0
- package/dist/chunk-6JRD26PS.js.map +1 -0
- package/dist/chunk-PHE3BSIB.js +5143 -0
- package/dist/chunk-PHE3BSIB.js.map +1 -0
- package/dist/chunk-UF47M3QR.js +32 -0
- package/dist/chunk-UF47M3QR.js.map +1 -0
- package/dist/chunk-WYWAO3QE.js +182 -0
- package/dist/chunk-WYWAO3QE.js.map +1 -0
- package/dist/cleartext/index.d.ts +45 -0
- package/dist/cleartext/index.js +522 -0
- package/dist/cleartext/index.js.map +1 -0
- package/dist/ethers/index.d.ts +86 -0
- package/dist/ethers/index.js +148 -0
- package/dist/ethers/index.js.map +1 -0
- package/dist/index.d.ts +33405 -0
- package/dist/index.js +3563 -0
- package/dist/index.js.map +1 -0
- package/dist/node/index.d.ts +195 -0
- package/dist/node/index.js +337 -0
- package/dist/node/index.js.map +1 -0
- package/dist/relayer-sdk-Dh9aQmBm.d.ts +39 -0
- package/dist/relayer-sdk.node-worker.d.ts +2 -0
- package/dist/relayer-sdk.node-worker.js +348 -0
- package/dist/relayer-sdk.node-worker.js.map +1 -0
- package/dist/relayer-sdk.types-CgHZ6qZn.d.ts +327 -0
- package/dist/relayer-sdk.worker.js +511 -0
- package/dist/relayer-sdk.worker.js.map +1 -0
- package/dist/relayer-utils-phBmWrNB.d.ts +10 -0
- package/dist/token.types-CUTkehsp.d.ts +299 -0
- package/dist/transfer-batcher-CNtrNMz6.d.ts +197 -0
- package/dist/viem/index.d.ts +58 -0
- package/dist/viem/index.js +143 -0
- package/dist/viem/index.js.map +1 -0
- package/package.json +90 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
// src/worker/worker.base-client.ts
|
|
2
|
+
var DEFAULT_TIMEOUT_MS = 3e4;
|
|
3
|
+
var INIT_TIMEOUT_MS = 6e4;
|
|
4
|
+
var BaseWorkerClient = class {
|
|
5
|
+
#worker = null;
|
|
6
|
+
#pendingRequests = /* @__PURE__ */ new Map();
|
|
7
|
+
#initPromise = null;
|
|
8
|
+
config;
|
|
9
|
+
logger;
|
|
10
|
+
constructor(config, logger) {
|
|
11
|
+
this.config = config;
|
|
12
|
+
this.logger = logger;
|
|
13
|
+
}
|
|
14
|
+
// ===========================================================================
|
|
15
|
+
// Shared init / terminate
|
|
16
|
+
// ===========================================================================
|
|
17
|
+
async initWorker() {
|
|
18
|
+
if (this.#worker) return this.#worker;
|
|
19
|
+
if (!this.#initPromise) {
|
|
20
|
+
this.#initPromise = this.#doInitWorker().catch((err) => {
|
|
21
|
+
this.#initPromise = null;
|
|
22
|
+
throw err;
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
return this.#initPromise;
|
|
26
|
+
}
|
|
27
|
+
async #doInitWorker() {
|
|
28
|
+
const worker = this.createWorker();
|
|
29
|
+
this.wireEvents(worker);
|
|
30
|
+
try {
|
|
31
|
+
const { type, payload } = this.getInitPayload();
|
|
32
|
+
await this.sendRequestTo(worker, type, payload, INIT_TIMEOUT_MS);
|
|
33
|
+
this.onWorkerReady?.(worker);
|
|
34
|
+
this.#worker = worker;
|
|
35
|
+
} catch (err) {
|
|
36
|
+
this.terminateWorker(worker);
|
|
37
|
+
throw err;
|
|
38
|
+
}
|
|
39
|
+
return this.#worker;
|
|
40
|
+
}
|
|
41
|
+
terminate() {
|
|
42
|
+
if (this.#worker) {
|
|
43
|
+
for (const [id, pending] of this.#pendingRequests) {
|
|
44
|
+
clearTimeout(pending.timeoutId);
|
|
45
|
+
pending.reject(new Error("Worker terminated"));
|
|
46
|
+
this.#pendingRequests.delete(id);
|
|
47
|
+
}
|
|
48
|
+
this.terminateWorker(this.#worker);
|
|
49
|
+
this.#worker = null;
|
|
50
|
+
}
|
|
51
|
+
this.#initPromise = null;
|
|
52
|
+
}
|
|
53
|
+
// ===========================================================================
|
|
54
|
+
// Message handling (called by subclass event wiring)
|
|
55
|
+
// ===========================================================================
|
|
56
|
+
handleResponse(response) {
|
|
57
|
+
const pending = this.#pendingRequests.get(response.id);
|
|
58
|
+
if (!pending) {
|
|
59
|
+
this.logger?.warn("[WorkerClient] Received response for unknown request", {
|
|
60
|
+
id: response.id
|
|
61
|
+
});
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const elapsed = Math.round(performance.now() - pending.startTime);
|
|
65
|
+
clearTimeout(pending.timeoutId);
|
|
66
|
+
this.#pendingRequests.delete(response.id);
|
|
67
|
+
if (response.success) {
|
|
68
|
+
this.logger?.debug(`[WorkerClient] \u2190 ${pending.type} OK`, {
|
|
69
|
+
id: response.id,
|
|
70
|
+
elapsed
|
|
71
|
+
});
|
|
72
|
+
pending.resolve(response.data);
|
|
73
|
+
} else {
|
|
74
|
+
this.logger?.error(`[WorkerClient] \u2190 ${pending.type} FAILED`, {
|
|
75
|
+
id: response.id,
|
|
76
|
+
elapsed,
|
|
77
|
+
error: response.error
|
|
78
|
+
});
|
|
79
|
+
const err = new Error(response.error);
|
|
80
|
+
if ("statusCode" in response && typeof response.statusCode === "number") {
|
|
81
|
+
err.statusCode = response.statusCode;
|
|
82
|
+
}
|
|
83
|
+
pending.reject(err);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
handleWorkerError(message) {
|
|
87
|
+
this.logger?.error("[WorkerClient] Worker error", { error: message });
|
|
88
|
+
const worker = this.#worker;
|
|
89
|
+
this.#worker = null;
|
|
90
|
+
this.#rejectAllPending(`Worker error: ${message}`);
|
|
91
|
+
if (worker) this.terminateWorker(worker);
|
|
92
|
+
}
|
|
93
|
+
handleWorkerMessageError() {
|
|
94
|
+
this.logger?.error("[WorkerClient] Message deserialization failed");
|
|
95
|
+
const worker = this.#worker;
|
|
96
|
+
this.#worker = null;
|
|
97
|
+
this.#rejectAllPending("Worker message deserialization failed");
|
|
98
|
+
if (worker) this.terminateWorker(worker);
|
|
99
|
+
}
|
|
100
|
+
// ===========================================================================
|
|
101
|
+
// Request sending
|
|
102
|
+
// ===========================================================================
|
|
103
|
+
sendRequestTo(worker, type, payload, timeoutMs = DEFAULT_TIMEOUT_MS) {
|
|
104
|
+
return new Promise((resolve, reject) => {
|
|
105
|
+
const id = this.generateRequestId();
|
|
106
|
+
const startTime = performance.now();
|
|
107
|
+
this.logger?.debug(`[WorkerClient] \u2192 ${type}`, { id });
|
|
108
|
+
const timeoutId = setTimeout(() => {
|
|
109
|
+
this.#pendingRequests.delete(id);
|
|
110
|
+
const elapsed = Math.round(performance.now() - startTime);
|
|
111
|
+
this.logger?.error(`[WorkerClient] ${type} timed out after ${timeoutMs}ms`, {
|
|
112
|
+
id,
|
|
113
|
+
elapsed
|
|
114
|
+
});
|
|
115
|
+
reject(new Error(`Request ${type} timed out after ${timeoutMs}ms`));
|
|
116
|
+
}, timeoutMs);
|
|
117
|
+
this.#pendingRequests.set(id, {
|
|
118
|
+
resolve,
|
|
119
|
+
reject,
|
|
120
|
+
timeoutId,
|
|
121
|
+
startTime,
|
|
122
|
+
type
|
|
123
|
+
});
|
|
124
|
+
const request = { id, type, payload };
|
|
125
|
+
this.postMessage(worker, request);
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
async sendRequest(type, payload, timeoutMs = DEFAULT_TIMEOUT_MS) {
|
|
129
|
+
const worker = await this.initWorker();
|
|
130
|
+
return this.sendRequestTo(worker, type, payload, timeoutMs);
|
|
131
|
+
}
|
|
132
|
+
// ===========================================================================
|
|
133
|
+
// Domain methods
|
|
134
|
+
// ===========================================================================
|
|
135
|
+
async generateKeypair() {
|
|
136
|
+
return this.sendRequest("GENERATE_KEYPAIR", {});
|
|
137
|
+
}
|
|
138
|
+
async createEIP712(params) {
|
|
139
|
+
return this.sendRequest("CREATE_EIP712", params);
|
|
140
|
+
}
|
|
141
|
+
async encrypt(params) {
|
|
142
|
+
return this.sendRequest("ENCRYPT", params);
|
|
143
|
+
}
|
|
144
|
+
async userDecrypt(params) {
|
|
145
|
+
return this.sendRequest("USER_DECRYPT", params);
|
|
146
|
+
}
|
|
147
|
+
async publicDecrypt(handles) {
|
|
148
|
+
return this.sendRequest("PUBLIC_DECRYPT", { handles });
|
|
149
|
+
}
|
|
150
|
+
async createDelegatedUserDecryptEIP712(params) {
|
|
151
|
+
return this.sendRequest("CREATE_DELEGATED_EIP712", params);
|
|
152
|
+
}
|
|
153
|
+
async delegatedUserDecrypt(params) {
|
|
154
|
+
return this.sendRequest("DELEGATED_USER_DECRYPT", params);
|
|
155
|
+
}
|
|
156
|
+
async requestZKProofVerification(zkProof) {
|
|
157
|
+
return this.sendRequest(
|
|
158
|
+
"REQUEST_ZK_PROOF_VERIFICATION",
|
|
159
|
+
{ zkProof }
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
async getPublicKey() {
|
|
163
|
+
return this.sendRequest("GET_PUBLIC_KEY", {});
|
|
164
|
+
}
|
|
165
|
+
async getPublicParams(bits) {
|
|
166
|
+
return this.sendRequest("GET_PUBLIC_PARAMS", { bits });
|
|
167
|
+
}
|
|
168
|
+
// ===========================================================================
|
|
169
|
+
// Internal helpers
|
|
170
|
+
// ===========================================================================
|
|
171
|
+
#rejectAllPending(message) {
|
|
172
|
+
for (const [id, pending] of this.#pendingRequests) {
|
|
173
|
+
clearTimeout(pending.timeoutId);
|
|
174
|
+
pending.reject(new Error(message));
|
|
175
|
+
this.#pendingRequests.delete(id);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
export { BaseWorkerClient };
|
|
181
|
+
//# sourceMappingURL=chunk-WYWAO3QE.js.map
|
|
182
|
+
//# sourceMappingURL=chunk-WYWAO3QE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/worker/worker.base-client.ts"],"names":[],"mappings":"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","file":"chunk-WYWAO3QE.js","sourcesContent":["import type { ZKProofLike } from \"../relayer/relayer-sdk.types\";\nimport type {\n CreateDelegatedEIP712Payload,\n CreateDelegatedEIP712ResponseData,\n CreateEIP712Payload,\n CreateEIP712ResponseData,\n DelegatedUserDecryptPayload,\n DelegatedUserDecryptResponseData,\n EncryptPayload,\n EncryptResponseData,\n GenerateKeypairResponseData,\n GetPublicKeyResponseData,\n GetPublicParamsResponseData,\n InitResponseData,\n PublicDecryptResponseData,\n RequestZKProofVerificationResponseData,\n UserDecryptPayload,\n UserDecryptResponseData,\n GenericLogger,\n WorkerRequest,\n WorkerRequestType,\n WorkerResponse,\n} from \"./worker.types\";\n\n/** Pending request tracker */\ninterface PendingRequest<T> {\n resolve: (value: T) => void;\n reject: (error: Error) => void;\n timeoutId: ReturnType<typeof setTimeout>;\n startTime: number;\n type: WorkerRequestType;\n}\n\n/** Default timeout for operations (30 seconds) */\nexport const DEFAULT_TIMEOUT_MS = 30_000;\n\n/** Extended timeout for WASM initialization (60 seconds) */\nexport const INIT_TIMEOUT_MS = 60_000;\n\n/**\n * Abstract base class for worker clients (browser Web Worker and Node.js worker_threads).\n * Encapsulates all shared logic: pending request tracking, timeouts, init dedup, domain methods.\n * Subclasses implement the abstract hooks for platform-specific worker creation and messaging.\n */\nexport abstract class BaseWorkerClient<TWorker, TConfig> {\n #worker: TWorker | null = null;\n #pendingRequests = new Map<string, PendingRequest<unknown>>();\n #initPromise: Promise<TWorker> | null = null;\n protected readonly config: TConfig;\n protected readonly logger: GenericLogger | undefined;\n\n constructor(config: TConfig, logger: GenericLogger | undefined) {\n this.config = config;\n this.logger = logger;\n }\n\n // ===========================================================================\n // Abstract hooks — subclasses must implement\n // ===========================================================================\n\n /** Create the platform-specific worker instance. */\n protected abstract createWorker(): TWorker;\n\n /** Wire message/error/messageerror events on the worker. */\n protected abstract wireEvents(worker: TWorker): void;\n\n /** Post a message to the worker. */\n protected abstract postMessage(worker: TWorker, request: WorkerRequest): void;\n\n /** Terminate the platform-specific worker. */\n protected abstract terminateWorker(worker: TWorker): void;\n\n /** Generate a unique request ID. */\n protected abstract generateRequestId(): string;\n\n /** Return the init request type and payload. */\n protected abstract getInitPayload(): {\n type: WorkerRequestType;\n payload: WorkerRequest[\"payload\"];\n };\n\n /** Optional hook called after worker init succeeds (e.g. for node worker.unref()). */\n protected onWorkerReady?(_worker: TWorker): void;\n\n // ===========================================================================\n // Shared init / terminate\n // ===========================================================================\n\n async initWorker(): Promise<TWorker> {\n if (this.#worker) return this.#worker;\n\n if (!this.#initPromise) {\n this.#initPromise = this.#doInitWorker().catch((err) => {\n this.#initPromise = null;\n throw err;\n });\n }\n return this.#initPromise;\n }\n\n async #doInitWorker(): Promise<TWorker> {\n const worker = this.createWorker();\n this.wireEvents(worker);\n\n try {\n const { type, payload } = this.getInitPayload();\n await this.sendRequestTo<InitResponseData>(worker, type, payload, INIT_TIMEOUT_MS);\n this.onWorkerReady?.(worker);\n this.#worker = worker;\n } catch (err) {\n this.terminateWorker(worker);\n throw err;\n }\n\n return this.#worker;\n }\n\n terminate(): void {\n if (this.#worker) {\n for (const [id, pending] of this.#pendingRequests) {\n clearTimeout(pending.timeoutId);\n pending.reject(new Error(\"Worker terminated\"));\n this.#pendingRequests.delete(id);\n }\n\n this.terminateWorker(this.#worker);\n this.#worker = null;\n }\n this.#initPromise = null;\n }\n\n // ===========================================================================\n // Message handling (called by subclass event wiring)\n // ===========================================================================\n\n protected handleResponse(response: WorkerResponse<unknown>): void {\n const pending = this.#pendingRequests.get(response.id);\n\n if (!pending) {\n this.logger?.warn(\"[WorkerClient] Received response for unknown request\", {\n id: response.id,\n });\n return;\n }\n\n const elapsed = Math.round(performance.now() - pending.startTime);\n\n clearTimeout(pending.timeoutId);\n this.#pendingRequests.delete(response.id);\n\n if (response.success) {\n this.logger?.debug(`[WorkerClient] ← ${pending.type} OK`, {\n id: response.id,\n elapsed,\n });\n pending.resolve(response.data);\n } else {\n this.logger?.error(`[WorkerClient] ← ${pending.type} FAILED`, {\n id: response.id,\n elapsed,\n error: response.error,\n });\n const err = new Error(response.error);\n if (\"statusCode\" in response && typeof response.statusCode === \"number\") {\n (err as Error & { statusCode?: number }).statusCode = response.statusCode;\n }\n pending.reject(err);\n }\n }\n\n protected handleWorkerError(message: string): void {\n this.logger?.error(\"[WorkerClient] Worker error\", { error: message });\n const worker = this.#worker;\n this.#worker = null;\n this.#rejectAllPending(`Worker error: ${message}`);\n if (worker) this.terminateWorker(worker);\n }\n\n protected handleWorkerMessageError(): void {\n this.logger?.error(\"[WorkerClient] Message deserialization failed\");\n const worker = this.#worker;\n this.#worker = null;\n this.#rejectAllPending(\"Worker message deserialization failed\");\n if (worker) this.terminateWorker(worker);\n }\n\n // ===========================================================================\n // Request sending\n // ===========================================================================\n\n protected sendRequestTo<T>(\n worker: TWorker,\n type: WorkerRequestType,\n payload: WorkerRequest[\"payload\"],\n timeoutMs: number = DEFAULT_TIMEOUT_MS,\n ): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const id = this.generateRequestId();\n const startTime = performance.now();\n this.logger?.debug(`[WorkerClient] → ${type}`, { id });\n\n const timeoutId = setTimeout(() => {\n this.#pendingRequests.delete(id);\n const elapsed = Math.round(performance.now() - startTime);\n this.logger?.error(`[WorkerClient] ${type} timed out after ${timeoutMs}ms`, {\n id,\n elapsed,\n });\n reject(new Error(`Request ${type} timed out after ${timeoutMs}ms`));\n }, timeoutMs);\n\n this.#pendingRequests.set(id, {\n resolve: resolve as (value: unknown) => void,\n reject,\n timeoutId,\n startTime,\n type,\n });\n\n const request = { id, type, payload } as WorkerRequest;\n this.postMessage(worker, request);\n });\n }\n\n protected async sendRequest<T>(\n type: WorkerRequestType,\n payload: WorkerRequest[\"payload\"],\n timeoutMs: number = DEFAULT_TIMEOUT_MS,\n ): Promise<T> {\n const worker = await this.initWorker();\n return this.sendRequestTo<T>(worker, type, payload, timeoutMs);\n }\n\n // ===========================================================================\n // Domain methods\n // ===========================================================================\n\n async generateKeypair(): Promise<GenerateKeypairResponseData> {\n return this.sendRequest<GenerateKeypairResponseData>(\"GENERATE_KEYPAIR\", {});\n }\n\n async createEIP712(params: CreateEIP712Payload): Promise<CreateEIP712ResponseData> {\n return this.sendRequest<CreateEIP712ResponseData>(\"CREATE_EIP712\", params);\n }\n\n async encrypt(params: EncryptPayload): Promise<EncryptResponseData> {\n return this.sendRequest<EncryptResponseData>(\"ENCRYPT\", params);\n }\n\n async userDecrypt(params: UserDecryptPayload): Promise<UserDecryptResponseData> {\n return this.sendRequest<UserDecryptResponseData>(\"USER_DECRYPT\", params);\n }\n\n async publicDecrypt(handles: string[]): Promise<PublicDecryptResponseData> {\n return this.sendRequest<PublicDecryptResponseData>(\"PUBLIC_DECRYPT\", { handles });\n }\n\n async createDelegatedUserDecryptEIP712(\n params: CreateDelegatedEIP712Payload,\n ): Promise<CreateDelegatedEIP712ResponseData> {\n return this.sendRequest<CreateDelegatedEIP712ResponseData>(\"CREATE_DELEGATED_EIP712\", params);\n }\n\n async delegatedUserDecrypt(\n params: DelegatedUserDecryptPayload,\n ): Promise<DelegatedUserDecryptResponseData> {\n return this.sendRequest<DelegatedUserDecryptResponseData>(\"DELEGATED_USER_DECRYPT\", params);\n }\n\n async requestZKProofVerification(\n zkProof: ZKProofLike,\n ): Promise<RequestZKProofVerificationResponseData> {\n return this.sendRequest<RequestZKProofVerificationResponseData>(\n \"REQUEST_ZK_PROOF_VERIFICATION\",\n { zkProof },\n );\n }\n\n async getPublicKey(): Promise<GetPublicKeyResponseData> {\n return this.sendRequest<GetPublicKeyResponseData>(\"GET_PUBLIC_KEY\", {});\n }\n\n async getPublicParams(bits: number): Promise<GetPublicParamsResponseData> {\n return this.sendRequest<GetPublicParamsResponseData>(\"GET_PUBLIC_PARAMS\", { bits });\n }\n\n // ===========================================================================\n // Internal helpers\n // ===========================================================================\n\n #rejectAllPending(message: string): void {\n for (const [id, pending] of this.#pendingRequests) {\n clearTimeout(pending.timeoutId);\n pending.reject(new Error(message));\n this.#pendingRequests.delete(id);\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { R as RelayerSDK } from '../relayer-sdk-Dh9aQmBm.js';
|
|
2
|
+
import { EIP1193Provider } from 'viem';
|
|
3
|
+
import '../relayer-sdk.types-CgHZ6qZn.js';
|
|
4
|
+
import '@zama-fhe/relayer-sdk/bundle';
|
|
5
|
+
|
|
6
|
+
interface CleartextContracts {
|
|
7
|
+
acl: string;
|
|
8
|
+
executor: string;
|
|
9
|
+
inputVerifier: string;
|
|
10
|
+
kmsVerifier: string;
|
|
11
|
+
verifyingInputVerifier: string;
|
|
12
|
+
verifyingDecryption: string;
|
|
13
|
+
}
|
|
14
|
+
interface CleartextConfig {
|
|
15
|
+
chainId: bigint;
|
|
16
|
+
gatewayChainId: number;
|
|
17
|
+
contracts: CleartextContracts;
|
|
18
|
+
}
|
|
19
|
+
interface CleartextChainConfig extends CleartextConfig {
|
|
20
|
+
rpcUrl: string | EIP1193Provider;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
declare function createCleartextRelayer(config: CleartextChainConfig): RelayerSDK;
|
|
24
|
+
|
|
25
|
+
declare const hoodi: {
|
|
26
|
+
chainId: bigint;
|
|
27
|
+
gatewayChainId: number;
|
|
28
|
+
rpcUrl: string;
|
|
29
|
+
contracts: {
|
|
30
|
+
acl: string;
|
|
31
|
+
executor: string;
|
|
32
|
+
kmsVerifier: string;
|
|
33
|
+
inputVerifier: string;
|
|
34
|
+
verifyingInputVerifier: string;
|
|
35
|
+
verifyingDecryption: string;
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
declare const VERIFYING_CONTRACTS: {
|
|
40
|
+
readonly inputVerification: "0x812b06e1CDCE800494b79fFE4f925A504a9A9810";
|
|
41
|
+
readonly decryption: "0x5ffdaAB0373E62E2ea2944776209aEf29E631A64";
|
|
42
|
+
};
|
|
43
|
+
declare const GATEWAY_CHAIN_ID = 10901;
|
|
44
|
+
|
|
45
|
+
export { type CleartextChainConfig, type CleartextContracts, GATEWAY_CHAIN_ID, VERIFYING_CONTRACTS, createCleartextRelayer, hoodi };
|