@inco/js 0.8.0-devnet-29 → 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.
- package/dist/cjs/advancedacl/session-key.d.ts +4 -4
- package/dist/cjs/advancedacl/session-key.js +4 -3
- package/dist/cjs/attestedcompute/attested-compute.d.ts +0 -1
- package/dist/cjs/attestedcompute/attested-compute.js +7 -8
- package/dist/cjs/attesteddecrypt/attested-decrypt.d.ts +3 -4
- package/dist/cjs/attesteddecrypt/attested-decrypt.js +8 -60
- package/dist/cjs/chain.d.ts +6 -0
- package/dist/cjs/chain.js +15 -2
- package/dist/cjs/eip712/eip712.d.ts +18 -0
- package/dist/cjs/eip712/eip712.js +51 -0
- package/dist/cjs/eip712/index.d.ts +1 -0
- package/dist/cjs/eip712/index.js +8 -0
- package/dist/cjs/elistattesteddecrypt/elist-attested-decrypt.d.ts +49 -0
- package/dist/cjs/elistattesteddecrypt/elist-attested-decrypt.js +94 -0
- package/dist/cjs/elistattesteddecrypt/index.d.ts +2 -0
- package/dist/cjs/elistattesteddecrypt/index.js +22 -0
- package/dist/cjs/elistattesteddecrypt/types.d.ts +31 -0
- package/dist/cjs/elistattesteddecrypt/types.js +16 -0
- package/dist/cjs/generated/abis/lightning.d.ts +0 -39
- package/dist/cjs/generated/abis/lightning.js +1 -39
- package/dist/cjs/generated/abis/test-elist.d.ts +6 -0
- package/dist/cjs/generated/abis/test-elist.js +8 -1
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +0 -34
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.js +35 -40
- package/dist/cjs/generated/lightning.d.ts +29 -0
- package/dist/cjs/generated/lightning.js +30 -1
- package/dist/cjs/handle.d.ts +8 -0
- package/dist/cjs/handle.js +20 -2
- package/dist/cjs/kms/quorumClient.d.ts +17 -4
- package/dist/cjs/kms/quorumClient.js +150 -1
- package/dist/cjs/kms/quorumConsistency.d.ts +25 -1
- package/dist/cjs/kms/quorumConsistency.js +70 -1
- package/dist/cjs/kms/signatureVerification.d.ts +2 -2
- package/dist/cjs/kms/signatureVerification.js +1 -1
- package/dist/cjs/lite/attested-compute.d.ts +2 -2
- package/dist/cjs/lite/attested-compute.js +2 -3
- package/dist/cjs/lite/attested-decrypt.d.ts +2 -2
- package/dist/cjs/lite/attested-decrypt.js +2 -3
- package/dist/cjs/lite/lightning.d.ts +21 -14
- package/dist/cjs/lite/lightning.js +64 -11
- package/dist/cjs/test/mocks.d.ts +5 -1
- package/dist/cjs/test/mocks.js +29 -5
- package/dist/cjs/viem.d.ts +2 -1
- package/dist/cjs/viem.js +1 -1
- package/dist/esm/advancedacl/session-key.d.ts +4 -4
- package/dist/esm/advancedacl/session-key.js +6 -5
- package/dist/esm/attestedcompute/attested-compute.d.ts +0 -1
- package/dist/esm/attestedcompute/attested-compute.js +5 -6
- package/dist/esm/attesteddecrypt/attested-decrypt.d.ts +3 -4
- package/dist/esm/attesteddecrypt/attested-decrypt.js +6 -58
- package/dist/esm/chain.d.ts +6 -0
- package/dist/esm/chain.js +14 -1
- package/dist/esm/eip712/eip712.d.ts +18 -0
- package/dist/esm/eip712/eip712.js +46 -0
- package/dist/esm/eip712/index.d.ts +1 -0
- package/dist/esm/eip712/index.js +2 -0
- package/dist/esm/elistattesteddecrypt/elist-attested-decrypt.d.ts +49 -0
- package/dist/esm/elistattesteddecrypt/elist-attested-decrypt.js +89 -0
- package/dist/esm/elistattesteddecrypt/index.d.ts +2 -0
- package/dist/esm/elistattesteddecrypt/index.js +3 -0
- package/dist/esm/elistattesteddecrypt/types.d.ts +31 -0
- package/dist/esm/elistattesteddecrypt/types.js +12 -0
- package/dist/esm/generated/abis/lightning.d.ts +0 -39
- package/dist/esm/generated/abis/lightning.js +1 -39
- package/dist/esm/generated/abis/test-elist.d.ts +6 -0
- package/dist/esm/generated/abis/test-elist.js +8 -1
- package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +0 -34
- package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.js +34 -39
- package/dist/esm/generated/lightning.d.ts +29 -0
- package/dist/esm/generated/lightning.js +30 -1
- package/dist/esm/handle.d.ts +8 -0
- package/dist/esm/handle.js +18 -1
- package/dist/esm/kms/quorumClient.d.ts +17 -4
- package/dist/esm/kms/quorumClient.js +152 -3
- package/dist/esm/kms/quorumConsistency.d.ts +25 -1
- package/dist/esm/kms/quorumConsistency.js +68 -1
- package/dist/esm/kms/signatureVerification.d.ts +2 -2
- package/dist/esm/kms/signatureVerification.js +1 -1
- package/dist/esm/lite/attested-compute.d.ts +2 -2
- package/dist/esm/lite/attested-compute.js +3 -3
- package/dist/esm/lite/attested-decrypt.d.ts +2 -2
- package/dist/esm/lite/attested-decrypt.js +3 -3
- package/dist/esm/lite/lightning.d.ts +21 -14
- package/dist/esm/lite/lightning.js +64 -11
- package/dist/esm/test/mocks.d.ts +5 -1
- package/dist/esm/test/mocks.js +28 -6
- package/dist/esm/viem.d.ts +2 -1
- package/dist/esm/viem.js +1 -1
- package/dist/types/advancedacl/session-key.d.ts +4 -4
- package/dist/types/attestedcompute/attested-compute.d.ts +0 -1
- package/dist/types/attesteddecrypt/attested-decrypt.d.ts +3 -4
- package/dist/types/chain.d.ts +6 -0
- package/dist/types/eip712/eip712.d.ts +18 -0
- package/dist/types/eip712/index.d.ts +1 -0
- package/dist/types/elistattesteddecrypt/elist-attested-decrypt.d.ts +49 -0
- package/dist/types/elistattesteddecrypt/index.d.ts +2 -0
- package/dist/types/elistattesteddecrypt/types.d.ts +31 -0
- package/dist/types/generated/abis/lightning.d.ts +0 -39
- package/dist/types/generated/abis/test-elist.d.ts +6 -0
- package/dist/types/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +0 -34
- package/dist/types/generated/lightning.d.ts +29 -0
- package/dist/types/handle.d.ts +8 -0
- package/dist/types/kms/quorumClient.d.ts +17 -4
- package/dist/types/kms/quorumConsistency.d.ts +25 -1
- package/dist/types/kms/signatureVerification.d.ts +2 -2
- package/dist/types/lite/attested-compute.d.ts +2 -2
- package/dist/types/lite/attested-decrypt.d.ts +2 -2
- package/dist/types/lite/lightning.d.ts +21 -14
- package/dist/types/test/mocks.d.ts +5 -1
- package/dist/types/viem.d.ts +2 -1
- package/package.json +1 -1
|
@@ -1,21 +1,15 @@
|
|
|
1
1
|
import { create } from '@bufbuild/protobuf';
|
|
2
|
-
import {
|
|
2
|
+
import { hexToBytes } from 'viem';
|
|
3
3
|
import { bytesToBigInt } from '../binary.js';
|
|
4
|
+
import { buildEip712Payload, signEip712 } from '../eip712/eip712.js';
|
|
4
5
|
import { bigintToPlaintext, encryptionSchemes, } from '../encryption/encryption.js';
|
|
5
|
-
import { incoLightningAbi } from '../generated/abis/lightning.js';
|
|
6
|
-
import { incoVerifierAbi } from '../generated/abis/verifier.js';
|
|
7
6
|
import { AttestedDecryptRequestSchema, } from '../generated/es/inco/kms/lite/v1/kms_service_pb.js';
|
|
8
7
|
import { HandleWithProofSchema, } from '../generated/es/inco/kms/lite/v1/types_pb.js';
|
|
9
8
|
import { getHandleType, validateHandle } from '../handle.js';
|
|
10
9
|
import { decrypt, reencryptPublicKeysMatch } from '../lite/xwing.js';
|
|
11
|
-
import { createEIP712Payload } from '../reencryption/eip712.js';
|
|
12
10
|
import { AttestedDecryptError, } from './types.js';
|
|
13
11
|
export { validateHandle };
|
|
14
12
|
export const ATTESTED_DECRYPT_DOMAIN_NAME = 'IncoAttestedDecrypt';
|
|
15
|
-
// This version should match the return value of GetEIP712Version() in IncoVerifier and is used as fallback value in case run in tests (where walletClient is mocked)
|
|
16
|
-
export const DEFAULT_ATTESTED_DECRYPT_DOMAIN_VERSION = '2';
|
|
17
|
-
// This magic RPC url is used in tests to detect a mock client (which cannot make real on-chain calls)
|
|
18
|
-
export const TEST_RPC_URL = 'UNUSED IN TEST';
|
|
19
13
|
/**
|
|
20
14
|
* Decrypt multiple handles in a single attested request.
|
|
21
15
|
* Returns an array of attestations aligned with the response ordering.
|
|
@@ -36,7 +30,7 @@ export async function attestedDecrypt({ handles, backoffConfig, walletClient, ch
|
|
|
36
30
|
}
|
|
37
31
|
const eip712Payload = await buildEip712Payload({
|
|
38
32
|
executorAddress,
|
|
39
|
-
walletClient,
|
|
33
|
+
ethClient: walletClient,
|
|
40
34
|
chainId,
|
|
41
35
|
handles,
|
|
42
36
|
reencryptPubKey,
|
|
@@ -52,8 +46,7 @@ export async function attestedDecrypt({ handles, backoffConfig, walletClient, ch
|
|
|
52
46
|
// Call quorum client which returns aggregated attestations directly
|
|
53
47
|
// The quorum client handles retry logic internally for each KMS client
|
|
54
48
|
// Envelope signatures are verified against the on-chain authorized signer set
|
|
55
|
-
const
|
|
56
|
-
const response = await kmsQuorumClient.attestedDecrypt(attestedDecryptRequest, backoffConfig, reencryptKeypair, isRealClient ? executorAddress : undefined, isRealClient ? walletClient : undefined);
|
|
49
|
+
const response = await kmsQuorumClient.attestedDecrypt(attestedDecryptRequest, backoffConfig, reencryptKeypair, executorAddress, walletClient);
|
|
57
50
|
// If reencryptPubKey is provided with a keypair, decrypt the encrypted attestations
|
|
58
51
|
// and verify the inner DecryptionAttestation signatures
|
|
59
52
|
if (reencryptPubKey !== undefined && reencryptKeypair) {
|
|
@@ -68,52 +61,7 @@ export async function attestedDecrypt({ handles, backoffConfig, walletClient, ch
|
|
|
68
61
|
throw new AttestedDecryptError('Failed to decrypt handles', error);
|
|
69
62
|
}
|
|
70
63
|
}
|
|
71
|
-
|
|
72
|
-
export async function fetchEip712DomainVersion(executorAddress, defaultVersion, walletClient) {
|
|
73
|
-
let eip712DomainVersion;
|
|
74
|
-
if (walletClient &&
|
|
75
|
-
executorAddress &&
|
|
76
|
-
walletClient.transport.url !== TEST_RPC_URL) {
|
|
77
|
-
const lightning = getContract({
|
|
78
|
-
address: executorAddress,
|
|
79
|
-
abi: incoLightningAbi,
|
|
80
|
-
client: walletClient,
|
|
81
|
-
});
|
|
82
|
-
const incoVerifierAddress = await lightning.read.incoVerifier();
|
|
83
|
-
const verifier = getContract({
|
|
84
|
-
address: incoVerifierAddress,
|
|
85
|
-
abi: incoVerifierAbi,
|
|
86
|
-
client: walletClient,
|
|
87
|
-
});
|
|
88
|
-
eip712DomainVersion = await verifier.read.getEIP712Version();
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
eip712DomainVersion = defaultVersion;
|
|
92
|
-
}
|
|
93
|
-
return eip712DomainVersion;
|
|
94
|
-
}
|
|
95
|
-
// Small helpers to make the main flow readable
|
|
96
|
-
async function buildEip712Payload(params) {
|
|
97
|
-
const eip712DomainVersion = await fetchEip712DomainVersion(params.executorAddress, DEFAULT_ATTESTED_DECRYPT_DOMAIN_VERSION, params.walletClient);
|
|
98
|
-
return createEIP712Payload({
|
|
99
|
-
chainId: BigInt(params.chainId),
|
|
100
|
-
primaryType: 'AttestedDecryptRequest',
|
|
101
|
-
primaryTypeFields: [
|
|
102
|
-
{ name: 'handles', type: 'bytes32[]' },
|
|
103
|
-
{ name: 'publicKey', type: 'bytes' },
|
|
104
|
-
],
|
|
105
|
-
message: {
|
|
106
|
-
handles: params.handles,
|
|
107
|
-
publicKey: bytesToHex(params.reencryptPubKey),
|
|
108
|
-
},
|
|
109
|
-
domainName: ATTESTED_DECRYPT_DOMAIN_NAME,
|
|
110
|
-
domainVersion: eip712DomainVersion,
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
function signEip712(walletClient, eip712Payload) {
|
|
114
|
-
return walletClient.signTypedData(eip712Payload);
|
|
115
|
-
}
|
|
116
|
-
function buildHandlesWithProofs(handles) {
|
|
64
|
+
export function buildHandlesWithProofs(handles) {
|
|
117
65
|
return handles.map((handle) => {
|
|
118
66
|
return create(HandleWithProofSchema, {
|
|
119
67
|
handle: handle,
|
|
@@ -161,4 +109,4 @@ export async function decryptEncryptedAttestations(attestations, reencryptKeypai
|
|
|
161
109
|
throw new AttestedDecryptError('Attestation is neither plaintext nor encrypted');
|
|
162
110
|
}));
|
|
163
111
|
}
|
|
164
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
112
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZXN0ZWQtZGVjcnlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdHRlc3RlZGRlY3J5cHQvYXR0ZXN0ZWQtZGVjcnlwdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUUsYUFBYSxFQUFrQixNQUFNLGNBQWMsQ0FBQztBQUU3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckUsT0FBTyxFQUNMLGlCQUFpQixFQUVqQixpQkFBaUIsR0FFbEIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBRUwsNEJBQTRCLEdBQzdCLE1BQU0sb0RBQW9ELENBQUM7QUFDNUQsT0FBTyxFQUVMLHFCQUFxQixHQUN0QixNQUFNLDhDQUE4QyxDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRzdELE9BQU8sRUFBRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVyRSxPQUFPLEVBQ0wsb0JBQW9CLEdBR3JCLE1BQU0sWUFBWSxDQUFDO0FBQ3BCLE9BQU8sRUFBRSxjQUFjLEVBQUUsQ0FBQztBQUUxQixNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxxQkFBcUIsQ0FBQztBQXlFbEU7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsZUFBZSxDQUFDLEVBQ3BDLE9BQU8sRUFDUCxhQUFhLEVBQ2IsWUFBWSxFQUNaLE9BQU8sRUFDUCxlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixlQUFlLEdBVWhCO0lBTUMsSUFBSSxDQUFDO1FBQ0gsT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztR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
|
package/dist/esm/chain.d.ts
CHANGED
|
@@ -28,6 +28,12 @@ export type Numberish = number | bigint;
|
|
|
28
28
|
export type Chainish = {
|
|
29
29
|
id: Numberish;
|
|
30
30
|
} | Numberish | string;
|
|
31
|
+
/**
|
|
32
|
+
* Map of supported chain IDs to their short names.
|
|
33
|
+
* Public networks use the `shortName` from https://github.com/ethereum-lists/chains.
|
|
34
|
+
* Local Anvil uses `31337` (same ID as GoChain Testnet in the registry) but the SDK labels it `anvil`.
|
|
35
|
+
*/
|
|
36
|
+
export declare const chainShortNames: Record<SupportedChainId, string>;
|
|
31
37
|
/**
|
|
32
38
|
* Resolves a {@link Chainish} value to a {@link SupportedChain}.
|
|
33
39
|
*
|
package/dist/esm/chain.js
CHANGED
|
@@ -16,6 +16,19 @@ export const supportedChains = {
|
|
|
16
16
|
worldchainSepolia: 4801,
|
|
17
17
|
anvil: 31337,
|
|
18
18
|
};
|
|
19
|
+
/**
|
|
20
|
+
* Map of supported chain IDs to their short names.
|
|
21
|
+
* Public networks use the `shortName` from https://github.com/ethereum-lists/chains.
|
|
22
|
+
* Local Anvil uses `31337` (same ID as GoChain Testnet in the registry) but the SDK labels it `anvil`.
|
|
23
|
+
*/
|
|
24
|
+
export const chainShortNames = {
|
|
25
|
+
[supportedChains.baseSepolia]: 'basesep',
|
|
26
|
+
[supportedChains.sepolia]: 'sep',
|
|
27
|
+
[supportedChains.monadTestnet]: 'mon-testnet',
|
|
28
|
+
[supportedChains.plasmaTestnet]: 'plasma-testnet',
|
|
29
|
+
[supportedChains.worldchainSepolia]: 'wcsep',
|
|
30
|
+
[supportedChains.anvil]: 'anvil',
|
|
31
|
+
};
|
|
19
32
|
/**
|
|
20
33
|
* Resolves a {@link Chainish} value to a {@link SupportedChain}.
|
|
21
34
|
*
|
|
@@ -38,4 +51,4 @@ export function getSupportedChain(chainish) {
|
|
|
38
51
|
const [name, id] = found;
|
|
39
52
|
return { name: name, id };
|
|
40
53
|
}
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2hhaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUZBQW1GO0FBRW5GLHlHQUF5RztBQUN6RywrR0FBK0c7QUFDL0csa0dBQWtHO0FBRWxHOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzdCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLE9BQU8sRUFBRSxRQUFRO0lBQ2pCLFlBQVksRUFBRSxLQUFLO0lBQ25CLGFBQWEsRUFBRSxJQUFJO0lBQ25CLGlCQUFpQixFQUFFLElBQUk7SUFDdkIsS0FBSyxFQUFFLEtBQUs7Q0FDSixDQUFDO0FBbUJYOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQXFDO0lBQy9ELENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxFQUFFLFNBQVM7SUFDeEMsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSztJQUNoQyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsRUFBRSxhQUFhO0lBQzdDLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxFQUFFLGdCQUFnQjtJQUNqRCxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLE9BQU87SUFDNUMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTztDQUNqQyxDQUFDO0FBRUY7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLFFBQWtCO0lBQ2xELE1BQU0sS0FBSyxHQUNULE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRO1FBQzFELENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FDbEMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQ3BDO1FBQ0gsQ0FBQyxDQUFDLE9BQU8sUUFBUSxLQUFLLFFBQVE7WUFDNUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUNsQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQ3ZDO1lBQ0gsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUNsQyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLFNBQVMsS0FBSyxRQUFRLENBQ3hDLENBQUM7SUFDVixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixRQUFRLFlBQVksQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFDRCxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUN6QixPQUFPLEVBQUUsSUFBSSxFQUFFLElBQTBCLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQsQ0FBQyJ9
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Account, Chain, Transport, WalletClient } from 'viem';
|
|
2
|
+
import type { HexString } from '../binary.js';
|
|
3
|
+
import type { SupportedChainId } from '../chain.js';
|
|
4
|
+
import { ViemClient } from '../viem.js';
|
|
5
|
+
export declare function fetchEip712DomainVersion(executorAddress: HexString, ethClient: ViemClient): Promise<string>;
|
|
6
|
+
export declare function buildEip712Payload(params: {
|
|
7
|
+
executorAddress: HexString;
|
|
8
|
+
ethClient: ViemClient;
|
|
9
|
+
chainId: SupportedChainId;
|
|
10
|
+
handles: HexString[];
|
|
11
|
+
reencryptPubKey: Uint8Array;
|
|
12
|
+
}): Promise<import("../reencryption/eip712.js").EIP712<{
|
|
13
|
+
handles: `0x${string}`[];
|
|
14
|
+
publicKey: `0x${string}`;
|
|
15
|
+
}>>;
|
|
16
|
+
type WalletSignTypedDataParams = Parameters<WalletClient<Transport, Chain, Account>['signTypedData']>[0];
|
|
17
|
+
export declare function signEip712(walletClient: WalletClient<Transport, Chain, Account>, eip712Payload: WalletSignTypedDataParams): Promise<`0x${string}`>;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { bytesToHex, getContract } from 'viem';
|
|
2
|
+
import { ATTESTED_DECRYPT_DOMAIN_NAME } from '../attesteddecrypt/attested-decrypt.js';
|
|
3
|
+
import { incoLightningAbi } from '../generated/abis/lightning.js';
|
|
4
|
+
import { incoVerifierAbi } from '../generated/abis/verifier.js';
|
|
5
|
+
import { createEIP712Payload } from '../reencryption/eip712.js';
|
|
6
|
+
// Fetches EIP712 domain version from on-chain verifier contract.
|
|
7
|
+
// This is needed to ensure the payload is signed with the correct domain version,
|
|
8
|
+
// which is required for the covalidator to verify the signature and process the request.
|
|
9
|
+
export async function fetchEip712DomainVersion(executorAddress, ethClient) {
|
|
10
|
+
let eip712DomainVersion;
|
|
11
|
+
const lightning = getContract({
|
|
12
|
+
address: executorAddress,
|
|
13
|
+
abi: incoLightningAbi,
|
|
14
|
+
client: ethClient,
|
|
15
|
+
});
|
|
16
|
+
const incoVerifierAddress = await lightning.read.incoVerifier();
|
|
17
|
+
const verifier = getContract({
|
|
18
|
+
address: incoVerifierAddress,
|
|
19
|
+
abi: incoVerifierAbi,
|
|
20
|
+
client: ethClient,
|
|
21
|
+
});
|
|
22
|
+
eip712DomainVersion = await verifier.read.getEIP712Version();
|
|
23
|
+
return eip712DomainVersion;
|
|
24
|
+
}
|
|
25
|
+
// Small helpers to make the main flow readable
|
|
26
|
+
export async function buildEip712Payload(params) {
|
|
27
|
+
const eip712DomainVersion = await fetchEip712DomainVersion(params.executorAddress, params.ethClient);
|
|
28
|
+
return createEIP712Payload({
|
|
29
|
+
chainId: BigInt(params.chainId),
|
|
30
|
+
primaryType: 'AttestedDecryptRequest',
|
|
31
|
+
primaryTypeFields: [
|
|
32
|
+
{ name: 'handles', type: 'bytes32[]' },
|
|
33
|
+
{ name: 'publicKey', type: 'bytes' },
|
|
34
|
+
],
|
|
35
|
+
message: {
|
|
36
|
+
handles: params.handles,
|
|
37
|
+
publicKey: bytesToHex(params.reencryptPubKey),
|
|
38
|
+
},
|
|
39
|
+
domainName: ATTESTED_DECRYPT_DOMAIN_NAME,
|
|
40
|
+
domainVersion: eip712DomainVersion,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
export function signEip712(walletClient, eip712Payload) {
|
|
44
|
+
return walletClient.signTypedData(eip712Payload);
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWlwNzEyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VpcDcxMi9laXA3MTIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFHdEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR2hFLGlFQUFpRTtBQUNqRSxrRkFBa0Y7QUFDbEYseUZBQXlGO0FBQ3pGLE1BQU0sQ0FBQyxLQUFLLFVBQVUsd0JBQXdCLENBQzVDLGVBQTBCLEVBQzFCLFNBQXFCO0lBRXJCLElBQUksbUJBQTJCLENBQUM7SUFFaEMsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDO1FBQzVCLE9BQU8sRUFBRSxlQUFlO1FBQ3hCLEdBQUcsRUFBRSxnQkFBZ0I7UUFDckIsTUFBTSxFQUFFLFNBQVM7S0FDbEIsQ0FBQyxDQUFDO0lBRUgsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDaEUsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDO1FBQzNCLE9BQU8sRUFBRSxtQkFBbUI7UUFDNUIsR0FBRyxFQUFFLGVBQWU7UUFDcEIsTUFBTSxFQUFFLFNBQVM7S0FDbEIsQ0FBQyxDQUFDO0lBRUgsbUJBQW1CLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFFN0QsT0FBTyxtQkFBbUIsQ0FBQztBQUM3QixDQUFDO0FBRUQsK0NBQStDO0FBQy9DLE1BQU0sQ0FBQyxLQUFLLFVBQVUsa0JBQWtCLENBQUMsTUFNeEM7SUFDQyxNQUFNLG1CQUFtQixHQUFHLE1BQU0sd0JBQXdCLENBQ3hELE1BQU0sQ0FBQyxlQUFlLEVBQ3RCLE1BQU0sQ0FBQyxTQUFTLENBQ2pCLENBQUM7SUFFRixPQUFPLG1CQUFtQixDQUFDO1FBQ3pCLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUMvQixXQUFXLEVBQUUsd0JBQXdCO1FBQ3JDLGlCQUFpQixFQUFFO1lBQ2pCLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO1lBQ3RDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO1NBQ3JDO1FBQ0QsT0FBTyxFQUFFO1lBQ1AsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1lBQ3ZCLFNBQVMsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztTQUM5QztRQUNELFVBQVUsRUFBRSw0QkFBNEI7UUFDeEMsYUFBYSxFQUFFLG1CQUFtQjtLQUNuQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBTUQsTUFBTSxVQUFVLFVBQVUsQ0FDeEIsWUFBcUQsRUFDckQsYUFBd0M7SUFFeEMsT0FBTyxZQUFZLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ25ELENBQUMifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { buildEip712Payload, fetchEip712DomainVersion, signEip712, } from './eip712.js';
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { buildEip712Payload, fetchEip712DomainVersion, signEip712, } from './eip712.js';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWlwNzEyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsd0JBQXdCLEVBQ3hCLFVBQVUsR0FDWCxNQUFNLGFBQWEsQ0FBQyJ9
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { Account, Chain, Transport, WalletClient } from 'viem';
|
|
2
|
+
import { validateHandle } from '../attesteddecrypt/attested-decrypt.js';
|
|
3
|
+
import { type HexString } from '../binary.js';
|
|
4
|
+
import { type SupportedChainId } from '../chain.js';
|
|
5
|
+
import { type EncryptionScheme, type SupportedFheType } from '../encryption/encryption.js';
|
|
6
|
+
import { KmsQuorumClient } from '../kms/quorumClient.js';
|
|
7
|
+
import type { XwingKeypair } from '../lite/xwing.js';
|
|
8
|
+
import type { BackoffConfig } from '../retry.js';
|
|
9
|
+
import { type EListDecryptionAttestation, type EncryptedEListDecryptionAttestation } from './types.js';
|
|
10
|
+
export { validateHandle };
|
|
11
|
+
export declare function eListAttestedDecrypt({ handle, backoffConfig, walletClient, chainId, reencryptPubKey, reencryptKeypair, kmsQuorumClient, executorAddress, }: {
|
|
12
|
+
handle: HexString;
|
|
13
|
+
backoffConfig?: Partial<BackoffConfig> | undefined;
|
|
14
|
+
walletClient: WalletClient<Transport, Chain, Account>;
|
|
15
|
+
chainId: SupportedChainId;
|
|
16
|
+
reencryptPubKey: Uint8Array;
|
|
17
|
+
reencryptKeypair: XwingKeypair;
|
|
18
|
+
kmsQuorumClient: KmsQuorumClient;
|
|
19
|
+
executorAddress: HexString;
|
|
20
|
+
}): Promise<EListDecryptionAttestation<EncryptionScheme, SupportedFheType>>;
|
|
21
|
+
export declare function eListAttestedDecrypt({ handle, backoffConfig, walletClient, chainId, reencryptPubKey, kmsQuorumClient, executorAddress, }: {
|
|
22
|
+
handle: HexString;
|
|
23
|
+
backoffConfig?: Partial<BackoffConfig> | undefined;
|
|
24
|
+
walletClient: WalletClient<Transport, Chain, Account>;
|
|
25
|
+
chainId: SupportedChainId;
|
|
26
|
+
reencryptPubKey: Uint8Array;
|
|
27
|
+
reencryptKeypair?: never;
|
|
28
|
+
kmsQuorumClient: KmsQuorumClient;
|
|
29
|
+
executorAddress: HexString;
|
|
30
|
+
}): Promise<EncryptedEListDecryptionAttestation<EncryptionScheme, SupportedFheType>>;
|
|
31
|
+
export declare function eListAttestedDecrypt({ handle, backoffConfig, walletClient, chainId, kmsQuorumClient, executorAddress, }: {
|
|
32
|
+
handle: HexString;
|
|
33
|
+
backoffConfig?: Partial<BackoffConfig> | undefined;
|
|
34
|
+
walletClient: WalletClient<Transport, Chain, Account>;
|
|
35
|
+
chainId: SupportedChainId;
|
|
36
|
+
reencryptPubKey?: never;
|
|
37
|
+
reencryptKeypair?: never;
|
|
38
|
+
kmsQuorumClient: KmsQuorumClient;
|
|
39
|
+
executorAddress: HexString;
|
|
40
|
+
}): Promise<EListDecryptionAttestation<EncryptionScheme, SupportedFheType>>;
|
|
41
|
+
/**
|
|
42
|
+
* Reveal a single elist handle without wallet authentication.
|
|
43
|
+
* Returns plaintext values along with an attestation of the checksum.
|
|
44
|
+
*/
|
|
45
|
+
export declare function eListAttestedReveal({ handle, backoffConfig, kmsQuorumClient, }: {
|
|
46
|
+
handle: HexString;
|
|
47
|
+
backoffConfig?: Partial<BackoffConfig> | undefined;
|
|
48
|
+
kmsQuorumClient: KmsQuorumClient;
|
|
49
|
+
}): Promise<EListDecryptionAttestation<EncryptionScheme, SupportedFheType>>;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { create } from '@bufbuild/protobuf';
|
|
2
|
+
import { hexToBytes } from 'viem';
|
|
3
|
+
import { buildHandlesWithProofs, validateHandle, } from '../attesteddecrypt/attested-decrypt.js';
|
|
4
|
+
import { bytesToBigInt } from '../binary.js';
|
|
5
|
+
import { buildEip712Payload, signEip712 } from '../eip712/eip712.js';
|
|
6
|
+
import { bigintToPlaintext, } from '../encryption/encryption.js';
|
|
7
|
+
import { EListAttestedDecryptRequestSchema, EListAttestedRevealRequestSchema, } from '../generated/es/inco/kms/lite/v1/kms_service_pb.js';
|
|
8
|
+
import { getEListElementType } from '../handle.js';
|
|
9
|
+
import { decrypt } from '../lite/xwing.js';
|
|
10
|
+
import { EListAttestedDecryptError, } from './types.js';
|
|
11
|
+
export { validateHandle };
|
|
12
|
+
// Implementation
|
|
13
|
+
export async function eListAttestedDecrypt({ handle, backoffConfig, walletClient, chainId, reencryptPubKey, reencryptKeypair, kmsQuorumClient, executorAddress, }) {
|
|
14
|
+
try {
|
|
15
|
+
validateHandle(handle);
|
|
16
|
+
const eip712Payload = await buildEip712Payload({
|
|
17
|
+
executorAddress,
|
|
18
|
+
ethClient: walletClient,
|
|
19
|
+
chainId,
|
|
20
|
+
handles: [handle],
|
|
21
|
+
reencryptPubKey: reencryptPubKey ?? new Uint8Array(),
|
|
22
|
+
});
|
|
23
|
+
const eip712SignatureHex = await signEip712(walletClient, eip712Payload);
|
|
24
|
+
const handlesWithProofs = buildHandlesWithProofs([handle]);
|
|
25
|
+
const eListAttestedDecryptRequest = buildEListAttestedDecryptRequest({
|
|
26
|
+
userAddress: walletClient.account.address,
|
|
27
|
+
handleWithProof: handlesWithProofs[0],
|
|
28
|
+
eip712Signature: hexToBytes(eip712SignatureHex),
|
|
29
|
+
...(reencryptPubKey !== undefined ? { reencryptPubKey } : {}),
|
|
30
|
+
});
|
|
31
|
+
const encryptedResponse = await kmsQuorumClient.eListAttestedDecrypt(eListAttestedDecryptRequest, backoffConfig, reencryptKeypair, executorAddress, walletClient);
|
|
32
|
+
// If reencryptPubKey is provided with a keypair, decrypt the values
|
|
33
|
+
if (reencryptPubKey !== undefined && reencryptKeypair) {
|
|
34
|
+
return {
|
|
35
|
+
...encryptedResponse,
|
|
36
|
+
values: await decryptEncryptedEListValues(encryptedResponse.values, reencryptKeypair, getEListElementType(handle)),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
return encryptedResponse;
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
if (error instanceof EListAttestedDecryptError) {
|
|
43
|
+
throw error;
|
|
44
|
+
}
|
|
45
|
+
throw new EListAttestedDecryptError('Failed to decrypt elist handle', error);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Reveal a single elist handle without wallet authentication.
|
|
50
|
+
* Returns plaintext values along with an attestation of the checksum.
|
|
51
|
+
*/
|
|
52
|
+
export async function eListAttestedReveal({ handle, backoffConfig, kmsQuorumClient, }) {
|
|
53
|
+
try {
|
|
54
|
+
validateHandle(handle);
|
|
55
|
+
const eListAttestedRevealRequest = create(EListAttestedRevealRequestSchema, {
|
|
56
|
+
handle,
|
|
57
|
+
});
|
|
58
|
+
return await kmsQuorumClient.eListAttestedReveal(eListAttestedRevealRequest, backoffConfig);
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
if (error instanceof EListAttestedDecryptError) {
|
|
62
|
+
throw error;
|
|
63
|
+
}
|
|
64
|
+
throw new EListAttestedDecryptError('Failed to reveal elist handle', error);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
function buildEListAttestedDecryptRequest(params) {
|
|
68
|
+
return create(EListAttestedDecryptRequestSchema, {
|
|
69
|
+
userAddress: params.userAddress,
|
|
70
|
+
elistHandleWithProof: params.handleWithProof,
|
|
71
|
+
eip712Signature: params.eip712Signature,
|
|
72
|
+
reencryptPubKey: params.reencryptPubKey
|
|
73
|
+
? params.reencryptPubKey
|
|
74
|
+
: new Uint8Array(),
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
// Helper function that transforms EncryptResultOf[] to PlaintextOf[] by decrypting the encrypted values
|
|
78
|
+
async function decryptEncryptedEListValues(values, reencryptKeypair, handleType) {
|
|
79
|
+
return Promise.all(values.map(async (value) => {
|
|
80
|
+
// Check if value is EncryptResultOf (has ciphertext property)
|
|
81
|
+
if ('ciphertext' in value) {
|
|
82
|
+
const ct = hexToBytes(value.ciphertext.value);
|
|
83
|
+
const plaintextBytes = await decrypt(reencryptKeypair, ct);
|
|
84
|
+
return bigintToPlaintext(value.ciphertext.scheme, handleType, bytesToBigInt(plaintextBytes));
|
|
85
|
+
}
|
|
86
|
+
return value;
|
|
87
|
+
}));
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxpc3QtYXR0ZXN0ZWQtZGVjcnlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGlzdGF0dGVzdGVkZGVjcnlwdC9lbGlzdC1hdHRlc3RlZC1kZWNyeXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsY0FBYyxHQUNmLE1BQU0sd0NBQXdDLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBa0IsTUFBTSxjQUFjLENBQUM7QUFFN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JFLE9BQU8sRUFDTCxpQkFBaUIsR0FLbEIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBRUwsaUNBQWlDLEVBQ2pDLGdDQUFnQyxHQUNqQyxNQUFNLG9EQUFvRCxDQUFDO0FBRTVELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUduRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFM0MsT0FBTyxFQUNMLHlCQUF5QixHQUcxQixNQUFNLFlBQVksQ0FBQztBQUVwQixPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUM7QUFnRTFCLGlCQUFpQjtBQUNqQixNQUFNLENBQUMsS0FBSyxVQUFVLG9CQUFvQixDQUFDLEVBQ3pDLE1BQU0sRUFDTixhQUFhLEVBQ2IsWUFBWSxFQUNaLE9BQU8sRUFDUCxlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixlQUFlLEdBVWhCO0lBSUMsSUFBSSxDQUFDO1FBQ0gsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXZCLE1BQU0sYUFBYSxHQUFHLE1BQU0sa0JBQWtCLENBQUM7WUFDN0MsZUFBZTtZ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
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { eListAttestedDecrypt, eListAttestedReveal, } from './elist-attested-decrypt.js';
|
|
2
|
+
export * from './types.js';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxpc3RhdHRlc3RlZGRlY3J5cHQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixtQkFBbUIsR0FDcEIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxjQUFjLFlBQVksQ0FBQyJ9
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { HexString } from '../binary.js';
|
|
2
|
+
import type { EncryptionScheme, EncryptResultOf, PlaintextOf, SupportedFheType } from '../encryption/encryption.js';
|
|
3
|
+
import { handleTypes } from '../index.js';
|
|
4
|
+
import type { BackoffConfig } from '../retry.js';
|
|
5
|
+
/**
|
|
6
|
+
* Custom error class for elist attested decrypt operations.
|
|
7
|
+
*/
|
|
8
|
+
export declare class EListAttestedDecryptError extends Error {
|
|
9
|
+
readonly cause?: unknown | undefined;
|
|
10
|
+
constructor(message: string, cause?: unknown | undefined);
|
|
11
|
+
}
|
|
12
|
+
export type EListDecryptionAttestation<S extends EncryptionScheme, T extends SupportedFheType> = {
|
|
13
|
+
handle: HexString;
|
|
14
|
+
commitmentProof: PlaintextOf<S, typeof handleTypes.euint256>;
|
|
15
|
+
values: PlaintextOf<S, T>[];
|
|
16
|
+
covalidatorSignatures: Uint8Array[];
|
|
17
|
+
commitments: Uint8Array[];
|
|
18
|
+
};
|
|
19
|
+
export type EncryptedEListDecryptionAttestation<S extends EncryptionScheme, T extends SupportedFheType> = {
|
|
20
|
+
handle: HexString;
|
|
21
|
+
commitmentProof: PlaintextOf<S, typeof handleTypes.euint256>;
|
|
22
|
+
values: EncryptResultOf<S, T>[];
|
|
23
|
+
covalidatorSignatures: Uint8Array[];
|
|
24
|
+
commitments: Uint8Array[];
|
|
25
|
+
};
|
|
26
|
+
export type EListAttestedDecryptor<S extends EncryptionScheme> = <T extends SupportedFheType>(args: EListAttestedDecryptFnArgs<S, T>) => Promise<EListDecryptionAttestation<S, T>>;
|
|
27
|
+
export type EListAttestedDecryptFnArgs<S extends EncryptionScheme, T extends SupportedFheType> = {
|
|
28
|
+
/** The handle to decrypt */
|
|
29
|
+
handle: HexString;
|
|
30
|
+
backoffConfig?: Partial<BackoffConfig>;
|
|
31
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom error class for elist attested decrypt operations.
|
|
3
|
+
*/
|
|
4
|
+
export class EListAttestedDecryptError extends Error {
|
|
5
|
+
cause;
|
|
6
|
+
constructor(message, cause) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.cause = cause;
|
|
9
|
+
this.name = 'EListAttestedDecryptError';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxpc3RhdHRlc3RlZGRlY3J5cHQvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUE7O0dBRUc7QUFDSCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsS0FBSztJQUdoQztJQUZsQixZQUNFLE9BQWUsRUFDQyxLQUFlO1FBRS9CLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUZDLFVBQUssR0FBTCxLQUFLLENBQVU7UUFHL0IsSUFBSSxDQUFDLElBQUksR0FBRywyQkFBMkIsQ0FBQztJQUMxQyxDQUFDO0NBQ0YifQ==
|
|
@@ -711,20 +711,6 @@ export declare const incoLightningAbi: readonly [{
|
|
|
711
711
|
readonly type: "bytes32";
|
|
712
712
|
}];
|
|
713
713
|
readonly stateMutability: "nonpayable";
|
|
714
|
-
}, {
|
|
715
|
-
readonly type: "function";
|
|
716
|
-
readonly inputs: readonly [{
|
|
717
|
-
readonly name: "randType";
|
|
718
|
-
readonly internalType: "enum ETypes";
|
|
719
|
-
readonly type: "uint8";
|
|
720
|
-
}];
|
|
721
|
-
readonly name: "eRand";
|
|
722
|
-
readonly outputs: readonly [{
|
|
723
|
-
readonly name: "result";
|
|
724
|
-
readonly internalType: "bytes32";
|
|
725
|
-
readonly type: "bytes32";
|
|
726
|
-
}];
|
|
727
|
-
readonly stateMutability: "payable";
|
|
728
714
|
}, {
|
|
729
715
|
readonly type: "function";
|
|
730
716
|
readonly inputs: readonly [{
|
|
@@ -2213,31 +2199,6 @@ export declare const incoLightningAbi: readonly [{
|
|
|
2213
2199
|
readonly indexed: false;
|
|
2214
2200
|
}];
|
|
2215
2201
|
readonly name: "ENot";
|
|
2216
|
-
}, {
|
|
2217
|
-
readonly type: "event";
|
|
2218
|
-
readonly anonymous: false;
|
|
2219
|
-
readonly inputs: readonly [{
|
|
2220
|
-
readonly name: "counter";
|
|
2221
|
-
readonly internalType: "uint256";
|
|
2222
|
-
readonly type: "uint256";
|
|
2223
|
-
readonly indexed: true;
|
|
2224
|
-
}, {
|
|
2225
|
-
readonly name: "randType";
|
|
2226
|
-
readonly internalType: "enum ETypes";
|
|
2227
|
-
readonly type: "uint8";
|
|
2228
|
-
readonly indexed: false;
|
|
2229
|
-
}, {
|
|
2230
|
-
readonly name: "result";
|
|
2231
|
-
readonly internalType: "bytes32";
|
|
2232
|
-
readonly type: "bytes32";
|
|
2233
|
-
readonly indexed: true;
|
|
2234
|
-
}, {
|
|
2235
|
-
readonly name: "eventId";
|
|
2236
|
-
readonly internalType: "uint256";
|
|
2237
|
-
readonly type: "uint256";
|
|
2238
|
-
readonly indexed: false;
|
|
2239
|
-
}];
|
|
2240
|
-
readonly name: "ERand";
|
|
2241
2202
|
}, {
|
|
2242
2203
|
readonly type: "event";
|
|
2243
2204
|
readonly anonymous: false;
|