@inco/js 0.6.9 → 0.7.1
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 -26
- package/dist/cjs/advancedacl/session-key.js +53 -136
- package/dist/cjs/attestedcompute/attested-compute.d.ts +6 -6
- package/dist/cjs/attestedcompute/attested-compute.js +5 -35
- package/dist/cjs/attesteddecrypt/attested-decrypt.d.ts +36 -21
- package/dist/cjs/attesteddecrypt/attested-decrypt.js +107 -108
- package/dist/cjs/attesteddecrypt/types.d.ts +4 -4
- 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 +13 -5
- package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.js +3 -4
- package/dist/cjs/generated/lightning.d.ts +40 -0
- package/dist/cjs/generated/lightning.js +43 -1
- package/dist/cjs/generated/local-node.d.ts +11 -7
- package/dist/cjs/generated/local-node.js +28 -8
- 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/ecies.d.ts +2 -0
- package/dist/cjs/lite/ecies.js +5 -2
- package/dist/cjs/lite/index.d.ts +0 -1
- package/dist/cjs/lite/index.js +1 -2
- package/dist/cjs/lite/lightning.d.ts +110 -74
- package/dist/cjs/lite/lightning.js +272 -127
- 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 +3 -0
- package/dist/cjs/test/mocks.js +19 -1
- package/dist/cjs/viem.d.ts +2 -4
- package/dist/cjs/viem.js +6 -2
- package/dist/esm/advancedacl/session-key.d.ts +39 -26
- package/dist/esm/advancedacl/session-key.js +44 -126
- package/dist/esm/attestedcompute/attested-compute.d.ts +6 -6
- package/dist/esm/attestedcompute/attested-compute.js +6 -36
- package/dist/esm/attesteddecrypt/attested-decrypt.d.ts +36 -21
- package/dist/esm/attesteddecrypt/attested-decrypt.js +106 -108
- package/dist/esm/attesteddecrypt/types.d.ts +4 -4
- 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 +13 -5
- package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.js +2 -3
- package/dist/esm/generated/lightning.d.ts +40 -0
- package/dist/esm/generated/lightning.js +43 -1
- package/dist/esm/generated/local-node.d.ts +11 -7
- package/dist/esm/generated/local-node.js +28 -8
- 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/ecies.d.ts +2 -0
- package/dist/esm/lite/ecies.js +4 -2
- package/dist/esm/lite/index.d.ts +0 -1
- package/dist/esm/lite/index.js +1 -2
- package/dist/esm/lite/lightning.d.ts +110 -74
- package/dist/esm/lite/lightning.js +276 -131
- 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 +3 -0
- package/dist/esm/test/mocks.js +17 -1
- package/dist/esm/viem.d.ts +2 -4
- package/dist/esm/viem.js +6 -2
- package/dist/types/advancedacl/session-key.d.ts +39 -26
- package/dist/types/attestedcompute/attested-compute.d.ts +6 -6
- package/dist/types/attesteddecrypt/attested-decrypt.d.ts +36 -21
- package/dist/types/attesteddecrypt/types.d.ts +4 -4
- 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 +13 -5
- package/dist/types/generated/lightning.d.ts +40 -0
- package/dist/types/generated/local-node.d.ts +11 -7
- 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/ecies.d.ts +2 -0
- package/dist/types/lite/index.d.ts +0 -1
- package/dist/types/lite/lightning.d.ts +110 -74
- package/dist/types/local/local-node.d.ts +1 -2
- package/dist/types/test/mocks.d.ts +3 -0
- package/dist/types/viem.d.ts +2 -4
- package/package.json +6 -3
- package/dist/cjs/attestedreveal/attested-reveal.d.ts +0 -21
- package/dist/cjs/attestedreveal/attested-reveal.js +0 -69
- 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 -21
- package/dist/cjs/lite/reencrypt.js +0 -141
- package/dist/esm/attestedreveal/attested-reveal.d.ts +0 -21
- package/dist/esm/attestedreveal/attested-reveal.js +0 -66
- 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 -21
- package/dist/esm/lite/reencrypt.js +0 -131
- 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 -21
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Lightning = void 0;
|
|
4
|
-
const fs = require("fs/promises");
|
|
5
4
|
const viem_1 = require("viem");
|
|
6
5
|
const chains_1 = require("viem/chains");
|
|
7
6
|
const session_key_js_1 = require("../advancedacl/session-key.js");
|
|
8
7
|
const attested_compute_js_1 = require("../attestedcompute/attested-compute.js");
|
|
9
8
|
const attested_decrypt_js_1 = require("../attesteddecrypt/attested-decrypt.js");
|
|
10
|
-
const attested_reveal_js_1 = require("../attestedreveal/attested-reveal.js");
|
|
11
9
|
const binary_js_1 = require("../binary.js");
|
|
12
10
|
const index_js_1 = require("../encryption/index.js");
|
|
13
11
|
const lightning_js_1 = require("../generated/abis/lightning.js");
|
|
@@ -15,35 +13,56 @@ const verifier_js_1 = require("../generated/abis/verifier.js");
|
|
|
15
13
|
const lightning_js_2 = require("../generated/lightning.js");
|
|
16
14
|
const local_node_js_1 = require("../generated/local-node.js");
|
|
17
15
|
const handle_js_1 = require("../handle.js");
|
|
18
|
-
const index_js_2 = require("../
|
|
16
|
+
const index_js_2 = require("../index.js");
|
|
17
|
+
const quorumClient_js_1 = require("../kms/quorumClient.js");
|
|
18
|
+
const index_js_3 = require("../local/index.js");
|
|
19
19
|
const schema_js_1 = require("../schema.js");
|
|
20
20
|
const ecies_js_1 = require("./ecies.js");
|
|
21
|
-
const reencrypt_js_1 = require("./reencrypt.js");
|
|
22
21
|
const DefaultPepper = 'testnet';
|
|
22
|
+
function isSecp256k1Keypair(value) {
|
|
23
|
+
return !!value && typeof value === 'object' && 'kp' in value;
|
|
24
|
+
}
|
|
25
|
+
function isLocalNodeEnvFileSource(value) {
|
|
26
|
+
return (!!value &&
|
|
27
|
+
typeof value === 'object' &&
|
|
28
|
+
'filePath' in value &&
|
|
29
|
+
typeof value.filePath === 'string');
|
|
30
|
+
}
|
|
23
31
|
/**
|
|
24
32
|
* The Lightning class provides a convenient way to interact with the Inco Lightning contract by binding to a specific
|
|
25
33
|
* deployment.
|
|
26
34
|
*/
|
|
27
35
|
class Lightning {
|
|
28
36
|
_deployment;
|
|
29
|
-
|
|
37
|
+
covalidatorUrls;
|
|
38
|
+
signers;
|
|
39
|
+
threshold;
|
|
40
|
+
eciesPubKey;
|
|
30
41
|
executorAddress;
|
|
31
42
|
chainId;
|
|
32
43
|
ephemeralKeypair;
|
|
33
|
-
|
|
34
|
-
|
|
44
|
+
kmsQuorumClient;
|
|
45
|
+
encryptor;
|
|
46
|
+
constructor(_deployment, covalidatorUrls, signers, threshold, eciesPubKey) {
|
|
35
47
|
this._deployment = _deployment;
|
|
36
|
-
this.
|
|
48
|
+
this.covalidatorUrls = covalidatorUrls;
|
|
49
|
+
this.signers = signers;
|
|
50
|
+
this.threshold = threshold;
|
|
51
|
+
this.eciesPubKey = eciesPubKey;
|
|
37
52
|
this.executorAddress = (0, binary_js_1.parseAddress)(_deployment.executorAddress);
|
|
38
53
|
this.chainId = BigInt(_deployment.chainId);
|
|
39
54
|
this.ephemeralKeypair = (0, ecies_js_1.generateSecp256k1Keypair)();
|
|
40
|
-
this.
|
|
55
|
+
this.encryptor = (0, ecies_js_1.getEciesEncryptor)({
|
|
56
|
+
pubKeyA: (0, ecies_js_1.decodeSecp256k1PublicKey)((0, viem_1.hexToBytes)((0, schema_js_1.parse)(binary_js_1.HexString, this.eciesPubKey))),
|
|
57
|
+
privKeyB: this.ephemeralKeypair,
|
|
58
|
+
});
|
|
59
|
+
this.kmsQuorumClient = quorumClient_js_1.KmsQuorumClient.fromUrls(this.covalidatorUrls, this.signers, this.threshold);
|
|
41
60
|
}
|
|
42
61
|
/**
|
|
43
62
|
* Get a Lightning instance bound to the latest Lightning deployment for the Base Sepolia testnet.
|
|
44
63
|
*/
|
|
45
64
|
static async baseSepoliaTestnet() {
|
|
46
|
-
return
|
|
65
|
+
return Lightning.latest('testnet', chains_1.baseSepolia.id);
|
|
47
66
|
}
|
|
48
67
|
/**
|
|
49
68
|
* Get a Lightning instance bound to our canonical Anvil-based test node and test Covalidator node
|
|
@@ -62,18 +81,33 @@ class Lightning {
|
|
|
62
81
|
*/
|
|
63
82
|
static async localNode(env) {
|
|
64
83
|
if (!env) {
|
|
65
|
-
|
|
84
|
+
const config = local_node_js_1.localNodeLightningConfig[DefaultPepper];
|
|
85
|
+
return Lightning.custom({
|
|
86
|
+
...config,
|
|
87
|
+
covalidatorUrls: [...config.covalidatorUrls],
|
|
88
|
+
signers: config.signers.map((s) => (0, binary_js_1.parseAddress)(s)),
|
|
89
|
+
});
|
|
66
90
|
}
|
|
67
91
|
if (typeof env === 'string') {
|
|
68
|
-
|
|
92
|
+
const config = local_node_js_1.localNodeLightningConfig[env];
|
|
93
|
+
return Lightning.custom({
|
|
94
|
+
...config,
|
|
95
|
+
covalidatorUrls: [...config.covalidatorUrls],
|
|
96
|
+
signers: config.signers.map((s) => (0, binary_js_1.parseAddress)(s)),
|
|
97
|
+
});
|
|
69
98
|
}
|
|
70
99
|
const conf = local_node_js_1.localNodeLightningConfig[DefaultPepper];
|
|
71
|
-
return
|
|
100
|
+
return Lightning.custom({
|
|
72
101
|
// We assume that we always run a local node as the default anvil node
|
|
73
102
|
chainId: env.COVALIDATOR_HOST_CHAIN_ID
|
|
74
103
|
? Number(env.COVALIDATOR_HOST_CHAIN_ID)
|
|
75
104
|
: conf.chainId,
|
|
76
|
-
|
|
105
|
+
covalidatorUrls: env.COVALIDATOR_URL
|
|
106
|
+
? env.COVALIDATOR_URL.split(',')
|
|
107
|
+
: [...conf.covalidatorUrls],
|
|
108
|
+
signers: env.EIP712_SIGNER_ADDRESS
|
|
109
|
+
? env.EIP712_SIGNER_ADDRESS.split(',').map((address) => (0, binary_js_1.parseAddress)(address))
|
|
110
|
+
: conf.signers.map((s) => (0, binary_js_1.parseAddress)(s)),
|
|
77
111
|
hostChainRpcUrl: env.COVALIDATOR_HOST_CHAIN_RPC_URL ??
|
|
78
112
|
conf.hostChainRpcUrl ??
|
|
79
113
|
'http://localhost:8545',
|
|
@@ -87,9 +121,19 @@ class Lightning {
|
|
|
87
121
|
*
|
|
88
122
|
* @param filePath the path to the file containing the environment variables in dotenv format
|
|
89
123
|
*/
|
|
90
|
-
static async localNodeFromEnv(
|
|
91
|
-
|
|
92
|
-
|
|
124
|
+
static async localNodeFromEnv(source) {
|
|
125
|
+
let envContent;
|
|
126
|
+
if (isLocalNodeEnvFileSource(source)) {
|
|
127
|
+
if (typeof process === 'undefined' || !process.versions?.node) {
|
|
128
|
+
throw new Error('Lightning.localNodeFromEnv with a file path is only available in Node environments.');
|
|
129
|
+
}
|
|
130
|
+
const { readFile } = await Promise.resolve().then(() => require('fs/promises'));
|
|
131
|
+
envContent = await readFile(source.filePath);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
envContent = source;
|
|
135
|
+
}
|
|
136
|
+
const env = (0, index_js_3.parseLocalEnv)(envContent);
|
|
93
137
|
return await Lightning.localNode(env);
|
|
94
138
|
}
|
|
95
139
|
/**
|
|
@@ -105,7 +149,13 @@ class Lightning {
|
|
|
105
149
|
if (!deployment) {
|
|
106
150
|
throw new Error(`No deployment found for ${JSON.stringify(id)}`);
|
|
107
151
|
}
|
|
108
|
-
|
|
152
|
+
const chain = (0, index_js_2.getViemChain)({ id: deployment.chainId });
|
|
153
|
+
const client = (0, viem_1.createPublicClient)({
|
|
154
|
+
chain,
|
|
155
|
+
transport: (0, viem_1.http)(),
|
|
156
|
+
});
|
|
157
|
+
const { threshold, signers, eciesPubKey } = await Lightning.getChainConfig(deployment, client);
|
|
158
|
+
return new Lightning(deployment, Lightning.getCovalidatorUrls(deployment, threshold), signers, threshold, eciesPubKey);
|
|
109
159
|
}
|
|
110
160
|
/**
|
|
111
161
|
* Get a Lightning deployment for a local or custom node
|
|
@@ -114,21 +164,13 @@ class Lightning {
|
|
|
114
164
|
* additional fields past will be made available as part of the `deployment` property.
|
|
115
165
|
*/
|
|
116
166
|
static async custom(config) {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
abi: lightning_js_1.incoLightningAbi,
|
|
122
|
-
address: executorAddress,
|
|
123
|
-
client,
|
|
124
|
-
});
|
|
125
|
-
const incoVerifierAddress = await incoLightningContract.read.incoVerifier();
|
|
126
|
-
const incoVerifier = (0, viem_1.getContract)({
|
|
127
|
-
abi: verifier_js_1.incoVerifierAbi,
|
|
128
|
-
address: incoVerifierAddress,
|
|
129
|
-
client,
|
|
167
|
+
const chain = (0, index_js_2.getViemChain)({ id: config.chainId });
|
|
168
|
+
const client = (0, viem_1.createPublicClient)({
|
|
169
|
+
chain,
|
|
170
|
+
transport: config.hostChainRpcUrl ? (0, viem_1.http)(config.hostChainRpcUrl) : (0, viem_1.http)(),
|
|
130
171
|
});
|
|
131
|
-
|
|
172
|
+
const { threshold, signers, eciesPubKey } = await Lightning.getVerifierContractDetails(config.executorAddress, client);
|
|
173
|
+
return new Lightning(config, config.covalidatorUrls, signers, threshold, eciesPubKey);
|
|
132
174
|
}
|
|
133
175
|
/**
|
|
134
176
|
* Get the latest deployment for a given pepper, which usually denotes a family of deployments distinct from their
|
|
@@ -153,10 +195,10 @@ class Lightning {
|
|
|
153
195
|
* will not be compatible with the new version.
|
|
154
196
|
*
|
|
155
197
|
* @param pepper the pepper to use to filter the deployments
|
|
156
|
-
* @param
|
|
198
|
+
* @param chain the chain to use to filter the deployments
|
|
157
199
|
*/
|
|
158
200
|
static async latest(pepper, chainId) {
|
|
159
|
-
return
|
|
201
|
+
return Lightning.at(Lightning.latestDeployment(pepper, chainId));
|
|
160
202
|
}
|
|
161
203
|
/*
|
|
162
204
|
* Get the latest deployment for a given pepper, which usually denotes a family of deployments distinct from their
|
|
@@ -171,10 +213,15 @@ class Lightning {
|
|
|
171
213
|
* @param value a boolean or numeric value to encrypt
|
|
172
214
|
* @param accountAddress the address of the account interacting with the dapp contract, normally an Externally Owned Account (EOA)
|
|
173
215
|
* @param dappAddress the address of the dapp contract that interacts with the Inco Lightning contract or library
|
|
216
|
+
* @param handleType (optional) the handle type to be used for encrypting the value - this is required in case of non-default handle types
|
|
217
|
+
* default handle types:
|
|
218
|
+
* - boolean -> handleTypes.ebool
|
|
219
|
+
* - number | bigint -> handleTypes.euint256
|
|
220
|
+
* @returns a promise that resolves to the encrypted value as a HexString
|
|
174
221
|
*/
|
|
175
|
-
async encrypt(value, { accountAddress, dappAddress }
|
|
176
|
-
const { ciphertext } = await encryptor({
|
|
177
|
-
plaintext: Lightning.plaintextFromValue(value),
|
|
222
|
+
async encrypt(value, { accountAddress, dappAddress, handleType }) {
|
|
223
|
+
const { ciphertext } = await this.encryptor({
|
|
224
|
+
plaintext: Lightning.plaintextFromValue(value, handleType),
|
|
178
225
|
context: {
|
|
179
226
|
hostChainId: this.chainId,
|
|
180
227
|
aclAddress: this.executorAddress,
|
|
@@ -184,27 +231,6 @@ class Lightning {
|
|
|
184
231
|
});
|
|
185
232
|
return ciphertext.value;
|
|
186
233
|
}
|
|
187
|
-
/**
|
|
188
|
-
* Obtain a reencryptor for a particular Externally Owned Account (EOA) to request decrypted values.
|
|
189
|
-
* The account associated with the walletClient must have permissions to decrypt the handle or ciphertext passed
|
|
190
|
-
* to the reencryptor function.
|
|
191
|
-
*
|
|
192
|
-
* @param walletClient the wallet client to use for signing the reencrypt request.
|
|
193
|
-
*/
|
|
194
|
-
getReencryptor(walletClient) {
|
|
195
|
-
return (0, reencrypt_js_1.incoLiteReencryptor)({
|
|
196
|
-
walletClient,
|
|
197
|
-
kmsConnectRpcEndpointOrClient: this.kmsClient,
|
|
198
|
-
chainId: this.chainId,
|
|
199
|
-
ephemeralKeypair: this.ephemeralKeypair,
|
|
200
|
-
});
|
|
201
|
-
}
|
|
202
|
-
getEncryptor(eciesPubkey) {
|
|
203
|
-
return (0, ecies_js_1.getEciesEncryptor)({
|
|
204
|
-
pubKeyA: (0, ecies_js_1.decodeSecp256k1PublicKey)((0, viem_1.hexToBytes)((0, schema_js_1.parse)(binary_js_1.HexString, eciesPubkey))),
|
|
205
|
-
privKeyB: this.ephemeralKeypair,
|
|
206
|
-
});
|
|
207
|
-
}
|
|
208
234
|
/**
|
|
209
235
|
* Grants a session key allowance voucher for secure reencryption operations.
|
|
210
236
|
*
|
|
@@ -238,31 +264,6 @@ class Lightning {
|
|
|
238
264
|
expiresAt,
|
|
239
265
|
});
|
|
240
266
|
}
|
|
241
|
-
/**
|
|
242
|
-
* Creates a session key reencryptor for secure data reencryption operations.
|
|
243
|
-
*
|
|
244
|
-
* This method returns a reencryptor instance that can be used to perform reencryption
|
|
245
|
-
* operations using session keys. The reencryptor is configured with the provided
|
|
246
|
-
* allowance voucher and ephemeral keypair for secure communication.
|
|
247
|
-
*
|
|
248
|
-
* @param allowanceVoucherWithSig - The signed allowance voucher obtained from grantSessionKeyAllowanceVoucher
|
|
249
|
-
* @param ephemeralKeypair - The ephemeral keypair used for secure communication with the KMS make sure it has allowance to voucher
|
|
250
|
-
* @returns A reencryptor instance configured for session key operations
|
|
251
|
-
*
|
|
252
|
-
* @example
|
|
253
|
-
* ```typescript
|
|
254
|
-
* const reencryptor = await lightning.getSessionKeyRencryptor(voucher, ephemeralKeypair);
|
|
255
|
-
* const decryptedValue = await reencryptor({handle: resultHandle});
|
|
256
|
-
* ```
|
|
257
|
-
*/
|
|
258
|
-
getSessionKeyRencryptor(allowanceVoucherWithSig, ephemeralKeypair) {
|
|
259
|
-
return (0, session_key_js_1.sessionKeyReencryptor)({
|
|
260
|
-
chainId: this.chainId,
|
|
261
|
-
kmsConnectRpcEndpointOrClient: this.kmsClient,
|
|
262
|
-
ephemeralKeypair,
|
|
263
|
-
allowanceVoucherWithSig,
|
|
264
|
-
});
|
|
265
|
-
}
|
|
266
267
|
/**
|
|
267
268
|
* Updates the active session nonce for the given wallet client.
|
|
268
269
|
*
|
|
@@ -275,62 +276,142 @@ class Lightning {
|
|
|
275
276
|
updateActiveVouchersSessionNonce(walletClient) {
|
|
276
277
|
return (0, session_key_js_1.updateActiveVouchersSessionNonce)(this.executorAddress, walletClient);
|
|
277
278
|
}
|
|
278
|
-
attestedDecrypt(
|
|
279
|
-
if (
|
|
280
|
-
const
|
|
281
|
-
|
|
282
|
-
|
|
279
|
+
attestedDecrypt(walletClient, handles, arg3, arg4, arg5) {
|
|
280
|
+
if (arg3 instanceof Uint8Array) {
|
|
281
|
+
const reencryptPubKey = arg3;
|
|
282
|
+
let reencryptKeypair;
|
|
283
|
+
let backoffConfig;
|
|
284
|
+
if (arg4 && isSecp256k1Keypair(arg4)) {
|
|
285
|
+
reencryptKeypair = arg4;
|
|
286
|
+
backoffConfig = arg5;
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
backoffConfig = arg4;
|
|
290
|
+
}
|
|
291
|
+
if (reencryptKeypair) {
|
|
292
|
+
return (0, attested_decrypt_js_1.attestedDecrypt)({
|
|
293
|
+
handles,
|
|
294
|
+
backoffConfig,
|
|
295
|
+
chainId: Number(this.chainId),
|
|
296
|
+
walletClient,
|
|
297
|
+
kmsQuorumClient: this.kmsQuorumClient,
|
|
298
|
+
reencryptPubKey,
|
|
299
|
+
reencryptKeypair,
|
|
300
|
+
});
|
|
301
|
+
}
|
|
283
302
|
return (0, attested_decrypt_js_1.attestedDecrypt)({
|
|
284
303
|
handles,
|
|
285
304
|
backoffConfig,
|
|
286
305
|
chainId: Number(this.chainId),
|
|
287
306
|
walletClient,
|
|
288
|
-
|
|
307
|
+
kmsQuorumClient: this.kmsQuorumClient,
|
|
308
|
+
reencryptPubKey,
|
|
289
309
|
});
|
|
290
310
|
}
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
311
|
+
const backoffConfig = arg3;
|
|
312
|
+
return (0, attested_decrypt_js_1.attestedDecrypt)({
|
|
313
|
+
handles,
|
|
314
|
+
backoffConfig,
|
|
315
|
+
chainId: Number(this.chainId),
|
|
316
|
+
walletClient,
|
|
317
|
+
kmsQuorumClient: this.kmsQuorumClient,
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
attestedDecryptWithVoucher(ephemeralKeypair, allowanceVoucherWithSig, handles, arg4, arg5, arg6) {
|
|
321
|
+
if (arg4 instanceof Uint8Array) {
|
|
322
|
+
const reencryptPubKey = arg4;
|
|
323
|
+
let reencryptKeypair;
|
|
324
|
+
let backoffConfig;
|
|
325
|
+
if (arg5 && isSecp256k1Keypair(arg5)) {
|
|
326
|
+
reencryptKeypair = arg5;
|
|
327
|
+
backoffConfig = arg6;
|
|
328
|
+
}
|
|
329
|
+
else {
|
|
330
|
+
backoffConfig = arg5;
|
|
331
|
+
}
|
|
332
|
+
if (reencryptKeypair) {
|
|
333
|
+
return (0, session_key_js_1.sessionKeyAttestedDecrypt)({
|
|
334
|
+
backoffConfig,
|
|
335
|
+
chainId: Number(this.chainId),
|
|
336
|
+
kmsQuorumClient: this.kmsQuorumClient,
|
|
337
|
+
ephemeralKeypair,
|
|
338
|
+
allowanceVoucherWithSig,
|
|
339
|
+
handles,
|
|
340
|
+
reencryptPubKey,
|
|
341
|
+
reencryptKeypair,
|
|
342
|
+
});
|
|
343
|
+
}
|
|
296
344
|
return (0, session_key_js_1.sessionKeyAttestedDecrypt)({
|
|
297
345
|
backoffConfig,
|
|
298
346
|
chainId: Number(this.chainId),
|
|
299
|
-
|
|
347
|
+
kmsQuorumClient: this.kmsQuorumClient,
|
|
300
348
|
ephemeralKeypair,
|
|
301
349
|
allowanceVoucherWithSig,
|
|
302
350
|
handles,
|
|
351
|
+
reencryptPubKey,
|
|
303
352
|
});
|
|
304
353
|
}
|
|
354
|
+
const backoffConfig = arg4;
|
|
355
|
+
return (0, session_key_js_1.sessionKeyAttestedDecrypt)({
|
|
356
|
+
backoffConfig,
|
|
357
|
+
chainId: Number(this.chainId),
|
|
358
|
+
kmsQuorumClient: this.kmsQuorumClient,
|
|
359
|
+
ephemeralKeypair,
|
|
360
|
+
allowanceVoucherWithSig,
|
|
361
|
+
handles,
|
|
362
|
+
});
|
|
305
363
|
}
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
// Wallet-client path
|
|
328
|
-
const walletClient = arg1;
|
|
329
|
-
const backoffConfig = arg5;
|
|
364
|
+
/**
|
|
365
|
+
* Get an attested compute for the given wallet client.
|
|
366
|
+
*
|
|
367
|
+
* @param walletClient - The wallet client used for signing the attested compute request
|
|
368
|
+
* @param lhsHandle - The handle to compute
|
|
369
|
+
* @param op - The operation to perform
|
|
370
|
+
* @param rhsPlaintext - The plaintext to compute with
|
|
371
|
+
* @param backoffConfig - The backoff configuration for the attested compute request
|
|
372
|
+
* @returns The decryption attestation
|
|
373
|
+
*
|
|
374
|
+
* @example
|
|
375
|
+
* ```typescript
|
|
376
|
+
* import { AttestedComputeSupportedOps } from '../lite/attested-compute.js';
|
|
377
|
+
* const lhsHandle = '0x...';
|
|
378
|
+
* const rhsPlaintext = 1337n;
|
|
379
|
+
* const op = AttestedComputeSupportedOps.Eq;
|
|
380
|
+
* const response = await lightning.attestedCompute(walletClient, lhsHandle, op, rhsPlaintext);
|
|
381
|
+
* const { plaintext, covalidatorSignature, handle } = response;
|
|
382
|
+
* ```
|
|
383
|
+
*/
|
|
384
|
+
attestedCompute(walletClient, lhsHandle, op, rhsPlaintext, backoffConfig) {
|
|
330
385
|
return (0, attested_compute_js_1.attestedCompute)({
|
|
331
386
|
walletClient,
|
|
332
|
-
|
|
387
|
+
kmsQuorumClient: this.kmsQuorumClient,
|
|
388
|
+
chainId: Number(this.chainId),
|
|
389
|
+
lhsHandle,
|
|
390
|
+
op,
|
|
391
|
+
rhsPlaintext,
|
|
392
|
+
backoffConfig,
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Performs attested compute via a voucher-backed session key.
|
|
397
|
+
*
|
|
398
|
+
* @example
|
|
399
|
+
* ```ts
|
|
400
|
+
* const attestation = await lightning.attestedComputeWithVoucher(
|
|
401
|
+
* ephemeralKeypair,
|
|
402
|
+
* voucher,
|
|
403
|
+
* lhsHandle,
|
|
404
|
+
* AttestedComputeSupportedOps.Eq,
|
|
405
|
+
* true,
|
|
406
|
+
* );
|
|
407
|
+
* ```
|
|
408
|
+
*/
|
|
409
|
+
attestedComputeWithVoucher(ephemeralKeypair, allowanceVoucherWithSig, lhsHandle, op, rhsPlaintext, backoffConfig) {
|
|
410
|
+
return (0, session_key_js_1.sessionKeyAttestedCompute)({
|
|
333
411
|
chainId: Number(this.chainId),
|
|
412
|
+
kmsQuorumClient: this.kmsQuorumClient,
|
|
413
|
+
ephemeralKeypair,
|
|
414
|
+
allowanceVoucherWithSig,
|
|
334
415
|
lhsHandle,
|
|
335
416
|
op,
|
|
336
417
|
rhsPlaintext,
|
|
@@ -351,24 +432,24 @@ class Lightning {
|
|
|
351
432
|
* ```
|
|
352
433
|
*/
|
|
353
434
|
attestedReveal(handles, backoffConfig) {
|
|
354
|
-
return (0,
|
|
435
|
+
return (0, attested_decrypt_js_1.attestedDecrypt)({
|
|
355
436
|
handles,
|
|
356
437
|
backoffConfig,
|
|
357
438
|
chainId: Number(this.chainId),
|
|
358
|
-
|
|
439
|
+
kmsQuorumClient: this.kmsQuorumClient,
|
|
359
440
|
});
|
|
360
441
|
}
|
|
361
442
|
/**
|
|
362
443
|
* Get the GRPC endpoint for the covalidator that services this deployment.
|
|
363
444
|
*/
|
|
364
|
-
static
|
|
445
|
+
static getCovalidatorUrls(deployment, threshold) {
|
|
365
446
|
const { executorAddress, chainId, pepper } = deployment;
|
|
366
|
-
return `https://${executorAddress.toLowerCase()}.${chainId}.${pepper}.inco.org
|
|
447
|
+
return Array.from({ length: threshold }, (_, i) => `https://${executorAddress.toLowerCase()}.${chainId}.${pepper}.${i + 1}.inco.org`);
|
|
367
448
|
}
|
|
368
449
|
static isIdByName(id) {
|
|
369
450
|
return id.name !== undefined;
|
|
370
451
|
}
|
|
371
|
-
static plaintextFromValue(value) {
|
|
452
|
+
static plaintextFromValue(value, type) {
|
|
372
453
|
if (typeof value === 'boolean') {
|
|
373
454
|
return {
|
|
374
455
|
scheme: index_js_1.encryptionSchemes.ecies,
|
|
@@ -379,7 +460,7 @@ class Lightning {
|
|
|
379
460
|
else if (typeof value === 'bigint' || typeof value === 'number') {
|
|
380
461
|
return {
|
|
381
462
|
scheme: index_js_1.encryptionSchemes.ecies,
|
|
382
|
-
type: handle_js_1.handleTypes.euint256,
|
|
463
|
+
type: type ?? handle_js_1.handleTypes.euint256,
|
|
383
464
|
value: BigInt(value),
|
|
384
465
|
};
|
|
385
466
|
}
|
|
@@ -387,6 +468,70 @@ class Lightning {
|
|
|
387
468
|
throw new Error(`Unsupported type ${typeof value}`);
|
|
388
469
|
}
|
|
389
470
|
}
|
|
471
|
+
static async getEciesPublicKey(client, executorAddress) {
|
|
472
|
+
const incoVerifier = await Lightning.getIncoVerifierContract(client, executorAddress);
|
|
473
|
+
return await incoVerifier.read.eciesPubkey();
|
|
474
|
+
}
|
|
475
|
+
static async getIncoVerifierContract(client, executorAddress) {
|
|
476
|
+
const incoLightningContract = (0, viem_1.getContract)({
|
|
477
|
+
abi: lightning_js_1.incoLightningAbi,
|
|
478
|
+
address: executorAddress,
|
|
479
|
+
client,
|
|
480
|
+
});
|
|
481
|
+
const incoVerifierAddress = await incoLightningContract.read.incoVerifier();
|
|
482
|
+
const incoVerifier = (0, viem_1.getContract)({
|
|
483
|
+
abi: verifier_js_1.incoVerifierAbi,
|
|
484
|
+
address: incoVerifierAddress,
|
|
485
|
+
client,
|
|
486
|
+
});
|
|
487
|
+
console.log('inco executor', incoLightningContract.address);
|
|
488
|
+
console.log('inco verifier', incoVerifier.address);
|
|
489
|
+
return incoVerifier;
|
|
490
|
+
}
|
|
491
|
+
/**
|
|
492
|
+
* Retrieves the verifier contract details including threshold, signers, and ECIES public key from the Inco Verifier contract.
|
|
493
|
+
*
|
|
494
|
+
* @param executorAddress The address of the Inco Lightning executor contract.
|
|
495
|
+
* @param client The public client to interact with the blockchain.
|
|
496
|
+
* @returns An object containing the threshold, signers, and ECIES public key.
|
|
497
|
+
*/
|
|
498
|
+
static async getVerifierContractDetails(executorAddress, client) {
|
|
499
|
+
const incoVerifier = await Lightning.getIncoVerifierContract(client, executorAddress);
|
|
500
|
+
const threshold = await incoVerifier.read.getThreshold();
|
|
501
|
+
const eciesPubKey = await incoVerifier.read.eciesPubkey();
|
|
502
|
+
const signersCount = await incoVerifier.read.getSignersCount();
|
|
503
|
+
const signersPromises = [];
|
|
504
|
+
for (let i = BigInt(0); i < signersCount; i++) {
|
|
505
|
+
signersPromises.push(incoVerifier.read.getSignerAtIndex([i]));
|
|
506
|
+
}
|
|
507
|
+
const signers = await Promise.all(signersPromises);
|
|
508
|
+
return {
|
|
509
|
+
threshold: Number(threshold),
|
|
510
|
+
signers: signers.map(binary_js_1.parseAddress),
|
|
511
|
+
eciesPubKey,
|
|
512
|
+
};
|
|
513
|
+
}
|
|
514
|
+
static async getChainConfig(deployment, client) {
|
|
515
|
+
if (this.supportsThresholdRetrieval(deployment)) {
|
|
516
|
+
return await this.getVerifierContractDetails(deployment.executorAddress, client);
|
|
517
|
+
}
|
|
518
|
+
return this.getDefaultThresholdAndSigners();
|
|
519
|
+
}
|
|
520
|
+
// Check if the deployment supports threshold retrieval based on its version
|
|
521
|
+
static supportsThresholdRetrieval(deployment) {
|
|
522
|
+
// Assumes that the threshold retrieval is supported if the smart contract / deployment version is greater than or equal to 1.1.0
|
|
523
|
+
return deployment.version?.major >= 1 && deployment.version?.minor >= 1;
|
|
524
|
+
}
|
|
525
|
+
// NOTE: we are proceeding with lot's of state braking changes and the defaults below can be removed
|
|
526
|
+
// once all deployments support threshold. signers and ecies pub key retrieval
|
|
527
|
+
// For now this is added to ensure that the tests that we have using previous deployments continue to work
|
|
528
|
+
static getDefaultThresholdAndSigners() {
|
|
529
|
+
return {
|
|
530
|
+
threshold: 1,
|
|
531
|
+
signers: [viem_1.zeroAddress],
|
|
532
|
+
eciesPubKey: ecies_js_1.TEST_ECIES_PUB_KEY,
|
|
533
|
+
};
|
|
534
|
+
}
|
|
390
535
|
}
|
|
391
536
|
exports.Lightning = Lightning;
|
|
392
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRuaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpdGUvbGlnaHRuaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLGtDQUFrQztBQUNsQywrQkFRYztBQUNkLHdDQUEwQztBQUMxQyxrRUFNdUM7QUFFdkMsZ0ZBQXlFO0FBRXpFLGdGQUF5RTtBQUV6RSw2RUFBc0U7QUFDdEUsNENBQWdFO0FBRWhFLHFEQU1nQztBQUNoQyxpRUFBa0U7QUFDbEUsK0RBQWdFO0FBRWhFLDREQUFpRTtBQUNqRSw4REFBc0U7QUFDdEUsNENBQTJDO0FBQzNDLGdEQUFnRTtBQUdoRSw0Q0FBcUM7QUFDckMseUNBS29CO0FBQ3BCLGlEQUFtRTtBQTZCbkUsTUFBTSxhQUFhLEdBQW9CLFNBQVMsQ0FBQztBQXlCakQ7OztHQUdHO0FBQ0gsTUFBYSxTQUFTO0lBUUQ7SUFDRDtJQVJGLGVBQWUsQ0FBVTtJQUN6QixPQUFPLENBQVM7SUFFZixnQkFBZ0IsQ0FBbUI7SUFDbkMsU0FBUyxDQUE0QjtJQUV0RCxZQUNtQixXQUFjLEVBQ2YsY0FBc0I7UUFEckIsZ0JBQVcsR0FBWCxXQUFXLENBQUc7UUFDZixtQkFBYyxHQUFkLGNBQWMsQ0FBUTtRQUV0QyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUEsd0JBQVksRUFBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTNDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFBLG1DQUF3QixHQUFFLENBQUM7UUFDbkQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFBLDJCQUFZLEVBQUMsY0FBYyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxrQkFBa0I7UUFDN0IsT0FBTyxNQUFNLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FB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
|
|
537
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRuaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpdGUvbGlnaHRuaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQVljO0FBQ2Qsd0NBQTBDO0FBQzFDLGtFQUt1QztBQUV2QyxnRkFBbUc7QUFFbkcsZ0ZBQXlFO0FBS3pFLDRDQUFnRTtBQUVoRSxxREFNZ0M7QUFDaEMsaUVBQWtFO0FBQ2xFLCtEQUFnRTtBQUNoRSw0REFBaUU7QUFDakUsOERBQXNFO0FBQ3RFLDRDQUFvRDtBQUNwRCwwQ0FBMkM7QUFDM0MsNERBQXlEO0FBQ3pELGdEQUFnRTtBQUVoRSw0Q0FBcUM7QUFDckMseUNBTW9CO0FBNkJwQixNQUFNLGFBQWEsR0FBb0IsU0FBUyxDQUFDO0FBRWpELFNBQVMsa0JBQWtCLENBQUMsS0FBYztJQUN4QyxPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLElBQUksSUFBSSxLQUFLLENBQUM7QUFDL0QsQ0FBQztBQXdDRCxTQUFTLHdCQUF3QixDQUMvQixLQUEyRDtJQUUzRCxPQUFPLENBQ0wsQ0FBQyxDQUFDLEtBQUs7UUFDUCxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQ3pCLFVBQVUsSUFBSSxLQUFLO1FBQ25CLE9BQVEsS0FBaUMsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUNoRSxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQWEsU0FBUztJQVNEO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFaSCxlQUFlLENBQVU7SUFDekIsT0FBTyxDQUFTO0lBRWYsZ0JBQWdCLENBQW1CO0lBQ25DLGVBQWUsQ0FBa0I7SUFDakMsU0FBUyxDQUF5QjtJQUVuRCxZQUNtQixXQUFjLEVBQ2QsZUFBeUIsRUFDekIsT0FBa0IsRUFDbEIsU0FBaUIsRUFDakIsV0FBc0I7UUFKdEIsZ0JBQVcsR0FBWCxXQUFXLENBQUc7UUFDZCxvQkFBZSxHQUFmLGVBQWUs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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">;
|