Capy
CAPYPAD

CapyPad Multi-Chain Protocol

CapyPad is a non-custodial, multi-chain fair-launch bonding curve launchpad and high-frequency trading terminal deployed natively across Base (Coinbase L2), Solana (High-Throughput L1), and Robinhood Chain (Arbitrum Orbit L2).

Base Base Mainnet

Coinbase's premier EVM L2. Features native USDC settlement ($2,004 initial mcap curves), WETH pairs, institutional tokenized stocks (B20 / Backed), and our flagship in-house coin $BCAPY.

Solana Solana L1

Sub-second executions powered by Meteora Dynamic AMMs and Jupiter v6 routing. Supports native SOL bonding curves and high-liquidity synthetic equities (NVDAx, TSLAx, AAPLx, GME).

Robinhood Robinhood Chain

Arbitrum Orbit rollup ecosystem. Home of our genesis flagship $CAPY (contract 0xe96e9f...), Uniswap V2 LP pools, and synthetic assets.

Unified Architecture Guarantee

Every token launched on CapyPad is guaranteed 100% fair launch. No team pre-allocation, zero private sales, and automated graduation that burns 100% of the DEX LP tokens to dead addresses upon curve completion.

Three Core Protocol Pillars

01

Automated Virtual Bonding Curves

Tokens trade immediately against a constant product invariant $x \cdot y = k$. No initial liquidity provider is required. The curve acts as the automated market maker until graduation.

02

20% Instant On-Chain Rebates

20% of every 1.0% protocol fee is routed atomically in the same transaction to the referrer's address. Zero claims, zero lockups, true passive revenue.

03

Sign in with Google (MPC)

Web3Auth Sapphire MPC allows new degens to sign in with Google in 1 second. Non-custodial keys are derived deterministically for both EVM (Base/Robinhood) and Solana.

Cross-Chain Protocol Architecture

CapyPad combines high-speed EVM smart contracts (Foundry/Solidity 0.8.24) with Solana dynamic liquidity pools, orchestrated through an indexed real-time multi-chain backend.

Cross-Chain Execution Matrix Live Mainnet Protocol
Network Consensus / L2 Type AMM / Curve Engine DEX Migration Target Quote Settlement
Base (8453) Optimism OP Stack Rollup CapyV2BondingCurve (CPMM) Uniswap V2 / Aerodrome USDC / WETH
Solana Proof of History (PoH) L1 Meteora Dynamic DLMM Curve Meteora DLMM Pool / Jupiter SOL
Robinhood (4663) Arbitrum Nitro Orbit Rollup CapyV2BondingCurve (CPMM) Uniswap V2 Mainnet ETH / USDG

Core EVM Contract Subsystems (Base & Robinhood)

1. CapyV2Factory Core Deployer

The protocol registry that initializes bonding curves, registers token metadata, enforces anti-snipe limits, and triggers atomic DEX liquidity migration upon graduation.

Base: 0xC3b20d5DD3B9E89a3e9Ae9fAF41D399DD39D47e3
2. CapyV2FeeEscrow Referral Engine

Manages trading fees with atomic referral routing. Intercepts the 1.0% trade fee and immediately disburses 20% to the trading referrer, while locking the remaining 80% for buyback vault & treasury.

Base: 0x4aF656F5D17bDEe3185E788AC2E24393F110A3D4
3. CapyV2BuybackVault Ecosystem Health

Accumulates protocol proceeds and automatically executes algorithmic market buybacks of flagship ecosystem tokens ($BCAPY on Base and $CAPY on Robinhood Chain).

Base: 0x935cc57c0106cDf677EB13b941222e1D8fDB843d

60-Second Quickstart Guide

From zero to trading memecoins and tokenized stocks on Base, Solana, or Robinhood Chain in four simple steps.

Step 01 10 Seconds

Connect Wallet (or Sign in with Google)

Navigate to capypad.fun and click "Connect Wallet". You can connect MetaMask, Phantom, Coinbase Wallet, or click "Continue with Google" to instantly create an MPC wallet.

Step 02 Select Network

Choose Your Blockchain

Use the top network dropdown to pick your preferred environment: Base (low gas, USDC & stock pairs), Solana (sub-second swaps), or Robinhood Chain.

Step 03 Trade or Launch

Execute a Swap or Deploy Your Coin

To Trade: Select any token on Explore or Terminal, enter your swap amount, and execute with instant confirmation.
To Launch: Click "Launch Token", upload an avatar, choose your pairing (USDC, ETH, or SOL), and deploy on-chain instantly.

Step 04 Earn 20%

Grab Your Affiliate Link & Collect 20% Rebates

Open your portfolio drawer to copy your unique referral link: capypad.fun/?ref=YOUR_CODE. Earn 20% of protocol fees on every swap your friends make, paid immediately on-chain.

Multi-Chain RPC & Networks

Network parameters, chain IDs, RPC endpoints, and block explorers for connecting custom wallets, bots, or developer infrastructure.

Base Mainnet (8453)

One-click addition of Base Mainnet to MetaMask, Rabby, or Coinbase Wallet.

Robinhood Chain (4663)

One-click addition of Robinhood Chain L2 Mainnet to your EVM wallet.

Full Network Parameters

Parameter Base Mainnet Solana Mainnet Robinhood Chain
Chain ID 8453 (0x2105) mainnet-beta 4663 (0x1237)
Public RPC URL https://mainnet.base.org https://api.mainnet-beta.solana.com https://rpc.mainnet.chain.robinhood.com
Native Currency ETH (18 decimals) SOL (9 decimals) ETH (18 decimals)
Block Explorer basescan.org solscan.io blockscout.com
Average Block Time 2.0 seconds 400 milliseconds 250 milliseconds

Sign in with Google Architecture

Non-custodial Multi-Party Computation (MPC) social logins powered by Web3Auth Sapphire Mainnet.

Dual Key Derivation

When a user signs in with Google, a single master key share is reconstructed client-side. The protocol uses this to derive:

  • secp256k1 EVM Key: For Base Mainnet and Robinhood Chain trading.
  • Ed25519 Solana Key: For native Solana DEX trading.

True Self-Custody (Zero Server Access)

CapyPad never stores user private keys on any central database. Keys are computed via 2-of-2 Shamir's secret sharing between the user's browser device and the Web3Auth decentralized validator network.

Multi-Chain Trading Guide

Understanding automated virtual curve executions, slippage limits, and fee settlement.

Bonding Curve Phase vs. DEX Pool Phase

1. Bonding Curve Phase (0% - 100%)

Trades execute directly against the virtual bonding curve contract. 100% fair price discovery. No liquidity provider rugs possible.

2. DEX Pool Phase (Graduated)

Upon reaching the graduation target, all quote liquidity + 200M tokens migrate to Uniswap V2 (Base/Robinhood) or Meteora (Solana). LP burned permanently.

Transparent 1.0% Fee Structure

Every trade on CapyPad incurs a flat 1.0% fee:

0.20% (20% of Fee): Instant affiliate rebate to referrer.
0.80% (80% of Fee): Protocol buyback vault & treasury.

20% Instant On-Chain Referrals

The most generous referral system in DeFi: 20% of all protocol trading fees paid directly to your wallet in the same block.

Instant Execution

No waiting for monthly epochs or claiming windows. Payouts execute atomically during the swap transaction via the Fee Escrow contract.

Permanent Attribution

When someone trades using your link or code once, their wallet address is permanently bound to you on-chain.

Multi-Asset Rewards

Earn rewards in the native asset of the trade: USDC or ETH on Base, SOL on Solana, and ETH on Robinhood Chain.

Virtual Constant Product AMM Math

Rigorous mathematical specification of CapyPad's virtual constant product bonding curve.

The Constant Product Invariant

k = (x_tokens + x_virtual) · (y_quote + y_virtual)

Where x_tokens is the available bonding curve token supply (800,000,000 max), y_quote is the real collected quote currency (USDC, ETH, or SOL), and y_virtual is the virtual liquidity offset ensuring non-zero starting prices.

Standard Curve Parameters by Network
Chain & Asset Initial Virtual Quote Initial Mcap (USD) Graduation Target Graduation Mcap
Base (USDC Pairs) 4,000 USDC $2,004 20,000 USDC $69,000
Base (ETH Pairs) 2.0 ETH ~$5,300 8.0 ETH ~$69,000
Solana (SOL Pairs) 30.0 SOL ~$5,400 85.0 SOL ~$69,000
Robinhood (ETH Pairs) 2.0 ETH ~$5,300 8.0 ETH ~$69,000

Graduation & DEX LP Burn

The automated process that transitions a successful bonding curve coin into a permanently decentralized DEX pool.

Fixed 1 Billion Supply Distribution

800,000,000 Tokens (80%)

Sold along the bonding curve to community buyers. 100% fair launch.

200,000,000 Tokens (20%)

Reserved exclusively to seed the initial DEX liquidity pool upon graduation.

Permanent Dead-Address LP Burning

On Base and Robinhood Chain, the Uniswap V2 LP tokens minted during graduation are transferred directly to 0x000000000000000000000000000000000000dEaD. On Solana, the Meteora DLMM LP position is permanently incinerated. Liquidity can never be withdrawn by anyone.

Interactive Multi-Chain Curve Simulator

Drag the slider to preview price, market cap, multiplier, and quote reserves across any asset pair.

Select Curve Preset:
Bonding Curve Progress: 25.0%
Market Cap (USD) $17,250 USD
Price Growth 2.45x
Tokens Sold 200,000,000
Quote In Curve 5,000 USDC

Multi-Chain Copy Trading & KOL Alpha

Follow verified top traders, mirror high-winrate wallets, and share algorithmic signal callouts.

Verified Leaderboards & PnL Trackers

Every caller profile tracks on-chain realized PnL, win rate, call multiplier, and active portfolio positions. Zero fake callers—every trade is checked on BaseScan, Solscan, and Blockscout.

Instant Trade Replay Video & PnL Cards

Generate instant 1080p trading replay clips and high-contrast PnL share cards formatted for X/Twitter and Telegram with one click.

Holder Analytics & Bubble Map

Real-time holder concentration visualization and anti-dump safety algorithms.

Interactive Holder Bubble Map

Every token terminal features a physics-based bubble map representing all active token holders. Visual clusters highlight whale concentrations, bonding curve reserves, and liquidity locks instantly.

Anti-Snipe & Max Transaction Limits

During the initial genesis block, single transactions cannot exceed 2% of the curve supply, preventing sniper bots from cornering liquidity before community buyers enter.

Verified Mainnet Contract Registry

Canonical, immutable contract addresses deployed on Base Mainnet (8453), Solana Mainnet, and Robinhood Chain (4663).

Base Mainnet Protocol Contracts (Chain ID: 8453)

Contract / Component Address Explorer
CapyV2Factory (Base) 0xC3b20d5DD3B9E89a3e9Ae9fAF41D399DD39D47e3 Basescan ↗
CapyV2FeeEscrow (20% Referrals) 0x4aF656F5D17bDEe3185E788AC2E24393F110A3D4 Basescan ↗
CapyV2BuybackVault 0x935cc57c0106cDf677EB13b941222e1D8fDB843d Basescan ↗
CapyV2Deployer 0x45D07A326e17B61693d23eFF1B97EA078Aa4e6cD Basescan ↗
Uniswap V2 Router (Base) 0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24 Basescan ↗
Aerodrome V2 Router (Base) 0xcF77a3Ba9A5CA399B7c97c74d54e5b1Beb874E43 Basescan ↗
Capy Treasury Vault (Base) 0x3eF368806fa91e16C2775A155a937C0Da81F0Bc2 Basescan ↗
Base Native USDC 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 Basescan ↗
Base Canonical WETH 0x4200000000000000000000000000000000000006 Basescan ↗
NVDAc (Backed NVIDIA on Base) 0xb20000000000000000000078ee7ce2fE4908108C Basescan ↗
AAPLc (Backed Apple on Base) 0xb200000000000000000000C2e324d24d7eEcd1fb Basescan ↗
$BCAPY (Base Flagship Token) 0x33c97a2fa042f5f0c162c132d7586a0279e9f20b Basescan ↗
$BCAPY Bonding Curve 0xc7d562540d33d6f304f01c0746c13972335eec31 Basescan ↗

Solana Mainnet Program & Asset Registry

Program / Asset Account / Public Key Explorer
Meteora Dynamic DLMM Program LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo Solscan ↗
Meteora Dynamic Bonding Curve (DBC) dbcij3LWUppWqq96dh6gJWwBifmcGfLSB5D4DuSMaqN Solscan ↗
Meteora DBC Pool Authority PDA FhVo3mqL8PW5pH5U2CN4XE33DokiyZnUwuGpH2hmHLuM Solscan ↗
Jupiter v6 Swap Router JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 Solscan ↗
Wrapped SOL (WSOL) So11111111111111111111111111111111111111112 Solscan ↗
NVDAx (Synthetic NVIDIA) Xsc9qvGR1efVDFGLrVsmkzv3qi45LTBjeUKSPmx9qEh Solscan ↗
TSLAx (Synthetic Tesla) XsDoVfqeBukxuZHWhdvWHBhgEHjGNst4MLodqsJHzoB Solscan ↗
AAPLx (Synthetic Apple) XsbEhLAtcf6HdfpFZ5xEMdqW8nfAvcsP5bdudRLJzJp Solscan ↗
GME (GameStop Memecoin) 8wXtPeU6557ETkp9WHFY1n1EcU6NxDvbAggHGsMYiHsB Solscan ↗

Robinhood Chain L2 Contracts (Chain ID: 4663)

Contract / Component Address Explorer
CapyV2Factory (Robinhood) 0xAe332849022A8B71cc4e1A0F9c5a61172c7aE5EB Blockscout ↗
CapySwapRouter 0x548D1ffE1BD2F5E0c97589E62261320B5B092E10 Blockscout ↗
Robinhood DEX Router (Uniswap V2) 0x89e5DB8B5aA49aA85AC63f691524311AEB649eba Blockscout ↗
CapyV2Deployer 0xf52Fd0e2a9537A2D61885f34291c3f7C89e31a5F Blockscout ↗
CapyV2FeeEscrow (Robinhood) 0xc38D3Be2c751325cb764c5f8C2FcA2b765B73189 Blockscout ↗
CapyV2BuybackVault 0x54F5223CAd1beFfc569Dc1Eef96239aD0778D264 Blockscout ↗
Capy Treasury Vault 0x3eF368806fa91e16C2775A155a937C0Da81F0Bc2 Blockscout ↗
Canonical WETH (Robinhood) 0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73 Blockscout ↗
USDG (Global Dollar) 0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168 Blockscout ↗
$CAPY (Genesis Ecosystem Token) 0xe96e9fc9a9f952f76af14fc585a9625d25ed8304 Blockscout ↗
$CAPY / WETH Uniswap LP 0x3bc29f9Be714bB5e231CaF453eD9a0A24913589b Blockscout ↗

Token Contract Verification Guide

Complete walkthrough for verifying your newly created CapyPad token source code on Basescan, Blockscout, Foundry CLI, and verifying SPL token metadata & authorities on Solscan.

🛡️

Verified Green Badge

Receives the official verified checkmark on block explorers, proving the deployed bytecode matches the open-source code.

📈

DEX Aggregator Indexing

Instantly unlocks automated indexing on DexScreener, GeckoTerminal, Birdeye, and CoinGecko tracking bots.

🔒

Proof of Zero Backdoors

Publicly confirms no hidden minting functions, no honeypots, no pause mechanics, and no blacklists exist in the contract.

⚡

Direct Web3 Read/Write

Enables holders and decentralized tools to read balances, inspect metadata, and execute burns directly via explorer UIs.

1. Architecture of Created Tokens (CapyV2Token)

Every EVM token launched on CapyPad (Base Mainnet or Robinhood Chain) is deployed deterministically via CapyV2Factory.createToken(...). The deployed contract is an instance of our standard, audited CapyV2Token:

Contract File: src/v2/CapyV2Token.sol
Inheritance: ERC20 (OpenZeppelin v5.0)
Total Supply: 1,000,000,000 * 1e18 (1B tokens)
Decimals: 18
Initial Allocation: 100% to Factory/Bonding Curve
Mint Functions: None (Strictly Capped at 1B)

2. Compiler & Verification Configuration Matrix

To achieve a 100% bytecode match, you must select the exact compiler parameters used during compilation:

Parameter Value for Verification Notes / Explorer Field
Compiler Type Solidity (Single file / Flattened) Select "Single file" or "Flattened source code"
Compiler Version v0.8.24+commit.e11b9ed9 Solidity 0.8.24 release commit
Open Source License MIT License (MIT) SPDX-License-Identifier: MIT
Optimization Enabled Yes Must be toggled to "Yes" / Enabled
Optimization Runs 200 Default standard optimizer runs
EVM Version cancun / default / paris Base defaults to Cancun; Robinhood Chain accepts Default or Paris

3. Step-by-Step Explorer GUI Verification

Base Mainnet (Basescan)
Chain ID 8453
  1. Navigate to basescan.org/verifyContract ↗
  2. Enter your token's contract address.
  3. Select Compiler Type: Solidity (Single file).
  4. Select Compiler Version: v0.8.24+commit.e11b9ed9.
  5. Select Open Source License: MIT License (MIT).
  6. Click Continue.
  7. Under Optimization, choose Yes and enter 200.
  8. Paste the Flattened Solidity Code provided below into the code editor.
  9. Leave constructor arguments empty (Basescan auto-detects from the deployment transaction).
  10. Solve the captcha and click Verify and Publish.
Robinhood Chain (Blockscout)
Chain ID 4663
  1. Search your token address on robinhoodchain.blockscout.com ↗
  2. Click on the Contract tab and choose Verify & Publish.
  3. Select Verification method: Via flattened source code.
  4. Select Compiler: 0.8.24.
  5. Set Optimization: Enabled with 200 runs.
  6. Enter Contract Name: CapyV2Token.
  7. Paste the Flattened Source Code into the box.
  8. Blockscout automatically pre-fills the constructor arguments.
  9. Click Verify & Publish — verification succeeds in 3–5 seconds!

4. Constructor Arguments Reference

In 99% of cases on Basescan and Blockscout, constructor arguments are extracted automatically from the creation transaction data. If manual entry is required, CapyV2Token uses these 6 parameters in order:

constructor(
    string memory _name,        // Your token name (e.g. "Capy Hero")
    string memory _symbol,      // Your ticker symbol (e.g. "HERO")
    string memory _description, // Description entered at launch
    string memory _logo,        // Full logo image URL (e.g. "https://capypad.fun/...")
    address _deployer,          // Creator wallet address (msg.sender who launched the token)
    address _factory            // Factory: 0xC3b20d5DD3B9E89a3e9Ae9fAF41D399DD39D47e3 (Base)
                                //      or: 0xAe332849022A8B71cc4e1A0F9c5a61172c7aE5EB (Robinhood)
)
Pro-tip: You can quickly generate the ABI-encoded arguments via cast:
cast abi-encode "constructor(string,string,string,string,address,address)" "TokenName" "SYMBOL" "Description" "https://logo.png" <CREATOR_ADDRESS> <FACTORY_ADDRESS>

5. Automated Verification via Foundry CLI

Developers using Foundry can verify their deployed token contract in a single terminal command:

Base Mainnet (Foundry CLI):
forge verify-contract <YOUR_TOKEN_ADDRESS> src/v2/CapyV2Token.sol:CapyV2Token \ --chain-id 8453 \ --verifier-url https://api.basescan.org/api \ --etherscan-api-key $BASESCAN_API_KEY \ --compiler-version 0.8.24 \ --num-of-optimizations 200
Robinhood Chain Mainnet (Foundry CLI):
forge verify-contract <YOUR_TOKEN_ADDRESS> src/v2/CapyV2Token.sol:CapyV2Token \ --chain-id 4663 \ --verifier blockscout \ --verifier-url https://robinhoodchain.blockscout.com/api \ --compiler-version 0.8.24 \ --num-of-optimizations 200

6. Official Flattened Solidity Source Code

Self-contained, dependency-free Solidity 0.8.24 code ready for copy-pasting.

// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;

/**
 * ============================================================================
 * Official Flattened Source Code for CapyPad Launchpad Tokens (CapyV2Token)
 * Compatible with Base Mainnet (8453) & Robinhood Chain Mainnet (4663)
 * Compiler Version: v0.8.24+commit.e11b9ed9
 * Optimization: Enabled (200 runs)
 * EVM Version: cancun / paris / default
 * License: MIT
 * ============================================================================
 */

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

interface IERC20Errors {
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
    error ERC20InvalidSender(address sender);
    error ERC20InvalidReceiver(address receiver);
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);
    error ERC20InvalidApprover(address approver);
    error ERC20InvalidSpender(address spender);
}

interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;
    mapping(address account => mapping(address spender => uint256)) private _allowances;

    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual returns (string memory) {
        return _name;
    }

    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual returns (uint256) {
        return _balances[account];
    }

    function transfer(address to, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, value);
        return true;
    }

    function allowance(address owner, address spender) public view virtual returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, value);
        return true;
    }

    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }

    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                _totalSupply -= value;
            }
        } else {
            unchecked {
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance < type(uint256).max) {
            if (currentAllowance < value) {
                revert ERC20InsufficientAllowance(spender, currentAllowance, value);
            }
            unchecked {
                _approve(owner, spender, currentAllowance - value, false);
            }
        }
    }
}

struct TokenSocials {
    string twitter;
    string telegram;
    string website;
    string discord;
    string github;
}

contract CapyV2Token is ERC20 {
    uint256 public constant TOTAL_SUPPLY = 1_000_000_000 * 1e18;

    address public curve;
    address public immutable launchFactory;
    address public immutable deployer;

    string public description;
    string public logo;
    TokenSocials public socials;

    error NotCurveOrFactory();
    error ZeroAddress();

    event MetadataUpdated(string description, string logo);
    event SocialsUpdated(string twitter, string telegram, string website, string discord, string github);
    event CurveSet(address indexed curve);

    constructor(
        string memory _name,
        string memory _symbol,
        string memory _description,
        string memory _logo,
        address _deployer,
        address _factory
    ) ERC20(_name, _symbol) {
        if (_deployer == address(0) || _factory == address(0)) revert ZeroAddress();

        deployer = _deployer;
        launchFactory = _factory;

        description = _description;
        logo = _logo;

        _mint(_factory, TOTAL_SUPPLY);
    }

    function setCurve(address _curve) external {
        if (msg.sender != launchFactory || curve != address(0)) revert NotCurveOrFactory();
        if (_curve == address(0)) revert ZeroAddress();
        curve = _curve;
        emit CurveSet(_curve);
    }

    function burn(uint256 amount) public {
        _burn(msg.sender, amount);
    }

    function burnFrom(address account, uint256 amount) public {
        _spendAllowance(account, msg.sender, amount);
        _burn(account, amount);
    }

    function updateMetadata(string calldata _description, string calldata _logo) external {
        if (msg.sender != deployer) revert NotCurveOrFactory();
        description = _description;
        logo = _logo;
        emit MetadataUpdated(_description, _logo);
    }

    function updateSocials(TokenSocials calldata _socials) external {
        if (msg.sender != deployer && msg.sender != launchFactory) revert NotCurveOrFactory();
        socials = _socials;
        emit SocialsUpdated(_socials.twitter, _socials.telegram, _socials.website, _socials.discord, _socials.github);
    }
}

7. Solana Token Verification (SPL & Meteora DBC)

Unlike EVM chains where smart contract code is verified against bytecode, tokens created on Solana run on the canonical SPL Token Program. Verifying your token on Solana consists of inspecting and verifying its Authorities & Metadata:

1. Mint Authority Revocation

Check on Solscan.io ↗ that Mint Authority is permanently revoked (None). This mathematically guarantees the token supply can never be inflated.

2. Freeze Authority Revocation

Confirm on Solscan that Freeze Authority is set to None. This proves to buyers and automated safety scanners (e.g. RugCheck) that token balances can never be blacklisted or frozen.

3. Meteora DBC Pool Status

Verify the active bonding curve state under Meteora DBC (dbcij3LW...) and verify the pool metadata URI linking to your name, symbol, and logo on IPFS.

Rug-Proof Security Architecture

Eliminating developer privilege, backdoors, honey-pots, and liquidation exploits by design.

No Owner Mint Function

Standard ERC-20 / SPL token contracts created by CapyPad have no mint function after initialization. Total supply is fixed permanently at exactly 1,000,000,000 tokens.

Non-Upgradeable Bonding Curves

Bonding curve contracts are immutable. There are no proxy contracts, no owner sweep functions, and no logic upgrade backdoors.

100% On-Chain LP Destruction

Upon graduation, liquidity tokens are irreversibly burned. No human has custody or ability to pull liquidity from the graduated pool.

Anti-Sandwich MEV Guards

All curve trade functions enforce deadline checks and maximum slippage bounds calculated directly on-chain against real contract state.

Frequently Asked Questions

Quick answers to the most common questions regarding CapyPad, multi-chain trading, and token launch mechanics.

What chains does CapyPad currently support?

CapyPad natively supports Base (Coinbase L2), Solana (Layer 1), and Robinhood Chain (Arbitrum Orbit L2). You can browse, trade, and launch tokens across all three chains from one unified interface.

Can I use MetaMask to trade on both Base and Solana?

Yes! CapyPad supports simultaneous dual-chain connectivity. You can connect your MetaMask for EVM chains (Base & Robinhood) and connect Phantom or Solflare for Solana simultaneously. If you log in via Google, Web3Auth derives both an EVM and a Solana address automatically.

What is the difference between $BCAPY and $CAPY?

$BCAPY (0x33c97a2fa042f5f0c162c132d7586a0279e9f20b) is our flagship community token on Base, paired with USDC. $CAPY (0xe96e9fc9a9f952f76af14fc585a9625d25ed8304) is our genesis ecosystem token on Robinhood Chain.

How do 20% referral payouts work?

Whenever a user visits via your link (capypad.fun/?ref=YOUR_CODE) and executes a swap, 20% of the protocol fee (0.20% of trade volume) is transferred directly into your wallet in that very same transaction. There are no minimum claim thresholds or delays.

What happens when a bonding curve hits 100%?

Once 800M tokens are sold, trading on the bonding curve completes. The smart contract automatically transfers all accumulated quote liquidity plus the 200M reserved tokens to Uniswap V2 (Base/Robinhood) or Meteora (Solana). The liquidity pool tokens are burned permanently.