Arrow
Overview
Arrow is a suite of on-chain products on Robinhood Chain: a CDP stablecoin protocol where vaults mint aUSD against collateral, and a launchpad where anyone can create and trade meme tokens that graduate onto Uniswap V3. Both are non-custodial, and both are documented here.
CDP · aUSD
How the CDP holds together
Three pieces keep the system sound: vaults that must stay above their liquidation threshold, a Stability Pool that clears any that do not, and a governance-controlled Surplus Buffer that accrues protocol revenue. Together they keep aUSD overcollateralized every block.
aUSD and the peg
aUSD is a single debt token, minted and burned only by Vault Managers when you borrow and repay. It is not backed by a basket of incentives or an algorithm. It is backed by more than a dollar of collateral per unit, enforced by the liquidation threshold on every market.
The peg holds because the system stays overcollateralized. If a vault's collateral falls toward its debt, the Stability Pool steps in and clears it before the system can go underwater.
Vaults and minting
A vault is one asset, one debt, one position. Supply collateral, then mint aUSD up to the market's max loan-to-value. The terminal shows your collateral value, how much you can still borrow, your health factor, and the exact price at which you would be liquidated.
Collateral and markets
Arrow accepts crypto (WETH), the USDG stablecoin, and tokenized equities across two risk tiers. Each market carries its own max LTV, liquidation threshold, and penalty, set by governance and shown live in the markets table.
Stability Pool
The Stability Pool is the protocol’s backstop. Deposit aUSD and, when a vault is liquidated, the pool burns that debt and receives the seized collateral at a 5 to 10 percent discount to oracle price. Depositors share the collateral pro rata.
Liquidations
When a vault’s health factor drops below 1.00, its debt is cleared against the Stability Pool and its collateral is seized at a discount. If the pool is ever short, a redistribution fallback spreads the position across remaining vaults so the system stays solvent.
Launchpad
Launchpad
The launchpad lets anyone create and trade meme tokens on Robinhood Chain. Every token launches with a fixed supply of 1 billion, minted once and never again, and sells through an automated bonding curve. When the curve sells out, the token graduates: it lists itself on Uniswap V3 in the same transaction, with the liquidity locked permanently. There is no team allocation and no admin mint.
Token economics
Of the 1 billion supply, 80% (800 million tokens) is sold on the bonding curve and 20% (200 million) is reserved to seed the Uniswap pool at graduation.
The curve is a constant-product market with virtual reserves, the same math as a Uniswap V2 pool, so the price rises smoothly with every buy. Under the current curve parameters the price climbs roughly 13× between the first and the last curve token, and a curve that sells out has raised about 4 ETH. Each token snapshots the parameters at creation, so retuning by the operator only affects future launches.
Creating a token
Creating a token is one transaction. Pick a name, symbol, description, and an image (stored on IPFS), and optionally add website, Twitter, and Telegram links. The deploy fee, currently — (read live from the contract), goes to the protocol treasury. Token creation is permissionless.
You can optionally buy your own launch in the same transaction: any ETH sent above the deploy fee is spent on the curve before anyone else can trade. The Uniswap pool your token will graduate into is pre-created and price-initialized at launch, so nobody can squat it in the meantime.
Trading on the curve
Buys and sells settle in native ETH directly against the bonding curve. Quotes come from the Launchpad contract on-chain and trades route through the ReferralRouter; a — fee, denominated in ETH and read live from the contract, applies to each trade. Selling requires a one-time token approval first. The app simulates every trade before you sign and enforces your slippage setting.
Launchpad tokens are ordinary ERC-20s: you can transfer them freely while they are on the curve. The single restriction is transfers into the not-yet-opened Uniswap pool, which are blocked until graduation so the pool cannot be manipulated early.
Graduation
When the last of the 800 million curve tokens sells, graduation runs automatically inside that final buy (anyone may also trigger it explicitly once the curve is complete). All of the ETH the curve raised is wrapped to WETH and paired with the reserved 200 million tokens in a full-range Uniswap V3 position at the 1% fee tier. No cut is taken at graduation.
The LP position is minted directly into the LpHolder contract, which has no function to withdraw it, so the liquidity is locked permanently. The protocol can only collect the trading fees the pool earns. After graduation, the app routes buys and sells through the official Uniswap V3 deployment instead of the curve.
Fees
Four fees exist end to end, and the first two are read live on this page: the deploy fee (—, paid once at creation), the curve trade fee (— per trade while on the curve), no graduation fee, and after graduation the fixed 1% Uniswap V3 pool fee, which accrues to the permanently locked liquidity position and is collectable only by the protocol.
Curve trade fees flow through a referral system: a trade attributed to a referral code shares 20 to 30 percent of the fee with the referrer, and the remainder goes to the protocol treasury. The Arrow interface currently passes no referral code, so its trades route the full fee to the treasury.
Contract addresses
The live launchpad deployment on Robinhood Chain. The Launchpad and ReferralRouter are the addresses this app itself transacts with; the supporting contracts were read from the Launchpad’s own on-chain getters.
| Launchpad | 0x1Badc838AAe6ac41829180744ea2e1C89b452aAe |
| ReferralRouter | 0xC216662891De8eaf591cfc74E1b33ABc1779eaFb |
| ConstantProductCurve | 0x48BF6a9d8636e75be9a853b74833Db68F5C8d0E7 |
| LpHolder (LP lock) | 0x9ca167E52A86e54E49EBf813468E6f2BE6A94c57 |
| AccessRegistry | 0xF9db4fED8bb8c31177752EB5841597d368ee921b |
| Treasury (wallet) | 0x14666f06dEC710709F38658A90bA4564124dF862 |
| Uniswap V3 Factory | 0x1f7d7550B1b028f7571E69A784071F0205FD2EfA |
| Uniswap SwapRouter02 | 0xCaf681a66D020601342297493863E78C959E5cb2 |
| Uniswap QuoterV2 | 0x33e885eD0Ec9bF04EcfB19341582aADCb4c8A9E7 |
| WETH9 | 0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73 |
REST API (Swagger)
Every figure the launchpad UI shows (token lists, per-token summaries, trades, holders, OHLC candles) comes from the launchpad REST API under https://launchpad-api.arrowfinance.io/api. The full interactive reference is the Swagger UI at https://launchpad-api.arrowfinance.io. Every endpoint is listed there and can be called directly from the browser. The API is read-only and needs no key; the sole write endpoint is the image upload below.
Developer examples
Three end-to-end examples against the live deployment: upload a token image through the backend, create a token, and trade it on the curve. The contract snippets use viem, and every address is the one this app itself transacts with.
1 · Upload an image to IPFS
# PNG or JPG, up to 1 MB. Returns the IPFS hash used in createLaunchpadToken.
curl -F "file=@meme.png" https://launchpad-api.arrowfinance.io/api/image
# → { "data": { "ipfsHash": "Qm..." } }2 · Create a token
import { createPublicClient, createWalletClient, http, parseAbi, parseEther } from 'viem';
const chain = {
id: 4663, name: 'Robinhood Chain',
nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },
rpcUrls: { default: { http: ['https://rpc.mainnet.chain.robinhood.com'] } },
};
const LAUNCHPAD = '0x1Badc838AAe6ac41829180744ea2e1C89b452aAe';
const abi = parseAbi([
'function creationCost() view returns (uint64)',
'function createLaunchpadToken((string name,string symbol) tokenConfig,(string ipfsHash,string website,string twitter,string telegram,string description,string metadata) metadataConfig,(uint256 minAmountOut) snipeConfig) payable returns (address token,address gauge)',
]);
const publicClient = createPublicClient({ chain, transport: http() });
const cost = await publicClient.readContract({ address: LAUNCHPAD, abi, functionName: 'creationCost' });
const initialBuy = parseEther('0.001'); // optional: buy your own launch in the same tx (0n to skip)
const { request, result } = await publicClient.simulateContract({
address: LAUNCHPAD, abi, functionName: 'createLaunchpadToken',
args: [
{ name: 'My Meme', symbol: 'MEME' },
{ ipfsHash, website: '', twitter: '', telegram: '', description: 'to the moon', metadata: '' },
{ minAmountOut: 0n }, // slippage floor for the initial buy
],
value: BigInt(cost) + initialBuy, // deploy fee + initial buy, one payment
account,
});
const [token, gauge] = result; // your new token + its bonding-curve market
await walletClient.writeContract(request);3 · Trade on the bonding curve
import { parseAbi, parseEther, zeroHash } from 'viem';
const LAUNCHPAD = '0x1Badc838AAe6ac41829180744ea2e1C89b452aAe'; // quotes
const ROUTER = '0xC216662891De8eaf591cfc74E1b33ABc1779eaFb'; // trades
const quoteAbi = parseAbi([
'function quote(address token,uint256 amount,uint8 quoteType) view returns ((uint256 amountInEth,uint256 amountInToken,uint256 amountOutEth,uint256 amountOutToken))',
]);
const routerAbi = parseAbi([
'function buyExactEth(address token,uint256 minAmountOut,bytes32 code) payable',
'function sellExactTokens(address token,uint256 amountIn,uint256 minAmountOut,bytes32 code)',
]);
// BUY: quoteType 2 = buyExactEth (exact ETH in)
const spend = parseEther('0.01');
const q = await publicClient.readContract({
address: LAUNCHPAD, abi: quoteAbi, functionName: 'quote', args: [token, spend, 2],
});
const minOut = (q.amountOutToken * 99n) / 100n; // 1% slippage
await walletClient.writeContract({
address: ROUTER, abi: routerAbi, functionName: 'buyExactEth',
args: [token, minOut, zeroHash], value: spend, account, chain,
});
// SELL: approve the router once, then quoteType 1 = sellExactTokens (exact tokens in)
// await walletClient.writeContract({ address: token, abi: erc20Abi, functionName: 'approve', args: [ROUTER, amountIn], ... })
const sq = await publicClient.readContract({
address: LAUNCHPAD, abi: quoteAbi, functionName: 'quote', args: [token, amountIn, 1],
});
await walletClient.writeContract({
address: ROUTER, abi: routerAbi, functionName: 'sellExactTokens',
args: [token, amountIn, (sq.amountOutEth * 99n) / 100n, zeroHash], account, chain,
});
// After graduation the curve refuses trades. Swap the token/WETH pair on
// Uniswap V3 instead (SwapRouter02 0xCaf681a66D020601342297493863E78C959E5cb2, 1% fee tier).Audit
The launchpad contracts are a permissioned fork of DegenX. The original DegenX contracts were audited by PeckShield: read the audit report.
Launchpad risks
Meme tokens are extremely speculative and most go to zero. Anyone can create a token with any name and image, so always verify the contract address before trading; the token page links every token to the explorer. Locked liquidity prevents a classic rug pull, but it does not prevent the price from collapsing. The concentration figures on the token page (top-10 holders, creator holdings) are the honest safety signals: high concentration means a few wallets can dump on you.
Staking & Governance
Staking and veARROW
Lock ARROW to receive veARROW, your weight in governance. Longer locks carry more weight, up to a 24-month maximum, and weight decays linearly toward the unlock date. veARROW is a governance instrument: it has no claim on protocol assets or debt.
Governance
veARROW holders govern the protocol through a Governor and a Timelock. Proposals set calldata, pass a weighted vote with quorum, queue in the Timelock for a review window, and then execute on chain. Collateral onboarding, LTV limits, and fee splits all flow through this path.
General
Bridging in
Move assets onto Robinhood Chain through the bridge, then supply them as collateral. The Bridge link in the header opens the route. Always confirm the destination chain and the token address before you sign.
Risks
Arrow is a non-custodial protocol suite. Interacting with smart contracts carries real risk, including oracle failure, liquidation, and the partial or total loss of funds. Nothing here is financial advice. aUSD is a debt instrument, not a deposit, and launchpad tokens are speculative assets.