@inco/js 0.1.30 → 0.1.31-alpha.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/dist/binary.js +67 -0
- package/dist/binary.js.map +1 -0
- package/dist/chain.js +24 -0
- package/dist/chain.js.map +1 -0
- package/dist/encryption/encryption.js +98 -0
- package/dist/encryption/encryption.js.map +1 -0
- package/dist/encryption/index.js +2 -0
- package/dist/encryption/index.js.map +1 -0
- package/dist/fhevm/fhe-environment.js +8 -0
- package/dist/fhevm/fhe-environment.js.map +1 -0
- package/dist/fhevm/fhevm.js +139 -0
- package/dist/fhevm/fhevm.js.map +1 -0
- package/dist/fhevm/index.js +2 -0
- package/dist/fhevm/index.js.map +1 -0
- package/dist/fhevm/reencrypt.js +123 -0
- package/dist/fhevm/reencrypt.js.map +1 -0
- package/dist/fhevm/tfhe.js +324 -0
- package/dist/fhevm/tfhe.js.map +1 -0
- package/dist/fhevm/types.js +26 -0
- package/dist/fhevm/types.js.map +1 -0
- package/dist/generated/abis/addTwo.js +59 -0
- package/dist/generated/abis/addTwo.js.map +1 -0
- package/dist/generated/abis/inco-fhevm.js +6242 -0
- package/dist/generated/abis/inco-fhevm.js.map +1 -0
- package/dist/generated/abis/index.js +3 -0
- package/dist/generated/abis/index.js.map +1 -0
- package/dist/generated/abis/lightning.js +12489 -0
- package/dist/generated/abis/lightning.js.map +1 -0
- package/dist/generated/es/cosmos/ics23/v1/proofs_pb.js +198 -0
- package/dist/generated/es/cosmos/ics23/v1/proofs_pb.js.map +1 -0
- package/dist/generated/es/cosmos/msg/v1/msg_pb.js +33 -0
- package/dist/generated/es/cosmos/msg/v1/msg_pb.js.map +1 -0
- package/dist/generated/es/cosmos_proto/cosmos_pb.js +115 -0
- package/dist/generated/es/cosmos_proto/cosmos_pb.js.map +1 -0
- package/dist/generated/es/google/api/annotations_pb.js +27 -0
- package/dist/generated/es/google/api/annotations_pb.js.map +1 -0
- package/dist/generated/es/google/api/http_pb.js +34 -0
- package/dist/generated/es/google/api/http_pb.js.map +1 -0
- package/dist/generated/es/inco/fhe/v1/events_pb.js +21 -0
- package/dist/generated/es/inco/fhe/v1/events_pb.js.map +1 -0
- package/dist/generated/es/inco/fhe/v1/genesis_pb.js +46 -0
- package/dist/generated/es/inco/fhe/v1/genesis_pb.js.map +1 -0
- package/dist/generated/es/inco/fhe/v1/query_pb.js +108 -0
- package/dist/generated/es/inco/fhe/v1/query_pb.js.map +1 -0
- package/dist/generated/es/inco/fhe/v1/tx_pb.js +108 -0
- package/dist/generated/es/inco/fhe/v1/tx_pb.js.map +1 -0
- package/dist/generated/es/inco/fhe/v1/types_pb.js +133 -0
- package/dist/generated/es/inco/fhe/v1/types_pb.js.map +1 -0
- package/dist/generated/es/inco/kms/lite/v1/kms_service_pb.js +43 -0
- package/dist/generated/es/inco/kms/lite/v1/kms_service_pb.js.map +1 -0
- package/dist/generated/es/inco/kms/lite/v1/types_pb.js +44 -0
- package/dist/generated/es/inco/kms/lite/v1/types_pb.js.map +1 -0
- package/dist/generated/es/inco/preflight/v1/genesis_pb.js +20 -0
- package/dist/generated/es/inco/preflight/v1/genesis_pb.js.map +1 -0
- package/dist/generated/es/inco/preflight/v1/query_pb.js +38 -0
- package/dist/generated/es/inco/preflight/v1/query_pb.js.map +1 -0
- package/dist/generated/es/inco/preflight/v1/tx_pb.js +48 -0
- package/dist/generated/es/inco/preflight/v1/tx_pb.js.map +1 -0
- package/dist/generated/es/inco/preflight/v1/types_pb.js +34 -0
- package/dist/generated/es/inco/preflight/v1/types_pb.js.map +1 -0
- package/dist/generated/es/kms/base_pb.js +238 -0
- package/dist/generated/es/kms/base_pb.js.map +1 -0
- package/dist/generated/es/sf/ethereum/type/v2/type_pb.js +571 -0
- package/dist/generated/es/sf/ethereum/type/v2/type_pb.js.map +1 -0
- package/dist/generated/fhe-environments.js +15 -0
- package/dist/generated/fhe-environments.js.map +1 -0
- package/dist/generated/lightning.js +399 -0
- package/dist/generated/lightning.js.map +1 -0
- package/dist/generated/local-node.js +8 -0
- package/dist/generated/local-node.js.map +1 -0
- package/dist/generated/ts/amino/amino.js +8 -0
- package/dist/generated/ts/amino/amino.js.map +1 -0
- package/dist/generated/ts/cometbft/abci/v1/types.js +5063 -0
- package/dist/generated/ts/cometbft/abci/v1/types.js.map +1 -0
- package/dist/generated/ts/cometbft/crypto/v1/keys.js +105 -0
- package/dist/generated/ts/cometbft/crypto/v1/keys.js.map +1 -0
- package/dist/generated/ts/cometbft/crypto/v1/proof.js +430 -0
- package/dist/generated/ts/cometbft/crypto/v1/proof.js.map +1 -0
- package/dist/generated/ts/cometbft/types/v1/params.js +713 -0
- package/dist/generated/ts/cometbft/types/v1/params.js.map +1 -0
- package/dist/generated/ts/cometbft/types/v1/validator.js +353 -0
- package/dist/generated/ts/cometbft/types/v1/validator.js.map +1 -0
- package/dist/generated/ts/cosmos/app/v1alpha1/module.js +218 -0
- package/dist/generated/ts/cosmos/app/v1alpha1/module.js.map +1 -0
- package/dist/generated/ts/cosmos/msg/v1/msg.js +8 -0
- package/dist/generated/ts/cosmos/msg/v1/msg.js.map +1 -0
- package/dist/generated/ts/cosmos_proto/cosmos.js +211 -0
- package/dist/generated/ts/cosmos_proto/cosmos.js.map +1 -0
- package/dist/generated/ts/gogoproto/gogo.js +8 -0
- package/dist/generated/ts/gogoproto/gogo.js.map +1 -0
- package/dist/generated/ts/google/api/annotations.js +8 -0
- package/dist/generated/ts/google/api/annotations.js.map +1 -0
- package/dist/generated/ts/google/api/http.js +353 -0
- package/dist/generated/ts/google/api/http.js.map +1 -0
- package/dist/generated/ts/google/protobuf/descriptor.js +5070 -0
- package/dist/generated/ts/google/protobuf/descriptor.js.map +1 -0
- package/dist/generated/ts/google/protobuf/duration.js +90 -0
- package/dist/generated/ts/google/protobuf/duration.js.map +1 -0
- package/dist/generated/ts/google/protobuf/timestamp.js +90 -0
- package/dist/generated/ts/google/protobuf/timestamp.js.map +1 -0
- package/dist/generated/ts/google/protobuf/wrappers.js +506 -0
- package/dist/generated/ts/google/protobuf/wrappers.js.map +1 -0
- package/dist/generated/ts/inco/abci/v1/types.js +70 -0
- package/dist/generated/ts/inco/abci/v1/types.js.map +1 -0
- package/dist/generated/ts/inco/fhe/module/v1/module.js +63 -0
- package/dist/generated/ts/inco/fhe/module/v1/module.js.map +1 -0
- package/dist/generated/ts/inco/fhe/v1/events.js +187 -0
- package/dist/generated/ts/inco/fhe/v1/events.js.map +1 -0
- package/dist/generated/ts/inco/fhe/v1/genesis.js +711 -0
- package/dist/generated/ts/inco/fhe/v1/genesis.js.map +1 -0
- package/dist/generated/ts/inco/fhe/v1/query.js +1391 -0
- package/dist/generated/ts/inco/fhe/v1/query.js.map +1 -0
- package/dist/generated/ts/inco/fhe/v1/tx.js +1233 -0
- package/dist/generated/ts/inco/fhe/v1/tx.js.map +1 -0
- package/dist/generated/ts/inco/fhe/v1/types.js +985 -0
- package/dist/generated/ts/inco/fhe/v1/types.js.map +1 -0
- package/dist/generated/ts/inco/originchain/module/v1/module.js +63 -0
- package/dist/generated/ts/inco/originchain/module/v1/module.js.map +1 -0
- package/dist/generated/ts/inco/originchain/v1/abci.js +328 -0
- package/dist/generated/ts/inco/originchain/v1/abci.js.map +1 -0
- package/dist/generated/ts/inco/originchain/v1/events.js +213 -0
- package/dist/generated/ts/inco/originchain/v1/events.js.map +1 -0
- package/dist/generated/ts/inco/originchain/v1/genesis.js +66 -0
- package/dist/generated/ts/inco/originchain/v1/genesis.js.map +1 -0
- package/dist/generated/ts/inco/originchain/v1/query.js +277 -0
- package/dist/generated/ts/inco/originchain/v1/query.js.map +1 -0
- package/dist/generated/ts/inco/originchain/v1/tx.js +137 -0
- package/dist/generated/ts/inco/originchain/v1/tx.js.map +1 -0
- package/dist/generated/ts/inco/originchain/v1/types.js +200 -0
- package/dist/generated/ts/inco/originchain/v1/types.js.map +1 -0
- package/dist/generated/ts/inco/preflight/module/v1/module.js +63 -0
- package/dist/generated/ts/inco/preflight/module/v1/module.js.map +1 -0
- package/dist/generated/ts/inco/preflight/v1/genesis.js +182 -0
- package/dist/generated/ts/inco/preflight/v1/genesis.js.map +1 -0
- package/dist/generated/ts/inco/preflight/v1/query.js +256 -0
- package/dist/generated/ts/inco/preflight/v1/query.js.map +1 -0
- package/dist/generated/ts/inco/preflight/v1/tx.js +445 -0
- package/dist/generated/ts/inco/preflight/v1/tx.js.map +1 -0
- package/dist/generated/ts/inco/preflight/v1/types.js +395 -0
- package/dist/generated/ts/inco/preflight/v1/types.js.map +1 -0
- package/dist/handle.js +94 -0
- package/dist/handle.js.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/l1/client.js +93 -0
- package/dist/l1/client.js.map +1 -0
- package/dist/l1/index.js +3 -0
- package/dist/l1/index.js.map +1 -0
- package/dist/l1/preflight.js +39 -0
- package/dist/l1/preflight.js.map +1 -0
- package/dist/lite/deployments.js +17 -0
- package/dist/lite/deployments.js.map +1 -0
- package/dist/lite/ecies.js +124 -0
- package/dist/lite/ecies.js.map +1 -0
- package/dist/lite/hadu.js +36 -0
- package/dist/lite/hadu.js.map +1 -0
- package/dist/lite/index.js +7 -0
- package/dist/lite/index.js.map +1 -0
- package/dist/lite/lightning.d.ts +2 -1
- package/dist/lite/lightning.js +179 -0
- package/dist/lite/lightning.js.map +1 -0
- package/dist/lite/reencrypt.js +129 -0
- package/dist/lite/reencrypt.js.map +1 -0
- package/dist/local/index.js +2 -0
- package/dist/local/index.js.map +1 -0
- package/dist/local/local-node.js +24 -0
- package/dist/local/local-node.js.map +1 -0
- package/dist/reencryption/eip712.js +81 -0
- package/dist/reencryption/eip712.js.map +1 -0
- package/dist/reencryption/index.js +3 -0
- package/dist/reencryption/index.js.map +1 -0
- package/dist/reencryption/types.js +2 -0
- package/dist/reencryption/types.js.map +1 -0
- package/dist/schema.js +15 -0
- package/dist/schema.js.map +1 -0
- package/dist/viem.js +8 -0
- package/dist/viem.js.map +1 -0
- package/package.json +11 -47
package/dist/binary.js
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
import { ParseResult, Schema } from 'effect';
|
2
|
+
import { isHex } from 'viem';
|
3
|
+
import { parse } from './schema';
|
4
|
+
export const HexString = Schema.TemplateLiteral('0x', Schema.String);
|
5
|
+
export function bytesToBigInt(byteArray) {
|
6
|
+
// Ugly but better than bigint-buffer that insists on writing junk to stderr if it doesn't have native bindings
|
7
|
+
return !byteArray?.length ? BigInt(0) : BigInt('0x' + Buffer.from(byteArray).toString('hex'));
|
8
|
+
}
|
9
|
+
export function bufferToBigInt(buffer) {
|
10
|
+
return bytesToBigInt(Uint8Array.from(buffer));
|
11
|
+
}
|
12
|
+
// Convert a bigint to a 32-byte array, left-padded if necessary. Note: it is
|
13
|
+
// caller's responsibility to ensure that the bigint is not too large to fit in
|
14
|
+
// 32 bytes, or else the result will be truncated.
|
15
|
+
export function bigintToBytes32(value) {
|
16
|
+
return parse(Bytes32, Buffer.from(value.toString(16).padStart(64, '0'), 'hex').toString('hex'));
|
17
|
+
}
|
18
|
+
export function padLeft(bs, n) {
|
19
|
+
if (bs.length > n) {
|
20
|
+
throw new Error(`Cannot pad ${bs.length} bytes to ${n} - would truncate`);
|
21
|
+
}
|
22
|
+
const buf = Buffer.alloc(n);
|
23
|
+
buf.set(bs, n - bs.length);
|
24
|
+
return buf;
|
25
|
+
}
|
26
|
+
export function bytes32ToBigint(bs) {
|
27
|
+
const bytes32 = asBytes32(bs);
|
28
|
+
return BigInt(bytes32);
|
29
|
+
}
|
30
|
+
export function bytesFromHexString(hexString) {
|
31
|
+
return Buffer.from(hexString.startsWith('0x') ? hexString.slice(2) : hexString, 'hex');
|
32
|
+
}
|
33
|
+
export function mustBeHex(value) {
|
34
|
+
if (!isHex(value)) {
|
35
|
+
throw new Error(`Expected hex string, got: ${value}`);
|
36
|
+
}
|
37
|
+
return value;
|
38
|
+
}
|
39
|
+
export function normaliseToHex(value) {
|
40
|
+
return mustBeHex(value.startsWith('0x') ? value : `0x${value}`);
|
41
|
+
}
|
42
|
+
export function bytesToHex(bs) {
|
43
|
+
return ('0x' + Buffer.from(bs).toString('hex'));
|
44
|
+
}
|
45
|
+
const ByteArray = Schema.Object.pipe(Schema.filter((x) => x instanceof Uint8Array));
|
46
|
+
const BytesToHex = Schema.transformOrFail(Schema.Union(Schema.String, ByteArray), HexString, {
|
47
|
+
strict: true,
|
48
|
+
encode: ParseResult.succeed,
|
49
|
+
decode: (x) => x instanceof Uint8Array
|
50
|
+
? ParseResult.succeed(bytesToHex(x))
|
51
|
+
: ((y) => isHex(y)
|
52
|
+
? ParseResult.succeed(y)
|
53
|
+
: ParseResult.fail(new ParseResult.Unexpected(y, `'${y}' is not a hex string`)))(normaliseToHex(x)),
|
54
|
+
});
|
55
|
+
export const Bytes32 = BytesToHex.pipe(Schema.filter((x) => x.length === 66 ||
|
56
|
+
`Expected 32-byte hex string (66 characters with 0x prefix) but got ${x.length} character string`), Schema.brand('Bytes32'));
|
57
|
+
export function asBytes32(x) {
|
58
|
+
return parse(Bytes32, x);
|
59
|
+
}
|
60
|
+
export const Address = HexString.pipe(Schema.filter((s) => s.length === 42 || `Address must be a 20-byte '0x'-prefixed hex string, but got: ${s}`), Schema.brand('Address'));
|
61
|
+
export function parseAddress(address) {
|
62
|
+
return parse(Address, address);
|
63
|
+
}
|
64
|
+
export function parseHex(hex) {
|
65
|
+
return parse(HexString, hex);
|
66
|
+
}
|
67
|
+
//# sourceMappingURL=binary.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"binary.js","sourceRoot":"","sources":["../src/binary.ts"],"names":[],"mappings":"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"}
|
package/dist/chain.js
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
// No imports here to avoid issues with closures and modules across pulumi boundary
|
2
|
+
// This file can be seen as mirroring the functionality of viem changes without depending on it directly.
|
3
|
+
// It exists as a workaround for some very gnarly issues with code reuse between Pulumi and this module, partly
|
4
|
+
// relating to modules but also linked to Pulumi's ability to capture closures and serialise them.
|
5
|
+
export const supportedChains = {
|
6
|
+
baseSepolia: 84532,
|
7
|
+
sepolia: 11155111,
|
8
|
+
monadTestnet: 10143,
|
9
|
+
};
|
10
|
+
export const fheSupportedChains = { baseSepolia: 84532, sepolia: 11155111 };
|
11
|
+
// Get supportedChain either by its chain ID or the short name (lower pascal case)
|
12
|
+
export function getSupportedChain(chainish) {
|
13
|
+
const found = typeof chainish === 'number' || typeof chainish === 'bigint'
|
14
|
+
? Object.entries(supportedChains).find(([, id]) => id === Number(chainish))
|
15
|
+
: typeof chainish === 'object'
|
16
|
+
? Object.entries(supportedChains).find(([, id]) => id === Number(chainish.id))
|
17
|
+
: Object.entries(supportedChains).find(([shortName]) => shortName === chainish);
|
18
|
+
if (!found) {
|
19
|
+
throw new Error(`Supported chain ${JSON.stringify(chainish)} not found`);
|
20
|
+
}
|
21
|
+
const [name, id] = found;
|
22
|
+
return { name: name, id };
|
23
|
+
}
|
24
|
+
//# sourceMappingURL=chain.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"chain.js","sourceRoot":"","sources":["../src/chain.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAEnF,yGAAyG;AACzG,+GAA+G;AAC/G,kGAAkG;AAElG,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,WAAW,EAAE,KAAK;IAClB,OAAO,EAAE,QAAQ;IACjB,YAAY,EAAE,KAAK;CACX,CAAC;AAEX,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAW,CAAC;AAcrF,kFAAkF;AAClF,MAAM,UAAU,iBAAiB,CAAC,QAAkB;IAClD,MAAM,KAAK,GACT,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAC1D,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3E,CAAC,CAAC,OAAO,QAAQ,KAAK,QAAQ;YAC5B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC9E,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC;IACtF,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC3E,CAAC;IACD,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC;IACzB,OAAO,EAAE,IAAI,EAAE,IAA0B,EAAE,EAAE,EAAE,CAAC;AAClD,CAAC"}
|
@@ -0,0 +1,98 @@
|
|
1
|
+
import { Schema } from 'effect';
|
2
|
+
import { bigintToBytes32, Bytes32, HexString } from '../binary';
|
3
|
+
import { handleTypes, InputContext } from '../handle';
|
4
|
+
export const supportedFheTypes = {
|
5
|
+
euint64: handleTypes.euint64,
|
6
|
+
euint256: handleTypes.euint256,
|
7
|
+
ebool: handleTypes.ebool,
|
8
|
+
};
|
9
|
+
const supportedFheTypeNames = Object.keys(supportedFheTypes);
|
10
|
+
export const SupportedFheTypeName = Schema.Literal(...supportedFheTypeNames);
|
11
|
+
// TODO: extend to all types
|
12
|
+
export const SupportedFheType = Schema.Literal(...Object.values(supportedFheTypes));
|
13
|
+
export const encryptionSchemes = {
|
14
|
+
tfhe: 0,
|
15
|
+
ecies: 1,
|
16
|
+
cryptobox: 2,
|
17
|
+
};
|
18
|
+
export function getEncryptionSchemeName(scheme) {
|
19
|
+
switch (scheme) {
|
20
|
+
case encryptionSchemes.tfhe:
|
21
|
+
return 'TFHE';
|
22
|
+
case encryptionSchemes.ecies:
|
23
|
+
return 'ECIES';
|
24
|
+
case encryptionSchemes.cryptobox:
|
25
|
+
return 'NACLCryptoBox';
|
26
|
+
default:
|
27
|
+
throw new Error(`Unknown encryption scheme: ${scheme}`);
|
28
|
+
}
|
29
|
+
}
|
30
|
+
export const EncryptionScheme = Schema.Literal(encryptionSchemes.tfhe, encryptionSchemes.ecies, encryptionSchemes.cryptobox);
|
31
|
+
export const ciphertextEnvelopes = {
|
32
|
+
none: 0,
|
33
|
+
hadu: 1,
|
34
|
+
};
|
35
|
+
export const CiphertextEnvelope = Schema.Literal(...Object.values(ciphertextEnvelopes));
|
36
|
+
export const Ciphertext = Schema.Struct({
|
37
|
+
scheme: EncryptionScheme,
|
38
|
+
type: SupportedFheType,
|
39
|
+
value: HexString,
|
40
|
+
envelope: Schema.optional(CiphertextEnvelope),
|
41
|
+
});
|
42
|
+
export const CiphertextWithContext = Schema.Struct({
|
43
|
+
ciphertext: Ciphertext,
|
44
|
+
context: InputContext,
|
45
|
+
});
|
46
|
+
export const EncryptResult = Schema.Struct({
|
47
|
+
ciphertext: Ciphertext,
|
48
|
+
context: InputContext,
|
49
|
+
prehandle: Bytes32,
|
50
|
+
handle: Bytes32,
|
51
|
+
});
|
52
|
+
export const Plaintext = Schema.Union(Schema.Struct({
|
53
|
+
scheme: EncryptionScheme,
|
54
|
+
type: Schema.Literal(handleTypes.euint64, handleTypes.euint256),
|
55
|
+
value: Schema.BigInt,
|
56
|
+
}), Schema.Struct({
|
57
|
+
scheme: EncryptionScheme,
|
58
|
+
type: Schema.Literal(handleTypes.ebool),
|
59
|
+
value: Schema.Boolean,
|
60
|
+
}));
|
61
|
+
export const PlaintextWithContext = Schema.Struct({
|
62
|
+
plaintext: Plaintext,
|
63
|
+
context: InputContext,
|
64
|
+
});
|
65
|
+
export function bigintToPlaintext(scheme, type, bigPt) {
|
66
|
+
switch (type) {
|
67
|
+
case handleTypes.euint64:
|
68
|
+
case handleTypes.euint256:
|
69
|
+
return {
|
70
|
+
scheme,
|
71
|
+
type,
|
72
|
+
value: bigPt,
|
73
|
+
};
|
74
|
+
case handleTypes.ebool:
|
75
|
+
return {
|
76
|
+
scheme,
|
77
|
+
type,
|
78
|
+
value: bigPt !== 0n,
|
79
|
+
};
|
80
|
+
}
|
81
|
+
throw new Error(`Unsupported FHE type: ${type}`);
|
82
|
+
}
|
83
|
+
export function plaintextToBigint(plaintext) {
|
84
|
+
switch (plaintext.type) {
|
85
|
+
case handleTypes.euint64:
|
86
|
+
case handleTypes.euint256:
|
87
|
+
return plaintext.value;
|
88
|
+
case handleTypes.ebool:
|
89
|
+
return plaintext.value ? 1n : 0n;
|
90
|
+
}
|
91
|
+
}
|
92
|
+
export function plaintextToBytes32(plaintext) {
|
93
|
+
return bigintToBytes32(plaintextToBigint(plaintext));
|
94
|
+
}
|
95
|
+
export function bytes32ToPlaintext(plaintext, scheme, type) {
|
96
|
+
return bigintToPlaintext(scheme, type, BigInt(plaintext));
|
97
|
+
}
|
98
|
+
//# sourceMappingURL=encryption.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"encryption.js","sourceRoot":"","sources":["../../src/encryption/encryption.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/encryption/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
// Avoid inporting any other dependencies in this file to avoid serialisation issues downstream in infracto
|
2
|
+
import { getSupportedChain } from '../chain';
|
3
|
+
import { FHEEnvironments } from '../generated/fhe-environments';
|
4
|
+
export function getFheEnvironment(chainId) {
|
5
|
+
const supportedChain = getSupportedChain(chainId);
|
6
|
+
return FHEEnvironments[supportedChain.name];
|
7
|
+
}
|
8
|
+
//# sourceMappingURL=fhe-environment.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"fhe-environment.js","sourceRoot":"","sources":["../../src/fhevm/fhe-environment.ts"],"names":[],"mappings":"AAAA,2GAA2G;AAC3G,OAAO,EAAgC,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAahE,MAAM,UAAU,iBAAiB,CAAC,OAAiB;IACjD,MAAM,cAAc,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAClD,OAAO,eAAe,CAAC,cAAc,CAAC,IAAuC,CAAC,CAAC;AACjF,CAAC"}
|
@@ -0,0 +1,139 @@
|
|
1
|
+
import { createClient } from '@connectrpc/connect';
|
2
|
+
import { createGrpcTransport } from '@connectrpc/connect-node';
|
3
|
+
import { createPublicClient, createWalletClient, getContract, http, } from 'viem';
|
4
|
+
import { privateKeyToAccount } from 'viem/accounts';
|
5
|
+
import * as chains from 'viem/chains';
|
6
|
+
import { normaliseToHex } from '../binary';
|
7
|
+
import { gatewayContractAbi, kmsVerifierAbi } from '../generated/abis/inco-fhevm';
|
8
|
+
import { Query } from '../generated/es/inco/fhe/v1/query_pb';
|
9
|
+
import { createL1Client, createL1Wallet } from '../l1';
|
10
|
+
import { getFheEnvironment } from './fhe-environment';
|
11
|
+
// Create a public and wallet client for the given chain.
|
12
|
+
export function createPublicWalletClient({ account, hostChainRpcUrl, chain, }) {
|
13
|
+
const transport = http(hostChainRpcUrl);
|
14
|
+
const publicClient = createPublicClient({
|
15
|
+
chain,
|
16
|
+
transport,
|
17
|
+
});
|
18
|
+
// const privateKey = await shell("cast wallet private-key --account sepolia_deployer --password ''");
|
19
|
+
// const account = privateKeyToAccount(mustBeHex(privateKey));
|
20
|
+
const walletClient = createWalletClient({
|
21
|
+
chain,
|
22
|
+
transport,
|
23
|
+
account,
|
24
|
+
});
|
25
|
+
return { public: publicClient, wallet: walletClient };
|
26
|
+
}
|
27
|
+
export function getFhevmDeployerClient({ deployer, hostChainRpcUrl, chain, }) {
|
28
|
+
const viemChain = getViemChain(chain.id);
|
29
|
+
const transport = http(hostChainRpcUrl);
|
30
|
+
const publicClient = createPublicClient({
|
31
|
+
chain: viemChain,
|
32
|
+
transport,
|
33
|
+
});
|
34
|
+
// const privateKey = await shell("cast wallet private-key --account sepolia_deployer --password ''");
|
35
|
+
// const account = privateKeyToAccount(mustBeHex(privateKey));
|
36
|
+
const walletClient = createWalletClient({
|
37
|
+
chain: viemChain,
|
38
|
+
transport,
|
39
|
+
account: deployer,
|
40
|
+
});
|
41
|
+
return { public: publicClient, wallet: walletClient };
|
42
|
+
}
|
43
|
+
export async function configureFhevmContracts({ chain, hostChain: { privateKeys, rpcUrl }, }) {
|
44
|
+
const deployer = privateKeyToAccount(normaliseToHex(privateKeys.deployer));
|
45
|
+
const relayer = privateKeyToAccount(normaliseToHex(privateKeys.relayer));
|
46
|
+
const kmsSigner = privateKeyToAccount(normaliseToHex(privateKeys.kmsSigner));
|
47
|
+
console.log(`Configuring FHE environment contracts on ${chain.name} with deployer ${deployer.address}, relayer ${relayer.address}, and KMS signer ${kmsSigner.address}...`);
|
48
|
+
const client = getFhevmDeployerClient({
|
49
|
+
hostChainRpcUrl: rpcUrl,
|
50
|
+
deployer,
|
51
|
+
chain,
|
52
|
+
});
|
53
|
+
const { gatewayAddress, kmsVerifierAddress } = getFheEnvironment(chain.id);
|
54
|
+
const gateway = getContract({
|
55
|
+
address: gatewayAddress,
|
56
|
+
abi: gatewayContractAbi,
|
57
|
+
client,
|
58
|
+
});
|
59
|
+
const kmsVerifier = getContract({
|
60
|
+
address: kmsVerifierAddress,
|
61
|
+
abi: kmsVerifierAbi,
|
62
|
+
client,
|
63
|
+
});
|
64
|
+
console.log(`Adding relayer ${relayer.address}...`);
|
65
|
+
let addRelayerTxReceipt = null;
|
66
|
+
let addKmsSignerTxReceipt = null;
|
67
|
+
const ErrAlreadyRelayer = 'Address is already relayer';
|
68
|
+
try {
|
69
|
+
const addRelayerTxHash = await gateway.write.addRelayer([relayer.address]);
|
70
|
+
addRelayerTxReceipt = await client.public.waitForTransactionReceipt({
|
71
|
+
hash: addRelayerTxHash,
|
72
|
+
});
|
73
|
+
}
|
74
|
+
catch (err) {
|
75
|
+
if (!err.message.includes(ErrAlreadyRelayer)) {
|
76
|
+
throw err;
|
77
|
+
}
|
78
|
+
console.log(`Relayer ${relayer.address} already added`);
|
79
|
+
}
|
80
|
+
console.log(`Adding KMS signer ${kmsSigner.address}...`);
|
81
|
+
const ErrAlreadySigner = 'Address is already a signer';
|
82
|
+
try {
|
83
|
+
const addKmsSignerTxHash = await kmsVerifier.write.addSigner([kmsSigner.address]);
|
84
|
+
addKmsSignerTxReceipt = await client.public.waitForTransactionReceipt({
|
85
|
+
hash: addKmsSignerTxHash,
|
86
|
+
});
|
87
|
+
}
|
88
|
+
catch (err) {
|
89
|
+
if (!err.message.includes(ErrAlreadySigner)) {
|
90
|
+
throw err;
|
91
|
+
}
|
92
|
+
console.log(`KMS signer ${kmsSigner.address} already added`);
|
93
|
+
}
|
94
|
+
return { addRelayerTxReceipt, addKmsSignerTxReceipt };
|
95
|
+
}
|
96
|
+
// Attempts to ensure the given Inco L1 has the FHE environment for the given chain/ACL registered.
|
97
|
+
// based extracting from logs.
|
98
|
+
export async function ensureFheEnvironmentRegistered({ l1, chain, }) {
|
99
|
+
console.log(`Ensuring FHE environment is registered on ${l1.grpcEndpoint} ...`);
|
100
|
+
const { aclAddress } = getFheEnvironment(chain.id);
|
101
|
+
const wallet = await createL1Wallet(l1.mnemonic);
|
102
|
+
const signingClient = await createL1Client({
|
103
|
+
cometRpcEndpoint: l1.cometRpcEndpoint,
|
104
|
+
grpcEndpoint: l1.grpcEndpoint,
|
105
|
+
wallet,
|
106
|
+
});
|
107
|
+
const transport = createGrpcTransport({ baseUrl: l1.grpcEndpoint });
|
108
|
+
const queryClient = createClient(Query, transport);
|
109
|
+
const [signingAccount] = await wallet.getAccounts();
|
110
|
+
const fheEnvArg = {
|
111
|
+
keysetId: aclAddress.slice(2),
|
112
|
+
hostChainId: `evm/${chain.id}`,
|
113
|
+
accessControl: undefined,
|
114
|
+
};
|
115
|
+
const NotFoundErrorMessage = 'collections: not found';
|
116
|
+
try {
|
117
|
+
const { fheEnv } = await queryClient.fheEnv(fheEnvArg);
|
118
|
+
console.log(`FHE environment already registered on ${chain.id} using ACL ${aclAddress} : ${JSON.stringify(fheEnv)} `);
|
119
|
+
}
|
120
|
+
catch (err) {
|
121
|
+
if (String(err).includes(NotFoundErrorMessage)) {
|
122
|
+
const tx = await signingClient.sendTx(signingAccount.address, '/inco.fhe.v1.MsgAddFheEnv', {
|
123
|
+
fheEnv: fheEnvArg,
|
124
|
+
authority: signingAccount.address,
|
125
|
+
});
|
126
|
+
console.log(tx);
|
127
|
+
return;
|
128
|
+
}
|
129
|
+
throw err;
|
130
|
+
}
|
131
|
+
}
|
132
|
+
function getViemChain(chainId) {
|
133
|
+
const found = Object.values(chains).find((chain) => chain.id === chainId);
|
134
|
+
if (!found) {
|
135
|
+
throw new Error(`could not find chain with id ${chainId}`);
|
136
|
+
}
|
137
|
+
return found;
|
138
|
+
}
|
139
|
+
//# sourceMappingURL=fhevm.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"fhevm.js","sourceRoot":"","sources":["../../src/fhevm/fhevm.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fhevm/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
|
@@ -0,0 +1,123 @@
|
|
1
|
+
import { Schema } from 'effect';
|
2
|
+
import { cryptobox_get_pk, cryptobox_keygen, cryptobox_pk_to_u8vec, cryptobox_sk_to_u8vec, new_client, process_reencryption_resp_from_js, u8vec_to_cryptobox_pk, u8vec_to_cryptobox_sk, } from 'node-tkms';
|
3
|
+
import { getAddress, hexToBigInt } from 'viem';
|
4
|
+
import { bytesToBigInt, bytesToHex } from '../binary';
|
5
|
+
import { bigintToPlaintext, encryptionSchemes, } from '../encryption/encryption';
|
6
|
+
import { getHandleType } from '../handle';
|
7
|
+
import { createEIP712Payload } from '../reencryption';
|
8
|
+
import { parse } from '../schema';
|
9
|
+
// The domain constants that Zama uses for reencrypts.
|
10
|
+
const ZAMA_REENCRYPT_DOMAIN = {
|
11
|
+
name: 'Authorization token',
|
12
|
+
version: '1',
|
13
|
+
salt: undefined,
|
14
|
+
};
|
15
|
+
export async function zamaReencryptor({ chainId, gatewayUrl, walletClient, unsafeSkipVerifyKMSSignatures, contractAddress, kmsSigners, userAddress, }) {
|
16
|
+
const ephemeralKeypair = generateCryptoBoxEphemeralKeyPair();
|
17
|
+
// Sign the EIP712 attesting that the user has access to the private key
|
18
|
+
// corresponding to the ephemeral public key.
|
19
|
+
const eip712Payload = createEIP712Payload({
|
20
|
+
chainId,
|
21
|
+
primaryType: 'ReencryptionRequest',
|
22
|
+
primaryTypeFields: [{ name: 'publicKey', type: 'bytes' }],
|
23
|
+
message: {
|
24
|
+
publicKey: bytesToHex(ephemeralKeypair.encodePublicKey()),
|
25
|
+
},
|
26
|
+
domainName: ZAMA_REENCRYPT_DOMAIN.name,
|
27
|
+
domainVersion: ZAMA_REENCRYPT_DOMAIN.version,
|
28
|
+
});
|
29
|
+
// Using browser extensions, this step will prompt the user to sign the
|
30
|
+
// payload.
|
31
|
+
const eip712Signature = await walletClient.signTypedData(eip712Payload);
|
32
|
+
return async function reencrypt({ handle, }) {
|
33
|
+
const handleBigInt = hexToBigInt(handle);
|
34
|
+
const reencryptRequest = {
|
35
|
+
signature: eip712Signature.replace(/^(0x)/, ''),
|
36
|
+
client_address: getAddress(userAddress),
|
37
|
+
enc_key: bytesToHex(ephemeralKeypair.encodePublicKey()).replace(/^(0x)/, ''),
|
38
|
+
ciphertext_handle: handleBigInt.toString(16).padStart(64, '0'),
|
39
|
+
eip712_verifying_contract: getAddress(contractAddress),
|
40
|
+
};
|
41
|
+
const reencryptResponse = await makeReencryptRequest(reencryptRequest, gatewayUrl);
|
42
|
+
let pubKey;
|
43
|
+
let privKey;
|
44
|
+
try {
|
45
|
+
pubKey = u8vec_to_cryptobox_pk(ephemeralKeypair.publicKey);
|
46
|
+
privKey = u8vec_to_cryptobox_sk(ephemeralKeypair.privateKey);
|
47
|
+
}
|
48
|
+
catch (e) {
|
49
|
+
throw new Error(`Invalid public or private key: ${JSON.stringify(e)}`);
|
50
|
+
}
|
51
|
+
const client = new_client(kmsSigners, userAddress, 'default');
|
52
|
+
try {
|
53
|
+
const buffer = new ArrayBuffer(32);
|
54
|
+
const view = new DataView(buffer);
|
55
|
+
view.setUint32(28, Number(chainId), false);
|
56
|
+
const chainIdArrayBE = new Uint8Array(buffer);
|
57
|
+
// Duplicate reencryptRequest and replace ciphertext_handle with ciphertext_digest.
|
58
|
+
const { ciphertext_handle, ...p } = reencryptRequest;
|
59
|
+
// TODO (from Zama): check all ciphertext digests are all the same
|
60
|
+
const payloadForVerification = {
|
61
|
+
...p,
|
62
|
+
ciphertext_digest: reencryptResponse.response[0].ciphertext_digest,
|
63
|
+
};
|
64
|
+
const decrypted = process_reencryption_resp_from_js(client, payloadForVerification, {
|
65
|
+
name: eip712Payload.domain.name,
|
66
|
+
version: eip712Payload.domain.version,
|
67
|
+
chain_id: chainIdArrayBE,
|
68
|
+
verifying_contract: eip712Payload.domain.verifyingContract,
|
69
|
+
}, reencryptResponse.response, pubKey, privKey, !unsafeSkipVerifyKMSSignatures);
|
70
|
+
return bigintToPlaintext(encryptionSchemes.cryptobox, getHandleType(handle), bytesToBigInt(decrypted));
|
71
|
+
}
|
72
|
+
catch (e) {
|
73
|
+
console.error(e);
|
74
|
+
throw new Error(`An error occurred during decryption: ${e}`);
|
75
|
+
}
|
76
|
+
};
|
77
|
+
}
|
78
|
+
// Generate a new ephemeral keypair for reencryption.
|
79
|
+
export function generateCryptoBoxEphemeralKeyPair() {
|
80
|
+
const keypair = cryptobox_keygen();
|
81
|
+
const publicKey = cryptobox_pk_to_u8vec(cryptobox_get_pk(keypair));
|
82
|
+
return {
|
83
|
+
scheme: encryptionSchemes.cryptobox,
|
84
|
+
publicKey,
|
85
|
+
privateKey: cryptobox_sk_to_u8vec(keypair),
|
86
|
+
encodePublicKey() {
|
87
|
+
return publicKey;
|
88
|
+
},
|
89
|
+
};
|
90
|
+
}
|
91
|
+
// This is the response type of the reencrypt endpoint, defined on the
|
92
|
+
// server-side in Zama's gateway. The response field is a vector of this struct
|
93
|
+
// in Rust:
|
94
|
+
// https://github.com/zama-ai/kms-core/blob/a3b824b389e87429d04537696e28dee902a3b2d9/blockchain/events/src/kms.rs#L985-L1003
|
95
|
+
const ZamaGatewayReencryptResponse = Schema.Struct({
|
96
|
+
status: Schema.Union(Schema.Literal('success'), Schema.Literal('failure')),
|
97
|
+
response: Schema.Array(Schema.Struct({
|
98
|
+
ciphertext_digest: Schema.optional(Schema.String),
|
99
|
+
payload: Schema.String,
|
100
|
+
signature: Schema.String,
|
101
|
+
})),
|
102
|
+
});
|
103
|
+
// Make a HTTP request to the reencrypt endpoint of the gateway.
|
104
|
+
async function makeReencryptRequest(request, gatewayUrl) {
|
105
|
+
const fetchOptions = {
|
106
|
+
method: 'POST',
|
107
|
+
headers: {
|
108
|
+
'Content-Type': 'application/json',
|
109
|
+
},
|
110
|
+
body: JSON.stringify(request),
|
111
|
+
};
|
112
|
+
const response = await fetch(`${gatewayUrl}/reencrypt`, fetchOptions);
|
113
|
+
if (!response.ok) {
|
114
|
+
throw new Error(`Reencrypt failed: gateway respond with HTTP code ${response.status}: ${JSON.stringify(await response.json())}`);
|
115
|
+
}
|
116
|
+
const json = await response.json();
|
117
|
+
const reencryptResponse = parse(ZamaGatewayReencryptResponse, json);
|
118
|
+
if (reencryptResponse.status === 'failure') {
|
119
|
+
throw new Error('Reencrypt failed: gateway responded with failure');
|
120
|
+
}
|
121
|
+
return reencryptResponse;
|
122
|
+
}
|
123
|
+
//# sourceMappingURL=reencrypt.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"reencrypt.js","sourceRoot":"","sources":["../../src/fhevm/reencrypt.ts"],"names":[],"mappings":"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"}
|