@vetodotfun/sdk; every step is also doable at the contract level (reference).
1
Connect to Arc
2
Pin the metadata
The contract stores one string, veto.fun reads
metadataURI. Point it at a JSON document (IPFS is conventional) with at least: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 It always moves the whole creator share. veto.fun tracks
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: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 chainarc) 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
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.

