How Doggo works.
Doggo is a memecoin launchpad on DogeOS, the EVM layer built for Dogecoin. One transaction creates a token, mints its entire supply into a Uniswap V4 pool priced in native DOGE, and locks that position forever. From the first block anyone can buy and sell against the curve; fees are charged in DOGE inside each swap and paid out in DOGE. There is no migration step, no team allocation and no way for Doggo to withdraw liquidity.
DogeOS is currently live as the Chikyū testnet. Everything on this site runs there: the DOGE involved is test DOGE from the faucet, and prices in USD are derived from the mainnet Dogecoin price so the curve behaves like it will on mainnet.
At a glance
| Chain | DogeOS Chikyū testnet (chain id 6281971) |
|---|---|
| DEX | Uniswap V4 PoolManager, LP fee 0, tick spacing 200, one shared hook |
| Quote asset | Native DOGE (currency0); the token is currency1 |
| Supply | 1,000,000,000 tokens, 18 decimals, all minted into one locked curve position |
| Start → graduation | Fully diluted value set on the factory in DOGE, pegged to about $2.5k → $45k at the mainnet DOGE price |
| Creator tax | 0–10% on buys and 0–10% on sells, fixed at launch, charged in DOGE |
| Sniper tax | 99% at launch, decaying to 0% within 3 seconds; the creator's own first buy is exempt |
| Liquidity | Owned by an immutable locker; never withdrawn, never migrated |
| Token address | Always ends in d09e, mined in your browser before you sign |
Network
Add DogeOS testnet to any EVM wallet with these values; the connect button on this site does it for you.
| Network name | DogeOS Testnet |
|---|---|
| Chain id | 6281971 |
| RPC | https://rpc.testnet.dogeos.com |
| Currency | DOGE (18 decimals) |
| Explorer | https://blockscout.testnet.dogeos.com |
| Faucet | https://faucet.testnet.dogeos.com — test DOGE once a day |
DogeOS is a zkEVM: transaction fees are an execution part plus a data-availability part, both paid in DOGE. A launch costs about one million gas; a swap a few hundred thousand. Blocks arrive every few seconds.
Launching a token
Launching is one call to DoggoFactory.launchToken. In order, the transaction:
- Deploys a minimal-proxy clone of the token implementation at a CREATE2 address committed to your metadata and ending in
d09e. - Initialises it with the name, symbol, image URL, description and links; the whole supply is minted to the factory.
- Initialises the Uniswap V4 pool at the start price and registers the pool with the hook (your tax rates and the graduation tick).
- Hands the supply to the locker, which mints one one-sided position from the start tick down to the minimum tick. Nothing else ever adds or removes liquidity.
- Records your fee payout wallet if you set one.
- If you sent DOGE beyond the launch fee, buys with it through the router in the same transaction. That buy is exempt from the sniper tax and the tokens go straight to your wallet.
Metadata and the address
The salt is keccak(deployer ‖ userSalt ‖ keccak(params)), so the address depends on the name, symbol, image, description and links. Changing any of them after mining restarts the search; the fee wallet is excluded on purpose so you can change it without re-mining. The search runs in your browser, takes a few seconds, and needs no server.
Images
Images are uploaded to an edge-cached bucket and the token stores the resulting https:// URL on chain. Square PNG, JPG, GIF or WebP up to 2 MB. Keys are content-addressed, so the same file always resolves to the same URL.
Tax
Buy and sell taxes are chosen at launch, capped at 10% each, and cannot be changed afterwards. They are charged on the DOGE side of every swap by the hook and your share accrues in the locker until claimed. A token with 0 / 0 tax is perfectly valid.
The curve
Each pool holds exactly one concentrated-liquidity position covering the price range from the start tick down to the minimum usable tick, with the whole supply on the token side and nothing on the DOGE side. Because liquidity is constant across that range, buying along it reproduces the familiar constant-product shape: the price in DOGE rises smoothly as supply leaves the curve, with no discontinuities and no reserve to migrate.
Prices in the interface are computed locally from the pool's sqrtPriceX96: with the token as currency1, DOGE per token is 1 / (√P)². Market cap is that price times the full supply. For a Uniswap V4 position with liquidity L, the DOGE needed to move from √P₀ to√P₁ is L · (√P₀ − √P₁) / (√P₀ · √P₁), which is what the trade panel quotes before the hook's fee is applied.
The start and graduation levels are stored on the factory as fully diluted values in DOGE wei (launchConfig). They are expressed in DOGE but anchored to dollar targets at the mainnet DOGE price; the owner can re-anchor them for future launches when the price moves. Existing pools keep the values they launched with.
Trading
Swaps go through DoggoRouter, a thin contract that unlocks the PoolManager, performs one exact-input swap against the token's pool and settles. Buys send DOGE as msg.value; sells need a one-time ERC-20 approval of the router. Both take a minimum output and a deadline, and the router refunds nothing because exact-input swaps never leave change.
buy(PoolKey key, uint256 minOut, address recipient, uint256 deadline) payable
sell(PoolKey key, uint256 amountIn, uint256 minOut, address recipient, uint256 deadline)The pool is a normal Uniswap V4 pool, so any router, aggregator or bot that speaks V4 can trade it directly; the hook applies the same fees regardless of who calls. The trade panel uses 2% slippage and a ten-minute deadline by default and warns while the sniper tax is still active.
Every swap emits a Trade event from the router and a Swap event from the PoolManager; the trades tab on a token page is built from both.
Fees, all in DOGE
Fees are taken by the hook inside the swap, on the DOGE leg only, so a trader never ends up holding a tax token and sellers receive DOGE net of fees.
- Creator tax — the buy and sell rates chosen at launch (up to 10% each). The creator's share accrues in the locker.
- Sniper tax — a surcharge that starts at 99% in the launch block and halves repeatedly until it reaches 0% three seconds later. It makes front-running the creator's launch pointless; the creator's own first buy inside the launch transaction is exempt.
- Protocol fee — a fixed share of every swap that funds Doggo. It is already included in every quote shown on the site.
Claiming
The token page shows the DOGE claimable right now and the DOGE paid out so far. Anyone may call DoggoLocker.claimFees(token); it always pays the creator's payout wallet, never the caller. The payout wallet defaults to the deployer and can be changed by the creator with setFeeRedirect. If a payout wallet rejects DOGE (a contract without a receive function), the amount is parked in owed and can be pulled with withdrawOwed.
Fees are held as PoolManager claim tokens (ERC-6909) until claimed and redeemed into native DOGE in the claim transaction, so the locker never holds a DOGE balance that could be mis-sent.
Graduation
When a buy pushes the pool price past the graduation level, the hook latches graduated for that pool and emits Graduated. The flag is permanent and purely informational: it is the milestone shown on the card and the token page, and a signal for aggregators that the token has real depth.
Nothing changes mechanically. The same pool, the same locked position and the same fees keep working, and the price can keep rising past graduation or fall back below it. There is no second pool, no liquidity migration, no window where trading pauses.
Liquidity and the locker
DoggoLocker is the only liquidity provider in every Doggo pool. It has no function to remove liquidity, no owner withdrawal and no upgrade path; its owner can only change where the protocol share of fees is sent. Because the hook rejects pool initialisation from anyone but the factory, nobody can create a competing pool with the same key either.
As tokens are bought, DOGE accumulates inside the position and tokens leave it; as they are sold, the reverse. The DOGE is always there to buy back every circulating token down to the start price — that is what a one-sided curve with locked liquidity guarantees.
The token contract
Each token is an EIP-1167 minimal proxy of DoggoToken, a plain ERC-20 with fixed supply, no mint, no blacklist, no transfer tax and no owner. The on-chain record also exposes logo(), description(), socials(), deployer(), poolKey() and poolId() so any front-end can rebuild a token page from the chain alone. Block explorers resolve the proxy to the verified implementation.
Transfer taxes live in the hook, not the token: holding or moving the token between wallets is free, only swaps against the pool are taxed.
Integration for bots and developers
Discover tokens
Listen for TokenLaunched(address token, address deployer, bytes32 poolId, uint16 buyTaxBps, uint16 sellTaxBps, uint256 graduationFdv, uint256 initialBuyAmount) on the factory, or read getLaunchedToken(token) for the position bounds and liquidity. predictTokenAddress and tokenParamsHash let you mine salts off-site.
Read prices
The PoolKey is { currency0: 0x0, currency1: token, fee: 0, tickSpacing: 200, hooks: 0x67D84E62A0BaCFd58c1339e9019c7244B404E0CC }. Readslot0 through the public StateView at 0x2D5d504c30e72ebe607102ff2adB2dcc1f6eC85E or via PoolManager.extsload, and quote with the V4 Quoter at 0x307b62FdFbF6F611c127e7f23fF1C545a179a0a5; the hook's fee is applied inside the quote.
Swap
Call DoggoRouter.buy / sell as shown above, or swap through the PoolManager directly with your own unlock callback. Hook data is ignored for external callers, and the hook never reverts a swap for size: there are no wallet caps.
Events
| Factory | TokenLaunched, LaunchConfigUpdated |
|---|---|
| Router | Trade(token, trader, recipient, isBuy, amountIn, amountOut) |
| Hook | PoolRegistered, FeeTaken(poolId, toProtocol, toCreator, snipe), Graduated(poolId, token, tick) |
| Locker | PositionLocked, FeesClaimed(token, creator, creatorAmount, protocolAmount), FeeRedirectUpdated |
Data API
The site indexes the chain into a database and serves read-only JSON. Endpoints are unauthenticated and rate-limited by the edge; they are a convenience, not the source of truth — everything in them can be rebuilt from the events above.
GET /api/activity | Every token with metadata, live curve state, accrued fees, holder and trade counts, the DOGE price and the snapshot time. |
|---|---|
GET /api/trades?pool= | Most recent swaps for a pool id: side, trader, DOGE and token amounts, price after the swap, transaction hash. |
GET /api/holders?token= | Top balances for a token, folded from Transfer logs. The PoolManager row is the curve. |
GET /api/chart?pool=&since= | Price samples for a pool as sqrtPriceX96 with unix timestamps. |
POST /api/rpc | Same-origin JSON-RPC relay to the DogeOS node, used by the site's own wallet client. |
Base URL: https://doggofamily.com. Amounts are decimal strings in wei; addresses are lower-cased.
Trust model
- The token, locker, hook and router are immutable. No pause, no upgrade, no liquidity withdrawal, no mint.
- The factory owner can change the launch fee, the start and graduation levels for future launches, the DEX wiring for future launches, and can pause new launches. None of this touches an existing pool.
- The locker owner can change the protocol fee recipient and the protocol's share of future creator-tax accruals. It cannot redirect a creator's payout or touch the position.
- Creator metadata is immutable once launched; only the fee payout wallet can be changed, and only by the creator.
- The contracts are verified on the explorer; the addresses are listed below and in the footer of every page.
This is a testnet deployment. The contracts are a self-assessed port of a design already running on another chain, not an independently audited release; treat them accordingly and never use a wallet that holds real funds.
FAQ
Why does my token page say "no trades yet" right after launch?
The indexer runs after each request and once a minute; a launch normally shows within a few seconds. Your own transactions trigger an immediate refresh.
Can I change the image or description?
No. They are part of the address derivation and stored on chain at launch. Launch a new token if you need different metadata.
What happens to the DOGE in the pool?
It stays in the locked position as the buy-side depth for everyone who wants to sell. Doggo cannot withdraw it; neither can the creator.
Does Doggo list the token anywhere else?
The pool is a public Uniswap V4 pool on DogeOS and is visible to any indexer that reads the PoolManager. Doggo does not submit listings on your behalf.
Where does the USD price come from?
From the mainnet Dogecoin price, refreshed about once a minute. On-chain values are always in DOGE; USD is display only.
I sent DOGE to the token address by mistake.
The token has no receive function, so a plain DOGE transfer to it reverts and nothing is lost. ERC-20 tokens sent there cannot be recovered.
Contracts
Source is verified on the explorer for each address; the token implementation is linked from any launched token's page there.