From 4533125fe0f6284e3596d895afdd5758abf5dbae Mon Sep 17 00:00:00 2001 From: jxom <7336481+jxom@users.noreply.github.com> Date: Fri, 28 Mar 2025 17:05:44 +1100 Subject: [PATCH] feat: viem --- sdk/API.md | 10 +- sdk/README.md | 31 +- sdk/package.json | 22 +- sdk/src/getInitialTick.ts | 8 +- sdk/src/index.ts | 3 +- sdk/src/launchToken.ts | 149 ++-- sdk/src/predictAddress.ts | 27 +- .../abi/RainbowSuperTokenFactory.json | 706 ---------------- .../abi/RainbowSuperTokenFactory.ts | 690 +++++++++++++++ sdk/src/types/api.ts | 8 +- sdk/src/types/index.ts | 31 +- sdk/src/utils/findValidSalt.ts | 34 +- sdk/src/utils/getFactoryConfig.ts | 24 +- sdk/src/utils/getRainbowSuperTokenFactory.ts | 35 +- sdk/src/utils/tickMath.ts | 10 +- sdk/test/launchRainbowTokenAndBuy.test.ts | 88 +- sdk/yarn.lock | 788 ++---------------- 17 files changed, 990 insertions(+), 1674 deletions(-) delete mode 100644 sdk/src/references/abi/RainbowSuperTokenFactory.json create mode 100644 sdk/src/references/abi/RainbowSuperTokenFactory.ts diff --git a/sdk/API.md b/sdk/API.md index 9be6d52..e61975a 100644 --- a/sdk/API.md +++ b/sdk/API.md @@ -89,7 +89,7 @@ interface LaunchTokenParams { name: string; // Token name symbol: string; // Token symbol supply: string; // Total supply (in wei format) - wallet: Wallet; // Ethers.js Wallet instance + client: Client; // Viem Client initialTick?: number; // Initial tick (price setting) creator?: string; // Creator address (defaults to wallet address) transactionOptions?: { // Optional gas parameters @@ -109,7 +109,7 @@ interface LaunchTokenParams { ```typescript interface LaunchTokenResponse { - transaction: TransactionResponse; // Ethers.js TransactionResponse + transaction: Transaction; // Viem Transaction tokenUri: string; // Token URI tokenAddress: string; // Deployed token contract address } @@ -122,7 +122,7 @@ const result = await TokenLauncher.launchToken({ name: 'My Token', symbol: 'MTK', supply: '1000000000000000000000000', // 1 million tokens (with 18 decimals) - wallet: wallet, + client: client, initialTick: 0, logoUrl: 'https://example.com/logo.png', description: 'My awesome community token', @@ -154,7 +154,7 @@ const result = await TokenLauncher.launchTokenAndBuy({ name: 'My Token', symbol: 'MTK', supply: '1000000000000000000000000', - wallet: wallet, + client: client, initialTick: 0, logoUrl: 'https://example.com/logo.png', amountIn: '100000000000000000', // 0.1 ETH @@ -177,7 +177,7 @@ Calculates the initial tick value based on the desired token price. **Example:** ```typescript -import { parseEther } from 'ethers/lib/utils'; +import { parseEther } from 'viem'; // For a token price of 0.0001 ETH const tokenPrice = parseEther('0.0001'); diff --git a/sdk/README.md b/sdk/README.md index e6ca8da..b289b0b 100644 --- a/sdk/README.md +++ b/sdk/README.md @@ -36,11 +36,11 @@ TokenLauncher.configure({ // For development environment API_URL_DEV: 'https://dev-api.example.com', API_KEY_DEV: 'your-dev-api-key', - + // For production environment API_URL_PROD: 'https://api.example.com', API_KEY_PROD: 'your-production-api-key', - + // Set environment mode MODE: 'production', // 'development' | 'production' | 'jest' }); @@ -50,18 +50,23 @@ TokenLauncher.configure({ ```typescript import { TokenLauncher, LaunchTokenParams } from '@rainbow-me/token-launcher'; -import { Wallet, JsonRpcProvider } from 'ethers'; - -// Create a wallet instance -const provider = new JsonRpcProvider('https://mainnet.infura.io/v3/YOUR_INFURA_KEY'); -const wallet = new Wallet('YOUR_PRIVATE_KEY', provider); +import { createClient, privateKeyToAccount } from 'viem'; +import { mainnet } from 'viem/chains'; +import { http } from 'viem/transports'; + +// Create a Viem client +const client = createClient({ + account: privateKeyToAccount('YOUR_PRIVATE_KEY'), + chain: mainnet, + transport: http(), +}); // Define token parameters const launchParams: LaunchTokenParams = { name: 'My Token', symbol: 'MTK', supply: '1000000000000000000000000', // 1 million tokens with 18 decimals - wallet: wallet, + client: client, initialTick: 0, // Use getInitialTick for price-based ticks logoUrl: 'https://example.com/logo.png', description: 'My awesome token for my community', @@ -88,20 +93,20 @@ try { ```typescript import { TokenLauncher, LaunchTokenAndBuyParams } from '@rainbow-me/token-launcher'; -import { parseEther } from 'ethers/lib/utils'; +import { parseEther } from 'viem'; const launchAndBuyParams: LaunchTokenAndBuyParams = { // Include all parameters from LaunchTokenParams name: 'My Token', symbol: 'MTK', supply: '1000000000000000000000000', // 1 million tokens with 18 decimals - wallet: wallet, + client: client, initialTick: 0, logoUrl: 'https://example.com/logo.png', - + // Add the amount of ETH to use for buying amountIn: parseEther('0.1').toString(), // 0.1 ETH - + // Optional gas parameters transactionOptions: { gasLimit: '3000000', @@ -126,7 +131,7 @@ try { ```typescript import { TokenLauncher } from '@rainbow-me/token-launcher'; -import { parseEther } from 'ethers/lib/utils'; +import { parseEther } from 'viem'; // Calculate the initial tick based on desired token price const tokenPriceInETH = parseEther('0.0001'); // 0.0001 ETH per token diff --git a/sdk/package.json b/sdk/package.json index d79d1b9..c6449a1 100644 --- a/sdk/package.json +++ b/sdk/package.json @@ -21,29 +21,14 @@ "eslint-plugin-jest": "^27.9.0", "jest": "^29.7.0", "ts-jest": "^29.2.5", - "typescript": "^4.4.4" + "typescript": "^5.8.2" }, "dependencies": { - "@ethereumjs/util": "9.0.0", - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/providers": "5.7.0", - "@ethersproject/random": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@metamask/eth-sig-util": "7.0.0", - "decimal.js": "^10.5.0", "jsbi": "^4.3.0", "tiny-invariant": "^1.3.3", "eslint-config-rainbow": "4.3.0", - "prettier": "^3.3.3" + "prettier": "^3.3.3", + "viem": "^2" }, "author": "Christopher Howard", "files": [ @@ -60,6 +45,7 @@ "pretest": "grep -v '^IS_TESTING=' .env > .env.tmp 2>/dev/null || true; echo 'IS_TESTING=true' >> .env.tmp; mv .env.tmp .env", "test": "./scripts/test.sh", "lint": "eslint 'src/**/*.{js,ts}' 'test/**/*.{js,ts}'", + "types": "tsc --noEmit", "format:check": "prettier --check '**/*.{js,ts,json,md}'", "format:fix": "prettier --write '**/*.{js,ts,json,md}'", "clean": "rm -rf dist" diff --git a/sdk/src/getInitialTick.ts b/sdk/src/getInitialTick.ts index 54cadaa..ea156ae 100644 --- a/sdk/src/getInitialTick.ts +++ b/sdk/src/getInitialTick.ts @@ -1,6 +1,5 @@ +import { parseUnits } from 'viem'; import { priceToInitialTick } from './utils/tickMath'; -import { BigNumber, BigNumberish } from '@ethersproject/bignumber'; -import { parseUnits } from '@ethersproject/units'; const TICK_SPACING = 200; @@ -10,8 +9,7 @@ const TICK_SPACING = 200; * @param tokenPrice The token’s price in ETH (for example, "0.000035" or 1, 2, 0.5, etc.) * @returns The nearest valid tick. */ -export function getInitialTick(tokenPrice: BigNumberish): number { - const scaledPrice = - typeof tokenPrice === 'string' ? parseUnits(tokenPrice, 18) : BigNumber.from(tokenPrice); +export function getInitialTick(tokenPrice: string | bigint): number { + const scaledPrice = typeof tokenPrice === 'string' ? parseUnits(tokenPrice, 18) : tokenPrice; return priceToInitialTick(scaledPrice, TICK_SPACING); } diff --git a/sdk/src/index.ts b/sdk/src/index.ts index 501d0c0..c40a358 100644 --- a/sdk/src/index.ts +++ b/sdk/src/index.ts @@ -9,7 +9,6 @@ import { } from './types'; import { launchRainbowSuperToken, launchRainbowSuperTokenAndBuy } from './launchToken'; import { getAirdropSuggestions, getRainbowSuperTokenByUri, getRainbowSuperTokens } from './api'; -import { BigNumber } from '@ethersproject/bignumber'; import { getInitialTick } from './getInitialTick'; class TokenLauncherSDK { @@ -31,7 +30,7 @@ class TokenLauncherSDK { return { ...this.config }; } - public getInitialTick(tokenPrice: BigNumber): number { + public getInitialTick(tokenPrice: bigint): number { return getInitialTick(tokenPrice); } diff --git a/sdk/src/launchToken.ts b/sdk/src/launchToken.ts index 3f85222..3a1d54e 100644 --- a/sdk/src/launchToken.ts +++ b/sdk/src/launchToken.ts @@ -4,13 +4,17 @@ import { SDKConfig, LaunchTokenResponse, LaunchTokenAndBuyParams, + ViemClient, } from './types'; -import { getRainbowSuperTokenFactory } from './utils/getRainbowSuperTokenFactory'; -import { TransactionRequest } from '@ethersproject/providers'; -import { HashZero } from '@ethersproject/constants'; +import { + getRainbowSuperTokenFactory, + RainbowSuperTokenFactory, +} from './utils/getRainbowSuperTokenFactory'; import { submitRainbowSuperToken } from './api'; import { findValidSalt } from './utils/findValidSalt'; import { TokenLauncherSDKError, TokenLauncherErrorCode, throwTokenLauncherError } from './errors'; // Import the error utilities +import { TransactionRequest, zeroHash, Hex, Address, encodeFunctionData } from 'viem'; +import { sendTransaction } from 'viem/actions'; /** * Core function to handle common functionality for token launch operations @@ -20,9 +24,9 @@ async function prepareTokenLaunch( config: SDKConfig, operation: 'launch' | 'launchAndBuy' ): Promise<{ - factory: any; - creator: string; - enrichedParams: LaunchTokenParams & { merkleRoot?: string; salt?: string }; + factory: RainbowSuperTokenFactory; + creator: Address; + enrichedParams: LaunchTokenParams & { merkleRoot?: Hex; salt?: Hex }; tokenUri: string; tokenAddress: string; }> { @@ -47,20 +51,17 @@ async function prepareTokenLaunch( } // Get factory contract - let factory; - try { - factory = await getRainbowSuperTokenFactory(params.wallet, config); - } catch (error) { + const factory = await getRainbowSuperTokenFactory(params.client, config).catch(error => { throwTokenLauncherError( TokenLauncherErrorCode.CONTRACT_INTERACTION_FAILED, 'Failed to get token factory contract', { operation: 'getRainbowSuperTokenFactory', originalError: error, source: 'chain' } ); - } + }); - const creator = params.creator || (await params.wallet.getAddress()); + const creator = params.creator || params.client.account.address; - let enrichedParams: LaunchTokenParams & { merkleRoot?: string; salt?: string } = params; + let enrichedParams: LaunchTokenParams & { merkleRoot?: Hex; salt?: Hex } = params; let tokenUri = ''; let tokenAddress = ''; @@ -77,7 +78,7 @@ async function prepareTokenLaunch( tokenAddress = submissionDetails.token.address; enrichedParams = { ...params, - merkleRoot: submissionDetails.merkleRoot ?? HashZero, + merkleRoot: submissionDetails.merkleRoot ?? zeroHash, salt: submissionDetails.salt, }; } else { @@ -87,12 +88,12 @@ async function prepareTokenLaunch( creator, params.name, params.symbol, - HashZero, + zeroHash, params.supply ); enrichedParams = { ...params, - merkleRoot: HashZero, + merkleRoot: zeroHash, salt, }; } catch (error) { @@ -117,12 +118,12 @@ async function prepareTokenLaunch( * Execute a token launch transaction */ async function executeTransaction( - wallet: any, + client: ViemClient, payload: TransactionRequest, operation: string -): Promise { +): Promise { try { - return await wallet.sendTransaction(payload); + return await sendTransaction(client, payload); } catch (error) { // Identify common wallet errors const err = error as Error; @@ -154,40 +155,30 @@ export const launchRainbowSuperToken = async ( ); // Populate transaction - let populatedTx; - try { - populatedTx = await factory.populateTransaction.launchRainbowSuperToken( + const data = encodeFunctionData({ + ...factory, + functionName: 'launchRainbowSuperToken', + args: [ enrichedParams.name, enrichedParams.symbol, - enrichedParams.merkleRoot ?? HashZero, + enrichedParams.merkleRoot ?? zeroHash, enrichedParams.supply, - enrichedParams.initialTick, - enrichedParams.salt, - creator - ); - } catch (error) { - throwTokenLauncherError( - TokenLauncherErrorCode.CONTRACT_INTERACTION_FAILED, - 'Failed to populate transaction for token launch', - { - operation: 'populateTransaction.launchRainbowSuperToken', - originalError: error, - source: 'chain', - params, - } - ); - } + enrichedParams.initialTick ?? 0, + enrichedParams.salt ?? zeroHash, + creator, + ], + }); // Prepare transaction payload const payload: TransactionRequest = { - data: populatedTx.data, + data, to: factory.address, - from: await params.wallet.getAddress(), - value: 0, + from: params.client.account.address, + value: 0n, }; - if (params.transactionOptions?.gasLimit) { - payload.gasLimit = params.transactionOptions.gasLimit; + if (params.transactionOptions?.gas) { + payload.gas = params.transactionOptions.gas; } if (params.transactionOptions?.gasPrice) { @@ -201,10 +192,10 @@ export const launchRainbowSuperToken = async ( } // Execute transaction - const tx = await executeTransaction(params.wallet, payload, 'launchRainbowSuperToken'); + const hash = await executeTransaction(params.client, payload, 'launchRainbowSuperToken'); return { - transaction: tx, + hash, tokenUri, tokenAddress, }; @@ -235,41 +226,31 @@ export const launchRainbowSuperTokenAndBuy = async ( ); // Populate transaction - let populatedTx; - try { - populatedTx = await factory.populateTransaction.launchRainbowSuperTokenAndBuy( + const data = encodeFunctionData({ + ...factory, + functionName: 'launchRainbowSuperTokenAndBuy', + args: [ enrichedParams.name, enrichedParams.symbol, - enrichedParams.merkleRoot ?? HashZero, + enrichedParams.merkleRoot ?? zeroHash, enrichedParams.supply, - enrichedParams.initialTick, - enrichedParams.salt, + enrichedParams.initialTick ?? 0, + enrichedParams.salt ?? zeroHash, creator, - params.amountIn - ); - } catch (error) { - throwTokenLauncherError( - TokenLauncherErrorCode.CONTRACT_INTERACTION_FAILED, - 'Failed to populate transaction for token launch and buy', - { - operation: 'populateTransaction.launchRainbowSuperTokenAndBuy', - originalError: error, - source: 'chain', - params, - } - ); - } + params.amountIn, + ], + }); // Prepare transaction payload const payload: TransactionRequest = { - data: populatedTx.data, + data, to: factory.address, - from: await params.wallet.getAddress(), + from: params.client.account.address, value: params.amountIn, }; - if (params.transactionOptions?.gasLimit) { - payload.gasLimit = params.transactionOptions.gasLimit; + if (params.transactionOptions?.gas) { + payload.gas = params.transactionOptions.gas; } if (params.transactionOptions?.gasPrice) { @@ -283,10 +264,10 @@ export const launchRainbowSuperTokenAndBuy = async ( } // Execute transaction - const tx = await executeTransaction(params.wallet, payload, 'launchRainbowSuperTokenAndBuy'); + const hash = await executeTransaction(params.client, payload, 'launchRainbowSuperTokenAndBuy'); return { - transaction: tx, + hash, tokenUri, tokenAddress, }; @@ -299,8 +280,9 @@ export const launchRainbowSuperTokenAndBuy = async ( // Otherwise wrap it in our custom error throwTokenLauncherError( TokenLauncherErrorCode.UNKNOWN_ERROR, - `Unexpected error in launchRainbowSuperTokenAndBuy: ${(error as Error).message || - String(error)}`, + `Unexpected error in launchRainbowSuperTokenAndBuy: ${ + (error as Error).message || String(error) + }`, { operation: 'launchRainbowSuperTokenAndBuy', originalError: error, source: 'sdk', params } ); } @@ -311,18 +293,8 @@ const getRainbowSuperTokenSubmissionDetails = async ( config: SDKConfig ): Promise => { try { - const creator = params.creator || (await params.wallet.getAddress()); - - let chainId; - try { - chainId = await params.wallet.getChainId(); - } catch (error) { - throwTokenLauncherError( - TokenLauncherErrorCode.WALLET_CONNECTION_ERROR, - 'Failed to get chain ID from wallet', - { operation: 'wallet.getChainId', originalError: error, source: 'chain', params } - ); - } + const chainId = params.client.chain.id + const creator = params.creator || params.client.account.address; const submissionDetailParams = { chainId, @@ -376,8 +348,9 @@ const getRainbowSuperTokenSubmissionDetails = async ( // Otherwise wrap it in our custom error throwTokenLauncherError( TokenLauncherErrorCode.UNKNOWN_ERROR, - `Unexpected error in getRainbowSuperTokenSubmissionDetails: ${(error as Error).message || - String(error)}`, + `Unexpected error in getRainbowSuperTokenSubmissionDetails: ${ + (error as Error).message || String(error) + }`, { operation: 'getRainbowSuperTokenSubmissionDetails', originalError: error, diff --git a/sdk/src/predictAddress.ts b/sdk/src/predictAddress.ts index 7d90bee..94411ef 100644 --- a/sdk/src/predictAddress.ts +++ b/sdk/src/predictAddress.ts @@ -1,30 +1,29 @@ -import { Wallet } from '@ethersproject/wallet'; import { getRainbowSuperTokenFactory } from './utils/getRainbowSuperTokenFactory'; -import { HashZero } from '@ethersproject/constants'; -import { SDKConfig } from './types'; +import { SDKConfig, ViemClient } from './types'; +import { Hex, Address, zeroHash } from 'viem'; export const predictTokenAddress = async ( params: { - merkleroot: string; - salt: string; - wallet: Wallet; - creator: string; + merkleroot: Hex; + salt: Hex; + client: ViemClient; + creator: Address; name: string; symbol: string; - supply: string; + supply: bigint; }, config: SDKConfig ): Promise => { - const factory = await getRainbowSuperTokenFactory(params.wallet, config); - const creator = params.creator || (await params.wallet.getAddress()); - const merkleroot = params.merkleroot ?? HashZero; + const factory = await getRainbowSuperTokenFactory(params.client, config); + const creator = params.creator || params.client.account.address; + const merkleroot = params.merkleroot ?? zeroHash; - return factory.predictTokenAddress( + return factory.read.predictTokenAddress([ creator, params.name, params.symbol, merkleroot, params.supply, - params.salt - ); + params.salt, + ]); }; diff --git a/sdk/src/references/abi/RainbowSuperTokenFactory.json b/sdk/src/references/abi/RainbowSuperTokenFactory.json deleted file mode 100644 index 7a396f4..0000000 --- a/sdk/src/references/abi/RainbowSuperTokenFactory.json +++ /dev/null @@ -1,706 +0,0 @@ -{ - "abi": [ - { - "type": "constructor", - "inputs": [ - { - "name": "_uniswapV3Factory", - "type": "address", - "internalType": "address" - }, - { - "name": "_overTheRainbow", - "type": "address", - "internalType": "address" - }, - { - "name": "_nonfungiblePositionManager", - "type": "address", - "internalType": "address" - }, - { "name": "_swapRouter", "type": "address", "internalType": "address" }, - { "name": "_weth", "type": "address", "internalType": "address" }, - { "name": "_baseTokenURI", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "POOL_FEE", - "inputs": [], - "outputs": [{ "name": "", "type": "uint24", "internalType": "uint24" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "RainbowSuperTokenContractCodeHash", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "TICK_SPACING", - "inputs": [], - "outputs": [{ "name": "", "type": "int24", "internalType": "int24" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "WETH", - "inputs": [], - "outputs": [ - { "name": "", "type": "address", "internalType": "contract IWETH9" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "banName", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "status", "type": "bool", "internalType": "bool" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "banTicker", - "inputs": [ - { "name": "ticker", "type": "string", "internalType": "string" }, - { "name": "status", "type": "bool", "internalType": "bool" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "bannedNames", - "inputs": [{ "name": "", "type": "string", "internalType": "string" }], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "bannedTickers", - "inputs": [{ "name": "", "type": "string", "internalType": "string" }], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "baseTokenURI", - "inputs": [], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "claimCreatorFees", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" }, - { "name": "recipient", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "claimProtocolFees", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" }, - { "name": "recipient", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "collectFees", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "creatorUnclaimedFees", - "inputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "outputs": [ - { "name": "unclaimed0", "type": "uint128", "internalType": "uint128" }, - { "name": "unclaimed1", "type": "uint128", "internalType": "uint128" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "defaultFeeConfig", - "inputs": [], - "outputs": [ - { - "name": "creatorLPFeeBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "protocolBaseBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "creatorBaseBps", - "type": "uint16", - "internalType": "uint16" - }, - { "name": "airdropBps", "type": "uint16", "internalType": "uint16" }, - { "name": "hasAirdrop", "type": "bool", "internalType": "bool" }, - { "name": "feeToken", "type": "address", "internalType": "address" }, - { "name": "creator", "type": "address", "internalType": "address" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "defaultPairToken", - "inputs": [], - "outputs": [ - { "name": "", "type": "address", "internalType": "contract ERC20" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "launchFromOtherChain", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "symbol", "type": "string", "internalType": "string" }, - { "name": "merkleroot", "type": "bytes32", "internalType": "bytes32" }, - { "name": "supply", "type": "uint256", "internalType": "uint256" }, - { "name": "salt", "type": "bytes32", "internalType": "bytes32" }, - { "name": "creator", "type": "address", "internalType": "address" }, - { - "name": "originalChainId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "airdropAmount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "newToken", - "type": "address", - "internalType": "contract RainbowSuperToken" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "launchRainbowSuperToken", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "symbol", "type": "string", "internalType": "string" }, - { "name": "merkleroot", "type": "bytes32", "internalType": "bytes32" }, - { "name": "supply", "type": "uint256", "internalType": "uint256" }, - { "name": "initialTick", "type": "int24", "internalType": "int24" }, - { "name": "salt", "type": "bytes32", "internalType": "bytes32" }, - { "name": "creator", "type": "address", "internalType": "address" } - ], - "outputs": [ - { - "name": "newToken", - "type": "address", - "internalType": "contract RainbowSuperToken" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "launchRainbowSuperTokenAndBuy", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "symbol", "type": "string", "internalType": "string" }, - { "name": "merkleroot", "type": "bytes32", "internalType": "bytes32" }, - { "name": "supply", "type": "uint256", "internalType": "uint256" }, - { "name": "initialTick", "type": "int24", "internalType": "int24" }, - { "name": "salt", "type": "bytes32", "internalType": "bytes32" }, - { "name": "creator", "type": "address", "internalType": "address" }, - { "name": "amountIn", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract RainbowSuperToken" - } - ], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "nonfungiblePositionManager", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract INonfungiblePositionManager" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "onERC721Received", - "inputs": [ - { "name": "", "type": "address", "internalType": "address" }, - { "name": "", "type": "address", "internalType": "address" }, - { "name": "", "type": "uint256", "internalType": "uint256" }, - { "name": "", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [{ "name": "", "type": "bytes4", "internalType": "bytes4" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "overTheRainbowPot", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "predictTokenAddress", - "inputs": [ - { "name": "creator", "type": "address", "internalType": "address" }, - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "symbol", "type": "string", "internalType": "string" }, - { "name": "merkleroot", "type": "bytes32", "internalType": "bytes32" }, - { "name": "supply", "type": "uint256", "internalType": "uint256" }, - { "name": "salt", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "protocolUnclaimedFees", - "inputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "outputs": [ - { "name": "unclaimed0", "type": "uint128", "internalType": "uint128" }, - { "name": "unclaimed1", "type": "uint128", "internalType": "uint128" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "setBaseTokenURI", - "inputs": [ - { - "name": "newBaseTokenURI", - "type": "string", - "internalType": "string" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDefaultFeeConfig", - "inputs": [ - { - "name": "newConfig", - "type": "tuple", - "internalType": "struct RainbowSuperTokenFactory.FeeConfig", - "components": [ - { - "name": "creatorLPFeeBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "protocolBaseBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "creatorBaseBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "airdropBps", - "type": "uint16", - "internalType": "uint16" - }, - { "name": "hasAirdrop", "type": "bool", "internalType": "bool" }, - { - "name": "feeToken", - "type": "address", - "internalType": "address" - }, - { "name": "creator", "type": "address", "internalType": "address" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setNewPairToken", - "inputs": [ - { - "name": "newPairToken", - "type": "address", - "internalType": "contract ERC20" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setNewTickSpacing", - "inputs": [ - { "name": "newPoolFee", "type": "uint24", "internalType": "uint24" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setPot", - "inputs": [ - { "name": "newPot", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "swapRouter", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ISwapRouter02" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "tokenFeeConfig", - "inputs": [{ "name": "", "type": "address", "internalType": "address" }], - "outputs": [ - { - "name": "creatorLPFeeBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "protocolBaseBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "creatorBaseBps", - "type": "uint16", - "internalType": "uint16" - }, - { "name": "airdropBps", "type": "uint16", "internalType": "uint16" }, - { "name": "hasAirdrop", "type": "bool", "internalType": "bool" }, - { "name": "feeToken", "type": "address", "internalType": "address" }, - { "name": "creator", "type": "address", "internalType": "address" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "tokenPositionIds", - "inputs": [{ "name": "", "type": "address", "internalType": "address" }], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { "name": "newOwner", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "uniswapV3Factory", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract IUniswapV3Factory" - } - ], - "stateMutability": "view" - }, - { - "type": "event", - "name": "FeeConfigUpdated", - "inputs": [ - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "config", - "type": "tuple", - "indexed": false, - "internalType": "struct RainbowSuperTokenFactory.FeeConfig", - "components": [ - { - "name": "creatorLPFeeBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "protocolBaseBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "creatorBaseBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "airdropBps", - "type": "uint16", - "internalType": "uint16" - }, - { "name": "hasAirdrop", "type": "bool", "internalType": "bool" }, - { - "name": "feeToken", - "type": "address", - "internalType": "address" - }, - { "name": "creator", "type": "address", "internalType": "address" } - ] - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "FeesClaimed", - "inputs": [ - { - "name": "recipient", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "tokenId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "amount0", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "amount1", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "FeesCollected", - "inputs": [ - { - "name": "tokenId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "creatorFee0", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "creatorFee1", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "protocolFee0", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "protocolFee1", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "NewDefaultPairToken", - "inputs": [ - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "NewPot", - "inputs": [ - { - "name": "pot", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OverTheRainbowClaimed", - "inputs": [ - { - "name": "recipient", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "user", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RainbowSuperTokenCreated", - "inputs": [ - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "owner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "creator", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "uri", - "type": "string", - "indexed": false, - "internalType": "string" - } - ], - "anonymous": false - }, - { "type": "error", "name": "BannedName", "inputs": [] }, - { "type": "error", "name": "BannedTicker", "inputs": [] }, - { "type": "error", "name": "IncorrectSalt", "inputs": [] }, - { "type": "error", "name": "InsufficientFunds", "inputs": [] }, - { "type": "error", "name": "InvalidFeeSplit", "inputs": [] }, - { "type": "error", "name": "InvalidSupplyAllocation", "inputs": [] }, - { "type": "error", "name": "InvalidToken", "inputs": [] }, - { "type": "error", "name": "NoFeesToClaim", "inputs": [] }, - { "type": "error", "name": "NotUniswapPositionManager", "inputs": [] }, - { "type": "error", "name": "ReservedName", "inputs": [] }, - { "type": "error", "name": "ReservedTicker", "inputs": [] }, - { - "type": "error", - "name": "StringsInsufficientHexLength", - "inputs": [ - { "name": "value", "type": "bytes32", "internalType": "bytes32" }, - { "name": "length", "type": "uint256", "internalType": "uint256" } - ] - }, - { "type": "error", "name": "T", "inputs": [] }, - { "type": "error", "name": "Unauthorized", "inputs": [] }, - { "type": "error", "name": "ZeroSupply", "inputs": [] } - ] -} diff --git a/sdk/src/references/abi/RainbowSuperTokenFactory.ts b/sdk/src/references/abi/RainbowSuperTokenFactory.ts new file mode 100644 index 0000000..f9533bf --- /dev/null +++ b/sdk/src/references/abi/RainbowSuperTokenFactory.ts @@ -0,0 +1,690 @@ +export const rainbowSuperTokenFactoryAbi = [ + { + type: 'constructor', + inputs: [ + { + name: '_uniswapV3Factory', + type: 'address', + internalType: 'address', + }, + { + name: '_overTheRainbow', + type: 'address', + internalType: 'address', + }, + { + name: '_nonfungiblePositionManager', + type: 'address', + internalType: 'address', + }, + { name: '_swapRouter', type: 'address', internalType: 'address' }, + { name: '_weth', type: 'address', internalType: 'address' }, + { name: '_baseTokenURI', type: 'string', internalType: 'string' }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + name: 'POOL_FEE', + inputs: [], + outputs: [{ name: '', type: 'uint24', internalType: 'uint24' }], + stateMutability: 'view', + }, + { + type: 'function', + name: 'RainbowSuperTokenContractCodeHash', + inputs: [], + outputs: [{ name: '', type: 'bytes32', internalType: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + name: 'TICK_SPACING', + inputs: [], + outputs: [{ name: '', type: 'int24', internalType: 'int24' }], + stateMutability: 'view', + }, + { + type: 'function', + name: 'WETH', + inputs: [], + outputs: [{ name: '', type: 'address', internalType: 'contract IWETH9' }], + stateMutability: 'view', + }, + { + type: 'function', + name: 'banName', + inputs: [ + { name: 'name', type: 'string', internalType: 'string' }, + { name: 'status', type: 'bool', internalType: 'bool' }, + ], + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + name: 'banTicker', + inputs: [ + { name: 'ticker', type: 'string', internalType: 'string' }, + { name: 'status', type: 'bool', internalType: 'bool' }, + ], + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + name: 'bannedNames', + inputs: [{ name: '', type: 'string', internalType: 'string' }], + outputs: [{ name: '', type: 'bool', internalType: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + name: 'bannedTickers', + inputs: [{ name: '', type: 'string', internalType: 'string' }], + outputs: [{ name: '', type: 'bool', internalType: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + name: 'baseTokenURI', + inputs: [], + outputs: [{ name: '', type: 'string', internalType: 'string' }], + stateMutability: 'view', + }, + { + type: 'function', + name: 'claimCreatorFees', + inputs: [ + { name: 'token', type: 'address', internalType: 'address' }, + { name: 'recipient', type: 'address', internalType: 'address' }, + ], + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + name: 'claimProtocolFees', + inputs: [ + { name: 'token', type: 'address', internalType: 'address' }, + { name: 'recipient', type: 'address', internalType: 'address' }, + ], + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + name: 'collectFees', + inputs: [{ name: 'token', type: 'address', internalType: 'address' }], + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + name: 'creatorUnclaimedFees', + inputs: [{ name: '', type: 'uint256', internalType: 'uint256' }], + outputs: [ + { name: 'unclaimed0', type: 'uint128', internalType: 'uint128' }, + { name: 'unclaimed1', type: 'uint128', internalType: 'uint128' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + name: 'defaultFeeConfig', + inputs: [], + outputs: [ + { + name: 'creatorLPFeeBps', + type: 'uint16', + internalType: 'uint16', + }, + { + name: 'protocolBaseBps', + type: 'uint16', + internalType: 'uint16', + }, + { + name: 'creatorBaseBps', + type: 'uint16', + internalType: 'uint16', + }, + { name: 'airdropBps', type: 'uint16', internalType: 'uint16' }, + { name: 'hasAirdrop', type: 'bool', internalType: 'bool' }, + { name: 'feeToken', type: 'address', internalType: 'address' }, + { name: 'creator', type: 'address', internalType: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + name: 'defaultPairToken', + inputs: [], + outputs: [{ name: '', type: 'address', internalType: 'contract ERC20' }], + stateMutability: 'view', + }, + { + type: 'function', + name: 'launchFromOtherChain', + inputs: [ + { name: 'name', type: 'string', internalType: 'string' }, + { name: 'symbol', type: 'string', internalType: 'string' }, + { name: 'merkleroot', type: 'bytes32', internalType: 'bytes32' }, + { name: 'supply', type: 'uint256', internalType: 'uint256' }, + { name: 'salt', type: 'bytes32', internalType: 'bytes32' }, + { name: 'creator', type: 'address', internalType: 'address' }, + { + name: 'originalChainId', + type: 'uint256', + internalType: 'uint256', + }, + { + name: 'airdropAmount', + type: 'uint256', + internalType: 'uint256', + }, + ], + outputs: [ + { + name: 'newToken', + type: 'address', + internalType: 'contract RainbowSuperToken', + }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + name: 'launchRainbowSuperToken', + inputs: [ + { name: 'name', type: 'string', internalType: 'string' }, + { name: 'symbol', type: 'string', internalType: 'string' }, + { name: 'merkleroot', type: 'bytes32', internalType: 'bytes32' }, + { name: 'supply', type: 'uint256', internalType: 'uint256' }, + { name: 'initialTick', type: 'int24', internalType: 'int24' }, + { name: 'salt', type: 'bytes32', internalType: 'bytes32' }, + { name: 'creator', type: 'address', internalType: 'address' }, + ], + outputs: [ + { + name: 'newToken', + type: 'address', + internalType: 'contract RainbowSuperToken', + }, + ], + stateMutability: 'nonpayable', + }, + { + type: 'function', + name: 'launchRainbowSuperTokenAndBuy', + inputs: [ + { name: 'name', type: 'string', internalType: 'string' }, + { name: 'symbol', type: 'string', internalType: 'string' }, + { name: 'merkleroot', type: 'bytes32', internalType: 'bytes32' }, + { name: 'supply', type: 'uint256', internalType: 'uint256' }, + { name: 'initialTick', type: 'int24', internalType: 'int24' }, + { name: 'salt', type: 'bytes32', internalType: 'bytes32' }, + { name: 'creator', type: 'address', internalType: 'address' }, + { name: 'amountIn', type: 'uint256', internalType: 'uint256' }, + ], + outputs: [ + { + name: '', + type: 'address', + internalType: 'contract RainbowSuperToken', + }, + ], + stateMutability: 'payable', + }, + { + type: 'function', + name: 'nonfungiblePositionManager', + inputs: [], + outputs: [ + { + name: '', + type: 'address', + internalType: 'contract INonfungiblePositionManager', + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + name: 'onERC721Received', + inputs: [ + { name: '', type: 'address', internalType: 'address' }, + { name: '', type: 'address', internalType: 'address' }, + { name: '', type: 'uint256', internalType: 'uint256' }, + { name: '', type: 'bytes', internalType: 'bytes' }, + ], + outputs: [{ name: '', type: 'bytes4', internalType: 'bytes4' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + name: 'overTheRainbowPot', + inputs: [], + outputs: [{ name: '', type: 'address', internalType: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + name: 'owner', + inputs: [], + outputs: [{ name: '', type: 'address', internalType: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + name: 'predictTokenAddress', + inputs: [ + { name: 'creator', type: 'address', internalType: 'address' }, + { name: 'name', type: 'string', internalType: 'string' }, + { name: 'symbol', type: 'string', internalType: 'string' }, + { name: 'merkleroot', type: 'bytes32', internalType: 'bytes32' }, + { name: 'supply', type: 'uint256', internalType: 'uint256' }, + { name: 'salt', type: 'bytes32', internalType: 'bytes32' }, + ], + outputs: [{ name: 'token', type: 'address', internalType: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + name: 'protocolUnclaimedFees', + inputs: [{ name: '', type: 'uint256', internalType: 'uint256' }], + outputs: [ + { name: 'unclaimed0', type: 'uint128', internalType: 'uint128' }, + { name: 'unclaimed1', type: 'uint128', internalType: 'uint128' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + name: 'setBaseTokenURI', + inputs: [ + { + name: 'newBaseTokenURI', + type: 'string', + internalType: 'string', + }, + ], + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + name: 'setDefaultFeeConfig', + inputs: [ + { + name: 'newConfig', + type: 'tuple', + internalType: 'struct RainbowSuperTokenFactory.FeeConfig', + components: [ + { + name: 'creatorLPFeeBps', + type: 'uint16', + internalType: 'uint16', + }, + { + name: 'protocolBaseBps', + type: 'uint16', + internalType: 'uint16', + }, + { + name: 'creatorBaseBps', + type: 'uint16', + internalType: 'uint16', + }, + { + name: 'airdropBps', + type: 'uint16', + internalType: 'uint16', + }, + { name: 'hasAirdrop', type: 'bool', internalType: 'bool' }, + { + name: 'feeToken', + type: 'address', + internalType: 'address', + }, + { name: 'creator', type: 'address', internalType: 'address' }, + ], + }, + ], + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + name: 'setNewPairToken', + inputs: [ + { + name: 'newPairToken', + type: 'address', + internalType: 'contract ERC20', + }, + ], + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + name: 'setNewTickSpacing', + inputs: [{ name: 'newPoolFee', type: 'uint24', internalType: 'uint24' }], + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + name: 'setPot', + inputs: [{ name: 'newPot', type: 'address', internalType: 'address' }], + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + name: 'swapRouter', + inputs: [], + outputs: [ + { + name: '', + type: 'address', + internalType: 'contract ISwapRouter02', + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + name: 'tokenFeeConfig', + inputs: [{ name: '', type: 'address', internalType: 'address' }], + outputs: [ + { + name: 'creatorLPFeeBps', + type: 'uint16', + internalType: 'uint16', + }, + { + name: 'protocolBaseBps', + type: 'uint16', + internalType: 'uint16', + }, + { + name: 'creatorBaseBps', + type: 'uint16', + internalType: 'uint16', + }, + { name: 'airdropBps', type: 'uint16', internalType: 'uint16' }, + { name: 'hasAirdrop', type: 'bool', internalType: 'bool' }, + { name: 'feeToken', type: 'address', internalType: 'address' }, + { name: 'creator', type: 'address', internalType: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + name: 'tokenPositionIds', + inputs: [{ name: '', type: 'address', internalType: 'address' }], + outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + name: 'transferOwnership', + inputs: [{ name: 'newOwner', type: 'address', internalType: 'address' }], + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + name: 'uniswapV3Factory', + inputs: [], + outputs: [ + { + name: '', + type: 'address', + internalType: 'contract IUniswapV3Factory', + }, + ], + stateMutability: 'view', + }, + { + type: 'event', + name: 'FeeConfigUpdated', + inputs: [ + { + name: 'token', + type: 'address', + indexed: true, + internalType: 'address', + }, + { + name: 'config', + type: 'tuple', + indexed: false, + internalType: 'struct RainbowSuperTokenFactory.FeeConfig', + components: [ + { + name: 'creatorLPFeeBps', + type: 'uint16', + internalType: 'uint16', + }, + { + name: 'protocolBaseBps', + type: 'uint16', + internalType: 'uint16', + }, + { + name: 'creatorBaseBps', + type: 'uint16', + internalType: 'uint16', + }, + { + name: 'airdropBps', + type: 'uint16', + internalType: 'uint16', + }, + { name: 'hasAirdrop', type: 'bool', internalType: 'bool' }, + { + name: 'feeToken', + type: 'address', + internalType: 'address', + }, + { name: 'creator', type: 'address', internalType: 'address' }, + ], + }, + ], + anonymous: false, + }, + { + type: 'event', + name: 'FeesClaimed', + inputs: [ + { + name: 'recipient', + type: 'address', + indexed: true, + internalType: 'address', + }, + { + name: 'tokenId', + type: 'uint256', + indexed: true, + internalType: 'uint256', + }, + { + name: 'amount0', + type: 'uint256', + indexed: false, + internalType: 'uint256', + }, + { + name: 'amount1', + type: 'uint256', + indexed: false, + internalType: 'uint256', + }, + ], + anonymous: false, + }, + { + type: 'event', + name: 'FeesCollected', + inputs: [ + { + name: 'tokenId', + type: 'uint256', + indexed: true, + internalType: 'uint256', + }, + { + name: 'creatorFee0', + type: 'uint256', + indexed: false, + internalType: 'uint256', + }, + { + name: 'creatorFee1', + type: 'uint256', + indexed: false, + internalType: 'uint256', + }, + { + name: 'protocolFee0', + type: 'uint256', + indexed: false, + internalType: 'uint256', + }, + { + name: 'protocolFee1', + type: 'uint256', + indexed: false, + internalType: 'uint256', + }, + ], + anonymous: false, + }, + { + type: 'event', + name: 'NewDefaultPairToken', + inputs: [ + { + name: 'token', + type: 'address', + indexed: true, + internalType: 'address', + }, + ], + anonymous: false, + }, + { + type: 'event', + name: 'NewPot', + inputs: [ + { + name: 'pot', + type: 'address', + indexed: true, + internalType: 'address', + }, + ], + anonymous: false, + }, + { + type: 'event', + name: 'OverTheRainbowClaimed', + inputs: [ + { + name: 'recipient', + type: 'address', + indexed: true, + internalType: 'address', + }, + { + name: 'token', + type: 'address', + indexed: true, + internalType: 'address', + }, + { + name: 'amount', + type: 'uint256', + indexed: false, + internalType: 'uint256', + }, + ], + anonymous: false, + }, + { + type: 'event', + name: 'OwnershipTransferred', + inputs: [ + { + name: 'user', + type: 'address', + indexed: true, + internalType: 'address', + }, + { + name: 'newOwner', + type: 'address', + indexed: true, + internalType: 'address', + }, + ], + anonymous: false, + }, + { + type: 'event', + name: 'RainbowSuperTokenCreated', + inputs: [ + { + name: 'token', + type: 'address', + indexed: true, + internalType: 'address', + }, + { + name: 'owner', + type: 'address', + indexed: true, + internalType: 'address', + }, + { + name: 'creator', + type: 'address', + indexed: true, + internalType: 'address', + }, + { + name: 'uri', + type: 'string', + indexed: false, + internalType: 'string', + }, + ], + anonymous: false, + }, + { type: 'error', name: 'BannedName', inputs: [] }, + { type: 'error', name: 'BannedTicker', inputs: [] }, + { type: 'error', name: 'IncorrectSalt', inputs: [] }, + { type: 'error', name: 'InsufficientFunds', inputs: [] }, + { type: 'error', name: 'InvalidFeeSplit', inputs: [] }, + { type: 'error', name: 'InvalidSupplyAllocation', inputs: [] }, + { type: 'error', name: 'InvalidToken', inputs: [] }, + { type: 'error', name: 'NoFeesToClaim', inputs: [] }, + { type: 'error', name: 'NotUniswapPositionManager', inputs: [] }, + { type: 'error', name: 'ReservedName', inputs: [] }, + { type: 'error', name: 'ReservedTicker', inputs: [] }, + { + type: 'error', + name: 'StringsInsufficientHexLength', + inputs: [ + { name: 'value', type: 'bytes32', internalType: 'bytes32' }, + { name: 'length', type: 'uint256', internalType: 'uint256' }, + ], + }, + { type: 'error', name: 'T', inputs: [] }, + { type: 'error', name: 'Unauthorized', inputs: [] }, + { type: 'error', name: 'ZeroSupply', inputs: [] }, +] as const; diff --git a/sdk/src/types/api.ts b/sdk/src/types/api.ts index c7f6989..800edc1 100644 --- a/sdk/src/types/api.ts +++ b/sdk/src/types/api.ts @@ -1,3 +1,5 @@ +import { Hex } from 'viem'; + export interface AirdropMetadata { cohortIds: string[]; addresses: string[]; @@ -8,7 +10,7 @@ export interface TokenMetadata { name: string; symbol: string; logoUrl: string; - totalSupply: string; + totalSupply: bigint; description?: string; links: Record; creatorAddress: string; @@ -21,8 +23,8 @@ export interface DeployRainbowSuperTokenRequest extends TokenMetadata { export interface DeployRainbowSuperTokenResponse { data: { tokenURI: string; - salt: string; - merkleRoot: string; + salt: Hex; + merkleRoot: Hex; totalSupply: string; name: string; symbol: string; diff --git a/sdk/src/types/index.ts b/sdk/src/types/index.ts index 20dc669..11bed0b 100644 --- a/sdk/src/types/index.ts +++ b/sdk/src/types/index.ts @@ -1,7 +1,8 @@ -import { Wallet } from '@ethersproject/wallet'; -import { TransactionResponse } from '@ethersproject/providers'; +import { Transport, Chain, Client, Account, Address, Hex } from 'viem'; import { AirdropMetadata } from './api'; +export type ViemClient = Client; + export type SupportedNetwork = { chainId: number; contractAddress: string; @@ -26,11 +27,11 @@ export interface SDKConfig { export interface LaunchTokenParams { name: string; symbol: string; - supply: string; - wallet: Wallet; + supply: bigint; + client: ViemClient; initialTick?: number; - amountIn?: string; - creator?: string; + amountIn?: bigint; + creator?: Address; transactionOptions?: TransactionOptions; logoUrl: string; description?: string; @@ -39,21 +40,21 @@ export interface LaunchTokenParams { } export interface LaunchTokenAndBuyParams extends LaunchTokenParams { - amountIn: string; + amountIn: bigint; } export interface LaunchTokenResponse { - transaction: TransactionResponse; + hash: Hex; tokenUri: string; tokenAddress: string; } // Transaction options for gas customization export interface TransactionOptions { - gasLimit?: string; - gasPrice?: string; // legacy gas price - maxFeePerGas?: string; - maxPriorityFeePerGas?: string; + gas?: bigint; + gasPrice?: bigint; // legacy gas price + maxFeePerGas?: bigint; + maxPriorityFeePerGas?: bigint; } // Error types @@ -77,7 +78,11 @@ export { } from './api'; export class RainbowFetchError extends Error { - constructor(message: string, public status: number, public details: string) { + constructor( + message: string, + public status: number, + public details: string + ) { super(message); this.name = 'RainbowFetchError'; } diff --git a/sdk/src/utils/findValidSalt.ts b/sdk/src/utils/findValidSalt.ts index d720490..91da0ac 100644 --- a/sdk/src/utils/findValidSalt.ts +++ b/sdk/src/utils/findValidSalt.ts @@ -1,8 +1,7 @@ /* eslint-disable no-await-in-loop */ -import { Contract } from '@ethersproject/contracts'; -import { BigNumber, BigNumberish } from '@ethersproject/bignumber'; -import { hexZeroPad, hexlify } from '@ethersproject/bytes'; -import { randomBytes } from '@ethersproject/random'; +import { toHex, Address, Hex } from 'viem'; +import { randomBytes } from 'node:crypto'; +import { RainbowSuperTokenFactory } from './getRainbowSuperTokenFactory'; /** * Iterates over candidate salts until a valid one is found. @@ -11,39 +10,36 @@ import { randomBytes } from '@ethersproject/random'; * @param creator - The creator's address. * @param name - The token name. * @param symbol - The token symbol. - * @param merkleroot - The merkle root (as a hex string; use ethers.constants.HashZero if none). + * @param merkleroot - The merkle root (as a hex string; use Viem's `zeroHash` if none). * @param supply - The token's total supply. * @returns An object containing the valid salt (as a 32-byte hex string) and the predicted token address. */ export async function findValidSalt( - factory: Contract, - creator: string, + factory: RainbowSuperTokenFactory, + creator: Address, name: string, symbol: string, - merkleroot: string, - supply: BigNumberish -): Promise<{ salt: string; predictedAddress: string }> { - const defaultPairToken = await factory.defaultPairToken(); + merkleroot: Hex, + supply: bigint +): Promise<{ salt: Hex; predictedAddress: Address }> { + const defaultPairToken = await factory.read.defaultPairToken(); let ret; while (!ret) { // Generate a random salt as proper hex - const randomSalt = hexZeroPad( - hexlify(randomBytes(32)), // Convert random bytes to hex properly - 32 - ); + const randomSalt = toHex(randomBytes(32)); // Use the contract's predictTokenAddress - const predicted = await factory.predictTokenAddress( + const predicted = await factory.read.predictTokenAddress([ creator, name, symbol, merkleroot, supply, - randomSalt // Pass the original random salt, not the derived one - ); + randomSalt, // Pass the original random salt, not the derived one + ]); // Check if predicted address is less than WETH - if (BigNumber.from(predicted).lt(BigNumber.from(defaultPairToken))) { + if (predicted < defaultPairToken) { ret = { salt: randomSalt, predictedAddress: predicted, diff --git a/sdk/src/utils/getFactoryConfig.ts b/sdk/src/utils/getFactoryConfig.ts index ef47c20..44bc447 100644 --- a/sdk/src/utils/getFactoryConfig.ts +++ b/sdk/src/utils/getFactoryConfig.ts @@ -1,6 +1,6 @@ -import { Wallet } from '@ethersproject/wallet'; import { getRainbowSuperTokenFactory } from './getRainbowSuperTokenFactory'; -import { SDKConfig } from '../types'; +import { SDKConfig, ViemClient } from '../types'; + interface FeeConfig { creatorLPFeeBps: number; protocolBaseBps: number; @@ -12,18 +12,18 @@ interface FeeConfig { } export async function getTokenLauncherContractConfig( - wallet: Wallet, + client: ViemClient, config: SDKConfig ): Promise { - const factory = await getRainbowSuperTokenFactory(wallet, config); - const factoryConfig = await factory.defaultFeeConfig(); + const factory = await getRainbowSuperTokenFactory(client, config); + const result = await factory.read.defaultFeeConfig(); return { - creatorLPFeeBps: factoryConfig.creatorLPFeeBps, - protocolBaseBps: factoryConfig.protocolBaseBps, - creatorBaseBps: factoryConfig.creatorBaseBps, - airdropBps: factoryConfig.airdropBps, - hasAirdrop: factoryConfig.hasAirdrop, - feeToken: factoryConfig.feeToken, - creator: factoryConfig.creator, + creatorLPFeeBps: result[0], + protocolBaseBps: result[1], + creatorBaseBps: result[2], + airdropBps: result[3], + hasAirdrop: result[4], + feeToken: result[5], + creator: result[6], }; } diff --git a/sdk/src/utils/getRainbowSuperTokenFactory.ts b/sdk/src/utils/getRainbowSuperTokenFactory.ts index 6233a6d..24da8f9 100644 --- a/sdk/src/utils/getRainbowSuperTokenFactory.ts +++ b/sdk/src/utils/getRainbowSuperTokenFactory.ts @@ -1,26 +1,37 @@ -import { Contract } from '@ethersproject/contracts'; -import { Wallet } from '@ethersproject/wallet'; +import { Address, getContract, GetContractReturnType } from 'viem'; import { getFactorySupportedChains } from './getFactorySupportedChains'; -import rainbowSuperTokenFactoryAbi from '../references/abi/RainbowSuperTokenFactory.json'; -import { SDKConfig } from '../types'; +import { rainbowSuperTokenFactoryAbi } from '../references/abi/RainbowSuperTokenFactory'; +import { SDKConfig, ViemClient } from '../types'; + +export type RainbowSuperTokenFactory = GetContractReturnType< + typeof rainbowSuperTokenFactoryAbi, + ViemClient, + Address +>; export const getRainbowSuperTokenFactory = async ( - wallet: Wallet, + client: ViemClient, config: SDKConfig -): Promise => { - const chainId = await wallet.getChainId(); +): Promise => { + const chainId = client.chain.id; let factoryAddress; if (config.MODE === 'jest') { - factoryAddress = getFactorySupportedChains().find(network => network.chainId === chainId) - ?.contractAddress; + factoryAddress = getFactorySupportedChains().find( + network => network.chainId === chainId + )?.contractAddress; } else { - factoryAddress = config.SUPPORTED_NETWORKS?.find(network => network.chainId === chainId) - ?.contractAddress; + factoryAddress = config.SUPPORTED_NETWORKS?.find( + network => network.chainId === chainId + )?.contractAddress; } if (!factoryAddress) { throw new Error(`No factory address found for chainId: ${chainId}`); } - return new Contract(factoryAddress, rainbowSuperTokenFactoryAbi.abi, wallet); + return getContract({ + address: factoryAddress as Address, + abi: rainbowSuperTokenFactoryAbi, + client, + }); }; diff --git a/sdk/src/utils/tickMath.ts b/sdk/src/utils/tickMath.ts index de94b83..b8d1be6 100644 --- a/sdk/src/utils/tickMath.ts +++ b/sdk/src/utils/tickMath.ts @@ -2,7 +2,6 @@ import JSBI from 'jsbi'; import invariant from 'tiny-invariant'; -import { BigNumber, BigNumberish } from '@ethersproject/bignumber'; export const ZERO = JSBI.BigInt(0); export const ONE = JSBI.BigInt(1); export const TWO = JSBI.BigInt(2); @@ -187,8 +186,8 @@ function sqrt(value: bigint): bigint { * * sqrtPriceX96 = floor( sqrt(price * 2^192) / 1e9 ) */ -export function encodePriceToX96(price: BigNumber): JSBI { - const P: bigint = price.toBigInt(); +export function encodePriceToX96(price: bigint): JSBI { + const P: bigint = price; const shifted: bigint = P * 2n ** 192n; const sqrtShifted: bigint = sqrt(shifted); // equals floor( sqrt(P)*2^96 ) const result: bigint = sqrtShifted / 1000000000n; // divide by 1e9 @@ -202,9 +201,8 @@ export function encodePriceToX96(price: BigNumber): JSBI { * @param tickSpacing The spacing between valid ticks. * @returns The nearest valid tick. */ -export function priceToInitialTick(price: BigNumberish, tickSpacing: number): number { - const priceBN = BigNumber.from(price); - const sqrtPriceX96 = encodePriceToX96(priceBN); +export function priceToInitialTick(price: bigint, tickSpacing: number): number { + const sqrtPriceX96 = encodePriceToX96(price); const tick = TickMath.getTickAtSqrtRatio(sqrtPriceX96); // Align tick to the spacing. return Math.round(tick / tickSpacing) * tickSpacing; diff --git a/sdk/test/launchRainbowTokenAndBuy.test.ts b/sdk/test/launchRainbowTokenAndBuy.test.ts index 8d8e9a3..b571c3d 100644 --- a/sdk/test/launchRainbowTokenAndBuy.test.ts +++ b/sdk/test/launchRainbowTokenAndBuy.test.ts @@ -1,26 +1,26 @@ -import { JsonRpcProvider } from '@ethersproject/providers'; -import { Wallet } from '@ethersproject/wallet'; -import { BigNumber } from '@ethersproject/bignumber'; -import { HashZero } from '@ethersproject/constants'; +import { http, createClient, parseEther, zeroHash, isAddress, formatUnits } from 'viem'; +import { privateKeyToAccount } from 'viem/accounts'; +import { anvil } from 'viem/chains'; +import { getBalance } from 'viem/actions'; import { predictTokenAddress } from '../src/predictAddress'; -import { isAddress } from '@ethersproject/address'; import { getInitialTick } from '../src/getInitialTick'; -import { formatUnits } from '@ethersproject/units'; import { TokenLauncher } from '../src/index'; import { getFactorySupportedChains } from '../src/utils/getFactorySupportedChains'; import { getTokenLauncherContractConfig } from '../src/utils/getFactoryConfig'; +import { ViemClient } from '../src/types'; describe('Launch Rainbow Super Token and Buy', () => { - let provider: JsonRpcProvider; - let wallet: Wallet; + let client: ViemClient; let sdk: typeof TokenLauncher; beforeAll(async () => { - provider = new JsonRpcProvider('http://127.0.0.1:8545'); - wallet = new Wallet( - '0x34120324fbc54dfb9b92a0a12221fbd63e7bb825733d27ad09efaa617b393c73', - provider - ); + client = createClient({ + account: privateKeyToAccount( + '0x34120324fbc54dfb9b92a0a12221fbd63e7bb825733d27ad09efaa617b393c73' + ), + chain: anvil, + transport: http(), + }); sdk = TokenLauncher; sdk.configure({ MODE: 'jest', @@ -29,13 +29,13 @@ describe('Launch Rainbow Super Token and Buy', () => { }, 30000); it('should check that the creator wallet has funds', async () => { - const balance = await provider.getBalance(wallet.address); + const balance = await getBalance(client, { address: client.account.address }); console.log('creator wallet balance: ', balance); - expect(balance.gt(BigNumber.from('0'))).toBe(true); + expect(balance > 0n).toBe(true); }); it('should get factory config', async () => { - const config = await getTokenLauncherContractConfig(wallet, sdk.getConfig()); + const config = await getTokenLauncherContractConfig(client, sdk.getConfig()); expect(config).toBeDefined(); console.log('factory config: ', config); }); @@ -45,11 +45,11 @@ describe('Launch Rainbow Super Token and Buy', () => { { name: 'Test Token', symbol: 'TEST', - supply: '1000000000000000000000', - wallet, - merkleroot: HashZero, - creator: wallet.address, - salt: HashZero, + supply: 1000000000000000000000n, + client, + merkleroot: zeroHash, + creator: client.account.address, + salt: zeroHash, }, sdk.getConfig() ); @@ -61,17 +61,15 @@ describe('Launch Rainbow Super Token and Buy', () => { it('calculates correct initial tick for common token prices', async () => { const testCases = [ { - tokenPrice: BigNumber.from(10).pow(18), // 1 ETH + tokenPrice: parseEther('1'), // 1 ETH expectedPrice: 1, }, { - tokenPrice: BigNumber.from(2).mul(BigNumber.from(10).pow(18)), // 2 ETH + tokenPrice: parseEther('2'), // 2 ETH expectedPrice: 2, }, { - tokenPrice: BigNumber.from(10) - .pow(18) - .div(2), // 0.5 ETH + tokenPrice: parseEther('0.5'), // 0.5 ETH expectedPrice: 0.5, }, ]; @@ -120,23 +118,23 @@ describe('Launch Rainbow Super Token and Buy', () => { const txParams = { name: 'CANTHISBEPURCHASED', symbol: 'CBP', - supply: '1000000000000000000000000', - amountIn: '1000000000000000000', + supply: 1000000000000000000000000n, + amountIn: 1000000000000000000n, initialTick: 200, logoUrl: 'https://example.com/logo.png', description: 'This is a test token', - wallet, - creator: wallet.address, + client, + creator: client.account.address, transactionOptions: { - gasLimit: '8000000', - maxFeePerGas: '1500000000', - maxPriorityFeePerGas: '1500000000', + gas: 8000000n, + maxFeePerGas: 1500000000n, + maxPriorityFeePerGas: 1500000000n, }, }; try { const tx = await sdk.launchTokenAndBuy(txParams); - console.log('Transaction submitted with hash:', tx?.transaction.hash); - expect(tx?.transaction.hash).toBeTruthy(); + console.log('Transaction submitted with hash:', tx?.hash); + expect(tx?.hash).toBeTruthy(); } catch (error) { console.error('Failed to send transaction:', error); throw error; @@ -147,23 +145,23 @@ describe('Launch Rainbow Super Token and Buy', () => { const txParams = { name: 'Api Test Submission Number 3', symbol: 'ATS3', - supply: '1000000000000000000000000', - amountIn: '1000000000000000000', + supply: 1000000000000000000000000n, + amountIn: 1000000000000000000n, initialTick: 200, - wallet, - creator: wallet.address, + client, + creator: client.account.address, links: {}, - merkleroot: HashZero, + merkleroot: zeroHash, logoUrl: 'https://example.com/logo.png', description: 'This is a test token', transactionOptions: { - gasLimit: '8000000', - maxFeePerGas: '1500000000', - maxPriorityFeePerGas: '1500000000', + gas: 8000000n, + maxFeePerGas: 1500000000n, + maxPriorityFeePerGas: 1500000000n, }, }; const tx = await sdk.launchToken(txParams); - console.log('Transaction submitted with hash:', tx?.transaction.hash); - expect(tx?.transaction.hash).toBeTruthy(); + console.log('Transaction submitted with hash:', tx?.hash); + expect(tx?.hash).toBeTruthy(); }, 60000); }); diff --git a/sdk/yarn.lock b/sdk/yarn.lock index b1572c8..1e57803 100644 --- a/sdk/yarn.lock +++ b/sdk/yarn.lock @@ -2,6 +2,11 @@ # yarn lockfile v1 +"@adraffy/ens-normalize@^1.10.1": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.11.0.tgz#42cc67c5baa407ac25059fcd7d405cc5ecdb0c33" + integrity sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg== + "@ampproject/remapping@^2.2.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" @@ -305,441 +310,6 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== -"@ethereumjs/common@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-3.2.0.tgz#b71df25845caf5456449163012074a55f048e0a0" - integrity sha512-pksvzI0VyLgmuEF2FA/JR/4/y6hcPq8OUail3/AvycBaW1d5VSauOZzqGvJ3RTmR4MU35lWE8KseKOsEhrFRBA== - dependencies: - "@ethereumjs/util" "^8.1.0" - crc-32 "^1.2.0" - -"@ethereumjs/rlp@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" - integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== - -"@ethereumjs/rlp@^5.0.0": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-5.0.2.tgz#c89bd82f2f3bec248ab2d517ae25f5bbc4aac842" - integrity sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA== - -"@ethereumjs/tx@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-4.2.0.tgz#5988ae15daf5a3b3c815493bc6b495e76009e853" - integrity sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw== - dependencies: - "@ethereumjs/common" "^3.2.0" - "@ethereumjs/rlp" "^4.0.1" - "@ethereumjs/util" "^8.1.0" - ethereum-cryptography "^2.0.0" - -"@ethereumjs/util@9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-9.0.0.tgz#ac5945c629f3ab2ac584d8b12a8513e8eac29dc4" - integrity sha512-V8062I+ZXfFxtFLp7xsPeiT1IxDaVOZaM78nGj1gsWUFeZ8SgADMLDKWehp+muTy1JRbVoXFljZ1qoyv9ji/2g== - dependencies: - "@ethereumjs/rlp" "^5.0.0" - ethereum-cryptography "^2.1.2" - -"@ethereumjs/util@^8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" - integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== - dependencies: - "@ethereumjs/rlp" "^4.0.1" - ethereum-cryptography "^2.0.0" - micro-ftch "^0.3.1" - -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" - integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/abstract-provider@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" - integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - -"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" - integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/address@^5.0.2": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.8.0.tgz#3007a2c352eee566ad745dca1dbbebdb50a6a983" - 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/address@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" - integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - -"@ethersproject/base64@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" - integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - -"@ethersproject/basex@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" - integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" - integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - bn.js "^5.2.1" - -"@ethersproject/bignumber@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.8.0.tgz#c381d178f9eeb370923d389284efa19f69efa5d7" - 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.7.0", "@ethersproject/bytes@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" - integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/bytes@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.8.0.tgz#9074820e1cac7507a34372cadeb035461463be34" - integrity sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A== - dependencies: - "@ethersproject/logger" "^5.8.0" - -"@ethersproject/constants@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" - integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - -"@ethersproject/contracts@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" - integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== - dependencies: - "@ethersproject/abi" "^5.7.0" - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - -"@ethersproject/hash@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" - integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/hdnode@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" - integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/json-wallets@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" - integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - aes-js "3.0.0" - scrypt-js "3.0.1" - -"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" - integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - js-sha3 "0.8.0" - -"@ethersproject/keccak256@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.8.0.tgz#d2123a379567faf2d75d2aaea074ffd4df349e6a" - integrity sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng== - dependencies: - "@ethersproject/bytes" "^5.8.0" - js-sha3 "0.8.0" - -"@ethersproject/logger@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" - integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== - -"@ethersproject/logger@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.8.0.tgz#f0232968a4f87d29623a0481690a2732662713d6" - integrity sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA== - -"@ethersproject/networks@^5.7.0": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" - integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/pbkdf2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" - integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - -"@ethersproject/properties@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" - integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/providers@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.0.tgz#a885cfc7650a64385e7b03ac86fe9c2d4a9c2c63" - integrity sha512-+TTrrINMzZ0aXtlwO/95uhAggKm4USLm1PbeCBR/3XZ7+Oey+3pMyddzZEyRhizHpy1HXV0FRWRMI1O3EGYibA== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - bech32 "1.1.4" - ws "7.4.6" - -"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" - integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/rlp@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" - integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/rlp@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.8.0.tgz#5a0d49f61bc53e051532a5179472779141451de5" - integrity sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q== - dependencies: - "@ethersproject/bytes" "^5.8.0" - "@ethersproject/logger" "^5.8.0" - -"@ethersproject/sha2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" - integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - hash.js "1.1.7" - -"@ethersproject/signing-key@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" - integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - bn.js "^5.2.1" - elliptic "6.5.4" - hash.js "1.1.7" - -"@ethersproject/solidity@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" - integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" - integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" - integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - -"@ethersproject/units@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" - integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/wallet@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" - integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/json-wallets" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/web@^5.7.0": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" - integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== - dependencies: - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/wordlists@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" - integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@humanwhocodes/config-array@^0.13.0": version "0.13.0" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" @@ -999,75 +569,14 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@metamask/abi-utils@^2.0.2": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@metamask/abi-utils/-/abi-utils-2.0.4.tgz#20908c1d910f7a17a89fdf5778a5c59d5cb8b8be" - integrity sha512-StnIgUB75x7a7AgUhiaUZDpCsqGp7VkNnZh2XivXkJ6mPkE83U8ARGQj5MbRis7VJY8BC5V1AbB1fjdh0hupPQ== - dependencies: - "@metamask/superstruct" "^3.1.0" - "@metamask/utils" "^9.0.0" - -"@metamask/eth-sig-util@7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-7.0.0.tgz#b035a2b826018578a5d463668bb64828271376d8" - integrity sha512-8KeXZB4SKx3EfNS5ahbjUMegyGvDQYk6Nk3hmM658sXpfAQR5ZlIXBgj+9RF+ZROqsU6EuNVgKt7Fr10re60PQ== - dependencies: - "@ethereumjs/util" "^8.1.0" - "@metamask/abi-utils" "^2.0.2" - "@metamask/utils" "^8.1.0" - ethereum-cryptography "^2.1.2" - ethjs-util "^0.1.6" - tweetnacl "^1.0.3" - tweetnacl-util "^0.15.1" - -"@metamask/superstruct@^3.0.0", "@metamask/superstruct@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@metamask/superstruct/-/superstruct-3.1.0.tgz#148f786a674fba3ac885c1093ab718515bf7f648" - integrity sha512-N08M56HdOgBfRKkrgCMZvQppkZGcArEop3kixNEtVbJKm6P9Cfg0YkI6X0s1g78sNrj2fWUwvJADdZuzJgFttA== - -"@metamask/utils@^8.1.0": - version "8.5.0" - resolved "https://registry.yarnpkg.com/@metamask/utils/-/utils-8.5.0.tgz#ddd0d4012d5191809404c97648a837ea9962cceb" - integrity sha512-I6bkduevXb72TIM9q2LRO63JSsF9EXduh3sBr9oybNX2hNNpr/j1tEjXrsG0Uabm4MJ1xkGAQEMwifvKZIkyxQ== - dependencies: - "@ethereumjs/tx" "^4.2.0" - "@metamask/superstruct" "^3.0.0" - "@noble/hashes" "^1.3.1" - "@scure/base" "^1.1.3" - "@types/debug" "^4.1.7" - debug "^4.3.4" - pony-cause "^2.1.10" - semver "^7.5.4" - uuid "^9.0.1" - -"@metamask/utils@^9.0.0": - version "9.3.0" - resolved "https://registry.yarnpkg.com/@metamask/utils/-/utils-9.3.0.tgz#4726bd7f5d6a43ea8425b6d663ab9207f617c2d1" - integrity sha512-w8CVbdkDrVXFJbfBSlDfafDR6BAkpDmv1bC1UJVCoVny5tW2RKAdn9i68Xf7asYT4TnUhl/hN4zfUiKQq9II4g== - dependencies: - "@ethereumjs/tx" "^4.2.0" - "@metamask/superstruct" "^3.1.0" - "@noble/hashes" "^1.3.1" - "@scure/base" "^1.1.3" - "@types/debug" "^4.1.7" - debug "^4.3.4" - pony-cause "^2.1.10" - semver "^7.5.4" - uuid "^9.0.1" - -"@noble/curves@1.4.2", "@noble/curves@~1.4.0": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.4.2.tgz#40309198c76ed71bc6dbf7ba24e81ceb4d0d1fe9" - integrity sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw== +"@noble/curves@1.8.1", "@noble/curves@^1.6.0", "@noble/curves@~1.8.1": + version "1.8.1" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.8.1.tgz#19bc3970e205c99e4bdb1c64a4785706bce497ff" + integrity sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ== dependencies: - "@noble/hashes" "1.4.0" + "@noble/hashes" "1.7.1" -"@noble/hashes@1.4.0", "@noble/hashes@~1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" - integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== - -"@noble/hashes@^1.3.1": +"@noble/hashes@1.7.1", "@noble/hashes@^1.5.0", "@noble/hashes@~1.7.1": version "1.7.1" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.1.tgz#5738f6d765710921e7a751e00c20ae091ed8db0f" integrity sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ== @@ -1098,32 +607,27 @@ resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== -"@scure/base@^1.1.3": +"@scure/base@~1.2.2", "@scure/base@~1.2.4": version "1.2.4" resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.2.4.tgz#002eb571a35d69bdb4c214d0995dff76a8dcd2a9" integrity sha512-5Yy9czTO47mqz+/J8GM6GIId4umdCk1wc1q8rKERQulIoc8VP9pzDcghv10Tl2E7R96ZUx/PhND3ESYUQX8NuQ== -"@scure/base@~1.1.6": - version "1.1.9" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.9.tgz#e5e142fbbfe251091f9c5f1dd4c834ac04c3dbd1" - integrity sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg== - -"@scure/bip32@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.4.0.tgz#4e1f1e196abedcef395b33b9674a042524e20d67" - integrity sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg== +"@scure/bip32@1.6.2", "@scure/bip32@^1.5.0": + version "1.6.2" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.6.2.tgz#093caa94961619927659ed0e711a6e4bf35bffd0" + integrity sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw== dependencies: - "@noble/curves" "~1.4.0" - "@noble/hashes" "~1.4.0" - "@scure/base" "~1.1.6" + "@noble/curves" "~1.8.1" + "@noble/hashes" "~1.7.1" + "@scure/base" "~1.2.2" -"@scure/bip39@1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.3.0.tgz#0f258c16823ddd00739461ac31398b4e7d6a18c3" - integrity sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ== +"@scure/bip39@1.5.4", "@scure/bip39@^1.4.0": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.5.4.tgz#07fd920423aa671be4540d59bdd344cc1461db51" + integrity sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA== dependencies: - "@noble/hashes" "~1.4.0" - "@scure/base" "~1.1.6" + "@noble/hashes" "~1.7.1" + "@scure/base" "~1.2.4" "@sinclair/typebox@^0.27.8": version "0.27.8" @@ -1177,13 +681,6 @@ dependencies: "@babel/types" "^7.20.7" -"@types/debug@^4.1.7": - version "4.1.12" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" - integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== - dependencies: - "@types/ms" "*" - "@types/graceful-fs@^4.1.3": version "4.1.9" resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" @@ -1228,11 +725,6 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/ms@*": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78" - integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== - "@types/node@*": version "22.13.4" resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.4.tgz#3fe454d77cd4a2d73c214008b3e331bfaaf5038a" @@ -1485,17 +977,10 @@ resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== -"@uniswap/sdk-core@^3.0.0": - version "3.2.6" - resolved "https://registry.yarnpkg.com/@uniswap/sdk-core/-/sdk-core-3.2.6.tgz#1a652516fab0c6bc1420c2226648da967a10f52a" - integrity sha512-MvH/3G0W0sM2g7XjaUy9qU7IabxL/KQp/ucU0AQGpVxiTaAhmVRtsjkkv9UDyzpIXVrmevl4kRgV7KKE29UuXA== - dependencies: - "@ethersproject/address" "^5.0.2" - big.js "^5.2.2" - decimal.js-light "^2.5.0" - jsbi "^3.1.4" - tiny-invariant "^1.1.0" - toformat "^2.0.0" +abitype@1.0.8, abitype@^1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.8.tgz#3554f28b2e9d6e9f35eb59878193eabd1b9f46ba" + integrity sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg== acorn-jsx@^5.3.2: version "5.3.2" @@ -1507,11 +992,6 @@ acorn@^8.9.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== -aes-js@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" - integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== - ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -1709,26 +1189,6 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -bech32@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" - integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -bn.js@^4.11.9: - version "4.12.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.1.tgz#215741fe3c9dba2d7e12c001d0cfdbae43975ba7" - integrity sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg== - -bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1751,11 +1211,6 @@ braces@^3.0.3: dependencies: fill-range "^7.1.1" -brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== - browserslist@^4.24.0: version "4.24.4" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b" @@ -1895,11 +1350,6 @@ convert-source-map@^2.0.0: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -crc-32@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" - integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== - create-jest@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" @@ -1970,16 +1420,6 @@ debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: dependencies: ms "^2.1.3" -decimal.js-light@^2.5.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/decimal.js-light/-/decimal.js-light-2.5.1.tgz#134fd32508f19e208f4fb2f8dac0d2626a867934" - integrity sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg== - -decimal.js@^10.5.0: - version "10.5.0" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.5.0.tgz#0f371c7cf6c4898ce0afb09836db73cd82010f22" - integrity sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw== - dedent@^1.0.0: version "1.5.3" resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" @@ -2070,19 +1510,6 @@ electron-to-chromium@^1.5.73: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.102.tgz#81a452ace8e2c3fa7fba904ea4fed25052c53d3f" integrity sha512-eHhqaja8tE/FNpIiBrvBjFV/SSKpyWHLvxuR9dPTdo+3V9ppdLmFB7ZZQ98qNovcngPLYIz0oOBF9P0FfZef5Q== -elliptic@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - 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" - emittery@^0.13.1: version "0.13.1" resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" @@ -2472,23 +1899,10 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz#58f2810f8e020aecb97de8c8c76147600b0b8ccf" - integrity sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg== - dependencies: - "@noble/curves" "1.4.2" - "@noble/hashes" "1.4.0" - "@scure/bip32" "1.4.0" - "@scure/bip39" "1.3.0" - -ethjs-util@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" - integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== - dependencies: - is-hex-prefixed "1.0.0" - strip-hex-prefix "1.0.0" +eventemitter3@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== execa@^5.0.0: version "5.1.1" @@ -2848,14 +2262,6 @@ has@^1.0.3: resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6" integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== -hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" @@ -2863,15 +2269,6 @@ hasown@^2.0.2: dependencies: function-bind "^1.1.2" -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - html-escaper@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" @@ -2916,7 +2313,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3, inherits@^2.0.4: +inherits@2: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -3038,11 +2435,6 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: dependencies: is-extglob "^2.1.1" -is-hex-prefixed@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" - integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== - is-map@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" @@ -3147,6 +2539,11 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== +isows@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.6.tgz#0da29d706fa51551c663c627ace42769850f86e7" + integrity sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw== + istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" @@ -3568,11 +2965,6 @@ jest@^29.7.0: import-local "^3.0.2" jest-cli "^29.7.0" -js-sha3@0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" - integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -3593,11 +2985,6 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -jsbi@^3.1.4: - version "3.2.5" - resolved "https://registry.yarnpkg.com/jsbi/-/jsbi-3.2.5.tgz#b37bb90e0e5c2814c1c2a1bcd8c729888a2e37d6" - integrity sha512-aBE4n43IPvjaddScbvWRA2YlTzKEynHzu7MqOyTipdHucf/VxS63ViCjxYRg86M8Rxwbt/GfzHl1kKERkt45fQ== - jsbi@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/jsbi/-/jsbi-4.3.0.tgz#b54ee074fb6fcbc00619559305c8f7e912b04741" @@ -3760,11 +3147,6 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micro-ftch@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" - integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== - micromatch@^4.0.4, micromatch@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" @@ -3778,16 +3160,6 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== - minimatch@9.0.3: version "9.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" @@ -3956,6 +3328,19 @@ own-keys@^1.0.1: object-keys "^1.1.1" safe-push-apply "^1.0.0" +ox@0.6.9: + version "0.6.9" + resolved "https://registry.yarnpkg.com/ox/-/ox-0.6.9.tgz#da1ee04fa10de30c8d04c15bfb80fe58b1f554bd" + integrity sha512-wi5ShvzE4eOcTwQVsIPdFr+8ycyX+5le/96iAJutaZAvCes1J0+RvpEPg5QDPDiaR0XQQAvZVl7AwqQcINuUug== + dependencies: + "@adraffy/ens-normalize" "^1.10.1" + "@noble/curves" "^1.6.0" + "@noble/hashes" "^1.5.0" + "@scure/bip32" "^1.5.0" + "@scure/bip39" "^1.4.0" + abitype "^1.0.6" + eventemitter3 "5.0.1" + p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" @@ -4072,11 +3457,6 @@ pkg-up@^3.1.0: dependencies: find-up "^3.0.0" -pony-cause@^2.1.10: - version "2.1.11" - resolved "https://registry.yarnpkg.com/pony-cause/-/pony-cause-2.1.11.tgz#d69a20aaccdb3bdb8f74dd59e5c68d8e6772e4bd" - integrity sha512-M7LhCsdNbNgiLYiP4WjsfLUuFmCfnjdF6jKe2R9NKl4WFN+HZPGHJZ9lnLP7f9ZnKe3U9nuWD0szirmj+migUg== - possible-typed-array-names@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" @@ -4271,11 +3651,6 @@ safe-regex-test@^1.1.0: es-errors "^1.3.0" is-regex "^1.2.1" -scrypt-js@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" - integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== - semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" @@ -4504,13 +3879,6 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-hex-prefix@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" - integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== - dependencies: - is-hex-prefixed "1.0.0" - strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -4562,7 +3930,7 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -tiny-invariant@^1.1.0, tiny-invariant@^1.3.3: +tiny-invariant@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== @@ -4579,11 +3947,6 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -toformat@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/toformat/-/toformat-2.0.0.tgz#7a043fd2dfbe9021a4e36e508835ba32056739d8" - integrity sha512-03SWBVop6nU8bpyZCx7SodpYznbZF5R4ljwNLBcTQzKOD9xuihRo/psX58llS1BMFhhAI08H3luot5GoXJz2pQ== - ts-api-utils@^1.0.1: version "1.4.3" resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064" @@ -4631,16 +3994,6 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" -tweetnacl-util@^0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" - integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== - -tweetnacl@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" - integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -4708,10 +4061,10 @@ typed-array-length@^1.0.7: possible-typed-array-names "^1.0.0" reflect.getprototypeof "^1.0.6" -typescript@^4.4.4: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== +typescript@^5.8.2: + version "5.8.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.2.tgz#8170b3702f74b79db2e5a96207c15e65807999e4" + integrity sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ== unbox-primitive@^1.1.0: version "1.1.0" @@ -4743,11 +4096,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -uuid@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" - integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== - v8-to-istanbul@^9.0.1: version "9.3.0" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175" @@ -4757,6 +4105,20 @@ v8-to-istanbul@^9.0.1: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^2.0.0" +viem@^2: + version "2.24.1" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.24.1.tgz#5fe8a78f535aa7b585bef8abd6addb3aa674a4d1" + integrity sha512-xptFlc081SIPz+ZNDeb0XS/Nn5PU28onq+im+UxEAPCXTIuL1kfw1GTnV8NhbUNoEONnrwcZNqoI0AT0ADF5XQ== + dependencies: + "@noble/curves" "1.8.1" + "@noble/hashes" "1.7.1" + "@scure/bip32" "1.6.2" + "@scure/bip39" "1.5.4" + abitype "1.0.8" + isows "1.0.6" + ox "0.6.9" + ws "8.18.1" + walker@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" @@ -4851,10 +4213,10 @@ write-file-atomic@^4.0.2: imurmurhash "^0.1.4" signal-exit "^3.0.7" -ws@7.4.6: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== +ws@8.18.1: + version "8.18.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.1.tgz#ea131d3784e1dfdff91adb0a4a116b127515e3cb" + integrity sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w== y18n@^5.0.5: version "5.0.8"