@inco/js 0.1.31 → 0.1.33
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 +28 -57
- package/dist/binary.js +67 -0
- package/dist/chain.js +24 -0
- package/dist/encryption/encryption.js +98 -0
- package/dist/encryption/index.cjs +132 -123
- package/dist/encryption/index.js +2 -0
- package/dist/encryption/index.mjs +132 -123
- package/dist/fhevm/fhe-environment.js +8 -0
- package/dist/fhevm/fhevm.js +139 -0
- package/dist/fhevm/index.js +2 -0
- package/dist/fhevm/reencrypt.js +123 -0
- package/dist/fhevm/tfhe.js +324 -0
- package/dist/fhevm/types.js +26 -0
- package/dist/generated/abis/addTwo.js +59 -0
- package/dist/generated/abis/inco-fhevm.js +6242 -0
- package/dist/generated/abis/index.js +3 -0
- package/dist/generated/abis/lightning.js +12489 -0
- package/dist/generated/es/cosmos/ics23/v1/proofs_pb.js +198 -0
- package/dist/generated/es/cosmos/msg/v1/msg_pb.js +33 -0
- package/dist/generated/es/cosmos_proto/cosmos_pb.js +115 -0
- package/dist/generated/es/google/api/annotations_pb.js +27 -0
- package/dist/generated/es/google/api/http_pb.js +34 -0
- package/dist/generated/es/inco/fhe/v1/events_pb.js +21 -0
- package/dist/generated/es/inco/fhe/v1/genesis_pb.js +46 -0
- package/dist/generated/es/inco/fhe/v1/query_pb.js +108 -0
- package/dist/generated/es/inco/fhe/v1/tx_pb.js +108 -0
- package/dist/generated/es/inco/fhe/v1/types_pb.js +133 -0
- package/dist/generated/es/inco/kms/lite/v1/kms_service_pb.js +43 -0
- package/dist/generated/es/inco/kms/lite/v1/types_pb.js +44 -0
- package/dist/generated/es/inco/preflight/v1/genesis_pb.js +20 -0
- package/dist/generated/es/inco/preflight/v1/query_pb.js +38 -0
- package/dist/generated/es/inco/preflight/v1/tx_pb.js +48 -0
- package/dist/generated/es/inco/preflight/v1/types_pb.js +34 -0
- package/dist/generated/es/kms/base_pb.js +238 -0
- package/dist/generated/es/sf/ethereum/type/v2/type_pb.js +571 -0
- package/dist/generated/fhe-environments.js +15 -0
- package/dist/generated/lightning.js +399 -0
- package/dist/generated/local-node.js +8 -0
- package/dist/generated/ts/amino/amino.js +8 -0
- package/dist/generated/ts/cometbft/abci/v1/types.js +5063 -0
- package/dist/generated/ts/cometbft/crypto/v1/keys.js +105 -0
- package/dist/generated/ts/cometbft/crypto/v1/proof.js +430 -0
- package/dist/generated/ts/cometbft/types/v1/params.js +713 -0
- package/dist/generated/ts/cometbft/types/v1/validator.js +353 -0
- package/dist/generated/ts/cosmos/app/v1alpha1/module.js +218 -0
- package/dist/generated/ts/cosmos/msg/v1/msg.js +8 -0
- package/dist/generated/ts/cosmos_proto/cosmos.js +211 -0
- package/dist/generated/ts/gogoproto/gogo.js +8 -0
- package/dist/generated/ts/google/api/annotations.js +8 -0
- package/dist/generated/ts/google/api/http.js +353 -0
- package/dist/generated/ts/google/protobuf/descriptor.js +5070 -0
- package/dist/generated/ts/google/protobuf/duration.js +90 -0
- package/dist/generated/ts/google/protobuf/timestamp.js +90 -0
- package/dist/generated/ts/google/protobuf/wrappers.js +506 -0
- package/dist/generated/ts/inco/abci/v1/types.js +70 -0
- package/dist/generated/ts/inco/fhe/module/v1/module.js +63 -0
- package/dist/generated/ts/inco/fhe/v1/events.js +187 -0
- package/dist/generated/ts/inco/fhe/v1/genesis.js +711 -0
- package/dist/generated/ts/inco/fhe/v1/query.js +1391 -0
- package/dist/generated/ts/inco/fhe/v1/tx.js +1233 -0
- package/dist/generated/ts/inco/fhe/v1/types.js +985 -0
- package/dist/generated/ts/inco/originchain/module/v1/module.js +63 -0
- package/dist/generated/ts/inco/originchain/v1/abci.js +328 -0
- package/dist/generated/ts/inco/originchain/v1/events.js +213 -0
- package/dist/generated/ts/inco/originchain/v1/genesis.js +66 -0
- package/dist/generated/ts/inco/originchain/v1/query.js +277 -0
- package/dist/generated/ts/inco/originchain/v1/tx.js +137 -0
- package/dist/generated/ts/inco/originchain/v1/types.js +200 -0
- package/dist/generated/ts/inco/preflight/module/v1/module.js +63 -0
- package/dist/generated/ts/inco/preflight/v1/genesis.js +182 -0
- package/dist/generated/ts/inco/preflight/v1/query.js +256 -0
- package/dist/generated/ts/inco/preflight/v1/tx.js +445 -0
- package/dist/generated/ts/inco/preflight/v1/types.js +395 -0
- package/dist/handle.js +94 -0
- package/dist/index.cjs +140 -131
- package/dist/index.js +6 -0
- package/dist/index.mjs +140 -131
- package/dist/l1/client.js +93 -0
- package/dist/l1/index.js +3 -0
- package/dist/l1/preflight.js +39 -0
- package/dist/lite/deployments.js +17 -0
- package/dist/lite/ecies.js +124 -0
- package/dist/lite/hadu.js +36 -0
- package/dist/lite/index.cjs +186 -146
- package/dist/lite/index.js +7 -0
- package/dist/lite/index.mjs +3890 -3788
- package/dist/lite/lightning.js +179 -0
- package/dist/lite/reencrypt.d.ts +1 -0
- package/dist/lite/reencrypt.js +148 -0
- package/dist/local/index.cjs +25 -2573
- package/dist/local/index.js +2 -0
- package/dist/local/index.mjs +5352 -7837
- package/dist/local/local-node.js +24 -0
- package/dist/reencryption/eip712.js +81 -0
- package/dist/reencryption/index.cjs +132 -123
- package/dist/reencryption/index.js +3 -0
- package/dist/reencryption/index.mjs +132 -123
- package/dist/reencryption/types.js +2 -0
- package/dist/schema.js +15 -0
- package/dist/viem.d.ts +53 -52
- package/dist/viem.js +8 -0
- package/package.json +11 -48
@@ -0,0 +1,93 @@
|
|
1
|
+
import { createClient } from '@connectrpc/connect';
|
2
|
+
import { createGrpcTransport } from '@connectrpc/connect-node';
|
3
|
+
import { DirectSecp256k1HdWallet, Registry } from '@cosmjs/proto-signing';
|
4
|
+
import { defaultRegistryTypes as defaultStargateTypes, SigningStargateClient, } from '@cosmjs/stargate';
|
5
|
+
import * as fhe from '../generated/es/inco/fhe/v1/query_pb';
|
6
|
+
import * as preflight from '../generated/es/inco/preflight/v1/query_pb';
|
7
|
+
import { MsgAddCovalidator, MsgAddFheEnv } from '../generated/ts/inco/fhe/v1/tx';
|
8
|
+
import { MsgRegisterInput } from '../generated/ts/inco/preflight/v1/tx';
|
9
|
+
// We could have extracted these strings from types inside
|
10
|
+
// ../generated/es/fhe/v1/tx_pb, but it seems more readable to hardcode
|
11
|
+
// them here.
|
12
|
+
const msgRegisterInputTypeUrl = '/inco.preflight.v1.MsgRegisterInput';
|
13
|
+
const msgAddCovalidatorTypeUrl = '/inco.fhe.v1.MsgAddCovalidator';
|
14
|
+
const msgAddFheEnvTypeUrl = '/inco.fhe.v1.MsgAddFheEnv';
|
15
|
+
// The CosmJS L1 client needs a local registry to register custom types that
|
16
|
+
// are not part of the default Cosmos types (`defaultStargateTypes`). We
|
17
|
+
// hardcode them here.
|
18
|
+
//
|
19
|
+
// If we want to support more messages for strong TS typings, we need to add
|
20
|
+
// them here.
|
21
|
+
const supportedMsgs = {
|
22
|
+
[msgRegisterInputTypeUrl]: MsgRegisterInput,
|
23
|
+
[msgAddCovalidatorTypeUrl]: MsgAddCovalidator,
|
24
|
+
[msgAddFheEnvTypeUrl]: MsgAddFheEnv,
|
25
|
+
};
|
26
|
+
// The list of supported queries on the Inco L1.
|
27
|
+
//
|
28
|
+
// If we want to support more queries (e.g. Cosmos bank, staking queries), we
|
29
|
+
// need to add them here.
|
30
|
+
const supportedQueries = {
|
31
|
+
fhe,
|
32
|
+
preflight,
|
33
|
+
};
|
34
|
+
export async function createL1Wallet(mnemonic) {
|
35
|
+
return await DirectSecp256k1HdWallet.fromMnemonic(mnemonic, { prefix: 'inco' });
|
36
|
+
}
|
37
|
+
// Creates a Cosmos L1 client using CosmJS.
|
38
|
+
export async function createL1Client({ cometRpcEndpoint, grpcEndpoint, wallet, waitTimeForTxInclusion = 10_000, }) {
|
39
|
+
// Manual registry creation is required to register custom Msg types.
|
40
|
+
const registry = new Registry(defaultStargateTypes);
|
41
|
+
Object.entries(supportedMsgs).forEach(([typeUrl, message]) => {
|
42
|
+
// @ts-ignore TODO: Fix this typing issue. This was introcued in:
|
43
|
+
// https://github.com/Inco-fhevm/inco-monorepo/pull/251
|
44
|
+
registry.register(typeUrl, message);
|
45
|
+
});
|
46
|
+
// Create one shared gRPC transport for all queries.
|
47
|
+
const transport = createGrpcTransport({ baseUrl: grpcEndpoint });
|
48
|
+
const query = Object.fromEntries(Object.entries(supportedQueries).map(([k, v]) => [k, createClient(v.Query, transport)]));
|
49
|
+
const signingClient = await SigningStargateClient.connectWithSigner(cometRpcEndpoint, wallet, {
|
50
|
+
registry,
|
51
|
+
});
|
52
|
+
// We currently assume that the Inco chain has 0 fees and hardcode the default gas limit.
|
53
|
+
const defaultFee = {
|
54
|
+
amount: [{ denom: 'uinco', amount: '0' }],
|
55
|
+
gas: '1000000',
|
56
|
+
};
|
57
|
+
return {
|
58
|
+
get q() {
|
59
|
+
return query;
|
60
|
+
},
|
61
|
+
async sendTx(signerAddress, msgType, msg, fee = defaultFee) {
|
62
|
+
const msgAny = {
|
63
|
+
typeUrl: msgType,
|
64
|
+
value: msg,
|
65
|
+
};
|
66
|
+
const result = await signingClient.signAndBroadcast(signerAddress, [msgAny], fee);
|
67
|
+
if (result.code) {
|
68
|
+
throw new Error(`Error broadcasting tx: ${result.rawLog}`);
|
69
|
+
}
|
70
|
+
// Poll until the transaction is included in a block, with a maximum wait time given by config.
|
71
|
+
const startTime = Date.now();
|
72
|
+
await new Promise((resolve, reject) => {
|
73
|
+
const interval = setInterval(async () => {
|
74
|
+
const tx = await signingClient.getTx(result.transactionHash);
|
75
|
+
if (tx?.code) {
|
76
|
+
clearInterval(interval);
|
77
|
+
reject(new Error(`Transaction failed: ${JSON.stringify(tx)}`));
|
78
|
+
}
|
79
|
+
else if (tx?.height) {
|
80
|
+
clearInterval(interval);
|
81
|
+
resolve();
|
82
|
+
}
|
83
|
+
else if (Date.now() - startTime > waitTimeForTxInclusion) {
|
84
|
+
clearInterval(interval);
|
85
|
+
reject(new Error('Transaction polling timed out'));
|
86
|
+
}
|
87
|
+
}, 1000);
|
88
|
+
});
|
89
|
+
return result;
|
90
|
+
},
|
91
|
+
};
|
92
|
+
}
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2wxL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFFBQVEsRUFBc0IsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RixPQUFPLEVBQ0wsb0JBQW9CLElBQUksb0JBQW9CLEVBRTVDLHFCQUFxQixHQUV0QixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sS0FBSyxHQUFHLE1BQU0sc0NBQXNDLENBQUM7QUFDNUQsT0FBTyxLQUFLLFNBQVMsTUFBTSw0Q0FBNEMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakYsT0FBTyxFQUFjLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFlcEYsMERBQTBEO0FBQzFELHVFQUF1RTtBQUN2RSxhQUFhO0FBQ2IsTUFBTSx1QkFBdUIsR0FBRyxxQ0FBcUMsQ0FBQztBQUN0RSxNQUFNLHdCQUF3QixHQUFHLGdDQUFnQyxDQUFDO0FBQ2xFLE1BQU0sbUJBQW1CLEdBQUcsMkJBQTJCLENBQUM7QUFFeEQsNEVBQTRFO0FBQzVFLHdFQUF3RTtBQUN4RSxzQkFBc0I7QUFDdEIsRUFBRTtBQUNGLDRFQUE0RTtBQUM1RSxhQUFhO0FBQ2IsTUFBTSxhQUFhLEdBQUc7SUFDcEIsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLGdCQUFnQjtJQUMzQyxDQUFDLHdCQUF3QixDQUFDLEVBQUUsaUJBQWlCO0lBQzdDLENBQUMsbUJBQW1CLENBQUMsRUFBRSxZQUFZO0NBQ3BDLENBQUM7QUFNRixnREFBZ0Q7QUFDaEQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSx5QkFBeUI7QUFDekIs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
|
package/dist/l1/index.js
ADDED
@@ -0,0 +1,3 @@
|
|
1
|
+
export * from './client';
|
2
|
+
export * from './preflight';
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbDEvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxhQUFhLENBQUMifQ==
|
@@ -0,0 +1,39 @@
|
|
1
|
+
import { Schema } from 'effect';
|
2
|
+
import { Bytes32, bytesFromHexString } from '../binary';
|
3
|
+
import { MsgRegisterInput } from '../generated/ts/inco/preflight/v1/tx';
|
4
|
+
import { computeHandle } from '../handle';
|
5
|
+
import { parse } from '../schema';
|
6
|
+
import { createL1Client } from './client';
|
7
|
+
// Do not export this value, only allow parsing of Handle to happen here
|
8
|
+
const Handle = Bytes32.pipe(Schema.brand('Handle'));
|
9
|
+
// Sends a preflight input to the Cosmos L1 chain using CosmJS.
|
10
|
+
export async function cosmJSPreflight({ cometRpcEndpoint, grpcEndpoint, wallet, signerAddress, }) {
|
11
|
+
const l1Client = await createL1Client({ cometRpcEndpoint, wallet, grpcEndpoint });
|
12
|
+
return {
|
13
|
+
async send({ prehandle, ciphertext, context }) {
|
14
|
+
const msg = MsgRegisterInput.create({
|
15
|
+
prehandle: Buffer.from(prehandle.replace(/^0x/, ''), 'hex'),
|
16
|
+
signer: signerAddress,
|
17
|
+
ciphertext: Buffer.from(ciphertext.value, 'hex'),
|
18
|
+
context: {
|
19
|
+
ownerAddr: context.userAddress.replace(/^0x/, ''),
|
20
|
+
contractAddr: context.contractAddress.replace(/^0x/, ''),
|
21
|
+
// We decided to put the ACL address in the keyset ID field.
|
22
|
+
keysetId: context.aclAddress.replace(/^0x/, ''),
|
23
|
+
hostChainId: 'evm/' + context.hostChainId,
|
24
|
+
},
|
25
|
+
});
|
26
|
+
// There are some hidden dependencies needed to make the following line work:
|
27
|
+
//
|
28
|
+
// 1. The signer must have an account on the chain. In Cosmos, this is
|
29
|
+
// usually done by sending some tokens to the account. However, since the
|
30
|
+
// fees are 0, this account doesn't need to have any tokens.
|
31
|
+
// 2. The FheEnv must have been created in the on-chain registry. Only the
|
32
|
+
// council can add new FheEnvs to the registry.
|
33
|
+
const result = await l1Client.sendTx(signerAddress, '/inco.preflight.v1.MsgRegisterInput', msg);
|
34
|
+
const handle = computeHandle({ prehandle: bytesFromHexString(prehandle), context });
|
35
|
+
return { transactionHash: result.transactionHash, handle: parse(Handle, handle) };
|
36
|
+
},
|
37
|
+
};
|
38
|
+
}
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlZmxpZ2h0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2wxL3ByZWZsaWdodC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMxQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxjQUFjLEVBQXFCLE1BQU0sVUFBVSxDQUFDO0FBRTdELHdFQUF3RTtBQUN4RSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQXNCcEQsK0RBQStEO0FBQy9ELE1BQU0sQ0FBQyxLQUFLLFVBQVUsZUFBZSxDQUFDLEVBQ3BDLGdCQUFnQixFQUNoQixZQUFZLEVBQ1osTUFBTSxFQUNOLGFBQWEsR0FDNEI7SUFDekMsTUFBTSxRQUFRLEdBQUcsTUFBTSxjQUFjLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUVsRixPQUFPO1FBQ0wsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFvQjtZQUM3RCxNQUFNLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7Z0JBQ2xDLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQztnQkFDM0QsTUFBTSxFQUFFLGFBQWE7Z0JBQ3JCLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDO2dCQUNoRCxPQUFPLEVBQUU7b0JBQ1AsU0FBUyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7b0JBQ2pELFlBQVksRUFBRSxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO29CQUN4RCw0REFBNEQ7b0JBQzVELFFBQVEsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO29CQUMvQyxXQUFXLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxXQUFXO2lCQUMxQzthQUNGLENBQUMsQ0FBQztZQUVILDZFQUE2RTtZQUM3RSxFQUFFO1lBQ0Ysc0VBQXNFO1lBQ3RFLHlFQUF5RTtZQUN6RSw0REFBNEQ7WUFDNUQsMEVBQTBFO1lBQzFFLCtDQUErQztZQUMvQyxNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLHFDQUFxQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBRWhHLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3BGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLGVBQWUsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3BGLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyJ9
|
@@ -0,0 +1,17 @@
|
|
1
|
+
// Avoid inporting any other dependencies in this file to avoid serialisation issues downstream in infracto
|
2
|
+
import { getSupportedChain } from '../chain';
|
3
|
+
import { lightningDeployments } from '../generated/lightning';
|
4
|
+
export function getActiveLightningDeployment(chain) {
|
5
|
+
const supportedChain = getSupportedChain(chain);
|
6
|
+
const deployments = lightningDeployments.filter((d) => d.chainId === supportedChain.id);
|
7
|
+
if (!deployments?.length) {
|
8
|
+
throw new Error(`No deployments found for chain ${chain}`);
|
9
|
+
}
|
10
|
+
return deployments[0];
|
11
|
+
}
|
12
|
+
export function getLightningDeployments(chainId) {
|
13
|
+
const supportedChain = getSupportedChain(chainId);
|
14
|
+
const deployments = lightningDeployments.filter((d) => d.chainId === supportedChain.id);
|
15
|
+
return deployments ?? [];
|
16
|
+
}
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95bWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGl0ZS9kZXBsb3ltZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyR0FBMkc7QUFDM0csT0FBTyxFQUFZLGlCQUFpQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBTzlELE1BQU0sVUFBVSw0QkFBNEIsQ0FBQyxLQUFlO0lBQzFELE1BQU0sY0FBYyxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hELE1BQU0sV0FBVyxHQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDeEYsSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFDRCxPQUFPLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixDQUFDO0FBRUQsTUFBTSxVQUFVLHVCQUF1QixDQUFDLE9BQWlCO0lBQ3ZELE1BQU0sY0FBYyxHQUFHLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELE1BQU0sV0FBVyxHQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDeEYsT0FBTyxXQUFXLElBQUksRUFBRSxDQUFDO0FBQzNCLENBQUMifQ==
|
@@ -0,0 +1,124 @@
|
|
1
|
+
import { decrypt as eciesDecrypt, encrypt as eciesEncrypt } from 'ecies-geth';
|
2
|
+
import { ec } from 'elliptic';
|
3
|
+
import { asBytes32, bytes32ToBigint, bytesFromHexString, bytesToHex } from '../binary';
|
4
|
+
import { bigintToPlaintext, ciphertextEnvelopes, encryptionSchemes, getEncryptionSchemeName, } from '../encryption/encryption';
|
5
|
+
import { computeHandle, computePrehandle } from '../handle';
|
6
|
+
import { decodeInput, encodeInput } from './hadu';
|
7
|
+
const secp256k1 = new ec('secp256k1');
|
8
|
+
// Convert an ec.KeyPair from the 'elliptic' package (assumed to have geen generated
|
9
|
+
// with the secp256k1 curve) to our Secp256k1Keypair type.
|
10
|
+
export function toSecp256k1Keypair(kp) {
|
11
|
+
return {
|
12
|
+
scheme: encryptionSchemes.ecies,
|
13
|
+
kp,
|
14
|
+
encodePublicKey() {
|
15
|
+
return new Uint8Array(kp.getPublic().encode('array', false));
|
16
|
+
},
|
17
|
+
};
|
18
|
+
}
|
19
|
+
// Generate a new ephemeral keypair for reencryption.
|
20
|
+
export function generateSecp256k1Keypair() {
|
21
|
+
return toSecp256k1Keypair(secp256k1.genKeyPair());
|
22
|
+
}
|
23
|
+
// EncodePublicKey encodes an ECIES public key it's 33-byte compressed form.
|
24
|
+
export function encodeSecp256k1PublicKey(pub) {
|
25
|
+
return new Uint8Array(pub.encodeCompressed('array'));
|
26
|
+
}
|
27
|
+
// DecodeSecp256k1PublicKey decodes a 33-byte compressed ECIES public key.
|
28
|
+
export function decodeSecp256k1PublicKey(pubKeyCompressed) {
|
29
|
+
return secp256k1.keyFromPublic(pubKeyCompressed, 'array').getPublic();
|
30
|
+
}
|
31
|
+
// DecodeSecp256k1PrivateKey returns a ECIES secp256k1 private key based on the provided byte slice which is
|
32
|
+
// interpreted as an unsigned 256-bit big-endian integer in the range [0, N-1],
|
33
|
+
// where N is the order of the curve.
|
34
|
+
// where N is the order of the curve.
|
35
|
+
//
|
36
|
+
// WARNING: This means passing a slice with more than 32 bytes is truncated and
|
37
|
+
// that truncated value is reduced modulo N. Further, 0 is not a valid private
|
38
|
+
// key. It is up to the caller to provide a value in the appropriate range of
|
39
|
+
// [1, N-1]. Failure to do so will either result in an invalid private key or
|
40
|
+
// potentially weak private keys that have bias that could be exploited.
|
41
|
+
//
|
42
|
+
// This function primarily exists to provide a mechanism for converting
|
43
|
+
// serialized private keys that are already known to be good.
|
44
|
+
//
|
45
|
+
// For more info, refer to the decred/dcrd documentation:
|
46
|
+
// ref: https://pkg.go.dev/github.com/decred/dcrd/dcrec/secp256k1/v4@v4.2.0#PrivKeyFromBytes
|
47
|
+
//
|
48
|
+
// We don't include any curve parameters or ECIES params, as they are assumed to
|
49
|
+
// be the ones in ecies.ECIES_AES128_SHA256 from go-ethereum.
|
50
|
+
// ref: https://github.com/ethereum/go-ethereum/blob/v1.15.0/crypto/ecies/params.go#L76-L82
|
51
|
+
export function decodeSecp256k1PrivateKey(privKey) {
|
52
|
+
return toSecp256k1Keypair(secp256k1.keyFromPrivate(privKey, 'array'));
|
53
|
+
}
|
54
|
+
// Given a (usually 3rd-party known) public key, called `pubKeyA`, and an ephemeral
|
55
|
+
// private key (usually generated locally), called `privKeyB`, encrypt the `msg`
|
56
|
+
// using ECIES, with geth's parameters:
|
57
|
+
// ref: https://github.com/ethereum/go-ethereum/blob/v1.15.2/crypto/ecies/ecies.go
|
58
|
+
export async function encrypt(pubKeyA, plaintext, privKeyB) {
|
59
|
+
const pubKeyABuffer = Buffer.from(pubKeyA.encode('array', false));
|
60
|
+
const privKeyBBuffer = privKeyB.kp.getPrivate().toArrayLike(Buffer, 'be', 32);
|
61
|
+
const ct = await eciesEncrypt(pubKeyABuffer, Buffer.from(plaintext), {
|
62
|
+
ephemPrivateKey: privKeyBBuffer,
|
63
|
+
});
|
64
|
+
return new Uint8Array(ct);
|
65
|
+
}
|
66
|
+
export function getEciesEncryptor({ pubKeyA, privKeyB }) {
|
67
|
+
const pubKeyABuffer = Buffer.from(pubKeyA.encode('array', false));
|
68
|
+
const privKeyBBuffer = privKeyB.kp.getPrivate().toArrayLike(Buffer, 'be', 32);
|
69
|
+
return async ({ plaintext, context, }) => {
|
70
|
+
if (plaintext.scheme !== encryptionSchemes.ecies) {
|
71
|
+
throw new Error(`Plaintext with scheme ${getEncryptionSchemeName(plaintext.scheme)} cannot be encrypted with ECIES`);
|
72
|
+
}
|
73
|
+
const ptBuf = Buffer.from(encodeInput({ plaintext, context }));
|
74
|
+
const ct = await eciesEncrypt(pubKeyABuffer, ptBuf, {
|
75
|
+
ephemPrivateKey: privKeyBBuffer,
|
76
|
+
});
|
77
|
+
const prehandle = computePrehandle({
|
78
|
+
ciphertext: ct,
|
79
|
+
handleType: plaintext.type,
|
80
|
+
indexHandle: 0,
|
81
|
+
handleVersion: 0,
|
82
|
+
});
|
83
|
+
const handle = computeHandle({
|
84
|
+
prehandle,
|
85
|
+
context: context,
|
86
|
+
});
|
87
|
+
return {
|
88
|
+
prehandle: asBytes32(prehandle),
|
89
|
+
handle: asBytes32(handle),
|
90
|
+
context,
|
91
|
+
ciphertext: {
|
92
|
+
scheme: encryptionSchemes.ecies,
|
93
|
+
type: plaintext.type,
|
94
|
+
value: bytesToHex(ct),
|
95
|
+
},
|
96
|
+
};
|
97
|
+
};
|
98
|
+
}
|
99
|
+
// Given an ephemeral private key, called `privKeyA`, and a ciphertext `ct`,
|
100
|
+
// decrypt the ciphertext using ECIES, with geth's parameters:
|
101
|
+
// ref: https://github.com/ethereum/go-ethereum/blob/v1.15.2/crypto/ecies/ecies.go
|
102
|
+
export async function decrypt(privKeyA, ciphertext) {
|
103
|
+
const privKeyABuffer = privKeyA.kp.getPrivate().toArrayLike(Buffer, 'be', 32);
|
104
|
+
const pt = await eciesDecrypt(privKeyABuffer, Buffer.from(ciphertext));
|
105
|
+
return new Uint8Array(pt);
|
106
|
+
}
|
107
|
+
export function getEciesDecryptor({ privKeyA }) {
|
108
|
+
const privKeyABuffer = privKeyA.kp.getPrivate().toArrayLike(Buffer, 'be', 32);
|
109
|
+
return async ({ scheme, type, value, envelope, }) => {
|
110
|
+
if (scheme !== encryptionSchemes.ecies) {
|
111
|
+
throw new Error(`Ciphertext with scheme ${getEncryptionSchemeName(scheme)} cannot be decrypted with ECIES`);
|
112
|
+
}
|
113
|
+
const ptBuf = await eciesDecrypt(privKeyABuffer, bytesFromHexString(value));
|
114
|
+
// If envelope field is omitted then assume HADU, only with an explicit none envelope do we assume a raw byte
|
115
|
+
// encoding as would be performed by the compute server
|
116
|
+
if (envelope === ciphertextEnvelopes.none) {
|
117
|
+
const bigPt = bytes32ToBigint(Buffer.from(ptBuf).toString('hex'));
|
118
|
+
return bigintToPlaintext(scheme, type, bigPt);
|
119
|
+
}
|
120
|
+
const { plaintext } = decodeInput(ptBuf.toString());
|
121
|
+
return plaintext;
|
122
|
+
};
|
123
|
+
}
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGl0ZS9lY2llcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxJQUFJLFlBQVksRUFBRSxPQUFPLElBQUksWUFBWSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzlFLE9BQU8sRUFBUyxFQUFFLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDckMsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3ZGLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsbUJBQW1CLEVBSW5CLGlCQUFpQixFQUdqQix1QkFBdUIsR0FJeEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTVELE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRWxELE1BQU0sU0FBUyxHQUFHLElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBVXRDLG9GQUFvRjtBQUNwRiwwREFBMEQ7QUFDMUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEVBQWM7SUFDL0MsT0FBTztRQUNMLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxLQUFLO1FBQy9CLEVBQUU7UUFDRixlQUFlO1lBQ2IsT0FBTyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQy9ELENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELHFEQUFxRDtBQUNyRCxNQUFNLFVBQVUsd0JBQXdCO0lBQ3RDLE9BQU8sa0JBQWtCLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFDcEQsQ0FBQztBQUVELDRFQUE0RTtBQUM1RSxNQUFNLFVB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
|
@@ -0,0 +1,36 @@
|
|
1
|
+
import { Schema } from 'effect';
|
2
|
+
import { parseJson } from 'effect/Schema';
|
3
|
+
import { Bytes32 } from '../binary';
|
4
|
+
import { bytes32ToPlaintext, EncryptionScheme, plaintextToBytes32, SupportedFheType, } from '../encryption';
|
5
|
+
import { InputContext } from '../handle';
|
6
|
+
// HADU stands for "Host Chain, ACL, DApp, and User" it maps to the InputContext type where the aclAddress
|
7
|
+
// may actually be the singular IncoLite contract which embeds its own ACL
|
8
|
+
export const encryptionEnvelopes = {
|
9
|
+
none: 0,
|
10
|
+
hadu: 1,
|
11
|
+
};
|
12
|
+
export const EncryptionEnvelope = Schema.Literal(...Object.values(encryptionEnvelopes));
|
13
|
+
export const HaduInput = parseJson(Schema.Struct({
|
14
|
+
envelope: Schema.Literal(encryptionEnvelopes.hadu),
|
15
|
+
scheme: EncryptionScheme,
|
16
|
+
context: InputContext,
|
17
|
+
plaintext: Bytes32,
|
18
|
+
type: SupportedFheType,
|
19
|
+
}));
|
20
|
+
export function encodeInput({ plaintext, context }) {
|
21
|
+
return Schema.encodeSync(HaduInput)({
|
22
|
+
envelope: encryptionEnvelopes.hadu,
|
23
|
+
scheme: plaintext.scheme,
|
24
|
+
type: plaintext.type,
|
25
|
+
plaintext: plaintextToBytes32(plaintext),
|
26
|
+
context,
|
27
|
+
});
|
28
|
+
}
|
29
|
+
export function decodeInput(json) {
|
30
|
+
const { scheme, context, plaintext, type } = Schema.decodeSync(HaduInput)(json);
|
31
|
+
return {
|
32
|
+
plaintext: bytes32ToPlaintext(plaintext, scheme, type),
|
33
|
+
context,
|
34
|
+
};
|
35
|
+
}
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFkdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXRlL2hhZHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNoQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBRWxCLGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXpDLDBHQUEwRztBQUMxRywwRUFBMEU7QUFFMUUsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUc7SUFDakMsSUFBSSxFQUFFLENBQUM7SUFDUCxJQUFJLEVBQUUsQ0FBQztDQUNDLENBQUM7QUFLWCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7QUFFeEYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FDaEMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNaLFFBQVEsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQztJQUNsRCxNQUFNLEVBQUUsZ0JBQWdCO0lBQ3hCLE9BQU8sRUFBRSxZQUFZO0lBQ3JCLFNBQVMsRUFBRSxPQUFPO0lBQ2xCLElBQUksRUFBRSxnQkFBZ0I7Q0FDdkIsQ0FBQyxDQUNILENBQUM7QUFJRixNQUFNLFVBQVUsV0FBVyxDQUFDLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBd0I7SUFDdEUsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xDLFFBQVEsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJO1FBQ2xDLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTTtRQUN4QixJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUk7UUFDcEIsU0FBUyxFQUFFLGtCQUFrQixDQUFDLFNBQVMsQ0FBQztRQUN4QyxPQUFPO0tBQ1IsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsSUFBWTtJQUN0QyxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRixPQUFPO1FBQ0wsU0FBUyxFQUFFLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDO1FBQ3RELE9BQU87S0FDUixDQUFDO0FBQ0osQ0FBQyJ9
|