EthxFactory
0xd335750A02E75068AC88cACf57Bc3db8E1F09C26Deploy tokens + bonding curves via CREATE2
Integration
Integrate EthX Launch on Ethereum — launch tokens, trade on the bonding curve, and route post-graduation swaps through Uniswap V3 or EthX.
Deploy tokens + bonding curves via CREATE2
Canonical Uniswap V3 router — post-graduation trading (no first-party router on this chain)
Locks the graduation LP NFT permanently in UNCX; WETH LP fees stay claimable and split 80% creator / 20% platform
Each launch also deploys a unique BondingCurve and Ethx via CREATE2. Token addresses always end in …001.
EthxFactory.createLaunch to deploy curve + token.collectFees() has no time gate): token side burned, WETH side split 80% creator / 20% platform on each collect.Fees & custody. EthX is non-custodial — every create, buy, sell, and graduation runs on-chain straight from your wallet, and the platform contract never holds your funds. Fees settle directly: the 0.0005 ETH launch fee and the platform's 1% of the 2% curve trade tax go to the fee wallet, the creator's matching 1% to the creator, and the graduation cut splits per the waterfall above. Because the LP is locked without a time gate, the position itself can never be withdrawn — only its trading fees are ever collected, and those keep flowing 80% creator / 20% platform.
Call createLaunch on the launchpad. Pay at least 0.0005 ETH launch fee; any extra ETH in the same tx is used as an optional creator dev-buy.
// EthxFactory.createLaunch
function createLaunch(
string name,
string symbol,
string metadataURI, // ipfs:// or https:// JSON with name, symbol, image, socials
uint256 minTokensOut, // slippage guard for optional dev-buy (0 if no dev-buy)
bytes32 curveSalt, // CREATE2 salt — curve address must end in 001
bytes32 tokenSalt // CREATE2 salt — token address must end in 001
) external payable returns (address curve, address token);
// Example (viem / wagmi)
await writeContract({
address: "0xd335750A02E75068AC88cACf57Bc3db8E1F09C26",
abi: launchpadAbi,
functionName: "createLaunch",
args: [name, symbol, metadataURI, 0n, curveSalt, tokenSalt],
value: parseEther("0.0005"), // launch fee only
});Read launch metadata: launchpad.launches(launchId) or launchpad.curveToLaunchId(curve). Resolve token → curve: Ethx(token).curve().
Send ETH to the curve's buy function. 2% fee is taken (1% platform ETH + 1% creator ETH accrued from curve trading).
// BondingCurve.buy — curve must not be graduated
function buy(uint256 minTokensOut) external payable;
await writeContract({
address: curveAddress,
abi: bondingCurveAbi,
functionName: "buy",
args: [minTokensOut],
value: parseEther("0.1"),
});
// Quote before sending
const [tokensOut] = await readContract({
address: curveAddress,
abi: bondingCurveAbi,
functionName: "quoteBuy",
args: [parseEther("0.1")],
});Approve the curve to spend tokens, then call sell.
// 1. Approve curve to spend tokens
await writeContract({
address: tokenAddress,
abi: erc20Abi,
functionName: "approve",
args: [curveAddress, tokenAmount],
});
// 2. Sell
function sell(uint256 tokenAmount, uint256 minEthOut) external;
await writeContract({
address: curveAddress,
abi: bondingCurveAbi,
functionName: "sell",
args: [tokenAmount, minEthOut],
});Once curve.graduated() == true, trade the token/WETH pool directly on canonical Uniswap V3 (the pool is created at graduation with the 1% fee tier).
// Post-graduation trading is plain canonical Uniswap V3 — pool: token/WETH, 1% fee tier.
const SWAP_ROUTER = "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45"; // canonical SwapRouter02
await writeContract({
address: SWAP_ROUTER,
abi: swapRouter02Abi,
functionName: "exactInputSingle",
args: [{
tokenIn: WUSDT0, tokenOut: tokenAddress, fee: 10000,
recipient: me, amountIn, amountOutMinimum, sqrtPriceLimitX96: 0n,
}],
});// BondingCurve views
curve.token() // Ethx address
curve.creator() // launch creator
curve.graduated() // true after migration
curve.uniswapPool() // V3 pool (zero before grad)
curve.currentPrice() // spot price in wei per token
curve.tokensRemaining() // unsold sale inventory (800M cap)
curve.ethCollected() // net ETH in curve
curve.tokensSold()
curve.graduationTarget() // 4.2 ETH target
// Ethx
token.curve() // bonding curve address
// Creator fees accrue on the CURVE in native ETH (1% of every trade) —
curve.claimCreatorFees() // permissionless; pays the accrued fees to the creatorPre-graduation trades emit on the curve contract:
event Buy(address indexed buyer, uint256 ethIn, uint256 tokensOut, uint256 newPrice);
event Sell(address indexed seller, uint256 tokensIn, uint256 ethOut, uint256 newPrice);
event DevBuy(address indexed creator, uint256 ethIn, uint256 tokensOut, uint256 newPrice);
event Graduated(address pool, uint256 ethLiquidity, uint256 tokenLiquidity, uint256 ethToDev);
// Launchpad
event LaunchCreated(uint256 indexed launchId, address curve, address token, address creator, string name, string symbol);Fetch historical logs from the explorer or any RPC eth_getLogs against the curve address.