'use client' import { useState } from 'react' import { useWriteContract, useWaitForTransactionReceipt } from 'wagmi' import { LIQUIDITY_FACET_ABI, DIAMOND_ADDRESS } from '@/lib/contracts' import { parseEther } from 'viem' import toast from 'react-hot-toast' import { LoadingSpinner } from './LoadingSpinner' export function PoolCreator() { const [baseToken, setBaseToken] = useState('') const [quoteToken, setQuoteToken] = useState('') const [initialBaseReserve, setInitialBaseReserve] = useState('') const [initialQuoteReserve, setInitialQuoteReserve] = useState('') const [virtualBaseReserve, setVirtualBaseReserve] = useState('') const [virtualQuoteReserve, setVirtualQuoteReserve] = useState('') const [k, setK] = useState('0.1') const [oraclePrice, setOraclePrice] = useState('1') const { writeContract, data: hash, isPending, error } = useWriteContract() const { isLoading: isConfirming, isSuccess } = useWaitForTransactionReceipt({ hash }) const handleCreatePool = async () => { if (!baseToken || !quoteToken) { toast.error('Please enter token addresses') return } if (!/^0x[a-fA-F0-9]{40}$/.test(baseToken) || !/^0x[a-fA-F0-9]{40}$/.test(quoteToken)) { toast.error('Invalid token address format') return } try { writeContract({ address: DIAMOND_ADDRESS as `0x${string}`, abi: LIQUIDITY_FACET_ABI, functionName: 'createPool', args: [ baseToken as `0x${string}`, quoteToken as `0x${string}`, parseEther(initialBaseReserve || '0'), parseEther(initialQuoteReserve || '0'), parseEther(virtualBaseReserve || '0'), parseEther(virtualQuoteReserve || '0'), BigInt(Math.floor(parseFloat(k) * 1e18)), parseEther(oraclePrice), '0x0000000000000000000000000000000000000000' as `0x${string}` // Oracle address (optional) ], }) toast.success('Pool creation transaction submitted') } catch (error: any) { toast.error(error.message || 'Error creating pool') console.error('Error creating pool:', error) } } if (isSuccess) { toast.success('Pool created successfully!') } if (error) { toast.error(`Transaction failed: ${error.message}`) } return (

Create Liquidity Pool

setBaseToken(e.target.value)} className="w-full px-3 py-2 border border-gray-300 rounded-md focus:ring-2 focus:ring-indigo-500" placeholder="0x..." required />
setQuoteToken(e.target.value)} className="w-full px-3 py-2 border border-gray-300 rounded-md focus:ring-2 focus:ring-indigo-500" placeholder="0x..." required />
setInitialBaseReserve(e.target.value)} className="w-full px-3 py-2 border border-gray-300 rounded-md" placeholder="0.0" />
setInitialQuoteReserve(e.target.value)} className="w-full px-3 py-2 border border-gray-300 rounded-md" placeholder="0.0" />
setVirtualBaseReserve(e.target.value)} className="w-full px-3 py-2 border border-gray-300 rounded-md" placeholder="0.0" />

Virtual liquidity for better pricing

setVirtualQuoteReserve(e.target.value)} className="w-full px-3 py-2 border border-gray-300 rounded-md" placeholder="0.0" />

Virtual liquidity for better pricing

setK(e.target.value)} className="w-full px-3 py-2 border border-gray-300 rounded-md" placeholder="0.1" />

Range: 0-1 (lower = less slippage)

setOraclePrice(e.target.value)} className="w-full px-3 py-2 border border-gray-300 rounded-md" placeholder="1.0" />

Reference price from oracle

) }