@inco/js 0.8.0-devnet-28 → 0.8.0-devnet-30

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 (126) hide show
  1. package/dist/cjs/advancedacl/session-key.d.ts +4 -4
  2. package/dist/cjs/advancedacl/session-key.js +4 -3
  3. package/dist/cjs/attestedcompute/attested-compute.d.ts +0 -1
  4. package/dist/cjs/attestedcompute/attested-compute.js +7 -8
  5. package/dist/cjs/attesteddecrypt/attested-decrypt.d.ts +3 -4
  6. package/dist/cjs/attesteddecrypt/attested-decrypt.js +8 -60
  7. package/dist/cjs/attestedreveal/attested-reveal.d.ts +3 -4
  8. package/dist/cjs/attestedreveal/attested-reveal.js +2 -9
  9. package/dist/cjs/chain.d.ts +6 -0
  10. package/dist/cjs/chain.js +15 -2
  11. package/dist/cjs/eip712/eip712.d.ts +18 -0
  12. package/dist/cjs/eip712/eip712.js +51 -0
  13. package/dist/cjs/eip712/index.d.ts +1 -0
  14. package/dist/cjs/eip712/index.js +8 -0
  15. package/dist/cjs/elistattesteddecrypt/elist-attested-decrypt.d.ts +49 -0
  16. package/dist/cjs/elistattesteddecrypt/elist-attested-decrypt.js +94 -0
  17. package/dist/cjs/elistattesteddecrypt/index.d.ts +2 -0
  18. package/dist/cjs/elistattesteddecrypt/index.js +22 -0
  19. package/dist/cjs/elistattesteddecrypt/types.d.ts +31 -0
  20. package/dist/cjs/elistattesteddecrypt/types.js +16 -0
  21. package/dist/cjs/generated/abis/lightning.d.ts +0 -39
  22. package/dist/cjs/generated/abis/lightning.js +1 -39
  23. package/dist/cjs/generated/abis/test-elist.d.ts +6 -0
  24. package/dist/cjs/generated/abis/test-elist.js +8 -1
  25. package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +18 -36
  26. package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.js +35 -40
  27. package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +16 -0
  28. package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.js +2 -2
  29. package/dist/cjs/generated/lightning.d.ts +29 -0
  30. package/dist/cjs/generated/lightning.js +30 -1
  31. package/dist/cjs/generated/local-node.d.ts +5 -5
  32. package/dist/cjs/generated/local-node.js +16 -6
  33. package/dist/cjs/handle.d.ts +8 -0
  34. package/dist/cjs/handle.js +20 -2
  35. package/dist/cjs/kms/quorumClient.d.ts +17 -4
  36. package/dist/cjs/kms/quorumClient.js +150 -1
  37. package/dist/cjs/kms/quorumConsistency.d.ts +25 -1
  38. package/dist/cjs/kms/quorumConsistency.js +70 -1
  39. package/dist/cjs/kms/signatureVerification.d.ts +2 -2
  40. package/dist/cjs/kms/signatureVerification.js +1 -1
  41. package/dist/cjs/lite/attested-compute.d.ts +2 -2
  42. package/dist/cjs/lite/attested-compute.js +2 -3
  43. package/dist/cjs/lite/attested-decrypt.d.ts +2 -2
  44. package/dist/cjs/lite/attested-decrypt.js +2 -3
  45. package/dist/cjs/lite/lightning.d.ts +40 -19
  46. package/dist/cjs/lite/lightning.js +103 -29
  47. package/dist/cjs/test/mocks.d.ts +5 -1
  48. package/dist/cjs/test/mocks.js +29 -5
  49. package/dist/cjs/viem.d.ts +2 -1
  50. package/dist/cjs/viem.js +1 -1
  51. package/dist/esm/advancedacl/session-key.d.ts +4 -4
  52. package/dist/esm/advancedacl/session-key.js +6 -5
  53. package/dist/esm/attestedcompute/attested-compute.d.ts +0 -1
  54. package/dist/esm/attestedcompute/attested-compute.js +5 -6
  55. package/dist/esm/attesteddecrypt/attested-decrypt.d.ts +3 -4
  56. package/dist/esm/attesteddecrypt/attested-decrypt.js +6 -58
  57. package/dist/esm/attestedreveal/attested-reveal.d.ts +3 -4
  58. package/dist/esm/attestedreveal/attested-reveal.js +2 -9
  59. package/dist/esm/chain.d.ts +6 -0
  60. package/dist/esm/chain.js +14 -1
  61. package/dist/esm/eip712/eip712.d.ts +18 -0
  62. package/dist/esm/eip712/eip712.js +46 -0
  63. package/dist/esm/eip712/index.d.ts +1 -0
  64. package/dist/esm/eip712/index.js +2 -0
  65. package/dist/esm/elistattesteddecrypt/elist-attested-decrypt.d.ts +49 -0
  66. package/dist/esm/elistattesteddecrypt/elist-attested-decrypt.js +89 -0
  67. package/dist/esm/elistattesteddecrypt/index.d.ts +2 -0
  68. package/dist/esm/elistattesteddecrypt/index.js +3 -0
  69. package/dist/esm/elistattesteddecrypt/types.d.ts +31 -0
  70. package/dist/esm/elistattesteddecrypt/types.js +12 -0
  71. package/dist/esm/generated/abis/lightning.d.ts +0 -39
  72. package/dist/esm/generated/abis/lightning.js +1 -39
  73. package/dist/esm/generated/abis/test-elist.d.ts +6 -0
  74. package/dist/esm/generated/abis/test-elist.js +8 -1
  75. package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +18 -36
  76. package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.js +34 -39
  77. package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +16 -0
  78. package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.js +2 -2
  79. package/dist/esm/generated/lightning.d.ts +29 -0
  80. package/dist/esm/generated/lightning.js +30 -1
  81. package/dist/esm/generated/local-node.d.ts +5 -5
  82. package/dist/esm/generated/local-node.js +16 -6
  83. package/dist/esm/handle.d.ts +8 -0
  84. package/dist/esm/handle.js +18 -1
  85. package/dist/esm/kms/quorumClient.d.ts +17 -4
  86. package/dist/esm/kms/quorumClient.js +152 -3
  87. package/dist/esm/kms/quorumConsistency.d.ts +25 -1
  88. package/dist/esm/kms/quorumConsistency.js +68 -1
  89. package/dist/esm/kms/signatureVerification.d.ts +2 -2
  90. package/dist/esm/kms/signatureVerification.js +1 -1
  91. package/dist/esm/lite/attested-compute.d.ts +2 -2
  92. package/dist/esm/lite/attested-compute.js +3 -3
  93. package/dist/esm/lite/attested-decrypt.d.ts +2 -2
  94. package/dist/esm/lite/attested-decrypt.js +3 -3
  95. package/dist/esm/lite/lightning.d.ts +40 -19
  96. package/dist/esm/lite/lightning.js +104 -30
  97. package/dist/esm/test/mocks.d.ts +5 -1
  98. package/dist/esm/test/mocks.js +28 -6
  99. package/dist/esm/viem.d.ts +2 -1
  100. package/dist/esm/viem.js +1 -1
  101. package/dist/types/advancedacl/session-key.d.ts +4 -4
  102. package/dist/types/attestedcompute/attested-compute.d.ts +0 -1
  103. package/dist/types/attesteddecrypt/attested-decrypt.d.ts +3 -4
  104. package/dist/types/attestedreveal/attested-reveal.d.ts +3 -4
  105. package/dist/types/chain.d.ts +6 -0
  106. package/dist/types/eip712/eip712.d.ts +18 -0
  107. package/dist/types/eip712/index.d.ts +1 -0
  108. package/dist/types/elistattesteddecrypt/elist-attested-decrypt.d.ts +49 -0
  109. package/dist/types/elistattesteddecrypt/index.d.ts +2 -0
  110. package/dist/types/elistattesteddecrypt/types.d.ts +31 -0
  111. package/dist/types/generated/abis/lightning.d.ts +0 -39
  112. package/dist/types/generated/abis/test-elist.d.ts +6 -0
  113. package/dist/types/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +18 -36
  114. package/dist/types/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +16 -0
  115. package/dist/types/generated/lightning.d.ts +29 -0
  116. package/dist/types/generated/local-node.d.ts +5 -5
  117. package/dist/types/handle.d.ts +8 -0
  118. package/dist/types/kms/quorumClient.d.ts +17 -4
  119. package/dist/types/kms/quorumConsistency.d.ts +25 -1
  120. package/dist/types/kms/signatureVerification.d.ts +2 -2
  121. package/dist/types/lite/attested-compute.d.ts +2 -2
  122. package/dist/types/lite/attested-decrypt.d.ts +2 -2
  123. package/dist/types/lite/lightning.d.ts +40 -19
  124. package/dist/types/test/mocks.d.ts +5 -1
  125. package/dist/types/viem.d.ts +2 -1
  126. package/package.json +1 -1
@@ -4,6 +4,7 @@ import { AllowanceVoucherWithSig } from '../advancedacl/types.js';
4
4
  import { AttestedComputeOP } from '../attestedcompute/types.js';
5
5
  import { DecryptionAttestation, EncryptedDecryptionAttestation } from '../attesteddecrypt/index.js';
6
6
  import { Address, HexString } from '../binary.js';
7
+ import { EListDecryptionAttestation, EncryptedEListDecryptionAttestation } from '../elistattesteddecrypt/index.js';
7
8
  import { EncryptionScheme, SupportedFheType } from '../encryption/encryption.js';
8
9
  import { incoVerifierAbi } from '../generated/abis/verifier.js';
9
10
  import { lightningDeployments } from '../generated/lightning.js';
@@ -35,7 +36,7 @@ export type CustomConfig = {
35
36
  chainId: number;
36
37
  covalidatorUrls: string[];
37
38
  signers?: Address[];
38
- hostChainRpcUrl?: string;
39
+ hostChainRpcUrls?: readonly string[] | string[];
39
40
  senderPrivateKey?: HexString;
40
41
  };
41
42
  export type CustomDeployment = DeploymentSlice & CustomConfig;
@@ -57,6 +58,7 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
57
58
  private readonly signers;
58
59
  private readonly threshold;
59
60
  private readonly networkPubkey;
61
+ private readonly publicClient;
60
62
  readonly executorAddress: Address;
61
63
  readonly chainId: bigint;
62
64
  private readonly kmsQuorumClient;
@@ -72,8 +74,13 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
72
74
  getEncryptionScheme(): Promise<EncryptionScheme>;
73
75
  /**
74
76
  * Get a Lightning instance bound to the latest Lightning deployment for the Base Sepolia testnet.
77
+ *
78
+ * @param options.hostChainRpcUrls optional list of RPC URLs for the host chain. When multiple URLs are
79
+ * provided, viem's fallback transport is used and providers are tried in order on failure.
75
80
  */
76
- static baseSepoliaTestnet(): Promise<Lightning<Deployment>>;
81
+ static baseSepoliaTestnet(options?: {
82
+ hostChainRpcUrls?: readonly string[];
83
+ }): Promise<Lightning<Deployment>>;
77
84
  /**
78
85
  * Get a Lightning instance bound to our canonical Anvil-based test node and test Covalidator node
79
86
  *
@@ -100,8 +107,12 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
100
107
  * Get a Lightning deployment by name or executor address on a particular chain.
101
108
  *
102
109
  * @param id this is an object containing either the pair of name and chainId or the executorAddress and chainId
110
+ * @param options.hostChainRpcUrls optional list of RPC URLs for the host chain. When multiple URLs are
111
+ * provided, viem's fallback transport is used and providers are tried in order on failure.
103
112
  */
104
- static at(id: DeploymentId): Promise<Lightning<Deployment>>;
113
+ static at(id: DeploymentId, options?: {
114
+ hostChainRpcUrls?: readonly string[];
115
+ }): Promise<Lightning<Deployment>>;
105
116
  /**
106
117
  * Get a Lightning deployment for a local or custom node
107
118
  *
@@ -123,9 +134,13 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
123
134
  * will not be compatible with the new version.
124
135
  *
125
136
  * @param pepper the pepper to use to filter the deployments
126
- * @param chain the chain to use to filter the deployments
137
+ * @param chainId the chainId to use to filter the deployments
138
+ * @param options.hostChainRpcUrls optional list of RPC URLs for the host chain. When multiple URLs are
139
+ * provided, viem's fallback transport is used and providers are tried in order on failure.
127
140
  */
128
- static latest<P extends Pepper>(pepper: P, chainId: ChainId): Promise<Lightning<Deployment>>;
141
+ static latest<P extends Pepper>(pepper: P, chainId: ChainId, options?: {
142
+ hostChainRpcUrls?: readonly string[];
143
+ }): Promise<Lightning<Deployment>>;
129
144
  /** Returns a shallow copy of the deployment configuration this Lightning instance is bound to. */
130
145
  get deployment(): T;
131
146
  /**
@@ -241,7 +256,6 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
241
256
  *
242
257
  * @param ephemeralAccount Session Account matching the voucher grantee.
243
258
  * @param allowanceVoucherWithSig Signed allowance voucher.
244
- * @param ethClient - A public eth client or eth wallet client used for signing the attested decrypt request
245
259
  * @param handles Handles to decrypt.
246
260
  * @param opts Optional reencryption/backoff configuration.
247
261
  *
@@ -250,7 +264,6 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
250
264
  * const attestations = await lightning.attestedDecryptWithVoucher(
251
265
  * ephemeralAccount,
252
266
  * voucher,
253
- * ethClient,
254
267
  * [handle],
255
268
  * );
256
269
  * ```
@@ -260,7 +273,6 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
260
273
  * const encrypted = await lightning.attestedDecryptWithVoucher(
261
274
  * ephemeralAccount,
262
275
  * voucher,
263
- * ethClient,
264
276
  * [handle],
265
277
  * { reencryptPubKey: delegateKeypair.encodePublicKey() },
266
278
  * );
@@ -271,15 +283,26 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
271
283
  * const decrypted = await lightning.attestedDecryptWithVoucher(
272
284
  * ephemeralAccount,
273
285
  * voucher,
274
- * ethClient,
275
286
  * [handle],
276
287
  * { reencryptPubKey: keypair.encodePublicKey(), reencryptKeypair: keypair },
277
288
  * );
278
289
  * ```
279
290
  */
280
- attestedDecryptWithVoucher(ephemeralAccount: PrivateKeyAccount, allowanceVoucherWithSig: AllowanceVoucherWithSig, ethClient: PublicClient<Transport, Chain> | WalletClient<Transport, Chain, Account>, handles: HexString[], opts?: AttestedWithVoucherOptsEphemeral): Promise<Array<DecryptionAttestation<EncryptionScheme, SupportedFheType>>>;
281
- attestedDecryptWithVoucher(ephemeralAccount: PrivateKeyAccount, allowanceVoucherWithSig: AllowanceVoucherWithSig, ethClient: PublicClient<Transport, Chain> | WalletClient<Transport, Chain, Account>, handles: HexString[], opts: AttestedWithVoucherOptsEncrypted): Promise<Array<EncryptedDecryptionAttestation<EncryptionScheme, SupportedFheType>>>;
282
- attestedDecryptWithVoucher(ephemeralAccount: PrivateKeyAccount, allowanceVoucherWithSig: AllowanceVoucherWithSig, ethClient: PublicClient<Transport, Chain> | WalletClient<Transport, Chain, Account>, handles: HexString[], opts: AttestedWithVoucherOptsDecrypted): Promise<Array<DecryptionAttestation<EncryptionScheme, SupportedFheType>>>;
291
+ attestedDecryptWithVoucher(ephemeralAccount: PrivateKeyAccount, allowanceVoucherWithSig: AllowanceVoucherWithSig, handles: HexString[], opts?: AttestedWithVoucherOptsEphemeral): Promise<Array<DecryptionAttestation<EncryptionScheme, SupportedFheType>>>;
292
+ attestedDecryptWithVoucher(ephemeralAccount: PrivateKeyAccount, allowanceVoucherWithSig: AllowanceVoucherWithSig, handles: HexString[], opts: AttestedWithVoucherOptsEncrypted): Promise<Array<EncryptedDecryptionAttestation<EncryptionScheme, SupportedFheType>>>;
293
+ attestedDecryptWithVoucher(ephemeralAccount: PrivateKeyAccount, allowanceVoucherWithSig: AllowanceVoucherWithSig, handles: HexString[], opts: AttestedWithVoucherOptsDecrypted): Promise<Array<DecryptionAttestation<EncryptionScheme, SupportedFheType>>>;
294
+ eListAttestedDecrypt(walletClient: WalletClient<Transport, Chain, Account>, handle: HexString, opts?: AttestedOptsEphemeral): Promise<EListDecryptionAttestation<EncryptionScheme, SupportedFheType>>;
295
+ eListAttestedDecrypt(walletClient: WalletClient<Transport, Chain, Account>, handle: HexString, opts: AttestedOptsEncrypted): Promise<EncryptedEListDecryptionAttestation<EncryptionScheme, SupportedFheType>>;
296
+ eListAttestedDecrypt(walletClient: WalletClient<Transport, Chain, Account>, handle: HexString, opts: AttestedOptsDecrypted): Promise<EListDecryptionAttestation<EncryptionScheme, SupportedFheType>>;
297
+ /**
298
+ * Reveal a single elist handle without wallet authentication.
299
+ * Returns plaintext values along with an attestation of the checksum.
300
+ *
301
+ * @param handle - The elist handle to reveal
302
+ * @param opts - Optional backoff configuration
303
+ * @returns The elist decryption attestation with plaintext values
304
+ */
305
+ eListAttestedReveal(handle: HexString, opts?: AttestedRevealOpts): Promise<EListDecryptionAttestation<EncryptionScheme, SupportedFheType>>;
283
306
  /**
284
307
  * Get an attested compute for the given wallet client.
285
308
  *
@@ -335,7 +358,6 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
335
358
  * const attestation = await lightning.attestedComputeWithVoucher(
336
359
  * ephemeralAccount,
337
360
  * voucher,
338
- * ethClient,
339
361
  * lhsHandle,
340
362
  * AttestedComputeSupportedOps.Eq,
341
363
  * true,
@@ -347,7 +369,6 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
347
369
  * const encrypted = await lightning.attestedComputeWithVoucher(
348
370
  * ephemeralAccount,
349
371
  * voucher,
350
- * ethClient,
351
372
  * lhsHandle,
352
373
  * AttestedComputeSupportedOps.Eq,
353
374
  * true,
@@ -361,7 +382,6 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
361
382
  * const decrypted = await lightning.attestedComputeWithVoucher(
362
383
  * ephemeralAccount,
363
384
  * voucher,
364
- * ethClient,
365
385
  * lhsHandle,
366
386
  * AttestedComputeSupportedOps.Eq,
367
387
  * true,
@@ -370,9 +390,9 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
370
390
  * console.log(decrypted.plaintext.value);
371
391
  * ```
372
392
  */
373
- attestedComputeWithVoucher(ephemeralAccount: PrivateKeyAccount, allowanceVoucherWithSig: AllowanceVoucherWithSig, ethClient: PublicClient<Transport, Chain> | WalletClient<Transport, Chain, Account>, lhsHandle: HexString, op: AttestedComputeOP, rhsPlaintext: bigint | boolean, opts?: AttestedWithVoucherOptsEphemeral): Promise<DecryptionAttestation<EncryptionScheme, SupportedFheType>>;
374
- attestedComputeWithVoucher(ephemeralAccount: PrivateKeyAccount, allowanceVoucherWithSig: AllowanceVoucherWithSig, ethClient: PublicClient<Transport, Chain> | WalletClient<Transport, Chain, Account>, lhsHandle: HexString, op: AttestedComputeOP, rhsPlaintext: bigint | boolean, opts: AttestedWithVoucherOptsEncrypted): Promise<EncryptedDecryptionAttestation<EncryptionScheme, SupportedFheType>>;
375
- attestedComputeWithVoucher(ephemeralAccount: PrivateKeyAccount, allowanceVoucherWithSig: AllowanceVoucherWithSig, ethClient: PublicClient<Transport, Chain> | WalletClient<Transport, Chain, Account>, lhsHandle: HexString, op: AttestedComputeOP, rhsPlaintext: bigint | boolean, opts: AttestedWithVoucherOptsDecrypted): Promise<DecryptionAttestation<EncryptionScheme, SupportedFheType>>;
393
+ attestedComputeWithVoucher(ephemeralAccount: PrivateKeyAccount, allowanceVoucherWithSig: AllowanceVoucherWithSig, lhsHandle: HexString, op: AttestedComputeOP, rhsPlaintext: bigint | boolean, opts?: AttestedWithVoucherOptsEphemeral): Promise<DecryptionAttestation<EncryptionScheme, SupportedFheType>>;
394
+ attestedComputeWithVoucher(ephemeralAccount: PrivateKeyAccount, allowanceVoucherWithSig: AllowanceVoucherWithSig, lhsHandle: HexString, op: AttestedComputeOP, rhsPlaintext: bigint | boolean, opts: AttestedWithVoucherOptsEncrypted): Promise<EncryptedDecryptionAttestation<EncryptionScheme, SupportedFheType>>;
395
+ attestedComputeWithVoucher(ephemeralAccount: PrivateKeyAccount, allowanceVoucherWithSig: AllowanceVoucherWithSig, lhsHandle: HexString, op: AttestedComputeOP, rhsPlaintext: bigint | boolean, opts: AttestedWithVoucherOptsDecrypted): Promise<DecryptionAttestation<EncryptionScheme, SupportedFheType>>;
376
396
  /**
377
397
  * Get an decryption of publicly revealed handles.
378
398
  *
@@ -392,7 +412,8 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
392
412
  */
393
413
  static getCovalidatorUrls(deployment: DeploymentSlice & {
394
414
  pepper: string;
395
- }, threshold: number): string[];
415
+ majorVersion: number;
416
+ }, signers: Address[]): string[];
396
417
  private static isIdByName;
397
418
  private static plaintextFromValue;
398
419
  /**
@@ -1,10 +1,12 @@
1
- import { createPublicClient, getContract, hexToBytes, http, } from 'viem';
1
+ import { createPublicClient, fallback, getContract, hexToBytes, http, } from 'viem';
2
2
  import { baseSepolia } from 'viem/chains';
3
3
  import { grantSessionKey, grantSessionKeyCustomVerifier, sessionKeyAttestedCompute, sessionKeyAttestedDecrypt, updateActiveVouchersSessionNonce, } from '../advancedacl/session-key.js';
4
4
  import { attestedCompute as performAttestedCompute } from '../attestedcompute/attested-compute.js';
5
5
  import { attestedDecrypt } from '../attesteddecrypt/attested-decrypt.js';
6
6
  import { attestedReveal as performAttestedReveal } from '../attestedreveal/attested-reveal.js';
7
7
  import { HexString, parseAddress } from '../binary.js';
8
+ import { chainShortNames } from '../chain.js';
9
+ import { eListAttestedDecrypt, eListAttestedReveal as performEListAttestedReveal, } from '../elistattesteddecrypt/elist-attested-decrypt.js';
8
10
  import { encryptionSchemes, } from '../encryption/encryption.js';
9
11
  import { incoLightningAbi } from '../generated/abis/lightning.js';
10
12
  import { incoVerifierAbi } from '../generated/abis/verifier.js';
@@ -23,6 +25,20 @@ function isLocalNodeEnvFileSource(value) {
23
25
  'filePath' in value &&
24
26
  typeof value.filePath === 'string');
25
27
  }
28
+ /**
29
+ * Builds a viem Transport from a list of RPC URLs.
30
+ * - No URLs: uses viem's default public RPC endpoint.
31
+ * - One URL: uses a single http() transport.
32
+ * - Multiple URLs: uses viem's fallback() transport (rank: false by default),
33
+ * which tries providers in order and falls back to the next on failure.
34
+ */
35
+ function buildTransport(rpcUrls) {
36
+ if (!rpcUrls || rpcUrls.length === 0)
37
+ return http();
38
+ if (rpcUrls.length === 1)
39
+ return http(rpcUrls[0]);
40
+ return fallback(rpcUrls.map((url) => http(url)));
41
+ }
26
42
  /**
27
43
  * The Lightning class provides a convenient way to interact with the Inco Lightning contract by binding to a specific
28
44
  * deployment.
@@ -33,17 +49,19 @@ export class Lightning {
33
49
  signers;
34
50
  threshold;
35
51
  networkPubkey;
52
+ publicClient;
36
53
  executorAddress;
37
54
  chainId;
38
55
  kmsQuorumClient;
39
56
  encryptor = null;
40
57
  encryptionScheme = null;
41
- constructor(_deployment, covalidatorUrls, signers, threshold, networkPubkey) {
58
+ constructor(_deployment, covalidatorUrls, signers, threshold, networkPubkey, publicClient) {
42
59
  this._deployment = _deployment;
43
60
  this.covalidatorUrls = covalidatorUrls;
44
61
  this.signers = signers;
45
62
  this.threshold = threshold;
46
63
  this.networkPubkey = networkPubkey;
64
+ this.publicClient = publicClient;
47
65
  this.executorAddress = parseAddress(_deployment.executorAddress);
48
66
  this.chainId = BigInt(_deployment.chainId);
49
67
  this.kmsQuorumClient = KmsQuorumClient.fromUrls(this.covalidatorUrls, this.signers, this.threshold);
@@ -77,9 +95,12 @@ export class Lightning {
77
95
  }
78
96
  /**
79
97
  * Get a Lightning instance bound to the latest Lightning deployment for the Base Sepolia testnet.
98
+ *
99
+ * @param options.hostChainRpcUrls optional list of RPC URLs for the host chain. When multiple URLs are
100
+ * provided, viem's fallback transport is used and providers are tried in order on failure.
80
101
  */
81
- static async baseSepoliaTestnet() {
82
- return Lightning.latest('testnet', baseSepolia.id);
102
+ static async baseSepoliaTestnet(options) {
103
+ return Lightning.latest('testnet', baseSepolia.id, options);
83
104
  }
84
105
  /**
85
106
  * Get a Lightning instance bound to our canonical Anvil-based test node and test Covalidator node
@@ -103,6 +124,7 @@ export class Lightning {
103
124
  ...config,
104
125
  covalidatorUrls: [...config.covalidatorUrls],
105
126
  signers: config.signers.map((s) => parseAddress(s)),
127
+ hostChainRpcUrls: config.hostChainRpcUrls ?? ['http://localhost:8545'],
106
128
  });
107
129
  }
108
130
  if (typeof env === 'string') {
@@ -111,6 +133,7 @@ export class Lightning {
111
133
  ...config,
112
134
  covalidatorUrls: [...config.covalidatorUrls],
113
135
  signers: config.signers.map((s) => parseAddress(s)),
136
+ hostChainRpcUrls: config.hostChainRpcUrls ?? ['http://localhost:8545'],
114
137
  });
115
138
  }
116
139
  const conf = localNodeLightningConfig[DefaultPepper];
@@ -125,9 +148,9 @@ export class Lightning {
125
148
  signers: env.EIP712_SIGNER_ADDRESS
126
149
  ? env.EIP712_SIGNER_ADDRESS.split(',').map((address) => parseAddress(address))
127
150
  : conf.signers.map((s) => parseAddress(s)),
128
- hostChainRpcUrl: env.COVALIDATOR_HOST_CHAIN_RPC_URL ??
129
- conf.hostChainRpcUrl ??
130
- 'http://localhost:8545',
151
+ hostChainRpcUrls: env.COVALIDATOR_HOST_CHAIN_RPC_URL
152
+ ? env.COVALIDATOR_HOST_CHAIN_RPC_URL.split(',')
153
+ : (conf.hostChainRpcUrls ?? ['http://localhost:8545']),
131
154
  // These variables vary per environment
132
155
  executorAddress: env.EXECUTOR_ADDRESS,
133
156
  senderPrivateKey: env.SENDER_PRIVATE_KEY,
@@ -157,8 +180,10 @@ export class Lightning {
157
180
  * Get a Lightning deployment by name or executor address on a particular chain.
158
181
  *
159
182
  * @param id this is an object containing either the pair of name and chainId or the executorAddress and chainId
183
+ * @param options.hostChainRpcUrls optional list of RPC URLs for the host chain. When multiple URLs are
184
+ * provided, viem's fallback transport is used and providers are tried in order on failure.
160
185
  */
161
- static async at(id) {
186
+ static async at(id, options) {
162
187
  const deployment = this.isIdByName(id)
163
188
  ? lightningDeployments.find((d) => d.name === id.name && d.chainId === id.chainId)
164
189
  : lightningDeployments.find((d) => d.executorAddress === id.executorAddress &&
@@ -169,10 +194,10 @@ export class Lightning {
169
194
  const chain = getViemChain({ id: deployment.chainId });
170
195
  const client = createPublicClient({
171
196
  chain,
172
- transport: http(),
197
+ transport: buildTransport(options?.hostChainRpcUrls),
173
198
  });
174
199
  const { threshold, signers, networkPubkey } = await Lightning.getChainConfig(deployment, client);
175
- return new Lightning(deployment, Lightning.getCovalidatorUrls(deployment, threshold), signers, threshold, networkPubkey);
200
+ return new Lightning(deployment, Lightning.getCovalidatorUrls(deployment, signers), signers, threshold, networkPubkey, client);
176
201
  }
177
202
  /**
178
203
  * Get a Lightning deployment for a local or custom node
@@ -184,10 +209,10 @@ export class Lightning {
184
209
  const chain = getViemChain({ id: config.chainId });
185
210
  const client = createPublicClient({
186
211
  chain,
187
- transport: config.hostChainRpcUrl ? http(config.hostChainRpcUrl) : http(),
212
+ transport: buildTransport(config.hostChainRpcUrls),
188
213
  });
189
214
  const { threshold, signers, networkPubkey } = await Lightning.getVerifierContractDetails(config.executorAddress, client);
190
- return new Lightning(config, config.covalidatorUrls, signers, threshold, networkPubkey);
215
+ return new Lightning(config, config.covalidatorUrls, signers, threshold, networkPubkey, client);
191
216
  }
192
217
  /**
193
218
  * Get the latest deployment for a given pepper, which usually denotes a family of deployments distinct from their
@@ -212,10 +237,12 @@ export class Lightning {
212
237
  * will not be compatible with the new version.
213
238
  *
214
239
  * @param pepper the pepper to use to filter the deployments
215
- * @param chain the chain to use to filter the deployments
240
+ * @param chainId the chainId to use to filter the deployments
241
+ * @param options.hostChainRpcUrls optional list of RPC URLs for the host chain. When multiple URLs are
242
+ * provided, viem's fallback transport is used and providers are tried in order on failure.
216
243
  */
217
- static async latest(pepper, chainId) {
218
- return Lightning.at(Lightning.latestDeployment(pepper, chainId));
244
+ static async latest(pepper, chainId, options) {
245
+ return Lightning.at(Lightning.latestDeployment(pepper, chainId), options);
219
246
  }
220
247
  /** Returns a shallow copy of the deployment configuration this Lightning instance is bound to. */
221
248
  get deployment() {
@@ -359,7 +386,7 @@ export class Lightning {
359
386
  reencryptKeypair: keypair,
360
387
  });
361
388
  }
362
- async attestedDecryptWithVoucher(ephemeralAccount, allowanceVoucherWithSig, ethClient, handles, opts) {
389
+ async attestedDecryptWithVoucher(ephemeralAccount, allowanceVoucherWithSig, handles, opts) {
363
390
  const { reencryptPubKey: inputPubKey, reencryptKeypair: inputKeypair, requesterArgData, backoffConfig, } = opts ?? {};
364
391
  const common = {
365
392
  backoffConfig,
@@ -369,7 +396,7 @@ export class Lightning {
369
396
  allowanceVoucherWithSig,
370
397
  handles,
371
398
  requesterArgData,
372
- ethClient,
399
+ ethClient: this.publicClient,
373
400
  executorAddress: this.executorAddress,
374
401
  };
375
402
  if (inputPubKey) {
@@ -393,6 +420,53 @@ export class Lightning {
393
420
  reencryptKeypair: keypair,
394
421
  });
395
422
  }
423
+ async eListAttestedDecrypt(walletClient, handle, opts) {
424
+ const { reencryptPubKey: inputPubKey, reencryptKeypair: inputKeypair, backoffConfig, } = opts ?? {};
425
+ const common = {
426
+ handle,
427
+ backoffConfig,
428
+ chainId: Number(this.chainId),
429
+ walletClient,
430
+ kmsQuorumClient: this.kmsQuorumClient,
431
+ executorAddress: this.executorAddress,
432
+ };
433
+ if (inputPubKey) {
434
+ if (inputKeypair) {
435
+ return eListAttestedDecrypt({
436
+ ...common,
437
+ reencryptPubKey: inputPubKey,
438
+ reencryptKeypair: inputKeypair,
439
+ });
440
+ }
441
+ return eListAttestedDecrypt({
442
+ ...common,
443
+ reencryptPubKey: inputPubKey,
444
+ });
445
+ }
446
+ const keypair = await generateXwingKeypair();
447
+ const pubKey = keypair.encodePublicKey();
448
+ return eListAttestedDecrypt({
449
+ ...common,
450
+ reencryptPubKey: pubKey,
451
+ reencryptKeypair: keypair,
452
+ });
453
+ }
454
+ /**
455
+ * Reveal a single elist handle without wallet authentication.
456
+ * Returns plaintext values along with an attestation of the checksum.
457
+ *
458
+ * @param handle - The elist handle to reveal
459
+ * @param opts - Optional backoff configuration
460
+ * @returns The elist decryption attestation with plaintext values
461
+ */
462
+ eListAttestedReveal(handle, opts) {
463
+ const { backoffConfig } = opts ?? {};
464
+ return performEListAttestedReveal({
465
+ handle,
466
+ backoffConfig,
467
+ kmsQuorumClient: this.kmsQuorumClient,
468
+ });
469
+ }
396
470
  async attestedCompute(walletClient, lhsHandle, op, rhsPlaintext, opts) {
397
471
  const { reencryptPubKey: inputPubKey, reencryptKeypair: inputKeypair, backoffConfig, } = opts ?? {};
398
472
  const common = {
@@ -426,7 +500,7 @@ export class Lightning {
426
500
  reencryptKeypair: keypair,
427
501
  });
428
502
  }
429
- async attestedComputeWithVoucher(ephemeralAccount, allowanceVoucherWithSig, ethClient, lhsHandle, op, rhsPlaintext, opts) {
503
+ async attestedComputeWithVoucher(ephemeralAccount, allowanceVoucherWithSig, lhsHandle, op, rhsPlaintext, opts) {
430
504
  const { reencryptPubKey: inputPubKey, reencryptKeypair: inputKeypair, requesterArgData, backoffConfig, } = opts ?? {};
431
505
  const common = {
432
506
  chainId: Number(this.chainId),
@@ -437,7 +511,7 @@ export class Lightning {
437
511
  op,
438
512
  rhsPlaintext,
439
513
  requesterArgData,
440
- ethClient,
514
+ ethClient: this.publicClient,
441
515
  executorAddress: this.executorAddress,
442
516
  backoffConfig,
443
517
  };
@@ -477,26 +551,26 @@ export class Lightning {
477
551
  */
478
552
  attestedReveal(handles, opts) {
479
553
  const { backoffConfig } = opts ?? {};
480
- const hostChainRpcUrl = 'hostChainRpcUrl' in this._deployment
481
- ? this._deployment.hostChainRpcUrl
482
- : undefined;
483
554
  return performAttestedReveal({
484
555
  executorAddress: this.executorAddress,
485
556
  handles,
486
557
  backoffConfig,
487
- chainId: Number(this.chainId),
488
558
  kmsQuorumClient: this.kmsQuorumClient,
489
- hostChainRpcUrl,
559
+ publicClient: this.publicClient,
490
560
  });
491
561
  }
492
562
  /**
493
563
  * Get the GRPC endpoint for the covalidator that services this deployment.
494
564
  */
495
- static getCovalidatorUrls(deployment, threshold) {
496
- const { executorAddress, chainId, pepper } = deployment;
497
- return Array.from({ length: threshold }, (_, i) =>
498
- // TODO: add the index to the URL #1276
499
- `https://${executorAddress.toLowerCase()}.${chainId}.${pepper}.inco.org`);
565
+ static getCovalidatorUrls(deployment, signers) {
566
+ const { chainId, pepper, majorVersion } = deployment;
567
+ const chainShortName = chainShortNames[chainId];
568
+ if (!chainShortName) {
569
+ throw new Error(`Unsupported chainId ${chainId} for covalidator URL generation`);
570
+ }
571
+ return signers.map((signer) => {
572
+ return `https://${signer.toLowerCase()}.${majorVersion}.covalidator.${chainShortName}.${pepper}.inco.org`;
573
+ });
500
574
  }
501
575
  static isIdByName(id) {
502
576
  return id.name !== undefined;
@@ -602,4 +676,4 @@ export class Lightning {
602
676
  return major > 1 || (major === 1 && minor >= 1);
603
677
  }
604
678
  }
605
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRuaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpdGUvbGlnaHRuaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxrQkFBa0IsRUFDbEIsV0FBVyxFQUVYLFVBQVUsRUFDVixJQUFJLEdBSUwsTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsNkJBQTZCLEVBQzdCLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFDekIsZ0NBQWdDLEdBQ2pDLE1BQU0sK0JBQStCLENBQUM7QUFFdkMsT0FBTyxFQUFFLGVBQWUsSUFBSSxzQkFBc0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRW5HLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUt6RSxPQUFPLEVBQUUsY0FBYyxJQUFJLHFCQUFxQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDL0YsT0FBTyxFQUFXLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFaEUsT0FBTyxFQUVMLGlCQUFpQixHQUlsQixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RSxPQUFPLEVBQVcsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBZ0IsYUFB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
679
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRuaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpdGUvbGlnaHRuaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxrQkFBa0IsRUFDbEIsUUFBUSxFQUNSLFdBQVcsRUFFWCxVQUFVLEVBQ1YsSUFBSSxHQUlMLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLEVBQ0wsZUFBZSxFQUNmLDZCQUE2QixFQUM3Qix5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLGdDQUFnQyxHQUNqQyxNQUFNLCtCQUErQixDQUFDO0FBRXZDLE9BQU8sRUFBRSxlQUFlLElBQUksc0JBQXNCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUVuRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFLekUsT0FBTyxFQUFFLGNBQWMsSUFBSSxxQkFBcUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQy9GLE9BQU8sRUFBVyxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQW9CLE1BQU0sYUFBYSxDQUFDO0FBQ2hFLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsbUJBQW1CLElBQUksMEJBQTBCLEdBQ2xELE1BQU0sbURBQW1ELENBQUM7QUFLM0QsT0FBTyxFQUVMLGlCQUFpQixHQUlsQixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RSxPQUFPLEVBQVcsV0FBVyxF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
@@ -1,4 +1,4 @@
1
- import { Account, Chain, Transport, WalletClient } from 'viem';
1
+ import { Account, Chain, PublicClient, Transport, WalletClient } from 'viem';
2
2
  import { vi } from 'vitest';
3
3
  import { KmsClient } from '../kms/client.js';
4
4
  import { KmsQuorumClient } from '../kms/quorumClient.js';
@@ -6,11 +6,15 @@ interface MinimalKmsClient {
6
6
  attestedCompute: ReturnType<typeof vi.fn>;
7
7
  attestedDecrypt: ReturnType<typeof vi.fn>;
8
8
  attestedReveal: ReturnType<typeof vi.fn>;
9
+ eListAttestedDecrypt: ReturnType<typeof vi.fn>;
10
+ eListAttestedReveal: ReturnType<typeof vi.fn>;
9
11
  key: ReturnType<typeof vi.fn>;
10
12
  reencrypt: ReturnType<typeof vi.fn>;
11
13
  }
12
14
  export declare function createMockKmsClient(): MinimalKmsClient & KmsClient;
13
15
  export declare function createMockQuorumClient(): KmsQuorumClient;
14
16
  export declare function setupMockInQuorumClient(quorumClient: KmsQuorumClient, mockKmsClient: MinimalKmsClient & KmsClient): void;
17
+ export declare function createMockPublicClient(): PublicClient<Transport, Chain>;
15
18
  export declare function createTestWalletClient(): WalletClient<Transport, Chain, Account>;
19
+ export declare function createFallbackWalletClient(): WalletClient<Transport, Chain, Account>;
16
20
  export {};
@@ -1,8 +1,7 @@
1
- import { createWalletClient, http, } from 'viem';
1
+ import { createPublicClient, createWalletClient, fallback, http, } from 'viem';
2
2
  import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts';
3
3
  import { sepolia } from 'viem/chains';
4
4
  import { vi } from 'vitest';
5
- import { TEST_RPC_URL } from '../attesteddecrypt/attested-decrypt.js';
6
5
  import { TEST_DEFAULT_COVALIDATOR_SIGNER } from '../kms/client.js';
7
6
  import { KmsQuorumClient } from '../kms/quorumClient.js';
8
7
  // Create a mock that satisfies our minimal interface
@@ -11,6 +10,8 @@ export function createMockKmsClient() {
11
10
  attestedCompute: vi.fn(),
12
11
  attestedDecrypt: vi.fn(),
13
12
  attestedReveal: vi.fn(),
13
+ eListAttestedDecrypt: vi.fn(),
14
+ eListAttestedReveal: vi.fn(),
14
15
  key: vi.fn(),
15
16
  reencrypt: vi.fn(),
16
17
  };
@@ -29,14 +30,35 @@ export function setupMockInQuorumClient(quorumClient, mockKmsClient) {
29
30
  anyQuorumClient.kmss[0].client = mockKmsClient;
30
31
  }
31
32
  }
32
- // Create a real wallet client for testing
33
+ // Create a public client for testing (transport URL is never actually called;
34
+ // publicClient is required by attestedDecrypt/attestedCompute but KMS is mocked in tests)
35
+ export function createMockPublicClient() {
36
+ return createPublicClient({
37
+ chain: sepolia,
38
+ transport: http('http://localhost:8567'),
39
+ });
40
+ }
41
+ // Create a wallet client for testing (transport URL is never actually called;
42
+ // signing with a local key account does not require an RPC connection)
33
43
  export function createTestWalletClient() {
34
44
  const account = privateKeyToAccount(generatePrivateKey());
35
45
  return createWalletClient({
36
46
  chain: sepolia, // Arbitrary chain, not relevant to test
37
- // CAUTION: TODO: do not rely on this in production, it's only for internal testing use etc.
38
- transport: http(TEST_RPC_URL),
47
+ transport: http('http://localhost:8567'),
48
+ account,
49
+ });
50
+ }
51
+ // Create a wallet client with a fallback() transport for testing that code
52
+ // handles non-http transports correctly (fallback has no .url property)
53
+ export function createFallbackWalletClient() {
54
+ const account = privateKeyToAccount(generatePrivateKey());
55
+ return createWalletClient({
56
+ chain: sepolia,
57
+ transport: fallback([
58
+ http('http://localhost:8567'),
59
+ http('http://localhost:8568'),
60
+ ]),
39
61
  account,
40
62
  });
41
63
  }
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdC9tb2Nrcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsa0JBQWtCLEVBQ2xCLElBQUksR0FHTCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3RFLE9BQU8sRUFBYSwrQkFBK0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQVl6RCxxREFBcUQ7QUFDckQsTUFBTSxVQUFVLG1CQUFtQjtJQUNqQyxPQUFPO1FBQ0wsZUFBZSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDeEIsZUFBZSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDeEIsY0FBYyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDdkIsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDWixTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtLQUNhLENBQUM7QUFDcEMsQ0FBQztBQUVELGtFQUFrRTtBQUNsRSxNQUFNLFVBQVUsc0JBQXNCO0lBQ3BDLGlGQUFpRjtJQUNqRixNQUFNLFFBQVEsR0FBUSxlQUFlLENBQUM7SUFDdEMsT0FBTyxJQUFJLFFBQVEsQ0FDakIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsK0JBQStCLEVBQUUsQ0FBQyxFQUN0RSxDQUFDLENBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCw0REFBNEQ7QUFDNUQsTUFBTSxVQUFVLHVCQUF1QixDQUNyQyxZQUE2QixFQUM3QixhQUEyQztJQUUzQyxtREFBbUQ7SUFDbkQsTUFBTSxlQUFlLEdBQUcsWUFBbUIsQ0FBQztJQUM1QyxJQUFJLGVBQWUsQ0FBQyxJQUFJLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDNUQsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDO0lBQ2pELENBQUM7QUFDSCxDQUFDO0FBRUQsMENBQTBDO0FBQzFDLE1BQU0sVUFBVSxzQkFBc0I7SUFLcEMsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQzFELE9BQU8sa0JBQWtCLENBQUM7UUFDeEIsS0FBSyxFQUFFLE9BQU8sRUFBRSx3Q0FBd0M7UUFDeEQsNEZBQTRGO1FBQzVGLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQzdCLE9BQU87S0FDUixDQUFDLENBQUM7QUFDTCxDQUFDIn0=
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdC9tb2Nrcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixRQUFRLEVBQ1IsSUFBSSxHQUlMLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQWEsK0JBQStCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFjekQscURBQXFEO0FBQ3JELE1BQU0sVUFBVSxtQkFBbUI7SUFDakMsT0FBTztRQUNMLGVBQWUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3hCLGVBQWUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3hCLGNBQWMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3ZCLG9CQUFvQixFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDN0IsbUJBQW1CLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM1QixHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNaLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0tBQ2EsQ0FBQztBQUNwQyxDQUFDO0FBRUQsa0VBQWtFO0FBQ2xFLE1BQU0sVUFBVSxzQkFBc0I7SUFDcEMsaUZBQWlGO0lBQ2pGLE1BQU0sUUFBUSxHQUFRLGVBQWUsQ0FBQztJQUN0QyxPQUFPLElBQUksUUFBUSxDQUNqQixDQUFDLEVBQUUsR0FBRyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSwrQkFBK0IsRUFBRSxDQUFDLEVBQ3RFLENBQUMsQ0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELDREQUE0RDtBQUM1RCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLFlBQTZCLEVBQzdCLGFBQTJDO0lBRTNDLG1EQUFtRDtJQUNuRCxNQUFNLGVBQWUsR0FBRyxZQUFtQixDQUFDO0lBQzVDLElBQUksZUFBZSxDQUFDLElBQUksSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM1RCxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUM7SUFDakQsQ0FBQztBQUNILENBQUM7QUFFRCw4RUFBOEU7QUFDOUUsMEZBQTBGO0FBQzFGLE1BQU0sVUFBVSxzQkFBc0I7SUFDcEMsT0FBTyxrQkFBa0IsQ0FBQztRQUN4QixLQUFLLEVBQUUsT0FBTztRQUNkLFNBQVMsRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUM7S0FDekMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELDhFQUE4RTtBQUM5RSx1RUFBdUU7QUFDdkUsTUFBTSxVQUFVLHNCQUFzQjtJQUtwQyxNQUFNLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7SUFDMUQsT0FBTyxrQkFBa0IsQ0FBQztRQUN4QixLQUFLLEVBQUUsT0FBTyxFQUFFLHdDQUF3QztRQUN4RCxTQUFTLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDO1FBQ3hDLE9BQU87S0FDUixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsMkVBQTJFO0FBQzNFLHdFQUF3RTtBQUN4RSxNQUFNLFVBQVUsMEJBQTBCO0lBS3hDLE1BQU0sT0FBTyxHQUFHLG1CQUFtQixDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztJQUMxRCxPQUFPLGtCQUFrQixDQUFDO1FBQ3hCLEtBQUssRUFBRSxPQUFPO1FBQ2QsU0FBUyxFQUFFLFFBQVEsQ0FBQztZQUNsQixJQUFJLENBQUMsdUJBQXVCLENBQUM7WUFDN0IsSUFBSSxDQUFDLHVCQUF1QixDQUFDO1NBQzlCLENBQUM7UUFDRixPQUFPO0tBQ1IsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyJ9
@@ -1,5 +1,6 @@
1
- import { Chain } from 'viem';
1
+ import { Account, Chain, PublicClient, Transport, WalletClient } from 'viem';
2
2
  import { Chainish } from './chain.js';
3
+ export type ViemClient = WalletClient<Transport, Chain, Account> | PublicClient<Transport, Chain>;
3
4
  /** Map of supported chain short names to their viem chain objects. */
4
5
  export declare const chains: {
5
6
  sepolia: {