Skip to content
Merged
Show file tree
Hide file tree
Changes from 44 commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
0b40f47
refactor(wrapped-keys-lit-actions): LIT-3920 - Deconstruct existing E…
MaximusHaximus Oct 1, 2024
b939e6d
refactor(wrapped-keys-lit-actions): LIT-3920 - Deconstruct existing S…
MaximusHaximus Oct 1, 2024
72864d2
refactor(wrapped-keys-lit-actions): LIT-3920 - Refactor `common/expor…
MaximusHaximus Oct 1, 2024
7dafaf2
refactor(wrapped-keys-lit-actions): LIT-3920 - Refactor `signTransact…
MaximusHaximus Oct 1, 2024
d928051
refactor(wrapped-keys-lit-actions): LIT-3920 - Refactor `signTransact…
MaximusHaximus Oct 1, 2024
9f9a670
refactor(wrapped-keys-lit-actions): LIT-3920 - Extract usage of `getD…
MaximusHaximus Oct 1, 2024
a294bc4
refactor(wrapped-keys-lit-actions): LIT-3920 - Extract private key ge…
MaximusHaximus Oct 1, 2024
231ac2b
refactor(wrapped-keys-lit-actions): LIT-3920 - Extract encryption of …
MaximusHaximus Oct 1, 2024
65b3a63
refactor(wrapped-keys-lit-actions): LIT-3920 - Normalize function sig…
MaximusHaximus Oct 3, 2024
a72e159
fix(wrapped-keys-lit-actions): LIT-3920 - Add missing `await` in gene…
MaximusHaximus Oct 3, 2024
c294587
test(wrapped-keys-lit-actions): LIT-3920 - Update Solana sign transac…
MaximusHaximus Oct 8, 2024
fe9b60b
test(wrapped-keys-lit-actions): LIT-3920 - Ensure private key used to…
MaximusHaximus Oct 8, 2024
d73b7b4
feat(wrapped-keys-lit-actions): LIT-3920 - Add batchGenerateEncrypted…
MaximusHaximus Oct 8, 2024
4f632f7
test(wrapped-keys): LIT-3920 - Define testBatchGenerateEncryptedKeys …
MaximusHaximus Oct 8, 2024
e830162
chore(wrapped-keys): LIT-3920 - Define new to hold LIT actions that a…
MaximusHaximus Oct 8, 2024
f7de6b6
chore(wrapped-keys): LIT-3920 - run eslint --fix
MaximusHaximus Oct 8, 2024
d5da0e3
types(wrapped-keys): LIT-3920 - Add initial types to facilitate batch…
MaximusHaximus Oct 8, 2024
610d2ef
feat(wrapped-keys): LIT-3920 - Add batchGenerateKeysWithLitAction to …
MaximusHaximus Oct 8, 2024
4d34fb1
refactor(wrapped-keys): LIT-3920 - Extract getKeyTypeFromNetwork into…
MaximusHaximus Oct 8, 2024
ca76c7b
feat(wrapped-keys): LIT-3920 - Add batchGeneratePrivateKeys to client…
MaximusHaximus Oct 8, 2024
13269e7
test(wrapped-keys-lit-actions): LIT-3920 - Rename to testBatchGenerat…
MaximusHaximus Oct 8, 2024
442dae8
test(wrapped-keys-lit-actions): LIT-3920 - Update assertions to handl…
MaximusHaximus Oct 8, 2024
35b33d5
chore(lit-core): LIT-3920 - Revert debug log change
MaximusHaximus Oct 8, 2024
13f0556
chore(wrapped-keys-lit-actions): LIT-3920 - Remove stack logging for …
MaximusHaximus Oct 8, 2024
8f9f029
fix(wrapped-keys-lit-actions): LIT-3920 - Use runOnce on `processActi…
MaximusHaximus Oct 9, 2024
90a43cd
test(wrapped-keys): LIT-3920 - Add assertions for signatures to `batc…
MaximusHaximus Oct 9, 2024
f0ceff6
chore(wrapped-keys): LIT-3920 - Object shorthand notation
MaximusHaximus Oct 9, 2024
e269157
chore(wrapped-keys-lit-actions): LIT-3920 - Add `sync-actions-to-ipfs…
MaximusHaximus Oct 9, 2024
c3869d4
chore(wrapped-keys-lit-actions): LIT-3920 - Move generation of privat…
MaximusHaximus Oct 9, 2024
82de82c
chore(wrapped-keys-lit-actions): LIT-3920 - Remove runOnce in `batchG…
MaximusHaximus Oct 9, 2024
2d47564
chore(wrapped-keys-lit-actions): LIT-3920 - Make batchGeneratePrivate…
MaximusHaximus Oct 9, 2024
f5bdd3f
chore(wrapped-keys-lit-actions): LIT-3920 - Fix test double-line
MaximusHaximus Oct 9, 2024
4874adc
chore(wrapped-keys-lit-actions): LIT-3920 - Rename `getDecryptedKey` …
MaximusHaximus Oct 9, 2024
ea9c087
chore(wrapped-keys-lit-actions): LIT-3920 - Use existing ethers insta…
MaximusHaximus Oct 9, 2024
8d517d8
chore(wrapped-keys-lit-actions): LIT-3920 - Update IPFS CIDs to use c…
MaximusHaximus Oct 9, 2024
15337ad
feat: add advanced controls to executeJs
Ansonhkg Oct 9, 2024
7db654f
chore: better error message
Ansonhkg Oct 9, 2024
bae0338
feat(tinny): add test
Ansonhkg Oct 9, 2024
d664472
fmt
Ansonhkg Oct 9, 2024
77cefc2
Update local-tests/tests/testUseEoaSessionSigsToRequestSingleResponse.ts
Ansonhkg Oct 9, 2024
9a3af57
fmt
Ansonhkg Oct 9, 2024
7f7b387
chore(wrapped-keys-lit-actions): LIT-3920 - Update `batchGenerateKeys…
MaximusHaximus Oct 9, 2024
8e6b8cd
chore(wrapped-keys-lit-actions): LIT-3920 - Add package dependencies …
MaximusHaximus Oct 9, 2024
54053fe
chore(wrapped-keys-lit-actions): LIT-3920 - Add usage instructions to…
MaximusHaximus Oct 9, 2024
765b437
chore(wrapped-keys-lit-actions): LIT-3920 - Rename `generatedPrivateK…
MaximusHaximus Oct 9, 2024
f79e3dc
chore(wrapped-keys-lit-actions): LIT-3920 - Update `signTransactionWi…
MaximusHaximus Oct 9, 2024
2175a8c
chore(wrapped-keys-lit-actions): LIT-3920 - Update `signTransactionWi…
MaximusHaximus Oct 9, 2024
f5a9652
chore(wrapped-keys-lit-actions): LIT-3920 - Fix accidental comment :)
MaximusHaximus Oct 9, 2024
1204c8d
feat(lit-node-client-nodejs): LIT-3920 - Replace `numResponsesRequire…
MaximusHaximus Oct 9, 2024
42fd975
chore(wrapped-keys-lit-actions): LIT-3920 - Remove `runOnce` and use …
MaximusHaximus Oct 10, 2024
84af943
chore(wrapped-keys): LIT-3920 - Update LIT_ACTION_CID_REPOSITORY CIDs…
MaximusHaximus Oct 10, 2024
7f92dcf
test(wrapped-keys-lit-actions): LIT-3920 - Use ethers.utils.computeAd…
MaximusHaximus Oct 10, 2024
22747c8
test(wrapped-keys-lit-actions): LIT-3920 - Remove unused function args
MaximusHaximus Oct 10, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions local-tests/setup/tinny-environment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,6 @@ export class TinnyEnvironment {
return { privateKey: this.processEnvs.PRIVATE_KEYS[index], index }; // Return the key and its index
} else {
console.log('[𐬺🧪 Tinny Environment𐬺] No available keys. Waiting...', {
privateKeys: this.processEnvs.PRIVATE_KEYS,
keysInUse: this.processEnvs.KEY_IN_USE,
}); // Log a message indicating that we are waiting
// Wait for the specified interval before checking again
Expand Down Expand Up @@ -447,8 +446,9 @@ export class TinnyEnvironment {
* @throws If there is an error sending the funds.
*/
getFunds = async (walletAddress: string, amount = '0.001') => {
const privateKey = await this.getAvailablePrivateKey();

try {
const privateKey = await this.getAvailablePrivateKey();
const provider = new ethers.providers.JsonRpcBatchProvider(this.rpc);
const wallet = new ethers.Wallet(privateKey.privateKey, provider);

Expand All @@ -460,6 +460,9 @@ export class TinnyEnvironment {
await tx.wait();
} catch (e) {
throw new Error(`Failed to send funds to ${walletAddress}: ${e}`);
} finally {
// @ts-expect-error We don't have a user, but this works
this.releasePrivateKeyFromUser({ privateKey });
}
};

Expand Down
9 changes: 9 additions & 0 deletions local-tests/test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,13 @@ import { testFailImportWrappedKeysWithExpiredSessionSig } from './tests/wrapped-
import { testExportWrappedKey } from './tests/wrapped-keys/testExportWrappedKey';
import { testSignMessageWithSolanaEncryptedKey } from './tests/wrapped-keys/testSignMessageWithSolanaEncryptedKey';
import { testSignTransactionWithSolanaEncryptedKey } from './tests/wrapped-keys/testSignTransactionWithSolanaEncryptedKey';
import { testBatchGeneratePrivateKeys } from './tests/wrapped-keys/testBatchGeneratePrivateKeys';

import { setLitActionsCodeToLocal } from './tests/wrapped-keys/util';
import { testUseEoaSessionSigsToRequestSingleResponse } from './tests/testUseEoaSessionSigsToRequestSingleResponse';

// Use the current LIT action code to test against
setLitActionsCodeToLocal();
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This makes our tinny tests use the locally built code for all LIT actions in wrapped-keys instead of running them against the CIDs in wrapped-keys LIT_ACTION_CID_REPOSITORY

Copy link
Collaborator

@DashKash54 DashKash54 Oct 9, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since the idea is that users use the IPFS Cid shouldn't the tests reflect that?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess it depends on the users; some people will be using the code directly, others the CIDs... what I want to do is run the entire suite against the cids and then again against the current code ideally, but see other comment re: doing so without jest.

The reason this is here right now is because we have a chicken and egg problem - in-progress code in PRs isn't in IPFS, and pinning repeatedly to IPFS as we iterate on a lit action would result in a ton of churn and manual updates right now.

We could make this code always use IPFS CIDs, but it would require that all actions we want to test would exist in IPFS before we can test against them -- and we want to run tests while developing the actions where they will be changing often.

In this PR, I wanted to be sure tests pass with the current code rather than previous CIDs -- once we have confirmed all of the LIT actions code here is GTG and published all of the lit actions to IPFS, I can update the CIDs in wrapped-keys and remove this code so the tests run against CIDs again

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cool as you mentioned we can run the tests against IPFS afterwards

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should stick to the LA code, not the IPFS. That way we can validate the code with our tests continuously, not depend on IPFS and we can always calculate the CID from the code but not the other way around
Also, after having the CID generation/LA publish step on SDK publish we will have them updated automatically every time this goes public

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 I agree @FedericoAmura <3 Ideally, all tests would run against the data in the same commit by default, and if we want to test against prior versions we'd explicitly do that. The main thing is just getting the CID repo in the same commit to always match the current source code in that commit... I think we can do that with a husky hook script that runs on-commit

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

husky hook script that runs on-commit

Good idea


(async () => {
console.log('[𐬺🧪 Tinny𐬺] Running tests...');
Expand All @@ -118,6 +125,7 @@ import { testSignTransactionWithSolanaEncryptedKey } from './tests/wrapped-keys/
// --filter=WrappedKey
const wrappedKeysTests = {
// -- valid cases
testBatchGeneratePrivateKeys,
testEthereumSignMessageGeneratedKey,
testEthereumBroadcastTransactionGeneratedKey,
testEthereumSignMessageWrappedKey,
Expand Down Expand Up @@ -163,6 +171,7 @@ import { testSignTransactionWithSolanaEncryptedKey } from './tests/wrapped-keys/
testUseEoaSessionSigsToEncryptDecryptString,
testUseEoaSessionSigsToEncryptDecryptFile,
testUseEoaSessionSigsToEncryptDecryptZip,
testUseEoaSessionSigsToRequestSingleResponse,
};

const pkpSessionSigsTests = {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import { getEoaSessionSigs } from 'local-tests/setup/session-sigs/get-eoa-session-sigs';
import { TinnyEnvironment } from 'local-tests/setup/tinny-environment';

/**
* Test Commands:
* ✅ NETWORK=datil-dev yarn test:local --filter=testUseEoaSessionSigsToRequestSingleResponse
* ✅ NETWORK=datil-test yarn test:local --filter=testUseEoaSessionSigsToRequestSingleResponse
* ✅ NETWORK=datil yarn test:local --filter=testUseEoaSessionSigsToRequestSingleResponse
*/
export const testUseEoaSessionSigsToRequestSingleResponse = async (
devEnv: TinnyEnvironment
) => {
const alice = await devEnv.createRandomPerson();

try {
const eoaSessionSigs = await getEoaSessionSigs(devEnv, alice);

const res = await devEnv.litNodeClient.executeJs({
sessionSigs: eoaSessionSigs,
code: `(async () => {
console.log('hello world')
})();`,
numResponsesRequired: 1,
});
} finally {
devEnv.releasePrivateKeyFromUser(alice);
}
console.log('res:', res);

// Expected output:
// {
// success: true,
// signedData: {},
// decryptedData: {},
// claimData: {},
// response: "",
// logs: "hello world\n",
// }

// -- assertions
if (res.response) {
throw new Error(`Expected "response" to be falsy`);
}

if (!res.logs) {
throw new Error(`Expected "logs" in res`);
}

if (!res.logs.includes('hello world')) {
throw new Error(`Expected "logs" to include 'hello world'`);
}

if (!res.success) {
throw new Error(`Expected "success" in res`);
}
};
154 changes: 154 additions & 0 deletions local-tests/tests/wrapped-keys/testBatchGeneratePrivateKeys.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
import { log } from '@lit-protocol/misc';
import { TinnyEnvironment } from 'local-tests/setup/tinny-environment';
import { api } from '@lit-protocol/wrapped-keys';
import { getPkpSessionSigs } from 'local-tests/setup/session-sigs/get-pkp-session-sigs';
import nacl from 'tweetnacl';
import bs58 from 'bs58';
import { ethers } from 'ethers';
import { BatchGeneratePrivateKeysActionResult } from '../../../packages/wrapped-keys/src/lib/types';

const { batchGeneratePrivateKeys, exportPrivateKey } = api;

async function verifySolanaSignature(
solanaResult: BatchGeneratePrivateKeysActionResult,
solanaMessageToSign
) {
const {
signedMessage: { signature },
generatedPrivateKey: { generatedPublicKey },
} = solanaResult;
const signatureIsValidForPublicKey = nacl.sign.detached.verify(
Buffer.from(solanaMessageToSign),
bs58.decode(signature),
bs58.decode(generatedPublicKey)
);

console.log({ signatureIsValidForPublicKey, signature });
if (!signatureIsValidForPublicKey) {
throw new Error(
`signature: ${signature} doesn't validate for the Solana public key: ${generatedPublicKey}`
);
}
}
async function verifyEvmSignature(
litNodeClient,
evmResult,
messageToSign,
pkpSessionSigs
) {
function verifyMessageSignature() {
try {
return ethers.utils.verifyMessage(
messageToSign,
evmResult.signedMessage.signature
);
} catch (err) {
throw new Error(
`When validating signed Ethereum message is valid: ${err.message}`
);
}
}

const { decryptedPrivateKey } = await exportPrivateKey({
litNodeClient,
network: 'evm',
id: evmResult.generatedPrivateKey.id,
pkpSessionSigs,
});

const recoveredAddress = verifyMessageSignature();

const wallet = new ethers.Wallet(decryptedPrivateKey);

console.log({
recoveredAddress,
walletAddress: wallet.address,
signature: evmResult.signedMessage.signature,
});
if (recoveredAddress !== wallet.address) {
throw new Error(
"Recovered address from verifyMessage doesn't match the wallet address"
);
}
}

/**
* Test Commands:
* ✅ NETWORK=cayenne yarn test:local --filter=testSignMessageWithSolanaEncryptedKey
* ✅ NETWORK=manzano yarn test:local --filter=testSignMessageWithSolanaEncryptedKey
* ✅ NETWORK=localchain yarn test:local --filter=testSignMessageWithSolanaEncryptedKey
*/
export const testBatchGeneratePrivateKeys = async (
devEnv: TinnyEnvironment
) => {
const alice = await devEnv.createRandomPerson();

try {
const pkpSessionSigsSigning = await getPkpSessionSigs(
devEnv,
alice,
null,
new Date(Date.now() + 1000 * 60 * 10).toISOString()
); // 10 mins expiry

const solanaMessageToSign = 'This is a test solana message';
const evmMessageToSign = 'This is a test evm message';
const { results } = await batchGeneratePrivateKeys({
pkpSessionSigs: pkpSessionSigsSigning,
actions: [
{
network: 'evm',
signMessageParams: { messageToSign: evmMessageToSign },
generateKeyParams: { memo: 'Test evm key' },
},
{
network: 'solana',
signMessageParams: { messageToSign: solanaMessageToSign },
generateKeyParams: { memo: 'Test solana key' },
},
],
litNodeClient: devEnv.litNodeClient,
});

if (results.length !== 2) {
throw new Error(
`Incorrect # of results; expected 2, got ${results.length}`
);
}

if (
results[0].generatedPrivateKey.memo !== 'Test evm key' ||
results[1].generatedPrivateKey.memo !== 'Test solana key'
) {
throw new Error(
'Results not in order sent; expected evm as first result, solana as second'
);
}

if (
!results[0].signedMessage.signature ||
!results[1].signedMessage.signature
) {
throw new Error('Missing message signature in response');
}

console.log('solana verify sig');
await verifySolanaSignature(results[1], solanaMessageToSign);

console.log('evm verify sig');
await verifyEvmSignature(
devEnv.litNodeClient,
results[0],
evmMessageToSign,
pkpSessionSigsSigning
);
console.log('results', results);

log('✅ testBatchGenerateEncryptedKeys');
} catch (err) {
console.log(err.message, err, err.stack);
throw err;
} finally {
devEnv.releasePrivateKeyFromUser(alice);
}
};
Original file line number Diff line number Diff line change
Expand Up @@ -70,11 +70,7 @@ export const testFailEthereumSignTransactionWrappedKeyWithInvalidParam = async (
id,
});
} catch (e: any) {
if (
e.message.includes(
'Error executing the Signing Lit Action: Error: When signing transaction- invalid hexlify value'
)
) {
if (e.message.includes('invalid hexlify value')) {
console.log('✅ THIS IS EXPECTED: ', e);
console.log(e.message);
console.log(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,11 +66,7 @@ export const testFailEthereumSignTransactionWrappedKeyWithMissingParam = async (
id,
});
} catch (e: any) {
if (
e.message.includes(
'Error executing the Signing Lit Action: Error: Missing required field: toAddress'
)
) {
if (e.message.includes('Missing required field: toAddress')) {
console.log('✅ THIS IS EXPECTED: ', e);
console.log(e.message);
console.log(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {
clusterApiUrl,
} from '@solana/web3.js';
import { getPkpSessionSigs } from 'local-tests/setup/session-sigs/get-pkp-session-sigs';
import { ethers } from 'ethers';

const { importPrivateKey, signTransactionWithEncryptedKey } = api;

Expand Down Expand Up @@ -125,7 +126,7 @@ export const testSignTransactionWithSolanaEncryptedKey = async (
// const confirmation = await solanaConnection.confirmTransaction(signedTx);
// console.log(confirmation); // { context: { slot: 321490379 }, value: { err: null } }

const signatureBuffer = Buffer.from(signedTx, 'base64');
const signatureBuffer = Buffer.from(ethers.utils.base58.decode(signedTx));
solanaTransaction.addSignature(solanaKeypair.publicKey, signatureBuffer);

if (!solanaTransaction.verifySignatures()) {
Expand Down
45 changes: 44 additions & 1 deletion local-tests/tests/wrapped-keys/util.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,50 @@
import { LIT_NETWORKS_KEYS } from '@lit-protocol/types';
import { LIT_CHAINS } from '@lit-protocol/constants';
import { ethers } from 'ethers';
import { EthereumLitTransaction } from '@lit-protocol/wrapped-keys';
import { config } from '@lit-protocol/wrapped-keys';
import {
litActionRepositoryCommon,
litActionRepository,
} from '@lit-protocol/wrapped-keys-lit-actions';

import type {
LitActionCodeRepository,
LitActionCodeRepositoryCommon,
EthereumLitTransaction,
} from '@lit-protocol/wrapped-keys';

const emptyLitActionRepositoryCommon: LitActionCodeRepositoryCommon = {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why "empty"?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The way the fallback logic inside of the wrapped-keys package works, if the code for a particular LIT action is an empty string (falsey), it uses CIDs -- otherwise it uses the string as the LIT action code. It's 'empty' because it contains no code at all, for any key -- basically it resets the entire code repository so that any calls to use the LIT actions will use the defined CIDs instead of trying to use code. For type safety it needs to be an object with the correct keys, where all appropriate values remain strings.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The way the fallback logic inside of the wrapped-keys package works, if the code for a particular LIT action is an empty string (falsey), it uses CIDs -- otherwise it uses the string as the LIT action code

The fallback logic sounds a lil convoluted, like we intentionally keep it empty and then fall back- is it like this to work with TS? Doesn't the user provides a param to pass the code or IPFS Cid

Copy link
Contributor Author

@MaximusHaximus MaximusHaximus Oct 9, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Keeping the values on the object always as strings keeps the type consistent so handling values in the object requires less complexity in typescript -- because values on the object are all of type string, we always know what type a value is without needing to do assertions against it, and the code to check if it's a falsy string to know if we should try to use any particular value as code or not is the same as if the value was 'null' -- but typescript doesn't force us to check it's a string or add a manual type annotation telling TS it IS a string before using it as code like it would if we had defined it as a { string | null } type :)

batchGenerateEncryptedKeys: '',
};

const emptyLitActionRepository: LitActionCodeRepository = {
signTransaction: {
evm: '',
solana: '',
},
signMessage: {
evm: '',
solana: '',
},
generateEncryptedKey: {
evm: '',
solana: '',
},
exportPrivateKey: {
evm: '',
solana: '',
},
};

export function resetLitActionsCode() {
config.setLitActionsCodeCommon(emptyLitActionRepositoryCommon);
config.setLitActionsCode(emptyLitActionRepository);
}

export function setLitActionsCodeToLocal() {
config.setLitActionsCodeCommon(litActionRepositoryCommon);
config.setLitActionsCode(litActionRepository);
}

export function getChainForNetwork(network: LIT_NETWORKS_KEYS): {
chain: string;
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@
"@walletconnect/utils": "2.9.2",
"@walletconnect/web3wallet": "1.8.8",
"ajv": "^8.12.0",
"axios": "^0.27.2",
"base64url": "^3.0.1",
"bitcoinjs-lib": "^6.1.0",
"bs58": "^5.0.0",
Expand Down Expand Up @@ -100,6 +99,7 @@
"@types/secp256k1": "^4.0.6",
"@typescript-eslint/eslint-plugin": "6.21.0",
"@typescript-eslint/parser": "6.21.0",
"axios": "^1.6.0",
"babel-jest": "27.5.1",
"body-parser": "^1.20.2",
"buffer": "^6.0.3",
Expand All @@ -120,6 +120,7 @@
"eslint-plugin-react-hooks": "4.6.0",
"ethereum-abi-types-generator": "^1.3.2",
"express": "^4.18.2",
"form-data": "^4.0.0",
"inquirer": "^9.2.21",
"ipfs-unixfs-importer": "12.0.1",
"jest": "27.5.1",
Expand Down
Loading
Loading