liquid-sdk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/client.ts","../src/constants.ts","../src/abis/LiquidFactory.ts","../src/abis/LiquidFeeLocker.ts","../src/abis/LiquidHookDynamicFeeV2.ts","../src/abis/LiquidVault.ts","../src/abis/LiquidSniperAuctionV2.ts","../src/abis/LiquidSniperUtilV2.ts","../src/abis/LiquidAirdropV2.ts","../src/abis/LiquidPoolExtensionAllowlist.ts","../src/abis/LiquidMevBlockDelay.ts","../src/abis/LiquidLpLocker.ts","../src/abis/ERC20.ts"],"sourcesContent":["export { LiquidSDK } from \"./client\";\nexport { ADDRESSES, EXTERNAL, FEE, TOKEN, DEFAULT_CHAIN, DEFAULT_CHAIN_ID } from \"./constants\";\nexport {\n LiquidFactoryAbi,\n LiquidFeeLockerAbi,\n LiquidHookDynamicFeeV2Abi,\n LiquidVaultAbi,\n LiquidSniperAuctionV2Abi,\n LiquidSniperUtilV2Abi,\n LiquidAirdropV2Abi,\n LiquidPoolExtensionAllowlistAbi,\n LiquidMevBlockDelayAbi,\n LiquidLpLockerAbi,\n ERC20Abi,\n} from \"./abis\";\nexport type {\n AirdropInfo,\n DeployTokenParams,\n DeployTokenResult,\n DeploymentConfig,\n DeploymentInfo,\n DevBuyParams,\n ExtensionConfig,\n LiquidSDKConfig,\n LockerConfig,\n MevModuleConfig,\n PoolConfig,\n PoolDynamicConfigVars,\n PoolDynamicFeeVars,\n PoolKey,\n SniperAuctionFeeConfig,\n SniperAuctionState,\n TokenConfig,\n TokenCreatedEvent,\n TokenRewardInfo,\n VaultAllocation,\n} from \"./types\";\n","import {\n type Address,\n type Hash,\n type Hex,\n type PublicClient,\n type WalletClient,\n decodeEventLog,\n encodeAbiParameters,\n encodePacked,\n keccak256,\n getAddress,\n zeroAddress,\n} from \"viem\";\nimport { base } from \"viem/chains\";\nimport { ADDRESSES, EXTERNAL, DEFAULT_CHAIN_ID } from \"./constants\";\nimport { LiquidFactoryAbi } from \"./abis/LiquidFactory\";\nimport { LiquidFeeLockerAbi } from \"./abis/LiquidFeeLocker\";\nimport { LiquidHookDynamicFeeV2Abi } from \"./abis/LiquidHookDynamicFeeV2\";\nimport { LiquidVaultAbi } from \"./abis/LiquidVault\";\nimport { LiquidSniperAuctionV2Abi } from \"./abis/LiquidSniperAuctionV2\";\nimport { LiquidSniperUtilV2Abi } from \"./abis/LiquidSniperUtilV2\";\nimport { LiquidAirdropV2Abi } from \"./abis/LiquidAirdropV2\";\nimport { LiquidPoolExtensionAllowlistAbi } from \"./abis/LiquidPoolExtensionAllowlist\";\nimport { LiquidMevBlockDelayAbi } from \"./abis/LiquidMevBlockDelay\";\nimport { LiquidLpLockerAbi } from \"./abis/LiquidLpLocker\";\nimport { ERC20Abi } from \"./abis/ERC20\";\nimport type {\n AirdropInfo,\n DeployTokenParams,\n DeployTokenResult,\n DevBuyParams,\n DeploymentInfo,\n DeploymentConfig,\n ExtensionConfig,\n LiquidSDKConfig,\n PoolDynamicConfigVars,\n PoolDynamicFeeVars,\n SniperAuctionFeeConfig,\n SniperAuctionState,\n TokenCreatedEvent,\n TokenRewardInfo,\n VaultAllocation,\n} from \"./types\";\n\nexport class LiquidSDK {\n public readonly publicClient: PublicClient;\n public readonly walletClient?: WalletClient;\n\n constructor(config: LiquidSDKConfig) {\n this.publicClient = config.publicClient;\n this.walletClient = config.walletClient;\n }\n\n // ── Dev Buy Helper ───────────────────────────────────────────────\n\n /**\n * Build an ExtensionConfig for a dev buy (buy tokens with ETH at launch).\n * The paired token must be WETH for simple dev buys.\n */\n buildDevBuyExtension(devBuy: DevBuyParams): ExtensionConfig {\n // Encode Univ4EthDevBuyExtensionData struct:\n // { PoolKey pairedTokenPoolKey, uint128 pairedTokenAmountOutMinimum, address recipient }\n // For WETH-paired tokens, pairedTokenPoolKey is zeroed out (not used)\n const extensionData = encodeAbiParameters(\n [\n {\n type: \"tuple\",\n components: [\n {\n type: \"tuple\",\n name: \"pairedTokenPoolKey\",\n components: [\n { type: \"address\", name: \"currency0\" },\n { type: \"address\", name: \"currency1\" },\n { type: \"uint24\", name: \"fee\" },\n { type: \"int24\", name: \"tickSpacing\" },\n { type: \"address\", name: \"hooks\" },\n ],\n },\n { type: \"uint128\", name: \"pairedTokenAmountOutMinimum\" },\n { type: \"address\", name: \"recipient\" },\n ],\n },\n ],\n [\n {\n pairedTokenPoolKey: {\n currency0: zeroAddress,\n currency1: zeroAddress,\n fee: 0,\n tickSpacing: 0,\n hooks: zeroAddress,\n },\n pairedTokenAmountOutMinimum: 0n,\n recipient: devBuy.recipient,\n },\n ]\n );\n\n return {\n extension: ADDRESSES.UNIV4_ETH_DEV_BUY,\n msgValue: devBuy.ethAmount,\n extensionBps: 0,\n extensionData,\n };\n }\n\n // ── Token Deployment ─────────────────────────────────────────────\n\n async deployToken(params: DeployTokenParams): Promise<DeployTokenResult> {\n if (!this.walletClient?.account) {\n throw new Error(\"walletClient with account required for deployToken\");\n }\n\n const account = this.walletClient.account.address;\n\n const deploymentConfig: DeploymentConfig = {\n tokenConfig: {\n tokenAdmin: params.tokenAdmin ?? account,\n name: params.name,\n symbol: params.symbol,\n salt:\n params.salt ??\n keccak256(\n encodePacked(\n [\"string\", \"string\", \"uint256\"],\n [params.name, params.symbol, BigInt(Date.now())]\n )\n ),\n image: params.image ?? \"\",\n metadata: params.metadata ?? \"\",\n context: params.context ?? \"\",\n originatingChainId: BigInt(DEFAULT_CHAIN_ID),\n },\n poolConfig: {\n hook: params.hook ?? ADDRESSES.HOOK_DYNAMIC_FEE_V2,\n pairedToken: params.pairedToken ?? EXTERNAL.WETH,\n tickIfToken0IsLiquid: params.tickIfToken0IsLiquid ?? -198720,\n tickSpacing: params.tickSpacing ?? 60,\n poolData: params.poolData ?? \"0x\",\n },\n lockerConfig: {\n locker: params.locker ?? ADDRESSES.LP_LOCKER,\n rewardAdmins: params.rewardAdmins ?? [account],\n rewardRecipients: params.rewardRecipients ?? [account],\n rewardBps: params.rewardBps ?? [10000],\n tickLower: params.tickLower ?? [-887220],\n tickUpper: params.tickUpper ?? [887220],\n positionBps: params.positionBps ?? [10000],\n lockerData: params.lockerData ?? \"0x\",\n },\n mevModuleConfig: {\n mevModule: params.mevModule ?? ADDRESSES.MEV_BLOCK_DELAY,\n mevModuleData: params.mevModuleData ?? \"0x\",\n },\n extensionConfigs: [...(params.extensions ?? [])],\n };\n\n // Append dev buy extension if specified\n if (params.devBuy) {\n deploymentConfig.extensionConfigs.push(\n this.buildDevBuyExtension(params.devBuy)\n );\n }\n\n // Calculate total msg.value from extensions\n const msgValue = deploymentConfig.extensionConfigs.reduce(\n (sum, ext) => sum + ext.msgValue,\n 0n\n );\n\n const txHash = await this.walletClient.writeContract({\n address: ADDRESSES.FACTORY,\n abi: LiquidFactoryAbi,\n functionName: \"deployToken\",\n args: [deploymentConfig],\n value: msgValue,\n chain: base,\n account: this.walletClient.account,\n });\n\n const receipt = await this.publicClient.waitForTransactionReceipt({\n hash: txHash,\n });\n\n // Parse TokenCreated event from logs\n const tokenCreatedLog = receipt.logs.find((log) => {\n try {\n const decoded = decodeEventLog({\n abi: LiquidFactoryAbi,\n data: log.data,\n topics: log.topics,\n });\n return decoded.eventName === \"TokenCreated\";\n } catch {\n return false;\n }\n });\n\n if (!tokenCreatedLog) {\n throw new Error(\"TokenCreated event not found in transaction receipt\");\n }\n\n const decoded = decodeEventLog({\n abi: LiquidFactoryAbi,\n data: tokenCreatedLog.data,\n topics: tokenCreatedLog.topics,\n });\n\n const args = decoded.args as any;\n\n return {\n tokenAddress: getAddress(args.tokenAddress),\n txHash,\n event: {\n msgSender: args.msgSender,\n tokenAddress: args.tokenAddress,\n tokenAdmin: args.tokenAdmin,\n tokenImage: args.tokenImage,\n tokenName: args.tokenName,\n tokenSymbol: args.tokenSymbol,\n tokenMetadata: args.tokenMetadata,\n tokenContext: args.tokenContext,\n startingTick: args.startingTick,\n poolHook: args.poolHook,\n poolId: args.poolId,\n pairedToken: args.pairedToken,\n locker: args.locker,\n mevModule: args.mevModule,\n extensionsSupply: args.extensionsSupply,\n extensions: args.extensions,\n },\n };\n }\n\n // ── Token Info ────────────────────────────────────────────────────\n\n async getDeploymentInfo(tokenAddress: Address): Promise<DeploymentInfo> {\n const result = await this.publicClient.readContract({\n address: ADDRESSES.FACTORY,\n abi: LiquidFactoryAbi,\n functionName: \"tokenDeploymentInfo\",\n args: [tokenAddress],\n });\n\n const data = result as any;\n return {\n token: data.token,\n hook: data.hook,\n locker: data.locker,\n extensions: data.extensions,\n };\n }\n\n async getTokenInfo(tokenAddress: Address) {\n const [name, symbol, decimals, totalSupply] = await Promise.all([\n this.publicClient.readContract({\n address: tokenAddress,\n abi: ERC20Abi,\n functionName: \"name\",\n }),\n this.publicClient.readContract({\n address: tokenAddress,\n abi: ERC20Abi,\n functionName: \"symbol\",\n }),\n this.publicClient.readContract({\n address: tokenAddress,\n abi: ERC20Abi,\n functionName: \"decimals\",\n }),\n this.publicClient.readContract({\n address: tokenAddress,\n abi: ERC20Abi,\n functionName: \"totalSupply\",\n }),\n ]);\n\n const deployment = await this.getDeploymentInfo(tokenAddress);\n\n return {\n address: tokenAddress,\n name: name as string,\n symbol: symbol as string,\n decimals: decimals as number,\n totalSupply: totalSupply as bigint,\n deployment,\n };\n }\n\n // ── Pool Info ─────────────────────────────────────────────────────\n\n async getPoolConfig(\n poolId: Hex,\n hookAddress?: Address\n ): Promise<PoolDynamicConfigVars> {\n const hook = hookAddress ?? ADDRESSES.HOOK_DYNAMIC_FEE_V2;\n const result = await this.publicClient.readContract({\n address: hook,\n abi: LiquidHookDynamicFeeV2Abi,\n functionName: \"poolConfigVars\",\n args: [poolId],\n });\n\n const data = result as any;\n return {\n baseFee: data.baseFee,\n maxLpFee: data.maxLpFee,\n referenceTickFilterPeriod: data.referenceTickFilterPeriod,\n resetPeriod: data.resetPeriod,\n resetTickFilter: data.resetTickFilter,\n feeControlNumerator: data.feeControlNumerator,\n decayFilterBps: data.decayFilterBps,\n };\n }\n\n async getPoolFeeState(\n poolId: Hex,\n hookAddress?: Address\n ): Promise<PoolDynamicFeeVars> {\n const hook = hookAddress ?? ADDRESSES.HOOK_DYNAMIC_FEE_V2;\n const result = await this.publicClient.readContract({\n address: hook,\n abi: LiquidHookDynamicFeeV2Abi,\n functionName: \"poolFeeVars\",\n args: [poolId],\n });\n\n const data = result as any;\n return {\n referenceTick: data.referenceTick,\n resetTick: data.resetTick,\n resetTickTimestamp: data.resetTickTimestamp,\n lastSwapTimestamp: data.lastSwapTimestamp,\n appliedVR: data.appliedVR,\n prevVA: data.prevVA,\n };\n }\n\n async getPoolCreationTimestamp(\n poolId: Hex,\n hookAddress?: Address\n ): Promise<bigint> {\n const hook = hookAddress ?? ADDRESSES.HOOK_DYNAMIC_FEE_V2;\n return (await this.publicClient.readContract({\n address: hook,\n abi: LiquidHookDynamicFeeV2Abi,\n functionName: \"poolCreationTimestamp\",\n args: [poolId],\n })) as bigint;\n }\n\n async isLiquidToken0(\n poolId: Hex,\n hookAddress?: Address\n ): Promise<boolean> {\n const hook = hookAddress ?? ADDRESSES.HOOK_DYNAMIC_FEE_V2;\n return (await this.publicClient.readContract({\n address: hook,\n abi: LiquidHookDynamicFeeV2Abi,\n functionName: \"liquidIsToken0\",\n args: [poolId],\n })) as boolean;\n }\n\n // ── Fee Claims ────────────────────────────────────────────────────\n\n async getAvailableFees(\n feeOwner: Address,\n tokenAddress: Address\n ): Promise<bigint> {\n return (await this.publicClient.readContract({\n address: ADDRESSES.FEE_LOCKER,\n abi: LiquidFeeLockerAbi,\n functionName: \"availableFees\",\n args: [feeOwner, tokenAddress],\n })) as bigint;\n }\n\n async getFeesToClaim(\n feeOwner: Address,\n tokenAddress: Address\n ): Promise<bigint> {\n return (await this.publicClient.readContract({\n address: ADDRESSES.FEE_LOCKER,\n abi: LiquidFeeLockerAbi,\n functionName: \"feesToClaim\",\n args: [feeOwner, tokenAddress],\n })) as bigint;\n }\n\n async claimFees(feeOwner: Address, tokenAddress: Address): Promise<Hash> {\n if (!this.walletClient?.account) {\n throw new Error(\"walletClient with account required for claimFees\");\n }\n\n return this.walletClient.writeContract({\n address: ADDRESSES.FEE_LOCKER,\n abi: LiquidFeeLockerAbi,\n functionName: \"claim\",\n args: [feeOwner, tokenAddress],\n chain: base,\n account: this.walletClient.account,\n });\n }\n\n // ── Vault ─────────────────────────────────────────────────────────\n\n async getVaultAllocation(\n tokenAddress: Address\n ): Promise<VaultAllocation> {\n const result = await this.publicClient.readContract({\n address: ADDRESSES.VAULT,\n abi: LiquidVaultAbi,\n functionName: \"allocation\",\n args: [tokenAddress],\n });\n\n const data = result as any;\n return {\n token: data[0] ?? data.token,\n amountTotal: data[1] ?? data.amountTotal,\n amountClaimed: data[2] ?? data.amountClaimed,\n lockupEndTime: data[3] ?? data.lockupEndTime,\n vestingEndTime: data[4] ?? data.vestingEndTime,\n admin: data[5] ?? data.admin,\n };\n }\n\n async getVaultClaimable(tokenAddress: Address): Promise<bigint> {\n return (await this.publicClient.readContract({\n address: ADDRESSES.VAULT,\n abi: LiquidVaultAbi,\n functionName: \"amountAvailableToClaim\",\n args: [tokenAddress],\n })) as bigint;\n }\n\n async claimVault(tokenAddress: Address): Promise<Hash> {\n if (!this.walletClient?.account) {\n throw new Error(\"walletClient with account required for claimVault\");\n }\n\n return this.walletClient.writeContract({\n address: ADDRESSES.VAULT,\n abi: LiquidVaultAbi,\n functionName: \"claim\",\n args: [tokenAddress],\n chain: base,\n account: this.walletClient.account,\n });\n }\n\n // ── Factory Status ────────────────────────────────────────────────\n\n async isFactoryDeprecated(): Promise<boolean> {\n return (await this.publicClient.readContract({\n address: ADDRESSES.FACTORY,\n abi: LiquidFactoryAbi,\n functionName: \"deprecated\",\n })) as boolean;\n }\n\n async isLockerEnabled(\n locker: Address,\n hook: Address\n ): Promise<boolean> {\n return (await this.publicClient.readContract({\n address: ADDRESSES.FACTORY,\n abi: LiquidFactoryAbi,\n functionName: \"enabledLockers\",\n args: [locker, hook],\n })) as boolean;\n }\n\n // ── Sniper Auction ─────────────────────────────────────────────────\n\n async getAuctionState(poolId: Hex): Promise<SniperAuctionState> {\n const [nextAuctionBlock, round, gasPeg, currentFee] = await Promise.all([\n this.publicClient.readContract({\n address: ADDRESSES.SNIPER_AUCTION_V2,\n abi: LiquidSniperAuctionV2Abi,\n functionName: \"nextAuctionBlock\",\n args: [poolId],\n }),\n this.publicClient.readContract({\n address: ADDRESSES.SNIPER_AUCTION_V2,\n abi: LiquidSniperAuctionV2Abi,\n functionName: \"round\",\n args: [poolId],\n }),\n this.publicClient.readContract({\n address: ADDRESSES.SNIPER_AUCTION_V2,\n abi: LiquidSniperAuctionV2Abi,\n functionName: \"gasPeg\",\n args: [poolId],\n }),\n this.publicClient.readContract({\n address: ADDRESSES.SNIPER_AUCTION_V2,\n abi: LiquidSniperAuctionV2Abi,\n functionName: \"getFee\",\n args: [poolId],\n }),\n ]);\n\n return {\n nextAuctionBlock: nextAuctionBlock as bigint,\n round: round as bigint,\n gasPeg: gasPeg as bigint,\n currentFee: currentFee as number,\n };\n }\n\n async getAuctionFeeConfig(poolId: Hex): Promise<SniperAuctionFeeConfig> {\n const result = await this.publicClient.readContract({\n address: ADDRESSES.SNIPER_AUCTION_V2,\n abi: LiquidSniperAuctionV2Abi,\n functionName: \"feeConfig\",\n args: [poolId],\n });\n\n const data = result as any;\n return {\n startingFee: Array.isArray(data) ? data[0] : data.startingFee,\n endingFee: Array.isArray(data) ? data[1] : data.endingFee,\n secondsToDecay: Array.isArray(data) ? data[2] : data.secondsToDecay,\n };\n }\n\n async getAuctionDecayStartTime(poolId: Hex): Promise<bigint> {\n return (await this.publicClient.readContract({\n address: ADDRESSES.SNIPER_AUCTION_V2,\n abi: LiquidSniperAuctionV2Abi,\n functionName: \"poolDecayStartTime\",\n args: [poolId],\n })) as bigint;\n }\n\n async getAuctionMaxRounds(): Promise<bigint> {\n return (await this.publicClient.readContract({\n address: ADDRESSES.SNIPER_AUCTION_V2,\n abi: LiquidSniperAuctionV2Abi,\n functionName: \"maxRounds\",\n })) as bigint;\n }\n\n async getAuctionGasPriceForBid(\n auctionGasPeg: bigint,\n desiredBidAmount: bigint\n ): Promise<bigint> {\n return (await this.publicClient.readContract({\n address: ADDRESSES.SNIPER_UTIL_V2,\n abi: LiquidSniperUtilV2Abi,\n functionName: \"getTxGasPriceForBidAmount\",\n args: [auctionGasPeg, desiredBidAmount],\n })) as bigint;\n }\n\n // ── Airdrop ─────────────────────────────────────────────────────────\n\n async getAirdropInfo(tokenAddress: Address): Promise<AirdropInfo> {\n const result = await this.publicClient.readContract({\n address: ADDRESSES.AIRDROP_V2,\n abi: LiquidAirdropV2Abi,\n functionName: \"airdrops\",\n args: [tokenAddress],\n });\n\n const data = result as any;\n return {\n admin: Array.isArray(data) ? data[0] : data.admin,\n merkleRoot: Array.isArray(data) ? data[1] : data.merkleRoot,\n totalSupply: Array.isArray(data) ? data[2] : data.totalSupply,\n totalClaimed: Array.isArray(data) ? data[3] : data.totalClaimed,\n lockupEndTime: Array.isArray(data) ? data[4] : data.lockupEndTime,\n vestingEndTime: Array.isArray(data) ? data[5] : data.vestingEndTime,\n adminClaimTime: Array.isArray(data) ? data[6] : data.adminClaimTime,\n adminClaimed: Array.isArray(data) ? data[7] : data.adminClaimed,\n };\n }\n\n async getAirdropClaimable(\n tokenAddress: Address,\n recipient: Address,\n allocatedAmount: bigint\n ): Promise<bigint> {\n return (await this.publicClient.readContract({\n address: ADDRESSES.AIRDROP_V2,\n abi: LiquidAirdropV2Abi,\n functionName: \"amountAvailableToClaim\",\n args: [tokenAddress, recipient, allocatedAmount],\n })) as bigint;\n }\n\n async claimAirdrop(\n tokenAddress: Address,\n recipient: Address,\n allocatedAmount: bigint,\n proof: Hex[]\n ): Promise<Hash> {\n if (!this.walletClient?.account) {\n throw new Error(\"walletClient with account required for claimAirdrop\");\n }\n\n return this.walletClient.writeContract({\n address: ADDRESSES.AIRDROP_V2,\n abi: LiquidAirdropV2Abi,\n functionName: \"claim\",\n args: [tokenAddress, recipient, allocatedAmount, proof],\n chain: base,\n account: this.walletClient.account,\n });\n }\n\n // ── LP Locker ───────────────────────────────────────────────────────\n\n async getTokenRewards(\n tokenAddress: Address,\n lockerAddress?: Address\n ): Promise<TokenRewardInfo> {\n const locker = lockerAddress ?? ADDRESSES.LP_LOCKER;\n const result = await this.publicClient.readContract({\n address: locker,\n abi: LiquidLpLockerAbi,\n functionName: \"tokenRewards\",\n args: [tokenAddress],\n });\n\n const data = result as any;\n return {\n token: data.token,\n poolKey: data.poolKey,\n positionId: data.positionId,\n numPositions: data.numPositions,\n rewardBps: [...data.rewardBps],\n rewardAdmins: [...data.rewardAdmins],\n rewardRecipients: [...data.rewardRecipients],\n };\n }\n\n async collectRewards(\n tokenAddress: Address,\n lockerAddress?: Address\n ): Promise<Hash> {\n if (!this.walletClient?.account) {\n throw new Error(\"walletClient with account required for collectRewards\");\n }\n\n const locker = lockerAddress ?? ADDRESSES.LP_LOCKER;\n return this.walletClient.writeContract({\n address: locker,\n abi: LiquidLpLockerAbi,\n functionName: \"collectRewards\",\n args: [tokenAddress],\n chain: base,\n account: this.walletClient.account,\n });\n }\n\n async collectRewardsWithoutUnlock(\n tokenAddress: Address,\n lockerAddress?: Address\n ): Promise<Hash> {\n if (!this.walletClient?.account) {\n throw new Error(\n \"walletClient with account required for collectRewardsWithoutUnlock\"\n );\n }\n\n const locker = lockerAddress ?? ADDRESSES.LP_LOCKER;\n return this.walletClient.writeContract({\n address: locker,\n abi: LiquidLpLockerAbi,\n functionName: \"collectRewardsWithoutUnlock\",\n args: [tokenAddress],\n chain: base,\n account: this.walletClient.account,\n });\n }\n\n async updateRewardRecipient(\n tokenAddress: Address,\n rewardIndex: bigint,\n newRecipient: Address,\n lockerAddress?: Address\n ): Promise<Hash> {\n if (!this.walletClient?.account) {\n throw new Error(\n \"walletClient with account required for updateRewardRecipient\"\n );\n }\n\n const locker = lockerAddress ?? ADDRESSES.LP_LOCKER;\n return this.walletClient.writeContract({\n address: locker,\n abi: LiquidLpLockerAbi,\n functionName: \"updateRewardRecipient\",\n args: [tokenAddress, rewardIndex, newRecipient],\n chain: base,\n account: this.walletClient.account,\n });\n }\n\n // ── Pool Extension Allowlist ────────────────────────────────────────\n\n async isExtensionEnabled(extensionAddress: Address): Promise<boolean> {\n return (await this.publicClient.readContract({\n address: ADDRESSES.POOL_EXTENSION_ALLOWLIST,\n abi: LiquidPoolExtensionAllowlistAbi,\n functionName: \"enabledExtensions\",\n args: [extensionAddress],\n })) as boolean;\n }\n\n // ── MEV Block Delay ─────────────────────────────────────────────────\n\n async getMevBlockDelay(): Promise<bigint> {\n return (await this.publicClient.readContract({\n address: ADDRESSES.MEV_BLOCK_DELAY,\n abi: LiquidMevBlockDelayAbi,\n functionName: \"blockDelay\",\n })) as bigint;\n }\n\n async getPoolUnlockTime(poolId: Hex): Promise<bigint> {\n return (await this.publicClient.readContract({\n address: ADDRESSES.MEV_BLOCK_DELAY,\n abi: LiquidMevBlockDelayAbi,\n functionName: \"poolUnlockTime\",\n args: [poolId],\n })) as bigint;\n }\n}\n","import { type Address } from \"viem\";\nimport { base } from \"viem/chains\";\n\n// ── Production addresses (Base mainnet) ──────────────────────────────\n\nexport const ADDRESSES = {\n FACTORY: \"0x0000003482fe299E72d4908368044A8A173BE576\" as Address,\n POOL_EXTENSION_ALLOWLIST:\n \"0x000003Afb1b070F037D2871eE0A6b8c8f53F7B77\" as Address,\n FEE_LOCKER: \"0x000008B9242b7e4432f6c4b1EeAD93562f9Cc94d\" as Address,\n LP_LOCKER: \"0x00000548732DfA56Be1257cE44D0CFc3B46dDb2A\" as Address,\n LP_LOCKER_FEE_CONVERSION:\n \"0x00000547518784420CEeF761fb18D884bb908102\" as Address,\n VAULT: \"0x000001c5263F4d64CdC343cDA9C8bF961CF8376c\" as Address,\n HOOK_DYNAMIC_FEE_V2:\n \"0x2A2F73CDDa098d639bd8Bbcd7dF2bf24E06728cC\" as Address,\n HOOK_STATIC_FEE_V2:\n \"0xb2401c5369AaCF62F8d615623C7F68F84da428Cc\" as Address,\n SNIPER_AUCTION_V2:\n \"0x000007b64003ee07a69576F98859a0a36b854260\" as Address,\n SNIPER_UTIL_V2: \"0x000003Ee0cb9B0C82C6C7FCB7b81a9883F285270\" as Address,\n MEV_BLOCK_DELAY: \"0x0000035D83588954F3c581c3A66251b3F06AD5e4\" as Address,\n AIRDROP_V2: \"0x00000C222442512b08446D33dd9754a7F260BE79\" as Address,\n UNIV4_ETH_DEV_BUY:\n \"0x00000d7DE1f0A3FA7957F5d8A2b97B0E24e5783D\" as Address,\n LIQUID_DEPLOYER_LIB:\n \"0x00000f88b2d37A2006F2F0C8552d22E0b8945202\" as Address,\n} as const;\n\n// ── External protocol addresses (Base mainnet) ──────────────────────\n\nexport const EXTERNAL = {\n POOL_MANAGER: \"0x498581fF718922c3f8e6A244956aF099B2652b2b\" as Address,\n WETH: \"0x4200000000000000000000000000000000000006\" as Address,\n UNIVERSAL_ROUTER:\n \"0x6fF5693b99212Da76ad316178A184AB56D299b43\" as Address,\n PERMIT2: \"0x000000000022D473030F116dDEE9F6B43aC78BA3\" as Address,\n} as const;\n\n// ── Fee constants ────────────────────────────────────────────────────\n\nexport const FEE = {\n /** Fee denominator used by Uniswap v4 (1,000,000 = 100%) */\n DENOMINATOR: 1_000_000,\n /** Protocol fee numerator: 200,000 / 1,000,000 = 20% of LP fees */\n PROTOCOL_FEE_NUMERATOR: 200_000,\n /** Max LP fee: 10% (100,000 / 1,000,000) */\n MAX_LP_FEE: 100_000,\n /** Max MEV fee: 80% (800,000 / 1,000,000) */\n MAX_MEV_FEE: 800_000,\n /** BPS denominator for token supply splits */\n BPS: 10_000,\n} as const;\n\n// ── Token constants ──────────────────────────────────────────────────\n\nexport const TOKEN = {\n /** Total supply for every token: 100 billion with 18 decimals */\n SUPPLY: 100_000_000_000n * 10n ** 18n,\n DECIMALS: 18,\n MAX_EXTENSIONS: 10,\n MAX_EXTENSION_BPS: 9000,\n} as const;\n\n// ── Chain ────────────────────────────────────────────────────────────\n\nexport const DEFAULT_CHAIN = base;\nexport const DEFAULT_CHAIN_ID = 8453;\n","export const LiquidFactoryAbi = [\n {\n type: \"function\",\n name: \"deployToken\",\n inputs: [\n {\n name: \"deploymentConfig\",\n type: \"tuple\",\n components: [\n {\n name: \"tokenConfig\",\n type: \"tuple\",\n components: [\n { name: \"tokenAdmin\", type: \"address\" },\n { name: \"name\", type: \"string\" },\n { name: \"symbol\", type: \"string\" },\n { name: \"salt\", type: \"bytes32\" },\n { name: \"image\", type: \"string\" },\n { name: \"metadata\", type: \"string\" },\n { name: \"context\", type: \"string\" },\n { name: \"originatingChainId\", type: \"uint256\" },\n ],\n },\n {\n name: \"poolConfig\",\n type: \"tuple\",\n components: [\n { name: \"hook\", type: \"address\" },\n { name: \"pairedToken\", type: \"address\" },\n { name: \"tickIfToken0IsLiquid\", type: \"int24\" },\n { name: \"tickSpacing\", type: \"int24\" },\n { name: \"poolData\", type: \"bytes\" },\n ],\n },\n {\n name: \"lockerConfig\",\n type: \"tuple\",\n components: [\n { name: \"locker\", type: \"address\" },\n { name: \"rewardAdmins\", type: \"address[]\" },\n { name: \"rewardRecipients\", type: \"address[]\" },\n { name: \"rewardBps\", type: \"uint16[]\" },\n { name: \"tickLower\", type: \"int24[]\" },\n { name: \"tickUpper\", type: \"int24[]\" },\n { name: \"positionBps\", type: \"uint16[]\" },\n { name: \"lockerData\", type: \"bytes\" },\n ],\n },\n {\n name: \"mevModuleConfig\",\n type: \"tuple\",\n components: [\n { name: \"mevModule\", type: \"address\" },\n { name: \"mevModuleData\", type: \"bytes\" },\n ],\n },\n {\n name: \"extensionConfigs\",\n type: \"tuple[]\",\n components: [\n { name: \"extension\", type: \"address\" },\n { name: \"msgValue\", type: \"uint256\" },\n { name: \"extensionBps\", type: \"uint16\" },\n { name: \"extensionData\", type: \"bytes\" },\n ],\n },\n ],\n },\n ],\n outputs: [{ name: \"tokenAddress\", type: \"address\" }],\n stateMutability: \"payable\",\n },\n {\n type: \"function\",\n name: \"tokenDeploymentInfo\",\n inputs: [{ name: \"token\", type: \"address\" }],\n outputs: [\n {\n name: \"\",\n type: \"tuple\",\n components: [\n { name: \"token\", type: \"address\" },\n { name: \"hook\", type: \"address\" },\n { name: \"locker\", type: \"address\" },\n { name: \"extensions\", type: \"address[]\" },\n ],\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"deploymentInfoForToken\",\n inputs: [{ name: \"token\", type: \"address\" }],\n outputs: [\n { name: \"token\", type: \"address\" },\n { name: \"hook\", type: \"address\" },\n { name: \"locker\", type: \"address\" },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"deprecated\",\n inputs: [],\n outputs: [{ name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"TOKEN_SUPPLY\",\n inputs: [],\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"BPS\",\n inputs: [],\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"teamFeeRecipient\",\n inputs: [],\n outputs: [{ name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"enabledLockers\",\n inputs: [\n { name: \"locker\", type: \"address\" },\n { name: \"hook\", type: \"address\" },\n ],\n outputs: [{ name: \"enabled\", type: \"bool\" }],\n stateMutability: \"view\",\n },\n {\n type: \"event\",\n name: \"TokenCreated\",\n inputs: [\n { name: \"msgSender\", type: \"address\", indexed: false },\n { name: \"tokenAddress\", type: \"address\", indexed: true },\n { name: \"tokenAdmin\", type: \"address\", indexed: true },\n { name: \"tokenImage\", type: \"string\", indexed: false },\n { name: \"tokenName\", type: \"string\", indexed: false },\n { name: \"tokenSymbol\", type: \"string\", indexed: false },\n { name: \"tokenMetadata\", type: \"string\", indexed: false },\n { name: \"tokenContext\", type: \"string\", indexed: false },\n { name: \"startingTick\", type: \"int24\", indexed: false },\n { name: \"poolHook\", type: \"address\", indexed: false },\n { name: \"poolId\", type: \"bytes32\", indexed: false },\n { name: \"pairedToken\", type: \"address\", indexed: false },\n { name: \"locker\", type: \"address\", indexed: false },\n { name: \"mevModule\", type: \"address\", indexed: false },\n { name: \"extensionsSupply\", type: \"uint256\", indexed: false },\n { name: \"extensions\", type: \"address[]\", indexed: false },\n ],\n anonymous: false,\n },\n] as const;\n","export const LiquidFeeLockerAbi = [\n {\n type: \"function\",\n name: \"availableFees\",\n inputs: [\n { name: \"feeOwner\", type: \"address\" },\n { name: \"token\", type: \"address\" },\n ],\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"feesToClaim\",\n inputs: [\n { name: \"feeOwner\", type: \"address\" },\n { name: \"token\", type: \"address\" },\n ],\n outputs: [{ name: \"balance\", type: \"uint256\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"claim\",\n inputs: [\n { name: \"feeOwner\", type: \"address\" },\n { name: \"token\", type: \"address\" },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n] as const;\n","export const LiquidHookDynamicFeeV2Abi = [\n {\n type: \"function\",\n name: \"liquidIsToken0\",\n inputs: [{ name: \"\", type: \"bytes32\" }],\n outputs: [{ name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"poolConfigVars\",\n inputs: [{ name: \"poolId\", type: \"bytes32\" }],\n outputs: [\n {\n name: \"\",\n type: \"tuple\",\n components: [\n { name: \"baseFee\", type: \"uint24\" },\n { name: \"maxLpFee\", type: \"uint24\" },\n { name: \"referenceTickFilterPeriod\", type: \"uint256\" },\n { name: \"resetPeriod\", type: \"uint256\" },\n { name: \"resetTickFilter\", type: \"int24\" },\n { name: \"feeControlNumerator\", type: \"uint256\" },\n { name: \"decayFilterBps\", type: \"uint24\" },\n ],\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"poolFeeVars\",\n inputs: [{ name: \"poolId\", type: \"bytes32\" }],\n outputs: [\n {\n name: \"\",\n type: \"tuple\",\n components: [\n { name: \"referenceTick\", type: \"int24\" },\n { name: \"resetTick\", type: \"int24\" },\n { name: \"resetTickTimestamp\", type: \"uint256\" },\n { name: \"lastSwapTimestamp\", type: \"uint256\" },\n { name: \"appliedVR\", type: \"uint24\" },\n { name: \"prevVA\", type: \"uint24\" },\n ],\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"poolCreationTimestamp\",\n inputs: [{ name: \"\", type: \"bytes32\" }],\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"protocolFee\",\n inputs: [],\n outputs: [{ name: \"\", type: \"uint24\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"factory\",\n inputs: [],\n outputs: [{ name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"poolManager\",\n inputs: [],\n outputs: [{ name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"locker\",\n inputs: [],\n outputs: [{ name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"mevModule\",\n inputs: [{ name: \"\", type: \"bytes32\" }],\n outputs: [{ name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"mevModuleEnabled\",\n inputs: [{ name: \"\", type: \"bytes32\" }],\n outputs: [{ name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n },\n] as const;\n","export const LiquidVaultAbi = [\n {\n type: \"function\",\n name: \"allocation\",\n inputs: [{ name: \"\", type: \"address\" }],\n outputs: [\n { name: \"token\", type: \"address\" },\n { name: \"amountTotal\", type: \"uint256\" },\n { name: \"amountClaimed\", type: \"uint256\" },\n { name: \"lockupEndTime\", type: \"uint256\" },\n { name: \"vestingEndTime\", type: \"uint256\" },\n { name: \"admin\", type: \"address\" },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"amountAvailableToClaim\",\n inputs: [{ name: \"token\", type: \"address\" }],\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"claim\",\n inputs: [{ name: \"token\", type: \"address\" }],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n] as const;\n","export const LiquidSniperAuctionV2Abi = [\n {\n type: \"function\",\n name: \"nextAuctionBlock\",\n inputs: [{ name: \"poolId\", type: \"bytes32\" }],\n outputs: [{ name: \"nextAuctionBlock\", type: \"uint256\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"round\",\n inputs: [{ name: \"poolId\", type: \"bytes32\" }],\n outputs: [{ name: \"round\", type: \"uint256\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"gasPeg\",\n inputs: [{ name: \"poolId\", type: \"bytes32\" }],\n outputs: [{ name: \"gasPeg\", type: \"uint256\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"feeConfig\",\n inputs: [{ name: \"poolId\", type: \"bytes32\" }],\n outputs: [\n { name: \"startingFee\", type: \"uint24\" },\n { name: \"endingFee\", type: \"uint24\" },\n { name: \"secondsToDecay\", type: \"uint256\" },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"getFee\",\n inputs: [{ name: \"poolId\", type: \"bytes32\" }],\n outputs: [{ name: \"\", type: \"uint24\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"poolDecayStartTime\",\n inputs: [{ name: \"poolId\", type: \"bytes32\" }],\n outputs: [{ name: \"poolDecayStartTime\", type: \"uint256\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"maxRounds\",\n inputs: [],\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"blocksBetweenAuction\",\n inputs: [],\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"blocksBetweenDeploymentAndFirstAuction\",\n inputs: [],\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"paymentPerGasUnit\",\n inputs: [],\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n },\n] as const;\n","export const LiquidSniperUtilV2Abi = [\n {\n type: \"function\",\n name: \"bidInAuction\",\n inputs: [\n {\n name: \"swapParams\",\n type: \"tuple\",\n components: [\n {\n name: \"poolKey\",\n type: \"tuple\",\n components: [\n { name: \"currency0\", type: \"address\" },\n { name: \"currency1\", type: \"address\" },\n { name: \"fee\", type: \"uint24\" },\n { name: \"tickSpacing\", type: \"int24\" },\n { name: \"hooks\", type: \"address\" },\n ],\n },\n { name: \"zeroForOne\", type: \"bool\" },\n { name: \"amountIn\", type: \"uint128\" },\n { name: \"amountOutMinimum\", type: \"uint128\" },\n { name: \"hookData\", type: \"bytes\" },\n ],\n },\n { name: \"round\", type: \"uint256\" },\n ],\n outputs: [],\n stateMutability: \"payable\",\n },\n {\n type: \"function\",\n name: \"getTxGasPriceForBidAmount\",\n inputs: [\n { name: \"auctionGasPeg\", type: \"uint256\" },\n { name: \"desiredBidAmount\", type: \"uint256\" },\n ],\n outputs: [{ name: \"txGasPrice\", type: \"uint256\" }],\n stateMutability: \"view\",\n },\n] as const;\n","export const LiquidAirdropV2Abi = [\n {\n type: \"function\",\n name: \"airdrops\",\n inputs: [{ name: \"token\", type: \"address\" }],\n outputs: [\n { name: \"admin\", type: \"address\" },\n { name: \"merkleRoot\", type: \"bytes32\" },\n { name: \"totalSupply\", type: \"uint256\" },\n { name: \"totalClaimed\", type: \"uint256\" },\n { name: \"lockupEndTime\", type: \"uint256\" },\n { name: \"vestingEndTime\", type: \"uint256\" },\n { name: \"adminClaimTime\", type: \"uint256\" },\n { name: \"adminClaimed\", type: \"bool\" },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"amountAvailableToClaim\",\n inputs: [\n { name: \"token\", type: \"address\" },\n { name: \"recipient\", type: \"address\" },\n { name: \"allocatedAmount\", type: \"uint256\" },\n ],\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"claim\",\n inputs: [\n { name: \"token\", type: \"address\" },\n { name: \"recipient\", type: \"address\" },\n { name: \"allocatedAmount\", type: \"uint256\" },\n { name: \"proof\", type: \"bytes32[]\" },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"CLAIM_EXPIRATION_INTERVAL\",\n inputs: [],\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"MIN_LOCKUP_DURATION\",\n inputs: [],\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n },\n] as const;\n","export const LiquidPoolExtensionAllowlistAbi = [\n {\n type: \"function\",\n name: \"enabledExtensions\",\n inputs: [{ name: \"extension\", type: \"address\" }],\n outputs: [{ name: \"enabled\", type: \"bool\" }],\n stateMutability: \"view\",\n },\n] as const;\n","export const LiquidMevBlockDelayAbi = [\n {\n type: \"function\",\n name: \"blockDelay\",\n inputs: [],\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"poolUnlockTime\",\n inputs: [{ name: \"poolId\", type: \"bytes32\" }],\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n },\n] as const;\n","export const LiquidLpLockerAbi = [\n {\n type: \"function\",\n name: \"tokenRewards\",\n inputs: [{ name: \"token\", type: \"address\" }],\n outputs: [\n {\n name: \"\",\n type: \"tuple\",\n components: [\n { name: \"token\", type: \"address\" },\n {\n name: \"poolKey\",\n type: \"tuple\",\n components: [\n { name: \"currency0\", type: \"address\" },\n { name: \"currency1\", type: \"address\" },\n { name: \"fee\", type: \"uint24\" },\n { name: \"tickSpacing\", type: \"int24\" },\n { name: \"hooks\", type: \"address\" },\n ],\n },\n { name: \"positionId\", type: \"uint256\" },\n { name: \"numPositions\", type: \"uint256\" },\n { name: \"rewardBps\", type: \"uint16[]\" },\n { name: \"rewardAdmins\", type: \"address[]\" },\n { name: \"rewardRecipients\", type: \"address[]\" },\n ],\n },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"collectRewards\",\n inputs: [{ name: \"token\", type: \"address\" }],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"collectRewardsWithoutUnlock\",\n inputs: [{ name: \"token\", type: \"address\" }],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"updateRewardAdmin\",\n inputs: [\n { name: \"token\", type: \"address\" },\n { name: \"rewardIndex\", type: \"uint256\" },\n { name: \"newAdmin\", type: \"address\" },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"updateRewardRecipient\",\n inputs: [\n { name: \"token\", type: \"address\" },\n { name: \"rewardIndex\", type: \"uint256\" },\n { name: \"newRecipient\", type: \"address\" },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"version\",\n inputs: [],\n outputs: [{ name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n },\n] as const;\n","export const ERC20Abi = [\n {\n type: \"function\",\n name: \"name\",\n inputs: [],\n outputs: [{ name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"symbol\",\n inputs: [],\n outputs: [{ name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"decimals\",\n inputs: [],\n outputs: [{ name: \"\", type: \"uint8\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"totalSupply\",\n inputs: [],\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"balanceOf\",\n inputs: [{ name: \"account\", type: \"address\" }],\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"allowance\",\n inputs: [\n { name: \"owner\", type: \"address\" },\n { name: \"spender\", type: \"address\" },\n ],\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"approve\",\n inputs: [\n { name: \"spender\", type: \"address\" },\n { name: \"value\", type: \"uint256\" },\n ],\n outputs: [{ name: \"\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"transfer\",\n inputs: [\n { name: \"to\", type: \"address\" },\n { name: \"value\", type: \"uint256\" },\n ],\n outputs: [{ name: \"\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n },\n] as const;\n"],"mappings":"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","names":["import_chains","decoded"]}