@inco/js 0.6.8 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -8
- package/dist/cjs/advancedacl/session-key.d.ts +39 -19
- package/dist/cjs/advancedacl/session-key.js +59 -108
- package/dist/cjs/attestedcompute/attested-compute.d.ts +6 -6
- package/dist/cjs/attestedcompute/attested-compute.js +5 -28
- package/dist/cjs/attesteddecrypt/attested-decrypt.d.ts +68 -16
- package/dist/cjs/attesteddecrypt/attested-decrypt.js +108 -66
- package/dist/cjs/attesteddecrypt/types.d.ts +8 -3
- package/dist/cjs/attesteddecrypt/types.js +1 -1
- package/dist/cjs/encryption/encryption.d.ts +8 -10
- package/dist/cjs/encryption/encryption.js +6 -6
- package/dist/cjs/generated/abis/add-two.d.ts +1 -1
- package/dist/cjs/generated/abis/add-two.js +1 -1
- package/dist/cjs/generated/abis/lightning-preview.d.ts +40 -0
- package/dist/cjs/generated/abis/lightning-preview.js +29 -1
- package/dist/cjs/generated/abis/lightning.d.ts +1 -1
- package/dist/cjs/generated/abis/lightning.js +1 -1
- package/dist/cjs/generated/abis/verifier.d.ts +126 -67
- package/dist/cjs/generated/abis/verifier.js +108 -54
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +15 -1
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/types_pb.js +1 -1
- package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +87 -132
- package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.js +21 -27
- package/dist/cjs/generated/lightning.d.ts +40 -32
- package/dist/cjs/generated/lightning.js +43 -33
- package/dist/cjs/generated/local-node.d.ts +11 -11
- package/dist/cjs/generated/local-node.js +28 -12
- package/dist/cjs/kms/client.d.ts +8 -4
- package/dist/cjs/kms/client.js +9 -4
- package/dist/cjs/kms/quorumClient.d.ts +58 -0
- package/dist/cjs/kms/quorumClient.js +378 -0
- package/dist/cjs/kms/thresholdPromises.d.ts +7 -0
- package/dist/cjs/kms/thresholdPromises.js +52 -0
- package/dist/cjs/lite/deployments.d.ts +20 -2
- package/dist/cjs/lite/deployments.js +1 -1
- package/dist/cjs/lite/index.d.ts +1 -2
- package/dist/cjs/lite/index.js +1 -2
- package/dist/cjs/lite/lightning.d.ts +109 -77
- package/dist/cjs/lite/lightning.js +279 -112
- package/dist/cjs/local/local-node.d.ts +1 -2
- package/dist/cjs/local/local-node.js +2 -3
- package/dist/cjs/test/mocks.d.ts +15 -0
- package/dist/cjs/test/mocks.js +45 -0
- package/dist/cjs/viem.d.ts +1 -1
- package/dist/esm/advancedacl/session-key.d.ts +39 -19
- package/dist/esm/advancedacl/session-key.js +52 -100
- package/dist/esm/attestedcompute/attested-compute.d.ts +6 -6
- package/dist/esm/attestedcompute/attested-compute.js +6 -29
- package/dist/esm/attesteddecrypt/attested-decrypt.d.ts +68 -16
- package/dist/esm/attesteddecrypt/attested-decrypt.js +109 -68
- package/dist/esm/attesteddecrypt/types.d.ts +8 -3
- package/dist/esm/attesteddecrypt/types.js +1 -1
- package/dist/esm/encryption/encryption.d.ts +8 -10
- package/dist/esm/encryption/encryption.js +6 -6
- package/dist/esm/generated/abis/add-two.d.ts +1 -1
- package/dist/esm/generated/abis/add-two.js +1 -1
- package/dist/esm/generated/abis/lightning-preview.d.ts +40 -0
- package/dist/esm/generated/abis/lightning-preview.js +29 -1
- package/dist/esm/generated/abis/lightning.d.ts +1 -1
- package/dist/esm/generated/abis/lightning.js +1 -1
- package/dist/esm/generated/abis/verifier.d.ts +126 -67
- package/dist/esm/generated/abis/verifier.js +108 -54
- package/dist/esm/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +15 -1
- package/dist/esm/generated/es/inco/covalidator/compute/v1/types_pb.js +1 -1
- package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +87 -132
- package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.js +19 -25
- package/dist/esm/generated/lightning.d.ts +40 -32
- package/dist/esm/generated/lightning.js +43 -33
- package/dist/esm/generated/local-node.d.ts +11 -11
- package/dist/esm/generated/local-node.js +28 -12
- package/dist/esm/kms/client.d.ts +8 -4
- package/dist/esm/kms/client.js +8 -4
- package/dist/esm/kms/quorumClient.d.ts +58 -0
- package/dist/esm/kms/quorumClient.js +374 -0
- package/dist/esm/kms/thresholdPromises.d.ts +7 -0
- package/dist/esm/kms/thresholdPromises.js +49 -0
- package/dist/esm/lite/deployments.d.ts +20 -2
- package/dist/esm/lite/deployments.js +1 -1
- package/dist/esm/lite/index.d.ts +1 -2
- package/dist/esm/lite/index.js +1 -2
- package/dist/esm/lite/lightning.d.ts +109 -77
- package/dist/esm/lite/lightning.js +278 -111
- package/dist/esm/local/local-node.d.ts +1 -2
- package/dist/esm/local/local-node.js +2 -3
- package/dist/esm/test/mocks.d.ts +15 -0
- package/dist/esm/test/mocks.js +39 -0
- package/dist/esm/viem.d.ts +1 -1
- package/dist/types/advancedacl/session-key.d.ts +39 -19
- package/dist/types/attestedcompute/attested-compute.d.ts +6 -6
- package/dist/types/attesteddecrypt/attested-decrypt.d.ts +68 -16
- package/dist/types/attesteddecrypt/types.d.ts +8 -3
- package/dist/types/encryption/encryption.d.ts +8 -10
- package/dist/types/generated/abis/add-two.d.ts +1 -1
- package/dist/types/generated/abis/lightning-preview.d.ts +40 -0
- package/dist/types/generated/abis/lightning.d.ts +1 -1
- package/dist/types/generated/abis/verifier.d.ts +126 -67
- package/dist/types/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +15 -1
- package/dist/types/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +87 -132
- package/dist/types/generated/lightning.d.ts +40 -32
- package/dist/types/generated/local-node.d.ts +11 -11
- package/dist/types/kms/client.d.ts +8 -4
- package/dist/types/kms/quorumClient.d.ts +58 -0
- package/dist/types/kms/thresholdPromises.d.ts +7 -0
- package/dist/types/lite/deployments.d.ts +20 -2
- package/dist/types/lite/index.d.ts +1 -2
- package/dist/types/lite/lightning.d.ts +109 -77
- package/dist/types/local/local-node.d.ts +1 -2
- package/dist/types/test/mocks.d.ts +15 -0
- package/dist/types/viem.d.ts +1 -1
- package/package.json +3 -3
- package/dist/cjs/attestedreveal/attested-reveal.d.ts +0 -21
- package/dist/cjs/attestedreveal/attested-reveal.js +0 -67
- package/dist/cjs/attestedreveal/index.d.ts +0 -1
- package/dist/cjs/attestedreveal/index.js +0 -18
- package/dist/cjs/attestedreveal/types.d.ts +0 -7
- package/dist/cjs/attestedreveal/types.js +0 -16
- package/dist/cjs/generated/es/cosmos_proto/cosmos_pb.d.ts +0 -174
- package/dist/cjs/generated/es/cosmos_proto/cosmos_pb.js +0 -118
- package/dist/cjs/generated/es/inco/fhe/v1/types_pb.d.ts +0 -419
- package/dist/cjs/generated/es/inco/fhe/v1/types_pb.js +0 -136
- package/dist/cjs/lite/reencrypt.d.ts +0 -23
- package/dist/cjs/lite/reencrypt.js +0 -131
- package/dist/esm/attestedreveal/attested-reveal.d.ts +0 -21
- package/dist/esm/attestedreveal/attested-reveal.js +0 -64
- package/dist/esm/attestedreveal/index.d.ts +0 -1
- package/dist/esm/attestedreveal/index.js +0 -2
- package/dist/esm/attestedreveal/types.d.ts +0 -7
- package/dist/esm/attestedreveal/types.js +0 -12
- package/dist/esm/generated/es/cosmos_proto/cosmos_pb.d.ts +0 -174
- package/dist/esm/generated/es/cosmos_proto/cosmos_pb.js +0 -115
- package/dist/esm/generated/es/inco/fhe/v1/types_pb.d.ts +0 -419
- package/dist/esm/generated/es/inco/fhe/v1/types_pb.js +0 -133
- package/dist/esm/lite/reencrypt.d.ts +0 -23
- package/dist/esm/lite/reencrypt.js +0 -122
- package/dist/types/attestedreveal/attested-reveal.d.ts +0 -21
- package/dist/types/attestedreveal/index.d.ts +0 -1
- package/dist/types/attestedreveal/types.d.ts +0 -7
- package/dist/types/generated/es/cosmos_proto/cosmos_pb.d.ts +0 -174
- package/dist/types/generated/es/inco/fhe/v1/types_pb.d.ts +0 -419
- package/dist/types/lite/reencrypt.d.ts +0 -23
|
@@ -1,49 +1,57 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { hexToBytes } from 'viem';
|
|
1
|
+
import { createPublicClient, getContract, hexToBytes, http, zeroAddress, } from 'viem';
|
|
3
2
|
import { baseSepolia } from 'viem/chains';
|
|
4
|
-
import { grantSessionKey, sessionKeyAttestedCompute, sessionKeyAttestedDecrypt,
|
|
5
|
-
import { attestedCompute } from '../attestedcompute/attested-compute.js';
|
|
3
|
+
import { grantSessionKey, sessionKeyAttestedCompute, sessionKeyAttestedDecrypt, updateActiveVouchersSessionNonce, } from '../advancedacl/session-key.js';
|
|
4
|
+
import { attestedCompute as performAttestedCompute } from '../attestedcompute/attested-compute.js';
|
|
6
5
|
import { attestedDecrypt } from '../attesteddecrypt/attested-decrypt.js';
|
|
7
6
|
import { HexString, parseAddress } from '../binary.js';
|
|
8
7
|
import { encryptionSchemes, } from '../encryption/index.js';
|
|
8
|
+
import { incoLightningAbi } from '../generated/abis/lightning.js';
|
|
9
|
+
import { incoVerifierAbi } from '../generated/abis/verifier.js';
|
|
9
10
|
import { lightningDeployments } from '../generated/lightning.js';
|
|
10
11
|
import { localNodeLightningConfig } from '../generated/local-node.js';
|
|
11
12
|
import { handleTypes } from '../handle.js';
|
|
13
|
+
import { getViemChain } from '../index.js';
|
|
14
|
+
import { KmsQuorumClient } from '../kms/quorumClient.js';
|
|
12
15
|
import { parseLocalEnv } from '../local/index.js';
|
|
13
16
|
import { parse } from '../schema.js';
|
|
14
17
|
import { decodeSecp256k1PublicKey, generateSecp256k1Keypair, getEciesEncryptor, } from './ecies.js';
|
|
15
|
-
import { getKmsClient, incoLiteReencryptor } from './reencrypt.js';
|
|
16
18
|
const DefaultPepper = 'testnet';
|
|
19
|
+
function isSecp256k1Keypair(value) {
|
|
20
|
+
return !!value && typeof value === 'object' && 'kp' in value;
|
|
21
|
+
}
|
|
22
|
+
function isLocalNodeEnvFileSource(value) {
|
|
23
|
+
return (!!value &&
|
|
24
|
+
typeof value === 'object' &&
|
|
25
|
+
'filePath' in value &&
|
|
26
|
+
typeof value.filePath === 'string');
|
|
27
|
+
}
|
|
17
28
|
/**
|
|
18
29
|
* The Lightning class provides a convenient way to interact with the Inco Lightning contract by binding to a specific
|
|
19
30
|
* deployment.
|
|
20
31
|
*/
|
|
21
32
|
export class Lightning {
|
|
22
33
|
_deployment;
|
|
23
|
-
|
|
34
|
+
covalidatorUrls;
|
|
35
|
+
signers;
|
|
36
|
+
threshold;
|
|
24
37
|
executorAddress;
|
|
25
|
-
eciesPublicKey;
|
|
26
38
|
chainId;
|
|
27
|
-
encryptor;
|
|
28
39
|
ephemeralKeypair;
|
|
29
|
-
|
|
30
|
-
constructor(_deployment,
|
|
40
|
+
kmsQuorumClient;
|
|
41
|
+
constructor(_deployment, covalidatorUrls, signers, threshold) {
|
|
31
42
|
this._deployment = _deployment;
|
|
32
|
-
this.
|
|
43
|
+
this.covalidatorUrls = covalidatorUrls;
|
|
44
|
+
this.signers = signers;
|
|
45
|
+
this.threshold = threshold;
|
|
33
46
|
this.executorAddress = parseAddress(_deployment.executorAddress);
|
|
34
|
-
this.eciesPublicKey = parse(HexString, _deployment.eciesPublicKey);
|
|
35
47
|
this.chainId = BigInt(_deployment.chainId);
|
|
36
48
|
this.ephemeralKeypair = generateSecp256k1Keypair();
|
|
37
|
-
this.
|
|
38
|
-
this.encryptor = getEciesEncryptor({
|
|
39
|
-
pubKeyA: decodeSecp256k1PublicKey(hexToBytes(parse(HexString, _deployment.eciesPublicKey))),
|
|
40
|
-
privKeyB: this.ephemeralKeypair,
|
|
41
|
-
});
|
|
49
|
+
this.kmsQuorumClient = KmsQuorumClient.fromUrls(covalidatorUrls, signers, threshold);
|
|
42
50
|
}
|
|
43
51
|
/**
|
|
44
52
|
* Get a Lightning instance bound to the latest Lightning deployment for the Base Sepolia testnet.
|
|
45
53
|
*/
|
|
46
|
-
static baseSepoliaTestnet() {
|
|
54
|
+
static async baseSepoliaTestnet() {
|
|
47
55
|
return Lightning.latest('testnet', baseSepolia.id);
|
|
48
56
|
}
|
|
49
57
|
/**
|
|
@@ -61,12 +69,22 @@ export class Lightning {
|
|
|
61
69
|
* corresponding Pepper.
|
|
62
70
|
*
|
|
63
71
|
*/
|
|
64
|
-
static localNode(env) {
|
|
72
|
+
static async localNode(env) {
|
|
65
73
|
if (!env) {
|
|
66
|
-
|
|
74
|
+
const config = localNodeLightningConfig[DefaultPepper];
|
|
75
|
+
return Lightning.custom({
|
|
76
|
+
...config,
|
|
77
|
+
covalidatorUrls: [...config.covalidatorUrls],
|
|
78
|
+
signers: config.signers.map((s) => parseAddress(s)),
|
|
79
|
+
});
|
|
67
80
|
}
|
|
68
81
|
if (typeof env === 'string') {
|
|
69
|
-
|
|
82
|
+
const config = localNodeLightningConfig[env];
|
|
83
|
+
return Lightning.custom({
|
|
84
|
+
...config,
|
|
85
|
+
covalidatorUrls: [...config.covalidatorUrls],
|
|
86
|
+
signers: config.signers.map((s) => parseAddress(s)),
|
|
87
|
+
});
|
|
70
88
|
}
|
|
71
89
|
const conf = localNodeLightningConfig[DefaultPepper];
|
|
72
90
|
return Lightning.custom({
|
|
@@ -74,13 +92,17 @@ export class Lightning {
|
|
|
74
92
|
chainId: env.COVALIDATOR_HOST_CHAIN_ID
|
|
75
93
|
? Number(env.COVALIDATOR_HOST_CHAIN_ID)
|
|
76
94
|
: conf.chainId,
|
|
77
|
-
|
|
95
|
+
covalidatorUrls: env.COVALIDATOR_URL
|
|
96
|
+
? env.COVALIDATOR_URL.split(',')
|
|
97
|
+
: [...conf.covalidatorUrls],
|
|
98
|
+
signers: env.EIP712_SIGNER_ADDRESS
|
|
99
|
+
? env.EIP712_SIGNER_ADDRESS.split(',').map((address) => parseAddress(address))
|
|
100
|
+
: conf.signers.map((s) => parseAddress(s)),
|
|
78
101
|
hostChainRpcUrl: env.COVALIDATOR_HOST_CHAIN_RPC_URL ??
|
|
79
102
|
conf.hostChainRpcUrl ??
|
|
80
103
|
'http://localhost:8545',
|
|
81
104
|
// These variables vary per environment
|
|
82
105
|
executorAddress: env.EXECUTOR_ADDRESS,
|
|
83
|
-
eciesPublicKey: env.ECIES_PUBLIC_KEY,
|
|
84
106
|
senderPrivateKey: env.SENDER_PRIVATE_KEY,
|
|
85
107
|
});
|
|
86
108
|
}
|
|
@@ -89,17 +111,27 @@ export class Lightning {
|
|
|
89
111
|
*
|
|
90
112
|
* @param filePath the path to the file containing the environment variables in dotenv format
|
|
91
113
|
*/
|
|
92
|
-
static async localNodeFromEnv(
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
114
|
+
static async localNodeFromEnv(source) {
|
|
115
|
+
let envContent;
|
|
116
|
+
if (isLocalNodeEnvFileSource(source)) {
|
|
117
|
+
if (typeof process === 'undefined' || !process.versions?.node) {
|
|
118
|
+
throw new Error('Lightning.localNodeFromEnv with a file path is only available in Node environments.');
|
|
119
|
+
}
|
|
120
|
+
const { readFile } = await import('fs/promises');
|
|
121
|
+
envContent = await readFile(source.filePath);
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
envContent = source;
|
|
125
|
+
}
|
|
126
|
+
const env = parseLocalEnv(envContent);
|
|
127
|
+
return await Lightning.localNode(env);
|
|
96
128
|
}
|
|
97
129
|
/**
|
|
98
130
|
* Get a Lightning deployment by name or executor address on a particular chain.
|
|
99
131
|
*
|
|
100
132
|
* @param id this is an object containing either the pair of name and chainId or the executorAddress and chainId
|
|
101
133
|
*/
|
|
102
|
-
static at(id) {
|
|
134
|
+
static async at(id) {
|
|
103
135
|
const deployment = this.isIdByName(id)
|
|
104
136
|
? lightningDeployments.find((d) => d.name === id.name && d.chainId === id.chainId)
|
|
105
137
|
: lightningDeployments.find((d) => d.executorAddress === id.executorAddress &&
|
|
@@ -107,7 +139,8 @@ export class Lightning {
|
|
|
107
139
|
if (!deployment) {
|
|
108
140
|
throw new Error(`No deployment found for ${JSON.stringify(id)}`);
|
|
109
141
|
}
|
|
110
|
-
|
|
142
|
+
const { threshold, signers } = await Lightning.getThresholdAndSigners(deployment);
|
|
143
|
+
return new Lightning(deployment, Lightning.getCovalidatorUrls(deployment, threshold), signers, threshold);
|
|
111
144
|
}
|
|
112
145
|
/**
|
|
113
146
|
* Get a Lightning deployment for a local or custom node
|
|
@@ -115,8 +148,23 @@ export class Lightning {
|
|
|
115
148
|
* @param config this is an object containing the executorAddress, eciesPublicKey, chainId and covalidatorUrl.
|
|
116
149
|
* additional fields past will be made available as part of the `deployment` property.
|
|
117
150
|
*/
|
|
118
|
-
static custom(config) {
|
|
119
|
-
|
|
151
|
+
static async custom(config) {
|
|
152
|
+
const { threshold, signers } = await Lightning.getContractThresholdAndSigners(config.executorAddress, config.chainId, config.hostChainRpcUrl);
|
|
153
|
+
return new Lightning(config, config.covalidatorUrls, signers, threshold);
|
|
154
|
+
}
|
|
155
|
+
static async getEciesPublicKey(client, executorAddress) {
|
|
156
|
+
const incoLightningContract = getContract({
|
|
157
|
+
abi: incoLightningAbi,
|
|
158
|
+
address: executorAddress,
|
|
159
|
+
client,
|
|
160
|
+
});
|
|
161
|
+
const incoVerifierAddress = await incoLightningContract.read.incoVerifier();
|
|
162
|
+
const incoVerifier = getContract({
|
|
163
|
+
abi: incoVerifierAbi,
|
|
164
|
+
address: incoVerifierAddress,
|
|
165
|
+
client,
|
|
166
|
+
});
|
|
167
|
+
return await incoVerifier.read.eciesPubkey();
|
|
120
168
|
}
|
|
121
169
|
/**
|
|
122
170
|
* Get the latest deployment for a given pepper, which usually denotes a family of deployments distinct from their
|
|
@@ -141,9 +189,9 @@ export class Lightning {
|
|
|
141
189
|
* will not be compatible with the new version.
|
|
142
190
|
*
|
|
143
191
|
* @param pepper the pepper to use to filter the deployments
|
|
144
|
-
* @param
|
|
192
|
+
* @param chain the chain to use to filter the deployments
|
|
145
193
|
*/
|
|
146
|
-
static latest(pepper, chainId) {
|
|
194
|
+
static async latest(pepper, chainId) {
|
|
147
195
|
return Lightning.at(Lightning.latestDeployment(pepper, chainId));
|
|
148
196
|
}
|
|
149
197
|
/*
|
|
@@ -160,8 +208,8 @@ export class Lightning {
|
|
|
160
208
|
* @param accountAddress the address of the account interacting with the dapp contract, normally an Externally Owned Account (EOA)
|
|
161
209
|
* @param dappAddress the address of the dapp contract that interacts with the Inco Lightning contract or library
|
|
162
210
|
*/
|
|
163
|
-
async encrypt(value, { accountAddress, dappAddress }) {
|
|
164
|
-
const { ciphertext } = await
|
|
211
|
+
async encrypt(value, { accountAddress, dappAddress }, encryptor) {
|
|
212
|
+
const { ciphertext } = await encryptor({
|
|
165
213
|
plaintext: Lightning.plaintextFromValue(value),
|
|
166
214
|
context: {
|
|
167
215
|
hostChainId: this.chainId,
|
|
@@ -173,18 +221,15 @@ export class Lightning {
|
|
|
173
221
|
return ciphertext.value;
|
|
174
222
|
}
|
|
175
223
|
/**
|
|
176
|
-
*
|
|
177
|
-
* The account associated with the walletClient must have permissions to decrypt the handle or ciphertext passed
|
|
178
|
-
* to the reencryptor function.
|
|
224
|
+
* Get the encryptor for a specific ECIES public key.
|
|
179
225
|
*
|
|
180
|
-
* @param
|
|
226
|
+
* @param eciesPubkey the ECIES public key to use for encryption
|
|
227
|
+
* @returns an Encryptor instance configured for the specified ECIES public key
|
|
181
228
|
*/
|
|
182
|
-
|
|
183
|
-
return
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
chainId: this.chainId,
|
|
187
|
-
ephemeralKeypair: this.ephemeralKeypair,
|
|
229
|
+
getEncryptor(eciesPubkey) {
|
|
230
|
+
return getEciesEncryptor({
|
|
231
|
+
pubKeyA: decodeSecp256k1PublicKey(hexToBytes(parse(HexString, eciesPubkey))),
|
|
232
|
+
privKeyB: this.ephemeralKeypair,
|
|
188
233
|
});
|
|
189
234
|
}
|
|
190
235
|
/**
|
|
@@ -220,31 +265,6 @@ export class Lightning {
|
|
|
220
265
|
expiresAt,
|
|
221
266
|
});
|
|
222
267
|
}
|
|
223
|
-
/**
|
|
224
|
-
* Creates a session key reencryptor for secure data reencryption operations.
|
|
225
|
-
*
|
|
226
|
-
* This method returns a reencryptor instance that can be used to perform reencryption
|
|
227
|
-
* operations using session keys. The reencryptor is configured with the provided
|
|
228
|
-
* allowance voucher and ephemeral keypair for secure communication.
|
|
229
|
-
*
|
|
230
|
-
* @param allowanceVoucherWithSig - The signed allowance voucher obtained from grantSessionKeyAllowanceVoucher
|
|
231
|
-
* @param ephemeralKeypair - The ephemeral keypair used for secure communication with the KMS make sure it has allowance to voucher
|
|
232
|
-
* @returns A reencryptor instance configured for session key operations
|
|
233
|
-
*
|
|
234
|
-
* @example
|
|
235
|
-
* ```typescript
|
|
236
|
-
* const reencryptor = await lightning.getSessionKeyRencryptor(voucher, ephemeralKeypair);
|
|
237
|
-
* const decryptedValue = await reencryptor({handle: resultHandle});
|
|
238
|
-
* ```
|
|
239
|
-
*/
|
|
240
|
-
getSessionKeyRencryptor(allowanceVoucherWithSig, ephemeralKeypair) {
|
|
241
|
-
return sessionKeyReencryptor({
|
|
242
|
-
chainId: this.chainId,
|
|
243
|
-
kmsConnectRpcEndpointOrClient: this.kmsClient,
|
|
244
|
-
ephemeralKeypair,
|
|
245
|
-
allowanceVoucherWithSig,
|
|
246
|
-
});
|
|
247
|
-
}
|
|
248
268
|
/**
|
|
249
269
|
* Updates the active session nonce for the given wallet client.
|
|
250
270
|
*
|
|
@@ -257,74 +277,175 @@ export class Lightning {
|
|
|
257
277
|
updateActiveVouchersSessionNonce(walletClient) {
|
|
258
278
|
return updateActiveVouchersSessionNonce(this.executorAddress, walletClient);
|
|
259
279
|
}
|
|
260
|
-
attestedDecrypt(
|
|
261
|
-
if (
|
|
262
|
-
const
|
|
263
|
-
|
|
264
|
-
|
|
280
|
+
attestedDecrypt(walletClient, handles, arg3, arg4, arg5) {
|
|
281
|
+
if (arg3 instanceof Uint8Array) {
|
|
282
|
+
const reencryptPubKey = arg3;
|
|
283
|
+
let reencryptKeypair;
|
|
284
|
+
let backoffConfig;
|
|
285
|
+
if (arg4 && isSecp256k1Keypair(arg4)) {
|
|
286
|
+
reencryptKeypair = arg4;
|
|
287
|
+
backoffConfig = arg5;
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
backoffConfig = arg4;
|
|
291
|
+
}
|
|
292
|
+
if (reencryptKeypair) {
|
|
293
|
+
return attestedDecrypt({
|
|
294
|
+
handles,
|
|
295
|
+
backoffConfig,
|
|
296
|
+
chainId: Number(this.chainId),
|
|
297
|
+
walletClient,
|
|
298
|
+
kmsQuorumClient: this.kmsQuorumClient,
|
|
299
|
+
reencryptPubKey,
|
|
300
|
+
reencryptKeypair,
|
|
301
|
+
});
|
|
302
|
+
}
|
|
265
303
|
return attestedDecrypt({
|
|
266
304
|
handles,
|
|
267
305
|
backoffConfig,
|
|
268
306
|
chainId: Number(this.chainId),
|
|
269
307
|
walletClient,
|
|
270
|
-
|
|
308
|
+
kmsQuorumClient: this.kmsQuorumClient,
|
|
309
|
+
reencryptPubKey,
|
|
271
310
|
});
|
|
272
311
|
}
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
312
|
+
const backoffConfig = arg3;
|
|
313
|
+
return attestedDecrypt({
|
|
314
|
+
handles,
|
|
315
|
+
backoffConfig,
|
|
316
|
+
chainId: Number(this.chainId),
|
|
317
|
+
walletClient,
|
|
318
|
+
kmsQuorumClient: this.kmsQuorumClient,
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
attestedDecryptWithVoucher(ephemeralKeypair, allowanceVoucherWithSig, handles, arg4, arg5, arg6) {
|
|
322
|
+
if (arg4 instanceof Uint8Array) {
|
|
323
|
+
const reencryptPubKey = arg4;
|
|
324
|
+
let reencryptKeypair;
|
|
325
|
+
let backoffConfig;
|
|
326
|
+
if (arg5 && isSecp256k1Keypair(arg5)) {
|
|
327
|
+
reencryptKeypair = arg5;
|
|
328
|
+
backoffConfig = arg6;
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
backoffConfig = arg5;
|
|
332
|
+
}
|
|
333
|
+
if (reencryptKeypair) {
|
|
334
|
+
return sessionKeyAttestedDecrypt({
|
|
335
|
+
backoffConfig,
|
|
336
|
+
chainId: Number(this.chainId),
|
|
337
|
+
kmsQuorumClient: this.kmsQuorumClient,
|
|
338
|
+
ephemeralKeypair,
|
|
339
|
+
allowanceVoucherWithSig,
|
|
340
|
+
handles,
|
|
341
|
+
reencryptPubKey,
|
|
342
|
+
reencryptKeypair,
|
|
343
|
+
});
|
|
344
|
+
}
|
|
278
345
|
return sessionKeyAttestedDecrypt({
|
|
279
346
|
backoffConfig,
|
|
280
347
|
chainId: Number(this.chainId),
|
|
281
|
-
|
|
348
|
+
kmsQuorumClient: this.kmsQuorumClient,
|
|
282
349
|
ephemeralKeypair,
|
|
283
350
|
allowanceVoucherWithSig,
|
|
284
351
|
handles,
|
|
352
|
+
reencryptPubKey,
|
|
285
353
|
});
|
|
286
354
|
}
|
|
355
|
+
const backoffConfig = arg4;
|
|
356
|
+
return sessionKeyAttestedDecrypt({
|
|
357
|
+
backoffConfig,
|
|
358
|
+
chainId: Number(this.chainId),
|
|
359
|
+
kmsQuorumClient: this.kmsQuorumClient,
|
|
360
|
+
ephemeralKeypair,
|
|
361
|
+
allowanceVoucherWithSig,
|
|
362
|
+
handles,
|
|
363
|
+
});
|
|
287
364
|
}
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
const walletClient = arg1;
|
|
311
|
-
const backoffConfig = arg5;
|
|
312
|
-
return attestedCompute({
|
|
365
|
+
/**
|
|
366
|
+
* Get an attested compute for the given wallet client.
|
|
367
|
+
*
|
|
368
|
+
* @param walletClient - The wallet client used for signing the attested compute request
|
|
369
|
+
* @param lhsHandle - The handle to compute
|
|
370
|
+
* @param op - The operation to perform
|
|
371
|
+
* @param rhsPlaintext - The plaintext to compute with
|
|
372
|
+
* @param backoffConfig - The backoff configuration for the attested compute request
|
|
373
|
+
* @returns The decryption attestation
|
|
374
|
+
*
|
|
375
|
+
* @example
|
|
376
|
+
* ```typescript
|
|
377
|
+
* import { AttestedComputeSupportedOps } from '../lite/attested-compute.js';
|
|
378
|
+
* const lhsHandle = '0x...';
|
|
379
|
+
* const rhsPlaintext = 1337n;
|
|
380
|
+
* const op = AttestedComputeSupportedOps.Eq;
|
|
381
|
+
* const response = await lightning.attestedCompute(walletClient, lhsHandle, op, rhsPlaintext);
|
|
382
|
+
* const { plaintext, covalidatorSignature, handle } = response;
|
|
383
|
+
* ```
|
|
384
|
+
*/
|
|
385
|
+
attestedCompute(walletClient, lhsHandle, op, rhsPlaintext, backoffConfig) {
|
|
386
|
+
return performAttestedCompute({
|
|
313
387
|
walletClient,
|
|
314
|
-
|
|
388
|
+
kmsQuorumClient: this.kmsQuorumClient,
|
|
389
|
+
chainId: Number(this.chainId),
|
|
390
|
+
lhsHandle,
|
|
391
|
+
op,
|
|
392
|
+
rhsPlaintext,
|
|
393
|
+
backoffConfig,
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Performs attested compute via a voucher-backed session key.
|
|
398
|
+
*
|
|
399
|
+
* @example
|
|
400
|
+
* ```ts
|
|
401
|
+
* const attestation = await lightning.attestedComputeWithVoucher(
|
|
402
|
+
* ephemeralKeypair,
|
|
403
|
+
* voucher,
|
|
404
|
+
* lhsHandle,
|
|
405
|
+
* AttestedComputeSupportedOps.Eq,
|
|
406
|
+
* true,
|
|
407
|
+
* );
|
|
408
|
+
* ```
|
|
409
|
+
*/
|
|
410
|
+
attestedComputeWithVoucher(ephemeralKeypair, allowanceVoucherWithSig, lhsHandle, op, rhsPlaintext, backoffConfig) {
|
|
411
|
+
return sessionKeyAttestedCompute({
|
|
315
412
|
chainId: Number(this.chainId),
|
|
413
|
+
kmsQuorumClient: this.kmsQuorumClient,
|
|
414
|
+
ephemeralKeypair,
|
|
415
|
+
allowanceVoucherWithSig,
|
|
316
416
|
lhsHandle,
|
|
317
417
|
op,
|
|
318
418
|
rhsPlaintext,
|
|
319
419
|
backoffConfig,
|
|
320
420
|
});
|
|
321
421
|
}
|
|
422
|
+
/**
|
|
423
|
+
* Get an decryption of publicly revealed handles.
|
|
424
|
+
*
|
|
425
|
+
* @param handles - The handles to decrypt
|
|
426
|
+
* @param backoffConfig - The backoff configuration for the attested decrypt request
|
|
427
|
+
* @returns The decryption attestations
|
|
428
|
+
*
|
|
429
|
+
* @example
|
|
430
|
+
* ```typescript
|
|
431
|
+
* const response = await lightning.attestedReveal([handle1, handle2]);
|
|
432
|
+
* const { plaintext, covalidatorSignature } = response[0];
|
|
433
|
+
* ```
|
|
434
|
+
*/
|
|
435
|
+
attestedReveal(handles, backoffConfig) {
|
|
436
|
+
return attestedDecrypt({
|
|
437
|
+
handles,
|
|
438
|
+
backoffConfig,
|
|
439
|
+
chainId: Number(this.chainId),
|
|
440
|
+
kmsQuorumClient: this.kmsQuorumClient,
|
|
441
|
+
});
|
|
442
|
+
}
|
|
322
443
|
/**
|
|
323
444
|
* Get the GRPC endpoint for the covalidator that services this deployment.
|
|
324
445
|
*/
|
|
325
|
-
static
|
|
446
|
+
static getCovalidatorUrls(deployment, threshold) {
|
|
326
447
|
const { executorAddress, chainId, pepper } = deployment;
|
|
327
|
-
return `https://${executorAddress.toLowerCase()}.${chainId}.${pepper}.inco.org
|
|
448
|
+
return Array.from({ length: threshold }, (_, i) => `https://${executorAddress.toLowerCase()}.${chainId}.${pepper}-${i + 1}.inco.org`);
|
|
328
449
|
}
|
|
329
450
|
static isIdByName(id) {
|
|
330
451
|
return id.name !== undefined;
|
|
@@ -348,5 +469,51 @@ export class Lightning {
|
|
|
348
469
|
throw new Error(`Unsupported type ${typeof value}`);
|
|
349
470
|
}
|
|
350
471
|
}
|
|
472
|
+
// Add utility method to get threshold from contract
|
|
473
|
+
static async getContractThresholdAndSigners(executorAddress, chainId, hostChainRpcUrl) {
|
|
474
|
+
const chain = getViemChain({ id: chainId });
|
|
475
|
+
const client = createPublicClient({
|
|
476
|
+
chain,
|
|
477
|
+
transport: hostChainRpcUrl ? http(hostChainRpcUrl) : http(),
|
|
478
|
+
});
|
|
479
|
+
const incoLightningContract = getContract({
|
|
480
|
+
abi: incoLightningAbi,
|
|
481
|
+
address: executorAddress,
|
|
482
|
+
client,
|
|
483
|
+
});
|
|
484
|
+
const incoVerifierAddress = await incoLightningContract.read.incoVerifier();
|
|
485
|
+
const incoVerifier = getContract({
|
|
486
|
+
abi: incoVerifierAbi,
|
|
487
|
+
address: incoVerifierAddress,
|
|
488
|
+
client,
|
|
489
|
+
});
|
|
490
|
+
console.log('inco executor', incoLightningContract.address);
|
|
491
|
+
console.log('inco verifier', incoVerifier.address);
|
|
492
|
+
const threshold = await incoVerifier.read.getThreshold();
|
|
493
|
+
const signersCount = await incoVerifier.read.getSignersCount();
|
|
494
|
+
const signersPromises = [];
|
|
495
|
+
for (let i = BigInt(0); i < signersCount; i++) {
|
|
496
|
+
signersPromises.push(incoVerifier.read.getSignerAtIndex([i]));
|
|
497
|
+
}
|
|
498
|
+
const signers = await Promise.all(signersPromises);
|
|
499
|
+
return { threshold: Number(threshold), signers: signers.map(parseAddress) };
|
|
500
|
+
}
|
|
501
|
+
static async getThresholdAndSigners(deployment) {
|
|
502
|
+
if (this.supportsThresholdRetrieval(deployment)) {
|
|
503
|
+
return await this.getContractThresholdAndSigners(deployment.executorAddress, deployment.chainId);
|
|
504
|
+
}
|
|
505
|
+
return this.getDefaultThresholdAndSigners();
|
|
506
|
+
}
|
|
507
|
+
// Check if the deployment supports threshold retrieval based on its version
|
|
508
|
+
static supportsThresholdRetrieval(deployment) {
|
|
509
|
+
// Assumes that the threshold retrieval is supported if the smart contract / deployment version is greater than or equal to 1.1.0
|
|
510
|
+
return deployment.version?.major >= 1 && deployment.version?.minor >= 1;
|
|
511
|
+
}
|
|
512
|
+
static getDefaultThresholdAndSigners() {
|
|
513
|
+
return {
|
|
514
|
+
threshold: 1,
|
|
515
|
+
signers: [zeroAddress],
|
|
516
|
+
};
|
|
517
|
+
}
|
|
351
518
|
}
|
|
352
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRuaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpdGUvbGlnaHRuaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sRUFBa0IsVUFBVSxFQUEyQixNQUFNLE1BQU0sQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFDLE9BQU8sRUFDTCxlQUFlLEVBQ2YseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6QixxQkFBcUIsRUFDckIsZ0NBQWdDLEdBQ2pDLE1BQU0sK0JBQStCLENBQUM7QUFFdkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXpFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUV6RSxPQUFPLEVBQVcsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVoRSxPQUFPLEVBRUwsaUJBQWlCLEdBSWxCLE1BQU0sd0JBQXdCLENBQUM7QUFFaEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMzQyxPQUFPLEVBQWdCLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR2hFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDckMsT0FBTyxFQUNMLHdCQUF3QixFQUN4Qix3QkFBd0IsRUFDeEIsaUJBQWlCLEdBRWxCLE1BQU0sWUFBWSxDQUFDO0FBQ3BCLE9BQU8sRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQTZCbkUsTUFBTSxhQUFhLEdBQW9CLFNBQVMsQ0FBQztBQTJCakQ7OztH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
|
|
519
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRuaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpdGUvbGlnaHRuaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxrQkFBa0IsRUFDbEIsV0FBVyxFQUNYLFVBQVUsRUFDVixJQUFJLEVBSUosV0FBVyxHQUNaLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLEVBQ0wsZUFBZSxFQUNmLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFDekIsZ0NBQWdDLEdBQ2pDLE1BQU0sK0JBQStCLENBQUM7QUFFdkMsT0FBTyxFQUFFLGVBQWUsSUFBSSxzQkFBc0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRW5HLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUt6RSxPQUFPLEVBQVcsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVoRSxPQUFPLEVBRUwsaUJBQWlCLEdBSWxCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFnQixhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sY0FB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
|
|
@@ -4,13 +4,12 @@ export declare const LocalNodeEnv: Schema.Struct<{
|
|
|
4
4
|
STATE_DUMP: typeof Schema.String;
|
|
5
5
|
EXECUTOR_ADDRESS: Schema.brand<Schema.filter<Schema.TemplateLiteral<`0x${string}`>>, "Address">;
|
|
6
6
|
ECIES_PUBLIC_KEY: Schema.TemplateLiteral<`0x${string}`>;
|
|
7
|
-
CALLBACK_ADDRESS: Schema.TemplateLiteral<`0x${string}`>;
|
|
8
7
|
SENDER_ADDRESS: Schema.brand<Schema.filter<Schema.TemplateLiteral<`0x${string}`>>, "Address">;
|
|
9
8
|
SENDER_PRIVATE_KEY: Schema.TemplateLiteral<`0x${string}`>;
|
|
9
|
+
EIP712_SIGNER_ADDRESS: Schema.optional<Schema.TemplateLiteral<`0x${string}`>>;
|
|
10
10
|
PEPPER: typeof Schema.String;
|
|
11
11
|
COVALIDATOR_ECIES_PRIVATE_KEY: Schema.TemplateLiteral<`0x${string}`>;
|
|
12
12
|
COVALIDATOR_EIP712_PRIVATE_SIGNING_KEY: Schema.TemplateLiteral<`0x${string}`>;
|
|
13
|
-
COVALIDATOR_CALLBACK_PRIVATE_KEY: Schema.TemplateLiteral<`0x${string}`>;
|
|
14
13
|
COVALIDATOR_ACL_ADDR: Schema.brand<Schema.filter<Schema.TemplateLiteral<`0x${string}`>>, "Address">;
|
|
15
14
|
COVALIDATOR_INCO_EXECUTOR_ADDR: Schema.brand<Schema.filter<Schema.TemplateLiteral<`0x${string}`>>, "Address">;
|
|
16
15
|
COVALIDATOR_DECRYPTION_HANDLER_ADDR: Schema.brand<Schema.filter<Schema.TemplateLiteral<`0x${string}`>>, "Address">;
|
|
@@ -5,13 +5,12 @@ export const LocalNodeEnv = Schema.Struct({
|
|
|
5
5
|
STATE_DUMP: Schema.String,
|
|
6
6
|
EXECUTOR_ADDRESS: Address,
|
|
7
7
|
ECIES_PUBLIC_KEY: HexString,
|
|
8
|
-
CALLBACK_ADDRESS: HexString,
|
|
9
8
|
SENDER_ADDRESS: Address,
|
|
10
9
|
SENDER_PRIVATE_KEY: HexString,
|
|
10
|
+
EIP712_SIGNER_ADDRESS: Schema.optional(HexString),
|
|
11
11
|
PEPPER: Schema.String,
|
|
12
12
|
COVALIDATOR_ECIES_PRIVATE_KEY: HexString,
|
|
13
13
|
COVALIDATOR_EIP712_PRIVATE_SIGNING_KEY: HexString,
|
|
14
|
-
COVALIDATOR_CALLBACK_PRIVATE_KEY: HexString,
|
|
15
14
|
COVALIDATOR_ACL_ADDR: Address,
|
|
16
15
|
COVALIDATOR_INCO_EXECUTOR_ADDR: Address,
|
|
17
16
|
COVALIDATOR_DECRYPTION_HANDLER_ADDR: Address,
|
|
@@ -57,4 +56,4 @@ function parseEnv(envContent) {
|
|
|
57
56
|
}
|
|
58
57
|
return env;
|
|
59
58
|
}
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtbm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9sb2NhbC9sb2NhbC1ub2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDaEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFbEQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDeEMsZ0JBQWdCLEVBQUUsT0FBTztJQUN6QixVQUFVLEVBQUUsTUFBTSxDQUFDLE1BQU07SUFDekIsZ0JBQWdCLEVBQUUsT0FBTztJQUN6QixnQkFBZ0IsRUFBRSxTQUFTO0lBQzNCLGNBQWMsRUFBRSxPQUFPO0lBQ3ZCLGtCQUFrQixFQUFFLFNBQVM7SUFDN0IscUJBQXFCLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7SUFDakQsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO0lBQ3JCLDZCQUE2QixFQUFFLFNBQVM7SUFDeEMsc0NBQXNDLEVBQUUsU0FBUztJQUNqRCxvQkFBb0IsRUFBRSxPQUFPO0lBQzdCLDhCQUE4QixFQUFFLE9BQU87SUFDdkMsbUNBQW1DLEVBQUUsT0FBTztJQUM1Qyx5QkFBeUIsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDekQsZUFBZSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUMvQyw4QkFBOEIsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7Q0FDL0QsQ0FBQyxDQUFDO0FBSUgsc0VBQXNFO0FBQ3RFLGdFQUFnRTtBQUNoRSxNQUFNLFVBQVUsYUFBYSxDQUFDLFlBQThCO0lBQzFELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO0lBQ2xFLE9BQU8sTUFBTSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFFRCxTQUFTLE9BQU8sQ0FBQyxVQUEyQjtJQUMxQyxPQUFPLFFBQVEsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQsbUZBQW1GO0FBQ25GLFNBQVMsUUFBUSxDQUFDLFVBQWtCO0lBQ2xDLElBQUksR0FBRyxHQUEyQixFQUFFLENBQUM7SUFDckMsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVyQyxpQ0FBaUM7SUFDakMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN6QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDaEMsSUFBSSxXQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEQsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QyxJQUFJLFVBQVUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN0QixNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDeEQsSUFBSSxLQUFLLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBRXpELHVCQUF1QjtnQkFDdkIsSUFDRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDOUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDOUMsQ0FBQztvQkFDRCxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDL0MsQ0FBQztnQkFFRCxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ25CLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELHlEQUF5RDtJQUN6RCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQy9DLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFlLEVBQUUsRUFBRTtZQUM5RCxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIn0=
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Account, Chain, Transport, WalletClient } from 'viem';
|
|
2
|
+
import { vi } from 'vitest';
|
|
3
|
+
import { KmsClient } from '../kms/client.js';
|
|
4
|
+
import { KmsQuorumClient } from '../kms/quorumClient.js';
|
|
5
|
+
interface MinimalKmsClient {
|
|
6
|
+
attestedCompute: ReturnType<typeof vi.fn>;
|
|
7
|
+
attestedDecrypt: ReturnType<typeof vi.fn>;
|
|
8
|
+
key: ReturnType<typeof vi.fn>;
|
|
9
|
+
reencrypt: ReturnType<typeof vi.fn>;
|
|
10
|
+
}
|
|
11
|
+
export declare function createMockKmsClient(): MinimalKmsClient & KmsClient;
|
|
12
|
+
export declare function createMockQuorumClient(): KmsQuorumClient;
|
|
13
|
+
export declare function setupMockInQuorumClient(quorumClient: KmsQuorumClient, mockKmsClient: MinimalKmsClient & KmsClient): void;
|
|
14
|
+
export declare function createTestWalletClient(): WalletClient<Transport, Chain, Account>;
|
|
15
|
+
export {};
|