@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.
Files changed (178) hide show
  1. package/dist/binary.js +67 -0
  2. package/dist/binary.js.map +1 -0
  3. package/dist/chain.js +24 -0
  4. package/dist/chain.js.map +1 -0
  5. package/dist/encryption/encryption.js +98 -0
  6. package/dist/encryption/encryption.js.map +1 -0
  7. package/dist/encryption/index.js +2 -0
  8. package/dist/encryption/index.js.map +1 -0
  9. package/dist/fhevm/fhe-environment.js +8 -0
  10. package/dist/fhevm/fhe-environment.js.map +1 -0
  11. package/dist/fhevm/fhevm.js +139 -0
  12. package/dist/fhevm/fhevm.js.map +1 -0
  13. package/dist/fhevm/index.js +2 -0
  14. package/dist/fhevm/index.js.map +1 -0
  15. package/dist/fhevm/reencrypt.js +123 -0
  16. package/dist/fhevm/reencrypt.js.map +1 -0
  17. package/dist/fhevm/tfhe.js +324 -0
  18. package/dist/fhevm/tfhe.js.map +1 -0
  19. package/dist/fhevm/types.js +26 -0
  20. package/dist/fhevm/types.js.map +1 -0
  21. package/dist/generated/abis/addTwo.js +59 -0
  22. package/dist/generated/abis/addTwo.js.map +1 -0
  23. package/dist/generated/abis/inco-fhevm.js +6242 -0
  24. package/dist/generated/abis/inco-fhevm.js.map +1 -0
  25. package/dist/generated/abis/index.js +3 -0
  26. package/dist/generated/abis/index.js.map +1 -0
  27. package/dist/generated/abis/lightning.js +12489 -0
  28. package/dist/generated/abis/lightning.js.map +1 -0
  29. package/dist/generated/es/cosmos/ics23/v1/proofs_pb.js +198 -0
  30. package/dist/generated/es/cosmos/ics23/v1/proofs_pb.js.map +1 -0
  31. package/dist/generated/es/cosmos/msg/v1/msg_pb.js +33 -0
  32. package/dist/generated/es/cosmos/msg/v1/msg_pb.js.map +1 -0
  33. package/dist/generated/es/cosmos_proto/cosmos_pb.js +115 -0
  34. package/dist/generated/es/cosmos_proto/cosmos_pb.js.map +1 -0
  35. package/dist/generated/es/google/api/annotations_pb.js +27 -0
  36. package/dist/generated/es/google/api/annotations_pb.js.map +1 -0
  37. package/dist/generated/es/google/api/http_pb.js +34 -0
  38. package/dist/generated/es/google/api/http_pb.js.map +1 -0
  39. package/dist/generated/es/inco/fhe/v1/events_pb.js +21 -0
  40. package/dist/generated/es/inco/fhe/v1/events_pb.js.map +1 -0
  41. package/dist/generated/es/inco/fhe/v1/genesis_pb.js +46 -0
  42. package/dist/generated/es/inco/fhe/v1/genesis_pb.js.map +1 -0
  43. package/dist/generated/es/inco/fhe/v1/query_pb.js +108 -0
  44. package/dist/generated/es/inco/fhe/v1/query_pb.js.map +1 -0
  45. package/dist/generated/es/inco/fhe/v1/tx_pb.js +108 -0
  46. package/dist/generated/es/inco/fhe/v1/tx_pb.js.map +1 -0
  47. package/dist/generated/es/inco/fhe/v1/types_pb.js +133 -0
  48. package/dist/generated/es/inco/fhe/v1/types_pb.js.map +1 -0
  49. package/dist/generated/es/inco/kms/lite/v1/kms_service_pb.js +43 -0
  50. package/dist/generated/es/inco/kms/lite/v1/kms_service_pb.js.map +1 -0
  51. package/dist/generated/es/inco/kms/lite/v1/types_pb.js +44 -0
  52. package/dist/generated/es/inco/kms/lite/v1/types_pb.js.map +1 -0
  53. package/dist/generated/es/inco/preflight/v1/genesis_pb.js +20 -0
  54. package/dist/generated/es/inco/preflight/v1/genesis_pb.js.map +1 -0
  55. package/dist/generated/es/inco/preflight/v1/query_pb.js +38 -0
  56. package/dist/generated/es/inco/preflight/v1/query_pb.js.map +1 -0
  57. package/dist/generated/es/inco/preflight/v1/tx_pb.js +48 -0
  58. package/dist/generated/es/inco/preflight/v1/tx_pb.js.map +1 -0
  59. package/dist/generated/es/inco/preflight/v1/types_pb.js +34 -0
  60. package/dist/generated/es/inco/preflight/v1/types_pb.js.map +1 -0
  61. package/dist/generated/es/kms/base_pb.js +238 -0
  62. package/dist/generated/es/kms/base_pb.js.map +1 -0
  63. package/dist/generated/es/sf/ethereum/type/v2/type_pb.js +571 -0
  64. package/dist/generated/es/sf/ethereum/type/v2/type_pb.js.map +1 -0
  65. package/dist/generated/fhe-environments.js +15 -0
  66. package/dist/generated/fhe-environments.js.map +1 -0
  67. package/dist/generated/lightning.js +399 -0
  68. package/dist/generated/lightning.js.map +1 -0
  69. package/dist/generated/local-node.js +8 -0
  70. package/dist/generated/local-node.js.map +1 -0
  71. package/dist/generated/ts/amino/amino.js +8 -0
  72. package/dist/generated/ts/amino/amino.js.map +1 -0
  73. package/dist/generated/ts/cometbft/abci/v1/types.js +5063 -0
  74. package/dist/generated/ts/cometbft/abci/v1/types.js.map +1 -0
  75. package/dist/generated/ts/cometbft/crypto/v1/keys.js +105 -0
  76. package/dist/generated/ts/cometbft/crypto/v1/keys.js.map +1 -0
  77. package/dist/generated/ts/cometbft/crypto/v1/proof.js +430 -0
  78. package/dist/generated/ts/cometbft/crypto/v1/proof.js.map +1 -0
  79. package/dist/generated/ts/cometbft/types/v1/params.js +713 -0
  80. package/dist/generated/ts/cometbft/types/v1/params.js.map +1 -0
  81. package/dist/generated/ts/cometbft/types/v1/validator.js +353 -0
  82. package/dist/generated/ts/cometbft/types/v1/validator.js.map +1 -0
  83. package/dist/generated/ts/cosmos/app/v1alpha1/module.js +218 -0
  84. package/dist/generated/ts/cosmos/app/v1alpha1/module.js.map +1 -0
  85. package/dist/generated/ts/cosmos/msg/v1/msg.js +8 -0
  86. package/dist/generated/ts/cosmos/msg/v1/msg.js.map +1 -0
  87. package/dist/generated/ts/cosmos_proto/cosmos.js +211 -0
  88. package/dist/generated/ts/cosmos_proto/cosmos.js.map +1 -0
  89. package/dist/generated/ts/gogoproto/gogo.js +8 -0
  90. package/dist/generated/ts/gogoproto/gogo.js.map +1 -0
  91. package/dist/generated/ts/google/api/annotations.js +8 -0
  92. package/dist/generated/ts/google/api/annotations.js.map +1 -0
  93. package/dist/generated/ts/google/api/http.js +353 -0
  94. package/dist/generated/ts/google/api/http.js.map +1 -0
  95. package/dist/generated/ts/google/protobuf/descriptor.js +5070 -0
  96. package/dist/generated/ts/google/protobuf/descriptor.js.map +1 -0
  97. package/dist/generated/ts/google/protobuf/duration.js +90 -0
  98. package/dist/generated/ts/google/protobuf/duration.js.map +1 -0
  99. package/dist/generated/ts/google/protobuf/timestamp.js +90 -0
  100. package/dist/generated/ts/google/protobuf/timestamp.js.map +1 -0
  101. package/dist/generated/ts/google/protobuf/wrappers.js +506 -0
  102. package/dist/generated/ts/google/protobuf/wrappers.js.map +1 -0
  103. package/dist/generated/ts/inco/abci/v1/types.js +70 -0
  104. package/dist/generated/ts/inco/abci/v1/types.js.map +1 -0
  105. package/dist/generated/ts/inco/fhe/module/v1/module.js +63 -0
  106. package/dist/generated/ts/inco/fhe/module/v1/module.js.map +1 -0
  107. package/dist/generated/ts/inco/fhe/v1/events.js +187 -0
  108. package/dist/generated/ts/inco/fhe/v1/events.js.map +1 -0
  109. package/dist/generated/ts/inco/fhe/v1/genesis.js +711 -0
  110. package/dist/generated/ts/inco/fhe/v1/genesis.js.map +1 -0
  111. package/dist/generated/ts/inco/fhe/v1/query.js +1391 -0
  112. package/dist/generated/ts/inco/fhe/v1/query.js.map +1 -0
  113. package/dist/generated/ts/inco/fhe/v1/tx.js +1233 -0
  114. package/dist/generated/ts/inco/fhe/v1/tx.js.map +1 -0
  115. package/dist/generated/ts/inco/fhe/v1/types.js +985 -0
  116. package/dist/generated/ts/inco/fhe/v1/types.js.map +1 -0
  117. package/dist/generated/ts/inco/originchain/module/v1/module.js +63 -0
  118. package/dist/generated/ts/inco/originchain/module/v1/module.js.map +1 -0
  119. package/dist/generated/ts/inco/originchain/v1/abci.js +328 -0
  120. package/dist/generated/ts/inco/originchain/v1/abci.js.map +1 -0
  121. package/dist/generated/ts/inco/originchain/v1/events.js +213 -0
  122. package/dist/generated/ts/inco/originchain/v1/events.js.map +1 -0
  123. package/dist/generated/ts/inco/originchain/v1/genesis.js +66 -0
  124. package/dist/generated/ts/inco/originchain/v1/genesis.js.map +1 -0
  125. package/dist/generated/ts/inco/originchain/v1/query.js +277 -0
  126. package/dist/generated/ts/inco/originchain/v1/query.js.map +1 -0
  127. package/dist/generated/ts/inco/originchain/v1/tx.js +137 -0
  128. package/dist/generated/ts/inco/originchain/v1/tx.js.map +1 -0
  129. package/dist/generated/ts/inco/originchain/v1/types.js +200 -0
  130. package/dist/generated/ts/inco/originchain/v1/types.js.map +1 -0
  131. package/dist/generated/ts/inco/preflight/module/v1/module.js +63 -0
  132. package/dist/generated/ts/inco/preflight/module/v1/module.js.map +1 -0
  133. package/dist/generated/ts/inco/preflight/v1/genesis.js +182 -0
  134. package/dist/generated/ts/inco/preflight/v1/genesis.js.map +1 -0
  135. package/dist/generated/ts/inco/preflight/v1/query.js +256 -0
  136. package/dist/generated/ts/inco/preflight/v1/query.js.map +1 -0
  137. package/dist/generated/ts/inco/preflight/v1/tx.js +445 -0
  138. package/dist/generated/ts/inco/preflight/v1/tx.js.map +1 -0
  139. package/dist/generated/ts/inco/preflight/v1/types.js +395 -0
  140. package/dist/generated/ts/inco/preflight/v1/types.js.map +1 -0
  141. package/dist/handle.js +94 -0
  142. package/dist/handle.js.map +1 -0
  143. package/dist/index.js +6 -0
  144. package/dist/index.js.map +1 -0
  145. package/dist/l1/client.js +93 -0
  146. package/dist/l1/client.js.map +1 -0
  147. package/dist/l1/index.js +3 -0
  148. package/dist/l1/index.js.map +1 -0
  149. package/dist/l1/preflight.js +39 -0
  150. package/dist/l1/preflight.js.map +1 -0
  151. package/dist/lite/deployments.js +17 -0
  152. package/dist/lite/deployments.js.map +1 -0
  153. package/dist/lite/ecies.js +124 -0
  154. package/dist/lite/ecies.js.map +1 -0
  155. package/dist/lite/hadu.js +36 -0
  156. package/dist/lite/hadu.js.map +1 -0
  157. package/dist/lite/index.js +7 -0
  158. package/dist/lite/index.js.map +1 -0
  159. package/dist/lite/lightning.d.ts +2 -1
  160. package/dist/lite/lightning.js +179 -0
  161. package/dist/lite/lightning.js.map +1 -0
  162. package/dist/lite/reencrypt.js +129 -0
  163. package/dist/lite/reencrypt.js.map +1 -0
  164. package/dist/local/index.js +2 -0
  165. package/dist/local/index.js.map +1 -0
  166. package/dist/local/local-node.js +24 -0
  167. package/dist/local/local-node.js.map +1 -0
  168. package/dist/reencryption/eip712.js +81 -0
  169. package/dist/reencryption/eip712.js.map +1 -0
  170. package/dist/reencryption/index.js +3 -0
  171. package/dist/reencryption/index.js.map +1 -0
  172. package/dist/reencryption/types.js +2 -0
  173. package/dist/reencryption/types.js.map +1 -0
  174. package/dist/schema.js +15 -0
  175. package/dist/schema.js.map +1 -0
  176. package/dist/viem.js +8 -0
  177. package/dist/viem.js.map +1 -0
  178. package/package.json +11 -47
@@ -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=preflight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/l1/preflight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAExD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,cAAc,EAAqB,MAAM,UAAU,CAAC;AAE7D,wEAAwE;AACxE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AAsBpD,+DAA+D;AAC/D,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EACpC,gBAAgB,EAChB,YAAY,EACZ,MAAM,EACN,aAAa,GAC4B;IACzC,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IAElF,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAoB;YAC7D,MAAM,GAAG,GAAG,gBAAgB,CAAC,MAAM,CAAC;gBAClC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC;gBAC3D,MAAM,EAAE,aAAa;gBACrB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;gBAChD,OAAO,EAAE;oBACP,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;oBACjD,YAAY,EAAE,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;oBACxD,4DAA4D;oBAC5D,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;oBAC/C,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW;iBAC1C;aACF,CAAC,CAAC;YAEH,6EAA6E;YAC7E,EAAE;YACF,sEAAsE;YACtE,yEAAyE;YACzE,4DAA4D;YAC5D,0EAA0E;YAC1E,+CAA+C;YAC/C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,qCAAqC,EAAE,GAAG,CAAC,CAAC;YAEhG,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,kBAAkB,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;YACpF,OAAO,EAAE,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QACpF,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -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=deployments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployments.js","sourceRoot":"","sources":["../../src/lite/deployments.ts"],"names":[],"mappings":"AAAA,2GAA2G;AAC3G,OAAO,EAAY,iBAAiB,EAAE,MAAM,UAAU,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAO9D,MAAM,UAAU,4BAA4B,CAAC,KAAe;IAC1D,MAAM,cAAc,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,cAAc,CAAC,EAAE,CAAC,CAAC;IACxF,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,kCAAkC,KAAK,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAiB;IACvD,MAAM,cAAc,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,cAAc,CAAC,EAAE,CAAC,CAAC;IACxF,OAAO,WAAW,IAAI,EAAE,CAAC;AAC3B,CAAC"}
@@ -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=ecies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecies.js","sourceRoot":"","sources":["../../src/lite/ecies.ts"],"names":[],"mappings":"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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=hadu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hadu.js","sourceRoot":"","sources":["../../src/lite/hadu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAElB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,0GAA0G;AAC1G,0EAA0E;AAE1E,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;CACC,CAAC;AAKX,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAExF,MAAM,CAAC,MAAM,SAAS,GAAG,SAAS,CAChC,MAAM,CAAC,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC;IAClD,MAAM,EAAE,gBAAgB;IACxB,OAAO,EAAE,YAAY;IACrB,SAAS,EAAE,OAAO;IAClB,IAAI,EAAE,gBAAgB;CACvB,CAAC,CACH,CAAC;AAIF,MAAM,UAAU,WAAW,CAAC,EAAE,SAAS,EAAE,OAAO,EAAwB;IACtE,OAAO,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAClC,QAAQ,EAAE,mBAAmB,CAAC,IAAI;QAClC,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,SAAS,EAAE,kBAAkB,CAAC,SAAS,CAAC;QACxC,OAAO;KACR,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC;IAChF,OAAO;QACL,SAAS,EAAE,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC;QACtD,OAAO;KACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from '../generated/abis/lightning';
2
+ export * from './deployments';
3
+ export * from './ecies';
4
+ export * from './hadu';
5
+ export * from './lightning';
6
+ export * from './reencrypt';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lite/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAE5C,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
@@ -2,6 +2,7 @@ import { Account, Chain, Transport, WalletClient } from 'viem';
2
2
  import { Address, HexString } from '../binary';
3
3
  import { EciesScheme } from '../encryption';
4
4
  import { lightningDeployments } from '../generated/lightning';
5
+ import { localNodeLightningConfig } from '../generated/local-node';
5
6
  import type { Reencryptor } from '../reencryption';
6
7
  type TupleToUnion<T> = T extends readonly unknown[] ? T[number] : never;
7
8
  type Deployment = TupleToUnion<typeof lightningDeployments>;
@@ -56,7 +57,7 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
56
57
  * See the sample docker-compose file here: https://github.com/Inco-fhevm/lightning-rod/blob/main/docker-compose.yaml
57
58
  *
58
59
  */
59
- static localNode(): Lightning;
60
+ static localNode(): Lightning<DeploymentSlice & typeof localNodeLightningConfig>;
60
61
  /**
61
62
  * Get a Lightning deployment by name or executor address on a particular chain.
62
63
  *
@@ -0,0 +1,179 @@
1
+ import { hexToBytes } from 'viem';
2
+ import { baseSepolia } from 'viem/chains';
3
+ import { HexString, parseAddress } from '../binary';
4
+ import { encryptionSchemes } from '../encryption';
5
+ import { lightningDeployments } from '../generated/lightning';
6
+ import { localNodeLightningConfig } from '../generated/local-node';
7
+ import { handleTypes } from '../handle';
8
+ import { parse } from '../schema';
9
+ import { decodeSecp256k1PublicKey, generateSecp256k1Keypair, getEciesEncryptor } from './ecies';
10
+ import { getKmsClient, incoLiteReencryptor } from './reencrypt';
11
+ /**
12
+ * The Lightning class provides a convenient way to interact with the Inco Lightning contract by binding to a specific
13
+ * deployment.
14
+ */
15
+ export class Lightning {
16
+ _deployment;
17
+ covalidatorUrl;
18
+ executorAddress;
19
+ eciesPublicKey;
20
+ chainId;
21
+ encryptor;
22
+ ephemeralKeypair;
23
+ kmsClient;
24
+ constructor(_deployment, covalidatorUrl) {
25
+ this._deployment = _deployment;
26
+ this.covalidatorUrl = covalidatorUrl;
27
+ this.executorAddress = parseAddress(_deployment.executorAddress);
28
+ this.eciesPublicKey = parse(HexString, _deployment.eciesPublicKey);
29
+ this.chainId = BigInt(_deployment.chainId);
30
+ this.ephemeralKeypair = generateSecp256k1Keypair();
31
+ this.kmsClient = getKmsClient(covalidatorUrl);
32
+ this.encryptor = getEciesEncryptor({
33
+ scheme: encryptionSchemes.ecies,
34
+ pubKeyA: decodeSecp256k1PublicKey(hexToBytes(parse(HexString, _deployment.eciesPublicKey))),
35
+ privKeyB: this.ephemeralKeypair,
36
+ });
37
+ }
38
+ /**
39
+ * Get a Lightning instance bound to the latest Lightning deployment for the Base Sepolia testnet.
40
+ */
41
+ static baseSepoliaTestnet() {
42
+ return Lightning.latest('testnet', baseSepolia.id);
43
+ }
44
+ /**
45
+ * Get a Lightning instance bound to our canonical Anvil-based test node and test Covalidator node
46
+ *
47
+ * These can be run in docker-compose using images pushed to dockerhub as:
48
+ * - inconetwork/local-node-anvil
49
+ * - inconetwork/local-node-covalidator
50
+ *
51
+ * See the sample docker-compose file here: https://github.com/Inco-fhevm/lightning-rod/blob/main/docker-compose.yaml
52
+ *
53
+ */
54
+ static localNode() {
55
+ return Lightning.custom(localNodeLightningConfig);
56
+ }
57
+ /**
58
+ * Get a Lightning deployment by name or executor address on a particular chain.
59
+ *
60
+ * @param id this is an object containing either the pair of name and chainId or the executorAddress and chainId
61
+ */
62
+ static at(id) {
63
+ const deployment = this.isIdByName(id)
64
+ ? lightningDeployments.find((d) => d.name === id.name && d.chainId === id.chainId)
65
+ : lightningDeployments.find((d) => d.executorAddress === id.executorAddress && d.chainId === id.chainId);
66
+ if (!deployment) {
67
+ throw new Error(`No deployment found for ${JSON.stringify(id)}`);
68
+ }
69
+ return new Lightning(deployment, Lightning.getCovalidatorUrl(deployment));
70
+ }
71
+ /**
72
+ * Get a Lightning deployment for a local or custom node
73
+ *
74
+ * @param config this is an object containing the executorAddress, eciesPublicKey, chainId and covalidatorUrl.
75
+ * additional fields past will be made available as part of the `deployment` property.
76
+ */
77
+ static custom(config) {
78
+ return new Lightning(config, config.covalidatorUrl);
79
+ }
80
+ /**
81
+ * Get the latest deployment for a given pepper, which usually denotes a family of deployments distinct from their
82
+ * version such as 'devnet', 'testnet', 'mainnet', etc.
83
+ *
84
+ * @param pepper the pepper to use to filter the deployments
85
+ * @param chainId the chainId to use to filter the deployments
86
+ */
87
+ static latestDeployment(pepper, chainId) {
88
+ // Deployments are sorted so we are guaranteed to get the latest first
89
+ const latestByPepper = lightningDeployments.find((d) => d.pepper === pepper && d.chainId === chainId);
90
+ if (!latestByPepper) {
91
+ // This should not actually happen provided this file compiles since we are extracting the available peppers
92
+ // from the const itself
93
+ throw new Error(`No deployment found for pepper ${pepper}`);
94
+ }
95
+ return latestByPepper;
96
+ }
97
+ /**
98
+ * Get the latest Lightning deployment for a given pepper amd chainId unconditionally.
99
+ * Note that if you upgrade the library the latest deployment may change and contracts deployed to a previous version
100
+ * will not be compatible with the new version.
101
+ *
102
+ * @param pepper the pepper to use to filter the deployments
103
+ * @param chainId the chainId to use to filter the deployments
104
+ */
105
+ static latest(pepper, chainId) {
106
+ return Lightning.at(Lightning.latestDeployment(pepper, chainId));
107
+ }
108
+ /*
109
+ * Get the latest deployment for a given pepper, which usually denotes a family of deployments distinct from their
110
+ * version such as 'devnet', 'testnet', 'mainnet', etc.
111
+ */
112
+ get deployment() {
113
+ return { ...this._deployment };
114
+ }
115
+ /**
116
+ * Encrypt a value using the public ECIES key of the Lightning deployment.
117
+ *
118
+ * @param value a boolean or numeric value to encrypt
119
+ * @param accountAddress the address of the account interacting with the dapp contract, normally an Externally Owned Account (EOA)
120
+ * @param dappAddress the address of the dapp contract that interacts with the Inco Lightning contract or library
121
+ */
122
+ async encrypt(value, { accountAddress, dappAddress }) {
123
+ const { ciphertext } = await this.encryptor({
124
+ plaintext: Lightning.plaintextFromValue(value),
125
+ context: {
126
+ hostChainId: this.chainId,
127
+ aclAddress: this.executorAddress,
128
+ userAddress: parseAddress(accountAddress),
129
+ contractAddress: parseAddress(dappAddress),
130
+ },
131
+ });
132
+ return ciphertext.value;
133
+ }
134
+ /**
135
+ * Obtain a reencryptor for a particular Externally Owned Account (EOA) to request decrypted values.
136
+ * The account associated with the walletClient must have permissions to decrypt the handle or ciphertext passed
137
+ * to the reencryptor function.
138
+ *
139
+ * @param walletClient the wallet client to use for signing the reencrypt request.
140
+ */
141
+ getReencryptor(walletClient) {
142
+ return incoLiteReencryptor({
143
+ walletClient,
144
+ kmsConnectRpcEndpointOrClient: this.kmsClient,
145
+ chainId: this.chainId,
146
+ ephemeralKeypair: this.ephemeralKeypair,
147
+ });
148
+ }
149
+ /**
150
+ * Get the GRPC endpoint for the covalidator that services this deployment.
151
+ */
152
+ static getCovalidatorUrl(deployment) {
153
+ const { executorAddress, chainId, pepper } = deployment;
154
+ return `https://${executorAddress.toLowerCase()}.${chainId}.${pepper}.inco.org`;
155
+ }
156
+ static isIdByName(id) {
157
+ return id.name !== undefined;
158
+ }
159
+ static plaintextFromValue(value) {
160
+ if (typeof value === 'boolean') {
161
+ return {
162
+ scheme: encryptionSchemes.ecies,
163
+ type: handleTypes.ebool,
164
+ value: value,
165
+ };
166
+ }
167
+ else if (typeof value === 'bigint' || typeof value === 'number') {
168
+ return {
169
+ scheme: encryptionSchemes.ecies,
170
+ type: handleTypes.euint256,
171
+ value: BigInt(value),
172
+ };
173
+ }
174
+ else {
175
+ throw new Error(`Unsupported type ${typeof value}`);
176
+ }
177
+ }
178
+ }
179
+ //# sourceMappingURL=lightning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lightning.js","sourceRoot":"","sources":["../../src/lite/lightning.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,129 @@
1
+ import { createClient } from '@connectrpc/connect';
2
+ import { createConnectTransport } from '@connectrpc/connect-web';
3
+ import { bytesToHex, hexToBytes } from 'viem';
4
+ import { bytesToBigInt } from '../binary';
5
+ import { getSupportedChain } from '../chain';
6
+ import { bigintToPlaintext, encryptionSchemes } from '../encryption/encryption';
7
+ import { KmsService } from '../generated/es/inco/kms/lite/v1/kms_service_pb';
8
+ import { getHandleType } from '../handle';
9
+ import { createEIP712Payload } from '../reencryption/eip712';
10
+ import { decrypt, generateSecp256k1Keypair } from './ecies';
11
+ // The domain constants used for basic reencrypts.
12
+ // Note: for advanced ACL, since the signature is checked on-chain, the domain
13
+ // and version must match the ones used in the contract. For basic ones, we use
14
+ // a domain different than the one used on-chain
15
+ const BASIC_REENCRYPT_DOMAIN = {
16
+ name: 'IncoReencryption',
17
+ version: '0.1.0',
18
+ };
19
+ // Create an EIP712 payload for the Inco Lite basic reencrypt.
20
+ export function reencryptEIP712(chainId, ephemeralPubKey) {
21
+ return createEIP712Payload({
22
+ chainId,
23
+ primaryType: 'ReencryptionRequest',
24
+ primaryTypeFields: [{ name: 'publicKey', type: 'bytes' }],
25
+ message: {
26
+ publicKey: bytesToHex(ephemeralPubKey),
27
+ },
28
+ domainName: BASIC_REENCRYPT_DOMAIN.name,
29
+ domainVersion: BASIC_REENCRYPT_DOMAIN.version,
30
+ });
31
+ }
32
+ // Returns the Inco Lite Reencryptor, which can reencrypt a handle using the
33
+ // Basic ACL.
34
+ export async function incoLiteReencryptor({ kmsConnectRpcEndpointOrClient, chainId, walletClient, ephemeralKeypair, }) {
35
+ const kmsClient = getKmsClient(kmsConnectRpcEndpointOrClient || defaultCovalidatorGrpc(getSupportedChain(chainId)));
36
+ if (!ephemeralKeypair) {
37
+ ephemeralKeypair = await generateSecp256k1Keypair();
38
+ }
39
+ // Sign the EIP712 attesting that the user has access to the private key
40
+ // corresponding to the ephemeral public key.
41
+ const eip712Payload = reencryptEIP712(chainId, ephemeralKeypair.encodePublicKey());
42
+ // Using browser extensions, this step will prompt the user to sign the
43
+ // payload.
44
+ const eip712Signature = await walletClient.signTypedData(eip712Payload);
45
+ return async function reencrypt({ handle }) {
46
+ const ephemeralPubKey = ephemeralKeypair.encodePublicKey();
47
+ const reencryptRequest = {
48
+ $typeName: 'inco.kms.lite.v1.ReencryptRequest',
49
+ userAddress: walletClient.account.address,
50
+ ephemeralPubKey,
51
+ eip712Signature: hexToBytes(eip712Signature),
52
+ handlesWithProofs: [
53
+ {
54
+ $typeName: 'inco.kms.lite.v1.HandleWithProof',
55
+ handle,
56
+ aclProof: {
57
+ $typeName: 'inco.kms.lite.v1.ACLProof',
58
+ // See advancedacl/session-key.ts for an example of using
59
+ // Advanced ACL.
60
+ proof: {
61
+ case: 'incoLiteBasicAclProof',
62
+ value: {
63
+ $typeName: 'inco.kms.lite.v1.IncoLiteBasicACLProof',
64
+ },
65
+ },
66
+ },
67
+ },
68
+ ],
69
+ };
70
+ try {
71
+ const response = await kmsClient.reencrypt(reencryptRequest);
72
+ return decryptGrpcResponse(response, ephemeralKeypair, handle);
73
+ }
74
+ catch (error) {
75
+ console.log(error);
76
+ throw error;
77
+ }
78
+ };
79
+ }
80
+ // Helper function to get a KMS client from a string or a Client instance.
81
+ export function getKmsClient(kmsConnectRpcEndpointOrClient) {
82
+ if (typeof kmsConnectRpcEndpointOrClient === 'string') {
83
+ const transport = createConnectTransport({
84
+ baseUrl: kmsConnectRpcEndpointOrClient,
85
+ });
86
+ return createClient(KmsService, transport);
87
+ }
88
+ return kmsConnectRpcEndpointOrClient;
89
+ }
90
+ // Decrypt using ECIES the ciphertext in the response.
91
+ // Even though the proto specifies a list of ciphertexts, our JS SDK
92
+ // currently only supports a single ciphertext.
93
+ export async function decryptGrpcResponse(response, ephemeralKeypair, handle) {
94
+ const reencryptedCt = response.payload?.userCiphertexts[0];
95
+ if (!reencryptedCt) {
96
+ throw new Error('No reencrypted ciphertext in the response');
97
+ }
98
+ const plaintextBytes = await decrypt(ephemeralKeypair, reencryptedCt.ciphertext);
99
+ const plaintext = bytesToBigInt(plaintextBytes);
100
+ return bigintToPlaintext(encryptionSchemes.ecies, getHandleType(handle), plaintext);
101
+ }
102
+ // Helper function to return the default gRPC endpoint for the covalidator.
103
+ // Currently, this returns the covalidator for the Inco Lightning public testnet.
104
+ export function defaultCovalidatorGrpc(chain) {
105
+ return lightningTestnetCovalidatorGrpc(chain);
106
+ }
107
+ // Helper function to get the gRPC endpoint for the Denver covalidator on the
108
+ // AWS (Pulumi) setup. This function is a convenience, and might disappear in
109
+ // the future, if the denver testnet is no longer supported.
110
+ export function pulumiCovalidatorGrpc(chain) {
111
+ return `https://grpc.${chain.name.toLowerCase()}.covalidator.denver.inco.org`;
112
+ }
113
+ // Helper function to get the devnet gRPC endpoint for the Inco Lightning covalidator.
114
+ export function lightningDevnetCovalidatorGrpc(chain) {
115
+ return getCovalidatorGrpcHelper(chain, 'devnet', 'lightning');
116
+ }
117
+ // Helper function to get the testnet gRPC endpoint for the Inco Lightning covalidator.
118
+ export function lightningTestnetCovalidatorGrpc(chain) {
119
+ return getCovalidatorGrpcHelper(chain, 'testnet', 'lightning');
120
+ }
121
+ // Convert camelCase to dash-case.
122
+ function camelToDashCase(str) {
123
+ return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
124
+ }
125
+ // Small helper, as our GCP covalidator URLs are in a specific format.
126
+ function getCovalidatorGrpcHelper(chain, network, cluster) {
127
+ return `https://grpc.${camelToDashCase(chain.name)}.${cluster}.${network}.inco.org`;
128
+ }
129
+ //# sourceMappingURL=reencrypt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reencrypt.js","sourceRoot":"","sources":["../../src/lite/reencrypt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './local-node';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/local/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { Address, HexString } from '@inco/pega/lib/hex';
2
+ import * as dotenv from 'dotenv';
3
+ import { Schema } from 'effect';
4
+ export const LocalNodeEnv = Schema.Struct({
5
+ DEPLOYER_ADDRESS: Address,
6
+ STATE_DUMP: Schema.String,
7
+ ADD_TWO_ADDRESS: Address,
8
+ EXECUTOR_ADDRESS: Address,
9
+ ECIES_PUBLIC_KEY: HexString,
10
+ CALLBACK_ADDRESS: HexString,
11
+ SENDER_ADDRESS: Address,
12
+ SENDER_PRIVATE_KEY: HexString,
13
+ PEPPER: Schema.String,
14
+ COVALIDATOR_ECIES_PRIVATE_KEY: HexString,
15
+ COVALIDATOR_CALLBACK_PRIVATE_KEY: HexString,
16
+ COVALIDATOR_ACL_ADDR: Address,
17
+ COVALIDATOR_INCO_EXECUTOR_ADDR: Address,
18
+ COVALIDATOR_DECRYPTION_HANDLER_ADDR: Address,
19
+ });
20
+ export function parseLocalEnv(envFileContents) {
21
+ const envObj = dotenv.parse(envFileContents);
22
+ return Schema.decodeUnknownSync(LocalNodeEnv)(envObj);
23
+ }
24
+ //# sourceMappingURL=local-node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-node.js","sourceRoot":"","sources":["../../src/local/local-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;IACxC,gBAAgB,EAAE,OAAO;IACzB,UAAU,EAAE,MAAM,CAAC,MAAM;IACzB,eAAe,EAAE,OAAO;IACxB,gBAAgB,EAAE,OAAO;IACzB,gBAAgB,EAAE,SAAS;IAC3B,gBAAgB,EAAE,SAAS;IAC3B,cAAc,EAAE,OAAO;IACvB,kBAAkB,EAAE,SAAS;IAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;IACrB,6BAA6B,EAAE,SAAS;IACxC,gCAAgC,EAAE,SAAS;IAC3C,oBAAoB,EAAE,OAAO;IAC7B,8BAA8B,EAAE,OAAO;IACvC,mCAAmC,EAAE,OAAO;CAC7C,CAAC,CAAC;AAIH,MAAM,UAAU,aAAa,CAAC,eAAgC;IAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC7C,OAAO,MAAM,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AACxD,CAAC"}