feat: use viem instead of ethers

This commit is contained in:
Arseniy Klempner 2025-10-28 10:55:07 -07:00
parent 3b8e13a4fb
commit 4d453501b6
No known key found for this signature in database
GPG Key ID: 51653F18863BD24B
9 changed files with 743 additions and 1548 deletions

1228
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -21,7 +21,7 @@
"@radix-ui/react-toggle": "^1.1.2",
"@radix-ui/react-toggle-group": "^1.1.2",
"@radix-ui/react-tooltip": "^1.1.8",
"@waku/rln": "0.1.10-593bc45.0",
"@waku/rln": "0.1.11-44ad556.0",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"framer-motion": "^12.6.3",
@ -32,7 +32,8 @@
"react-dom": "^19.0.0",
"react-markdown": "^10.1.0",
"sonner": "^2.0.3",
"tailwind-merge": "^3.1.0"
"tailwind-merge": "^3.1.0",
"viem": "^2.21.54"
},
"devDependencies": {
"@eslint/eslintrc": "^3",

View File

@ -1,7 +1,7 @@
import React, { useState } from 'react';
import { Button } from './ui/button';
import { Copy, Clock, Trash2, Wallet } from 'lucide-react';
import { ethers } from 'ethers';
import { formatEther } from 'viem'
import { MembershipState } from '@waku/rln';
import { useRLN } from '../contexts/rln/RLNContext';
import { toast } from 'sonner';
@ -17,7 +17,7 @@ interface MembershipDetailsProps {
startBlock: number;
endBlock: number;
state: MembershipState;
depositAmount: ethers.BigNumber;
depositAmount: bigint;
activeDuration: number;
gracePeriodDuration: number;
holder: string;
@ -273,7 +273,7 @@ export function MembershipDetails({ membershipInfo, copyToClipboard, hash }: Mem
<div>
<span className="text-muted-foreground text-xs">Deposit Amount:</span>
<div className="text-accent">
{membershipInfo.depositAmount ? `${ethers.utils.formatEther(membershipInfo.depositAmount)} ETH` : 'N/A'}
{membershipInfo.depositAmount ? `${formatEther(membershipInfo.depositAmount)} ETH` : 'N/A'}
</div>
</div>

View File

@ -10,7 +10,6 @@ import { Button } from '../../ui/button';
import { Copy, Eye, Download, Trash2, ArrowDownToLine, Pencil, Check, X } from 'lucide-react';
import { KeystoreExporter } from '../../KeystoreExporter';
import { keystoreManagement, type ContentSegment } from '../../../content/index';
import { ethers } from 'ethers';
import { toast } from 'sonner';
import { CredentialDetails } from '@/components/CredentialDetails';
import { MembershipDetails } from '@/components/MembershipDetails';
@ -25,7 +24,7 @@ interface ExtendedMembershipInfo extends Omit<MembershipInfo, 'state'> {
startBlock: number;
endBlock: number;
state: MembershipState;
depositAmount: ethers.BigNumber;
depositAmount: bigint;
activeDuration: number;
gracePeriodDuration: number;
holder: string;

View File

@ -1,8 +1,8 @@
"use client";
import { createContext, useContext, useState, useEffect, ReactNode, useCallback } from 'react';
import { KeystoreEntity, MembershipInfo, RLNInstance, createRLN } from '@waku/rln';
import { ethers } from 'ethers';
import { KeystoreEntity, MembershipInfo, RLNInstance, createRLN, createViemClientFromWindow } from '@waku/rln';
import { formatUnits, parseUnits, maxUint256, PublicActions, WalletClient } from "viem";
import { useKeystore } from '../keystore';
import { useWallet } from '../wallet';
import { ERC20_ABI, LINEA_SEPOLIA_CONFIG, ensureLineaSepoliaNetwork } from '../../utils/network';
@ -58,8 +58,7 @@ export function RLNProvider({ children }: { children: ReactNode }) {
const [error, setError] = useState<string | null>(null);
const [isLoading, setIsLoading] = useState(false);
// Get the signer from window.ethereum
const [signer, setSigner] = useState<ethers.Signer | null>(null);
const [signer, setSigner] = useState<WalletClient & PublicActions | null>(null);
const [isConnected, setIsConnected] = useState(false);
const [rateMinLimit, setRateMinLimit] = useState<number>(0);
const [rateMaxLimit, setRateMaxLimit] = useState<number>(0);
@ -82,24 +81,13 @@ export function RLNProvider({ children }: { children: ReactNode }) {
useEffect(() => {
const checkWallet = async () => {
try {
if (window.ethereum) {
const provider = new ethers.providers.Web3Provider(window.ethereum);
const accounts = await provider.listAccounts();
if (accounts.length > 0) {
const signer = provider.getSigner();
setSigner(signer);
setIsConnected(true);
return;
}
}
setSigner(null);
setIsConnected(false);
} catch (err) {
const signer = await createViemClientFromWindow();
setSigner(signer);
setIsConnected(true);
} catch(err) {
console.error("Error checking wallet:", err);
setSigner(null);
setIsConnected(false);
setIsConnected(false);
}
};
@ -155,7 +143,7 @@ export function RLNProvider({ children }: { children: ReactNode }) {
if (currentRln && !isStarted) {
console.log("Starting RLN with signer...");
try {
await currentRln.start({ signer });
await currentRln.start({ walletClient: signer });
setIsStarted(true);
console.log("RLN started successfully.");
@ -170,31 +158,6 @@ export function RLNProvider({ children }: { children: ReactNode }) {
} else {
console.warn("Could not fetch rate limits: undefined values returned.");
}
// Get and log the token address from the contract
try {
const priceInfo = await currentRln.contract.getPriceForRateLimit(300);
if (priceInfo && priceInfo.token) {
console.log("🪙 Token address from RLN contract:", priceInfo.token);
console.log("🪙 Hardcoded token address:", WAKU_TESTNET_TOKEN_ADDRESS);
console.log("🪙 Addresses match:", priceInfo.token.toLowerCase() === WAKU_TESTNET_TOKEN_ADDRESS.toLowerCase());
// Check balance using the RLN contract's token address
const userAddress = await signer.getAddress();
const rlnTokenContract = new ethers.Contract(priceInfo.token, ERC20_ABI, signer);
const rlnTokenBalance = await rlnTokenContract.balanceOf(userAddress);
console.log("💰 Balance from RLN token contract:", ethers.utils.formatUnits(rlnTokenBalance, 18), "tokens");
// Also check balance using hardcoded address for comparison
const hardcodedTokenContract = new ethers.Contract(WAKU_TESTNET_TOKEN_ADDRESS, ERC20_ABI, signer);
const hardcodedTokenBalance = await hardcodedTokenContract.balanceOf(userAddress);
console.log("💰 Balance from hardcoded token contract:", ethers.utils.formatUnits(hardcodedTokenBalance, 18), "tokens");
} else {
console.warn("Could not get token address from RLN contract");
}
} catch (tokenErr) {
console.warn("Error getting token address from RLN contract:", tokenErr);
}
} catch (limitErr) {
console.warn("Could not fetch rate limits after start:", limitErr);
// Don't fail initialization for this, but log it.
@ -207,24 +170,24 @@ export function RLNProvider({ children }: { children: ReactNode }) {
console.error("Error starting RLN:", startErr);
// Check if it's a network mismatch error
if (startErr instanceof Error && startErr.message.includes('chain ID of contract is different')) {
console.log("Network mismatch detected, attempting to switch to Linea Sepolia...");
// if (startErr instanceof Error && startErr.message.includes('chain ID of contract is different')) {
// console.log("Network mismatch detected, attempting to switch to Linea Sepolia...");
try {
const switched = await ensureLineaSepoliaNetwork(signer);
if (switched) {
setError('Network switched to Linea Sepolia. Please try connecting again.');
// Don't retry automatically to avoid loops, let user re-trigger
} else {
setError('Please manually switch to Linea Sepolia network in MetaMask and try again.');
}
} catch (switchErr) {
console.error("Error switching network:", switchErr);
setError('Failed to switch to Linea Sepolia network. Please switch manually in MetaMask.');
}
} else {
setError(startErr instanceof Error ? startErr.message : 'Failed to start RLN');
}
// try {
// const switched = await ensureLineaSepoliaNetwork(walletClient);
// if (switched) {
// setError('Network switched to Linea Sepolia. Please try connecting again.');
// // Don't retry automatically to avoid loops, let user re-trigger
// } else {
// setError('Please manually switch to Linea Sepolia network in MetaMask and try again.');
// }
// } catch (switchErr) {
// console.error("Error switching network:", switchErr);
// setError('Failed to switch to Linea Sepolia network. Please switch manually in MetaMask.');
// }
// } else {
// setError(startErr instanceof Error ? startErr.message : 'Failed to start RLN');
// }
setIsStarted(false);
}
@ -244,7 +207,7 @@ export function RLNProvider({ children }: { children: ReactNode }) {
useEffect(() => {
console.log('Auto-init check:', {
isConnected,
hasSigner: !!signer,
hasWalletClient: !!signer,
isInitialized,
isStarted,
isLoading
@ -324,7 +287,7 @@ export function RLNProvider({ children }: { children: ReactNode }) {
setTokenApprovalStatus(prev => ({ ...prev, isChecking: true }));
try {
const userAddress = await signer.getAddress();
const [userAddress] = await signer.getAddresses();
const contractAddress = rln.contract.address;
// Use the hardcoded token address consistently
@ -333,43 +296,50 @@ export function RLNProvider({ children }: { children: ReactNode }) {
// Get price info from RLN contract
const priceInfo = await rln.contract.getPriceForRateLimit(rateLimit);
// Create token contract instance
const tokenContract = new ethers.Contract(
tokenAddress,
ERC20_ABI,
signer
);
if (!priceInfo.price) {
throw new Error("Unable to determine required deposit amount");
}
const requiredAmount = priceInfo.price;
const currentAllowance = await tokenContract.allowance(userAddress, contractAddress);
// Read current allowance from token contract
const currentAllowance = await signer.readContract({
address: tokenAddress as `0x${string}`,
abi: ERC20_ABI,
functionName: 'allowance',
args: [userAddress, contractAddress as `0x${string}`],
}) as bigint;
// Check actual token balance directly from the contract
const actualTokenBalance = await tokenContract.balanceOf(userAddress);
const tokenBalanceStr = ethers.utils.formatUnits(actualTokenBalance, 18);
const actualTokenBalance = await signer.readContract({
address: tokenAddress as `0x${string}`,
abi: ERC20_ABI,
functionName: 'balanceOf',
args: [userAddress],
}) as bigint;
const tokenBalanceStr = formatUnits(actualTokenBalance, 18);
const tokenBalance = actualTokenBalance;
console.log("Token approval check:", {
requiredAmount: ethers.utils.formatUnits(requiredAmount, 18),
currentAllowance: ethers.utils.formatUnits(currentAllowance, 18),
requiredAmount: formatUnits(requiredAmount, 18),
currentAllowance: formatUnits(currentAllowance, 18),
tokenBalance: tokenBalanceStr,
tokenAddress: tokenAddress,
userAddress: userAddress,
contractAddress: contractAddress
});
const isApproved = currentAllowance.gte(requiredAmount);
const isApproved = currentAllowance >= requiredAmount;
const needsApproval = !isApproved;
const hasEnoughBalance = tokenBalance.gte(requiredAmount);
const hasEnoughBalance = tokenBalance >= requiredAmount;
setTokenApprovalStatus({
isApproved,
isChecking: false,
needsApproval,
requiredAmount: ethers.utils.formatUnits(requiredAmount, 18),
currentAllowance: ethers.utils.formatUnits(currentAllowance, 18),
requiredAmount: formatUnits(requiredAmount, 18),
currentAllowance: formatUnits(currentAllowance, 18),
tokenBalance: tokenBalanceStr,
hasEnoughBalance,
});
@ -393,42 +363,47 @@ export function RLNProvider({ children }: { children: ReactNode }) {
}
try {
const userAddress = await signer.getAddress();
const [userAddress] = await signer.getAddresses();
const contractAddress = rln.contract.address;
// Use the hardcoded token address consistently
const tokenAddress = WAKU_TESTNET_TOKEN_ADDRESS;
// Create token contract instance
const tokenContract = new ethers.Contract(
tokenAddress,
ERC20_ABI,
signer
);
// Approve maximum amount for convenience
const approvalAmount = ethers.constants.MaxUint256;
const approvalAmount = maxUint256;
const approveTx = await tokenContract.approve(contractAddress, approvalAmount);
console.log("Approval transaction submitted:", approveTx.hash);
const hash = await signer.writeContract({
address: tokenAddress as `0x${string}`,
abi: ERC20_ABI,
functionName: 'approve',
args: [contractAddress as `0x${string}`, approvalAmount],
chain: signer.chain,
account: userAddress,
});
console.log("Approval transaction submitted:", hash);
// Update status to show approval in progress
setTokenApprovalStatus(prev => ({ ...prev, isChecking: true }));
// Wait for the transaction to be mined
const receipt = await approveTx.wait(2);
const receipt = await signer.waitForTransactionReceipt({ hash, confirmations: 2 });
console.log("Token approval confirmed in block:", receipt.blockNumber);
// Update approval status
const newAllowance = await tokenContract.allowance(userAddress, contractAddress);
const isApproved = newAllowance.gt(0);
const newAllowance = await signer.readContract({
address: tokenAddress as `0x${string}`,
abi: ERC20_ABI,
functionName: 'allowance',
args: [userAddress, contractAddress as `0x${string}`],
}) as bigint;
const isApproved = newAllowance > BigInt(0);
setTokenApprovalStatus(prev => ({
...prev,
isApproved,
isChecking: false,
needsApproval: !isApproved,
currentAllowance: ethers.utils.formatUnits(newAllowance, 18),
currentAllowance: formatUnits(newAllowance, 18),
}));
return { success: true };
@ -452,7 +427,7 @@ export function RLNProvider({ children }: { children: ReactNode }) {
}
if (!signer) {
return { success: false, error: 'No signer available' };
return { success: false, error: 'Wallet not connected' };
}
try {
@ -472,7 +447,7 @@ export function RLNProvider({ children }: { children: ReactNode }) {
}
// Get user address and contract address
const userAddress = await signer.getAddress();
const [userAddress] = await signer.getAddresses();
if (!rln.contract || !rln.contract.address) {
return { success: false, error: "RLN contract address not available. Cannot proceed with registration." };
@ -483,18 +458,11 @@ export function RLNProvider({ children }: { children: ReactNode }) {
// Use the hardcoded token address consistently
const tokenAddress = WAKU_TESTNET_TOKEN_ADDRESS;
// Create token contract instance
const tokenContract = new ethers.Contract(
tokenAddress,
ERC20_ABI,
signer
);
// Check balance from wallet context
const tokenBalanceStr = wttBalance || "0";
const tokenBalance = ethers.utils.parseUnits(tokenBalanceStr, 18);
const tokenBalance = parseUnits(tokenBalanceStr, 18);
if (tokenBalance.isZero()) {
if (tokenBalance === BigInt(0)) {
return {
success: false,
error: `You need tokens to register a membership. Your balance is ${tokenBalanceStr} WTT. Please get test tokens.`
@ -509,36 +477,53 @@ export function RLNProvider({ children }: { children: ReactNode }) {
return { success: false, error: "Unable to determine deposit amount for rate limit" };
}
requiredDeposit = priceInfo.price;
console.log("Required deposit:", ethers.utils.formatUnits(requiredDeposit, 18), "WTT");
console.log("Required deposit:", formatUnits(requiredDeposit, 18), "WTT");
} catch (priceErr) {
console.error("Error getting price for rate limit:", priceErr);
return { success: false, error: "Failed to determine required deposit amount" };
}
// Check and approve token allowance
const currentAllowance = await tokenContract.allowance(userAddress, contractAddress);
console.log("Current allowance:", ethers.utils.formatUnits(currentAllowance, 18), "WTT");
console.log("Required deposit:", ethers.utils.formatUnits(requiredDeposit, 18), "WTT");
const currentAllowance = await signer.readContract({
address: tokenAddress as `0x${string}`,
abi: ERC20_ABI,
functionName: 'allowance',
args: [userAddress, contractAddress as `0x${string}`],
}) as bigint;
console.log("Current allowance:", formatUnits(currentAllowance, 18), "WTT");
console.log("Required deposit:", formatUnits(requiredDeposit, 18), "WTT");
if (currentAllowance.lt(requiredDeposit)) {
if (currentAllowance < requiredDeposit) {
console.log("Insufficient allowance, requesting token approval...");
// Approve the required amount plus a buffer (or max uint256 for simplicity)
const approvalAmount = ethers.constants.MaxUint256;
const approvalAmount = maxUint256;
try {
const approveTx = await tokenContract.approve(contractAddress, approvalAmount);
console.log("Approval transaction submitted:", approveTx.hash);
const hash = await signer.writeContract({
address: tokenAddress as `0x${string}`,
abi: ERC20_ABI,
functionName: 'approve',
args: [contractAddress as `0x${string}`, approvalAmount],
chain: signer.chain,
account: userAddress,
});
console.log("Approval transaction submitted:", hash);
// Wait for the transaction to be mined with more confirmations
const receipt = await approveTx.wait(2);
const receipt = await signer.waitForTransactionReceipt({ hash, confirmations: 2 });
console.log("Token approval confirmed in block:", receipt.blockNumber);
// Verify the approval was successful
const newAllowance = await tokenContract.allowance(userAddress, contractAddress);
console.log("New allowance:", ethers.utils.formatUnits(newAllowance, 18), "WTT");
const newAllowance = await signer.readContract({
address: tokenAddress as `0x${string}`,
abi: ERC20_ABI,
functionName: 'allowance',
args: [userAddress, contractAddress as `0x${string}`],
}) as bigint;
console.log("New allowance:", formatUnits(newAllowance, 18), "WTT");
if (newAllowance.lt(requiredDeposit)) {
if (newAllowance < requiredDeposit) {
return { success: false, error: "Token approval failed - insufficient allowance after approval" };
}
} catch (approvalErr) {
@ -555,7 +540,7 @@ export function RLNProvider({ children }: { children: ReactNode }) {
// Generate signature for identity
const timestamp = Date.now();
const message = `Sign this message to generate your RLN credentials ${timestamp}`;
const signature = await signer.signMessage(message);
const signature = await signer.signMessage({ message, account: userAddress });
// Register membership
console.log("Registering membership...");
@ -708,14 +693,8 @@ export function RLNProvider({ children }: { children: ReactNode }) {
// Use the hardcoded token address consistently
const tokenAddress = WAKU_TESTNET_TOKEN_ADDRESS;
const userAddress = await signer?.getAddress();
if (!userAddress) {
throw new Error('No signer available');
}
// Call withdraw with token address and holder
await rln.contract.withdraw(tokenAddress, userAddress);
// Call withdraw with token address
await rln.contract.withdraw(tokenAddress);
return { success: true };
} catch (err) {
console.error('Error withdrawing deposit:', err);
@ -736,11 +715,10 @@ export function RLNProvider({ children }: { children: ReactNode }) {
throw new Error('Price not available');
}
console.log("💰 Price from RLN contract (raw BigNumber):", result.price);
console.log("💰 Price from RLN contract (raw):", result.price);
console.log("💰 Price from RLN contract (toString):", result.price.toString());
console.log("💰 Price from RLN contract (hex):", result.price.toHexString());
const formatted = ethers.utils.formatUnits(result.price, 18);
const formatted = formatUnits(result.price, 18);
console.log("💰 Price formatted to decimal:", formatted);
return { price: formatted };

View File

@ -1,8 +1,8 @@
"use client";
import { createContext, useContext, useState, useEffect, ReactNode, useCallback } from 'react';
import { extractMetaMaskSigner } from '@waku/rln';
import { ethers } from 'ethers';
import { createViemClientFromWindow } from '@waku/rln';
import { WalletClient, PublicActions, formatUnits, parseUnits } from 'viem';
import { WalletContextType } from './types';
import { WAKU_TESTNET_TOKEN_ABI } from '../../contracts/waku_testnet_token_abi';
import { WAKU_TESTNET_TOKEN_ADDRESS } from '../../contracts/constants';
@ -13,18 +13,22 @@ const WalletContext = createContext<WalletContextType | undefined>(undefined);
export function WalletProvider({ children }: { children: ReactNode }) {
const [isConnected, setIsConnected] = useState(false);
const [address, setAddress] = useState<string | null>(null);
const [signer, setSigner] = useState<ethers.Signer | null>(null);
const [signer, setSigner] = useState<WalletClient & PublicActions | null>(null);
const [balance, setBalance] = useState<string | null>(null);
const [wttBalance, setWttBalance] = useState<string | null>(null);
const [chainId, setChainId] = useState<number | null>(null);
const [error, setError] = useState<string | null>(null);
// Function to fetch WTT token balance
const fetchWttBalance = useCallback(async (userAddress: string, provider: ethers.providers.Provider) => {
const fetchWttBalance = useCallback(async (userAddress: `0x${string}`, client: PublicActions) => {
try {
const tokenContract = new ethers.Contract(WAKU_TESTNET_TOKEN_ADDRESS, WAKU_TESTNET_TOKEN_ABI, provider);
const balance = await tokenContract.balanceOf(userAddress);
const formattedBalance = ethers.utils.formatUnits(balance, 18); // Assuming 18 decimals for the token
const balance = await client.readContract({
address: WAKU_TESTNET_TOKEN_ADDRESS as `0x${string}`,
abi: WAKU_TESTNET_TOKEN_ABI,
functionName: 'balanceOf',
args: [userAddress],
}) as bigint;
const formattedBalance = formatUnits(balance, 18); // Assuming 18 decimals for the token
setWttBalance(formattedBalance);
} catch (err) {
console.error('Error fetching WTT balance:', err);
@ -42,22 +46,24 @@ export function WalletProvider({ children }: { children: ReactNode }) {
try {
toast.loading('Minting WTT tokens...');
const tokenContract = new ethers.Contract(
WAKU_TESTNET_TOKEN_ADDRESS,
WAKU_TESTNET_TOKEN_ABI,
signer
);
// Convert amount to wei (assuming 18 decimals)
const amountInWei = ethers.utils.parseUnits(amount.toString(), 18);
const amountInWei = parseUnits(amount.toString(), 18);
// Call the mint function
const tx = await tokenContract.mint(address, amountInWei);
await tx.wait();
const hash = await signer.writeContract({
address: WAKU_TESTNET_TOKEN_ADDRESS as `0x${string}`,
abi: WAKU_TESTNET_TOKEN_ABI,
functionName: 'mint',
args: [address as `0x${string}`, amountInWei],
chain: signer.chain,
account: address as `0x${string}`,
});
// Wait for the transaction receipt
await signer.waitForTransactionReceipt({ hash });
// Refresh the balance
const provider = signer.provider as ethers.providers.Web3Provider;
await fetchWttBalance(address, provider);
await fetchWttBalance(address as `0x${string}`, signer);
toast.dismiss();
toast.success(`Successfully minted ${amount} WTT tokens`);
@ -84,22 +90,21 @@ export function WalletProvider({ children }: { children: ReactNode }) {
const connectWallet = useCallback(async () => {
try {
setError(null);
const signer = await extractMetaMaskSigner();
const signer = await createViemClientFromWindow();
setSigner(signer);
const address = await signer.getAddress();
const [address] = await signer.getAddresses();
setAddress(address);
const provider = signer.provider as ethers.providers.Web3Provider;
const network = await provider.getNetwork();
setChainId(network.chainId);
const chain = await signer.getChainId();
setChainId(chain);
const balanceWei = await provider.getBalance(address);
const balanceEth = ethers.utils.formatEther(balanceWei);
const balanceWei = await signer.getBalance({ address });
const balanceEth = formatUnits(balanceWei, 18);
setBalance(balanceEth);
// Fetch WTT token balance
await fetchWttBalance(address, provider);
await fetchWttBalance(address, signer);
setIsConnected(true);
} catch (err) {

View File

@ -1,9 +1,10 @@
import { ethers } from 'ethers';
import { WalletClient, PublicActions } from 'viem';
import "viem/window";
export interface WalletContextType {
isConnected: boolean;
address: string | null;
signer: ethers.Signer | null;
signer: WalletClient & PublicActions | null;
balance: string | null;
wttBalance: string | null;
chainId: number | null;
@ -11,21 +12,4 @@ export interface WalletContextType {
disconnectWallet: () => void;
mintWTT: (amount: number) => Promise<void>;
error: string | null;
}
declare global {
interface Window {
ethereum?: {
isMetaMask?: boolean;
isConnected?: boolean;
selectedAddress?: string;
request: (args: { method: string; params?: unknown[] }) => Promise<unknown>;
on(event: 'accountsChanged', listener: (accounts: string[]) => void): void;
on(event: 'chainChanged', listener: (chainId: string) => void): void;
on(event: string, listener: (...args: unknown[]) => void): void;
removeListener(event: 'accountsChanged', listener: (accounts: string[]) => void): void;
removeListener(event: 'chainChanged', listener: (chainId: string) => void): void;
removeListener(event: string, listener: (...args: unknown[]) => void): void;
};
}
}
}

View File

@ -1,6 +1,6 @@
"use client";
import { ethers } from 'ethers';
import { WalletClient } from 'viem';
import { WAKU_TESTNET_TOKEN_ADDRESS } from '../contracts/constants';
// Linea Sepolia configuration
@ -18,9 +18,9 @@ export interface EthereumProvider {
}
// Function to ensure the wallet is connected to Linea Sepolia network
export const ensureLineaSepoliaNetwork = async (signer?: ethers.Signer): Promise<boolean> => {
export const ensureLineaSepoliaNetwork = async (walletClient?: WalletClient): Promise<boolean> => {
try {
const currentChainId = await signer?.getChainId();
const currentChainId = walletClient?.chain?.id;
console.log("Current network chain ID:", currentChainId);
// Check if already on Linea Sepolia
@ -95,12 +95,36 @@ export const ensureLineaSepoliaNetwork = async (signer?: ethers.Signer): Promise
}
};
// ERC20 ABI for token operations
// ERC20 ABI for token operations (viem format)
export const ERC20_ABI = [
"function allowance(address owner, address spender) view returns (uint256)",
"function approve(address spender, uint256 amount) returns (bool)",
"function balanceOf(address account) view returns (uint256)"
];
{
name: 'allowance',
type: 'function',
stateMutability: 'view',
inputs: [
{ name: 'owner', type: 'address' },
{ name: 'spender', type: 'address' }
],
outputs: [{ type: 'uint256' }]
},
{
name: 'approve',
type: 'function',
stateMutability: 'nonpayable',
inputs: [
{ name: 'spender', type: 'address' },
{ name: 'amount', type: 'uint256' }
],
outputs: [{ type: 'bool' }]
},
{
name: 'balanceOf',
type: 'function',
stateMutability: 'view',
inputs: [{ name: 'account', type: 'address' }],
outputs: [{ type: 'uint256' }]
}
] as const;
// Message for signing to generate identity
export const SIGNATURE_MESSAGE = "Sign this message to generate your RLN credentials";

690
yarn.lock
View File

@ -2,6 +2,11 @@
# yarn lockfile v1
"@adraffy/ens-normalize@^1.11.0":
version "1.11.1"
resolved "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.11.1.tgz"
integrity sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ==
"@alloc/quick-lru@^5.2.0":
version "5.2.0"
resolved "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz"
@ -100,232 +105,19 @@
"@eslint/core" "^0.13.0"
levn "^0.4.1"
"@ethersproject/abi@^5.8.0", "@ethersproject/abi@5.8.0":
version "5.8.0"
resolved "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz"
integrity sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==
dependencies:
"@ethersproject/address" "^5.8.0"
"@ethersproject/bignumber" "^5.8.0"
"@ethersproject/bytes" "^5.8.0"
"@ethersproject/constants" "^5.8.0"
"@ethersproject/hash" "^5.8.0"
"@ethersproject/keccak256" "^5.8.0"
"@ethersproject/logger" "^5.8.0"
"@ethersproject/properties" "^5.8.0"
"@ethersproject/strings" "^5.8.0"
"@ethersproject/abstract-provider@^5.8.0", "@ethersproject/abstract-provider@5.8.0":
version "5.8.0"
resolved "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz"
integrity sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==
dependencies:
"@ethersproject/bignumber" "^5.8.0"
"@ethersproject/bytes" "^5.8.0"
"@ethersproject/logger" "^5.8.0"
"@ethersproject/networks" "^5.8.0"
"@ethersproject/properties" "^5.8.0"
"@ethersproject/transactions" "^5.8.0"
"@ethersproject/web" "^5.8.0"
"@ethersproject/abstract-signer@^5.8.0", "@ethersproject/abstract-signer@5.8.0":
version "5.8.0"
resolved "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz"
integrity sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==
dependencies:
"@ethersproject/abstract-provider" "^5.8.0"
"@ethersproject/bignumber" "^5.8.0"
"@ethersproject/bytes" "^5.8.0"
"@ethersproject/logger" "^5.8.0"
"@ethersproject/properties" "^5.8.0"
"@ethersproject/address@^5.8.0", "@ethersproject/address@5.8.0":
version "5.8.0"
resolved "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz"
integrity sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==
dependencies:
"@ethersproject/bignumber" "^5.8.0"
"@ethersproject/bytes" "^5.8.0"
"@ethersproject/keccak256" "^5.8.0"
"@ethersproject/logger" "^5.8.0"
"@ethersproject/rlp" "^5.8.0"
"@ethersproject/base64@^5.8.0", "@ethersproject/base64@5.8.0":
version "5.8.0"
resolved "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz"
integrity sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==
dependencies:
"@ethersproject/bytes" "^5.8.0"
"@ethersproject/basex@^5.8.0", "@ethersproject/basex@5.8.0":
version "5.8.0"
resolved "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz"
integrity sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==
dependencies:
"@ethersproject/bytes" "^5.8.0"
"@ethersproject/properties" "^5.8.0"
"@ethersproject/bignumber@^5.8.0", "@ethersproject/bignumber@5.8.0":
version "5.8.0"
resolved "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz"
integrity sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==
dependencies:
"@ethersproject/bytes" "^5.8.0"
"@ethersproject/logger" "^5.8.0"
bn.js "^5.2.1"
"@ethersproject/bytes@^5.8.0", "@ethersproject/bytes@5.8.0":
"@ethersproject/bytes@^5.8.0":
version "5.8.0"
resolved "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz"
integrity sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==
dependencies:
"@ethersproject/logger" "^5.8.0"
"@ethersproject/constants@^5.8.0", "@ethersproject/constants@5.8.0":
version "5.8.0"
resolved "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz"
integrity sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==
dependencies:
"@ethersproject/bignumber" "^5.8.0"
"@ethersproject/contracts@5.8.0":
version "5.8.0"
resolved "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz"
integrity sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==
dependencies:
"@ethersproject/abi" "^5.8.0"
"@ethersproject/abstract-provider" "^5.8.0"
"@ethersproject/abstract-signer" "^5.8.0"
"@ethersproject/address" "^5.8.0"
"@ethersproject/bignumber" "^5.8.0"
"@ethersproject/bytes" "^5.8.0"
"@ethersproject/constants" "^5.8.0"
"@ethersproject/logger" "^5.8.0"
"@ethersproject/properties" "^5.8.0"
"@ethersproject/transactions" "^5.8.0"
"@ethersproject/hash@^5.8.0", "@ethersproject/hash@5.8.0":
version "5.8.0"
resolved "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz"
integrity sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==
dependencies:
"@ethersproject/abstract-signer" "^5.8.0"
"@ethersproject/address" "^5.8.0"
"@ethersproject/base64" "^5.8.0"
"@ethersproject/bignumber" "^5.8.0"
"@ethersproject/bytes" "^5.8.0"
"@ethersproject/keccak256" "^5.8.0"
"@ethersproject/logger" "^5.8.0"
"@ethersproject/properties" "^5.8.0"
"@ethersproject/strings" "^5.8.0"
"@ethersproject/hdnode@^5.8.0", "@ethersproject/hdnode@5.8.0":
version "5.8.0"
resolved "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz"
integrity sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==
dependencies:
"@ethersproject/abstract-signer" "^5.8.0"
"@ethersproject/basex" "^5.8.0"
"@ethersproject/bignumber" "^5.8.0"
"@ethersproject/bytes" "^5.8.0"
"@ethersproject/logger" "^5.8.0"
"@ethersproject/pbkdf2" "^5.8.0"
"@ethersproject/properties" "^5.8.0"
"@ethersproject/sha2" "^5.8.0"
"@ethersproject/signing-key" "^5.8.0"
"@ethersproject/strings" "^5.8.0"
"@ethersproject/transactions" "^5.8.0"
"@ethersproject/wordlists" "^5.8.0"
"@ethersproject/json-wallets@^5.8.0", "@ethersproject/json-wallets@5.8.0":
version "5.8.0"
resolved "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz"
integrity sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==
dependencies:
"@ethersproject/abstract-signer" "^5.8.0"
"@ethersproject/address" "^5.8.0"
"@ethersproject/bytes" "^5.8.0"
"@ethersproject/hdnode" "^5.8.0"
"@ethersproject/keccak256" "^5.8.0"
"@ethersproject/logger" "^5.8.0"
"@ethersproject/pbkdf2" "^5.8.0"
"@ethersproject/properties" "^5.8.0"
"@ethersproject/random" "^5.8.0"
"@ethersproject/strings" "^5.8.0"
"@ethersproject/transactions" "^5.8.0"
aes-js "3.0.0"
scrypt-js "3.0.1"
"@ethersproject/keccak256@^5.8.0", "@ethersproject/keccak256@5.8.0":
version "5.8.0"
resolved "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz"
integrity sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==
dependencies:
"@ethersproject/bytes" "^5.8.0"
js-sha3 "0.8.0"
"@ethersproject/logger@^5.8.0", "@ethersproject/logger@5.8.0":
"@ethersproject/logger@^5.8.0":
version "5.8.0"
resolved "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz"
integrity sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==
"@ethersproject/networks@^5.8.0", "@ethersproject/networks@5.8.0":
version "5.8.0"
resolved "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz"
integrity sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==
dependencies:
"@ethersproject/logger" "^5.8.0"
"@ethersproject/pbkdf2@^5.8.0", "@ethersproject/pbkdf2@5.8.0":
version "5.8.0"
resolved "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz"
integrity sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==
dependencies:
"@ethersproject/bytes" "^5.8.0"
"@ethersproject/sha2" "^5.8.0"
"@ethersproject/properties@^5.8.0", "@ethersproject/properties@5.8.0":
version "5.8.0"
resolved "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz"
integrity sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==
dependencies:
"@ethersproject/logger" "^5.8.0"
"@ethersproject/providers@5.8.0":
version "5.8.0"
resolved "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz"
integrity sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==
dependencies:
"@ethersproject/abstract-provider" "^5.8.0"
"@ethersproject/abstract-signer" "^5.8.0"
"@ethersproject/address" "^5.8.0"
"@ethersproject/base64" "^5.8.0"
"@ethersproject/basex" "^5.8.0"
"@ethersproject/bignumber" "^5.8.0"
"@ethersproject/bytes" "^5.8.0"
"@ethersproject/constants" "^5.8.0"
"@ethersproject/hash" "^5.8.0"
"@ethersproject/logger" "^5.8.0"
"@ethersproject/networks" "^5.8.0"
"@ethersproject/properties" "^5.8.0"
"@ethersproject/random" "^5.8.0"
"@ethersproject/rlp" "^5.8.0"
"@ethersproject/sha2" "^5.8.0"
"@ethersproject/strings" "^5.8.0"
"@ethersproject/transactions" "^5.8.0"
"@ethersproject/web" "^5.8.0"
bech32 "1.1.4"
ws "8.18.0"
"@ethersproject/random@^5.8.0", "@ethersproject/random@5.8.0":
version "5.8.0"
resolved "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz"
integrity sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==
dependencies:
"@ethersproject/bytes" "^5.8.0"
"@ethersproject/logger" "^5.8.0"
"@ethersproject/rlp@^5.7.0", "@ethersproject/rlp@^5.8.0", "@ethersproject/rlp@5.8.0":
"@ethersproject/rlp@^5.7.0":
version "5.8.0"
resolved "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz"
integrity sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==
@ -333,115 +125,6 @@
"@ethersproject/bytes" "^5.8.0"
"@ethersproject/logger" "^5.8.0"
"@ethersproject/sha2@^5.8.0", "@ethersproject/sha2@5.8.0":
version "5.8.0"
resolved "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz"
integrity sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==
dependencies:
"@ethersproject/bytes" "^5.8.0"
"@ethersproject/logger" "^5.8.0"
hash.js "1.1.7"
"@ethersproject/signing-key@^5.8.0", "@ethersproject/signing-key@5.8.0":
version "5.8.0"
resolved "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz"
integrity sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==
dependencies:
"@ethersproject/bytes" "^5.8.0"
"@ethersproject/logger" "^5.8.0"
"@ethersproject/properties" "^5.8.0"
bn.js "^5.2.1"
elliptic "6.6.1"
hash.js "1.1.7"
"@ethersproject/solidity@5.8.0":
version "5.8.0"
resolved "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.8.0.tgz"
integrity sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA==
dependencies:
"@ethersproject/bignumber" "^5.8.0"
"@ethersproject/bytes" "^5.8.0"
"@ethersproject/keccak256" "^5.8.0"
"@ethersproject/logger" "^5.8.0"
"@ethersproject/sha2" "^5.8.0"
"@ethersproject/strings" "^5.8.0"
"@ethersproject/strings@^5.8.0", "@ethersproject/strings@5.8.0":
version "5.8.0"
resolved "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz"
integrity sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==
dependencies:
"@ethersproject/bytes" "^5.8.0"
"@ethersproject/constants" "^5.8.0"
"@ethersproject/logger" "^5.8.0"
"@ethersproject/transactions@^5.8.0", "@ethersproject/transactions@5.8.0":
version "5.8.0"
resolved "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz"
integrity sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==
dependencies:
"@ethersproject/address" "^5.8.0"
"@ethersproject/bignumber" "^5.8.0"
"@ethersproject/bytes" "^5.8.0"
"@ethersproject/constants" "^5.8.0"
"@ethersproject/keccak256" "^5.8.0"
"@ethersproject/logger" "^5.8.0"
"@ethersproject/properties" "^5.8.0"
"@ethersproject/rlp" "^5.8.0"
"@ethersproject/signing-key" "^5.8.0"
"@ethersproject/units@5.8.0":
version "5.8.0"
resolved "https://registry.npmjs.org/@ethersproject/units/-/units-5.8.0.tgz"
integrity sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==
dependencies:
"@ethersproject/bignumber" "^5.8.0"
"@ethersproject/constants" "^5.8.0"
"@ethersproject/logger" "^5.8.0"
"@ethersproject/wallet@5.8.0":
version "5.8.0"
resolved "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz"
integrity sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==
dependencies:
"@ethersproject/abstract-provider" "^5.8.0"
"@ethersproject/abstract-signer" "^5.8.0"
"@ethersproject/address" "^5.8.0"
"@ethersproject/bignumber" "^5.8.0"
"@ethersproject/bytes" "^5.8.0"
"@ethersproject/hash" "^5.8.0"
"@ethersproject/hdnode" "^5.8.0"
"@ethersproject/json-wallets" "^5.8.0"
"@ethersproject/keccak256" "^5.8.0"
"@ethersproject/logger" "^5.8.0"
"@ethersproject/properties" "^5.8.0"
"@ethersproject/random" "^5.8.0"
"@ethersproject/signing-key" "^5.8.0"
"@ethersproject/transactions" "^5.8.0"
"@ethersproject/wordlists" "^5.8.0"
"@ethersproject/web@^5.8.0", "@ethersproject/web@5.8.0":
version "5.8.0"
resolved "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz"
integrity sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==
dependencies:
"@ethersproject/base64" "^5.8.0"
"@ethersproject/bytes" "^5.8.0"
"@ethersproject/logger" "^5.8.0"
"@ethersproject/properties" "^5.8.0"
"@ethersproject/strings" "^5.8.0"
"@ethersproject/wordlists@^5.8.0", "@ethersproject/wordlists@5.8.0":
version "5.8.0"
resolved "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz"
integrity sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==
dependencies:
"@ethersproject/bytes" "^5.8.0"
"@ethersproject/hash" "^5.8.0"
"@ethersproject/logger" "^5.8.0"
"@ethersproject/properties" "^5.8.0"
"@ethersproject/strings" "^5.8.0"
"@floating-ui/core@^1.6.0":
version "1.6.9"
resolved "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.9.tgz"
@ -569,11 +252,11 @@
integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==
"@libp2p/crypto@^5.1.6", "@libp2p/crypto@^5.1.8":
version "5.1.11"
resolved "https://registry.npmjs.org/@libp2p/crypto/-/crypto-5.1.11.tgz"
integrity sha512-J+C4bntXEhf43fJZbgyoa4XI8/kzwB5wE/2FoNQcwhIwgDd4YyRB1SHswgI0KWqF0pgKtFLE+sLnUBn/ZYUTjw==
version "5.1.13"
resolved "https://registry.npmjs.org/@libp2p/crypto/-/crypto-5.1.13.tgz"
integrity sha512-8NN9cQP3jDn+p9+QE9ByiEoZ2lemDFf/unTgiKmS3JF93ph240EUVdbCyyEgOMfykzb0okTM4gzvwfx9osJebQ==
dependencies:
"@libp2p/interface" "^3.0.1"
"@libp2p/interface" "^3.1.0"
"@noble/curves" "^2.0.1"
"@noble/hashes" "^2.0.1"
multiformats "^13.4.0"
@ -618,10 +301,10 @@
progress-events "^1.0.1"
uint8arraylist "^2.4.8"
"@libp2p/interface@^3.0.1":
version "3.0.1"
resolved "https://registry.npmjs.org/@libp2p/interface/-/interface-3.0.1.tgz"
integrity sha512-Fc502I77E+vLiADk7PyydM3NwW6F1HCQGhhtbzi9jLb+X8KgVBL3wlPqWXVM8fyQ++4CpOcAyMel8UYhIXr26w==
"@libp2p/interface@^3.1.0":
version "3.1.0"
resolved "https://registry.npmjs.org/@libp2p/interface/-/interface-3.1.0.tgz"
integrity sha512-RE7/XyvC47fQBe1cHxhMvepYKa5bFCUyFrrpj8PuM0E7JtzxU7F+Du5j4VXbg2yLDcToe0+j8mB7jvwE2AThYw==
dependencies:
"@multiformats/dns" "^1.0.6"
"@multiformats/multiaddr" "^13.0.1"
@ -714,14 +397,14 @@
uint8arrays "^5.1.0"
"@multiformats/dns@^1.0.3", "@multiformats/dns@^1.0.6":
version "1.0.9"
resolved "https://registry.npmjs.org/@multiformats/dns/-/dns-1.0.9.tgz"
integrity sha512-Ja4hevWI9p96ICx11K3suFvFirnMmXILzS7FpsR2KG3FoKF/XJijm8ylf3vY6kRFGr98yfZYM+zIn18KaINs3A==
version "1.0.10"
resolved "https://registry.npmjs.org/@multiformats/dns/-/dns-1.0.10.tgz"
integrity sha512-6X200ceQLns0b/CU0S/So16tGjB5eIXHJ1xvJMPoWaKFHWSgfpW2EhkWJrqap4U3+c37zcowVR0ToPXeYEL7Vw==
dependencies:
buffer "^6.0.3"
dns-packet "^5.6.1"
hashlru "^2.3.0"
p-queue "^8.0.1"
p-queue "^9.0.0"
progress-events "^1.0.0"
uint8arrays "^5.0.2"
@ -765,6 +448,11 @@
resolved "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.1.7.tgz"
integrity sha512-hPFwzPJDpA8FGj7IKV3Yf1web3oz2YsR8du4amKw8d+jAOHfYHYFpMkoF6vgSY4W6vB29RtZEklK9ayinGiCmQ==
"@noble/ciphers@^1.3.0":
version "1.3.0"
resolved "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz"
integrity sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==
"@noble/ciphers@1.2.1":
version "1.2.1"
resolved "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.2.1.tgz"
@ -791,6 +479,13 @@
dependencies:
"@noble/hashes" "1.7.2"
"@noble/curves@~1.9.0", "@noble/curves@1.9.1":
version "1.9.1"
resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz"
integrity sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==
dependencies:
"@noble/hashes" "1.8.0"
"@noble/curves@1.8.1":
version "1.8.1"
resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.8.1.tgz"
@ -803,7 +498,7 @@
resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz"
integrity sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==
"@noble/hashes@^1.8.0", "@noble/hashes@1.8.0":
"@noble/hashes@^1.8.0", "@noble/hashes@~1.8.0", "@noble/hashes@1.8.0":
version "1.8.0"
resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz"
integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==
@ -1219,6 +914,20 @@
resolved "https://registry.npmjs.org/@scure/base/-/base-1.2.4.tgz"
integrity sha512-5Yy9czTO47mqz+/J8GM6GIId4umdCk1wc1q8rKERQulIoc8VP9pzDcghv10Tl2E7R96ZUx/PhND3ESYUQX8NuQ==
"@scure/base@~1.2.5":
version "1.2.6"
resolved "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz"
integrity sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==
"@scure/bip32@^1.7.0":
version "1.7.0"
resolved "https://registry.npmjs.org/@scure/bip32/-/bip32-1.7.0.tgz"
integrity sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==
dependencies:
"@noble/curves" "~1.9.0"
"@noble/hashes" "~1.8.0"
"@scure/base" "~1.2.5"
"@scure/bip32@1.1.5":
version "1.1.5"
resolved "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz"
@ -1237,6 +946,23 @@
"@noble/hashes" "~1.7.1"
"@scure/base" "~1.2.2"
"@scure/bip32@1.7.0":
version "1.7.0"
resolved "https://registry.npmjs.org/@scure/bip32/-/bip32-1.7.0.tgz"
integrity sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==
dependencies:
"@noble/curves" "~1.9.0"
"@noble/hashes" "~1.8.0"
"@scure/base" "~1.2.5"
"@scure/bip39@^1.6.0":
version "1.6.0"
resolved "https://registry.npmjs.org/@scure/bip39/-/bip39-1.6.0.tgz"
integrity sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==
dependencies:
"@noble/hashes" "~1.8.0"
"@scure/base" "~1.2.5"
"@scure/bip39@1.1.1":
version "1.1.1"
resolved "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz"
@ -1253,6 +979,14 @@
"@noble/hashes" "~1.7.1"
"@scure/base" "~1.2.4"
"@scure/bip39@1.6.0":
version "1.6.0"
resolved "https://registry.npmjs.org/@scure/bip39/-/bip39-1.6.0.tgz"
integrity sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==
dependencies:
"@noble/hashes" "~1.8.0"
"@scure/base" "~1.2.5"
"@sindresorhus/fnv1a@^3.1.0":
version "3.1.0"
resolved "https://registry.npmjs.org/@sindresorhus/fnv1a/-/fnv1a-3.1.0.tgz"
@ -1358,7 +1092,7 @@
resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.2.tgz"
integrity sha512-XGJkWF41Qq305SKWEILa1O8vzhb3aOo3ogBlSmiqNko/WmRb6QIaweuZCXjKygVDXpzXb5wyxKTSOsmkuqj+Qw==
"@types/react@*", "@types/react@^19", "@types/react@^19.0.0", "@types/react@>=18":
"@types/react@*", "@types/react@^19", "@types/react@^19.0.0", "@types/react@>=18", "@types/react@>=18.0.0":
version "19.1.2"
resolved "https://registry.npmjs.org/@types/react/-/react-19.1.2.tgz"
integrity sha512-oxLPMytKchWGbnQM9O7D67uPa9paTNxO7jVoNMXgkkErULBPhPARCfkKL9ytcIJJRGjbsVwW4ugJzyFFvm/Tiw==
@ -1466,17 +1200,26 @@
resolved "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.5.0.tgz"
integrity sha512-YmocNlEcX/AgJv8gI41bhjMOTcKcea4D2nRIbZj+MhRtSH5+vEU8r/pFuTuoF+JjVplLsBueU+CILfBPVISyGQ==
"@waku/core@0.0.40-593bc45.0":
version "0.0.40-593bc45.0"
resolved "https://registry.npmjs.org/@waku/core/-/core-0.0.40-593bc45.0.tgz"
integrity sha512-STERLmw+lNFOUynRrdD33E4cwAEBTTobdaGcERJhfeeaipvQYmoQ5PQpnJLh34kV1wka1Jl+5EW4oj6SHFaRHw==
"@wagmi/core@^2.22.1":
version "2.22.1"
resolved "https://registry.npmjs.org/@wagmi/core/-/core-2.22.1.tgz"
integrity sha512-cG/xwQWsBEcKgRTkQVhH29cbpbs/TdcUJVFXCyri3ZknxhMyGv0YEjTcrNpRgt2SaswL1KrvslSNYKKo+5YEAg==
dependencies:
eventemitter3 "5.0.1"
mipd "0.0.7"
zustand "5.0.0"
"@waku/core@0.0.41-44ad556.0":
version "0.0.41-44ad556.0"
resolved "https://registry.npmjs.org/@waku/core/-/core-0.0.41-44ad556.0.tgz"
integrity sha512-4mJXHJFSi8mAikaYzfjzvP/oX1WYC1LJjdkzdRsqdJit9hiIPTbeUGXHWV7H9625fr/7RZVSFmeSuhGf0DNIoQ==
dependencies:
"@libp2p/ping" "2.0.35"
"@noble/hashes" "^1.3.2"
"@waku/enr" "0.0.34-593bc45.0"
"@waku/interfaces" "0.0.35-593bc45.0"
"@waku/proto" "0.0.15-593bc45.0"
"@waku/utils" "0.0.28-593bc45.0"
"@waku/enr" "0.0.34-44ad556.0"
"@waku/interfaces" "0.0.35-44ad556.0"
"@waku/proto" "0.0.16-44ad556.0"
"@waku/utils" "0.0.28-44ad556.0"
debug "^4.3.4"
it-all "^3.0.4"
it-length-prefixed "^9.0.4"
@ -1484,59 +1227,60 @@
uint8arraylist "^2.4.3"
uuid "^9.0.0"
"@waku/enr@0.0.34-593bc45.0":
version "0.0.34-593bc45.0"
resolved "https://registry.npmjs.org/@waku/enr/-/enr-0.0.34-593bc45.0.tgz"
integrity sha512-59lJhBOUUXcIJJo6ApUz3ntUUn1PGSFs8dbfuN/0TRreexjzcmwrrX0TKX2hfUoJlY670D9YnbZuaeT3oCO/1Q==
"@waku/enr@0.0.34-44ad556.0":
version "0.0.34-44ad556.0"
resolved "https://registry.npmjs.org/@waku/enr/-/enr-0.0.34-44ad556.0.tgz"
integrity sha512-CMSch/jK/nYMQlYkc4Ap/AfAVz24CTUFOOS1Bxm2H/sc1Zmz8WcYLzuo4N4ifZ4wL+MeJrGm2v2inmdOKsFx+w==
dependencies:
"@ethersproject/rlp" "^5.7.0"
"@libp2p/crypto" "5.1.6"
"@libp2p/peer-id" "5.1.7"
"@multiformats/multiaddr" "^12.0.0"
"@noble/secp256k1" "^1.7.1"
"@waku/utils" "0.0.28-593bc45.0"
"@waku/utils" "0.0.28-44ad556.0"
debug "^4.3.4"
js-sha3 "^0.9.2"
"@waku/interfaces@0.0.35-593bc45.0":
version "0.0.35-593bc45.0"
resolved "https://registry.npmjs.org/@waku/interfaces/-/interfaces-0.0.35-593bc45.0.tgz"
integrity sha512-BAQs7Qbm3Vbb8ZMcH0b/7RaA0c39HChuU9aHrNYWemwcZ7ZmQbJPGGQmRqnQkPpWJs0eo0VRPTjZbnE9Vi6I+Q==
"@waku/interfaces@0.0.35-44ad556.0":
version "0.0.35-44ad556.0"
resolved "https://registry.npmjs.org/@waku/interfaces/-/interfaces-0.0.35-44ad556.0.tgz"
integrity sha512-t1f557WXcVHohzKdKnsv+L6uSOZrnbGL9Lw2023lkn8/vHjyipO2OoT69J26nlX5wOtjksdqZyWEvaRH9/dNtg==
"@waku/proto@0.0.15-593bc45.0":
version "0.0.15-593bc45.0"
resolved "https://registry.npmjs.org/@waku/proto/-/proto-0.0.15-593bc45.0.tgz"
integrity sha512-fGYt25PvZBZv0EBjvLVzopFBkum3iUQs+1Kjyju3cA5zULA4FH2G8CMmBts81rH0EpGSi/eeUal119+kuctZHw==
"@waku/proto@0.0.16-44ad556.0":
version "0.0.16-44ad556.0"
resolved "https://registry.npmjs.org/@waku/proto/-/proto-0.0.16-44ad556.0.tgz"
integrity sha512-u1K03anZQa31PYlSFVQFZkb+ffa1p+BjuhHGRXZax9t+Qgyg2EnsIG2IFMNkDSUMEnhTdxuAl1oEmuAr69ywtA==
dependencies:
protons-runtime "^5.4.0"
"@waku/rln@0.1.10-593bc45.0":
version "0.1.10-593bc45.0"
resolved "https://registry.npmjs.org/@waku/rln/-/rln-0.1.10-593bc45.0.tgz"
integrity sha512-nkUcwfosKDXSsqzxBzTV+x9Iiuo0Ti5vVLQP8MnWttf4FuJxR8hKcde9+hvkzZZTZntn6TEQaYFzG3KOAC2kcA==
"@waku/rln@0.1.11-44ad556.0":
version "0.1.11-44ad556.0"
resolved "https://registry.npmjs.org/@waku/rln/-/rln-0.1.11-44ad556.0.tgz"
integrity sha512-28xhhs+rokw8otGIWbPGDGpLPlvXJ+n3yuZTeU7DoGR0kkMoAnUu0wqPMdhbPITAj3oEIEjfHjOoOA67l/rKzQ==
dependencies:
"@chainsafe/bls-keystore" "3.0.0"
"@noble/hashes" "^1.2.0"
"@waku/core" "0.0.40-593bc45.0"
"@waku/utils" "0.0.28-593bc45.0"
"@wagmi/core" "^2.22.1"
"@waku/core" "0.0.41-44ad556.0"
"@waku/utils" "0.0.28-44ad556.0"
"@waku/zerokit-rln-wasm" "^0.2.1"
chai "^5.1.2"
chai-as-promised "^8.0.1"
chai-spies "^1.1.0"
chai-subset "^1.6.0"
ethereum-cryptography "^3.1.0"
ethers "^5.7.2"
lodash "^4.17.21"
sinon "^19.0.2"
uuid "^11.0.5"
viem "^2.38.4"
"@waku/utils@0.0.28-593bc45.0":
version "0.0.28-593bc45.0"
resolved "https://registry.npmjs.org/@waku/utils/-/utils-0.0.28-593bc45.0.tgz"
integrity sha512-m4FEzl89cVx6dCQYd15VxRmeqT1DTodHEAS4st7UMdNwaURGWeADbw37NPRc0wHu6LocQYQshJEP1eXtbTkmwg==
"@waku/utils@0.0.28-44ad556.0":
version "0.0.28-44ad556.0"
resolved "https://registry.npmjs.org/@waku/utils/-/utils-0.0.28-44ad556.0.tgz"
integrity sha512-vaA4rOLp1UvxA6buqnWsj6TSfsrDTwLN6TNEoeechk7zppfqnURaRKc/xrSbWVjK7lgOJZFCuvDrHR/pls5gFw==
dependencies:
"@noble/hashes" "^1.3.2"
"@waku/interfaces" "0.0.35-593bc45.0"
"@waku/interfaces" "0.0.35-44ad556.0"
chai "^4.3.10"
debug "^4.3.4"
uint8arrays "^5.0.1"
@ -1546,6 +1290,11 @@
resolved "https://registry.npmjs.org/@waku/zerokit-rln-wasm/-/zerokit-rln-wasm-0.2.1.tgz"
integrity sha512-2Xp7e92y4qZpsiTPGBSVr4gVJ9mJTLaudlo0DQxNpxJUBtoJKpxdH5xDCQDiorbkWZC2j9EId+ohhxHO/xC1QQ==
abitype@^1.0.9, abitype@1.1.0:
version "1.1.0"
resolved "https://registry.npmjs.org/abitype/-/abitype-1.1.0.tgz"
integrity sha512-6Vh4HcRxNMLA0puzPjM5GBgT4aAcFGKZzSgAXvuZ27shJP6NEpielTuqbBmZILR5/xd0PizkBGy5hReKz9jl5A==
abort-error@^1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/abort-error/-/abort-error-1.0.1.tgz"
@ -1561,11 +1310,6 @@ acorn-jsx@^5.3.2:
resolved "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz"
integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==
aes-js@3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz"
integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==
ajv@^6.12.4:
version "6.12.6"
resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz"
@ -1779,26 +1523,11 @@ base64-js@^1.3.1:
resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz"
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
bech32@1.1.4:
version "1.1.4"
resolved "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz"
integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==
binary-extensions@^2.0.0:
version "2.3.0"
resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz"
integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==
bn.js@^4.11.9:
version "4.12.1"
resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz"
integrity sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==
bn.js@^5.2.1:
version "5.2.1"
resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz"
integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==
brace-expansion@^1.1.7:
version "1.1.11"
resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz"
@ -1821,11 +1550,6 @@ braces@^3.0.3, braces@~3.0.2:
dependencies:
fill-range "^7.1.1"
brorand@^1.1.0:
version "1.1.0"
resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz"
integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==
buffer@^6.0.3:
version "6.0.3"
resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz"
@ -2220,19 +1944,6 @@ eastasianwidth@^0.2.0:
resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz"
integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
elliptic@6.6.1:
version "6.6.1"
resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz"
integrity sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==
dependencies:
bn.js "^4.11.9"
brorand "^1.1.0"
hash.js "^1.0.0"
hmac-drbg "^1.0.1"
inherits "^2.0.4"
minimalistic-assert "^1.0.1"
minimalistic-crypto-utils "^1.0.1"
emoji-regex@^8.0.0:
version "8.0.0"
resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz"
@ -2608,43 +2319,7 @@ ethereum-cryptography@^3.1.0:
"@scure/bip32" "1.6.2"
"@scure/bip39" "1.5.4"
ethers@^5.7.2:
version "5.8.0"
resolved "https://registry.npmjs.org/ethers/-/ethers-5.8.0.tgz"
integrity sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==
dependencies:
"@ethersproject/abi" "5.8.0"
"@ethersproject/abstract-provider" "5.8.0"
"@ethersproject/abstract-signer" "5.8.0"
"@ethersproject/address" "5.8.0"
"@ethersproject/base64" "5.8.0"
"@ethersproject/basex" "5.8.0"
"@ethersproject/bignumber" "5.8.0"
"@ethersproject/bytes" "5.8.0"
"@ethersproject/constants" "5.8.0"
"@ethersproject/contracts" "5.8.0"
"@ethersproject/hash" "5.8.0"
"@ethersproject/hdnode" "5.8.0"
"@ethersproject/json-wallets" "5.8.0"
"@ethersproject/keccak256" "5.8.0"
"@ethersproject/logger" "5.8.0"
"@ethersproject/networks" "5.8.0"
"@ethersproject/pbkdf2" "5.8.0"
"@ethersproject/properties" "5.8.0"
"@ethersproject/providers" "5.8.0"
"@ethersproject/random" "5.8.0"
"@ethersproject/rlp" "5.8.0"
"@ethersproject/sha2" "5.8.0"
"@ethersproject/signing-key" "5.8.0"
"@ethersproject/solidity" "5.8.0"
"@ethersproject/strings" "5.8.0"
"@ethersproject/transactions" "5.8.0"
"@ethersproject/units" "5.8.0"
"@ethersproject/wallet" "5.8.0"
"@ethersproject/web" "5.8.0"
"@ethersproject/wordlists" "5.8.0"
eventemitter3@^5.0.1:
eventemitter3@^5.0.1, eventemitter3@5.0.1:
version "5.0.1"
resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz"
integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==
@ -2929,14 +2604,6 @@ has-tostringtag@^1.0.2:
dependencies:
has-symbols "^1.0.3"
hash.js@^1.0.0, hash.js@^1.0.3, hash.js@1.1.7:
version "1.1.7"
resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz"
integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
dependencies:
inherits "^2.0.3"
minimalistic-assert "^1.0.1"
hashlru@^2.3.0:
version "2.3.0"
resolved "https://registry.npmjs.org/hashlru/-/hashlru-2.3.0.tgz"
@ -2977,15 +2644,6 @@ hast-util-whitespace@^3.0.0:
dependencies:
"@types/hast" "^3.0.0"
hmac-drbg@^1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz"
integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==
dependencies:
hash.js "^1.0.3"
minimalistic-assert "^1.0.0"
minimalistic-crypto-utils "^1.0.1"
html-url-attributes@^3.0.0:
version "3.0.1"
resolved "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.1.tgz"
@ -3014,11 +2672,6 @@ imurmurhash@^0.1.4:
resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz"
integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
inherits@^2.0.3, inherits@^2.0.4:
version "2.0.4"
resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
inline-style-parser@0.2.4:
version "0.2.4"
resolved "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz"
@ -3290,6 +2943,11 @@ isexe@^2.0.0:
resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz"
integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
isows@1.0.7:
version "1.0.7"
resolved "https://registry.npmjs.org/isows/-/isows-1.0.7.tgz"
integrity sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg==
it-all@^3.0.4:
version "3.0.9"
resolved "https://registry.npmjs.org/it-all/-/it-all-3.0.9.tgz"
@ -3405,11 +3063,6 @@ js-sha3@^0.9.2:
resolved "https://registry.npmjs.org/js-sha3/-/js-sha3-0.9.3.tgz"
integrity sha512-BcJPCQeLg6WjEx3FE591wVAevlli8lxsxm9/FzV4HXkV49TmBH38Yvrpce6fjbADGMKFrBMGTqrVz3qPIZ88Gg==
js-sha3@0.8.0:
version "0.8.0"
resolved "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz"
integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==
"js-tokens@^3.0.0 || ^4.0.0":
version "4.0.0"
resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz"
@ -3874,16 +3527,6 @@ micromatch@^4.0.4, micromatch@^4.0.8:
braces "^3.0.3"
picomatch "^2.3.1"
minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz"
integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
minimalistic-crypto-utils@^1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz"
integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==
minimatch@^3.1.2:
version "3.1.2"
resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz"
@ -3908,6 +3551,11 @@ minimist@^1.2.0, minimist@^1.2.6:
resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz"
integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==
mipd@0.0.7:
version "0.0.7"
resolved "https://registry.npmjs.org/mipd/-/mipd-0.0.7.tgz"
integrity sha512-aAPZPNDQ3uMTdKbuO2YmAw2TxLHO0moa4YKAyETM/DTj5FloZo+a+8tU+iv4GmW+sOxKLSRwcSFuczk+Cpt6fg==
motion-dom@^12.7.4:
version "12.7.4"
resolved "https://registry.npmjs.org/motion-dom/-/motion-dom-12.7.4.tgz"
@ -4095,6 +3743,20 @@ own-keys@^1.0.1:
object-keys "^1.1.1"
safe-push-apply "^1.0.0"
ox@0.9.6:
version "0.9.6"
resolved "https://registry.npmjs.org/ox/-/ox-0.9.6.tgz"
integrity sha512-8SuCbHPvv2eZLYXrNmC0EC12rdzXQLdhnOMlHDW2wiCPLxBrOOJwX5L5E61by+UjTPOryqQiRSnjIKCI+GykKg==
dependencies:
"@adraffy/ens-normalize" "^1.11.0"
"@noble/ciphers" "^1.3.0"
"@noble/curves" "1.9.1"
"@noble/hashes" "^1.8.0"
"@scure/bip32" "^1.7.0"
"@scure/bip39" "^1.6.0"
abitype "^1.0.9"
eventemitter3 "5.0.1"
p-defer@^4.0.0, p-defer@^4.0.1:
version "4.0.1"
resolved "https://registry.npmjs.org/p-defer/-/p-defer-4.0.1.tgz"
@ -4114,18 +3776,18 @@ p-locate@^5.0.0:
dependencies:
p-limit "^3.0.2"
p-queue@^8.0.1:
version "8.1.1"
resolved "https://registry.npmjs.org/p-queue/-/p-queue-8.1.1.tgz"
integrity sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==
p-queue@^9.0.0:
version "9.0.0"
resolved "https://registry.npmjs.org/p-queue/-/p-queue-9.0.0.tgz"
integrity sha512-KO1RyxstL9g1mK76530TExamZC/S2Glm080Nx8PE5sTd7nlduDQsAfEl4uXX+qZjLiwvDauvzXavufy3+rJ9zQ==
dependencies:
eventemitter3 "^5.0.1"
p-timeout "^6.1.2"
p-timeout "^7.0.0"
p-timeout@^6.1.2:
version "6.1.4"
resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz"
integrity sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==
p-timeout@^7.0.0:
version "7.0.1"
resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz"
integrity sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==
package-json-from-dist@^1.0.0:
version "1.0.1"
@ -4393,7 +4055,7 @@ react-style-singleton@^2.2.2, react-style-singleton@^2.2.3:
get-nonce "^1.0.0"
tslib "^2.0.0"
"react@^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", "react@^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react@^18.0.0 || ^19.0.0", "react@^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react@^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", react@^19.0.0, react@^19.1.0, "react@>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0", react@>=16.8.0, react@>=18:
"react@^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", "react@^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react@^18.0.0 || ^19.0.0", "react@^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react@^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", react@^19.0.0, react@^19.1.0, "react@>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0", react@>=16.8.0, react@>=18, react@>=18.0.0:
version "19.1.0"
resolved "https://registry.npmjs.org/react/-/react-19.1.0.tgz"
integrity sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==
@ -4532,11 +4194,6 @@ scheduler@^0.26.0:
resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz"
integrity sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==
scrypt-js@3.0.1:
version "3.0.1"
resolved "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz"
integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==
semver@^6.3.1:
version "6.3.1"
resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz"
@ -5057,7 +4714,7 @@ typed-array-length@^1.0.7:
possible-typed-array-names "^1.0.0"
reflect.getprototypeof "^1.0.6"
typescript@^5, typescript@>=3.3.1, typescript@>=4.8.4, "typescript@>=4.8.4 <5.9.0":
typescript@^5, typescript@>=3.3.1, typescript@>=4.8.4, "typescript@>=4.8.4 <5.9.0", typescript@>=5.0.4, typescript@>=5.4.0:
version "5.8.3"
resolved "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz"
integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==
@ -5230,10 +4887,24 @@ vfile@^6.0.0:
"@types/unist" "^3.0.0"
vfile-message "^4.0.0"
viem@^2.21.54, viem@^2.38.4, viem@2.x:
version "2.38.4"
resolved "https://registry.npmjs.org/viem/-/viem-2.38.4.tgz"
integrity sha512-qnyPNg6Lz1EEC86si/1dq7GlOyZVFHSgAW+p8Q31R5idnAYCOdTM2q5KLE4/ykMeMXzY0bnp5MWTtR/wjCtWmQ==
dependencies:
"@noble/curves" "1.9.1"
"@noble/hashes" "1.8.0"
"@scure/bip32" "1.7.0"
"@scure/bip39" "1.6.0"
abitype "1.1.0"
isows "1.0.7"
ox "0.9.6"
ws "8.18.3"
weald@^1.0.4:
version "1.0.6"
resolved "https://registry.npmjs.org/weald/-/weald-1.0.6.tgz"
integrity sha512-sX1PzkcMJZUJ848JbFzB6aKHHglTxqACEnq2KgI75b7vWYvfXFBNbOuDKqFKwCT44CrP6c5r+L4+5GmPnb5/SQ==
version "1.1.1"
resolved "https://registry.npmjs.org/weald/-/weald-1.1.1.tgz"
integrity sha512-PaEQShzMCz8J/AD2N3dJMc1hTZWkJeLKS2NMeiVkV5KDHwgZe7qXLEzyodsT/SODxWDdXJJqocuwf3kHzcXhSQ==
dependencies:
ms "^3.0.0-canary.1"
supports-color "^10.0.0"
@ -5321,10 +4992,10 @@ wrap-ansi@^8.1.0:
string-width "^5.0.1"
strip-ansi "^7.0.1"
ws@8.18.0:
version "8.18.0"
resolved "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz"
integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==
ws@*, ws@8.18.3:
version "8.18.3"
resolved "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz"
integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==
yaml@^2.3.4:
version "2.7.1"
@ -5336,6 +5007,11 @@ yocto-queue@^0.1.0:
resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz"
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
zustand@5.0.0:
version "5.0.0"
resolved "https://registry.npmjs.org/zustand/-/zustand-5.0.0.tgz"
integrity sha512-LE+VcmbartOPM+auOjCCLQOsQ05zUTp8RkgwRzefUk+2jISdMMFnxvyTjA4YNWr5ZGXYbVsEMZosttuxUBkojQ==
zwitch@^2.0.0:
version "2.0.4"
resolved "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz"