Overview
Yeon launches ERC-20 tokens straight into a Uniswap v4 pool on GIWA. There is no bonding curve and no migration: a token trades from its first block.
- Fixed supply of 1,000,000,000 tokens, 18 decimals, no mint function.
- The whole supply is the pool’s liquidity, and the LP position NFT is minted to
0x…dEaD. Nobody can remove it. - Every swap pays one fee in ETH: a platform fee plus the creator’s buy or sell tax (0–10%). Rates are fixed forever at launch.
- Fee income is split creator / platform (70 / 30 today) and claimable by anyone on the recipient’s behalf.
Network & addresses
| Chain | GIWA Sepolia (testnet) · chain ID 91342 |
| Public RPC | https://sepolia-rpc.giwa.io |
| Explorer | https://sepolia-explorer.giwa.io |
| Faucet | https://faucet.giwa.io |
| LaunchFactory | 0xf4d509a489ba238A2282095234E31717E9617A22 |
| LaunchHook | 0x810611B9aB4164033bEC74e116CA522B299E60Cc |
| LaunchRouter | 0x38224Acab7F3Ac75cf69D44D4D63aA01D315A3BA |
| TokenLocker | 0x98a4f6eBFc051D2abBbeD4c545B12A395D560f4D |
| TokenStaking | 0x136F939f06573430Fde877a9099E835121594eDD |
| Uniswap v4 PoolManager | 0xfd72Ff5F39d37137fB7F30Bcf0f6517c0E8B2421 |
| Uniswap v4 PositionManager | 0x16eFa707e7a337bcbCD116e11960CF1Ae4BccF95 |
All Yeon contracts are verified. Every token comes from the same factory and has identical bytecode.
How a launch works
One call to LaunchFactory.launch does all of this in a single transaction:
- Deploys a
LaunchTokenand mints the full supply to the factory. - Registers the pool’s fees with the hook, then initializes an ETH / token pool on the Uniswap v4 PoolManager at the starting price (about 1.6 ETH market cap).
- Mints the entire supply as a single-sided position from the starting price down to the minimum tick, through the PositionManager, with the NFT owned by
0x…dEaD. - Optionally swaps the creator’s starting buy, so nobody can buy before them.
The pool key is always:
PoolKey({
currency0: address(0), // native ETH, always currency0
currency1: token,
fee: 0, // no LP fee; the hook charges the fee
tickSpacing: 200,
hooks: 0x810611B9aB4164033bEC74e116CA522B299E60Cc
})
poolId = keccak256(abi.encode(poolKey))A buy is zeroForOne = true (ETH in) and a sell is zeroForOne = false (tokens in). Use factory.getLaunch(token) to read the key, the position ticks, the taxes and the LP NFT id.
Fees
The hook takes one fee per swap, always in ETH, from whichever side of the trade is ETH. It is a percentage of the gross ETH amount, whatever the swap type:
| Swap | What the trader sees |
|---|---|
| Buy, exact ETH in | Fee is taken out of the ETH sent; the rest is swapped |
| Buy, exact tokens out | Fee is added on top of the ETH the swap costs |
| Sell, exact tokens in | Fee is taken out of the ETH received |
| Sell, exact ETH out | Trader receives exactly that ETH; the pool releases a little more |
Fee rate = platform fee + creator tax. With today’s 1% platform fee, a token with a 3% buy tax charges 4% on buys. Read the exact rates of any pool with hook.poolFees(poolId), which returns (token, buyFeeBps, sellFeeBps, protocolShareBps) with the platform fee already included.
Split: protocolShareBps of every fee goes to the platform and the rest to the token’s current creator(). Fees accrue inside the PoolManager as ERC-6909 claims held by the hook until someone calls a claim function.
There is no transfer tax. Wallet-to-wallet transfers are free, and the token works with any router or aggregator.
Platform fees & admin
Every fee the platform charges, where the ETH sits until it’s paid out, and who can trigger the payout. All amounts are readable on-chain; the figures below are today’s settings.
| Fee | Held in | Paid out by |
|---|---|---|
| Launch fee · 0.0005 ETH per launch | Not held: sent straight to protocolFeeRecipient() | Automatic |
| Platform share · 30% of every swap fee | LaunchHook.pendingProtocolFees() | Anyone calls hook.claimProtocolFees(); pays protocolFeeRecipient() |
| Creator share · 70% of every swap fee | LaunchHook.pendingCreatorFees(token) | Anyone calls hook.claimCreatorFees(token); pays token.creator() |
| Lock fee · 0.01 ETH per lock | TokenLocker.pendingFees() | Fee wallet or owner calls locker.claimFees() |
| Staking pool fee · 0.02 ETH per pool | TokenStaking.pendingFees() | Fee wallet or owner calls staking.claimFees() |
The swap fee is platformFeeBps (1%) plus the creator’s tax, so with a 3% buy tax a buy pays 4% and the platform keeps 30% of that 4%. Read the live values with factory.launchFee(), factory.platformFeeBps(), factory.protocolShareBps(), locker.lockFee() and staking.createFee(). The lock and pool fees must be sent exactly, so always read them first.
# what's waiting
cast call 0x810611B9aB4164033bEC74e116CA522B299E60Cc 'pendingProtocolFees()(uint256)' --rpc-url https://sepolia-rpc.giwa.io
cast call 0x98a4f6eBFc051D2abBbeD4c545B12A395D560f4D 'pendingFees()(uint256)' --rpc-url https://sepolia-rpc.giwa.io
cast call 0x136F939f06573430Fde877a9099E835121594eDD 'pendingFees()(uint256)' --rpc-url https://sepolia-rpc.giwa.io
# pay it out (the hook claim can be sent by anyone; locker/staking claims by the fee wallet or owner)
cast send 0x810611B9aB4164033bEC74e116CA522B299E60Cc 'claimProtocolFees()' --rpc-url https://sepolia-rpc.giwa.io --account <keystore>
cast send 0x98a4f6eBFc051D2abBbeD4c545B12A395D560f4D 'claimFees()' --rpc-url https://sepolia-rpc.giwa.io --account <fee-wallet>
cast send 0x136F939f06573430Fde877a9099E835121594eDD 'claimFees()' --rpc-url https://sepolia-rpc.giwa.io --account <fee-wallet>What the platform owner can change
factory.setSettings: launch fee, platform fee (capped at 3%), starting market cap, platform share (capped at 50%) and fee recipient. These apply to future launches only; each token keeps the settings it launched with.locker.setLockFee,staking.setCreateFeeandsetFeeReceiveron both. These affect new locks and new pools only.
What nobody can do, including the platform
- Change an existing token’s taxes, platform fee or fee split.
- Remove liquidity. The LP position NFT is owned by
0x…dEaD. - Mint tokens or pause trading.
- Move locked tokens before their unlock date, or touch tokens staked in a pool.
- Redirect a creator’s fees. They always go to the token’s current
creator().
Setup
The examples use viem. Any EVM library works the same way.
import { createPublicClient, createWalletClient, custom, defineChain, http } from "viem";
export const giwa = defineChain({
id: 91342,
name: "GIWA Sepolia",
nativeCurrency: { name: "Ether", symbol: "ETH", decimals: 18 },
rpcUrls: { default: { http: ["https://sepolia-rpc.giwa.io"] } },
blockExplorers: { default: { name: "GIWA Explorer", url: "https://sepolia-explorer.giwa.io" } },
contracts: { multicall3: { address: "0xcA11bde05977b3631167028862bE2a173976CA11" } },
});
export const FACTORY = "0xf4d509a489ba238A2282095234E31717E9617A22";
export const HOOK = "0x810611B9aB4164033bEC74e116CA522B299E60Cc";
export const ROUTER = "0x38224Acab7F3Ac75cf69D44D4D63aA01D315A3BA";
export const LOCKER = "0x98a4f6eBFc051D2abBbeD4c545B12A395D560f4D";
export const STAKING = "0x136F939f06573430Fde877a9099E835121594eDD";
export const publicClient = createPublicClient({ chain: giwa, transport: http() });
export const walletClient = createWalletClient({ chain: giwa, transport: custom(window.ethereum) });Import the ABIs from the ABIs section as JSON, or download them from /abi/LaunchFactory.json and the matching files for the other contracts.
Launch a token
Call launch with the token details and send launchFee plus any ETH you want for the creator’s starting buy. The caller becomes the creator.
| Field | Rule |
|---|---|
| name | 1–64 bytes |
| symbol | 1–16 bytes |
| metadataURI | Any string; see Token metadata |
| buyTaxBps / sellTaxBps | 0–1000 (0–10%), fixed forever |
| msg.value | ≥ launchFee; anything above it is the starting buy |
import { decodeEventLog, parseEther } from "viem";
import factoryAbi from "./abi/LaunchFactory.json";
const launchFee = await publicClient.readContract({ address: FACTORY, abi: factoryAbi, functionName: "launchFee" });
const startingBuy = parseEther("0.01"); // 0n for none
const hash = await walletClient.writeContract({
account,
address: FACTORY,
abi: factoryAbi,
functionName: "launch",
args: [{
name: "Moon Rocket",
symbol: "MOON",
metadataURI: "ipfs://bafy...", // JSON, see Token metadata
buyTaxBps: 300, // 3%
sellTaxBps: 300,
}],
value: launchFee + startingBuy,
});
const receipt = await publicClient.waitForTransactionReceipt({ hash });
const launched = receipt.logs
.map((l) => { try { return decodeEventLog({ abi: factoryAbi, data: l.data, topics: l.topics }); } catch { return null; } })
.find((e) => e?.eventName === "TokenLaunched");
console.log("token:", launched.args.token, "LP NFT:", launched.args.lpTokenId);Buy & sell
LaunchRouter does exact-input swaps with slippage and deadline checks. It holds no funds between calls. For sells, approve the router for the token first. Both functions revert with SlippageExceeded(amountOut, minAmountOut) if the result is below your minimum.
function buy(address token, uint256 minTokensOut, address recipient, uint256 deadline)
external payable returns (uint256 tokensOut); // spends all msg.value, refunds anything unused
function sell(address token, uint256 amountIn, uint256 minEthOut, address recipient, uint256 deadline)
external returns (uint256 ethOut);import routerAbi from "./abi/LaunchRouter.json";
const ethIn = parseEther("0.01");
const quote = await quoteBuy(token, ethIn); // see Quotes & price
const minOut = (quote * 95n) / 100n; // 5% slippage
const deadline = BigInt(Math.floor(Date.now() / 1000) + 600);
await walletClient.writeContract({
account, address: ROUTER, abi: routerAbi, functionName: "buy",
args: [token, minOut, account, deadline],
value: ethIn,
});Quotes & price
Simplest: simulate the router call. The return value is the exact output. To quote for an address that doesn’t hold enough ETH, use a state override.
async function quoteBuy(token: `0x${string}`, ethIn: bigint) {
const from = "0x000000000000000000000000000000000000bEEF";
const { result } = await publicClient.simulateContract({
address: ROUTER, abi: routerAbi, functionName: "buy",
args: [token, 0n, from, 2n ** 40n],
value: ethIn, account: from,
stateOverride: [{ address: from, balance: ethIn * 2n }],
});
return result; // tokens out, after fees
}Without an RPC round-trip: each pool’s liquidity sits in one range, so the constant-liquidity formulas are exact. Read sqrtPriceX96 and liquidity from the PoolManager’s storage with extsload:
import { encodeAbiParameters, keccak256 } from "viem";
const POOLS_SLOT = 6n; // Uniswap v4 StateLibrary
const slot0Slot = keccak256(encodeAbiParameters([{ type: "bytes32" }, { type: "uint256" }], [poolId, POOLS_SLOT]));
const liqSlot = `0x${(BigInt(slot0Slot) + 3n).toString(16).padStart(64, "0")}` as `0x${string}`;
const pmAbi = [{ type: "function", name: "extsload", stateMutability: "view",
inputs: [{ name: "slot", type: "bytes32" }], outputs: [{ type: "bytes32" }] }] as const;
const [w0, w1] = await Promise.all([slot0Slot, liqSlot].map((slot) =>
publicClient.readContract({ address: "0xfd72Ff5F39d37137fB7F30Bcf0f6517c0E8B2421", abi: pmAbi, functionName: "extsload", args: [slot] })));
const sqrtPriceX96 = BigInt(w0) & ((1n << 160n) - 1n);
const liquidity = BigInt(w1) & ((1n << 128n) - 1n);
// Both assets have 18 decimals, so raw ratios are real ratios.
const s = Number(sqrtPriceX96) / 2 ** 96;
const tokensPerEth = s * s;
const priceEth = 1 / tokensPerEth;
const marketCapEth = 1_000_000_000 * priceEth;
// Exact-input buy (feeBps = buyFeeBps from hook.poolFees)
function buyOut(ethInWei: number, feeBps: number) {
const L = Number(liquidity), x = ethInWei * (1 - feeBps / 10_000);
const sNew = (L * s) / (L + x * s);
return L * (s - sNew); // tokens out (wei)
}
// Exact-input sell (feeBps = sellFeeBps)
function sellOut(tokensInWei: number, feeBps: number) {
const L = Number(liquidity), sNew = s + tokensInWei / L;
return ((L * (sNew - s)) / (s * sNew)) * (1 - feeBps / 10_000); // ETH out (wei)
}These floats match the router to about 1e-11 relative error. Apply your slippage tolerance to the result.
Claim fees
Fees build up in the hook. Anyone can trigger a payout, but funds always go to the rightful recipient: the token’s current creator(), or the factory’s protocolFeeRecipient().
import hookAbi from "./abi/LaunchHook.json";
// how much the creator of `token` can claim (wei)
const pending = await publicClient.readContract({
address: HOOK, abi: hookAbi, functionName: "pendingCreatorFees", args: [token],
});
// pays token.creator(); reverts with NothingToClaim() if pending == 0
await walletClient.writeContract({ account, address: HOOK, abi: hookAbi, functionName: "claimCreatorFees", args: [token] });
// platform share, pays factory.protocolFeeRecipient()
await walletClient.writeContract({ account, address: HOOK, abi: hookAbi, functionName: "claimProtocolFees" });Payouts are plain ETH transfers. If the creator is a contract, it must be able to receive ETH.
Lock tokens
TokenLocker holds tokens until an unlock date. Nobody can move them before then, not even the platform. Afterwards, only the lock’s withdrawer can take them out. It accepts tokens launched from the factory only, and charges a flat lockFee() in ETH (0.01 ETH today), sent exactly.
const amount = parseEther("100000");
const unlockAt = BigInt(Math.floor(Date.now() / 1000) + 30 * 86400); // 30 days
const fee = await publicClient.readContract({ address: LOCKER, abi: lockerAbi, functionName: "lockFee" });
await walletClient.writeContract({ account, address: token, abi: tokenAbi, functionName: "approve", args: [LOCKER, amount] });
await walletClient.writeContract({
account, address: LOCKER, abi: lockerAbi, functionName: "lock",
args: [token, amount, unlockAt, account], // last arg: who can withdraw after unlockAt
value: fee,
});
// read every lock on a token, e.g. to show "x% of supply locked"
const ids = await publicClient.readContract({ address: LOCKER, abi: lockerAbi, functionName: "getLocksForToken", args: [token] });
const locks = await Promise.all(ids.map((id) =>
publicClient.readContract({ address: LOCKER, abi: lockerAbi, functionName: "getLock", args: [id] })));
// Lock { id, token, owner, withdrawer, amount, lockDate, unlockDate }The lock owner can top up (incrementLock), push the date later (extendLock), split or transfer a lock. The date can never move earlier. After unlockDate, the withdrawer calls withdraw(lockId, amount). Events: LockCreated, LockExtended, LockIncremented, LockSplit, LockWithdrawn.
Staking pools
TokenStaking lets a token’s creator reward holders who stake. The creator deposits rewards and picks a duration. Rewards stream evenly per second, split pro-rata among stakers, so APR moves with how much is staked. Only the token’s current creator() can open a pool for it, the stake token must come from the factory, and creating a pool costs createFee() (0.02 ETH today). The reward token can be any ERC-20.
// creator: open a 30-day pool with 50,000 tokens of rewards and a 10% early-exit penalty
const rewards = parseEther("50000");
await walletClient.writeContract({ account, address: token, abi: tokenAbi, functionName: "approve", args: [STAKING, rewards] });
await walletClient.writeContract({
account, address: STAKING, abi: stakingAbi, functionName: "createPool",
args: [{
stakeToken: token, rewardToken: token,
startTime: 0n, // 0 = now
duration: 30n * 86400n, // 1 hour .. 4 years
penaltyBps: 1000, // 0 .. 5000, only before the pool ends
minStake: 0n, maxStakePerWallet: 0n, maxTotalStaked: 0n, // 0 = no limit
name: "MOON 30-day",
}, rewards],
value: await publicClient.readContract({ address: STAKING, abi: stakingAbi, functionName: "createFee" }),
});
// holder: stake, check earnings, claim, leave
await walletClient.writeContract({ account, address: STAKING, abi: stakingAbi, functionName: "stake", args: [poolId, amount] });
const earned = await publicClient.readContract({ address: STAKING, abi: stakingAbi, functionName: "earned", args: [poolId, account] });
const aprBps = await publicClient.readContract({ address: STAKING, abi: stakingAbi, functionName: "currentAprBps", args: [poolId] });
await walletClient.writeContract({ account, address: STAKING, abi: stakingAbi, functionName: "claim", args: [poolId] });
await walletClient.writeContract({ account, address: STAKING, abi: stakingAbi, functionName: "exit", args: [poolId] }); // unstake all + claim- Early-exit penalties apply only before the pool ends. In same-token pools they are re-streamed to the stakers who stay; otherwise they go to the creator.
- The creator can extend the pool (
extendPool), pause new stakes, and after the end reclaim rewards nobody earned. Anyone can add rewards (addRewards). Nobody can touch staked tokens, and withdrawals and claims are never paused. - Discover pools with
getPoolsByStakeToken(token)and a wallet’s pools withgetPoolsForUser(address). Events:PoolCreated,Staked,Unstaked,Claimed,RewardsAdded,PoolExtended.
Token metadata
metadataURI points to a JSON document. Yeon pins it on IPFS. Every field is optional. The creator can replace it later with setMetadataURI(string), which emits MetadataURIUpdated.
{
"image": "ipfs://bafy...", // square image
"description": "One or two sentences.",
"x": "handle or https://x.com/...",
"telegram": "username or https://t.me/...",
"website": "https://..."
}Trading the pool directly
Pools are standard Uniswap v4 pools, so any v4-aware router or aggregator can trade them with the pool key above. Pass empty hookData. The hook charges its ETH fee the same way whoever routes the swap, and trades from any source show up in the pool’s Swap events.
Indexing & events
Everything is reconstructable from logs, starting at the factory’s deployment block 39,066,651.
| Contract | Event | Use |
|---|---|---|
| LaunchFactory | TokenLaunched(token, creator, poolId, name, symbol, metadataURI, buyTaxBps, sellTaxBps, platformFeeBps, lpTokenId, initialBuyEth, initialBuyTokens) | New token and its pool |
| LaunchToken | MetadataURIUpdated(uri) | Image / socials changed |
| LaunchToken | CreatorTransferred(previousCreator, newCreator) | Creator role moved |
| PoolManager | Swap(id, sender, amount0, amount1, sqrtPriceX96, liquidity, tick, fee) | Every trade; filter by poolId |
| LaunchHook | FeeCollected(poolId, token, isBuy, creatorAmount, protocolAmount) | Fee from each swap |
| LaunchHook | CreatorFeesClaimed(token, recipient, amount) | Creator payout |
| LaunchHook | ProtocolFeesClaimed(recipient, amount) | Platform payout |
| LaunchRouter | Buy / Sell(token, trader, recipient, amountIn, amountOut) | Trades through LaunchRouter only |
In Swap, amounts are from the swapper’s side of the pool: a buy has amount0 < 0 (ETH in) and amount1 > 0 (tokens out). sender is the router contract. Use the transaction’s from for the trader.
publicClient.watchContractEvent({
address: FACTORY, abi: factoryAbi, eventName: "TokenLaunched",
onLogs: (logs) => logs.forEach((l) => tokens.add(l.args.token)),
});The public GIWA RPC caps a single eth_getLogs at 10,000 blocks (about 2.8 hours at 1-second blocks). It is load-balanced, so a node a few blocks behind can return an empty list for a range past its head: stay a few blocks behind the latest block when indexing.
From Solidity
Minimal interfaces for contracts that launch, trade or claim:
interface ILaunchFactory {
struct LaunchParams { string name; string symbol; string metadataURI; uint16 buyTaxBps; uint16 sellTaxBps; }
function launch(LaunchParams calldata p) external payable returns (address token);
function launchFee() external view returns (uint256);
function totalLaunches() external view returns (uint256);
function allTokens(uint256 i) external view returns (address);
}
interface ILaunchRouter {
function buy(address token, uint256 minTokensOut, address recipient, uint256 deadline) external payable returns (uint256);
function sell(address token, uint256 amountIn, uint256 minEthOut, address recipient, uint256 deadline) external returns (uint256);
}
interface ILaunchHook {
function pendingCreatorFees(address token) external view returns (uint256);
function claimCreatorFees(address token) external returns (uint256);
function poolFees(bytes32 poolId) external view returns (address token, uint16 buyFeeBps, uint16 sellFeeBps, uint16 protocolShareBps);
}
interface ILaunchToken {
function creator() external view returns (address);
function transferCreator(address newCreator) external;
}A contract that calls launch becomes the token’s creator. Give it a way to call transferCreator, and a receive() function for fee payouts.
Errors
| Contract | Error | Meaning |
|---|---|---|
| LaunchFactory | InsufficientLaunchFee() | msg.value is below launchFee |
| LaunchFactory | TaxTooHigh() | A tax is above 1000 bps |
| LaunchToken | InvalidName() / InvalidSymbol() | Empty, or longer than 64 / 16 bytes |
| LaunchToken | NotCreator() | Caller is not the current creator |
| LaunchRouter | SlippageExceeded(out, min) | Output below your minimum |
| LaunchRouter | Expired() | block.timestamp > deadline |
| LaunchRouter | UnknownToken() | Token wasn’t launched by this factory |
| LaunchRouter | ZeroAmount() | Nothing to swap |
| LaunchHook | NothingToClaim() | No pending fees |
| TokenLocker / TokenStaking | NotLaunchpadToken() | Token wasn’t launched by the factory |
| TokenLocker / TokenStaking | WrongFee(sent, required) | Send exactly lockFee() / createFee() |
| TokenLocker | StillLocked() | Withdraw before unlockDate |
| TokenStaking | NotTokenCreator() | Only the token’s creator can open a pool |
| TokenStaking | BadConfig() | Duration 1h–4y, penalty ≤ 50%, name ≤ 48 bytes, start not in the past |
ABIs
Full ABIs, generated from the verified source. Click a contract to view it, or download the JSON.
LaunchFactory 36 entriesDownload›
[
{
"type": "constructor",
"inputs": [
{
"name": "_poolManager",
"type": "address",
"internalType": "contract IPoolManager"
},
{
"name": "_positionManager",
"type": "address",
"internalType": "contract IPositionManager"
},
{
"name": "_hook",
"type": "address",
"internalType": "contract LaunchHook"
},
{
"name": "_owner",
"type": "address",
"internalType": "address"
},
{
"name": "_launchFee",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_platformFeeBps",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "_startingTick",
"type": "int24",
"internalType": "int24"
},
{
"name": "_protocolShareBps",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "_protocolFeeRecipient",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"type": "receive",
"stateMutability": "payable"
},
{
"type": "function",
"name": "DEAD",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "MAX_PLATFORM_FEE_BPS",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint16",
"internalType": "uint16"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "MAX_PROTOCOL_SHARE_BPS",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint16",
"internalType": "uint16"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "MAX_TAX_BPS",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint16",
"internalType": "uint16"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "TICK_SPACING",
"inputs": [],
"outputs": [
{
"name": "",
"type": "int24",
"internalType": "int24"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "TOTAL_SUPPLY",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "allTokens",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "getLaunch",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "tuple",
"internalType": "struct LaunchFactory.LaunchInfo",
"components": [
{
"name": "key",
"type": "tuple",
"internalType": "struct PoolKey",
"components": [
{
"name": "currency0",
"type": "address",
"internalType": "Currency"
},
{
"name": "currency1",
"type": "address",
"internalType": "Currency"
},
{
"name": "fee",
"type": "uint24",
"internalType": "uint24"
},
{
"name": "tickSpacing",
"type": "int24",
"internalType": "int24"
},
{
"name": "hooks",
"type": "address",
"internalType": "contract IHooks"
}
]
},
{
"name": "tickLower",
"type": "int24",
"internalType": "int24"
},
{
"name": "tickUpper",
"type": "int24",
"internalType": "int24"
},
{
"name": "buyTaxBps",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "sellTaxBps",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "platformFeeBps",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "launchedAt",
"type": "uint64",
"internalType": "uint64"
},
{
"name": "lpTokenId",
"type": "uint256",
"internalType": "uint256"
}
]
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "hook",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract LaunchHook"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "launch",
"inputs": [
{
"name": "p",
"type": "tuple",
"internalType": "struct LaunchFactory.LaunchParams",
"components": [
{
"name": "name",
"type": "string",
"internalType": "string"
},
{
"name": "symbol",
"type": "string",
"internalType": "string"
},
{
"name": "metadataURI",
"type": "string",
"internalType": "string"
},
{
"name": "buyTaxBps",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "sellTaxBps",
"type": "uint16",
"internalType": "uint16"
}
]
}
],
"outputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "payable"
},
{
"type": "function",
"name": "launchFee",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "owner",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "platformFeeBps",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint16",
"internalType": "uint16"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "poolManager",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IPoolManager"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "positionManager",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IPositionManager"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "protocolFeeRecipient",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "protocolShareBps",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint16",
"internalType": "uint16"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "renounceOwnership",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "setSettings",
"inputs": [
{
"name": "_launchFee",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_platformFeeBps",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "_startingTick",
"type": "int24",
"internalType": "int24"
},
{
"name": "_protocolShareBps",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "_protocolFeeRecipient",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "startingTick",
"inputs": [],
"outputs": [
{
"name": "",
"type": "int24",
"internalType": "int24"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "totalLaunches",
"inputs": [],
"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": "unlockCallback",
"inputs": [
{
"name": "data",
"type": "bytes",
"internalType": "bytes"
}
],
"outputs": [
{
"name": "",
"type": "bytes",
"internalType": "bytes"
}
],
"stateMutability": "nonpayable"
},
{
"type": "event",
"name": "OwnershipTransferred",
"inputs": [
{
"name": "previousOwner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"type": "event",
"name": "SettingsUpdated",
"inputs": [
{
"name": "launchFee",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "platformFeeBps",
"type": "uint16",
"indexed": false,
"internalType": "uint16"
},
{
"name": "startingTick",
"type": "int24",
"indexed": false,
"internalType": "int24"
},
{
"name": "protocolShareBps",
"type": "uint16",
"indexed": false,
"internalType": "uint16"
},
{
"name": "protocolFeeRecipient",
"type": "address",
"indexed": false,
"internalType": "address"
}
],
"anonymous": false
},
{
"type": "event",
"name": "TokenLaunched",
"inputs": [
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "creator",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "poolId",
"type": "bytes32",
"indexed": true,
"internalType": "bytes32"
},
{
"name": "name",
"type": "string",
"indexed": false,
"internalType": "string"
},
{
"name": "symbol",
"type": "string",
"indexed": false,
"internalType": "string"
},
{
"name": "metadataURI",
"type": "string",
"indexed": false,
"internalType": "string"
},
{
"name": "buyTaxBps",
"type": "uint16",
"indexed": false,
"internalType": "uint16"
},
{
"name": "sellTaxBps",
"type": "uint16",
"indexed": false,
"internalType": "uint16"
},
{
"name": "platformFeeBps",
"type": "uint16",
"indexed": false,
"internalType": "uint16"
},
{
"name": "lpTokenId",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "initialBuyEth",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "initialBuyTokens",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"type": "error",
"name": "EthTransferFailed",
"inputs": []
},
{
"type": "error",
"name": "InsufficientLaunchFee",
"inputs": []
},
{
"type": "error",
"name": "InvalidSettings",
"inputs": []
},
{
"type": "error",
"name": "NotPoolManager",
"inputs": []
},
{
"type": "error",
"name": "OwnableInvalidOwner",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
}
]
},
{
"type": "error",
"name": "OwnableUnauthorizedAccount",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
]
},
{
"type": "error",
"name": "ReentrancyGuardReentrantCall",
"inputs": []
},
{
"type": "error",
"name": "TaxTooHigh",
"inputs": []
}
]LaunchRouter 16 entriesDownload›
[
{
"type": "constructor",
"inputs": [
{
"name": "_poolManager",
"type": "address",
"internalType": "contract IPoolManager"
},
{
"name": "_factory",
"type": "address",
"internalType": "contract LaunchFactory"
}
],
"stateMutability": "nonpayable"
},
{
"type": "receive",
"stateMutability": "payable"
},
{
"type": "function",
"name": "buy",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "minTokensOut",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "recipient",
"type": "address",
"internalType": "address"
},
{
"name": "deadline",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "tokensOut",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "payable"
},
{
"type": "function",
"name": "factory",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract LaunchFactory"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "poolManager",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IPoolManager"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "sell",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "amountIn",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "minEthOut",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "recipient",
"type": "address",
"internalType": "address"
},
{
"name": "deadline",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "ethOut",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "unlockCallback",
"inputs": [
{
"name": "raw",
"type": "bytes",
"internalType": "bytes"
}
],
"outputs": [
{
"name": "",
"type": "bytes",
"internalType": "bytes"
}
],
"stateMutability": "nonpayable"
},
{
"type": "event",
"name": "Buy",
"inputs": [
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "buyer",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "recipient",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "ethIn",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "tokensOut",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"type": "event",
"name": "Sell",
"inputs": [
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "seller",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "recipient",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "tokensIn",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "ethOut",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"type": "error",
"name": "EthTransferFailed",
"inputs": []
},
{
"type": "error",
"name": "Expired",
"inputs": []
},
{
"type": "error",
"name": "NotPoolManager",
"inputs": []
},
{
"type": "error",
"name": "SafeERC20FailedOperation",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
]
},
{
"type": "error",
"name": "SlippageExceeded",
"inputs": [
{
"name": "amountOut",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "minAmountOut",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"type": "error",
"name": "UnknownToken",
"inputs": []
},
{
"type": "error",
"name": "ZeroAmount",
"inputs": []
}
]LaunchHook 35 entriesDownload›
[
{
"type": "constructor",
"inputs": [
{
"name": "_poolManager",
"type": "address",
"internalType": "contract IPoolManager"
},
{
"name": "_deployer",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "MAX_FEE_BPS",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint16",
"internalType": "uint16"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "afterAddLiquidity",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
},
{
"name": "",
"type": "tuple",
"internalType": "struct PoolKey",
"components": [
{
"name": "currency0",
"type": "address",
"internalType": "Currency"
},
{
"name": "currency1",
"type": "address",
"internalType": "Currency"
},
{
"name": "fee",
"type": "uint24",
"internalType": "uint24"
},
{
"name": "tickSpacing",
"type": "int24",
"internalType": "int24"
},
{
"name": "hooks",
"type": "address",
"internalType": "contract IHooks"
}
]
},
{
"name": "",
"type": "tuple",
"internalType": "struct ModifyLiquidityParams",
"components": [
{
"name": "tickLower",
"type": "int24",
"internalType": "int24"
},
{
"name": "tickUpper",
"type": "int24",
"internalType": "int24"
},
{
"name": "liquidityDelta",
"type": "int256",
"internalType": "int256"
},
{
"name": "salt",
"type": "bytes32",
"internalType": "bytes32"
}
]
},
{
"name": "",
"type": "int256",
"internalType": "BalanceDelta"
},
{
"name": "",
"type": "int256",
"internalType": "BalanceDelta"
},
{
"name": "",
"type": "bytes",
"internalType": "bytes"
}
],
"outputs": [
{
"name": "",
"type": "bytes4",
"internalType": "bytes4"
},
{
"name": "",
"type": "int256",
"internalType": "BalanceDelta"
}
],
"stateMutability": "pure"
},
{
"type": "function",
"name": "afterDonate",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
},
{
"name": "",
"type": "tuple",
"internalType": "struct PoolKey",
"components": [
{
"name": "currency0",
"type": "address",
"internalType": "Currency"
},
{
"name": "currency1",
"type": "address",
"internalType": "Currency"
},
{
"name": "fee",
"type": "uint24",
"internalType": "uint24"
},
{
"name": "tickSpacing",
"type": "int24",
"internalType": "int24"
},
{
"name": "hooks",
"type": "address",
"internalType": "contract IHooks"
}
]
},
{
"name": "",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "",
"type": "bytes",
"internalType": "bytes"
}
],
"outputs": [
{
"name": "",
"type": "bytes4",
"internalType": "bytes4"
}
],
"stateMutability": "pure"
},
{
"type": "function",
"name": "afterInitialize",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
},
{
"name": "",
"type": "tuple",
"internalType": "struct PoolKey",
"components": [
{
"name": "currency0",
"type": "address",
"internalType": "Currency"
},
{
"name": "currency1",
"type": "address",
"internalType": "Currency"
},
{
"name": "fee",
"type": "uint24",
"internalType": "uint24"
},
{
"name": "tickSpacing",
"type": "int24",
"internalType": "int24"
},
{
"name": "hooks",
"type": "address",
"internalType": "contract IHooks"
}
]
},
{
"name": "",
"type": "uint160",
"internalType": "uint160"
},
{
"name": "",
"type": "int24",
"internalType": "int24"
}
],
"outputs": [
{
"name": "",
"type": "bytes4",
"internalType": "bytes4"
}
],
"stateMutability": "pure"
},
{
"type": "function",
"name": "afterRemoveLiquidity",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
},
{
"name": "",
"type": "tuple",
"internalType": "struct PoolKey",
"components": [
{
"name": "currency0",
"type": "address",
"internalType": "Currency"
},
{
"name": "currency1",
"type": "address",
"internalType": "Currency"
},
{
"name": "fee",
"type": "uint24",
"internalType": "uint24"
},
{
"name": "tickSpacing",
"type": "int24",
"internalType": "int24"
},
{
"name": "hooks",
"type": "address",
"internalType": "contract IHooks"
}
]
},
{
"name": "",
"type": "tuple",
"internalType": "struct ModifyLiquidityParams",
"components": [
{
"name": "tickLower",
"type": "int24",
"internalType": "int24"
},
{
"name": "tickUpper",
"type": "int24",
"internalType": "int24"
},
{
"name": "liquidityDelta",
"type": "int256",
"internalType": "int256"
},
{
"name": "salt",
"type": "bytes32",
"internalType": "bytes32"
}
]
},
{
"name": "",
"type": "int256",
"internalType": "BalanceDelta"
},
{
"name": "",
"type": "int256",
"internalType": "BalanceDelta"
},
{
"name": "",
"type": "bytes",
"internalType": "bytes"
}
],
"outputs": [
{
"name": "",
"type": "bytes4",
"internalType": "bytes4"
},
{
"name": "",
"type": "int256",
"internalType": "BalanceDelta"
}
],
"stateMutability": "pure"
},
{
"type": "function",
"name": "afterSwap",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
},
{
"name": "key",
"type": "tuple",
"internalType": "struct PoolKey",
"components": [
{
"name": "currency0",
"type": "address",
"internalType": "Currency"
},
{
"name": "currency1",
"type": "address",
"internalType": "Currency"
},
{
"name": "fee",
"type": "uint24",
"internalType": "uint24"
},
{
"name": "tickSpacing",
"type": "int24",
"internalType": "int24"
},
{
"name": "hooks",
"type": "address",
"internalType": "contract IHooks"
}
]
},
{
"name": "params",
"type": "tuple",
"internalType": "struct SwapParams",
"components": [
{
"name": "zeroForOne",
"type": "bool",
"internalType": "bool"
},
{
"name": "amountSpecified",
"type": "int256",
"internalType": "int256"
},
{
"name": "sqrtPriceLimitX96",
"type": "uint160",
"internalType": "uint160"
}
]
},
{
"name": "delta",
"type": "int256",
"internalType": "BalanceDelta"
},
{
"name": "",
"type": "bytes",
"internalType": "bytes"
}
],
"outputs": [
{
"name": "",
"type": "bytes4",
"internalType": "bytes4"
},
{
"name": "",
"type": "int128",
"internalType": "int128"
}
],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "beforeAddLiquidity",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
},
{
"name": "",
"type": "tuple",
"internalType": "struct PoolKey",
"components": [
{
"name": "currency0",
"type": "address",
"internalType": "Currency"
},
{
"name": "currency1",
"type": "address",
"internalType": "Currency"
},
{
"name": "fee",
"type": "uint24",
"internalType": "uint24"
},
{
"name": "tickSpacing",
"type": "int24",
"internalType": "int24"
},
{
"name": "hooks",
"type": "address",
"internalType": "contract IHooks"
}
]
},
{
"name": "",
"type": "tuple",
"internalType": "struct ModifyLiquidityParams",
"components": [
{
"name": "tickLower",
"type": "int24",
"internalType": "int24"
},
{
"name": "tickUpper",
"type": "int24",
"internalType": "int24"
},
{
"name": "liquidityDelta",
"type": "int256",
"internalType": "int256"
},
{
"name": "salt",
"type": "bytes32",
"internalType": "bytes32"
}
]
},
{
"name": "",
"type": "bytes",
"internalType": "bytes"
}
],
"outputs": [
{
"name": "",
"type": "bytes4",
"internalType": "bytes4"
}
],
"stateMutability": "pure"
},
{
"type": "function",
"name": "beforeDonate",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
},
{
"name": "",
"type": "tuple",
"internalType": "struct PoolKey",
"components": [
{
"name": "currency0",
"type": "address",
"internalType": "Currency"
},
{
"name": "currency1",
"type": "address",
"internalType": "Currency"
},
{
"name": "fee",
"type": "uint24",
"internalType": "uint24"
},
{
"name": "tickSpacing",
"type": "int24",
"internalType": "int24"
},
{
"name": "hooks",
"type": "address",
"internalType": "contract IHooks"
}
]
},
{
"name": "",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "",
"type": "bytes",
"internalType": "bytes"
}
],
"outputs": [
{
"name": "",
"type": "bytes4",
"internalType": "bytes4"
}
],
"stateMutability": "pure"
},
{
"type": "function",
"name": "beforeInitialize",
"inputs": [
{
"name": "sender",
"type": "address",
"internalType": "address"
},
{
"name": "key",
"type": "tuple",
"internalType": "struct PoolKey",
"components": [
{
"name": "currency0",
"type": "address",
"internalType": "Currency"
},
{
"name": "currency1",
"type": "address",
"internalType": "Currency"
},
{
"name": "fee",
"type": "uint24",
"internalType": "uint24"
},
{
"name": "tickSpacing",
"type": "int24",
"internalType": "int24"
},
{
"name": "hooks",
"type": "address",
"internalType": "contract IHooks"
}
]
},
{
"name": "",
"type": "uint160",
"internalType": "uint160"
}
],
"outputs": [
{
"name": "",
"type": "bytes4",
"internalType": "bytes4"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "beforeRemoveLiquidity",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
},
{
"name": "",
"type": "tuple",
"internalType": "struct PoolKey",
"components": [
{
"name": "currency0",
"type": "address",
"internalType": "Currency"
},
{
"name": "currency1",
"type": "address",
"internalType": "Currency"
},
{
"name": "fee",
"type": "uint24",
"internalType": "uint24"
},
{
"name": "tickSpacing",
"type": "int24",
"internalType": "int24"
},
{
"name": "hooks",
"type": "address",
"internalType": "contract IHooks"
}
]
},
{
"name": "",
"type": "tuple",
"internalType": "struct ModifyLiquidityParams",
"components": [
{
"name": "tickLower",
"type": "int24",
"internalType": "int24"
},
{
"name": "tickUpper",
"type": "int24",
"internalType": "int24"
},
{
"name": "liquidityDelta",
"type": "int256",
"internalType": "int256"
},
{
"name": "salt",
"type": "bytes32",
"internalType": "bytes32"
}
]
},
{
"name": "",
"type": "bytes",
"internalType": "bytes"
}
],
"outputs": [
{
"name": "",
"type": "bytes4",
"internalType": "bytes4"
}
],
"stateMutability": "pure"
},
{
"type": "function",
"name": "beforeSwap",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
},
{
"name": "key",
"type": "tuple",
"internalType": "struct PoolKey",
"components": [
{
"name": "currency0",
"type": "address",
"internalType": "Currency"
},
{
"name": "currency1",
"type": "address",
"internalType": "Currency"
},
{
"name": "fee",
"type": "uint24",
"internalType": "uint24"
},
{
"name": "tickSpacing",
"type": "int24",
"internalType": "int24"
},
{
"name": "hooks",
"type": "address",
"internalType": "contract IHooks"
}
]
},
{
"name": "params",
"type": "tuple",
"internalType": "struct SwapParams",
"components": [
{
"name": "zeroForOne",
"type": "bool",
"internalType": "bool"
},
{
"name": "amountSpecified",
"type": "int256",
"internalType": "int256"
},
{
"name": "sqrtPriceLimitX96",
"type": "uint160",
"internalType": "uint160"
}
]
},
{
"name": "",
"type": "bytes",
"internalType": "bytes"
}
],
"outputs": [
{
"name": "",
"type": "bytes4",
"internalType": "bytes4"
},
{
"name": "",
"type": "int256",
"internalType": "BeforeSwapDelta"
},
{
"name": "",
"type": "uint24",
"internalType": "uint24"
}
],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "claimCreatorFees",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "claimProtocolFees",
"inputs": [],
"outputs": [
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "deployer",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "factory",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "getHookPermissions",
"inputs": [],
"outputs": [
{
"name": "",
"type": "tuple",
"internalType": "struct Hooks.Permissions",
"components": [
{
"name": "beforeInitialize",
"type": "bool",
"internalType": "bool"
},
{
"name": "afterInitialize",
"type": "bool",
"internalType": "bool"
},
{
"name": "beforeAddLiquidity",
"type": "bool",
"internalType": "bool"
},
{
"name": "afterAddLiquidity",
"type": "bool",
"internalType": "bool"
},
{
"name": "beforeRemoveLiquidity",
"type": "bool",
"internalType": "bool"
},
{
"name": "afterRemoveLiquidity",
"type": "bool",
"internalType": "bool"
},
{
"name": "beforeSwap",
"type": "bool",
"internalType": "bool"
},
{
"name": "afterSwap",
"type": "bool",
"internalType": "bool"
},
{
"name": "beforeDonate",
"type": "bool",
"internalType": "bool"
},
{
"name": "afterDonate",
"type": "bool",
"internalType": "bool"
},
{
"name": "beforeSwapReturnDelta",
"type": "bool",
"internalType": "bool"
},
{
"name": "afterSwapReturnDelta",
"type": "bool",
"internalType": "bool"
},
{
"name": "afterAddLiquidityReturnDelta",
"type": "bool",
"internalType": "bool"
},
{
"name": "afterRemoveLiquidityReturnDelta",
"type": "bool",
"internalType": "bool"
}
]
}
],
"stateMutability": "pure"
},
{
"type": "function",
"name": "pendingCreatorFees",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "pendingProtocolFees",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "poolFees",
"inputs": [
{
"name": "",
"type": "bytes32",
"internalType": "PoolId"
}
],
"outputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "buyFeeBps",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "sellFeeBps",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "protocolShareBps",
"type": "uint16",
"internalType": "uint16"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "poolManager",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IPoolManager"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "registerPool",
"inputs": [
{
"name": "key",
"type": "tuple",
"internalType": "struct PoolKey",
"components": [
{
"name": "currency0",
"type": "address",
"internalType": "Currency"
},
{
"name": "currency1",
"type": "address",
"internalType": "Currency"
},
{
"name": "fee",
"type": "uint24",
"internalType": "uint24"
},
{
"name": "tickSpacing",
"type": "int24",
"internalType": "int24"
},
{
"name": "hooks",
"type": "address",
"internalType": "contract IHooks"
}
]
},
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "buyFeeBps",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "sellFeeBps",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "protocolShareBps",
"type": "uint16",
"internalType": "uint16"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "setFactory",
"inputs": [
{
"name": "_factory",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "unlockCallback",
"inputs": [
{
"name": "data",
"type": "bytes",
"internalType": "bytes"
}
],
"outputs": [
{
"name": "",
"type": "bytes",
"internalType": "bytes"
}
],
"stateMutability": "nonpayable"
},
{
"type": "event",
"name": "CreatorFeesClaimed",
"inputs": [
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "recipient",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"type": "event",
"name": "FeeCollected",
"inputs": [
{
"name": "poolId",
"type": "bytes32",
"indexed": true,
"internalType": "PoolId"
},
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "isBuy",
"type": "bool",
"indexed": false,
"internalType": "bool"
},
{
"name": "creatorAmount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "protocolAmount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"type": "event",
"name": "ProtocolFeesClaimed",
"inputs": [
{
"name": "recipient",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"type": "error",
"name": "FactoryAlreadySet",
"inputs": []
},
{
"type": "error",
"name": "FeeTooHigh",
"inputs": []
},
{
"type": "error",
"name": "HookNotImplemented",
"inputs": []
},
{
"type": "error",
"name": "NotDeployer",
"inputs": []
},
{
"type": "error",
"name": "NotFactory",
"inputs": []
},
{
"type": "error",
"name": "NotPoolManager",
"inputs": []
},
{
"type": "error",
"name": "NothingToClaim",
"inputs": []
},
{
"type": "error",
"name": "PoolNotRegistered",
"inputs": []
}
]LaunchToken 34 entriesDownload›
[
{
"type": "constructor",
"inputs": [
{
"name": "name_",
"type": "string",
"internalType": "string"
},
{
"name": "symbol_",
"type": "string",
"internalType": "string"
},
{
"name": "metadataURI_",
"type": "string",
"internalType": "string"
},
{
"name": "creator_",
"type": "address",
"internalType": "address"
},
{
"name": "totalSupply_",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "mintTo",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "MAX_NAME_LENGTH",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "MAX_SYMBOL_LENGTH",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "allowance",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
},
{
"name": "spender",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "approve",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "balanceOf",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "creator",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "decimals",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "factory",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "metadataURI",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "name",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "renameCount",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "setMetadataURI",
"inputs": [
{
"name": "uri",
"type": "string",
"internalType": "string"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "setNameAndSymbol",
"inputs": [
{
"name": "newName",
"type": "string",
"internalType": "string"
},
{
"name": "newSymbol",
"type": "string",
"internalType": "string"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "symbol",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "totalSupply",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "transfer",
"inputs": [
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "transferCreator",
"inputs": [
{
"name": "newCreator",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "transferFrom",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"type": "event",
"name": "Approval",
"inputs": [
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "spender",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"type": "event",
"name": "CreatorTransferred",
"inputs": [
{
"name": "previousCreator",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newCreator",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"type": "event",
"name": "MetadataURIUpdated",
"inputs": [
{
"name": "uri",
"type": "string",
"indexed": false,
"internalType": "string"
}
],
"anonymous": false
},
{
"type": "event",
"name": "MetadataUpdated",
"inputs": [
{
"name": "oldName",
"type": "string",
"indexed": false,
"internalType": "string"
},
{
"name": "oldSymbol",
"type": "string",
"indexed": false,
"internalType": "string"
},
{
"name": "newName",
"type": "string",
"indexed": false,
"internalType": "string"
},
{
"name": "newSymbol",
"type": "string",
"indexed": false,
"internalType": "string"
},
{
"name": "renameCount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"type": "event",
"name": "Transfer",
"inputs": [
{
"name": "from",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"type": "error",
"name": "ERC20InsufficientAllowance",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
},
{
"name": "allowance",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "needed",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"type": "error",
"name": "ERC20InsufficientBalance",
"inputs": [
{
"name": "sender",
"type": "address",
"internalType": "address"
},
{
"name": "balance",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "needed",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"type": "error",
"name": "ERC20InvalidApprover",
"inputs": [
{
"name": "approver",
"type": "address",
"internalType": "address"
}
]
},
{
"type": "error",
"name": "ERC20InvalidReceiver",
"inputs": [
{
"name": "receiver",
"type": "address",
"internalType": "address"
}
]
},
{
"type": "error",
"name": "ERC20InvalidSender",
"inputs": [
{
"name": "sender",
"type": "address",
"internalType": "address"
}
]
},
{
"type": "error",
"name": "ERC20InvalidSpender",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
}
]
},
{
"type": "error",
"name": "InvalidName",
"inputs": []
},
{
"type": "error",
"name": "InvalidSymbol",
"inputs": []
},
{
"type": "error",
"name": "NotCreator",
"inputs": []
},
{
"type": "error",
"name": "ZeroAddress",
"inputs": []
}
]TokenLocker 61 entriesDownload›
[
{
"type": "constructor",
"inputs": [
{
"name": "_feeReceiver",
"type": "address",
"internalType": "address"
},
{
"name": "_registry",
"type": "address",
"internalType": "contract ILaunchRegistry"
}
],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "acceptOwnership",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "claimFees",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "extendLock",
"inputs": [
{
"name": "lockId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "newUnlockDate",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "feeReceiver",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "getLock",
"inputs": [
{
"name": "lockId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "tuple",
"internalType": "struct TokenLocker.Lock",
"components": [
{
"name": "id",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "owner",
"type": "address",
"internalType": "address"
},
{
"name": "withdrawer",
"type": "address",
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "lockDate",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "unlockDate",
"type": "uint256",
"internalType": "uint256"
}
]
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "getLocksForToken",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "getLocksForTokenCount",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "getLocksForTokenPaginated",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "start",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "count",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "page",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "getLocksForUser",
"inputs": [
{
"name": "user",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "getLocksForUserCount",
"inputs": [
{
"name": "user",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "getLocksForUserPaginated",
"inputs": [
{
"name": "user",
"type": "address",
"internalType": "address"
},
{
"name": "start",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "count",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "page",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "incrementLock",
"inputs": [
{
"name": "lockId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "lock",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "unlockDate",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "withdrawer",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "lockId",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "payable"
},
{
"type": "function",
"name": "lockFee",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "locks",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "id",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "owner",
"type": "address",
"internalType": "address"
},
{
"name": "withdrawer",
"type": "address",
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "lockDate",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "unlockDate",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "nextLockId",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "owner",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "pendingFees",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "pendingOwner",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "registry",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract ILaunchRegistry"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "renounceOwnership",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "setFeeReceiver",
"inputs": [
{
"name": "newReceiver",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "setLockFee",
"inputs": [
{
"name": "newFee",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "setWithdrawer",
"inputs": [
{
"name": "lockId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "newWithdrawer",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "splitLock",
"inputs": [
{
"name": "lockId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "newLockId",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "transferLockOwnership",
"inputs": [
{
"name": "lockId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "newOwner",
"type": "address",
"internalType": "address"
},
{
"name": "transferWithdrawRights",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "transferOwnership",
"inputs": [
{
"name": "newOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "withdraw",
"inputs": [
{
"name": "lockId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "event",
"name": "FeeReceiverUpdated",
"inputs": [
{
"name": "newReceiver",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"type": "event",
"name": "FeeUpdated",
"inputs": [
{
"name": "newFee",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"type": "event",
"name": "FeesClaimed",
"inputs": [
{
"name": "receiver",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"type": "event",
"name": "LockCreated",
"inputs": [
{
"name": "lockId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "withdrawer",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "unlockDate",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"type": "event",
"name": "LockExtended",
"inputs": [
{
"name": "lockId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "newUnlockDate",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"type": "event",
"name": "LockIncremented",
"inputs": [
{
"name": "lockId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "amountAdded",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"type": "event",
"name": "LockOwnershipTransferred",
"inputs": [
{
"name": "lockId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "oldOwner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"type": "event",
"name": "LockSplit",
"inputs": [
{
"name": "originalLockId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "newLockId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"type": "event",
"name": "LockWithdrawn",
"inputs": [
{
"name": "lockId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "withdrawer",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"type": "event",
"name": "OwnershipTransferStarted",
"inputs": [
{
"name": "previousOwner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"type": "event",
"name": "OwnershipTransferred",
"inputs": [
{
"name": "previousOwner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"type": "event",
"name": "WithdrawerUpdated",
"inputs": [
{
"name": "lockId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "oldWithdrawer",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newWithdrawer",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"type": "error",
"name": "FeeTransferFailed",
"inputs": []
},
{
"type": "error",
"name": "InsufficientLockBalance",
"inputs": []
},
{
"type": "error",
"name": "InvalidSplitAmount",
"inputs": []
},
{
"type": "error",
"name": "LockMatured",
"inputs": []
},
{
"type": "error",
"name": "MustExtendForward",
"inputs": []
},
{
"type": "error",
"name": "NoFeesToClaim",
"inputs": []
},
{
"type": "error",
"name": "NotFeeReceiver",
"inputs": []
},
{
"type": "error",
"name": "NotLaunchpadToken",
"inputs": []
},
{
"type": "error",
"name": "NotLockOwner",
"inputs": []
},
{
"type": "error",
"name": "NotWithdrawer",
"inputs": []
},
{
"type": "error",
"name": "NothingReceived",
"inputs": []
},
{
"type": "error",
"name": "OwnableInvalidOwner",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
}
]
},
{
"type": "error",
"name": "OwnableUnauthorizedAccount",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
]
},
{
"type": "error",
"name": "ReentrancyGuardReentrantCall",
"inputs": []
},
{
"type": "error",
"name": "SafeERC20FailedOperation",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
]
},
{
"type": "error",
"name": "StillLocked",
"inputs": []
},
{
"type": "error",
"name": "UnlockInPast",
"inputs": []
},
{
"type": "error",
"name": "WrongFee",
"inputs": [
{
"name": "sent",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "required",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"type": "error",
"name": "ZeroAddress",
"inputs": []
},
{
"type": "error",
"name": "ZeroAmount",
"inputs": []
}
]TokenStaking 77 entriesDownload›
[
{
"type": "constructor",
"inputs": [
{
"name": "_feeReceiver",
"type": "address",
"internalType": "address"
},
{
"name": "_registry",
"type": "address",
"internalType": "contract ILaunchRegistry"
}
],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "MAX_PENALTY_BPS",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "YEAR",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "acceptOwnership",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "addRewards",
"inputs": [
{
"name": "poolId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "aprBpsFor",
"inputs": [
{
"name": "poolId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "hypotheticalStaked",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "claim",
"inputs": [
{
"name": "poolId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "paid",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "claimFees",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "compound",
"inputs": [
{
"name": "poolId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "added",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "createFee",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "createPool",
"inputs": [
{
"name": "cfg",
"type": "tuple",
"internalType": "struct TokenStaking.PoolConfig",
"components": [
{
"name": "stakeToken",
"type": "address",
"internalType": "address"
},
{
"name": "rewardToken",
"type": "address",
"internalType": "address"
},
{
"name": "startTime",
"type": "uint64",
"internalType": "uint64"
},
{
"name": "duration",
"type": "uint64",
"internalType": "uint64"
},
{
"name": "penaltyBps",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "minStake",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "maxStakePerWallet",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "maxTotalStaked",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "name",
"type": "string",
"internalType": "string"
}
]
},
{
"name": "rewardAmount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "id",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "payable"
},
{
"type": "function",
"name": "currentAprBps",
"inputs": [
{
"name": "poolId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "earned",
"inputs": [
{
"name": "poolId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "who",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "exit",
"inputs": [
{
"name": "poolId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "extendPool",
"inputs": [
{
"name": "poolId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "extraDuration",
"type": "uint64",
"internalType": "uint64"
},
{
"name": "extraRewards",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "feeReceiver",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "getPoolsByCreator",
"inputs": [
{
"name": "who",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "getPoolsByStakeToken",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "getPoolsForUser",
"inputs": [
{
"name": "who",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "nextPoolId",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "owner",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "penaltyFor",
"inputs": [
{
"name": "poolId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "pendingFees",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "pendingOwner",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "poolExists",
"inputs": [
{
"name": "poolId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "poolInfo",
"inputs": [
{
"name": "poolId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "tuple",
"internalType": "struct TokenStaking.Pool",
"components": [
{
"name": "cfg",
"type": "tuple",
"internalType": "struct TokenStaking.PoolConfig",
"components": [
{
"name": "stakeToken",
"type": "address",
"internalType": "address"
},
{
"name": "rewardToken",
"type": "address",
"internalType": "address"
},
{
"name": "startTime",
"type": "uint64",
"internalType": "uint64"
},
{
"name": "duration",
"type": "uint64",
"internalType": "uint64"
},
{
"name": "penaltyBps",
"type": "uint16",
"internalType": "uint16"
},
{
"name": "minStake",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "maxStakePerWallet",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "maxTotalStaked",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "name",
"type": "string",
"internalType": "string"
}
]
},
{
"name": "creator",
"type": "address",
"internalType": "address"
},
{
"name": "paused",
"type": "bool",
"internalType": "bool"
},
{
"name": "periodFinish",
"type": "uint64",
"internalType": "uint64"
},
{
"name": "lastUpdate",
"type": "uint64",
"internalType": "uint64"
},
{
"name": "rewardRate",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "rewardPerTokenStored",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "totalStaked",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "rewardReserve",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "accruedTotal",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "claimedTotal",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "totalRewardsAdded",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "stakers",
"type": "uint256",
"internalType": "uint256"
}
]
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "reclaimUndistributed",
"inputs": [
{
"name": "poolId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "registry",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract ILaunchRegistry"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "renounceOwnership",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "rewardsRemaining",
"inputs": [
{
"name": "poolId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "function",
"name": "setCreateFee",
"inputs": [
{
"name": "newFee",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "setFeeReceiver",
"inputs": [
{
"name": "newReceiver",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "setPaused",
"inputs": [
{
"name": "poolId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "paused",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "stake",
"inputs": [
{
"name": "poolId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "transferOwnership",
"inputs": [
{
"name": "newOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "unstake",
"inputs": [
{
"name": "poolId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "users",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "staked",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "rewardPerTokenPaid",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "rewards",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "firstStakeAt",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"type": "event",
"name": "Claimed",
"inputs": [
{
"name": "poolId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "user",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"type": "event",
"name": "FeeReceiverUpdated",
"inputs": [
{
"name": "newReceiver",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"type": "event",
"name": "FeeUpdated",
"inputs": [
{
"name": "newFee",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"type": "event",
"name": "FeesClaimed",
"inputs": [
{
"name": "receiver",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"type": "event",
"name": "OwnershipTransferStarted",
"inputs": [
{
"name": "previousOwner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"type": "event",
"name": "OwnershipTransferred",
"inputs": [
{
"name": "previousOwner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"type": "event",
"name": "PoolCreated",
"inputs": [
{
"name": "poolId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "creator",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "stakeToken",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "rewardToken",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "startTime",
"type": "uint64",
"indexed": false,
"internalType": "uint64"
},
{
"name": "duration",
"type": "uint64",
"indexed": false,
"internalType": "uint64"
},
{
"name": "rewards",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "penaltyBps",
"type": "uint16",
"indexed": false,
"internalType": "uint16"
},
{
"name": "name",
"type": "string",
"indexed": false,
"internalType": "string"
}
],
"anonymous": false
},
{
"type": "event",
"name": "PoolExtended",
"inputs": [
{
"name": "poolId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "newFinish",
"type": "uint64",
"indexed": false,
"internalType": "uint64"
},
{
"name": "addedRewards",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "rewardRate",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"type": "event",
"name": "PoolPausedSet",
"inputs": [
{
"name": "poolId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "paused",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"type": "event",
"name": "RewardsAdded",
"inputs": [
{
"name": "poolId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "from",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "periodFinish",
"type": "uint64",
"indexed": false,
"internalType": "uint64"
},
{
"name": "rewardRate",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"type": "event",
"name": "Staked",
"inputs": [
{
"name": "poolId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "user",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"type": "event",
"name": "UndistributedReclaimed",
"inputs": [
{
"name": "poolId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"type": "event",
"name": "Unstaked",
"inputs": [
{
"name": "poolId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "user",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "penalty",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"type": "error",
"name": "AboveMaxStake",
"inputs": []
},
{
"type": "error",
"name": "BadConfig",
"inputs": []
},
{
"type": "error",
"name": "BelowMinStake",
"inputs": []
},
{
"type": "error",
"name": "Ended",
"inputs": []
},
{
"type": "error",
"name": "FeeTransferFailed",
"inputs": []
},
{
"type": "error",
"name": "InsufficientStake",
"inputs": []
},
{
"type": "error",
"name": "NoFeesToClaim",
"inputs": []
},
{
"type": "error",
"name": "NotCreator",
"inputs": []
},
{
"type": "error",
"name": "NotEnded",
"inputs": []
},
{
"type": "error",
"name": "NotFeeReceiver",
"inputs": []
},
{
"type": "error",
"name": "NotLaunchpadToken",
"inputs": []
},
{
"type": "error",
"name": "NotStarted",
"inputs": []
},
{
"type": "error",
"name": "NotTokenCreator",
"inputs": []
},
{
"type": "error",
"name": "NothingReceived",
"inputs": []
},
{
"type": "error",
"name": "NothingToClaim",
"inputs": []
},
{
"type": "error",
"name": "NothingToReclaim",
"inputs": []
},
{
"type": "error",
"name": "OwnableInvalidOwner",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
}
]
},
{
"type": "error",
"name": "OwnableUnauthorizedAccount",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
]
},
{
"type": "error",
"name": "PoolFull",
"inputs": []
},
{
"type": "error",
"name": "PoolNotFound",
"inputs": []
},
{
"type": "error",
"name": "PoolPaused",
"inputs": []
},
{
"type": "error",
"name": "ReentrancyGuardReentrantCall",
"inputs": []
},
{
"type": "error",
"name": "RewardTokenMismatch",
"inputs": []
},
{
"type": "error",
"name": "SafeERC20FailedOperation",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
]
},
{
"type": "error",
"name": "WrongFee",
"inputs": [
{
"name": "sent",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "required",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"type": "error",
"name": "ZeroAddress",
"inputs": []
},
{
"type": "error",
"name": "ZeroAmount",
"inputs": []
}
]