Skip to main content
Anything that can sign an Arc transaction can launch a Veto token. This guide is the end-to-end creation flow with @vetodotfun/sdk; every step is also doable at the contract level (reference).
1

Connect to Arc

Gas on Arc is USDC. The user needs a few USDC in the wallet: the flat creation fee, the optional dev buy, and about $0.01 of gas.
2

Pin the metadata

The contract stores one string, metadataURI. Point it at a JSON document (IPFS is conventional) with at least:
veto.fun reads description, image and socials from this document when it indexes the launch, so tokens created through your integration show up on veto.fun fully populated.
3

Read the live config

Never hard-code the fee or the split; the owner can tune them for future launches.
4

Launch

launch simulates, sends, waits for the receipt and decodes TokenCreated for you. The creation fee is added to msg.value automatically, so devBuyEth is exactly the dev buy. The token address is not knowable in advance (the CREATE2 salt is mined on-chain), so always take it from the result.
5

Route the creator fee stream (optional)

By default the creator’s share of pool fees is paid to the launching wallet. Pass feeRecipient at launch to pay a different wallet — a team multisig, a partner, your own platform — in the same transaction. The current recipient can move the stream again later:
It always moves the whole creator share. veto.fun tracks FeeRecipientSet and shows the recipient wallet the token in its studio, so whoever you route to can claim without any help from you.
6

Show the result

Everything you need to render a coin page is on-chain or one public call away:
  • Coin page on veto.fun: https://veto.fun/coin/${token}
  • Pool on Uniswap and every chart site (GeckoTerminal network id arc, DexScreener chain arc) from the first swap.
  • Who is paid: GET https://api.veto.fun/api/launchpad/recipient/${token}{ creator, feeRecipient, creatorLpShareBps }.

Claiming as an integrator

If you route fee streams to your own wallet you can harvest them yourself, in bulk, with no dependency on veto.fun:
collectFees is callable by the recipient, the treasury, or Veto’s claim authority, and the money only ever goes to the recipient; no caller can redirect it. Claimable amounts can be previewed with a static call (publicClient.simulateContract on the locker’s collectFees), which is exactly what veto.fun’s studio does.

Watching launches

Arc’s public RPC has no websocket and caps eth_getLogs at about 2000 blocks per call; the watcher is built around chunked polling for exactly that reason. Blocks are ~500 ms and final on inclusion, so one confirmation is enough.

Full SDK reference

Every read, write, quote and event handler.