diff --git a/components/ui/badge.tsx b/components/ui/badge.tsx new file mode 100644 index 0000000..f000e3e --- /dev/null +++ b/components/ui/badge.tsx @@ -0,0 +1,36 @@ +import * as React from "react" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const badgeVariants = cva( + "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", + { + variants: { + variant: { + default: + "border-transparent bg-primary text-primary-foreground hover:bg-primary/80", + secondary: + "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80", + destructive: + "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80", + outline: "text-foreground", + }, + }, + defaultVariants: { + variant: "default", + }, + } +) + +export interface BadgeProps + extends React.HTMLAttributes, + VariantProps {} + +function Badge({ className, variant, ...props }: BadgeProps) { + return ( +
+ ) +} + +export { Badge, badgeVariants } diff --git a/components/wallet/modals/private-deposit-modal.tsx b/components/wallet/modals/private-deposit-modal.tsx index b9b1e36..f2f85f7 100644 --- a/components/wallet/modals/private-deposit-modal.tsx +++ b/components/wallet/modals/private-deposit-modal.tsx @@ -9,12 +9,18 @@ import { DialogTitle, } from "@/components/ui/dialog"; import { Label } from "@/components/ui/label"; -import { Transaction } from "@solana/web3.js"; import { - fetchRecentBlockhash, - sendSignedTransaction, -} from "@/lib/blockchain/solana-client"; + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select"; +import { PublicKey, Transaction } from "@solana/web3.js"; +import { sendSignedTransaction } from "@/lib/blockchain/solana-client"; import { X, Check } from "lucide-react"; +import { deposit } from "privacycash/utils"; +export * from "privacycash/utils"; interface PrivateDepositModalProps { open: boolean; @@ -27,9 +33,17 @@ export function PrivateDepositModal({ onOpenChange, onSuccess, }: PrivateDepositModalProps) { - const { activeAccount, shadowWireClient, isPrivateMode, signTransaction } = - useWallet(); + const { + activeAccount, + shadowWireClient, + isPrivateMode, + signTransaction, + signVersionedTransaction, + encryptionService, + connection, + } = useWallet(); const [amount, setAmount] = useState(""); + const [selectedProtocol, setSelectedProtocol] = useState("ShadowWire"); const [error, setError] = useState(null); const [status, setStatus] = useState< "idle" | "loading" | "success" | "error" @@ -37,25 +51,43 @@ export function PrivateDepositModal({ const [txHash, setTxHash] = useState(null); const handleDeposit = async () => { - if (!activeAccount || !shadowWireClient || !isPrivateMode) return; + if (!activeAccount) return; try { setStatus("loading"); setError(null); - const depositTx = await shadowWireClient.deposit({ - wallet: activeAccount.address, - amount: parseFloat(amount) * 1e9, // Convert to lamports - }); + if (selectedProtocol === "ShadowWire") { + if (!shadowWireClient || !isPrivateMode) return; - const unsignedTx = Transaction.from( - Buffer.from(depositTx.unsigned_tx_base64, "base64"), - ); + const depositTx = await shadowWireClient.deposit({ + wallet: activeAccount.address, + amount: parseFloat(amount) * 1e9, // Convert to lamports + }); - // Sign with the active account's keypair - const signedTx = await signTransaction(unsignedTx); - const txSignature = await sendSignedTransaction(signedTx); - setTxHash(txSignature); + const unsignedTx = Transaction.from( + Buffer.from(depositTx.unsigned_tx_base64, "base64"), + ); + + // Sign with the active account's keypair + const signedTx = await signTransaction(unsignedTx); + const txSignature = await sendSignedTransaction(signedTx); + setTxHash(txSignature); + } else if (selectedProtocol === "PrivacyCash" && encryptionService) { + const { WasmFactory } = await import("@lightprotocol/hasher.rs"); + const lightWasm = await WasmFactory.getInstance(); + + await deposit({ + lightWasm: lightWasm, + connection, + amount_in_lamports: parseFloat(amount) * 1e9, + keyBasePath: "/circuit2", + publicKey: new PublicKey(activeAccount.publicKey), + transactionSigner: signVersionedTransaction, + storage: localStorage, + encryptionService, + }); + } setStatus("success"); setAmount(""); @@ -124,6 +156,20 @@ export function PrivateDepositModal({

+ + +
- {token.symbol} +
+ {token.symbol} + {protocol && ( + + {protocol === "shadowwire" ? "SW" : "PC"} + + )} +
{displayBalance} diff --git a/contexts/wallet-context.tsx b/contexts/wallet-context.tsx index 77339a6..d06e966 100644 --- a/contexts/wallet-context.tsx +++ b/contexts/wallet-context.tsx @@ -27,10 +27,16 @@ import { fetchRecentBlockhash, } from "@/lib/blockchain/solana-client"; import * as bip39 from "bip39"; -import { Keypair, Transaction as SolanaTransaction } from "@solana/web3.js"; +import { + Keypair, + Transaction as SolanaTransaction, + VersionedTransaction, +} from "@solana/web3.js"; import bs58 from "bs58"; import nacl from "tweetnacl"; import { ShadowWireClient } from "@radr/shadowwire"; +import { EncryptionService, getBalanceFromUtxos } from "privacycash/utils"; +export * from "privacycash/utils"; interface WalletContextType { // State @@ -55,12 +61,21 @@ interface WalletContextType { refreshTransactions: () => Promise; completeOnboarding: (account: Account) => void; signTransaction: (tx: SolanaTransaction) => Promise; + signVersionedTransaction: ( + tx: VersionedTransaction, + ) => Promise; + signMessage: (message: Uint8Array) => Promise; - //Shadowwire + // Privacy clients shadowWireClient: ShadowWireClient | null; setShadowWireClient: (client: ShadowWireClient) => void; isShadowWireInitialized: boolean; setIsShadowWireInitialized: (isShadowWireInitialized: boolean) => void; + isPrivacyCashInitialized: boolean; + setIsPrivacyCashInitialized: (isPrivacyCashInitialized: boolean) => void; + encryptionService: EncryptionService | null; + setEncryptionService: (encryptionService: EncryptionService) => void; + connection; } const STORE_NAME = "ruma-keypairs"; @@ -168,6 +183,10 @@ export function WalletProvider({ children }: { children: ReactNode }) { const [shadowWireClient, setShadowWireClient] = useState(null); const [isShadowWireInitialized, setIsShadowWireInitialized] = useState(false); + const [isPrivacyCashInitialized, setIsPrivacyCashInitialized] = + useState(false); + const [encryptionService, setEncryptionService] = + useState(null); const activeAccount = state.accounts.find((a) => a.id === state.activeAccountId) || null; @@ -183,22 +202,38 @@ export function WalletProvider({ children }: { children: ReactNode }) { initBrowserDB(); }, []); - const fetchShadowWireBalances = async (address: string) => { - if (!shadowWireClient) { - console.error("Shadowwire client not initialized"); - return { sol: 0, usdc: 0 }; + const fetchPrivacyBalances = async (address: string) => { + const results = { + shadowwire: { sol: 0, usdc: 0 }, + privacycash: { sol: 0, usdc: 0 }, + }; + + // Fetch ShadowWire balances + if (shadowWireClient) { + try { + const balance = await shadowWireClient.getBalance(address, "SOL"); + results.shadowwire.sol = balance.available / 1e9; + // TODO: Fetch USDC balance + } catch (error) { + console.error("Failed to fetch ShadowWire balances:", error); + } } - try { - const balance = await shadowWireClient.getBalance(address, "SOL"); - const [sol, usdc] = [balance.available / 1e9, 0]; // TODO: Fetch USDC or USD1 balance and use Promise.all - return { sol, usdc }; - } catch (error) { - console.error("Failed to fetch ShadowWire balances:", error); - return { sol: 0, usdc: 0 }; + + // Fetch PrivacyCash balances + if (isPrivacyCashInitialized) { + try { + const balance = { lamports: 1000000000 }; // TODO: Find balance function for privacycash, maybe await getBalanceFromUtxos(); + results.privacycash.sol = balance.lamports / 1e9; + // TODO: Fetch USDC balance + } catch (error) { + console.error("Failed to fetch PrivacyCash balances:", error); + } } + + return results; }; - // Fetch real balances from mainnet and shadowwire (private mode) + // Fetch real balances from mainnet and privacy protocols const refreshBalances = useCallback(async () => { if (!activeAccount) { setBalances([ @@ -210,24 +245,7 @@ export function WalletProvider({ children }: { children: ReactNode }) { setIsLoading(true); try { - let sol: number = 0; - let usdc: number = 0; - - // First fetch ShadowWire balances if in private mode - if (state.isPrivateMode) { - const shadowWireBalances = await fetchShadowWireBalances( - activeAccount.address, - ); - sol = shadowWireBalances.sol; - usdc = shadowWireBalances.usdc; - } - - // Only fetch mainnet balances if not in private mode - if (!state.isPrivateMode) { - const mainnetBalances = await getAllBalances(activeAccount.address); - sol = mainnetBalances.sol || sol; // Fallback to ShadowWire if mainnet fails - usdc = mainnetBalances.usdc || usdc; // Fallback to ShadowWire if mainnet fails - } + const newBalances: TokenBalance[] = []; // Fetch prices from CoinGecko let solPrice = 0; @@ -235,6 +253,7 @@ export function WalletProvider({ children }: { children: ReactNode }) { try { const priceResponse = await fetch( "https://api.coingecko.com/api/v3/simple/price?ids=solana,usd-coin&vs_currencies=usd", + { cache: "force-cache" }, ); const prices = await priceResponse.json(); solPrice = prices.solana?.usd || 0; @@ -243,10 +262,83 @@ export function WalletProvider({ children }: { children: ReactNode }) { // Price fetch failed, use defaults } - setBalances([ - { token: SOL_TOKEN, balance: sol, usdValue: sol * solPrice }, - { token: USDC_TOKEN, balance: usdc, usdValue: usdc * usdcPrice }, - ]); + if (state.isPrivateMode) { + // Fetch privacy protocol balances + const privacyBalances = await fetchPrivacyBalances( + activeAccount.address, + ); + + // Add ShadowWire balances + if (privacyBalances.shadowwire.sol > 0) { + newBalances.push({ + token: SOL_TOKEN, + balance: privacyBalances.shadowwire.sol, + usdValue: privacyBalances.shadowwire.sol * solPrice, + protocol: "shadowwire", + }); + } + if (privacyBalances.shadowwire.usdc > 0) { + newBalances.push({ + token: USDC_TOKEN, + balance: privacyBalances.shadowwire.usdc, + usdValue: privacyBalances.shadowwire.usdc * usdcPrice, + protocol: "shadowwire", + }); + } + + // Add PrivacyCash balances + if (privacyBalances.privacycash.sol > 0) { + newBalances.push({ + token: SOL_TOKEN, + balance: privacyBalances.privacycash.sol, + usdValue: privacyBalances.privacycash.sol * solPrice, + protocol: "privacycash", + }); + } + if (privacyBalances.privacycash.usdc > 0) { + newBalances.push({ + token: USDC_TOKEN, + balance: privacyBalances.privacycash.usdc, + usdValue: privacyBalances.privacycash.usdc * usdcPrice, + protocol: "privacycash", + }); + } + + // If no private balances, show zero balances + if (newBalances.length === 0) { + newBalances.push( + { + token: SOL_TOKEN, + balance: 0, + usdValue: 0, + protocol: "shadowwire", + }, + { + token: USDC_TOKEN, + balance: 0, + usdValue: 0, + protocol: "shadowwire", + }, + ); + } + } else { + // Fetch mainnet balances + const mainnetBalances = await getAllBalances(activeAccount.address); + newBalances.push( + { + token: SOL_TOKEN, + balance: mainnetBalances.sol || 0, + usdValue: (mainnetBalances.sol || 0) * solPrice, + }, + { + token: USDC_TOKEN, + balance: mainnetBalances.usdc || 0, + usdValue: (mainnetBalances.usdc || 0) * usdcPrice, + }, + ); + } + + setBalances(newBalances); } catch (error) { console.error("Failed to fetch balances:", error); setBalances([ @@ -256,7 +348,12 @@ export function WalletProvider({ children }: { children: ReactNode }) { } finally { setIsLoading(false); } - }, [activeAccount, state.isPrivateMode, isShadowWireInitialized]); + }, [ + activeAccount, + state.isPrivateMode, + isShadowWireInitialized, + isPrivacyCashInitialized, + ]); // Fetch real transactions from devnet const refreshTransactions = useCallback(async () => { @@ -394,6 +491,47 @@ export function WalletProvider({ children }: { children: ReactNode }) { [activeAccount], ); + const signVersionedTransaction = useCallback( + async (tx: VersionedTransaction): Promise => { + if (!activeAccount) { + throw new Error("No active account"); + } + const keypair = await getKeypairFromStorage(activeAccount.id); + if (!keypair) { + throw new Error("Signing key not found"); + } + const correctTypeKeypair = Keypair.fromSecretKey(keypair.secretKey); + + tx.sign([correctTypeKeypair]); + return tx; + }, + [activeAccount], + ); + + const signMessage = useCallback( + async (message: Uint8Array): Promise => { + if (!activeAccount) { + throw new Error("No active account"); + } + const keypair = await getKeypairFromStorage(activeAccount.id); + if (!keypair) { + throw new Error("Signing key not found"); + } + + // Use the correct keypair type + const correctTypeKeypair = Keypair.fromSecretKey(keypair.secretKey); + + // Sign the message using the keypair + const signature = nacl.sign.detached( + message, + correctTypeKeypair.secretKey, + ); + + return new Uint8Array(signature); + }, + [activeAccount], + ); + return ( {children} diff --git a/lib/blockchain/solana-client.ts b/lib/blockchain/solana-client.ts index 758b7ce..cf0463e 100644 --- a/lib/blockchain/solana-client.ts +++ b/lib/blockchain/solana-client.ts @@ -6,7 +6,7 @@ import type { Transaction } from "./types"; import { Transaction as SolanaTransaction } from "@solana/web3.js"; import bs58 from "bs58"; -const FALLBACK_RPC_URLS = [ +export const FALLBACK_RPC_URLS = [ "https://api.mainnet.solana.com", // Solana public mainnet rpc ].filter(Boolean); // Remove empty strings diff --git a/lib/blockchain/types.ts b/lib/blockchain/types.ts index 2997061..71ec253 100644 --- a/lib/blockchain/types.ts +++ b/lib/blockchain/types.ts @@ -11,10 +11,13 @@ export interface Token { logoUrl: string } +export type PrivacyProtocol = "shadowwire" | "privacycash" + export interface TokenBalance { token: Token balance: number usdValue: number + protocol?: PrivacyProtocol // Optional for public balances } export interface Account { diff --git a/lib/privacycash/init-privacycash.ts b/lib/privacycash/init-privacycash.ts new file mode 100644 index 0000000..adc6d9b --- /dev/null +++ b/lib/privacycash/init-privacycash.ts @@ -0,0 +1,43 @@ +import { PublicKey } from "@solana/web3.js"; + +export async function getSignedSignature( + signed: Signed, + signMessage: (message: Uint8Array) => Promise, +): Promise { + const encodedMessage = new TextEncoder().encode( + `Privacy Money account sign in`, + ); + + // ask for sign + let signature: Uint8Array; + try { + signature = await signMessage(encodedMessage); + } catch (err: any) { + if ( + err instanceof Error && + err.message?.toLowerCase().includes("user rejected") + ) { + throw new Error("User rejected the signature request"); + } + throw new Error("Failed to sign message: " + err.message); + } + + // If wallet.signMessage returned an object, extract `signature` + // @ts-ignore + if (signature.signature) { + // @ts-ignore + signature = signature.signature; + } + + if (!(signature instanceof Uint8Array)) { + throw new Error("signature is not an Uint8Array type"); + } + signed.signature = signature; + return signed; +} + +export type Signed = { + publicKey: PublicKey; + signature?: Uint8Array; + provider: any; +}; diff --git a/package.json b/package.json index d499c1f..46a8860 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ }, "dependencies": { "@hookform/resolvers": "^3.10.0", + "@lightprotocol/hasher.rs": "^0.2.1", "@radix-ui/react-accordion": "1.2.2", "@radix-ui/react-alert-dialog": "1.1.4", "@radix-ui/react-aspect-ratio": "1.1.1", @@ -52,6 +53,7 @@ "input-otp": "1.4.1", "lucide-react": "^0.454.0", "next-themes": "^0.4.6", + "privacycash": "^1.1.11", "react": "19.2.0", "react-day-picker": "9.8.0", "react-dom": "19.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a37c6b7..6eb28e3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,9 @@ importers: '@hookform/resolvers': specifier: ^3.10.0 version: 3.10.0(react-hook-form@7.60.0(react@19.2.0)) + '@lightprotocol/hasher.rs': + specifier: ^0.2.1 + version: 0.2.1 '@radix-ui/react-accordion': specifier: 1.2.2 version: 1.2.2(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -140,6 +143,9 @@ importers: next-themes: specifier: ^0.4.6 version: 0.4.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + privacycash: + specifier: ^1.1.11 + version: 1.1.11(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.0.2)(utf-8-validate@5.0.10) react: specifier: 19.2.0 version: 19.2.0 @@ -213,6 +219,9 @@ importers: packages: + '@adraffy/ens-normalize@1.10.1': + resolution: {integrity: sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==} + '@alloc/quick-lru@5.2.0': resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} @@ -233,6 +242,20 @@ packages: resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} engines: {node: '>=6.9.0'} + '@coral-xyz/anchor-errors@0.31.1': + resolution: {integrity: sha512-NhNEku4F3zzUSBtrYz84FzYWm48+9OvmT1Hhnwr6GnPQry2dsEqH/ti/7ASjjpoFTWRnPXrjAIT1qM6Isop+LQ==} + engines: {node: '>=10'} + + '@coral-xyz/anchor@0.31.1': + resolution: {integrity: sha512-QUqpoEK+gi2S6nlYc2atgT2r41TT3caWr/cPUEL8n8Md9437trZ68STknq897b82p5mW0XrTBNOzRbmIRJtfsA==} + engines: {node: '>=17'} + + '@coral-xyz/borsh@0.31.1': + resolution: {integrity: sha512-9N8AU9F0ubriKfNE3g1WF0/4dtlGXoBN/hd1PvbNBamBNwRgHxH4P+o3Zt7rSEloW1HUs6LfZEchlx9fW7POYw==} + engines: {node: '>=10'} + peerDependencies: + '@solana/web3.js': ^1.69.0 + '@date-fns/tz@1.2.0': resolution: {integrity: sha512-LBrd7MiJZ9McsOgxqWX7AaxrDjcFVjWH/tIKJd7pnR7McaslGYOP1QmmiBXdJH/H/yLCT+rcQ7FaPBUxRGUtrg==} @@ -249,6 +272,18 @@ packages: '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} + '@ethersproject/bytes@5.8.0': + resolution: {integrity: sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==} + + '@ethersproject/keccak256@5.8.0': + resolution: {integrity: sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==} + + '@ethersproject/logger@5.8.0': + resolution: {integrity: sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==} + + '@ethersproject/sha2@5.8.0': + resolution: {integrity: sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==} + '@floating-ui/core@1.7.3': resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} @@ -269,6 +304,12 @@ packages: peerDependencies: react-hook-form: ^7.0.0 + '@iden3/bigarray@0.0.2': + resolution: {integrity: sha512-Xzdyxqm1bOFF6pdIsiHLLl3HkSLjbhqJHVyqaTxXt3RqXBEnmsUmEW47H7VOi/ak7TdkRpNkxjyK5Zbkm+y52g==} + + '@iden3/binfileutils@0.0.12': + resolution: {integrity: sha512-naAmzuDufRIcoNfQ1d99d7hGHufLA3wZSibtr4dMe6ZeiOPV1KwOZWTJ1YVz4HbaWlpDuzVU72dS4ATQS4PXBQ==} + '@isaacs/fs-minipass@4.0.1': resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} engines: {node: '>=18.0.0'} @@ -325,6 +366,9 @@ packages: '@leichtgewicht/ip-codec@2.0.5': resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} + '@lightprotocol/hasher.rs@0.2.1': + resolution: {integrity: sha512-uslXM+t8kIOeQKccS8eJIPhVglnaIrz06AUVYJjeR9RHM/26KFEKK431a5mBxvaAwVhRLM0s9ZFN+C9wKgNAjA==} + '@module-federation/error-codes@0.22.0': resolution: {integrity: sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug==} @@ -346,10 +390,17 @@ packages: '@napi-rs/wasm-runtime@1.0.7': resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==} + '@noble/curves@1.2.0': + resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} + '@noble/curves@1.9.7': resolution: {integrity: sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==} engines: {node: ^14.21.3 || >=16} + '@noble/hashes@1.3.2': + resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} + engines: {node: '>= 16'} + '@noble/hashes@1.8.0': resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} engines: {node: ^14.21.3 || >=16} @@ -1092,22 +1143,58 @@ packages: '@rspack/lite-tapable@1.1.0': resolution: {integrity: sha512-E2B0JhYFmVAwdDiG14+DW0Di4Ze4Jg10Pc4/lILUrd5DRCaklduz2OvJ5HYQ6G+hd+WTzqQb3QnDNfK4yvAFYw==} + '@solana/buffer-layout-utils@0.2.0': + resolution: {integrity: sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==} + engines: {node: '>= 10'} + '@solana/buffer-layout@4.0.1': resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} engines: {node: '>=5.10'} + '@solana/codecs-core@2.0.0-rc.1': + resolution: {integrity: sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ==} + peerDependencies: + typescript: '>=5' + '@solana/codecs-core@2.3.0': resolution: {integrity: sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' + '@solana/codecs-data-structures@2.0.0-rc.1': + resolution: {integrity: sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog==} + peerDependencies: + typescript: '>=5' + + '@solana/codecs-numbers@2.0.0-rc.1': + resolution: {integrity: sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ==} + peerDependencies: + typescript: '>=5' + '@solana/codecs-numbers@2.3.0': resolution: {integrity: sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg==} engines: {node: '>=20.18.0'} peerDependencies: typescript: '>=5.3.3' + '@solana/codecs-strings@2.0.0-rc.1': + resolution: {integrity: sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g==} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + typescript: '>=5' + + '@solana/codecs@2.0.0-rc.1': + resolution: {integrity: sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ==} + peerDependencies: + typescript: '>=5' + + '@solana/errors@2.0.0-rc.1': + resolution: {integrity: sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ==} + hasBin: true + peerDependencies: + typescript: '>=5' + '@solana/errors@2.3.0': resolution: {integrity: sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ==} engines: {node: '>=20.18.0'} @@ -1115,6 +1202,29 @@ packages: peerDependencies: typescript: '>=5.3.3' + '@solana/options@2.0.0-rc.1': + resolution: {integrity: sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA==} + peerDependencies: + typescript: '>=5' + + '@solana/spl-token-group@0.0.7': + resolution: {integrity: sha512-V1N/iX7Cr7H0uazWUT2uk27TMqlqedpXHRqqAbVO2gvmJyT0E0ummMEAVQeXZ05ZhQ/xF39DLSdBp90XebWEug==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.95.3 + + '@solana/spl-token-metadata@0.1.6': + resolution: {integrity: sha512-7sMt1rsm/zQOQcUWllQX9mD2O6KhSAtY1hFR2hfFwgqfFWzSY9E9GDvFVNYUI1F0iQKcm6HmePU9QbKRXTEBiA==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.95.3 + + '@solana/spl-token@0.4.14': + resolution: {integrity: sha512-u09zr96UBpX4U685MnvQsNzlvw9TiY005hk1vJmJr7gMJldoPG1eYU5/wNEyOA5lkMLiR/gOi9SFD4MefOYEsA==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.95.5 + '@solana/web3.js@1.98.4': resolution: {integrity: sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw==} @@ -1212,6 +1322,9 @@ packages: '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@types/bn.js@5.2.0': + resolution: {integrity: sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==} + '@types/body-parser@1.19.6': resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} @@ -1290,6 +1403,9 @@ packages: '@types/node@22.0.0': resolution: {integrity: sha512-VT7KSYudcPOzP5Q0wfbowyNLaVR8QWUdw+088uFWwfvpY6uCWaXpqV6ieLAu9WBcnTa7H4Z5RLK8I5t2FuOcqw==} + '@types/node@22.7.5': + resolution: {integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==} + '@types/qs@6.14.0': resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} @@ -1317,6 +1433,9 @@ packages: '@types/serve-static@1.15.10': resolution: {integrity: sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==} + '@types/snarkjs@0.7.9': + resolution: {integrity: sha512-pb4Bq3GI2YQOQOG0dR/YuQs/mqcuL6k/vnz68LIPtpA2frrUL3twf69a3AUK9eUmNNeW0RIKkq6scDlC75Is+g==} + '@types/sockjs@0.3.36': resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} @@ -1342,6 +1461,9 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + aes-js@4.0.0-beta.5: + resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} + agentkeepalive@4.6.0: resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} engines: {node: '>= 8.0.0'} @@ -1381,6 +1503,9 @@ packages: array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + autoprefixer@10.4.20: resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} engines: {node: ^10 || ^12 || >=14} @@ -1392,6 +1517,9 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + base-x@3.0.11: resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==} @@ -1411,13 +1539,30 @@ packages: batch@0.6.1: resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} + bfj@7.1.0: + resolution: {integrity: sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==} + engines: {node: '>= 8.0.0'} + + bigint-buffer@1.1.5: + resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} + engines: {node: '>= 10.0.0'} + + bignumber.js@9.3.1: + resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} + binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + bip39@3.1.0: resolution: {integrity: sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A==} + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + bn.js@5.2.2: resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==} @@ -1431,6 +1576,12 @@ packages: borsh@0.7.0: resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + borsh@2.0.0: + resolution: {integrity: sha512-kc9+BgR3zz9+cjbwM8ODoUB4fs3X3I5A/HtX7LZKxCLaMrEeDFoBpnhZY//DTS1VZBSs6S5v46RZRbZjRFspEg==} + + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -1449,6 +1600,10 @@ packages: bs58@6.0.0: resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==} + buffer-layout@1.2.2: + resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==} + engines: {node: '>=4.5'} + buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} @@ -1480,6 +1635,10 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + caniuse-lite@1.0.30001764: resolution: {integrity: sha512-9JGuzl2M+vPL+pz70gtMF9sHdMFbY9FJaQBi186cHKH3pSzDvzoUJUPV6fqiKIMyXbud9ZLg4F3Yza1vJ1+93g==} @@ -1487,6 +1646,9 @@ packages: resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + check-types@11.2.3: + resolution: {integrity: sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==} + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -1499,6 +1661,10 @@ packages: resolution: {integrity: sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==} engines: {node: '>= 0.10'} + circom_runtime@0.1.28: + resolution: {integrity: sha512-ACagpQ7zBRLKDl5xRZ4KpmYIcZDUjOiNRuxvXLqhnnlLSVY1Dbvh73TI853nqoR0oEbihtWmMSjgc5f+pXf/jQ==} + hasBin: true + class-variance-authority@0.7.1: resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} @@ -1515,6 +1681,10 @@ packages: colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + commander@14.0.2: resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==} engines: {node: '>=20'} @@ -1571,6 +1741,9 @@ packages: create-hmac@1.1.7: resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + cross-fetch@3.2.0: + resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} + csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} @@ -1647,6 +1820,9 @@ packages: decimal.js-light@2.5.1: resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==} + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + default-browser-id@5.0.1: resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} engines: {node: '>=18'} @@ -1713,6 +1889,11 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + electron-to-chromium@1.5.267: resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==} @@ -1773,10 +1954,37 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + escodegen@1.14.3: + resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} + engines: {node: '>=4.0'} + hasBin: true + + esprima@1.2.2: + resolution: {integrity: sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==} + engines: {node: '>=0.4.0'} + hasBin: true + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + etag@1.8.1: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} + ethers@6.16.0: + resolution: {integrity: sha512-U1wulmetNymijEhpSEQ7Ct/P/Jw9/e7R1j5XIbPRydgV2DjLVMsULDlNksq3RQnFgKoLlZf88ijYtWEXcPa07A==} + engines: {node: '>=14.0.0'} + eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} @@ -1802,16 +2010,37 @@ packages: resolution: {integrity: sha512-jt2DW/aNFNwke7AUd+Z+e6pz39KO5rzdbbFCg2sGafS4mk13MI7Z8O5z9cADNn5lhGODIgLwug6TZO2ctf7kcw==} engines: {node: '>=6.0.0'} + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-stable-stringify@1.0.0: resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + fastestsmallesttextencoderdecoder@1.0.22: + resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + + fastfile@0.0.20: + resolution: {integrity: sha512-r5ZDbgImvVWCP0lA/cGNgQcZqR+aYdFx3u+CtJqUE510pBUVGMn4ulL/iRTI4tACTYsNJ736uzFxEBXesPAktA==} + faye-websocket@0.11.4: resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} engines: {node: '>=0.8.0'} + ffjavascript@0.3.0: + resolution: {integrity: sha512-l7sR5kmU3gRwDy8g0Z2tYBXy5ttmafRPFOqY7S6af5cq51JqJWt5eQ/lSR/rs2wQNbDYaYlQr5O+OSUf/oMLoQ==} + + ffjavascript@0.3.1: + resolution: {integrity: sha512-4PbK1WYodQtuF47D4pRI5KUg3Q392vuP5WjE1THSnceHdXwU3ijaoS0OqxTzLknCtz4Z2TtABzkBdBdMn3B/Aw==} + + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -1903,10 +2132,17 @@ packages: resolution: {integrity: sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==} engines: {node: '>= 0.8'} + hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + hoopy@0.1.4: + resolution: {integrity: sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==} + engines: {node: '>= 6.0.0'} + hpack.js@2.1.6: resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} @@ -1958,6 +2194,10 @@ packages: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + inherits@2.0.3: resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} @@ -2042,6 +2282,11 @@ packages: peerDependencies: ws: '*' + jake@10.9.4: + resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==} + engines: {node: '>=10'} + hasBin: true + jayson@4.3.0: resolution: {integrity: sha512-AauzHcUcqs8OBnCHOkJY280VaTiCm57AbuO7lqzcw7JapGj50BisE3xhksye4zlTSR1+1tAz67wLTl8tEH1obQ==} engines: {node: '>=8'} @@ -2051,6 +2296,9 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true + js-sha3@0.8.0: + resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -2067,9 +2315,16 @@ packages: json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + jsonpath@1.1.1: + resolution: {integrity: sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==} + launch-editor@2.12.0: resolution: {integrity: sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==} + levn@0.3.0: + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + engines: {node: '>= 0.8.0'} + lightningcss-darwin-arm64@1.30.1: resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==} engines: {node: '>= 12.0.0'} @@ -2140,6 +2395,9 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + logplease@1.2.15: + resolution: {integrity: sha512-jLlHnlsPSJjpwUfcNyUxXCl33AYg2cHhIf9QhGL2T4iPT0XPB+xP1LRKFPgIg1M/sg9kAJvy94w9CzBNrfnstA==} + loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -2201,6 +2459,10 @@ packages: minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + minipass@7.1.2: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} @@ -2259,6 +2521,10 @@ packages: resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true + node-localstorage@3.0.5: + resolution: {integrity: sha512-GCwtK33iwVXboZWYcqQHu3aRvXEBwmPkAMRBLeaX86ufhqslyUkLGsi4aW3INEfdQYpUB5M9qtYf3eHvAk2VBg==} + engines: {node: '>=0.12'} + node-releases@2.0.27: resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} @@ -2297,10 +2563,17 @@ packages: resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} hasBin: true + optionator@0.8.3: + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + engines: {node: '>= 0.8.0'} + p-retry@6.2.1: resolution: {integrity: sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==} engines: {node: '>=16.17'} + pako@2.1.0: + resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -2347,6 +2620,13 @@ packages: resolution: {integrity: sha512-27VKOqrYfPncKA2NrFOVhP5MGAfHKLYn/Q0mz9cNQyRAKYi3VNHwYU2qKKqPCqgBmeeJ0uAFB56NumXZ5ZReXg==} engines: {node: ^10 || ^12 || >=14} + prelude-ls@1.1.2: + resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} + engines: {node: '>= 0.8.0'} + + privacycash@1.1.11: + resolution: {integrity: sha512-iUJ+RZWTfYTPLiInrfRcKLXH37gYukCDMSDQp49/Hv3SixNOzB/jthiJGV+68SZJDwxdXh+MVQPOAJKPdg2DVw==} + process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} @@ -2361,6 +2641,9 @@ packages: resolution: {integrity: sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==} engines: {node: '>=0.6'} + r1csfile@0.0.48: + resolution: {integrity: sha512-kHRkKUJNaor31l05f2+RFzvcH5XSa7OfEfd/l4hzjte6NL6fjRkSMfZ4BjySW9wmfdwPOtq3mXurzPvPGEf5Tw==} + range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} @@ -2566,10 +2849,18 @@ packages: resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + sirv@2.0.4: resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} engines: {node: '>= 10'} + snarkjs@0.7.6: + resolution: {integrity: sha512-4uH1xA5JzVU5jaaWS2fXej3+RC6L5Erhr6INTJtUA27du4Elbh4VXCeeRjB4QiwL6N6y7SNKePw5prTxyEf4Zg==} + hasBin: true + sockjs@0.3.24: resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} @@ -2583,6 +2874,10 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + spdy-transport@3.0.0: resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} @@ -2590,6 +2885,9 @@ packages: resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} engines: {node: '>=6.0.0'} + static-eval@2.0.2: + resolution: {integrity: sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==} + statuses@1.5.0: resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} engines: {node: '>= 0.6'} @@ -2607,6 +2905,9 @@ packages: string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + superstruct@0.15.5: + resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==} + superstruct@2.0.2: resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} engines: {node: '>=14.0.0'} @@ -2645,6 +2946,13 @@ packages: tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + tmp-promise@3.0.3: + resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} + + tmp@0.2.5: + resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==} + engines: {node: '>=14.14'} + to-buffer@1.2.2: resolution: {integrity: sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==} engines: {node: '>= 0.4'} @@ -2657,6 +2965,9 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} @@ -2670,12 +2981,22 @@ packages: peerDependencies: tslib: '2' + tryer@1.0.1: + resolution: {integrity: sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==} + + tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} tweetnacl@1.0.3: resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} + type-check@0.3.2: + resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} + engines: {node: '>= 0.8.0'} + type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -2689,9 +3010,15 @@ packages: engines: {node: '>=12.20'} hasBin: true + underscore@1.12.1: + resolution: {integrity: sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==} + undici-types@6.11.1: resolution: {integrity: sha512-mIDEX2ek50x0OlRgxryxsenE5XaQD4on5U2inY7RApK3SOJpofyw7uW2AyfMKkhAxXIceo2DeWGVGwyvng1GNQ==} + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} @@ -2755,9 +3082,18 @@ packages: victory-vendor@36.9.2: resolution: {integrity: sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==} + wasmbuilder@0.0.16: + resolution: {integrity: sha512-Qx3lEFqaVvp1cEYW7Bfi+ebRJrOiwz2Ieu7ZG2l7YyeSJIok/reEQCQCuicj/Y32ITIJuGIM9xZQppGx5LrQdA==} + + wasmcurves@0.2.2: + resolution: {integrity: sha512-JRY908NkmKjFl4ytnTu5ED6AwPD+8VJ9oc94kdq7h5bIwbj0L4TDJ69mG+2aLs2SoCmGfqIesMWTEJjtYsoQXQ==} + wbuf@1.7.3: resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} + web-worker@1.2.0: + resolution: {integrity: sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==} + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -2803,6 +3139,14 @@ packages: resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==} engines: {node: '>= 0.4'} + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + write-file-atomic@5.0.1: + resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + ws@7.5.10: resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} engines: {node: '>=8.3.0'} @@ -2815,6 +3159,18 @@ packages: utf-8-validate: optional: true + ws@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + ws@8.19.0: resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} engines: {node: '>=10.0.0'} @@ -2840,6 +3196,8 @@ packages: snapshots: + '@adraffy/ens-normalize@1.10.1': {} + '@alloc/quick-lru@5.2.0': {} '@ampproject/remapping@2.3.0': @@ -2857,6 +3215,35 @@ snapshots: '@babel/runtime@7.28.6': {} + '@coral-xyz/anchor-errors@0.31.1': {} + + '@coral-xyz/anchor@0.31.1(bufferutil@4.1.0)(typescript@5.0.2)(utf-8-validate@5.0.10)': + dependencies: + '@coral-xyz/anchor-errors': 0.31.1 + '@coral-xyz/borsh': 0.31.1(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.0.2)(utf-8-validate@5.0.10)) + '@noble/hashes': 1.8.0 + '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.0.2)(utf-8-validate@5.0.10) + bn.js: 5.2.2 + bs58: 4.0.1 + buffer-layout: 1.2.2 + camelcase: 6.3.0 + cross-fetch: 3.2.0 + eventemitter3: 4.0.7 + pako: 2.1.0 + superstruct: 0.15.5 + toml: 3.0.0 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + + '@coral-xyz/borsh@0.31.1(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.0.2)(utf-8-validate@5.0.10))': + dependencies: + '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.0.2)(utf-8-validate@5.0.10) + bn.js: 5.2.2 + buffer-layout: 1.2.2 + '@date-fns/tz@1.2.0': {} '@discoveryjs/json-ext@0.5.7': {} @@ -2877,6 +3264,23 @@ snapshots: tslib: 2.8.1 optional: true + '@ethersproject/bytes@5.8.0': + dependencies: + '@ethersproject/logger': 5.8.0 + + '@ethersproject/keccak256@5.8.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + js-sha3: 0.8.0 + + '@ethersproject/logger@5.8.0': {} + + '@ethersproject/sha2@5.8.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + hash.js: 1.1.7 + '@floating-ui/core@1.7.3': dependencies: '@floating-ui/utils': 0.2.10 @@ -2898,6 +3302,13 @@ snapshots: dependencies: react-hook-form: 7.60.0(react@19.2.0) + '@iden3/bigarray@0.0.2': {} + + '@iden3/binfileutils@0.0.12': + dependencies: + fastfile: 0.0.20 + ffjavascript: 0.3.1 + '@isaacs/fs-minipass@4.0.1': dependencies: minipass: 7.1.2 @@ -2954,6 +3365,8 @@ snapshots: '@leichtgewicht/ip-codec@2.0.5': {} + '@lightprotocol/hasher.rs@0.2.1': {} + '@module-federation/error-codes@0.22.0': {} '@module-federation/runtime-core@0.22.0': @@ -2986,10 +3399,16 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true + '@noble/curves@1.2.0': + dependencies: + '@noble/hashes': 1.3.2 + '@noble/curves@1.9.7': dependencies: '@noble/hashes': 1.8.0 + '@noble/hashes@1.3.2': {} + '@noble/hashes@1.8.0': {} '@polka/url@1.0.0-next.29': {} @@ -3784,27 +4203,124 @@ snapshots: '@rspack/lite-tapable@1.1.0': {} + '@solana/buffer-layout-utils@0.2.0(bufferutil@4.1.0)(typescript@5.0.2)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.0.2)(utf-8-validate@5.0.10) + bigint-buffer: 1.1.5 + bignumber.js: 9.3.1 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + '@solana/buffer-layout@4.0.1': dependencies: buffer: 6.0.3 + '@solana/codecs-core@2.0.0-rc.1(typescript@5.0.2)': + dependencies: + '@solana/errors': 2.0.0-rc.1(typescript@5.0.2) + typescript: 5.0.2 + '@solana/codecs-core@2.3.0(typescript@5.0.2)': dependencies: '@solana/errors': 2.3.0(typescript@5.0.2) typescript: 5.0.2 + '@solana/codecs-data-structures@2.0.0-rc.1(typescript@5.0.2)': + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.0.2) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.0.2) + '@solana/errors': 2.0.0-rc.1(typescript@5.0.2) + typescript: 5.0.2 + + '@solana/codecs-numbers@2.0.0-rc.1(typescript@5.0.2)': + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.0.2) + '@solana/errors': 2.0.0-rc.1(typescript@5.0.2) + typescript: 5.0.2 + '@solana/codecs-numbers@2.3.0(typescript@5.0.2)': dependencies: '@solana/codecs-core': 2.3.0(typescript@5.0.2) '@solana/errors': 2.3.0(typescript@5.0.2) typescript: 5.0.2 + '@solana/codecs-strings@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.0.2)': + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.0.2) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.0.2) + '@solana/errors': 2.0.0-rc.1(typescript@5.0.2) + fastestsmallesttextencoderdecoder: 1.0.22 + typescript: 5.0.2 + + '@solana/codecs@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.0.2)': + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.0.2) + '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@5.0.2) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.0.2) + '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.0.2) + '@solana/options': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.0.2) + typescript: 5.0.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/errors@2.0.0-rc.1(typescript@5.0.2)': + dependencies: + chalk: 5.6.2 + commander: 12.1.0 + typescript: 5.0.2 + '@solana/errors@2.3.0(typescript@5.0.2)': dependencies: chalk: 5.6.2 commander: 14.0.2 typescript: 5.0.2 + '@solana/options@2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.0.2)': + dependencies: + '@solana/codecs-core': 2.0.0-rc.1(typescript@5.0.2) + '@solana/codecs-data-structures': 2.0.0-rc.1(typescript@5.0.2) + '@solana/codecs-numbers': 2.0.0-rc.1(typescript@5.0.2) + '@solana/codecs-strings': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.0.2) + '@solana/errors': 2.0.0-rc.1(typescript@5.0.2) + typescript: 5.0.2 + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + + '@solana/spl-token-group@0.0.7(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.0.2)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.0.2)': + dependencies: + '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.0.2) + '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.0.2)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - typescript + + '@solana/spl-token-metadata@0.1.6(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.0.2)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.0.2)': + dependencies: + '@solana/codecs': 2.0.0-rc.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.0.2) + '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.0.2)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - typescript + + '@solana/spl-token@0.4.14(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.0.2)(utf-8-validate@5.0.10))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.0.2)(utf-8-validate@5.0.10)': + dependencies: + '@solana/buffer-layout': 4.0.1 + '@solana/buffer-layout-utils': 0.2.0(bufferutil@4.1.0)(typescript@5.0.2)(utf-8-validate@5.0.10) + '@solana/spl-token-group': 0.0.7(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.0.2)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.0.2) + '@solana/spl-token-metadata': 0.1.6(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.0.2)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.0.2) + '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.0.2)(utf-8-validate@5.0.10) + buffer: 6.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - typescript + - utf-8-validate + '@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.0.2)(utf-8-validate@5.0.10)': dependencies: '@babel/runtime': 7.28.6 @@ -3909,6 +4425,10 @@ snapshots: tslib: 2.8.1 optional: true + '@types/bn.js@5.2.0': + dependencies: + '@types/node': 22.0.0 + '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 @@ -3998,6 +4518,10 @@ snapshots: dependencies: undici-types: 6.11.1 + '@types/node@22.7.5': + dependencies: + undici-types: 6.19.8 + '@types/qs@6.14.0': {} '@types/range-parser@1.2.7': {} @@ -4031,6 +4555,8 @@ snapshots: '@types/node': 22.0.0 '@types/send': 0.17.6 + '@types/snarkjs@0.7.9': {} + '@types/sockjs@0.3.36': dependencies: '@types/node': 22.0.0 @@ -4056,6 +4582,8 @@ snapshots: acorn@8.15.0: {} + aes-js@4.0.0-beta.5: {} + agentkeepalive@4.6.0: dependencies: humanize-ms: 1.2.1 @@ -4091,6 +4619,8 @@ snapshots: array-flatten@1.1.1: {} + async@3.2.6: {} + autoprefixer@10.4.20(postcss@8.5.0): dependencies: browserslist: 4.28.1 @@ -4105,6 +4635,8 @@ snapshots: dependencies: possible-typed-array-names: 1.1.0 + balanced-match@1.0.2: {} + base-x@3.0.11: dependencies: safe-buffer: 5.2.1 @@ -4119,12 +4651,32 @@ snapshots: batch@0.6.1: {} + bfj@7.1.0: + dependencies: + bluebird: 3.7.2 + check-types: 11.2.3 + hoopy: 0.1.4 + jsonpath: 1.1.1 + tryer: 1.0.1 + + bigint-buffer@1.1.5: + dependencies: + bindings: 1.5.0 + + bignumber.js@9.3.1: {} + binary-extensions@2.3.0: {} + bindings@1.5.0: + dependencies: + file-uri-to-path: 1.0.0 + bip39@3.1.0: dependencies: '@noble/hashes': 1.8.0 + bluebird@3.7.2: {} + bn.js@5.2.2: {} body-parser@1.20.4: @@ -4155,6 +4707,12 @@ snapshots: bs58: 4.0.1 text-encoding-utf-8: 1.0.2 + borsh@2.0.0: {} + + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 + braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -4179,6 +4737,8 @@ snapshots: dependencies: base-x: 5.0.1 + buffer-layout@1.2.2: {} + buffer@6.0.3: dependencies: base64-js: 1.5.1 @@ -4214,10 +4774,14 @@ snapshots: callsites@3.1.0: {} + camelcase@6.3.0: {} + caniuse-lite@1.0.30001764: {} chalk@5.6.2: {} + check-types@11.2.3: {} + chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -4238,6 +4802,10 @@ snapshots: safe-buffer: 5.2.1 to-buffer: 1.2.2 + circom_runtime@0.1.28: + dependencies: + ffjavascript: 0.3.1 + class-variance-authority@0.7.1: dependencies: clsx: 2.1.1 @@ -4258,6 +4826,8 @@ snapshots: colorette@2.0.20: {} + commander@12.1.0: {} + commander@14.0.2: {} commander@2.20.3: {} @@ -4320,6 +4890,12 @@ snapshots: safe-buffer: 5.2.1 sha.js: 2.4.12 + cross-fetch@3.2.0: + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + csstype@3.2.3: {} d3-array@3.2.4: @@ -4376,6 +4952,8 @@ snapshots: decimal.js-light@2.5.1: {} + deep-is@0.1.4: {} + default-browser-id@5.0.1: {} default-browser@5.4.0: @@ -4431,6 +5009,10 @@ snapshots: ee-first@1.1.1: {} + ejs@3.1.10: + dependencies: + jake: 10.9.4 + electron-to-chromium@1.5.267: {} embla-carousel-react@8.5.1(react@19.2.0): @@ -4478,8 +5060,38 @@ snapshots: escape-string-regexp@4.0.0: {} + escodegen@1.14.3: + dependencies: + esprima: 4.0.1 + estraverse: 4.3.0 + esutils: 2.0.3 + optionator: 0.8.3 + optionalDependencies: + source-map: 0.6.1 + + esprima@1.2.2: {} + + esprima@4.0.1: {} + + estraverse@4.3.0: {} + + esutils@2.0.3: {} + etag@1.8.1: {} + ethers@6.16.0(bufferutil@4.1.0)(utf-8-validate@5.0.10): + dependencies: + '@adraffy/ens-normalize': 1.10.1 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@types/node': 22.7.5 + aes-js: 4.0.0-beta.5 + tslib: 2.7.0 + ws: 8.17.1(bufferutil@4.1.0)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + eventemitter3@4.0.7: {} eventemitter3@5.0.1: {} @@ -4528,14 +5140,38 @@ snapshots: fast-equals@5.4.0: {} + fast-levenshtein@2.0.6: {} + fast-stable-stringify@1.0.0: {} fast-uri@3.1.0: {} + fastestsmallesttextencoderdecoder@1.0.22: {} + + fastfile@0.0.20: {} + faye-websocket@0.11.4: dependencies: websocket-driver: 0.7.4 + ffjavascript@0.3.0: + dependencies: + wasmbuilder: 0.0.16 + wasmcurves: 0.2.2 + web-worker: 1.2.0 + + ffjavascript@0.3.1: + dependencies: + wasmbuilder: 0.0.16 + wasmcurves: 0.2.2 + web-worker: 1.2.0 + + file-uri-to-path@1.0.0: {} + + filelist@1.0.4: + dependencies: + minimatch: 5.1.6 + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -4624,10 +5260,17 @@ snapshots: safe-buffer: 5.2.1 to-buffer: 1.2.2 + hash.js@1.1.7: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + hasown@2.0.2: dependencies: function-bind: 1.1.2 + hoopy@0.1.4: {} + hpack.js@2.1.6: dependencies: inherits: 2.0.4 @@ -4693,6 +5336,8 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 + imurmurhash@0.1.4: {} + inherits@2.0.3: {} inherits@2.0.4: {} @@ -4750,6 +5395,12 @@ snapshots: dependencies: ws: 7.5.10(bufferutil@4.1.0)(utf-8-validate@5.0.10) + jake@10.9.4: + dependencies: + async: 3.2.6 + filelist: 1.0.4 + picocolors: 1.1.1 + jayson@4.3.0(bufferutil@4.1.0)(utf-8-validate@5.0.10): dependencies: '@types/connect': 3.4.38 @@ -4770,6 +5421,8 @@ snapshots: jiti@2.6.1: {} + js-sha3@0.8.0: {} + js-tokens@4.0.0: {} js-yaml@4.1.1: @@ -4782,11 +5435,22 @@ snapshots: json-stringify-safe@5.0.1: {} + jsonpath@1.1.1: + dependencies: + esprima: 1.2.2 + static-eval: 2.0.2 + underscore: 1.12.1 + launch-editor@2.12.0: dependencies: picocolors: 1.1.1 shell-quote: 1.8.3 + levn@0.3.0: + dependencies: + prelude-ls: 1.1.2 + type-check: 0.3.2 + lightningcss-darwin-arm64@1.30.1: optional: true @@ -4836,6 +5500,8 @@ snapshots: lodash@4.17.21: {} + logplease@1.2.15: {} + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 @@ -4892,6 +5558,10 @@ snapshots: minimalistic-assert@1.0.1: {} + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.2 + minipass@7.1.2: {} minizlib@3.1.0: @@ -4929,6 +5599,10 @@ snapshots: node-gyp-build@4.8.4: optional: true + node-localstorage@3.0.5: + dependencies: + write-file-atomic: 5.0.1 + node-releases@2.0.27: {} normalize-path@3.0.0: {} @@ -4956,12 +5630,23 @@ snapshots: opener@1.5.2: {} + optionator@0.8.3: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.3.0 + prelude-ls: 1.1.2 + type-check: 0.3.2 + word-wrap: 1.2.5 + p-retry@6.2.1: dependencies: '@types/retry': 0.12.2 is-network-error: 1.3.0 retry: 0.13.1 + pako@2.1.0: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -5002,6 +5687,35 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + prelude-ls@1.1.2: {} + + privacycash@1.1.11(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.0.2)(utf-8-validate@5.0.10): + dependencies: + '@coral-xyz/anchor': 0.31.1(bufferutil@4.1.0)(typescript@5.0.2)(utf-8-validate@5.0.10) + '@ethersproject/keccak256': 5.8.0 + '@ethersproject/sha2': 5.8.0 + '@lightprotocol/hasher.rs': 0.2.1 + '@solana/spl-token': 0.4.14(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.0.2)(utf-8-validate@5.0.10))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.0.2)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.98.4(bufferutil@4.1.0)(typescript@5.0.2)(utf-8-validate@5.0.10) + '@types/bn.js': 5.2.0 + '@types/snarkjs': 0.7.9 + bn.js: 5.2.2 + borsh: 2.0.0 + bs58: 6.0.0 + dotenv: 17.2.3 + ethers: 6.16.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + ffjavascript: 0.3.1 + node-localstorage: 3.0.5 + snarkjs: 0.7.6 + tmp-promise: 3.0.3 + tweetnacl: 1.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - typescript + - utf-8-validate + process-nextick-args@2.0.1: {} prop-types@15.8.1: @@ -5019,6 +5733,13 @@ snapshots: dependencies: side-channel: 1.1.0 + r1csfile@0.0.48: + dependencies: + '@iden3/bigarray': 0.0.2 + '@iden3/binfileutils': 0.0.12 + fastfile: 0.0.20 + ffjavascript: 0.3.0 + range-parser@1.2.1: {} raw-body@2.5.3: @@ -5276,12 +5997,26 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 + signal-exit@4.1.0: {} + sirv@2.0.4: dependencies: '@polka/url': 1.0.0-next.29 mrmime: 2.0.1 totalist: 3.0.1 + snarkjs@0.7.6: + dependencies: + '@iden3/binfileutils': 0.0.12 + '@noble/hashes': 1.8.0 + bfj: 7.1.0 + circom_runtime: 0.1.28 + ejs: 3.1.10 + fastfile: 0.0.20 + ffjavascript: 0.3.1 + logplease: 1.2.15 + r1csfile: 0.0.48 + sockjs@0.3.24: dependencies: faye-websocket: 0.11.4 @@ -5295,6 +6030,9 @@ snapshots: source-map-js@1.2.1: {} + source-map@0.6.1: + optional: true + spdy-transport@3.0.0: dependencies: debug: 4.4.3 @@ -5316,6 +6054,10 @@ snapshots: transitivePeerDependencies: - supports-color + static-eval@2.0.2: + dependencies: + escodegen: 1.14.3 + statuses@1.5.0: {} statuses@2.0.2: {} @@ -5330,6 +6072,8 @@ snapshots: dependencies: safe-buffer: 5.1.2 + superstruct@0.15.5: {} + superstruct@2.0.2: {} tailwind-merge@3.3.1: {} @@ -5360,6 +6104,12 @@ snapshots: tiny-invariant@1.3.3: {} + tmp-promise@3.0.3: + dependencies: + tmp: 0.2.5 + + tmp@0.2.5: {} + to-buffer@1.2.2: dependencies: isarray: 2.0.5 @@ -5372,6 +6122,8 @@ snapshots: toidentifier@1.0.1: {} + toml@3.0.0: {} + totalist@3.0.1: {} tr46@0.0.3: {} @@ -5380,10 +6132,18 @@ snapshots: dependencies: tslib: 2.8.1 + tryer@1.0.1: {} + + tslib@2.7.0: {} + tslib@2.8.1: {} tweetnacl@1.0.3: {} + type-check@0.3.2: + dependencies: + prelude-ls: 1.1.2 + type-is@1.6.18: dependencies: media-typer: 0.3.0 @@ -5397,8 +6157,12 @@ snapshots: typescript@5.0.2: {} + underscore@1.12.1: {} + undici-types@6.11.1: {} + undici-types@6.19.8: {} + unpipe@1.0.0: {} update-browserslist-db@1.2.3(browserslist@4.28.1): @@ -5465,10 +6229,18 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 + wasmbuilder@0.0.16: {} + + wasmcurves@0.2.2: + dependencies: + wasmbuilder: 0.0.16 + wbuf@1.7.3: dependencies: minimalistic-assert: 1.0.1 + web-worker@1.2.0: {} + webidl-conversions@3.0.1: {} webpack-bundle-analyzer@4.10.2(bufferutil@4.1.0)(utf-8-validate@5.0.10): @@ -5557,11 +6329,23 @@ snapshots: gopd: 1.2.0 has-tostringtag: 1.0.2 + word-wrap@1.2.5: {} + + write-file-atomic@5.0.1: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 4.1.0 + ws@7.5.10(bufferutil@4.1.0)(utf-8-validate@5.0.10): optionalDependencies: bufferutil: 4.1.0 utf-8-validate: 5.0.10 + ws@8.17.1(bufferutil@4.1.0)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.1.0 + utf-8-validate: 5.0.10 + ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10): optionalDependencies: bufferutil: 4.1.0 diff --git a/public/circuit2/transaction2.wasm b/public/circuit2/transaction2.wasm new file mode 100644 index 0000000..fe752ce Binary files /dev/null and b/public/circuit2/transaction2.wasm differ diff --git a/public/circuit2/transaction2.zkey b/public/circuit2/transaction2.zkey new file mode 100644 index 0000000..75c1303 Binary files /dev/null and b/public/circuit2/transaction2.zkey differ diff --git a/rspack.config.ts b/rspack.config.ts index c409ca6..7873075 100644 --- a/rspack.config.ts +++ b/rspack.config.ts @@ -7,7 +7,7 @@ config(); export default defineConfig({ mode: process.env.NODE_ENV === "production" ? "production" : "development", entry: { - popup: "./src/popup.tsx", + popup: ["./src/popup.tsx", "./node_modules/buffer/index.js"], "service-worker": "./src/service-worker.ts", "content-script": "./src/content-script.ts", "onboarding-entry": "./src/onboarding-entry.tsx", @@ -57,6 +57,11 @@ export default defineConfig({ new (require("@rspack/core").DefinePlugin)({ "process.env.SOLANA_RPC_URL": JSON.stringify(process.env.SOLANA_RPC_URL), }), + new (require("@rspack/core").DefinePlugin)({ + global: { + Buffer: require.resolve("buffer"), + }, + }), new (require("@rspack/core").HtmlRspackPlugin)({ template: "./src/popup.html", filename: "popup.html", @@ -68,10 +73,31 @@ export default defineConfig({ { from: "public/manifest.json", to: "manifest.json" }, { from: "public/*.png", to: "[name][ext]" }, { from: "public/*.svg", to: "[name][ext]" }, + // ShadowWire wasm { from: "public/wasm/settler_wasm_bg.wasm", to: "wasm/settler_wasm_bg.wasm", }, + // PrivacyCash wasm + { + from: "public/circuit2/transaction2.wasm", + to: "circuit2/transaction2.wasm", + }, + // PrivacyCash zkey + { + from: "public/circuit2/transaction2.zkey", + to: "circuit2/transaction2.zkey", + }, + // PrivacyCash lightprotocol dependency simd wasm + { + from: "node_modules/@lightprotocol/hasher.rs/dist/hasher_wasm_simd_bg.wasm", + to: "wasm/hasher_wasm_simd_bg.wasm", + }, + // PrivacyCash lightprotocol dependency hasher wasm + { + from: "node_modules/@lightprotocol/hasher.rs/dist/light_wasm_hasher_bg.wasm", + to: "wasm/light_wasm_hasher_bg.wasm", + }, ], }), new (require("@rspack/core").HtmlRspackPlugin)({ diff --git a/src/App.tsx b/src/App.tsx index 55e9827..90e77d5 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -7,6 +7,10 @@ import { initWASM, isWASMSupported, } from "@radr/shadowwire"; +import { getSignedSignature } from "@/lib/privacycash/init-privacycash"; +import { PublicKey } from "@solana/web3.js"; +import { EncryptionService } from "privacycash/utils"; +export * from "privacycash/utils"; export default function App() { const { @@ -14,6 +18,11 @@ export default function App() { isShadowWireInitialized, setShadowWireClient, setIsShadowWireInitialized, + isPrivacyCashInitialized, + setIsPrivacyCashInitialized, + activeAccount, + signMessage, + setEncryptionService, } = useWallet(); useEffect(() => { @@ -25,30 +34,52 @@ export default function App() { } }, [isOnboarded]); - // Init shadowwire client and wasm + // Init privacy clients and wasm useEffect(() => { - async function initShadowWire() { + async function initPrivacyClients() { try { - // Initialize WASM if in private mode + // Initialize WASM if supported if (!isWASMSupported()) { throw new WASMNotSupportedError(); } - const client = new ShadowWireClient({ + // Initialize ShadowWire + const shadowWireClient = new ShadowWireClient({ debug: true, // TODO: remove for production }); await initWASM("wasm/settler_wasm_bg.wasm"); - setShadowWireClient(client); + setShadowWireClient(shadowWireClient); setIsShadowWireInitialized(true); + + // Initialize PrivacyCash + if (!activeAccount) { + throw new Error("No active account"); + } + + const signed = await getSignedSignature( + { + publicKey: new PublicKey(activeAccount.publicKey), + provider: "", + }, + signMessage, + ); + let encryptionService = new EncryptionService(); + if (!signed.signature) { + console.error("Privacy Cash failed to set signature"); + return; + } + encryptionService.deriveEncryptionKeyFromSignature(signed.signature); + setEncryptionService(encryptionService); + setIsPrivacyCashInitialized(true); } catch (error) { - console.error("Failed to initialize ShadowWire:", error); + console.error("Failed to initialize privacy clients:", error); } } - if (!isShadowWireInitialized) { - initShadowWire(); + if (!isShadowWireInitialized || !isPrivacyCashInitialized) { + initPrivacyClients(); } - }, [isShadowWireInitialized]); + }, [isShadowWireInitialized, isPrivacyCashInitialized]); if (!isOnboarded) { return (