From 6de2110bd1bf94fbbe8850ec53f994a7fdfb12ab Mon Sep 17 00:00:00 2001 From: Abdul Qadir Shaikh Date: Tue, 14 Mar 2023 09:14:35 +0400 Subject: [PATCH 01/10] added mockUseWallet --- light-system-programs/package.json | 1 + light-system-programs/runRelayer.sh | 6 + .../tests/browser_wallet_tests.ts | 261 ++++++++++++++++++ .../tests/mock/useWalletMock.ts | 120 ++++++++ light-system-programs/tests/user_tests.ts | 2 +- relayer/runScript.sh | 4 +- 6 files changed, 391 insertions(+), 3 deletions(-) create mode 100644 light-system-programs/runRelayer.sh create mode 100644 light-system-programs/tests/browser_wallet_tests.ts create mode 100644 light-system-programs/tests/mock/useWalletMock.ts diff --git a/light-system-programs/package.json b/light-system-programs/package.json index 2fb9c447a5..752a4c5e2d 100644 --- a/light-system-programs/package.json +++ b/light-system-programs/package.json @@ -4,6 +4,7 @@ "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check", "test": "sh runTest.sh 'ts-mocha -t 2000000 tests/functional_tests.ts --exit'", "test-user": "sh runTest.sh 'ts-mocha -t 2000000 tests/user_tests.ts --exit'", + "test-browser-wallet": "ts-mocha -t 2000000 tests/browser_wallet_tests.ts --exit", "test-verifiers": "sh runTest.sh 'ts-mocha -t 2000000 tests/verifier_tests.ts --exit'", "test-merkle-tree": "sh runTest.sh 'ts-mocha -t 2000000 tests/merkle_tree_tests.ts --exit'", "test-provider": "sh runTest.sh 'ts-mocha -t 2000000 tests/provider.test.ts --exit'", diff --git a/light-system-programs/runRelayer.sh b/light-system-programs/runRelayer.sh new file mode 100644 index 0000000000..b9653619a4 --- /dev/null +++ b/light-system-programs/runRelayer.sh @@ -0,0 +1,6 @@ +#!/bin/bash -e +solana airdrop 100000 ZBUKxVWviAJBy12edp5H6kvhcatGYW3BV4ijbgxpVSq && solana airdrop 100000 ALA2cnz41Wa2v2EYUdkYHsg7VnKsbH1j7secM5aiP8k && solana airdrop 100000 8Ers2bBEWExdrh7KDFTrRbauPbFeEvsHz3UX4vxcK9xY && solana airdrop 10000 BEKmoiPHRUxUPik2WQuKqkoFLLkieyNPrTDup5h8c9S7 +cd ../relayer && node lib/index.js +PID=$! +$1; +kill $PID; \ No newline at end of file diff --git a/light-system-programs/tests/browser_wallet_tests.ts b/light-system-programs/tests/browser_wallet_tests.ts new file mode 100644 index 0000000000..68fc52b318 --- /dev/null +++ b/light-system-programs/tests/browser_wallet_tests.ts @@ -0,0 +1,261 @@ +import * as anchor from "@coral-xyz/anchor"; +import { + Connection, + Keypair as SolanaKeypair, + PublicKey, +} from "@solana/web3.js"; +import _ from "lodash"; + +// TODO: add and use namespaces in SDK +import { + ADMIN_AUTH_KEYPAIR, + MINT, + Provider, + newAccountWithTokens, + User, + strToArr, + updateMerkleTreeForTest, +} from "light-sdk"; +import { useWallet } from "./mock/useWalletMock"; + +// TODO: remove deprecated function calls +describe("browser_wallet", () => { + let connection; + + before(() => { + connection = new Connection("http://127.0.0.1:8899"); + }); + + const userKeypair = ADMIN_AUTH_KEYPAIR; //new SolanaKeypair(); + const { signTransaction, signMessage, sendAndConfirmTransaction } = useWallet( + userKeypair, + connection, + ); + + it("(user class) shield SPL", async () => { + let amount = 20; + + let token = "USDC"; + + console.log("test user wallet: ", userKeypair.publicKey.toBase58()); + + const provider = await Provider.browser( + { + signMessage, + signTransaction, + sendAndConfirmTransaction, + publicKey: userKeypair.publicKey, + }, + connection, + ); // userKeypair + + let res = await provider.provider.connection.requestAirdrop( + userKeypair.publicKey, + 2_000_000_000, + ); + + await provider.provider.connection.confirmTransaction(res, "confirmed"); + + const user = await User.load(provider); + + await user.shield({ amount, token }); + + try { + console.log("updating merkle tree..."); + let initLog = console.log; + // console.log = () => {}; + await updateMerkleTreeForTest( + provider.provider?.connection!, + // provider.provider, + ); + // console.log = initLog; + console.log("✔️updated merkle tree!"); + } catch (e) { + console.log(e); + throw new Error("Failed to update merkle tree!"); + } + // TODO: add random amount and amount checks + // let balance = await user.getBalance({ latest: true }); + }); + + it.only("(user class) shield SOL", async () => { + let amount = 15; + let token = "SOL"; + + const provider = await Provider.browser( + { + signMessage, + signTransaction, + sendAndConfirmTransaction, + publicKey: userKeypair.publicKey, + }, + connection, + ); // userKeypair + + let res = await provider.provider.connection.requestAirdrop( + userKeypair.publicKey, + 4_000_000_000, + ); + + await provider.provider.connection.confirmTransaction(res, "confirmed"); + + const user = await User.load(provider); + + await user.shield({ amount, token }); + // TODO: add random amount and amount checks + try { + console.log("updating merkle tree..."); + let initLog = console.log; + console.log = () => {}; + await updateMerkleTreeForTest( + provider.provider?.connection!, + // provider.provider, + ); + console.log = initLog; + console.log("✔️updated merkle tree!"); + } catch (e) { + console.log(e); + throw new Error("Failed to update merkle tree!"); + } + }); + + it("(user class) unshield SPL", async () => { + let amount = 1; + let token = "USDC"; + let solRecipient = SolanaKeypair.generate(); + console.log("test user wallet: ", userKeypair.publicKey.toBase58()); + const provider = await Provider.native(userKeypair); // userKeypair + let recipientTokenAccount = await newAccountWithTokens({ + connection: provider.provider.connection, + MINT, + ADMIN_AUTH_KEYPAIR: userKeypair, + userAccount: solRecipient, + amount: new anchor.BN(0), + }); + // console.log("recipientTokenAccount: ", recipientTokenAccount.toBase58()); + let res = await provider.provider.connection.requestAirdrop( + userKeypair.publicKey, + 2_000_000_000, + ); + + await provider.provider.connection.confirmTransaction(res, "confirmed"); + const user = await User.load(provider); + await user.unshield({ amount, token, recipient: solRecipient.publicKey }); + + try { + console.log("updating merkle tree..."); + let initLog = console.log; + console.log = () => {}; + await updateMerkleTreeForTest( + provider.provider?.connection!, + // provider.provider, + ); + console.log = initLog; + console.log("✔️updated merkle tree!"); + } catch (e) { + console.log(e); + throw new Error("Failed to update merkle tree!"); + } + }); + it("(user class) transfer SPL", async () => { + let amount = 1; + let token = "USDC"; + console.log("test user wallet: ", userKeypair.publicKey.toBase58()); + const provider = await Provider.native(userKeypair); // userKeypair + const shieldedRecipient = + "19a20668193c0143dd96983ef457404280741339b95695caddd0ad7919f2d434"; + const encryptionPublicKey = + "LPx24bc92eecaf5e3904bc1f4f731a2b1e0a28adf445e800c4cff112eb7a3f5350b"; + + const recipient = new anchor.BN(shieldedRecipient, "hex"); + const recipientEncryptionPublicKey: Uint8Array = + strToArr(encryptionPublicKey); + + const user = await User.load(provider); + await user.transfer({ + amount, + token, + recipient, + recipientEncryptionPublicKey, // TODO: do shielded address + }); + // TODO: add balance checks + + try { + console.log("updating merkle tree..."); + let initLog = console.log; + console.log = () => {}; + await updateMerkleTreeForTest( + provider.provider?.connection!, + // provider.provider, + ); + console.log = initLog; + console.log("✔️updated merkle tree!"); + } catch (e) { + console.log(e); + throw new Error("Failed to update merkle tree!"); + } + }); + + it("(user class) transfer SOL", async () => { + let amount = 1; + let token = "SOL"; + const shieldedRecipient = + "19a20668193c0143dd96983ef457404280741339b95695caddd0ad7919f2d434"; + const encryptionPublicKey = + "LPx24bc92eecaf5e3904bc1f4f731a2b1e0a28adf445e800c4cff112eb7a3f5350b"; + + const recipient = new anchor.BN(shieldedRecipient, "hex"); + const recipientEncryptionPublicKey: Uint8Array = + strToArr(encryptionPublicKey); + const provider = await Provider.native(userKeypair); + const user = await User.load(provider); + await user.transfer({ + amount, + token, + recipient, + recipientEncryptionPublicKey, // TODO: do shielded address + }); + try { + console.log("updating merkle tree..."); + let initLog = console.log; + console.log = () => {}; + await updateMerkleTreeForTest( + provider.provider?.connection!, + // provider.provider, + ); + console.log = initLog; + console.log("✔️updated merkle tree!"); + } catch (e) { + console.log(e); + throw new Error("Failed to update merkle tree!"); + } + + // TODO: add random amount, recipient and amount checks + }); + + it.skip("(user class) unshield SOL", async () => { + let amount = 1; + let token = "SOL"; + let recipient = new PublicKey( + "E7jqevikamCMCda8yCsfNawj57FSotUZuref9MLZpWo1", + ); + const provider = await Provider.native(userKeypair); + const user = await User.load(provider); + await user.unshield({ amount, token, recipient }); + try { + console.log("updating merkle tree..."); + let initLog = console.log; + console.log = () => {}; + await updateMerkleTreeForTest( + provider.provider?.connection!, + // provider.provider, + ); + console.log = initLog; + console.log("✔️updated merkle tree!"); + } catch (e) { + console.log(e); + throw new Error("Failed to update merkle tree!"); + } + // TODO: add random amount and amount checks + }); +}); diff --git a/light-system-programs/tests/mock/useWalletMock.ts b/light-system-programs/tests/mock/useWalletMock.ts new file mode 100644 index 0000000000..d573b04d0f --- /dev/null +++ b/light-system-programs/tests/mock/useWalletMock.ts @@ -0,0 +1,120 @@ +import { + Connection, + Keypair, + sendAndConfirmTransaction, + VersionedTransaction, +} from "@solana/web3.js"; +import { + PublicKey, + Transaction, + TransactionInstruction, +} from "@solana/web3.js"; +import nacl from "tweetnacl"; + +// Mock Solana web3 library +class MockProvider { + _publicKey: PublicKey; + _keypair: Keypair; + _connection: Connection; + + constructor(keypair: Keypair, connection: Connection) { + this._publicKey = keypair.publicKey; + this._keypair = keypair; + this._connection = connection; + } + + async sendTransaction(transaction) { + // Simulate transaction submission + console.log("Mock transaction submitted:", transaction); + return "mockTransactionSignature"; + } + + async signTransaction(transaction) { + try { + console.log( + "transaction here =================>", + transaction, + transaction instanceof Uint8Array, + ); + if (transaction instanceof Uint8Array) { + let signature = await this.sign(transaction); + return signature; + } else { + transaction.sign([this._keypair]); + console.log("after signing tx",{transaction}) + return transaction; + } + } catch (error) { + console.log("sign transaction",{error}) + } + } + + async signAllTransactions(transactions) { + // Simulate signing all transactions + console.log("Mock transactions signed:", transactions); + return transactions; + } + + async sendAndConfirmTransaction(transaction) { + try { + console.log("transaction here ============>", { transaction }); + const signature = await transaction.sign(this._keypair.secretKey); + return await sendAndConfirmTransaction( + this._connection, + transaction, + [signature], + { + commitment: "singleGossip", + preflightCommitment: "singleGossip", + }, + ); + } catch (err) {} + } + + async sign(transaction) { + // Sign the transaction using the keypair + const signature = nacl.sign.detached(transaction, this._keypair.secretKey); + return signature; + } + + signMessage(message: Uint8Array): Promise { + return new Promise(async (resolve, reject) => { + try { + const signature = nacl.sign.detached(message, this._keypair.secretKey); + return resolve(signature); + } catch (err) { + console.log({ err }); + reject(err); + } + }); + } + + async connect() { + // Simulate wallet connection + console.log("Mock wallet connected"); + } + + async disconnect() { + // Simulate wallet disconnection + console.log("Mock wallet disconnected"); + } +} + +// Mock useWallet hook +export const useWallet = (wallet: Keypair, connection: Connection) => { + const provider = new MockProvider(wallet, connection); + return { + publicKey: provider._publicKey, + connect: async () => provider.connect(), + disconnect: async () => provider.disconnect(), + signMessage: async (message): Promise => { + return await provider.signTransaction(message); + }, + signTransaction: async (transaction) => + provider.signTransaction(transaction), + signAllTransactions: async (transactions) => + provider.signAllTransactions(transactions), + sendAndConfirmTransaction: async (transactions) => + provider.signAllTransactions(transactions), + }; +}; diff --git a/light-system-programs/tests/user_tests.ts b/light-system-programs/tests/user_tests.ts index 3086e7b16c..79afe512b7 100644 --- a/light-system-programs/tests/user_tests.ts +++ b/light-system-programs/tests/user_tests.ts @@ -41,7 +41,7 @@ var LOOK_UP_TABLE; var POSEIDON; // TODO: remove deprecated function calls -describe("Test User", () => { +describe("user_tests", () => { // Configure the client to use the local cluster. process.env.ANCHOR_WALLET = process.env.HOME + "/.config/solana/id.json"; process.env.ANCHOR_PROVIDER_URL = "http://127.0.0.1:8899"; diff --git a/relayer/runScript.sh b/relayer/runScript.sh index 9e5c6ca670..15c5e0a277 100644 --- a/relayer/runScript.sh +++ b/relayer/runScript.sh @@ -1,4 +1,4 @@ #!/bin/bash -e -../../solana/validator/solana-test-validator --reset --limit-ledger-size 500000000 --faucet-port 9002 --rpc-port 8899 --bpf-program J1RRetZ4ujphU75LP8RadjXMf3sA12yC2R44CF7PmU7i ../light-system-programs/target/deploy/verifier_program_zero.so --bpf-program JA5cjkRJ1euVi9xLWsCJVzsRzEkT8vcC4rqw9sVAo5d6 ../light-system-programs/target/deploy/merkle_tree_program.so --bpf-program 3KS2k14CmtnuVv2fvYcvdrNgC94Y11WETBpMUGgXyWZL ../light-system-programs/target/deploy/verifier_program_one.so --bpf-program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV ../../solana/web3.js/test/fixtures/noop-program/solana_sbf_rust_noop.so --bpf-program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS ../light-system-programs/target/deploy/verifier_program.so --quiet & -sleep 7 +../../solana/validator/solana-test-validator --reset --limit-ledger-size 500000000 --faucet-port 9002 --rpc-port 8899 --bpf-program J1RRetZ4ujphU75LP8RadjXMf3sA12yC2R44CF7PmU7i ../light-system-programs/target/deploy/verifier_program_zero.so --bpf-program JA5cjkRJ1euVi9xLWsCJVzsRzEkT8vcC4rqw9sVAo5d6 ../light-system-programs/target/deploy/merkle_tree_program.so --bpf-program 3KS2k14CmtnuVv2fvYcvdrNgC94Y11WETBpMUGgXyWZL ../light-system-programs/target/deploy/verifier_program_one.so --bpf-program noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV ../../solana/web3.js/test/fixtures/noop-program/solana_sbf_rust_noop.so --bpf-program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS ../light-system-programs/target/deploy/verifier_program_storage.so --quiet & +sleep 7 solana airdrop 100000 ZBUKxVWviAJBy12edp5H6kvhcatGYW3BV4ijbgxpVSq && solana airdrop 100000 ALA2cnz41Wa2v2EYUdkYHsg7VnKsbH1j7secM5aiP8k && solana airdrop 100000 8Ers2bBEWExdrh7KDFTrRbauPbFeEvsHz3UX4vxcK9xY && solana airdrop 10000 BEKmoiPHRUxUPik2WQuKqkoFLLkieyNPrTDup5h8c9S7 From 0af02e86ce592189ce01f622182ad7e8fbaca0de Mon Sep 17 00:00:00 2001 From: ananas-block <58553958+ananas-block@users.noreply.github.com> Date: Mon, 13 Mar 2023 22:42:24 +0000 Subject: [PATCH 02/10] Jorrit add custom errors for transaction class and transaction parameters (#38) * implemented custom errors in transaction class not tested * added getAssetPubkeys tests and fixed the fn * added no u64 errors * completed deposit tests for transaction parameters * added functional TransactionParameters tests * transaction parameters tests work clean functional + errors * removed transaction class errors after refactor * removed prints * fixed verifiers for tx params refactor * functional tests except user class run * user class functional tests run * adapted circuit tests * verifier two functional test runs * verifier two tests runs * adapted remaining system programs tests * fixed tests after rebase add custom errors transaction, utxo, verifier classes (#41) * added custom errors transaction, utxo, verifier classes * relaxed version requirement on solana web3.js logs for the testing changes: added the update merkle tree call commitment changed in the leaves account data added the update merkle tree call Co-authored-by: Abdul Qadir Shaikh deleted groth16-solana and replaced by crates.io import light-verifier-sdk: Provide program keys in bs58 format Use our light-macros crate to provide program IDs to light-verifier-sdk in bs58 format (which gets converted to bytes during compilation time). Thanks to that, we also don't have to use the deprecated `Pubkey::new()` associated method. add custom errors account (#44) * added account custom errors * removed sdk build errors fixed transaction config ID (#46) relayer commander for tests fixed: socket i/o timeout issue command added Add Github Actions CI jobs (#32) * Add Github Actions CI jobs * Fix cargo fmt issues * tests: Provide output UTXOs as transaction parameters ata shield unshield pass in upd (WIP) (#45) * ata shield unshield pass in upd enabled: unshield, transfer user.getBalance:permissioned balances even if 0 added balance checks and todos to unshield user test unshield -> getTxparams refactor + getRelayer call transfer -> getTxParams &tested * tests run: disabled leafindex check in getUnspentUtxos tho * tests all running * remove console logs * removed index checker in getUnspentUtxos * clean function params getUnspentUtxos sub module fetched rm light-macros cleans the logs removed the unused relayer script removed extra consols useWallet changes resolved failing test updated the wait time and verifierZero call reverted the script change added script for running the browser wallet tests fix loopless of browser command switch to docker solana validator changes: script changes changes: added build and install script for relayer fixed typescript issues in relayer remove for unbound issue cleanups added relayer custom errors (#49) * added relayer custom errors * increased relayer fee in mock-verifier tests rebase from main re added the removed package-lock.json resolve long changes Jorrit refactor createOutUtxos (#50) * renamed amount, extraSolAmount, account * renamed Action.DEPOSIT, WITHDRAWAL, to SHIELD, UNSHIELD * added error tests * fixed errors * removed commented code * renamed test * fixed user tests * added comment * made errors custom * improved shielded recipients check for transfer * renamed tests Jorrit add custom errors provider (#47) * added custom errors provider and tests * fixed rebase conflicts and added a check in createUtxos * unskipped a test action enum checking with finalized user and provider class refactored transaction and verifier refactored spl support and check changed provider changes and ts errors fixed changes: errors handles and conditions remove seperate static calls checks changes reset the test scripts hot fixes in provider for failing test-caes fixes: user tests cases light-sdk test cases fixups verifier tests fixups nodeWallet sign message changes long changes reverted Jorrit refactor select in utxos (#54) * selectInUtxos functional tests with 2 inputs + custom errors + some error tests * added failed utxo combination and 3 in utxo tests * tests pass with refactored selectInUtxos and createUtxos * removed commented code * fixed sort Refactored user and add custom errors (#56) * refactored user class, and added custom errors * resolved rebase errors reverted commits --- build-sdk.sh | 5 + build.sh | 5 + light-sdk-ts/src/errors.ts | 4 +- light-sdk-ts/src/merkleTree/solMerkleTree.ts | 7 +- light-sdk-ts/src/test-utils/createAccounts.ts | 4 +- .../src/test-utils/functionalCircuit.ts | 2 +- .../src/test-utils/initLookUpTable.ts | 3 +- light-sdk-ts/src/test-utils/testChecks.ts | 2 + light-sdk-ts/src/transaction.ts | 86 +-- light-sdk-ts/src/verifiers/verifierOne.ts | 7 +- light-sdk-ts/src/verifiers/verifierZero.ts | 7 +- light-sdk-ts/src/wallet/buildBalance.ts | 2 + light-sdk-ts/src/wallet/index.ts | 1 + light-sdk-ts/src/wallet/provider.ts | 93 +-- light-sdk-ts/src/wallet/useWallet.ts | 80 +++ light-sdk-ts/src/wallet/user.ts | 68 +- light-sdk-ts/tests/provider.test.ts | 25 +- light-sdk-ts/tests/transaction.test.ts | 16 +- light-system-programs/package.json | 1 - light-system-programs/runRelayer.sh | 6 - .../tests/browser_wallet_tests.ts | 261 -------- .../tests/functional_tests.ts | 39 +- .../tests/merkle_tree_tests.ts | 4 +- .../tests/mock/useWalletMock.ts | 120 ---- light-system-programs/tests/provider.test.ts | 10 +- light-system-programs/tests/user_tests.ts | 18 +- light-system-programs/tests/verifier_tests.ts | 8 +- light-system-programs/tsconfig.json | 4 +- mock-app-verifier/sdk/src/verifier.ts | 4 +- mock-app-verifier/tests/functional_test.ts | 4 +- mock-app-verifier/tests/verifier_tests.ts | 4 +- node_modules/.yarn-integrity | 10 + relayer/package-lock.json | 600 ++++++++++++------ relayer/package.json | 1 + relayer/src/index.ts | 6 +- relayer/src/relay.ts | 7 +- relayer/src/sendTransaction.ts | 7 +- relayer/tsconfig.json | 2 + relayer/yarn.lock | 110 ++-- yarn.lock | 4 + 40 files changed, 768 insertions(+), 879 deletions(-) create mode 100644 light-sdk-ts/src/wallet/useWallet.ts delete mode 100644 light-system-programs/runRelayer.sh delete mode 100644 light-system-programs/tests/browser_wallet_tests.ts delete mode 100644 light-system-programs/tests/mock/useWalletMock.ts create mode 100644 node_modules/.yarn-integrity create mode 100644 yarn.lock diff --git a/build-sdk.sh b/build-sdk.sh index 8b9d19c226..10a064301f 100755 --- a/build-sdk.sh +++ b/build-sdk.sh @@ -20,3 +20,8 @@ pushd mock-app-verifier rm -rf node_modules yarn popd + +pushd relayer +rm -rf node_modules +yarn +popd diff --git a/build.sh b/build.sh index 484ae480d2..77b4312c06 100755 --- a/build.sh +++ b/build.sh @@ -15,3 +15,8 @@ popd pushd light-circuits yarn install popd + +pushd relayer +yarn install +yarn run build +popd diff --git a/light-sdk-ts/src/errors.ts b/light-sdk-ts/src/errors.ts index 1ac04ec494..c8184090a9 100644 --- a/light-sdk-ts/src/errors.ts +++ b/light-sdk-ts/src/errors.ts @@ -71,13 +71,13 @@ export enum ProviderErrorCode { SOL_MERKLE_TREE_UNDEFINED = "SOL_MERKLE_TREE_UNDEFINED", ANCHOR_PROVIDER_UNDEFINED = "ANCHOR_PROVIDER_UNDEFINED", PROVIDER_UNDEFINED = "PROVIDER_UNDEFINED", - NODE_WALLET_AND_BROWSER_WALLET_UNDEFINED = "NODE_WALLET_AND_BROWSER_WALLET_UNDEFINED", + WALLET_UNDEFINED = "WALLET_UNDEFINED", NODE_WALLET_UNDEFINED = "NODE_WALLET_UNDEFINED", URL_UNDEFINED = "URL_UNDEFINED", CONNECTION_UNDEFINED = "CONNECTION_UNDEFINED", CONNECTION_DEFINED = "CONNECTION_DEFINED", KEYPAIR_UNDEFINED = "KEYPAIR_UNDEFINED", - NODE_WALLET_AND_BROWSER_WALLET_DEFINED = "NODE_WALLET_AND_BROWSER_WALLET_DEFINED", + WALLET_DEFINED = "WALLET_DEFINED", MERKLE_TREE_NOT_INITIALIZED = "MERKLE_TREE_NOT_INITIALIZED", } diff --git a/light-sdk-ts/src/merkleTree/solMerkleTree.ts b/light-sdk-ts/src/merkleTree/solMerkleTree.ts index a71365535b..bd004386f5 100644 --- a/light-sdk-ts/src/merkleTree/solMerkleTree.ts +++ b/light-sdk-ts/src/merkleTree/solMerkleTree.ts @@ -67,15 +67,12 @@ export class SolMerkleTree { const mtFetched = await merkleTreeProgram.account.merkleTree.fetch( merkleTreePubkey, + "confirmed", ); const merkleTreeIndex = mtFetched.nextIndex; - // console.log( - // "getCompressedLeaves merkleTreeIndex", - // merkleTreeIndex.toNumber(), - // ); + merkleTreeProgram.account.twoLeavesBytesPda.all(); - // merkleTreeProgram.account.twoLeavesBytesPda let leavesAccounts: Array<{ account: QueuedLeavesPda; diff --git a/light-sdk-ts/src/test-utils/createAccounts.ts b/light-sdk-ts/src/test-utils/createAccounts.ts index a6a4644c2e..88b2a17150 100644 --- a/light-sdk-ts/src/test-utils/createAccounts.ts +++ b/light-sdk-ts/src/test-utils/createAccounts.ts @@ -288,8 +288,8 @@ export async function createTestAccounts( ); } - let balanceUserToken = null; - let userSplAccount = null; + let balanceUserToken: null | any = null; + let userSplAccount: PublicKey | null = null; try { let tokenCtx = TOKEN_REGISTRY.find((t) => t.symbol === "USDC"); if (userTokenAccount) { diff --git a/light-sdk-ts/src/test-utils/functionalCircuit.ts b/light-sdk-ts/src/test-utils/functionalCircuit.ts index 7ca8713453..f709821c33 100644 --- a/light-sdk-ts/src/test-utils/functionalCircuit.ts +++ b/light-sdk-ts/src/test-utils/functionalCircuit.ts @@ -40,7 +40,7 @@ export async function functionalCircuitTest( outputUtxos: [deposit_utxo1], merkleTreePubkey: mockPubkey, sender: mockPubkey, - senderFee: lightProvider.nodeWallet!.publicKey, + senderFee: lightProvider.wallet!.publicKey, verifier: verifier, lookUpTable: mockPubkey, action: Action.SHIELD, diff --git a/light-sdk-ts/src/test-utils/initLookUpTable.ts b/light-sdk-ts/src/test-utils/initLookUpTable.ts index 0997ea25e7..0cfbdecd95 100644 --- a/light-sdk-ts/src/test-utils/initLookUpTable.ts +++ b/light-sdk-ts/src/test-utils/initLookUpTable.ts @@ -6,6 +6,7 @@ import { SystemProgram, sendAndConfirmTransaction, Transaction, + AccountInfo, } from "@solana/web3.js"; import * as anchor from "@coral-xyz/anchor"; import { TOKEN_PROGRAM_ID } from "@solana/spl-token"; @@ -80,7 +81,7 @@ export async function initLookUpTable( recentSlot: number, extraAccounts?: Array, ): Promise { - var lookUpTableInfoInit = null; + var lookUpTableInfoInit: AccountInfo | null = null; if (lookupTableAddress != undefined) { lookUpTableInfoInit = await provider.connection.getAccountInfo( lookupTableAddress, diff --git a/light-sdk-ts/src/test-utils/testChecks.ts b/light-sdk-ts/src/test-utils/testChecks.ts index 446bd91f0c..084e850ab4 100644 --- a/light-sdk-ts/src/test-utils/testChecks.ts +++ b/light-sdk-ts/src/test-utils/testChecks.ts @@ -126,6 +126,7 @@ export async function checkMerkleTreeBatchUpdateSuccess({ }) { var merkleTreeTmpStateAccount = await connection.getAccountInfo( merkleTreeUpdateState, + "confirmed", ); assert.equal( @@ -136,6 +137,7 @@ export async function checkMerkleTreeBatchUpdateSuccess({ var merkleTreeAccount = await merkleTreeProgram.account.merkleTree.fetch( merkle_tree_pubkey, + "confirmed", ); // Merkle tree is locked by merkleTreeUpdateState assert.equal( diff --git a/light-sdk-ts/src/transaction.ts b/light-sdk-ts/src/transaction.ts index 0c40832fc5..b09ec71617 100644 --- a/light-sdk-ts/src/transaction.ts +++ b/light-sdk-ts/src/transaction.ts @@ -7,6 +7,7 @@ import { VersionedTransaction, TransactionSignature, TransactionInstruction, + Transaction as createTransaction, } from "@solana/web3.js"; import * as anchor from "@coral-xyz/anchor"; import { TOKEN_PROGRAM_ID, getAccount } from "@solana/spl-token"; @@ -30,6 +31,7 @@ import { initLookUpTable, TransactionParametersErrorCode, Provider, + ADMIN_AUTH_KEYPAIR, } from "./index"; import { IDL_MERKLE_TREE_PROGRAM } from "./idls/index"; const snarkjs = require("snarkjs"); @@ -808,7 +810,7 @@ export class Transaction { "constructor", "Merkle tree not set in provider", ); - if (!provider.browserWallet && !provider.nodeWallet) + if (!provider.wallet) throw new TransactionError( TransactionErrorCode.WALLET_UNDEFINED, "constructor", @@ -829,10 +831,7 @@ export class Transaction { //TODO: change to check whether browser/node wallet are the same as signing address if (params.action === Action.SHIELD) { - let wallet = - this.provider.browserWallet !== undefined - ? this.provider.browserWallet - : this.provider.nodeWallet; + let wallet = this.provider.wallet; if ( wallet?.publicKey.toBase58() !== params.relayer.accounts.relayerPubkey.toBase58() && @@ -1103,7 +1102,7 @@ export class Transaction { IDL_MERKLE_TREE_PROGRAM, merkleTreeProgramId, // @ts-ignore - this.provider.browserWallet && this.provider, + this.provider.provider, ); let root = Uint8Array.from( leInt2Buff( @@ -1114,6 +1113,7 @@ export class Transaction { let merkle_tree_account_data = await this.merkleTreeProgram.account.merkleTree.fetch( this.provider.solMerkleTree.pubkey, + "confirmed", ); // @ts-ignore: unknown type error merkle_tree_account_data.roots.map((x: any, index: any) => { @@ -1509,7 +1509,7 @@ export class Transaction { async sendTransaction(ix: any): Promise { if (false) { - // TODO: replace this with (this.provider.browserWallet.pubkey != new relayer... this.relayer + // TODO: replace this with (this.provider.wallet.pubkey != new relayer... this.relayer // then we know that an actual relayer was passed in and that it's supposed to be sent to one. // we cant do that tho as we'd want to add the default relayer to the provider itself. // so just pass in a flag here "shield, unshield, transfer" -> so devs don't have to know that it goes to a relayer. @@ -1592,18 +1592,7 @@ export class Transaction { let retries = 3; let res; while (retries > 0) { - if (this.provider.browserWallet) { - // TODO: versiontx?? - console.error("versioned tx might throw here"); - tx = await this.provider.browserWallet.signTransaction(tx); - // throw new Error( - // "versioned transaction in browser not implemented yet", - // ); - } else { - /** Just need to define relayer pubkey as signer a creation */ - tx.sign([this.provider.nodeWallet!]); - } - + tx = await this.provider.wallet.signTransaction(tx); try { let serializedTx = tx.serialize(); @@ -1642,11 +1631,11 @@ export class Transaction { "", ); - if (!this.provider.nodeWallet && !this.provider.browserWallet) + if (!this.provider.wallet) throw new TransactionError( TransactionErrorCode.WALLET_UNDEFINED, "sendAndConfirmTransaction", - "Cannot use sendAndConfirmTransaction without payer or browserWallet", + "Cannot use sendAndConfirmTransaction without wallet", ); await this.getRootIndex(); @@ -1692,11 +1681,11 @@ export class Transaction { // TODO: deal with this: set own payer just for that? where is this used? // This is used by applications not the relayer async closeVerifierState(): Promise { - if (!this.provider.nodeWallet && !this.provider.browserWallet) + if (!this.provider.wallet) throw new TransactionError( TransactionErrorCode.WALLET_UNDEFINED, "closeVerifierState", - "Cannot use closeVerifierState without payer or browserWallet", + "Cannot use closeVerifierState without wallet", ); if (!this.params) throw new TransactionError( @@ -1711,21 +1700,27 @@ export class Transaction { "", ); if (this.appParams) { - return await this.appParams?.verifier.verifierProgram.methods - .closeVerifierState() - .accounts({ - ...this.params.accounts, - }) - .signers([this.provider.nodeWallet!]) // TODO: browserwallet? or only ever used by relayer? - .rpc(confirmConfig); + const transaction = new createTransaction().add( + this.appParams?.verifier.verifierProgram.methods + .closeVerifierState() + .accounts({ + ...this.params.accounts, + }) + .instruction(), + ); + + return await this.provider.wallet!.sendAndConfirmTransaction(transaction); } else { - return await this.params?.verifier.verifierProgram.methods - .closeVerifierState() - .accounts({ - ...this.params.accounts, - }) - .signers([this.provider.nodeWallet!]) // TODO: browserwallet? or only ever used by relayer? - .rpc(confirmConfig); + const transaction = new createTransaction().add( + await this.params?.verifier.verifierProgram.methods + .closeVerifierState() + .accounts({ + ...this.params.accounts, + }) + .instruction(), + ); + + return await this.provider.wallet!.sendAndConfirmTransaction(transaction); } } @@ -1913,14 +1908,12 @@ export class Transaction { "test values relayerRecipientAccountBalancePriorLastTx undefined", ); } - // Checking that nullifiers were inserted if (new BN(this.proofInput.publicAmount).toString() === "0") { this.testValues.is_token = false; } else { this.testValues.is_token = true; } - for ( var i = 0; i < this.remainingAccounts.nullifierPdaPubkeys?.length; @@ -1946,6 +1939,7 @@ export class Transaction { leavesAccountData = await this.merkleTreeProgram.account.twoLeavesBytesPda.fetch( this.remainingAccounts.leavesPdaPubkeys[i].pubkey, + "confirmed", ); assert( @@ -1963,7 +1957,6 @@ export class Transaction { this.provider.solMerkleTree.pubkey.toBase58(), "merkleTreePubkey not inserted correctly", ); - for (var j = 0; j < this.params.encryptedUtxos.length / 256; j++) { // console.log(j); @@ -2035,7 +2028,10 @@ export class Transaction { try { const merkleTreeAfterUpdate = - await this.merkleTreeProgram.account.merkleTree.fetch(MERKLE_TREE_KEY); + await this.merkleTreeProgram.account.merkleTree.fetch( + MERKLE_TREE_KEY, + "confirmed", + ); console.log( "Number(merkleTreeAfterUpdate.nextQueuedIndex) ", Number(merkleTreeAfterUpdate.nextQueuedIndex), @@ -2043,6 +2039,7 @@ export class Transaction { leavesAccountData = await this.merkleTreeProgram.account.twoLeavesBytesPda.fetch( this.remainingAccounts.leavesPdaPubkeys[0].pubkey, + "confirmed", ); console.log( `${Number(leavesAccountData.leftLeafIndex)} + ${ @@ -2072,6 +2069,7 @@ export class Transaction { var recipientFeeAccountBalance = await this.provider.provider.connection.getBalance( this.params.accounts.recipientFee, + "confirmed", ); console.log( "testValues.recipientFeeBalancePriorTx: ", @@ -2081,6 +2079,7 @@ export class Transaction { var senderFeeAccountBalance = await this.provider.provider.connection.getBalance( this.params.relayer.accounts.relayerPubkey, + "confirmed", ); assert( recipientFeeAccountBalance == @@ -2157,6 +2156,7 @@ export class Transaction { var senderFeeAccountBalance = await this.provider.provider.connection.getBalance( this.params.accounts.senderFee, + "confirmed", ); assert( @@ -2182,11 +2182,13 @@ export class Transaction { ) { var relayerAccount = await this.provider.provider.connection.getBalance( this.params.relayer.accounts.relayerRecipient, + "confirmed", ); var recipientFeeAccount = await this.provider.provider.connection.getBalance( this.params.accounts.recipientFee, + "confirmed", ); // console.log("relayerAccount ", relayerAccount); @@ -2269,11 +2271,13 @@ export class Transaction { var relayerAccount = await this.provider.provider.connection.getBalance( this.params.relayer.accounts.relayerRecipient, + "confirmed", ); var recipientFeeAccount = await this.provider.provider.connection.getBalance( this.params.accounts.recipientFee, + "confirmed", ); // console.log("relayerAccount ", relayerAccount); diff --git a/light-sdk-ts/src/verifiers/verifierOne.ts b/light-sdk-ts/src/verifiers/verifierOne.ts index 9bb47ce4e8..951ece748f 100644 --- a/light-sdk-ts/src/verifiers/verifierOne.ts +++ b/light-sdk-ts/src/verifiers/verifierOne.ts @@ -111,14 +111,11 @@ export class VerifierOne implements Verifier { "getInstructions", "verifier one: params.encryptedUtxos undefined", ); - if ( - !transaction.provider.browserWallet && - !transaction.provider.nodeWallet - ) { + if (!transaction.provider.wallet) { throw new VerifierError( TransactionErrorCode.WALLET_UNDEFINED, "getInstructions", - "verifier one: Payer(browserwallet, nodewallet) not defined", + "verifier one: Payer(wallet) not defined", ); } if (!this.verifierProgram) diff --git a/light-sdk-ts/src/verifiers/verifierZero.ts b/light-sdk-ts/src/verifiers/verifierZero.ts index bcf6ed8e24..1ec415c153 100644 --- a/light-sdk-ts/src/verifiers/verifierZero.ts +++ b/light-sdk-ts/src/verifiers/verifierZero.ts @@ -114,14 +114,11 @@ export class VerifierZero implements Verifier { "getInstructions", "verifier zero: params.encryptedUtxos undefined", ); - if ( - !transaction.provider.browserWallet && - !transaction.provider.nodeWallet - ) { + if (!transaction.provider.wallet) { throw new VerifierError( TransactionErrorCode.WALLET_UNDEFINED, "getInstructions", - "verifier zero: Payer(browserwallet, nodewallet) not defined", + "verifier zero: Payer(wallet) not defined", ); } if (!this.verifierProgram) diff --git a/light-sdk-ts/src/wallet/buildBalance.ts b/light-sdk-ts/src/wallet/buildBalance.ts index e307250225..7039cd03b7 100644 --- a/light-sdk-ts/src/wallet/buildBalance.ts +++ b/light-sdk-ts/src/wallet/buildBalance.ts @@ -54,6 +54,7 @@ export async function getUnspentUtxo( )[0]; let accountInfo = await provider.connection.getAccountInfo( nullifierPubkey, + "confirmed", ); if ( accountInfo == null && @@ -130,6 +131,7 @@ export async function getUnspentUtxos({ )[0]; let accountInfo = await provider.connection.getAccountInfo( nullifierPubkey, + "confirmed", ); // console.log( // "inserted -- spent?", diff --git a/light-sdk-ts/src/wallet/index.ts b/light-sdk-ts/src/wallet/index.ts index 0209677740..ceca2809fa 100644 --- a/light-sdk-ts/src/wallet/index.ts +++ b/light-sdk-ts/src/wallet/index.ts @@ -3,3 +3,4 @@ export * from "./user"; export * from "./provider"; export * from "./createOutUtxos"; export * from "./selectInUtxos"; +export * from "./useWallet"; diff --git a/light-sdk-ts/src/wallet/provider.ts b/light-sdk-ts/src/wallet/provider.ts index e398113066..b822993d53 100644 --- a/light-sdk-ts/src/wallet/provider.ts +++ b/light-sdk-ts/src/wallet/provider.ts @@ -3,7 +3,6 @@ import { AnchorProvider, BN, setProvider, - Wallet, } from "@coral-xyz/anchor"; import { SolMerkleTree } from "../merkleTree"; import { @@ -11,22 +10,25 @@ import { Keypair as SolanaKeypair, Connection, ConfirmOptions, + Keypair, } from "@solana/web3.js"; import { ADMIN_AUTH_KEYPAIR, initLookUpTableFromFile } from "../test-utils"; import { MERKLE_TREE_HEIGHT, MERKLE_TREE_KEY } from "../constants"; import { MerkleTree } from "../merkleTree/merkleTree"; import { ProviderError, ProviderErrorCode } from "../errors"; +import { useWallet } from "./useWallet"; const axios = require("axios"); const circomlibjs = require("circomlibjs"); /** * use: signMessage, signTransaction, sendAndConfirmTransaction, publicKey from the useWallet() hook in solana/wallet-adapter and {connection} from useConnection() */ -export type BrowserWallet = { +export type Wallet = { signMessage: (message: Uint8Array) => Promise; signTransaction: (transaction: any) => Promise; sendAndConfirmTransaction: (transaction: any) => Promise; publicKey: PublicKey; + node_wallet?: boolean; }; /** @@ -35,8 +37,7 @@ export type BrowserWallet = { // TODO: add relayer here; default deriv, if passed in can choose custom relayer. export class Provider { connection?: Connection; - browserWallet?: BrowserWallet; - nodeWallet?: SolanaKeypair; + wallet: Wallet; confirmConfig: ConfirmOptions; poseidon: any; lookUpTable?: PublicKey; @@ -46,43 +47,36 @@ export class Provider { minimumLamports: BN; /** - * Init either with nodeWallet or browserWallet. Feepayer is the provided wallet + * Initialize with Wallet or SolanaKeypair. Feepayer is the provided wallet * Optionally provide confirmConfig, Default = 'confirmed'. */ constructor({ - nodeWallet, - browserWallet, + wallet, confirmConfig, connection, url = "http://127.0.0.1:8899", minimumLamports = new BN(5000 * 30), }: { - nodeWallet?: SolanaKeypair; - browserWallet?: BrowserWallet; + wallet: Wallet | SolanaKeypair; confirmConfig?: ConfirmOptions; connection?: Connection; url?: string; minimumLamports?: BN; }) { - if (nodeWallet && browserWallet) + if (!wallet) throw new ProviderError( - ProviderErrorCode.NODE_WALLET_AND_BROWSER_WALLET_DEFINED, - "constructor", - "Both node and browser environments provided chose one.", - ); - if (!nodeWallet && !browserWallet) - throw new ProviderError( - ProviderErrorCode.NODE_WALLET_AND_BROWSER_WALLET_UNDEFINED, + ProviderErrorCode.WALLET_UNDEFINED, "constructor", "No wallet provided.", ); - if (browserWallet && !connection) + + if (!("secretKey" in wallet) && !connection) throw new ProviderError( ProviderErrorCode.CONNECTION_UNDEFINED, "constructor", "No connection provided with browser wallet.", ); - if (nodeWallet && connection) + if ("secretKey" in wallet && connection) throw new ProviderError( ProviderErrorCode.CONNECTION_DEFINED, "constructor", @@ -92,8 +86,8 @@ export class Provider { this.confirmConfig = confirmConfig || { commitment: "confirmed" }; this.minimumLamports = minimumLamports; - if (nodeWallet) { - this.nodeWallet = nodeWallet; + if ("secretKey" in wallet) { + this.wallet = useWallet(wallet as SolanaKeypair, url); // TODO: check if we can remove this.url! this.url = url; // TODO: check if we can remove this.provider! @@ -101,18 +95,16 @@ export class Provider { setProvider(AnchorProvider.env()); this.provider = AnchorProvider.local(url, confirmConfig); } - } - if (browserWallet) { - //@ts-ignore + } else { this.connection = connection; this.provider = { connection: connection! }; - this.browserWallet = browserWallet; + this.wallet = wallet as Wallet; } } static async loadMock() { let mockProvider = new Provider({ - nodeWallet: ADMIN_AUTH_KEYPAIR, + wallet: ADMIN_AUTH_KEYPAIR, url: "mock", }); await mockProvider.loadPoseidon(); @@ -127,7 +119,7 @@ export class Provider { private async fetchLookupTable() { try { - if (this.browserWallet) { + if (!this.wallet.node_wallet) { const response = await axios.get("http://localhost:3331/lookuptable"); this.lookUpTable = new PublicKey(response.data.data); return; @@ -143,7 +135,7 @@ export class Provider { private async fetchMerkleTree(merkleTreePubkey: PublicKey) { try { - if (this.browserWallet) { + if (!this.wallet.node_wallet) { const response = await axios.get("http://localhost:3331/merkletree"); const fetchedMerkleTree: MerkleTree = response.data.data.merkleTree; @@ -161,6 +153,7 @@ export class Provider { const merkletreeIsInited = await this.provider!.connection.getAccountInfo( merkleTreePubkey, + "confirmed" ); if (!merkletreeIsInited) { throw new ProviderError( @@ -198,51 +191,21 @@ export class Provider { * @param walletContext get from useWallet() hook * @param confirmConfig optional, default = 'confirmed' * @param connection get from useConnection() hook + * @param url full-node rpc endpoint to instantiate a Connection */ - static async browser( - browserWallet: BrowserWallet, - connection: Connection, + static async initialize( + wallet: Wallet | SolanaKeypair | Keypair, + connection?: Connection, confirmConfig?: ConfirmOptions, + url?: string, ): Promise { - if (!browserWallet) { + if (!wallet) { throw new ProviderError(ProviderErrorCode.KEYPAIR_UNDEFINED, "browser"); } - if (!connection) { - throw new ProviderError( - ProviderErrorCode.CONNECTION_UNDEFINED, - "browser", - ); - } - const provider = new Provider({ - browserWallet, + wallet, confirmConfig, connection, - }); - await provider.loadPoseidon(); - await provider.fetchLookupTable(); - await provider.fetchMerkleTree(MERKLE_TREE_KEY); - return provider; - } - - /** - * Only use this if you have access to a local keypair. If you use WalletAdapter, e.g. in a browser, use getProvider() instead. - * @param keypair - user's keypair to sign transactions - * @param confirmConfig optional, default = 'confirmed' - * @param url full-node rpc endpoint to instantiate a Connection - */ - static async native( - keypair: SolanaKeypair, - url?: string, - confirmConfig?: ConfirmOptions, - ): Promise { - if (!keypair) { - throw new ProviderError(ProviderErrorCode.KEYPAIR_UNDEFINED, "native"); - } - - const provider = new Provider({ - nodeWallet: keypair, - confirmConfig, url, }); await provider.loadPoseidon(); diff --git a/light-sdk-ts/src/wallet/useWallet.ts b/light-sdk-ts/src/wallet/useWallet.ts new file mode 100644 index 0000000000..01abba20fd --- /dev/null +++ b/light-sdk-ts/src/wallet/useWallet.ts @@ -0,0 +1,80 @@ +import { + Connection, + Keypair, + sendAndConfirmTransaction, +} from "@solana/web3.js"; +import { PublicKey, Transaction } from "@solana/web3.js"; +import { sign } from "tweetnacl"; + +// Mock Solana web3 library +class Provider { + _publicKey: PublicKey; + _keypair: Keypair; + _connection: Connection; + _url: string; + + constructor(keypair: Keypair, url: string) { + this._publicKey = keypair.publicKey; + this._keypair = keypair; + this._connection = new Connection(url); + this._url = url; + } + + signTransaction = async (tx: any): Promise => { + await tx.sign([this._keypair!]); + return tx; + }; + + signAllTransactions = async ( + transactions: Transaction[], + ): Promise => { + const signedTxs = await Promise.all( + transactions.map(async (tx) => { + return await this.signTransaction(tx); + }), + ); + return signedTxs; + }; + + signMessage = async (message: Uint8Array): Promise => { + return sign.detached(message, this._keypair.secretKey); + }; + sendAndConfirmTransaction = async ( + transaction: Transaction, + signers = [], + ): Promise => { + try { + const response = await sendAndConfirmTransaction( + this._connection, + transaction, + [this._keypair, ...signers], + { + commitment: "confirmed", + }, + ); + console.log(response); + return response; + } catch (error) { + console.log("errrr", error); + throw error; + } + }; +} + +// Mock useWallet hook +export const useWallet = ( + wallet: Keypair, + url: string = "http://127.0.0.1:8899", + node_wallet: boolean = true, +) => { + url = url !== "mock" ? url : "http://127.0.0.1:8899"; + const provider = new Provider(wallet, url); + return { + publicKey: provider._publicKey, + sendAndConfirmTransaction: provider.sendAndConfirmTransaction, + signMessage: provider.signMessage, + signTransaction: provider.signTransaction, + signAllTransactions: provider.signAllTransactions, + node_wallet, + }; +}; diff --git a/light-sdk-ts/src/wallet/user.ts b/light-sdk-ts/src/wallet/user.ts index 32ac1b7c8e..69d4283286 100644 --- a/light-sdk-ts/src/wallet/user.ts +++ b/light-sdk-ts/src/wallet/user.ts @@ -2,6 +2,7 @@ import { Keypair as SolanaKeypair, PublicKey, SystemProgram, + Transaction as createTransaction, } from "@solana/web3.js"; import { Account } from "../account"; import { Utxo } from "../utxo"; @@ -11,6 +12,7 @@ import { sign } from "tweetnacl"; import * as splToken from "@solana/spl-token"; import { BN } from "@coral-xyz/anchor"; const circomlibjs = require("circomlibjs"); + import { FEE_ASSET, UTXO_MERGE_MAXIMUM, @@ -23,16 +25,6 @@ import { merkleTreeProgramId, MINIMUM_LAMPORTS, } from "../constants"; -import { - ADMIN_AUTH_KEY, - ADMIN_AUTH_KEYPAIR, - createTestAccounts, - MINT, - newAccountWithTokens, - updateMerkleTreeForTest, - userTokenAccount, - USER_TOKEN_ACCOUNT, -} from "../test-utils/index"; import { SolMerkleTree } from "../merkleTree/index"; import { VerifierZero } from "../verifiers/index"; import { Relayer } from "../relayer"; @@ -108,7 +100,7 @@ export class User { utxos?: Utxo[]; account?: Account; }) { - if (!provider.browserWallet && !provider.nodeWallet) + if (!provider.wallet) throw new UserError( UserErrorCode.NO_WALLET_PROVIDED, "constructor", @@ -242,9 +234,7 @@ export class User { // TODO: pull an actually implemented relayer here via http request // This will then also remove the need to fund the relayer recipient account... let mockRelayer = new Relayer( - this.provider.browserWallet! - ? this.provider.browserWallet.publicKey - : this.provider.nodeWallet!.publicKey, + this.provider.wallet!.publicKey, this.provider.lookUpTable!, SolanaKeypair.generate().publicKey, ataCreationFee ? new anchor.BN(500000) : new anchor.BN(100000), @@ -349,7 +339,7 @@ export class User { sender: action === Action.SHIELD ? userSplAccount : undefined, senderFee: action === Action.SHIELD - ? this.provider.nodeWallet!.publicKey + ? this.provider.wallet!.publicKey : undefined, recipient: recipientSPLAddress, recipientFee, @@ -445,7 +435,7 @@ export class User { } else { userSplAccount = splToken.getAssociatedTokenAddressSync( tokenCtx!.tokenAccount, - this.provider!.nodeWallet!.publicKey, + this.provider!.wallet!.publicKey, ); } @@ -470,15 +460,19 @@ export class User { ); try { - await splToken.approve( - this.provider.provider!.connection, - this.provider.nodeWallet!, - userSplAccount, //tokenAccount, - AUTHORITY, //TODO: make dynamic based on verifier - this.provider.nodeWallet!, //USER_TOKEN_ACCOUNT, // owner2 - // change to bigint - publicAmountSpl.toNumber(), - [this.provider.nodeWallet!], + const transaction = new createTransaction().add( + splToken.createApproveInstruction( + userSplAccount, + AUTHORITY, + this.provider.wallet!.publicKey, + publicAmountSpl.toNumber(), + [this.provider.wallet!.publicKey], + ), + ); + console.log({ transaction }); + + const response = await this.provider.wallet!.sendAndConfirmTransaction( + transaction, ); } catch (e) { throw new UserError( @@ -515,7 +509,7 @@ export class User { } let response; - if (this.provider.browserWallet) { + if (!this.provider.wallet.node_wallet) { response = await axios.post("http://localhost:3331/updatemerkletree"); } @@ -635,7 +629,7 @@ export class User { } let response; - if (this.provider.browserWallet) { + if (!this.provider.wallet.node_wallet) { response = await axios.post("http://localhost:3331/updatemerkletree"); } return { txHash, response }; @@ -722,7 +716,7 @@ export class User { ); } let response; - if (this.provider.browserWallet) { + if (!this.provider.wallet.node_wallet) { response = await axios.post("http://localhost:3331/updatemerkletree"); } return { txHash, response }; @@ -763,22 +757,11 @@ export class User { this.provider = provider; } if (!this.seed) { - if (this.provider.nodeWallet && this.provider?.browserWallet) - throw new UserError( - UserErrorCode.NO_WALLET_PROVIDED, - "load", - "No payer or browser wallet provided", - ); - if (this.provider.nodeWallet) { - const signature: Uint8Array = sign.detached( + if (this.provider.wallet) { + const signature: Uint8Array = await this.provider.wallet.signMessage( message, - this.provider.nodeWallet.secretKey, ); this.seed = new anchor.BN(signature).toString(); - } else if (this.provider?.browserWallet) { - const signature: Uint8Array = - await this.provider.browserWallet.signMessage(message); - this.seed = new anchor.BN(signature).toString(); } else { throw new UserError( UserErrorCode.NO_WALLET_PROVIDED, @@ -787,6 +770,7 @@ export class User { ); } } + // get the provider? if (!this.provider.poseidon) { this.provider.poseidon = await circomlibjs.buildPoseidonOpt(); @@ -802,7 +786,7 @@ export class User { let leavesPdas = await SolMerkleTree.getInsertedLeaves( MERKLE_TREE_KEY, // @ts-ignore - this.provider.browserWallet && this.provider, + this.provider.provider, ); const params = { diff --git a/light-sdk-ts/tests/provider.test.ts b/light-sdk-ts/tests/provider.test.ts index 923956336c..c281091ab2 100644 --- a/light-sdk-ts/tests/provider.test.ts +++ b/light-sdk-ts/tests/provider.test.ts @@ -41,6 +41,7 @@ import { MERKLE_TREE_KEY, DEFAULT_ZERO, ProviderError, + useWallet, } from "../src"; import { MerkleTree } from "../src/merkleTree/merkleTree"; @@ -65,9 +66,9 @@ describe("Test Provider Functional", () => { it("Mock Provider", async () => { const lightProviderMock = await LightProvider.loadMock(); - assert.equal(lightProviderMock.browserWallet, undefined); + assert.equal(lightProviderMock.wallet.node_wallet,true); assert.equal( - lightProviderMock.nodeWallet?.publicKey.toBase58(), + lightProviderMock.wallet?.publicKey.toBase58(), ADMIN_AUTH_KEYPAIR.publicKey.toBase58(), ); assert.equal(lightProviderMock.url, "mock"); @@ -84,10 +85,10 @@ describe("Test Provider Functional", () => { ); }); - it("KEYPAIR_UNDEFINED native", async () => { + it("KEYPAIR_UNDEFINED Provider", async () => { await chai.assert.isRejected( // @ts-ignore - LightProvider.native(), + LightProvider.initialize(), ProviderErrorCode.KEYPAIR_UNDEFINED, ); }); @@ -95,7 +96,7 @@ describe("Test Provider Functional", () => { it("CONNECTION_DEFINED", async () => { expect(() => { // @ts-ignore - new LightProvider({ nodeWallet: ADMIN_AUTH_KEYPAIR, connection: {} }); + new LightProvider({ wallet: ADMIN_AUTH_KEYPAIR, connection: {} }); }) .to.throw(ProviderError) .includes({ @@ -104,14 +105,14 @@ describe("Test Provider Functional", () => { }); }); - it("NODE_WALLET_AND_BROWSER_WALLET_UNDEFINED", async () => { + it("WALLET_UNDEFINED", async () => { expect(() => { // @ts-ignore new LightProvider({}); }) .to.throw(ProviderError) .includes({ - code: ProviderErrorCode.NODE_WALLET_AND_BROWSER_WALLET_UNDEFINED, + code: ProviderErrorCode.WALLET_UNDEFINED, functionName: "constructor", }); }); @@ -119,7 +120,7 @@ describe("Test Provider Functional", () => { it("CONNECTION_UNDEFINED", async () => { expect(() => { // @ts-ignore - new LightProvider({ browserWallet: {} }); + new LightProvider({ wallet: {} }); }) .to.throw(ProviderError) .includes({ @@ -131,7 +132,7 @@ describe("Test Provider Functional", () => { it("KEYPAIR_UNDEFINED browser", async () => { await chai.assert.isRejected( // @ts-ignore - LightProvider.browser(), + LightProvider.initialize(), ProviderErrorCode.KEYPAIR_UNDEFINED, ); }); @@ -139,7 +140,7 @@ describe("Test Provider Functional", () => { it("KEYPAIR_UNDEFINED browser", async () => { await chai.assert.isRejected( // @ts-ignore - LightProvider.browser(), + LightProvider.initialize(), ProviderErrorCode.KEYPAIR_UNDEFINED, ); }); @@ -147,9 +148,11 @@ describe("Test Provider Functional", () => { it("CONNECTION_UNDEFINED browser", async () => { const mockKeypair = SolanaKeypair.generate(); + const wallet = useWallet(mockKeypair) + await chai.assert.isRejected( // @ts-ignore - LightProvider.browser(mockKeypair), + LightProvider.initialize(wallet), ProviderErrorCode.CONNECTION_UNDEFINED, ); }); diff --git a/light-sdk-ts/tests/transaction.test.ts b/light-sdk-ts/tests/transaction.test.ts index dbd564f5cd..ce2978c027 100644 --- a/light-sdk-ts/tests/transaction.test.ts +++ b/light-sdk-ts/tests/transaction.test.ts @@ -83,7 +83,7 @@ describe("Transaction Error Tests", () => { lookUpTable: lightProvider.lookUpTable, poseidon, sender: mockPubkey, - senderFee: lightProvider.nodeWallet?.publicKey, + senderFee: lightProvider.wallet?.publicKey, action: Action.SHIELD, }); }); @@ -236,7 +236,7 @@ describe("Transaction Error Tests", () => { // @ts-ignore solMerkleTree: {}, poseidon, - nodeWallet: lightProvider.nodeWallet, + wallet: lightProvider.wallet, }, params, }); @@ -252,7 +252,7 @@ describe("Transaction Error Tests", () => { // @ts-ignore solMerkleTree: {}, poseidon, - nodeWallet: lightProvider.nodeWallet, + wallet: lightProvider.wallet, }, params, }); @@ -323,7 +323,7 @@ describe("Transaction Functional Tests", () => { lookUpTable: lightProvider.lookUpTable, poseidon, sender: mockPubkey, - senderFee: lightProvider.nodeWallet?.publicKey, + senderFee: lightProvider.wallet?.publicKey, action: Action.SHIELD, }); lightProvider.solMerkleTree!.merkleTree = new MerkleTree(18, poseidon, [ @@ -342,7 +342,7 @@ describe("Transaction Functional Tests", () => { verifier: new VerifierZero(), poseidon, recipient: mockPubkey, - recipientFee: lightProvider.nodeWallet?.publicKey, + recipientFee: lightProvider.wallet?.publicKey, action: Action.UNSHIELD, relayer, }); @@ -513,7 +513,7 @@ describe("Transaction Functional Tests", () => { verifier: new VerifierZero(), poseidon, recipient: AUTHORITY, - recipientFee: lightProvider.nodeWallet?.publicKey, + recipientFee: lightProvider.wallet?.publicKey, action: Action.UNSHIELD, relayer: relayerConst, encryptedUtxos: new Uint8Array(256).fill(1), @@ -548,7 +548,7 @@ describe("Transaction Functional Tests", () => { verifier: new VerifierZero(), poseidon, recipient: AUTHORITY, - recipientFee: lightProvider.nodeWallet?.publicKey, + recipientFee: lightProvider.wallet?.publicKey, action: Action.UNSHIELD, relayer: relayerConst, encryptedUtxos: new Uint8Array(256).fill(1), @@ -649,7 +649,7 @@ describe("Transaction Functional Tests", () => { verifier: new VerifierZero(), poseidon, recipient: AUTHORITY, - recipientFee: lightProvider.nodeWallet?.publicKey, + recipientFee: lightProvider.wallet?.publicKey, action: Action.UNSHIELD, relayer: relayerConst, encryptedUtxos: new Uint8Array(256).fill(1), diff --git a/light-system-programs/package.json b/light-system-programs/package.json index 752a4c5e2d..2fb9c447a5 100644 --- a/light-system-programs/package.json +++ b/light-system-programs/package.json @@ -4,7 +4,6 @@ "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check", "test": "sh runTest.sh 'ts-mocha -t 2000000 tests/functional_tests.ts --exit'", "test-user": "sh runTest.sh 'ts-mocha -t 2000000 tests/user_tests.ts --exit'", - "test-browser-wallet": "ts-mocha -t 2000000 tests/browser_wallet_tests.ts --exit", "test-verifiers": "sh runTest.sh 'ts-mocha -t 2000000 tests/verifier_tests.ts --exit'", "test-merkle-tree": "sh runTest.sh 'ts-mocha -t 2000000 tests/merkle_tree_tests.ts --exit'", "test-provider": "sh runTest.sh 'ts-mocha -t 2000000 tests/provider.test.ts --exit'", diff --git a/light-system-programs/runRelayer.sh b/light-system-programs/runRelayer.sh deleted file mode 100644 index b9653619a4..0000000000 --- a/light-system-programs/runRelayer.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -e -solana airdrop 100000 ZBUKxVWviAJBy12edp5H6kvhcatGYW3BV4ijbgxpVSq && solana airdrop 100000 ALA2cnz41Wa2v2EYUdkYHsg7VnKsbH1j7secM5aiP8k && solana airdrop 100000 8Ers2bBEWExdrh7KDFTrRbauPbFeEvsHz3UX4vxcK9xY && solana airdrop 10000 BEKmoiPHRUxUPik2WQuKqkoFLLkieyNPrTDup5h8c9S7 -cd ../relayer && node lib/index.js -PID=$! -$1; -kill $PID; \ No newline at end of file diff --git a/light-system-programs/tests/browser_wallet_tests.ts b/light-system-programs/tests/browser_wallet_tests.ts deleted file mode 100644 index 68fc52b318..0000000000 --- a/light-system-programs/tests/browser_wallet_tests.ts +++ /dev/null @@ -1,261 +0,0 @@ -import * as anchor from "@coral-xyz/anchor"; -import { - Connection, - Keypair as SolanaKeypair, - PublicKey, -} from "@solana/web3.js"; -import _ from "lodash"; - -// TODO: add and use namespaces in SDK -import { - ADMIN_AUTH_KEYPAIR, - MINT, - Provider, - newAccountWithTokens, - User, - strToArr, - updateMerkleTreeForTest, -} from "light-sdk"; -import { useWallet } from "./mock/useWalletMock"; - -// TODO: remove deprecated function calls -describe("browser_wallet", () => { - let connection; - - before(() => { - connection = new Connection("http://127.0.0.1:8899"); - }); - - const userKeypair = ADMIN_AUTH_KEYPAIR; //new SolanaKeypair(); - const { signTransaction, signMessage, sendAndConfirmTransaction } = useWallet( - userKeypair, - connection, - ); - - it("(user class) shield SPL", async () => { - let amount = 20; - - let token = "USDC"; - - console.log("test user wallet: ", userKeypair.publicKey.toBase58()); - - const provider = await Provider.browser( - { - signMessage, - signTransaction, - sendAndConfirmTransaction, - publicKey: userKeypair.publicKey, - }, - connection, - ); // userKeypair - - let res = await provider.provider.connection.requestAirdrop( - userKeypair.publicKey, - 2_000_000_000, - ); - - await provider.provider.connection.confirmTransaction(res, "confirmed"); - - const user = await User.load(provider); - - await user.shield({ amount, token }); - - try { - console.log("updating merkle tree..."); - let initLog = console.log; - // console.log = () => {}; - await updateMerkleTreeForTest( - provider.provider?.connection!, - // provider.provider, - ); - // console.log = initLog; - console.log("✔️updated merkle tree!"); - } catch (e) { - console.log(e); - throw new Error("Failed to update merkle tree!"); - } - // TODO: add random amount and amount checks - // let balance = await user.getBalance({ latest: true }); - }); - - it.only("(user class) shield SOL", async () => { - let amount = 15; - let token = "SOL"; - - const provider = await Provider.browser( - { - signMessage, - signTransaction, - sendAndConfirmTransaction, - publicKey: userKeypair.publicKey, - }, - connection, - ); // userKeypair - - let res = await provider.provider.connection.requestAirdrop( - userKeypair.publicKey, - 4_000_000_000, - ); - - await provider.provider.connection.confirmTransaction(res, "confirmed"); - - const user = await User.load(provider); - - await user.shield({ amount, token }); - // TODO: add random amount and amount checks - try { - console.log("updating merkle tree..."); - let initLog = console.log; - console.log = () => {}; - await updateMerkleTreeForTest( - provider.provider?.connection!, - // provider.provider, - ); - console.log = initLog; - console.log("✔️updated merkle tree!"); - } catch (e) { - console.log(e); - throw new Error("Failed to update merkle tree!"); - } - }); - - it("(user class) unshield SPL", async () => { - let amount = 1; - let token = "USDC"; - let solRecipient = SolanaKeypair.generate(); - console.log("test user wallet: ", userKeypair.publicKey.toBase58()); - const provider = await Provider.native(userKeypair); // userKeypair - let recipientTokenAccount = await newAccountWithTokens({ - connection: provider.provider.connection, - MINT, - ADMIN_AUTH_KEYPAIR: userKeypair, - userAccount: solRecipient, - amount: new anchor.BN(0), - }); - // console.log("recipientTokenAccount: ", recipientTokenAccount.toBase58()); - let res = await provider.provider.connection.requestAirdrop( - userKeypair.publicKey, - 2_000_000_000, - ); - - await provider.provider.connection.confirmTransaction(res, "confirmed"); - const user = await User.load(provider); - await user.unshield({ amount, token, recipient: solRecipient.publicKey }); - - try { - console.log("updating merkle tree..."); - let initLog = console.log; - console.log = () => {}; - await updateMerkleTreeForTest( - provider.provider?.connection!, - // provider.provider, - ); - console.log = initLog; - console.log("✔️updated merkle tree!"); - } catch (e) { - console.log(e); - throw new Error("Failed to update merkle tree!"); - } - }); - it("(user class) transfer SPL", async () => { - let amount = 1; - let token = "USDC"; - console.log("test user wallet: ", userKeypair.publicKey.toBase58()); - const provider = await Provider.native(userKeypair); // userKeypair - const shieldedRecipient = - "19a20668193c0143dd96983ef457404280741339b95695caddd0ad7919f2d434"; - const encryptionPublicKey = - "LPx24bc92eecaf5e3904bc1f4f731a2b1e0a28adf445e800c4cff112eb7a3f5350b"; - - const recipient = new anchor.BN(shieldedRecipient, "hex"); - const recipientEncryptionPublicKey: Uint8Array = - strToArr(encryptionPublicKey); - - const user = await User.load(provider); - await user.transfer({ - amount, - token, - recipient, - recipientEncryptionPublicKey, // TODO: do shielded address - }); - // TODO: add balance checks - - try { - console.log("updating merkle tree..."); - let initLog = console.log; - console.log = () => {}; - await updateMerkleTreeForTest( - provider.provider?.connection!, - // provider.provider, - ); - console.log = initLog; - console.log("✔️updated merkle tree!"); - } catch (e) { - console.log(e); - throw new Error("Failed to update merkle tree!"); - } - }); - - it("(user class) transfer SOL", async () => { - let amount = 1; - let token = "SOL"; - const shieldedRecipient = - "19a20668193c0143dd96983ef457404280741339b95695caddd0ad7919f2d434"; - const encryptionPublicKey = - "LPx24bc92eecaf5e3904bc1f4f731a2b1e0a28adf445e800c4cff112eb7a3f5350b"; - - const recipient = new anchor.BN(shieldedRecipient, "hex"); - const recipientEncryptionPublicKey: Uint8Array = - strToArr(encryptionPublicKey); - const provider = await Provider.native(userKeypair); - const user = await User.load(provider); - await user.transfer({ - amount, - token, - recipient, - recipientEncryptionPublicKey, // TODO: do shielded address - }); - try { - console.log("updating merkle tree..."); - let initLog = console.log; - console.log = () => {}; - await updateMerkleTreeForTest( - provider.provider?.connection!, - // provider.provider, - ); - console.log = initLog; - console.log("✔️updated merkle tree!"); - } catch (e) { - console.log(e); - throw new Error("Failed to update merkle tree!"); - } - - // TODO: add random amount, recipient and amount checks - }); - - it.skip("(user class) unshield SOL", async () => { - let amount = 1; - let token = "SOL"; - let recipient = new PublicKey( - "E7jqevikamCMCda8yCsfNawj57FSotUZuref9MLZpWo1", - ); - const provider = await Provider.native(userKeypair); - const user = await User.load(provider); - await user.unshield({ amount, token, recipient }); - try { - console.log("updating merkle tree..."); - let initLog = console.log; - console.log = () => {}; - await updateMerkleTreeForTest( - provider.provider?.connection!, - // provider.provider, - ); - console.log = initLog; - console.log("✔️updated merkle tree!"); - } catch (e) { - console.log(e); - throw new Error("Failed to update merkle tree!"); - } - // TODO: add random amount and amount checks - }); -}); diff --git a/light-system-programs/tests/functional_tests.ts b/light-system-programs/tests/functional_tests.ts index 225eb8bacb..0e57dfdd3e 100644 --- a/light-system-programs/tests/functional_tests.ts +++ b/light-system-programs/tests/functional_tests.ts @@ -108,7 +108,7 @@ describe("verifier_program", () => { RELAYER_RECIPIENT = new anchor.web3.Account().publicKey; // userSplAccount = token.getAssociatedTokenAddressSync( // tokenCtx!.tokenAccount, - // this.provider!.nodeWallet!.publicKey, + // this.provider!.wallet!.publicKey, // ); }); @@ -193,7 +193,9 @@ describe("verifier_program", () => { verifierState: verifierState, }) .signers([ADMIN_AUTH_KEYPAIR]) - .rpc(confirmConfig); + .rpc({ + commitment: "confirmed", + }); console.log("tx" + i + ": " + tx); } @@ -257,9 +259,7 @@ describe("verifier_program", () => { depositAmount * 2, [USER_TOKEN_ACCOUNT], ); - const lightProvider = await Provider.native(ADMIN_AUTH_KEYPAIR); - - + const lightProvider = await Provider.initialize(ADMIN_AUTH_KEYPAIR); let deposit_utxo1 = new Utxo({ poseidon: POSEIDON, @@ -279,11 +279,11 @@ describe("verifier_program", () => { verifier: new VerifierOne(), poseidon: POSEIDON, lookUpTable: LOOK_UP_TABLE, - action: Action.SHIELD + action: Action.SHIELD, }); let tx = new Transaction({ provider: lightProvider, - params: txParams + params: txParams, }); await tx.compileAndProve(); @@ -326,9 +326,7 @@ describe("verifier_program", () => { for (var i = 0; i < 1; i++) { console.log("Deposit ", i); - const lightProvider = await Provider.native(ADMIN_AUTH_KEYPAIR); - - + const lightProvider = await Provider.initialize(ADMIN_AUTH_KEYPAIR); deposit_utxo1 = new Utxo({ poseidon: POSEIDON, @@ -348,11 +346,11 @@ describe("verifier_program", () => { verifier: new VerifierZero(), lookUpTable: LOOK_UP_TABLE, action: Action.SHIELD, - poseidon: POSEIDON + poseidon: POSEIDON, }); let tx = new Transaction({ provider: lightProvider, - params: txParams + params: txParams, }); await tx.compileAndProve(); @@ -390,7 +388,7 @@ describe("verifier_program", () => { const origin = new anchor.web3.Account(); var tokenRecipient = recipientTokenAccount; - const lightProvider = await Provider.native(ADMIN_AUTH_KEYPAIR); + const lightProvider = await Provider.initialize(ADMIN_AUTH_KEYPAIR); let relayer = new Relayer( ADMIN_AUTH_KEYPAIR.publicKey, @@ -399,8 +397,6 @@ describe("verifier_program", () => { new BN(100000), ); - - let txParams = new TransactionParameters({ inputUtxos: [decryptedUtxo1], merkleTreePubkey: MERKLE_TREE_KEY, @@ -469,7 +465,7 @@ describe("verifier_program", () => { const relayerRecipient = SolanaKeypair.generate().publicKey; const recipientFee = SolanaKeypair.generate().publicKey; - const lightProvider = await Provider.native(ADMIN_AUTH_KEYPAIR); + const lightProvider = await Provider.initialize(ADMIN_AUTH_KEYPAIR); await lightProvider.provider.connection.confirmTransaction( await lightProvider.provider.connection.requestAirdrop( @@ -497,11 +493,8 @@ describe("verifier_program", () => { new Utxo({ poseidon: POSEIDON, assets: inputUtxos[0].assets, - amounts: [ - new BN(0), - inputUtxos[0].amounts[1] - ] - }) + amounts: [new BN(0), inputUtxos[0].amounts[1]], + }), ], // outputUtxos: [new Utxo({poseidon: POSEIDON, assets: inputUtxos[0].assets, amounts: [inputUtxos[0].amounts[0], new BN(0)]})], @@ -511,12 +504,12 @@ describe("verifier_program", () => { verifier: new VerifierOne(), relayer, poseidon: POSEIDON, - action: Action.UNSHIELD + action: Action.UNSHIELD, }); let tx = new Transaction({ provider: lightProvider, // relayer, - params: txParams + params: txParams, }); await tx.compileAndProve(); diff --git a/light-system-programs/tests/merkle_tree_tests.ts b/light-system-programs/tests/merkle_tree_tests.ts index 9b5a08927d..30e575960b 100644 --- a/light-system-programs/tests/merkle_tree_tests.ts +++ b/light-system-programs/tests/merkle_tree_tests.ts @@ -579,9 +579,7 @@ describe("Merkle Tree Tests", () => { [USER_TOKEN_ACCOUNT], ); - let lightProvider = await Provider.native(ADMIN_AUTH_KEYPAIR); - - + let lightProvider = await Provider.initialize(ADMIN_AUTH_KEYPAIR); deposit_utxo1 = new Utxo({ poseidon: POSEIDON, diff --git a/light-system-programs/tests/mock/useWalletMock.ts b/light-system-programs/tests/mock/useWalletMock.ts deleted file mode 100644 index d573b04d0f..0000000000 --- a/light-system-programs/tests/mock/useWalletMock.ts +++ /dev/null @@ -1,120 +0,0 @@ -import { - Connection, - Keypair, - sendAndConfirmTransaction, - VersionedTransaction, -} from "@solana/web3.js"; -import { - PublicKey, - Transaction, - TransactionInstruction, -} from "@solana/web3.js"; -import nacl from "tweetnacl"; - -// Mock Solana web3 library -class MockProvider { - _publicKey: PublicKey; - _keypair: Keypair; - _connection: Connection; - - constructor(keypair: Keypair, connection: Connection) { - this._publicKey = keypair.publicKey; - this._keypair = keypair; - this._connection = connection; - } - - async sendTransaction(transaction) { - // Simulate transaction submission - console.log("Mock transaction submitted:", transaction); - return "mockTransactionSignature"; - } - - async signTransaction(transaction) { - try { - console.log( - "transaction here =================>", - transaction, - transaction instanceof Uint8Array, - ); - if (transaction instanceof Uint8Array) { - let signature = await this.sign(transaction); - return signature; - } else { - transaction.sign([this._keypair]); - console.log("after signing tx",{transaction}) - return transaction; - } - } catch (error) { - console.log("sign transaction",{error}) - } - } - - async signAllTransactions(transactions) { - // Simulate signing all transactions - console.log("Mock transactions signed:", transactions); - return transactions; - } - - async sendAndConfirmTransaction(transaction) { - try { - console.log("transaction here ============>", { transaction }); - const signature = await transaction.sign(this._keypair.secretKey); - return await sendAndConfirmTransaction( - this._connection, - transaction, - [signature], - { - commitment: "singleGossip", - preflightCommitment: "singleGossip", - }, - ); - } catch (err) {} - } - - async sign(transaction) { - // Sign the transaction using the keypair - const signature = nacl.sign.detached(transaction, this._keypair.secretKey); - return signature; - } - - signMessage(message: Uint8Array): Promise { - return new Promise(async (resolve, reject) => { - try { - const signature = nacl.sign.detached(message, this._keypair.secretKey); - return resolve(signature); - } catch (err) { - console.log({ err }); - reject(err); - } - }); - } - - async connect() { - // Simulate wallet connection - console.log("Mock wallet connected"); - } - - async disconnect() { - // Simulate wallet disconnection - console.log("Mock wallet disconnected"); - } -} - -// Mock useWallet hook -export const useWallet = (wallet: Keypair, connection: Connection) => { - const provider = new MockProvider(wallet, connection); - return { - publicKey: provider._publicKey, - connect: async () => provider.connect(), - disconnect: async () => provider.disconnect(), - signMessage: async (message): Promise => { - return await provider.signTransaction(message); - }, - signTransaction: async (transaction) => - provider.signTransaction(transaction), - signAllTransactions: async (transactions) => - provider.signAllTransactions(transactions), - sendAndConfirmTransaction: async (transactions) => - provider.signAllTransactions(transactions), - }; -}; diff --git a/light-system-programs/tests/provider.test.ts b/light-system-programs/tests/provider.test.ts index 5c6101443e..86815c0095 100644 --- a/light-system-programs/tests/provider.test.ts +++ b/light-system-programs/tests/provider.test.ts @@ -61,13 +61,13 @@ describe("verifier_program", () => { }); }); - it("Native Provider", async ()=> { + it("Provider", async ()=> { let connection = new Connection("http://127.0.0.1:8899", "confirmed"); await connection.confirmTransaction(await connection.requestAirdrop(ADMIN_AUTH_KEYPAIR.publicKey, 10_000_000_0000), "confirmed"); const mockKeypair = SolanaKeypair.generate(); - const lightProviderMock = await LightProvider.native(mockKeypair); - assert.equal(lightProviderMock.browserWallet, undefined); - assert.equal(lightProviderMock.nodeWallet?.publicKey.toBase58(), mockKeypair.publicKey.toBase58()); + const lightProviderMock = await LightProvider.initialize(mockKeypair); + assert.equal(lightProviderMock.wallet.node_wallet, true); + assert.equal(lightProviderMock.wallet?.publicKey.toBase58(), mockKeypair.publicKey.toBase58()); assert.equal(lightProviderMock.url, "http://127.0.0.1:8899"); assert(lightProviderMock.poseidon); assert(lightProviderMock.lookUpTable); @@ -78,7 +78,7 @@ describe("verifier_program", () => { }); it("Fetch latestMerkleTree", async () => { - const lightProvider = await Provider.native(ADMIN_AUTH_KEYPAIR); + const lightProvider = await Provider.initialize(ADMIN_AUTH_KEYPAIR); let depositFeeAmount = 10000; let depositAmount = 0; diff --git a/light-system-programs/tests/user_tests.ts b/light-system-programs/tests/user_tests.ts index 79afe512b7..4a8ed6ae65 100644 --- a/light-system-programs/tests/user_tests.ts +++ b/light-system-programs/tests/user_tests.ts @@ -1,5 +1,5 @@ import * as anchor from "@coral-xyz/anchor"; -import { Keypair as SolanaKeypair, PublicKey, SystemProgram } from "@solana/web3.js"; +import {Keypair as SolanaKeypair, PublicKey, SystemProgram } from "@solana/web3.js"; import _ from "lodash"; import { assert } from "chai"; const chai = require("chai"); @@ -41,7 +41,7 @@ var LOOK_UP_TABLE; var POSEIDON; // TODO: remove deprecated function calls -describe("user_tests", () => { +describe("Test User", () => { // Configure the client to use the local cluster. process.env.ANCHOR_WALLET = process.env.HOME + "/.config/solana/id.json"; process.env.ANCHOR_PROVIDER_URL = "http://127.0.0.1:8899"; @@ -69,7 +69,7 @@ describe("user_tests", () => { let amount = 20; let token = "USDC"; console.log("test user wallet: ", userKeypair.publicKey.toBase58()); - const provider = await Provider.native(userKeypair); // userKeypair + const provider = await Provider.initialize(userKeypair); // userKeypair let res = await provider.provider.connection.requestAirdrop( userKeypair.publicKey, 2_000_000_000, @@ -152,8 +152,8 @@ describe("user_tests", () => { it("(user class) shield SOL", async () => { let amount = 15; - let token = "SOL"; - const provider = await Provider.native(userKeypair); + let token = "SOL" + const provider = await Provider.initialize(userKeypair); let res = await provider.provider.connection.requestAirdrop( userKeypair.publicKey, 4_000_000_000, @@ -223,7 +223,7 @@ describe("user_tests", () => { let amount = 1; let token = "USDC"; let solRecipient = SolanaKeypair.generate(); - const provider = await Provider.native(userKeypair); // userKeypair + const provider = await Provider.initialize(userKeypair); // userKeypair let res = await provider.provider.connection.requestAirdrop( userKeypair.publicKey, 2_000_000_000, @@ -322,7 +322,7 @@ describe("user_tests", () => { it("(user class) transfer SPL", async () => { let amountSpl = 1; const token = "USDC"; - const provider = await Provider.native(userKeypair); // userKeypair + const provider = await Provider.initialize(userKeypair); // userKeypair const shieldedRecipient = "19a20668193c0143dd96983ef457404280741339b95695caddd0ad7919f2d434"; const encryptionPublicKey = @@ -403,7 +403,7 @@ describe("user_tests", () => { const recipient = new anchor.BN(shieldedRecipient, "hex"); const recipientEncryptionPublicKey: Uint8Array = strToArr(encryptionPublicKey); - const provider = await Provider.native(userKeypair); + const provider = await Provider.initialize(userKeypair); // get token from registry const tokenCtx = TOKEN_REGISTRY.find((t) => t.symbol === token); @@ -455,7 +455,7 @@ describe("user_tests", () => { let recipient = new PublicKey( "E7jqevikamCMCda8yCsfNawj57FSotUZuref9MLZpWo1", ); - const provider = await Provider.native(userKeypair); + const provider = await Provider.initialize(userKeypair); const user = await User.load(provider); await user.unshield({ amount, token, recipient }); try { diff --git a/light-system-programs/tests/verifier_tests.ts b/light-system-programs/tests/verifier_tests.ts index 2555222058..cf06ec5e3b 100644 --- a/light-system-programs/tests/verifier_tests.ts +++ b/light-system-programs/tests/verifier_tests.ts @@ -36,6 +36,7 @@ import { newAccountWithTokens, updateMerkleTreeForTest, Action, + useWallet } from "light-sdk"; import { BN } from "@coral-xyz/anchor"; @@ -94,7 +95,7 @@ describe("Verifier Zero and One Tests", () => { [USER_TOKEN_ACCOUNT] ); - let lightProvider = await LightProvider.native(ADMIN_AUTH_KEYPAIR); + let lightProvider = await LightProvider.initialize(ADMIN_AUTH_KEYPAIR); @@ -130,7 +131,8 @@ describe("Verifier Zero and One Tests", () => { await transaction.provider.provider.connection.requestAirdrop( transaction.params.accounts.authority, 1_000_000_000 - ) + ), + "confirmed" ); // does one successful transaction await transaction.sendAndConfirmTransaction(); @@ -372,7 +374,7 @@ describe("Verifier Zero and One Tests", () => { ), "confirmed" ); - tmp_tx.provider.nodeWallet = wrongSinger; + tmp_tx.provider.wallet = useWallet(wrongSinger); tmp_tx.params.relayer.accounts.relayerPubkey = wrongSinger.publicKey; await sendTestTx(tmp_tx, "ProofVerificationFails"); } diff --git a/light-system-programs/tsconfig.json b/light-system-programs/tsconfig.json index 5543e1afe9..cb241ef237 100644 --- a/light-system-programs/tsconfig.json +++ b/light-system-programs/tsconfig.json @@ -5,8 +5,8 @@ "lib": ["es2015"], "module": "commonjs", "target": "es6", - "esModuleInterop": true + "esModuleInterop": true, }, "dry": false, "debug": false -} +} \ No newline at end of file diff --git a/mock-app-verifier/sdk/src/verifier.ts b/mock-app-verifier/sdk/src/verifier.ts index c734c27352..f91dbc796f 100644 --- a/mock-app-verifier/sdk/src/verifier.ts +++ b/mock-app-verifier/sdk/src/verifier.ts @@ -75,9 +75,7 @@ export class MockVerifier implements Verifier { const invokingVerifierPubkey = ( await PublicKey.findProgramAddress( [ - transaction.provider.browserWallet - ? transaction.provider.browserWallet.publicKey.toBytes() - : transaction.provider.nodeWallet!.publicKey.toBytes(), + transaction.provider.wallet.publicKey.toBytes() // anchor.utils.bytes.utf8.encode("VERIFIER_STATE"), ], this.verifierProgram.programId, diff --git a/mock-app-verifier/tests/functional_test.ts b/mock-app-verifier/tests/functional_test.ts index 8b62d9dd28..5b8d0702ba 100644 --- a/mock-app-verifier/tests/functional_test.ts +++ b/mock-app-verifier/tests/functional_test.ts @@ -77,7 +77,7 @@ describe("Mock verifier functional", () => { it("Test Deposit MockVerifier cpi VerifierTwo", async () => { const poseidon = await buildPoseidonOpt(); - let lightProvider = await LightProvider.native(ADMIN_AUTH_KEYPAIR); + let lightProvider = await LightProvider.initialize(ADMIN_AUTH_KEYPAIR); outputUtxo = new Utxo({ poseidon, @@ -128,7 +128,7 @@ describe("Mock verifier functional", () => { it("Test Withdrawal MockVerifier cpi VerifierTwo", async () => { const poseidon = await buildPoseidonOpt(); - let lightProvider = await LightProvider.native(ADMIN_AUTH_KEYPAIR); + let lightProvider = await LightProvider.initialize(ADMIN_AUTH_KEYPAIR); let relayer = new Relayer( ADMIN_AUTH_KEYPAIR.publicKey, diff --git a/mock-app-verifier/tests/verifier_tests.ts b/mock-app-verifier/tests/verifier_tests.ts index 60816d3e63..f516589eb7 100644 --- a/mock-app-verifier/tests/verifier_tests.ts +++ b/mock-app-verifier/tests/verifier_tests.ts @@ -98,7 +98,7 @@ describe("Verifier Two test", () => { [USER_TOKEN_ACCOUNT], ); - let lightProvider = await LightProvider.native(ADMIN_AUTH_KEYPAIR); + let lightProvider = await LightProvider.initialize(ADMIN_AUTH_KEYPAIR); @@ -182,7 +182,7 @@ describe("Verifier Two test", () => { // Withdrawal var tokenRecipient = recipientTokenAccount; - let lightProviderWithdrawal = await LightProvider.native( + let lightProviderWithdrawal = await LightProvider.initialize( ADMIN_AUTH_KEYPAIR, ); const relayerRecipient = SolanaKeypair.generate().publicKey; diff --git a/node_modules/.yarn-integrity b/node_modules/.yarn-integrity new file mode 100644 index 0000000000..9937b9e174 --- /dev/null +++ b/node_modules/.yarn-integrity @@ -0,0 +1,10 @@ +{ + "systemParams": "darwin-arm64-93", + "modulesFolders": [], + "flags": [], + "linkedModules": [], + "topLevelPatterns": [], + "lockfileEntries": {}, + "files": [], + "artifacts": {} +} \ No newline at end of file diff --git a/relayer/package-lock.json b/relayer/package-lock.json index 4648d7ea73..d429b9bc5d 100644 --- a/relayer/package-lock.json +++ b/relayer/package-lock.json @@ -17,23 +17,20 @@ "devDependencies": { "@types/express": "^4.17.17", "@types/node": "^18.14.1", + "@types/node-fetch": "^2.6.2", "ts-node": "^10.9.1", "typescript": "^4.9.5" } }, - "../light-sdk": { - "extraneous": true - }, "../light-sdk-ts": { - "name": "light-sdk", "version": "0.0.1", "license": "UNLICENSED", "dependencies": { - "@coral-xyz/anchor": "^0.26.0", + "@coral-xyz/anchor": "0.26.0", "@noble/hashes": "^1.1.5", "@solana/spl-account-compression": "^0.1.5", "@solana/spl-token": "0.3.7", - "@solana/web3.js": "1.73.2", + "@solana/web3.js": "^1.73.2", "axios": "^1.3.4", "circomlib": "^2.0.5", "circomlibjs": "^0.1.7", @@ -60,9 +57,10 @@ } }, "node_modules/@babel/runtime": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz", - "integrity": "sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", + "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.13.11" }, @@ -74,6 +72,7 @@ "version": "0.26.0", "resolved": "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.26.0.tgz", "integrity": "sha512-PxRl+wu5YyptWiR9F2MBHOLLibm87Z4IMUBPreX+DYBtPM+xggvcPi0KAN7+kIL4IrIhXI8ma5V0MCXxSN1pHg==", + "license": "(MIT OR Apache-2.0)", "dependencies": { "@coral-xyz/borsh": "^0.26.0", "@solana/web3.js": "^1.68.0", @@ -98,12 +97,14 @@ "node_modules/@coral-xyz/anchor/node_modules/superstruct": { "version": "0.15.5", "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.15.5.tgz", - "integrity": "sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==" + "integrity": "sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==", + "license": "MIT" }, "node_modules/@coral-xyz/borsh": { "version": "0.26.0", "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.26.0.tgz", "integrity": "sha512-uCZ0xus0CszQPHYfWAqKS5swS1UxvePu83oOF+TWpUkedsNlg6p2p4azxZNSSqwXb9uXMFgxhuMBX9r3Xoi0vQ==", + "license": "Apache-2.0", "dependencies": { "bn.js": "^5.1.2", "buffer-layout": "^1.2.0" @@ -120,6 +121,7 @@ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -132,6 +134,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -140,39 +143,43 @@ "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "node_modules/@noble/ed25519": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-1.7.1.tgz", - "integrity": "sha512-Rk4SkJFaXZiznFyC/t77Q0NKS4FL7TLJJsVG2V2oiEq3kJVeTdxysEe/yRWSpnWMe808XRDJ+VFh5pt/FN5plw==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-1.7.3.tgz", + "integrity": "sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==", "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } - ] + ], + "license": "MIT" }, "node_modules/@noble/hashes": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.5.tgz", - "integrity": "sha512-LTMZiiLc+V4v1Yi16TD6aX2gmtKszNye0pQgbaLqkvhIqP7nVsSaJsWloGQjJfJ8offaoP5GtX3yY5swbcJxxQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", + "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==", "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } - ] + ], + "license": "MIT" }, "node_modules/@noble/secp256k1": { "version": "1.7.1", @@ -183,12 +190,14 @@ "type": "individual", "url": "https://paulmillr.com/funding/" } - ] + ], + "license": "MIT" }, "node_modules/@solana/buffer-layout": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz", "integrity": "sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==", + "license": "MIT", "dependencies": { "buffer": "~6.0.3" }, @@ -196,10 +205,34 @@ "node": ">=5.10" } }, - "node_modules/@solana/buffer-layout/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "node_modules/@solana/web3.js": { + "version": "1.74.0", + "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.74.0.tgz", + "integrity": "sha512-RKZyPqizPCxmpMGfpu4fuplNZEWCrhRBjjVstv5QnAJvgln1jgOfgui+rjl1ExnqDnWKg9uaZ5jtGROH/cwabg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@noble/ed25519": "^1.7.0", + "@noble/hashes": "^1.1.2", + "@noble/secp256k1": "^1.6.3", + "@solana/buffer-layout": "^4.0.0", + "agentkeepalive": "^4.2.1", + "bigint-buffer": "^1.1.5", + "bn.js": "^5.0.0", + "borsh": "^0.7.0", + "bs58": "^4.0.1", + "buffer": "6.0.1", + "fast-stable-stringify": "^1.0.0", + "jayson": "^3.4.4", + "node-fetch": "^2.6.7", + "rpc-websockets": "^7.5.1", + "superstruct": "^0.14.2" + } + }, + "node_modules/@solana/web3.js/node_modules/buffer": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.1.tgz", + "integrity": "sha512-rVAXBwEcEoYtxnHSO5iWyhzV/O1WMtkUYWlfdLS7FjU4PnSJJHEfHXi/uHPI5EwltmOA794gN3bm3/pzuctWjQ==", "funding": [ { "type": "github", @@ -214,66 +247,46 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, - "node_modules/@solana/web3.js": { - "version": "1.73.2", - "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.73.2.tgz", - "integrity": "sha512-9WACF8W4Nstj7xiDw3Oom22QmrhBh0VyZyZ7JvvG3gOxLWLlX3hvm5nPVJOGcCE/9fFavBbCUb5A6CIuvMGdoA==", - "dependencies": { - "@babel/runtime": "^7.12.5", - "@noble/ed25519": "^1.7.0", - "@noble/hashes": "^1.1.2", - "@noble/secp256k1": "^1.6.3", - "@solana/buffer-layout": "^4.0.0", - "agentkeepalive": "^4.2.1", - "bigint-buffer": "^1.1.5", - "bn.js": "^5.0.0", - "borsh": "^0.7.0", - "bs58": "^4.0.1", - "buffer": "6.0.1", - "fast-stable-stringify": "^1.0.0", - "jayson": "^3.4.4", - "node-fetch": "2", - "rpc-websockets": "^7.5.0", - "superstruct": "^0.14.2" - }, - "engines": { - "node": ">=12.20.0" - } - }, "node_modules/@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/body-parser": { "version": "1.19.2", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", "dev": true, + "license": "MIT", "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -283,6 +296,7 @@ "version": "3.4.35", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -292,6 +306,7 @@ "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -304,6 +319,7 @@ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -314,30 +330,46 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { - "version": "18.14.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.1.tgz", - "integrity": "sha512-QH+37Qds3E0eDlReeboBxfHbX9omAcBCXEzswCu6jySP642jiM3cYSIkU/REqwhCUqXdonHFuBfJDiAJxMNhaQ==" + "version": "18.15.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.3.tgz", + "integrity": "sha512-p6ua9zBxz5otCmbpb5D3U4B5Nanw6Pk3PPyX05xnxbB/fRv71N7CPmORg7uAD5P70T0xmx1pzAx/FUfa5X+3cw==", + "license": "MIT" + }, + "node_modules/@types/node-fetch": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", + "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "form-data": "^3.0.0" + } }, "node_modules/@types/qs": { "version": "6.9.7", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/range-parser": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/serve-static": { "version": "1.15.1", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/mime": "*", "@types/node": "*" @@ -347,6 +379,7 @@ "version": "7.4.7", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -355,6 +388,7 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -368,6 +402,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -380,17 +415,19 @@ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", + "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", + "license": "MIT", "dependencies": { "debug": "^4.1.0", - "depd": "^1.1.2", + "depd": "^2.0.0", "humanize-ms": "^1.2.1" }, "engines": { @@ -401,6 +438,7 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -413,34 +451,37 @@ } } }, - "node_modules/agentkeepalive/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/agentkeepalive/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT" }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" }, "node_modules/base-x": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "license": "MIT", "dependencies": { "safe-buffer": "^5.0.1" } @@ -462,13 +503,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/bigint-buffer": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/bigint-buffer/-/bigint-buffer-1.1.5.tgz", "integrity": "sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==", "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { "bindings": "^1.3.0" }, @@ -480,6 +523,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", "dependencies": { "file-uri-to-path": "1.0.0" } @@ -487,12 +531,14 @@ "node_modules/bn.js": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" }, "node_modules/body-parser": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "license": "MIT", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.4", @@ -516,6 +562,7 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz", "integrity": "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==", + "license": "Apache-2.0", "dependencies": { "bn.js": "^5.2.0", "bs58": "^4.0.0", @@ -526,14 +573,15 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", "dependencies": { "base-x": "^3.0.2" } }, "node_modules/buffer": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.1.tgz", - "integrity": "sha512-rVAXBwEcEoYtxnHSO5iWyhzV/O1WMtkUYWlfdLS7FjU4PnSJJHEfHXi/uHPI5EwltmOA794gN3bm3/pzuctWjQ==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "funding": [ { "type": "github", @@ -548,6 +596,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -557,6 +606,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/buffer-layout/-/buffer-layout-1.2.2.tgz", "integrity": "sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==", + "license": "MIT", "engines": { "node": ">=4.5" } @@ -566,6 +616,7 @@ "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", "hasInstallScript": true, + "license": "MIT", "optional": true, "dependencies": { "node-gyp-build": "^4.3.0" @@ -578,6 +629,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -586,6 +638,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -598,6 +651,7 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -605,15 +659,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -625,6 +694,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -633,6 +703,7 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -640,18 +711,21 @@ "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cross-fetch": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "license": "MIT", "dependencies": { "node-fetch": "2.6.7" } @@ -660,6 +734,7 @@ "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -679,6 +754,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/crypto-hash/-/crypto-hash-1.3.0.tgz", "integrity": "sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==", + "license": "MIT", "engines": { "node": ">=8" }, @@ -690,14 +766,22 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, + "node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, "node_modules/delay": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -705,10 +789,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -717,6 +812,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -727,6 +823,7 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -735,6 +832,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" @@ -743,12 +841,14 @@ "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" }, "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -756,12 +856,14 @@ "node_modules/es6-promise": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "license": "MIT" }, "node_modules/es6-promisify": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", + "license": "MIT", "dependencies": { "es6-promise": "^4.0.3" } @@ -769,12 +871,14 @@ "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -782,12 +886,14 @@ "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" }, "node_modules/express": { "version": "4.18.2", "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -836,17 +942,20 @@ "node_modules/fast-stable-stringify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz", - "integrity": "sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==" + "integrity": "sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==", + "license": "MIT" }, "node_modules/file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT" }, "node_modules/finalhandler": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -860,10 +969,26 @@ "node": ">= 0.8" } }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -872,6 +997,7 @@ "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -879,12 +1005,14 @@ "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "license": "MIT" }, "node_modules/get-intrinsic": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -898,6 +1026,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.1" }, @@ -909,6 +1038,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -920,6 +1050,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -935,6 +1066,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "license": "MIT", "dependencies": { "ms": "^2.0.0" } @@ -943,6 +1075,7 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -967,17 +1100,20 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", "engines": { "node": ">= 0.10" } @@ -986,6 +1122,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", + "license": "MIT", "peerDependencies": { "ws": "*" } @@ -994,6 +1131,7 @@ "version": "3.7.0", "resolved": "https://registry.npmjs.org/jayson/-/jayson-3.7.0.tgz", "integrity": "sha512-tfy39KJMrrXJ+mFcMpxwBvFDetS8LAID93+rycFglIQM4kl3uNR3W4lBLE/FFhsoUCEox5Dt2adVpDm/XtebbQ==", + "license": "MIT", "dependencies": { "@types/connect": "^3.4.33", "@types/node": "^12.12.54", @@ -1019,17 +1157,20 @@ "node_modules/jayson/node_modules/@types/node": { "version": "12.20.55", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "license": "MIT" }, "node_modules/js-sha256": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", - "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" + "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==", + "license": "MIT" }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "license": "ISC" }, "node_modules/jsonparse": { "version": "1.3.1", @@ -1037,12 +1178,14 @@ "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "engines": [ "node >= 0.2.0" - ] + ], + "license": "MIT" }, "node_modules/JSONStream": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "license": "(MIT OR Apache-2.0)", "dependencies": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" @@ -1061,12 +1204,14 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" }, "node_modules/lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "license": "MIT", "dependencies": { "tslib": "^2.0.3" } @@ -1075,12 +1220,14 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -1088,12 +1235,14 @@ "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "license": "MIT" }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -1102,6 +1251,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -1113,6 +1263,7 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -1121,6 +1272,7 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -1129,14 +1281,16 @@ } }, "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -1145,6 +1299,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "license": "MIT", "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" @@ -1154,6 +1309,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -1173,6 +1329,7 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "license": "MIT", "optional": true, "bin": { "node-gyp-build": "bin.js", @@ -1184,6 +1341,7 @@ "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -1192,6 +1350,7 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -1202,12 +1361,14 @@ "node_modules/pako": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", - "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", + "license": "(MIT AND Zlib)" }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -1215,12 +1376,14 @@ "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "license": "MIT" }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -1233,6 +1396,7 @@ "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.4" }, @@ -1247,6 +1411,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -1255,6 +1420,7 @@ "version": "2.5.1", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -1268,12 +1434,14 @@ "node_modules/regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "license": "MIT" }, "node_modules/rpc-websockets": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.5.0.tgz", - "integrity": "sha512-9tIRi1uZGy7YmDjErf1Ax3wtqdSSLIlnmL5OtOzgd5eqPKbsPpwDP5whUDO2LQay3Xp0CcHlcNSGzacNRluBaQ==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.5.1.tgz", + "integrity": "sha512-kGFkeTsmd37pHPMaHIgN1LVKXMi0JD782v4Ds9ZKtLlwdTKjn+CxM9A9/gLT2LaOuEcEFGL98h1QWQtlOIdW0w==", + "license": "LGPL-3.0-only", "dependencies": { "@babel/runtime": "^7.17.2", "eventemitter3": "^4.0.7", @@ -1290,9 +1458,10 @@ } }, "node_modules/rpc-websockets/node_modules/ws": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.0.tgz", - "integrity": "sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -1326,17 +1495,20 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" }, "node_modules/send": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -1356,15 +1528,11 @@ "node": ">= 0.8.0" } }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, "node_modules/serve-static": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "license": "MIT", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -1378,12 +1546,14 @@ "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" }, "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -1397,6 +1567,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "license": "MIT", "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" @@ -1406,6 +1577,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -1413,7 +1585,8 @@ "node_modules/superstruct": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.14.2.tgz", - "integrity": "sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==" + "integrity": "sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==", + "license": "MIT" }, "node_modules/text-encoding-utf-8": { "version": "1.0.2", @@ -1423,12 +1596,14 @@ "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "license": "MIT" }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", "engines": { "node": ">=0.6" } @@ -1436,18 +1611,21 @@ "node_modules/toml": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", - "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==" + "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==", + "license": "MIT" }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" }, "node_modules/ts-node": { "version": "10.9.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "dev": true, + "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -1489,12 +1667,14 @@ "node_modules/tslib": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "license": "0BSD" }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -1508,6 +1688,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -1520,6 +1701,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -1529,6 +1711,7 @@ "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", "hasInstallScript": true, + "license": "MIT", "optional": true, "dependencies": { "node-gyp-build": "^4.3.0" @@ -1541,6 +1724,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", "engines": { "node": ">= 0.4.0" } @@ -1549,6 +1733,7 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -1557,12 +1742,14 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -1570,12 +1757,14 @@ "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -1585,6 +1774,7 @@ "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "license": "MIT", "engines": { "node": ">=8.3.0" }, @@ -1606,6 +1796,7 @@ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -1613,9 +1804,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz", - "integrity": "sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", + "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", "requires": { "regenerator-runtime": "^0.13.11" } @@ -1690,14 +1881,14 @@ } }, "@noble/ed25519": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-1.7.1.tgz", - "integrity": "sha512-Rk4SkJFaXZiznFyC/t77Q0NKS4FL7TLJJsVG2V2oiEq3kJVeTdxysEe/yRWSpnWMe808XRDJ+VFh5pt/FN5plw==" + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-1.7.3.tgz", + "integrity": "sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==" }, "@noble/hashes": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.5.tgz", - "integrity": "sha512-LTMZiiLc+V4v1Yi16TD6aX2gmtKszNye0pQgbaLqkvhIqP7nVsSaJsWloGQjJfJ8offaoP5GtX3yY5swbcJxxQ==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", + "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==" }, "@noble/secp256k1": { "version": "1.7.1", @@ -1710,23 +1901,12 @@ "integrity": "sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==", "requires": { "buffer": "~6.0.3" - }, - "dependencies": { - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - } } }, "@solana/web3.js": { - "version": "1.73.2", - "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.73.2.tgz", - "integrity": "sha512-9WACF8W4Nstj7xiDw3Oom22QmrhBh0VyZyZ7JvvG3gOxLWLlX3hvm5nPVJOGcCE/9fFavBbCUb5A6CIuvMGdoA==", + "version": "1.74.0", + "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.74.0.tgz", + "integrity": "sha512-RKZyPqizPCxmpMGfpu4fuplNZEWCrhRBjjVstv5QnAJvgln1jgOfgui+rjl1ExnqDnWKg9uaZ5jtGROH/cwabg==", "requires": { "@babel/runtime": "^7.12.5", "@noble/ed25519": "^1.7.0", @@ -1741,9 +1921,20 @@ "buffer": "6.0.1", "fast-stable-stringify": "^1.0.0", "jayson": "^3.4.4", - "node-fetch": "2", - "rpc-websockets": "^7.5.0", + "node-fetch": "^2.6.7", + "rpc-websockets": "^7.5.1", "superstruct": "^0.14.2" + }, + "dependencies": { + "buffer": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.1.tgz", + "integrity": "sha512-rVAXBwEcEoYtxnHSO5iWyhzV/O1WMtkUYWlfdLS7FjU4PnSJJHEfHXi/uHPI5EwltmOA794gN3bm3/pzuctWjQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + } } }, "@tsconfig/node10": { @@ -1818,9 +2009,19 @@ "dev": true }, "@types/node": { - "version": "18.14.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.1.tgz", - "integrity": "sha512-QH+37Qds3E0eDlReeboBxfHbX9omAcBCXEzswCu6jySP642jiM3cYSIkU/REqwhCUqXdonHFuBfJDiAJxMNhaQ==" + "version": "18.15.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.3.tgz", + "integrity": "sha512-p6ua9zBxz5otCmbpb5D3U4B5Nanw6Pk3PPyX05xnxbB/fRv71N7CPmORg7uAD5P70T0xmx1pzAx/FUfa5X+3cw==" + }, + "@types/node-fetch": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", + "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", + "dev": true, + "requires": { + "@types/node": "*", + "form-data": "^3.0.0" + } }, "@types/qs": { "version": "6.9.7", @@ -1874,12 +2075,12 @@ "dev": true }, "agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", + "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", "requires": { "debug": "^4.1.0", - "depd": "^1.1.2", + "depd": "^2.0.0", "humanize-ms": "^1.2.1" }, "dependencies": { @@ -1891,11 +2092,6 @@ "ms": "2.1.2" } }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -1914,6 +2110,12 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, "base-x": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", @@ -1986,9 +2188,9 @@ } }, "buffer": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.1.tgz", - "integrity": "sha512-rVAXBwEcEoYtxnHSO5iWyhzV/O1WMtkUYWlfdLS7FjU4PnSJJHEfHXi/uHPI5EwltmOA794gN3bm3/pzuctWjQ==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "requires": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -2027,6 +2229,15 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -2090,6 +2301,13 @@ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } } }, "delay": { @@ -2097,6 +2315,12 @@ "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==" }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, "depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -2227,6 +2451,17 @@ "unpipe": "~1.0.0" } }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, "forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -2311,7 +2546,8 @@ "isomorphic-ws": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", - "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==" + "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", + "requires": {} }, "jayson": { "version": "3.7.0", @@ -2367,11 +2603,11 @@ "light-sdk": { "version": "file:../light-sdk-ts", "requires": { - "@coral-xyz/anchor": "^0.26.0", + "@coral-xyz/anchor": "0.26.0", "@noble/hashes": "^1.1.5", "@solana/spl-account-compression": "^0.1.5", "@solana/spl-token": "0.3.7", - "@solana/web3.js": "1.73.2", + "@solana/web3.js": "^1.73.2", "@types/bn.js": "^5.1.0", "@types/chai": "^4.3.0", "@types/chai-as-promised": "^7.1.5", @@ -2448,9 +2684,9 @@ } }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "negotiator": { "version": "0.6.3", @@ -2547,9 +2783,9 @@ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "rpc-websockets": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.5.0.tgz", - "integrity": "sha512-9tIRi1uZGy7YmDjErf1Ax3wtqdSSLIlnmL5OtOzgd5eqPKbsPpwDP5whUDO2LQay3Xp0CcHlcNSGzacNRluBaQ==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.5.1.tgz", + "integrity": "sha512-kGFkeTsmd37pHPMaHIgN1LVKXMi0JD782v4Ds9ZKtLlwdTKjn+CxM9A9/gLT2LaOuEcEFGL98h1QWQtlOIdW0w==", "requires": { "@babel/runtime": "^7.17.2", "bufferutil": "^4.0.1", @@ -2560,9 +2796,10 @@ }, "dependencies": { "ws": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.0.tgz", - "integrity": "sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==" + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "requires": {} } } }, @@ -2594,13 +2831,6 @@ "on-finished": "2.4.1", "range-parser": "~1.2.1", "statuses": "2.0.1" - }, - "dependencies": { - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } } }, "serve-static": { diff --git a/relayer/package.json b/relayer/package.json index 1bc31db84d..b30f68b725 100644 --- a/relayer/package.json +++ b/relayer/package.json @@ -23,6 +23,7 @@ "devDependencies": { "@types/express": "^4.17.17", "@types/node": "^18.14.1", + "@types/node-fetch": "^2.6.2", "ts-node": "^10.9.1", "typescript": "^4.9.5" } diff --git a/relayer/src/index.ts b/relayer/src/index.ts index 4560bbd098..1fbcef40f1 100644 --- a/relayer/src/index.ts +++ b/relayer/src/index.ts @@ -30,7 +30,7 @@ app.use((req, res, next) => { app.post("/updatemerkletree", async function (req, res) { try { - const provider = await Provider.native(ADMIN_AUTH_KEYPAIR); + const provider = await Provider.initialize(ADMIN_AUTH_KEYPAIR); console.log({provider}) await updateMerkleTreeForTest(provider.provider?.connection!); return res.status(200).json({ status: "ok" }); @@ -55,7 +55,7 @@ app.post("/relay", async function (req, res) { app.get("/merkletree", async function (req, res) { try { - const provider = await Provider.native(ADMIN_AUTH_KEYPAIR); + const provider = await Provider.initialize(ADMIN_AUTH_KEYPAIR); const merkletreeIsInited = await provider.provider!.connection.getAccountInfo(MERKLE_TREE_KEY); if (!merkletreeIsInited) { @@ -80,7 +80,7 @@ app.get("/merkletree", async function (req, res) { app.get("/lookuptable", async function (req, res) { try { - const provider = await Provider.native(ADMIN_AUTH_KEYPAIR); + const provider = await Provider.initialize(ADMIN_AUTH_KEYPAIR); const LOOK_UP_TABLE = await initLookUpTableFromFile(provider.provider!); return res.status(200).json({ data: LOOK_UP_TABLE }); } catch (e) { diff --git a/relayer/src/relay.ts b/relayer/src/relay.ts index eca4ff23a4..e544027b7c 100644 --- a/relayer/src/relay.ts +++ b/relayer/src/relay.ts @@ -1,9 +1,12 @@ import { Keypair } from "@solana/web3.js"; +import { Request } from "express"; import { Provider, updateMerkleTreeForTest } from "light-sdk"; import { sendTransaction } from "./sendTransaction"; -export async function relay(req: express.request, relayerPayer: Keypair) { +export async function relay( + req: Request, relayerPayer: Keypair + ) { const { instructions } = req.body; - const provider = await Provider.native(relayerPayer); + const provider = await Provider.initialize(relayerPayer); try { let ixs = JSON.parse(instructions); diff --git a/relayer/src/sendTransaction.ts b/relayer/src/sendTransaction.ts index 02f2db0038..a29eba026b 100644 --- a/relayer/src/sendTransaction.ts +++ b/relayer/src/sendTransaction.ts @@ -5,7 +5,7 @@ import { AddressLookupTableAccount, VersionedTransaction, } from "@solana/web3.js"; -import { confirmConfig, Provider } from "light-sdk"; +import { confirmConfig, Provider, useWallet } from "light-sdk"; export async function sendTransaction( ix: any, @@ -17,7 +17,7 @@ export async function sendTransaction( await provider.provider.connection.getRecentBlockhash("confirmed") ).blockhash; const txMsg = new TransactionMessage({ - payerKey: provider.nodeWallet!.publicKey, + payerKey: provider.wallet!.publicKey, instructions: [ ComputeBudgetProgram.setComputeUnitLimit({ units: 1_400_000 }), ix, @@ -50,8 +50,7 @@ export async function sendTransaction( let retries = 3; let res; while (retries > 0) { - tx.sign([provider.nodeWallet!]); - + tx = await provider.wallet.signTransaction(tx); try { let serializedTx = tx.serialize(); console.log("tx: "); diff --git a/relayer/tsconfig.json b/relayer/tsconfig.json index 0d96e23b6f..f6dc79e07a 100644 --- a/relayer/tsconfig.json +++ b/relayer/tsconfig.json @@ -10,10 +10,12 @@ "moduleResolution": "node", "rootDirs": ["src", "generated"], "baseUrl": "src", + "skipLibCheck": true, "useUnknownInCatchVariables": false }, "include": ["src", "__tests__", "tests"], "exclude": ["node_modules", "**/tests/*"], + "dry": false, "debug": false } diff --git a/relayer/yarn.lock b/relayer/yarn.lock index 48edcf6d21..da25ee3ff0 100644 --- a/relayer/yarn.lock +++ b/relayer/yarn.lock @@ -9,7 +9,7 @@ dependencies: regenerator-runtime "^0.13.11" -"@coral-xyz/anchor@^0.26.0": +"@coral-xyz/anchor@0.26.0", "@coral-xyz/anchor@^0.26.0": version "0.26.0" resolved "https://registry.yarnpkg.com/@coral-xyz/anchor/-/anchor-0.26.0.tgz#c8e4f7177e93441afd030f22d777d54d0194d7d1" integrity sha512-PxRl+wu5YyptWiR9F2MBHOLLibm87Z4IMUBPreX+DYBtPM+xggvcPi0KAN7+kIL4IrIhXI8ma5V0MCXxSN1pHg== @@ -443,9 +443,9 @@ integrity sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ== "@noble/hashes@^1.1.2", "@noble/hashes@^1.1.5": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" - integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== + version "1.3.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.0.tgz#085fd70f6d7d9d109671090ccae1d3bec62554a1" + integrity sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg== "@noble/secp256k1@^1.6.3": version "1.7.1" @@ -470,14 +470,15 @@ buffer "~6.0.3" "@solana/spl-account-compression@^0.1.5": - version "0.1.6" - resolved "https://registry.yarnpkg.com/@solana/spl-account-compression/-/spl-account-compression-0.1.6.tgz#25233866291439162a7f0a862fb96e5018f3a4b1" - integrity sha512-UZQo4B1yWYSSAryAeBfpeUI0LVSx7Ye2MBqoaBCPkYsPNfklrG2E6saDm26wITBJVA+SBGIdBaxlWWRj8YMmjA== + version "0.1.7" + resolved "https://registry.yarnpkg.com/@solana/spl-account-compression/-/spl-account-compression-0.1.7.tgz#d1ac7e6ecb73da7fd66d998334ce1fca47931726" + integrity sha512-7BKXDpm2rRxmkIWAxq7jm/haRvLp4ZOaM9NMz3+zZtE+z+cWPY9lRKEWdH+RCAWNm1b0J0J+seqwb3hgf79nkA== dependencies: "@metaplex-foundation/beet" "^0.7.1" "@metaplex-foundation/beet-solana" "^0.4.0" bn.js "^5.2.1" borsh "^0.7.0" + js-sha3 "^0.8.0" typescript-collections "^1.3.3" "@solana/spl-token@0.3.7": @@ -489,32 +490,10 @@ "@solana/buffer-layout-utils" "^0.2.0" buffer "^6.0.3" -"@solana/web3.js@1.73.2": - version "1.73.2" - resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.73.2.tgz#4b30cd402b35733dae3a7d0b638be26a7742b395" - integrity sha512-9WACF8W4Nstj7xiDw3Oom22QmrhBh0VyZyZ7JvvG3gOxLWLlX3hvm5nPVJOGcCE/9fFavBbCUb5A6CIuvMGdoA== - dependencies: - "@babel/runtime" "^7.12.5" - "@noble/ed25519" "^1.7.0" - "@noble/hashes" "^1.1.2" - "@noble/secp256k1" "^1.6.3" - "@solana/buffer-layout" "^4.0.0" - agentkeepalive "^4.2.1" - bigint-buffer "^1.1.5" - bn.js "^5.0.0" - borsh "^0.7.0" - bs58 "^4.0.1" - buffer "6.0.1" - fast-stable-stringify "^1.0.0" - jayson "^3.4.4" - node-fetch "2" - rpc-websockets "^7.5.0" - superstruct "^0.14.2" - "@solana/web3.js@^1.32.0", "@solana/web3.js@^1.56.2", "@solana/web3.js@^1.68.0", "@solana/web3.js@^1.73.2": - version "1.73.3" - resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.73.3.tgz#60e6bd68f6f364d4be360b1e0a03a0a68468a029" - integrity sha512-vHRMo589XEIpoujpE2sZZ1aMZvfA1ImKfNxobzEFyMb+H5j6mRRUXfdgWD0qJ0sm11e5BcBC7HPeRXJB+7f3Lg== + version "1.74.0" + resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.74.0.tgz#dbcbeabb830dd7cbbcf5e31404ca79c9785cbf2d" + integrity sha512-RKZyPqizPCxmpMGfpu4fuplNZEWCrhRBjjVstv5QnAJvgln1jgOfgui+rjl1ExnqDnWKg9uaZ5jtGROH/cwabg== dependencies: "@babel/runtime" "^7.12.5" "@noble/ed25519" "^1.7.0" @@ -592,10 +571,18 @@ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== +"@types/node-fetch@^2.6.2": + version "2.6.2" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.2.tgz#d1a9c5fd049d9415dce61571557104dec3ec81da" + integrity sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A== + dependencies: + "@types/node" "*" + form-data "^3.0.0" + "@types/node@*", "@types/node@^18.14.1": - version "18.14.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.14.6.tgz#ae1973dd2b1eeb1825695bb11ebfb746d27e3e93" - integrity sha512-93+VvleD3mXwlLI/xASjw0FzKcwzl3OdTCzm1LaRfqgS21gfFtK3zDXM5Op9TeeMsJVOaJ2VRDpT9q4Y3d0AvA== + version "18.15.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.3.tgz#f0b991c32cfc6a4e7f3399d6cb4b8cf9a0315014" + integrity sha512-p6ua9zBxz5otCmbpb5D3U4B5Nanw6Pk3PPyX05xnxbB/fRv71N7CPmORg7uAD5P70T0xmx1pzAx/FUfa5X+3cw== "@types/node@^12.12.54": version "12.20.55" @@ -709,9 +696,9 @@ axios@^1.3.4: proxy-from-env "^1.1.0" b4a@^1.0.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.1.tgz#9effac93a469a868d024e16fd77162c653544cbd" - integrity sha512-AsKjNhz72yxteo/0EtQEiwkMUgk/tGmycXlbG4g3Ard2/ULtNLUykGOkeK0egmN27h0xMAhb76jYccW+XTBExA== + version "1.6.3" + resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.3.tgz#cce6e8a2f0d0774e5fe8062086827e979970266d" + integrity sha512-aX6/FqpWQve8VN9kyTExy7GlmwNShvxcCWWD5QVR3ZbRlyBGtCrG5Autu95xxSPH4CRs+5PSV4d7PRnWpmqFlA== balanced-match@^1.0.0: version "1.0.2" @@ -1072,9 +1059,9 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== ejs@^3.1.6: - version "3.1.8" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.8.tgz#758d32910c78047585c7ef1f92f9ee041c1c190b" - integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ== + version "3.1.9" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" + integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== dependencies: jake "^10.8.5" @@ -1259,6 +1246,15 @@ follow-redirects@^1.15.0: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + form-data@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" @@ -1433,11 +1429,11 @@ jsonparse@^1.2.0: "light-sdk@file:../light-sdk-ts": version "0.0.1" dependencies: - "@coral-xyz/anchor" "^0.26.0" + "@coral-xyz/anchor" "0.26.0" "@noble/hashes" "^1.1.5" "@solana/spl-account-compression" "^0.1.5" "@solana/spl-token" "0.3.7" - "@solana/web3.js" "1.73.2" + "@solana/web3.js" "^1.73.2" axios "^1.3.4" circomlib "^2.0.5" circomlibjs "^0.1.7" @@ -1562,13 +1558,6 @@ node-addon-api@^3.0.0: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== -node-fetch@2, node-fetch@^2.6.7: - version "2.6.9" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6" - integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg== - dependencies: - whatwg-url "^5.0.0" - node-fetch@2.6.7: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" @@ -1576,6 +1565,13 @@ node-fetch@2.6.7: dependencies: whatwg-url "^5.0.0" +node-fetch@^2.6.7: + version "2.6.9" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6" + integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg== + dependencies: + whatwg-url "^5.0.0" + node-gyp-build@^4.2.2, node-gyp-build@^4.3.0: version "4.6.0" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" @@ -1654,9 +1650,9 @@ raw-body@2.5.1: unpipe "1.0.0" readable-stream@^3.6.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.1.tgz#f9f9b5f536920253b3d26e7660e7da4ccff9bb62" - integrity sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ== + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -1667,7 +1663,7 @@ regenerator-runtime@^0.13.11: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== -rpc-websockets@^7.5.0, rpc-websockets@^7.5.1: +rpc-websockets@^7.5.1: version "7.5.1" resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-7.5.1.tgz#e0a05d525a97e7efc31a0617f093a13a2e10c401" integrity sha512-kGFkeTsmd37pHPMaHIgN1LVKXMi0JD782v4Ds9ZKtLlwdTKjn+CxM9A9/gLT2LaOuEcEFGL98h1QWQtlOIdW0w== @@ -1946,9 +1942,9 @@ ws@^7.4.5: integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== ws@^8.5.0: - version "8.12.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.12.1.tgz#c51e583d79140b5e42e39be48c934131942d4a8f" - integrity sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew== + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== yn@3.1.1: version "3.1.1" diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000..fb57ccd13a --- /dev/null +++ b/yarn.lock @@ -0,0 +1,4 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + From ff46ed405a74be137c2ca23aebf49fd60d725bea Mon Sep 17 00:00:00 2001 From: Abdul Qadir Shaikh Date: Fri, 24 Mar 2023 14:35:02 +0500 Subject: [PATCH 03/10] minor changes --- light-sdk-ts/src/wallet/provider.ts | 2 +- light-sdk-ts/src/wallet/user.ts | 4 +-- light-system-programs/tests/user_tests.ts | 2 +- light-system-programs/tests/verifier_tests.ts | 2 +- test.sh | 28 +++++++++---------- 5 files changed, 18 insertions(+), 20 deletions(-) diff --git a/light-sdk-ts/src/wallet/provider.ts b/light-sdk-ts/src/wallet/provider.ts index b822993d53..c390d756eb 100644 --- a/light-sdk-ts/src/wallet/provider.ts +++ b/light-sdk-ts/src/wallet/provider.ts @@ -153,7 +153,7 @@ export class Provider { const merkletreeIsInited = await this.provider!.connection.getAccountInfo( merkleTreePubkey, - "confirmed" + "confirmed", ); if (!merkletreeIsInited) { throw new ProviderError( diff --git a/light-sdk-ts/src/wallet/user.ts b/light-sdk-ts/src/wallet/user.ts index 69d4283286..4e1a1dab38 100644 --- a/light-sdk-ts/src/wallet/user.ts +++ b/light-sdk-ts/src/wallet/user.ts @@ -338,9 +338,7 @@ export class User { merkleTreePubkey: MERKLE_TREE_KEY, sender: action === Action.SHIELD ? userSplAccount : undefined, senderFee: - action === Action.SHIELD - ? this.provider.wallet!.publicKey - : undefined, + action === Action.SHIELD ? this.provider.wallet!.publicKey : undefined, recipient: recipientSPLAddress, recipientFee, verifier: new VerifierZero(), // TODO: add support for 10in here -> verifier1 diff --git a/light-system-programs/tests/user_tests.ts b/light-system-programs/tests/user_tests.ts index 4a8ed6ae65..c179b3e1d8 100644 --- a/light-system-programs/tests/user_tests.ts +++ b/light-system-programs/tests/user_tests.ts @@ -502,7 +502,7 @@ describe("Test User Errors", () => { amount = 20; token = "USDC"; - provider = await Provider.native(userKeypair); // userKeypair + provider = await Provider.initialize(userKeypair); // userKeypair let res = await provider.provider.connection.requestAirdrop( userKeypair.publicKey, 2_000_000_000, diff --git a/light-system-programs/tests/verifier_tests.ts b/light-system-programs/tests/verifier_tests.ts index cf06ec5e3b..4376c5cd06 100644 --- a/light-system-programs/tests/verifier_tests.ts +++ b/light-system-programs/tests/verifier_tests.ts @@ -171,7 +171,7 @@ describe("Verifier Zero and One Tests", () => { // Withdrawal var tokenRecipient = recipientTokenAccount; - let lightProviderWithdrawal = await LightProvider.native( + let lightProviderWithdrawal = await LightProvider.initialize( ADMIN_AUTH_KEYPAIR ); const relayerRecipient = SolanaKeypair.generate().publicKey; diff --git a/test.sh b/test.sh index 3b13cc0775..53fa0616de 100755 --- a/test.sh +++ b/test.sh @@ -2,10 +2,10 @@ set -e -./build-sdk.sh +# ./build-sdk.sh pushd light-system-programs -anchor build +# anchor build yarn test yarn run test-merkle-tree yarn run test-verifiers @@ -13,19 +13,19 @@ yarn run test-user yarn run test-provider popd -pushd light-sdk-ts -yarn test -sleep 1 -popd +# pushd light-sdk-ts +# yarn test +# sleep 1 +# popd -pushd mock-app-verifier -anchor build -yarn test -yarn run test-verifiers -popd +# pushd mock-app-verifier +# anchor build +# yarn test +# yarn run test-verifiers +# popd -pushd light-circuits -yarn run test -popd +# pushd light-circuits +# yarn run test +# popd # && cd programs/merkle_tree_program && cargo test From 731d7fb2f5b8e0d53b4e5c0c4499b6fcdb03e6ef Mon Sep 17 00:00:00 2001 From: Abdul Qadir Shaikh Date: Fri, 24 Mar 2023 14:36:54 +0500 Subject: [PATCH 04/10] Revert "minor changes" This reverts commit ff46ed405a74be137c2ca23aebf49fd60d725bea. --- light-sdk-ts/src/wallet/provider.ts | 2 +- light-sdk-ts/src/wallet/user.ts | 4 ++- light-system-programs/tests/user_tests.ts | 2 +- light-system-programs/tests/verifier_tests.ts | 2 +- test.sh | 28 +++++++++---------- 5 files changed, 20 insertions(+), 18 deletions(-) diff --git a/light-sdk-ts/src/wallet/provider.ts b/light-sdk-ts/src/wallet/provider.ts index c390d756eb..b822993d53 100644 --- a/light-sdk-ts/src/wallet/provider.ts +++ b/light-sdk-ts/src/wallet/provider.ts @@ -153,7 +153,7 @@ export class Provider { const merkletreeIsInited = await this.provider!.connection.getAccountInfo( merkleTreePubkey, - "confirmed", + "confirmed" ); if (!merkletreeIsInited) { throw new ProviderError( diff --git a/light-sdk-ts/src/wallet/user.ts b/light-sdk-ts/src/wallet/user.ts index 4e1a1dab38..69d4283286 100644 --- a/light-sdk-ts/src/wallet/user.ts +++ b/light-sdk-ts/src/wallet/user.ts @@ -338,7 +338,9 @@ export class User { merkleTreePubkey: MERKLE_TREE_KEY, sender: action === Action.SHIELD ? userSplAccount : undefined, senderFee: - action === Action.SHIELD ? this.provider.wallet!.publicKey : undefined, + action === Action.SHIELD + ? this.provider.wallet!.publicKey + : undefined, recipient: recipientSPLAddress, recipientFee, verifier: new VerifierZero(), // TODO: add support for 10in here -> verifier1 diff --git a/light-system-programs/tests/user_tests.ts b/light-system-programs/tests/user_tests.ts index c179b3e1d8..4a8ed6ae65 100644 --- a/light-system-programs/tests/user_tests.ts +++ b/light-system-programs/tests/user_tests.ts @@ -502,7 +502,7 @@ describe("Test User Errors", () => { amount = 20; token = "USDC"; - provider = await Provider.initialize(userKeypair); // userKeypair + provider = await Provider.native(userKeypair); // userKeypair let res = await provider.provider.connection.requestAirdrop( userKeypair.publicKey, 2_000_000_000, diff --git a/light-system-programs/tests/verifier_tests.ts b/light-system-programs/tests/verifier_tests.ts index 4376c5cd06..cf06ec5e3b 100644 --- a/light-system-programs/tests/verifier_tests.ts +++ b/light-system-programs/tests/verifier_tests.ts @@ -171,7 +171,7 @@ describe("Verifier Zero and One Tests", () => { // Withdrawal var tokenRecipient = recipientTokenAccount; - let lightProviderWithdrawal = await LightProvider.initialize( + let lightProviderWithdrawal = await LightProvider.native( ADMIN_AUTH_KEYPAIR ); const relayerRecipient = SolanaKeypair.generate().publicKey; diff --git a/test.sh b/test.sh index 53fa0616de..3b13cc0775 100755 --- a/test.sh +++ b/test.sh @@ -2,10 +2,10 @@ set -e -# ./build-sdk.sh +./build-sdk.sh pushd light-system-programs -# anchor build +anchor build yarn test yarn run test-merkle-tree yarn run test-verifiers @@ -13,19 +13,19 @@ yarn run test-user yarn run test-provider popd -# pushd light-sdk-ts -# yarn test -# sleep 1 -# popd +pushd light-sdk-ts +yarn test +sleep 1 +popd -# pushd mock-app-verifier -# anchor build -# yarn test -# yarn run test-verifiers -# popd +pushd mock-app-verifier +anchor build +yarn test +yarn run test-verifiers +popd -# pushd light-circuits -# yarn run test -# popd +pushd light-circuits +yarn run test +popd # && cd programs/merkle_tree_program && cargo test From 1696b840f5df422b6718cf07a7ac879bcb68e232 Mon Sep 17 00:00:00 2001 From: Abdul Qadir Shaikh Date: Fri, 24 Mar 2023 14:39:55 +0500 Subject: [PATCH 05/10] minor changes --- light-sdk-ts/src/wallet/provider.ts | 2 +- light-sdk-ts/src/wallet/user.ts | 4 +--- light-system-programs/tests/user_tests.ts | 3 +-- light-system-programs/tests/verifier_tests.ts | 2 +- mock-app-verifier/tests/verifier_tests.ts | 3 ++- 5 files changed, 6 insertions(+), 8 deletions(-) diff --git a/light-sdk-ts/src/wallet/provider.ts b/light-sdk-ts/src/wallet/provider.ts index b822993d53..c390d756eb 100644 --- a/light-sdk-ts/src/wallet/provider.ts +++ b/light-sdk-ts/src/wallet/provider.ts @@ -153,7 +153,7 @@ export class Provider { const merkletreeIsInited = await this.provider!.connection.getAccountInfo( merkleTreePubkey, - "confirmed" + "confirmed", ); if (!merkletreeIsInited) { throw new ProviderError( diff --git a/light-sdk-ts/src/wallet/user.ts b/light-sdk-ts/src/wallet/user.ts index 69d4283286..4e1a1dab38 100644 --- a/light-sdk-ts/src/wallet/user.ts +++ b/light-sdk-ts/src/wallet/user.ts @@ -338,9 +338,7 @@ export class User { merkleTreePubkey: MERKLE_TREE_KEY, sender: action === Action.SHIELD ? userSplAccount : undefined, senderFee: - action === Action.SHIELD - ? this.provider.wallet!.publicKey - : undefined, + action === Action.SHIELD ? this.provider.wallet!.publicKey : undefined, recipient: recipientSPLAddress, recipientFee, verifier: new VerifierZero(), // TODO: add support for 10in here -> verifier1 diff --git a/light-system-programs/tests/user_tests.ts b/light-system-programs/tests/user_tests.ts index 4a8ed6ae65..a9865784db 100644 --- a/light-system-programs/tests/user_tests.ts +++ b/light-system-programs/tests/user_tests.ts @@ -502,7 +502,7 @@ describe("Test User Errors", () => { amount = 20; token = "USDC"; - provider = await Provider.native(userKeypair); // userKeypair + provider = await Provider.initialize(userKeypair); // userKeypair let res = await provider.provider.connection.requestAirdrop( userKeypair.publicKey, 2_000_000_000, @@ -510,7 +510,6 @@ describe("Test User Errors", () => { await provider.provider.connection.confirmTransaction(res, "confirmed"); user = await User.load(provider); }); - it("NO_PUBLIC_AMOUNTS_PROVIDED shield", async () => { await chai.assert.isRejected( user.shield({ token }), diff --git a/light-system-programs/tests/verifier_tests.ts b/light-system-programs/tests/verifier_tests.ts index cf06ec5e3b..4376c5cd06 100644 --- a/light-system-programs/tests/verifier_tests.ts +++ b/light-system-programs/tests/verifier_tests.ts @@ -171,7 +171,7 @@ describe("Verifier Zero and One Tests", () => { // Withdrawal var tokenRecipient = recipientTokenAccount; - let lightProviderWithdrawal = await LightProvider.native( + let lightProviderWithdrawal = await LightProvider.initialize( ADMIN_AUTH_KEYPAIR ); const relayerRecipient = SolanaKeypair.generate().publicKey; diff --git a/mock-app-verifier/tests/verifier_tests.ts b/mock-app-verifier/tests/verifier_tests.ts index f516589eb7..469f47b168 100644 --- a/mock-app-verifier/tests/verifier_tests.ts +++ b/mock-app-verifier/tests/verifier_tests.ts @@ -39,6 +39,7 @@ import { updateMerkleTreeForTest, VerifierTwo, Action, + useWallet, } from "light-sdk"; import { BN } from "@coral-xyz/anchor"; @@ -387,7 +388,7 @@ describe("Verifier Two test", () => { ), "confirmed", ); - tmp_tx.provider.nodeWallet = wrongSinger; + tmp_tx.provider.wallet = useWallet(wrongSinger); tmp_tx.params.relayer.accounts.relayerPubkey = wrongSinger.publicKey; await sendTestTx(tmp_tx, "ProofVerificationFails"); } From 19c30985bf02fe347388a4f2a9868a949eb933ce Mon Sep 17 00:00:00 2001 From: Abdul Qadir Shaikh Date: Fri, 24 Mar 2023 17:20:59 +0500 Subject: [PATCH 06/10] added promise await in transaction --- light-sdk-ts/src/transaction.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/light-sdk-ts/src/transaction.ts b/light-sdk-ts/src/transaction.ts index b09ec71617..82b9751f87 100644 --- a/light-sdk-ts/src/transaction.ts +++ b/light-sdk-ts/src/transaction.ts @@ -1701,7 +1701,7 @@ export class Transaction { ); if (this.appParams) { const transaction = new createTransaction().add( - this.appParams?.verifier.verifierProgram.methods + await this.appParams?.verifier.verifierProgram.methods .closeVerifierState() .accounts({ ...this.params.accounts, From 706b9b88a7bcf4be48d45083f85f47931a70aecd Mon Sep 17 00:00:00 2001 From: Abdul Qadir Shaikh Date: Fri, 24 Mar 2023 22:28:58 +0500 Subject: [PATCH 07/10] naming conventions --- light-sdk-ts/src/transaction.ts | 6 ++--- light-sdk-ts/src/wallet/provider.ts | 8 +++--- light-sdk-ts/src/wallet/useWallet.ts | 28 +++++++++++--------- light-sdk-ts/src/wallet/user.ts | 10 +++---- light-sdk-ts/tests/provider.test.ts | 2 +- light-system-programs/tests/provider.test.ts | 2 +- yarn.lock | 4 --- 7 files changed, 30 insertions(+), 30 deletions(-) delete mode 100644 yarn.lock diff --git a/light-sdk-ts/src/transaction.ts b/light-sdk-ts/src/transaction.ts index 82b9751f87..0fb20f8256 100644 --- a/light-sdk-ts/src/transaction.ts +++ b/light-sdk-ts/src/transaction.ts @@ -7,7 +7,7 @@ import { VersionedTransaction, TransactionSignature, TransactionInstruction, - Transaction as createTransaction, + Transaction as solanaTransaction, } from "@solana/web3.js"; import * as anchor from "@coral-xyz/anchor"; import { TOKEN_PROGRAM_ID, getAccount } from "@solana/spl-token"; @@ -1700,7 +1700,7 @@ export class Transaction { "", ); if (this.appParams) { - const transaction = new createTransaction().add( + const transaction = new solanaTransaction().add( await this.appParams?.verifier.verifierProgram.methods .closeVerifierState() .accounts({ @@ -1711,7 +1711,7 @@ export class Transaction { return await this.provider.wallet!.sendAndConfirmTransaction(transaction); } else { - const transaction = new createTransaction().add( + const transaction = new solanaTransaction().add( await this.params?.verifier.verifierProgram.methods .closeVerifierState() .accounts({ diff --git a/light-sdk-ts/src/wallet/provider.ts b/light-sdk-ts/src/wallet/provider.ts index c390d756eb..b0317b659e 100644 --- a/light-sdk-ts/src/wallet/provider.ts +++ b/light-sdk-ts/src/wallet/provider.ts @@ -16,7 +16,7 @@ import { ADMIN_AUTH_KEYPAIR, initLookUpTableFromFile } from "../test-utils"; import { MERKLE_TREE_HEIGHT, MERKLE_TREE_KEY } from "../constants"; import { MerkleTree } from "../merkleTree/merkleTree"; import { ProviderError, ProviderErrorCode } from "../errors"; -import { useWallet } from "./useWallet"; +import { Wallet } from "./useWallet"; const axios = require("axios"); const circomlibjs = require("circomlibjs"); @@ -28,7 +28,7 @@ export type Wallet = { signTransaction: (transaction: any) => Promise; sendAndConfirmTransaction: (transaction: any) => Promise; publicKey: PublicKey; - node_wallet?: boolean; + isNodeWallet?: boolean; }; /** @@ -119,7 +119,7 @@ export class Provider { private async fetchLookupTable() { try { - if (!this.wallet.node_wallet) { + if (!this.wallet.isNodeWallet) { const response = await axios.get("http://localhost:3331/lookuptable"); this.lookUpTable = new PublicKey(response.data.data); return; @@ -135,7 +135,7 @@ export class Provider { private async fetchMerkleTree(merkleTreePubkey: PublicKey) { try { - if (!this.wallet.node_wallet) { + if (!this.wallet.isNodeWallet) { const response = await axios.get("http://localhost:3331/merkletree"); const fetchedMerkleTree: MerkleTree = response.data.data.merkleTree; diff --git a/light-sdk-ts/src/wallet/useWallet.ts b/light-sdk-ts/src/wallet/useWallet.ts index 01abba20fd..770c40e871 100644 --- a/light-sdk-ts/src/wallet/useWallet.ts +++ b/light-sdk-ts/src/wallet/useWallet.ts @@ -1,4 +1,5 @@ import { + Commitment, Connection, Keypair, sendAndConfirmTransaction, @@ -7,17 +8,19 @@ import { PublicKey, Transaction } from "@solana/web3.js"; import { sign } from "tweetnacl"; // Mock Solana web3 library -class Provider { +class Wallet { _publicKey: PublicKey; _keypair: Keypair; _connection: Connection; _url: string; + _commitment: Commitment; - constructor(keypair: Keypair, url: string) { + constructor(keypair: Keypair, url: string, commitment: Commitment) { this._publicKey = keypair.publicKey; this._keypair = keypair; this._connection = new Connection(url); this._url = url; + this._commitment = commitment; } signTransaction = async (tx: any): Promise => { @@ -49,7 +52,7 @@ class Provider { transaction, [this._keypair, ...signers], { - commitment: "confirmed", + commitment: this._commitment, }, ); console.log(response); @@ -63,18 +66,19 @@ class Provider { // Mock useWallet hook export const useWallet = ( - wallet: Keypair, + keypair: Keypair, url: string = "http://127.0.0.1:8899", - node_wallet: boolean = true, + isNodeWallet: boolean = true, + commitment: Commitment = "confirmed", ) => { url = url !== "mock" ? url : "http://127.0.0.1:8899"; - const provider = new Provider(wallet, url); + const wallet = new Wallet(keypair, url, commitment); return { - publicKey: provider._publicKey, - sendAndConfirmTransaction: provider.sendAndConfirmTransaction, - signMessage: provider.signMessage, - signTransaction: provider.signTransaction, - signAllTransactions: provider.signAllTransactions, - node_wallet, + publicKey: wallet._publicKey, + sendAndConfirmTransaction: wallet.sendAndConfirmTransaction, + signMessage: wallet.signMessage, + signTransaction: wallet.signTransaction, + signAllTransactions: wallet.signAllTransactions, + isNodeWallet, }; }; diff --git a/light-sdk-ts/src/wallet/user.ts b/light-sdk-ts/src/wallet/user.ts index 4e1a1dab38..109caa94fb 100644 --- a/light-sdk-ts/src/wallet/user.ts +++ b/light-sdk-ts/src/wallet/user.ts @@ -2,7 +2,7 @@ import { Keypair as SolanaKeypair, PublicKey, SystemProgram, - Transaction as createTransaction, + Transaction as solanaTransaction, } from "@solana/web3.js"; import { Account } from "../account"; import { Utxo } from "../utxo"; @@ -458,7 +458,7 @@ export class User { ); try { - const transaction = new createTransaction().add( + const transaction = new solanaTransaction().add( splToken.createApproveInstruction( userSplAccount, AUTHORITY, @@ -507,7 +507,7 @@ export class User { } let response; - if (!this.provider.wallet.node_wallet) { + if (!this.provider.wallet.isNodeWallet) { response = await axios.post("http://localhost:3331/updatemerkletree"); } @@ -627,7 +627,7 @@ export class User { } let response; - if (!this.provider.wallet.node_wallet) { + if (!this.provider.wallet.isNodeWallet) { response = await axios.post("http://localhost:3331/updatemerkletree"); } return { txHash, response }; @@ -714,7 +714,7 @@ export class User { ); } let response; - if (!this.provider.wallet.node_wallet) { + if (!this.provider.wallet.isNodeWallet) { response = await axios.post("http://localhost:3331/updatemerkletree"); } return { txHash, response }; diff --git a/light-sdk-ts/tests/provider.test.ts b/light-sdk-ts/tests/provider.test.ts index c281091ab2..c152757ad8 100644 --- a/light-sdk-ts/tests/provider.test.ts +++ b/light-sdk-ts/tests/provider.test.ts @@ -66,7 +66,7 @@ describe("Test Provider Functional", () => { it("Mock Provider", async () => { const lightProviderMock = await LightProvider.loadMock(); - assert.equal(lightProviderMock.wallet.node_wallet,true); + assert.equal(lightProviderMock.wallet.isNodeWallet,true); assert.equal( lightProviderMock.wallet?.publicKey.toBase58(), ADMIN_AUTH_KEYPAIR.publicKey.toBase58(), diff --git a/light-system-programs/tests/provider.test.ts b/light-system-programs/tests/provider.test.ts index 86815c0095..5aa720b4cb 100644 --- a/light-system-programs/tests/provider.test.ts +++ b/light-system-programs/tests/provider.test.ts @@ -66,7 +66,7 @@ describe("verifier_program", () => { await connection.confirmTransaction(await connection.requestAirdrop(ADMIN_AUTH_KEYPAIR.publicKey, 10_000_000_0000), "confirmed"); const mockKeypair = SolanaKeypair.generate(); const lightProviderMock = await LightProvider.initialize(mockKeypair); - assert.equal(lightProviderMock.wallet.node_wallet, true); + assert.equal(lightProviderMock.wallet.isNodeWallet, true); assert.equal(lightProviderMock.wallet?.publicKey.toBase58(), mockKeypair.publicKey.toBase58()); assert.equal(lightProviderMock.url, "http://127.0.0.1:8899"); assert(lightProviderMock.poseidon); diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index fb57ccd13a..0000000000 --- a/yarn.lock +++ /dev/null @@ -1,4 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - From f2ef002e4523033871454767b80d72b327d6f653 Mon Sep 17 00:00:00 2001 From: Abdul Qadir Shaikh Date: Fri, 24 Mar 2023 22:46:58 +0500 Subject: [PATCH 08/10] Revert "naming conventions" This reverts commit 706b9b88a7bcf4be48d45083f85f47931a70aecd. --- light-sdk-ts/src/transaction.ts | 6 ++--- light-sdk-ts/src/wallet/provider.ts | 8 +++--- light-sdk-ts/src/wallet/useWallet.ts | 28 +++++++++----------- light-sdk-ts/src/wallet/user.ts | 10 +++---- light-sdk-ts/tests/provider.test.ts | 2 +- light-system-programs/tests/provider.test.ts | 2 +- yarn.lock | 4 +++ 7 files changed, 30 insertions(+), 30 deletions(-) create mode 100644 yarn.lock diff --git a/light-sdk-ts/src/transaction.ts b/light-sdk-ts/src/transaction.ts index 0fb20f8256..82b9751f87 100644 --- a/light-sdk-ts/src/transaction.ts +++ b/light-sdk-ts/src/transaction.ts @@ -7,7 +7,7 @@ import { VersionedTransaction, TransactionSignature, TransactionInstruction, - Transaction as solanaTransaction, + Transaction as createTransaction, } from "@solana/web3.js"; import * as anchor from "@coral-xyz/anchor"; import { TOKEN_PROGRAM_ID, getAccount } from "@solana/spl-token"; @@ -1700,7 +1700,7 @@ export class Transaction { "", ); if (this.appParams) { - const transaction = new solanaTransaction().add( + const transaction = new createTransaction().add( await this.appParams?.verifier.verifierProgram.methods .closeVerifierState() .accounts({ @@ -1711,7 +1711,7 @@ export class Transaction { return await this.provider.wallet!.sendAndConfirmTransaction(transaction); } else { - const transaction = new solanaTransaction().add( + const transaction = new createTransaction().add( await this.params?.verifier.verifierProgram.methods .closeVerifierState() .accounts({ diff --git a/light-sdk-ts/src/wallet/provider.ts b/light-sdk-ts/src/wallet/provider.ts index b0317b659e..c390d756eb 100644 --- a/light-sdk-ts/src/wallet/provider.ts +++ b/light-sdk-ts/src/wallet/provider.ts @@ -16,7 +16,7 @@ import { ADMIN_AUTH_KEYPAIR, initLookUpTableFromFile } from "../test-utils"; import { MERKLE_TREE_HEIGHT, MERKLE_TREE_KEY } from "../constants"; import { MerkleTree } from "../merkleTree/merkleTree"; import { ProviderError, ProviderErrorCode } from "../errors"; -import { Wallet } from "./useWallet"; +import { useWallet } from "./useWallet"; const axios = require("axios"); const circomlibjs = require("circomlibjs"); @@ -28,7 +28,7 @@ export type Wallet = { signTransaction: (transaction: any) => Promise; sendAndConfirmTransaction: (transaction: any) => Promise; publicKey: PublicKey; - isNodeWallet?: boolean; + node_wallet?: boolean; }; /** @@ -119,7 +119,7 @@ export class Provider { private async fetchLookupTable() { try { - if (!this.wallet.isNodeWallet) { + if (!this.wallet.node_wallet) { const response = await axios.get("http://localhost:3331/lookuptable"); this.lookUpTable = new PublicKey(response.data.data); return; @@ -135,7 +135,7 @@ export class Provider { private async fetchMerkleTree(merkleTreePubkey: PublicKey) { try { - if (!this.wallet.isNodeWallet) { + if (!this.wallet.node_wallet) { const response = await axios.get("http://localhost:3331/merkletree"); const fetchedMerkleTree: MerkleTree = response.data.data.merkleTree; diff --git a/light-sdk-ts/src/wallet/useWallet.ts b/light-sdk-ts/src/wallet/useWallet.ts index 770c40e871..01abba20fd 100644 --- a/light-sdk-ts/src/wallet/useWallet.ts +++ b/light-sdk-ts/src/wallet/useWallet.ts @@ -1,5 +1,4 @@ import { - Commitment, Connection, Keypair, sendAndConfirmTransaction, @@ -8,19 +7,17 @@ import { PublicKey, Transaction } from "@solana/web3.js"; import { sign } from "tweetnacl"; // Mock Solana web3 library -class Wallet { +class Provider { _publicKey: PublicKey; _keypair: Keypair; _connection: Connection; _url: string; - _commitment: Commitment; - constructor(keypair: Keypair, url: string, commitment: Commitment) { + constructor(keypair: Keypair, url: string) { this._publicKey = keypair.publicKey; this._keypair = keypair; this._connection = new Connection(url); this._url = url; - this._commitment = commitment; } signTransaction = async (tx: any): Promise => { @@ -52,7 +49,7 @@ class Wallet { transaction, [this._keypair, ...signers], { - commitment: this._commitment, + commitment: "confirmed", }, ); console.log(response); @@ -66,19 +63,18 @@ class Wallet { // Mock useWallet hook export const useWallet = ( - keypair: Keypair, + wallet: Keypair, url: string = "http://127.0.0.1:8899", - isNodeWallet: boolean = true, - commitment: Commitment = "confirmed", + node_wallet: boolean = true, ) => { url = url !== "mock" ? url : "http://127.0.0.1:8899"; - const wallet = new Wallet(keypair, url, commitment); + const provider = new Provider(wallet, url); return { - publicKey: wallet._publicKey, - sendAndConfirmTransaction: wallet.sendAndConfirmTransaction, - signMessage: wallet.signMessage, - signTransaction: wallet.signTransaction, - signAllTransactions: wallet.signAllTransactions, - isNodeWallet, + publicKey: provider._publicKey, + sendAndConfirmTransaction: provider.sendAndConfirmTransaction, + signMessage: provider.signMessage, + signTransaction: provider.signTransaction, + signAllTransactions: provider.signAllTransactions, + node_wallet, }; }; diff --git a/light-sdk-ts/src/wallet/user.ts b/light-sdk-ts/src/wallet/user.ts index 109caa94fb..4e1a1dab38 100644 --- a/light-sdk-ts/src/wallet/user.ts +++ b/light-sdk-ts/src/wallet/user.ts @@ -2,7 +2,7 @@ import { Keypair as SolanaKeypair, PublicKey, SystemProgram, - Transaction as solanaTransaction, + Transaction as createTransaction, } from "@solana/web3.js"; import { Account } from "../account"; import { Utxo } from "../utxo"; @@ -458,7 +458,7 @@ export class User { ); try { - const transaction = new solanaTransaction().add( + const transaction = new createTransaction().add( splToken.createApproveInstruction( userSplAccount, AUTHORITY, @@ -507,7 +507,7 @@ export class User { } let response; - if (!this.provider.wallet.isNodeWallet) { + if (!this.provider.wallet.node_wallet) { response = await axios.post("http://localhost:3331/updatemerkletree"); } @@ -627,7 +627,7 @@ export class User { } let response; - if (!this.provider.wallet.isNodeWallet) { + if (!this.provider.wallet.node_wallet) { response = await axios.post("http://localhost:3331/updatemerkletree"); } return { txHash, response }; @@ -714,7 +714,7 @@ export class User { ); } let response; - if (!this.provider.wallet.isNodeWallet) { + if (!this.provider.wallet.node_wallet) { response = await axios.post("http://localhost:3331/updatemerkletree"); } return { txHash, response }; diff --git a/light-sdk-ts/tests/provider.test.ts b/light-sdk-ts/tests/provider.test.ts index c152757ad8..c281091ab2 100644 --- a/light-sdk-ts/tests/provider.test.ts +++ b/light-sdk-ts/tests/provider.test.ts @@ -66,7 +66,7 @@ describe("Test Provider Functional", () => { it("Mock Provider", async () => { const lightProviderMock = await LightProvider.loadMock(); - assert.equal(lightProviderMock.wallet.isNodeWallet,true); + assert.equal(lightProviderMock.wallet.node_wallet,true); assert.equal( lightProviderMock.wallet?.publicKey.toBase58(), ADMIN_AUTH_KEYPAIR.publicKey.toBase58(), diff --git a/light-system-programs/tests/provider.test.ts b/light-system-programs/tests/provider.test.ts index 5aa720b4cb..86815c0095 100644 --- a/light-system-programs/tests/provider.test.ts +++ b/light-system-programs/tests/provider.test.ts @@ -66,7 +66,7 @@ describe("verifier_program", () => { await connection.confirmTransaction(await connection.requestAirdrop(ADMIN_AUTH_KEYPAIR.publicKey, 10_000_000_0000), "confirmed"); const mockKeypair = SolanaKeypair.generate(); const lightProviderMock = await LightProvider.initialize(mockKeypair); - assert.equal(lightProviderMock.wallet.isNodeWallet, true); + assert.equal(lightProviderMock.wallet.node_wallet, true); assert.equal(lightProviderMock.wallet?.publicKey.toBase58(), mockKeypair.publicKey.toBase58()); assert.equal(lightProviderMock.url, "http://127.0.0.1:8899"); assert(lightProviderMock.poseidon); diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000..fb57ccd13a --- /dev/null +++ b/yarn.lock @@ -0,0 +1,4 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + From f6bd5b8d57da9315b1618189beda68e16b002213 Mon Sep 17 00:00:00 2001 From: Abdul Qadir Shaikh Date: Fri, 24 Mar 2023 22:52:14 +0500 Subject: [PATCH 09/10] naming conventions --- light-sdk-ts/src/transaction.ts | 6 ++--- light-sdk-ts/src/wallet/provider.ts | 6 ++--- light-sdk-ts/src/wallet/useWallet.ts | 28 +++++++++++--------- light-sdk-ts/src/wallet/user.ts | 10 +++---- light-sdk-ts/tests/provider.test.ts | 2 +- light-system-programs/tests/provider.test.ts | 2 +- yarn.lock | 4 --- 7 files changed, 29 insertions(+), 29 deletions(-) delete mode 100644 yarn.lock diff --git a/light-sdk-ts/src/transaction.ts b/light-sdk-ts/src/transaction.ts index 82b9751f87..167aae7440 100644 --- a/light-sdk-ts/src/transaction.ts +++ b/light-sdk-ts/src/transaction.ts @@ -7,7 +7,7 @@ import { VersionedTransaction, TransactionSignature, TransactionInstruction, - Transaction as createTransaction, + Transaction as SolanaTransaction, } from "@solana/web3.js"; import * as anchor from "@coral-xyz/anchor"; import { TOKEN_PROGRAM_ID, getAccount } from "@solana/spl-token"; @@ -1700,7 +1700,7 @@ export class Transaction { "", ); if (this.appParams) { - const transaction = new createTransaction().add( + const transaction = new SolanaTransaction().add( await this.appParams?.verifier.verifierProgram.methods .closeVerifierState() .accounts({ @@ -1711,7 +1711,7 @@ export class Transaction { return await this.provider.wallet!.sendAndConfirmTransaction(transaction); } else { - const transaction = new createTransaction().add( + const transaction = new SolanaTransaction().add( await this.params?.verifier.verifierProgram.methods .closeVerifierState() .accounts({ diff --git a/light-sdk-ts/src/wallet/provider.ts b/light-sdk-ts/src/wallet/provider.ts index c390d756eb..23fb46bab8 100644 --- a/light-sdk-ts/src/wallet/provider.ts +++ b/light-sdk-ts/src/wallet/provider.ts @@ -28,7 +28,7 @@ export type Wallet = { signTransaction: (transaction: any) => Promise; sendAndConfirmTransaction: (transaction: any) => Promise; publicKey: PublicKey; - node_wallet?: boolean; + isNodeWallet?: boolean; }; /** @@ -119,7 +119,7 @@ export class Provider { private async fetchLookupTable() { try { - if (!this.wallet.node_wallet) { + if (!this.wallet.isNodeWallet) { const response = await axios.get("http://localhost:3331/lookuptable"); this.lookUpTable = new PublicKey(response.data.data); return; @@ -135,7 +135,7 @@ export class Provider { private async fetchMerkleTree(merkleTreePubkey: PublicKey) { try { - if (!this.wallet.node_wallet) { + if (!this.wallet.isNodeWallet) { const response = await axios.get("http://localhost:3331/merkletree"); const fetchedMerkleTree: MerkleTree = response.data.data.merkleTree; diff --git a/light-sdk-ts/src/wallet/useWallet.ts b/light-sdk-ts/src/wallet/useWallet.ts index 01abba20fd..770c40e871 100644 --- a/light-sdk-ts/src/wallet/useWallet.ts +++ b/light-sdk-ts/src/wallet/useWallet.ts @@ -1,4 +1,5 @@ import { + Commitment, Connection, Keypair, sendAndConfirmTransaction, @@ -7,17 +8,19 @@ import { PublicKey, Transaction } from "@solana/web3.js"; import { sign } from "tweetnacl"; // Mock Solana web3 library -class Provider { +class Wallet { _publicKey: PublicKey; _keypair: Keypair; _connection: Connection; _url: string; + _commitment: Commitment; - constructor(keypair: Keypair, url: string) { + constructor(keypair: Keypair, url: string, commitment: Commitment) { this._publicKey = keypair.publicKey; this._keypair = keypair; this._connection = new Connection(url); this._url = url; + this._commitment = commitment; } signTransaction = async (tx: any): Promise => { @@ -49,7 +52,7 @@ class Provider { transaction, [this._keypair, ...signers], { - commitment: "confirmed", + commitment: this._commitment, }, ); console.log(response); @@ -63,18 +66,19 @@ class Provider { // Mock useWallet hook export const useWallet = ( - wallet: Keypair, + keypair: Keypair, url: string = "http://127.0.0.1:8899", - node_wallet: boolean = true, + isNodeWallet: boolean = true, + commitment: Commitment = "confirmed", ) => { url = url !== "mock" ? url : "http://127.0.0.1:8899"; - const provider = new Provider(wallet, url); + const wallet = new Wallet(keypair, url, commitment); return { - publicKey: provider._publicKey, - sendAndConfirmTransaction: provider.sendAndConfirmTransaction, - signMessage: provider.signMessage, - signTransaction: provider.signTransaction, - signAllTransactions: provider.signAllTransactions, - node_wallet, + publicKey: wallet._publicKey, + sendAndConfirmTransaction: wallet.sendAndConfirmTransaction, + signMessage: wallet.signMessage, + signTransaction: wallet.signTransaction, + signAllTransactions: wallet.signAllTransactions, + isNodeWallet, }; }; diff --git a/light-sdk-ts/src/wallet/user.ts b/light-sdk-ts/src/wallet/user.ts index 4e1a1dab38..eba7b73a4d 100644 --- a/light-sdk-ts/src/wallet/user.ts +++ b/light-sdk-ts/src/wallet/user.ts @@ -2,7 +2,7 @@ import { Keypair as SolanaKeypair, PublicKey, SystemProgram, - Transaction as createTransaction, + Transaction as SolanaTransaction, } from "@solana/web3.js"; import { Account } from "../account"; import { Utxo } from "../utxo"; @@ -458,7 +458,7 @@ export class User { ); try { - const transaction = new createTransaction().add( + const transaction = new SolanaTransaction().add( splToken.createApproveInstruction( userSplAccount, AUTHORITY, @@ -507,7 +507,7 @@ export class User { } let response; - if (!this.provider.wallet.node_wallet) { + if (!this.provider.wallet.isNodeWallet) { response = await axios.post("http://localhost:3331/updatemerkletree"); } @@ -627,7 +627,7 @@ export class User { } let response; - if (!this.provider.wallet.node_wallet) { + if (!this.provider.wallet.isNodeWallet) { response = await axios.post("http://localhost:3331/updatemerkletree"); } return { txHash, response }; @@ -714,7 +714,7 @@ export class User { ); } let response; - if (!this.provider.wallet.node_wallet) { + if (!this.provider.wallet.isNodeWallet) { response = await axios.post("http://localhost:3331/updatemerkletree"); } return { txHash, response }; diff --git a/light-sdk-ts/tests/provider.test.ts b/light-sdk-ts/tests/provider.test.ts index c281091ab2..c152757ad8 100644 --- a/light-sdk-ts/tests/provider.test.ts +++ b/light-sdk-ts/tests/provider.test.ts @@ -66,7 +66,7 @@ describe("Test Provider Functional", () => { it("Mock Provider", async () => { const lightProviderMock = await LightProvider.loadMock(); - assert.equal(lightProviderMock.wallet.node_wallet,true); + assert.equal(lightProviderMock.wallet.isNodeWallet,true); assert.equal( lightProviderMock.wallet?.publicKey.toBase58(), ADMIN_AUTH_KEYPAIR.publicKey.toBase58(), diff --git a/light-system-programs/tests/provider.test.ts b/light-system-programs/tests/provider.test.ts index 86815c0095..5aa720b4cb 100644 --- a/light-system-programs/tests/provider.test.ts +++ b/light-system-programs/tests/provider.test.ts @@ -66,7 +66,7 @@ describe("verifier_program", () => { await connection.confirmTransaction(await connection.requestAirdrop(ADMIN_AUTH_KEYPAIR.publicKey, 10_000_000_0000), "confirmed"); const mockKeypair = SolanaKeypair.generate(); const lightProviderMock = await LightProvider.initialize(mockKeypair); - assert.equal(lightProviderMock.wallet.node_wallet, true); + assert.equal(lightProviderMock.wallet.isNodeWallet, true); assert.equal(lightProviderMock.wallet?.publicKey.toBase58(), mockKeypair.publicKey.toBase58()); assert.equal(lightProviderMock.url, "http://127.0.0.1:8899"); assert(lightProviderMock.poseidon); diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index fb57ccd13a..0000000000 --- a/yarn.lock +++ /dev/null @@ -1,4 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - From 921e7cc7df4579d095701b3402e60e2f5d8d7d7e Mon Sep 17 00:00:00 2001 From: Abdul Qadir Shaikh Date: Fri, 24 Mar 2023 22:58:18 +0500 Subject: [PATCH 10/10] method name changed --- light-sdk-ts/src/wallet/provider.ts | 2 +- light-sdk-ts/tests/provider.test.ts | 8 ++++---- light-system-programs/tests/functional_tests.ts | 8 ++++---- light-system-programs/tests/merkle_tree_tests.ts | 2 +- light-system-programs/tests/provider.test.ts | 4 ++-- light-system-programs/tests/user_tests.ts | 14 +++++++------- light-system-programs/tests/verifier_tests.ts | 4 ++-- mock-app-verifier/tests/functional_test.ts | 4 ++-- mock-app-verifier/tests/verifier_tests.ts | 4 ++-- relayer/src/index.ts | 6 +++--- relayer/src/relay.ts | 2 +- 11 files changed, 29 insertions(+), 29 deletions(-) diff --git a/light-sdk-ts/src/wallet/provider.ts b/light-sdk-ts/src/wallet/provider.ts index 23fb46bab8..19d5b2ad9c 100644 --- a/light-sdk-ts/src/wallet/provider.ts +++ b/light-sdk-ts/src/wallet/provider.ts @@ -193,7 +193,7 @@ export class Provider { * @param connection get from useConnection() hook * @param url full-node rpc endpoint to instantiate a Connection */ - static async initialize( + static async init( wallet: Wallet | SolanaKeypair | Keypair, connection?: Connection, confirmConfig?: ConfirmOptions, diff --git a/light-sdk-ts/tests/provider.test.ts b/light-sdk-ts/tests/provider.test.ts index c152757ad8..3050d9241d 100644 --- a/light-sdk-ts/tests/provider.test.ts +++ b/light-sdk-ts/tests/provider.test.ts @@ -88,7 +88,7 @@ describe("Test Provider Functional", () => { it("KEYPAIR_UNDEFINED Provider", async () => { await chai.assert.isRejected( // @ts-ignore - LightProvider.initialize(), + LightProvider.init(), ProviderErrorCode.KEYPAIR_UNDEFINED, ); }); @@ -132,7 +132,7 @@ describe("Test Provider Functional", () => { it("KEYPAIR_UNDEFINED browser", async () => { await chai.assert.isRejected( // @ts-ignore - LightProvider.initialize(), + LightProvider.init(), ProviderErrorCode.KEYPAIR_UNDEFINED, ); }); @@ -140,7 +140,7 @@ describe("Test Provider Functional", () => { it("KEYPAIR_UNDEFINED browser", async () => { await chai.assert.isRejected( // @ts-ignore - LightProvider.initialize(), + LightProvider.init(), ProviderErrorCode.KEYPAIR_UNDEFINED, ); }); @@ -152,7 +152,7 @@ describe("Test Provider Functional", () => { await chai.assert.isRejected( // @ts-ignore - LightProvider.initialize(wallet), + LightProvider.init(wallet), ProviderErrorCode.CONNECTION_UNDEFINED, ); }); diff --git a/light-system-programs/tests/functional_tests.ts b/light-system-programs/tests/functional_tests.ts index 0e57dfdd3e..10971edb7f 100644 --- a/light-system-programs/tests/functional_tests.ts +++ b/light-system-programs/tests/functional_tests.ts @@ -259,7 +259,7 @@ describe("verifier_program", () => { depositAmount * 2, [USER_TOKEN_ACCOUNT], ); - const lightProvider = await Provider.initialize(ADMIN_AUTH_KEYPAIR); + const lightProvider = await Provider.init(ADMIN_AUTH_KEYPAIR); let deposit_utxo1 = new Utxo({ poseidon: POSEIDON, @@ -326,7 +326,7 @@ describe("verifier_program", () => { for (var i = 0; i < 1; i++) { console.log("Deposit ", i); - const lightProvider = await Provider.initialize(ADMIN_AUTH_KEYPAIR); + const lightProvider = await Provider.init(ADMIN_AUTH_KEYPAIR); deposit_utxo1 = new Utxo({ poseidon: POSEIDON, @@ -388,7 +388,7 @@ describe("verifier_program", () => { const origin = new anchor.web3.Account(); var tokenRecipient = recipientTokenAccount; - const lightProvider = await Provider.initialize(ADMIN_AUTH_KEYPAIR); + const lightProvider = await Provider.init(ADMIN_AUTH_KEYPAIR); let relayer = new Relayer( ADMIN_AUTH_KEYPAIR.publicKey, @@ -465,7 +465,7 @@ describe("verifier_program", () => { const relayerRecipient = SolanaKeypair.generate().publicKey; const recipientFee = SolanaKeypair.generate().publicKey; - const lightProvider = await Provider.initialize(ADMIN_AUTH_KEYPAIR); + const lightProvider = await Provider.init(ADMIN_AUTH_KEYPAIR); await lightProvider.provider.connection.confirmTransaction( await lightProvider.provider.connection.requestAirdrop( diff --git a/light-system-programs/tests/merkle_tree_tests.ts b/light-system-programs/tests/merkle_tree_tests.ts index 30e575960b..df146e835e 100644 --- a/light-system-programs/tests/merkle_tree_tests.ts +++ b/light-system-programs/tests/merkle_tree_tests.ts @@ -579,7 +579,7 @@ describe("Merkle Tree Tests", () => { [USER_TOKEN_ACCOUNT], ); - let lightProvider = await Provider.initialize(ADMIN_AUTH_KEYPAIR); + let lightProvider = await Provider.init(ADMIN_AUTH_KEYPAIR); deposit_utxo1 = new Utxo({ poseidon: POSEIDON, diff --git a/light-system-programs/tests/provider.test.ts b/light-system-programs/tests/provider.test.ts index 5aa720b4cb..ba110bb364 100644 --- a/light-system-programs/tests/provider.test.ts +++ b/light-system-programs/tests/provider.test.ts @@ -65,7 +65,7 @@ describe("verifier_program", () => { let connection = new Connection("http://127.0.0.1:8899", "confirmed"); await connection.confirmTransaction(await connection.requestAirdrop(ADMIN_AUTH_KEYPAIR.publicKey, 10_000_000_0000), "confirmed"); const mockKeypair = SolanaKeypair.generate(); - const lightProviderMock = await LightProvider.initialize(mockKeypair); + const lightProviderMock = await LightProvider.init(mockKeypair); assert.equal(lightProviderMock.wallet.isNodeWallet, true); assert.equal(lightProviderMock.wallet?.publicKey.toBase58(), mockKeypair.publicKey.toBase58()); assert.equal(lightProviderMock.url, "http://127.0.0.1:8899"); @@ -78,7 +78,7 @@ describe("verifier_program", () => { }); it("Fetch latestMerkleTree", async () => { - const lightProvider = await Provider.initialize(ADMIN_AUTH_KEYPAIR); + const lightProvider = await Provider.init(ADMIN_AUTH_KEYPAIR); let depositFeeAmount = 10000; let depositAmount = 0; diff --git a/light-system-programs/tests/user_tests.ts b/light-system-programs/tests/user_tests.ts index a9865784db..c199447b00 100644 --- a/light-system-programs/tests/user_tests.ts +++ b/light-system-programs/tests/user_tests.ts @@ -69,7 +69,7 @@ describe("Test User", () => { let amount = 20; let token = "USDC"; console.log("test user wallet: ", userKeypair.publicKey.toBase58()); - const provider = await Provider.initialize(userKeypair); // userKeypair + const provider = await Provider.init(userKeypair); // userKeypair let res = await provider.provider.connection.requestAirdrop( userKeypair.publicKey, 2_000_000_000, @@ -153,7 +153,7 @@ describe("Test User", () => { it("(user class) shield SOL", async () => { let amount = 15; let token = "SOL" - const provider = await Provider.initialize(userKeypair); + const provider = await Provider.init(userKeypair); let res = await provider.provider.connection.requestAirdrop( userKeypair.publicKey, 4_000_000_000, @@ -223,7 +223,7 @@ describe("Test User", () => { let amount = 1; let token = "USDC"; let solRecipient = SolanaKeypair.generate(); - const provider = await Provider.initialize(userKeypair); // userKeypair + const provider = await Provider.init(userKeypair); // userKeypair let res = await provider.provider.connection.requestAirdrop( userKeypair.publicKey, 2_000_000_000, @@ -322,7 +322,7 @@ describe("Test User", () => { it("(user class) transfer SPL", async () => { let amountSpl = 1; const token = "USDC"; - const provider = await Provider.initialize(userKeypair); // userKeypair + const provider = await Provider.init(userKeypair); // userKeypair const shieldedRecipient = "19a20668193c0143dd96983ef457404280741339b95695caddd0ad7919f2d434"; const encryptionPublicKey = @@ -403,7 +403,7 @@ describe("Test User", () => { const recipient = new anchor.BN(shieldedRecipient, "hex"); const recipientEncryptionPublicKey: Uint8Array = strToArr(encryptionPublicKey); - const provider = await Provider.initialize(userKeypair); + const provider = await Provider.init(userKeypair); // get token from registry const tokenCtx = TOKEN_REGISTRY.find((t) => t.symbol === token); @@ -455,7 +455,7 @@ describe("Test User", () => { let recipient = new PublicKey( "E7jqevikamCMCda8yCsfNawj57FSotUZuref9MLZpWo1", ); - const provider = await Provider.initialize(userKeypair); + const provider = await Provider.init(userKeypair); const user = await User.load(provider); await user.unshield({ amount, token, recipient }); try { @@ -502,7 +502,7 @@ describe("Test User Errors", () => { amount = 20; token = "USDC"; - provider = await Provider.initialize(userKeypair); // userKeypair + provider = await Provider.init(userKeypair); // userKeypair let res = await provider.provider.connection.requestAirdrop( userKeypair.publicKey, 2_000_000_000, diff --git a/light-system-programs/tests/verifier_tests.ts b/light-system-programs/tests/verifier_tests.ts index 4376c5cd06..441bf5f177 100644 --- a/light-system-programs/tests/verifier_tests.ts +++ b/light-system-programs/tests/verifier_tests.ts @@ -95,7 +95,7 @@ describe("Verifier Zero and One Tests", () => { [USER_TOKEN_ACCOUNT] ); - let lightProvider = await LightProvider.initialize(ADMIN_AUTH_KEYPAIR); + let lightProvider = await LightProvider.init(ADMIN_AUTH_KEYPAIR); @@ -171,7 +171,7 @@ describe("Verifier Zero and One Tests", () => { // Withdrawal var tokenRecipient = recipientTokenAccount; - let lightProviderWithdrawal = await LightProvider.initialize( + let lightProviderWithdrawal = await LightProvider.init( ADMIN_AUTH_KEYPAIR ); const relayerRecipient = SolanaKeypair.generate().publicKey; diff --git a/mock-app-verifier/tests/functional_test.ts b/mock-app-verifier/tests/functional_test.ts index 5b8d0702ba..ed12b3b782 100644 --- a/mock-app-verifier/tests/functional_test.ts +++ b/mock-app-verifier/tests/functional_test.ts @@ -77,7 +77,7 @@ describe("Mock verifier functional", () => { it("Test Deposit MockVerifier cpi VerifierTwo", async () => { const poseidon = await buildPoseidonOpt(); - let lightProvider = await LightProvider.initialize(ADMIN_AUTH_KEYPAIR); + let lightProvider = await LightProvider.init(ADMIN_AUTH_KEYPAIR); outputUtxo = new Utxo({ poseidon, @@ -128,7 +128,7 @@ describe("Mock verifier functional", () => { it("Test Withdrawal MockVerifier cpi VerifierTwo", async () => { const poseidon = await buildPoseidonOpt(); - let lightProvider = await LightProvider.initialize(ADMIN_AUTH_KEYPAIR); + let lightProvider = await LightProvider.init(ADMIN_AUTH_KEYPAIR); let relayer = new Relayer( ADMIN_AUTH_KEYPAIR.publicKey, diff --git a/mock-app-verifier/tests/verifier_tests.ts b/mock-app-verifier/tests/verifier_tests.ts index 469f47b168..3c9ad75334 100644 --- a/mock-app-verifier/tests/verifier_tests.ts +++ b/mock-app-verifier/tests/verifier_tests.ts @@ -99,7 +99,7 @@ describe("Verifier Two test", () => { [USER_TOKEN_ACCOUNT], ); - let lightProvider = await LightProvider.initialize(ADMIN_AUTH_KEYPAIR); + let lightProvider = await LightProvider.init(ADMIN_AUTH_KEYPAIR); @@ -183,7 +183,7 @@ describe("Verifier Two test", () => { // Withdrawal var tokenRecipient = recipientTokenAccount; - let lightProviderWithdrawal = await LightProvider.initialize( + let lightProviderWithdrawal = await LightProvider.init( ADMIN_AUTH_KEYPAIR, ); const relayerRecipient = SolanaKeypair.generate().publicKey; diff --git a/relayer/src/index.ts b/relayer/src/index.ts index 1fbcef40f1..90528772ed 100644 --- a/relayer/src/index.ts +++ b/relayer/src/index.ts @@ -30,7 +30,7 @@ app.use((req, res, next) => { app.post("/updatemerkletree", async function (req, res) { try { - const provider = await Provider.initialize(ADMIN_AUTH_KEYPAIR); + const provider = await Provider.init(ADMIN_AUTH_KEYPAIR); console.log({provider}) await updateMerkleTreeForTest(provider.provider?.connection!); return res.status(200).json({ status: "ok" }); @@ -55,7 +55,7 @@ app.post("/relay", async function (req, res) { app.get("/merkletree", async function (req, res) { try { - const provider = await Provider.initialize(ADMIN_AUTH_KEYPAIR); + const provider = await Provider.init(ADMIN_AUTH_KEYPAIR); const merkletreeIsInited = await provider.provider!.connection.getAccountInfo(MERKLE_TREE_KEY); if (!merkletreeIsInited) { @@ -80,7 +80,7 @@ app.get("/merkletree", async function (req, res) { app.get("/lookuptable", async function (req, res) { try { - const provider = await Provider.initialize(ADMIN_AUTH_KEYPAIR); + const provider = await Provider.init(ADMIN_AUTH_KEYPAIR); const LOOK_UP_TABLE = await initLookUpTableFromFile(provider.provider!); return res.status(200).json({ data: LOOK_UP_TABLE }); } catch (e) { diff --git a/relayer/src/relay.ts b/relayer/src/relay.ts index e544027b7c..ea959d6074 100644 --- a/relayer/src/relay.ts +++ b/relayer/src/relay.ts @@ -6,7 +6,7 @@ export async function relay( req: Request, relayerPayer: Keypair ) { const { instructions } = req.body; - const provider = await Provider.initialize(relayerPayer); + const provider = await Provider.init(relayerPayer); try { let ixs = JSON.parse(instructions);