{"id":66,"date":"2026-01-11T20:30:23","date_gmt":"2026-01-11T20:30:23","guid":{"rendered":"https:\/\/shanecherry.com\/?page_id=66"},"modified":"2026-01-13T01:42:59","modified_gmt":"2026-01-13T01:42:59","slug":"shaneswap-dex","status":"publish","type":"page","link":"https:\/\/shanecherry.com\/?page_id=66","title":{"rendered":"ShaneSwap DEX"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    \n    <!-- Primary Meta Tags -->\n    <title>ShaneSwap DEX | Decentralized Exchange &#8211; Trade SHANE Tokens<\/title>\n    <meta name=\"title\" content=\"ShaneSwap DEX | Decentralized Exchange - Trade SHANE Tokens\">\n    <meta name=\"description\" content=\"Trade SHANE tokens on ShaneSwap DEX. Instant swaps, liquidity pools, limit orders. 0.3% trading fee. Earn passive income by providing liquidity.\">\n    <meta name=\"keywords\" content=\"DEX, decentralized exchange, ShaneSwap, token swap, liquidity pool, AMM, automated market maker, crypto trading, DeFi\">\n    <meta name=\"author\" content=\"Shane Cherry\">\n    <meta name=\"robots\" content=\"index, follow\">\n    <link rel=\"canonical\" href=\"https:\/\/shanecherry.com\/dex\">\n    \n    <!-- Open Graph \/ Facebook -->\n    <meta property=\"og:type\" content=\"website\">\n    <meta property=\"og:url\" content=\"https:\/\/shanecherry.com\/dex\">\n    <meta property=\"og:title\" content=\"ShaneSwap DEX | Decentralized Exchange\">\n    <meta property=\"og:description\" content=\"Trade SHANE tokens on ShaneSwap DEX. Instant swaps, liquidity pools, limit orders. Earn by providing liquidity.\">\n    <meta property=\"og:image\" content=\"https:\/\/shanecherry.com\/images\/dex-og.png\">\n    <meta property=\"og:site_name\" content=\"ShaneSwap\">\n    \n    <!-- Twitter -->\n    <meta name=\"twitter:card\" content=\"summary_large_image\">\n    <meta name=\"twitter:url\" content=\"https:\/\/shanecherry.com\/dex\">\n    <meta name=\"twitter:title\" content=\"ShaneSwap DEX | Decentralized Exchange\">\n    <meta name=\"twitter:description\" content=\"Trade SHANE tokens on ShaneSwap DEX. Instant swaps, liquidity pools, 0.3% fee.\">\n    <meta name=\"twitter:image\" content=\"https:\/\/shanecherry.com\/images\/dex-twitter.png\">\n    \n    <!-- JSON-LD Structured Data -->\n    <script type=\"application\/ld+json\">\n    {\n        \"@context\": \"https:\/\/schema.org\",\n        \"@type\": \"WebApplication\",\n        \"name\": \"ShaneSwap DEX\",\n        \"description\": \"Decentralized exchange for trading SHANE tokens with instant swaps, liquidity pools, and limit orders\",\n        \"url\": \"https:\/\/shanecherry.com\/dex\",\n        \"applicationCategory\": \"FinanceApplication\",\n        \"operatingSystem\": \"Web Browser\",\n        \"offers\": {\n            \"@type\": \"Offer\",\n            \"price\": \"0\",\n            \"priceCurrency\": \"USD\",\n            \"description\": \"0.3% trading fee on swaps\"\n        },\n        \"featureList\": [\n            \"Instant Token Swaps\",\n            \"Liquidity Pools\",\n            \"Limit Orders\",\n            \"Order Book\",\n            \"0.3% Trading Fee\",\n            \"Liquidity Mining\"\n        ],\n        \"author\": {\n            \"@type\": \"Organization\",\n            \"name\": \"ShaneCoin\",\n            \"url\": \"https:\/\/shanecherry.com\"\n        }\n    }\n    <\/script>\n    \n    <style>\n        * { margin: 0; padding: 0; box-sizing: border-box; }\n        body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background: linear-gradient(135deg, #0a0a1a 0%, #1a1a3e 50%, #0f2460 100%); min-height: 100vh; color: #fff; }\n        .container { max-width: 1400px; margin: 0 auto; padding: 20px; }\n        header { text-align: center; padding: 30px 0; border-bottom: 1px solid rgba(255,255,255,0.1); margin-bottom: 30px; }\n        header h1 { font-size: 2.5em; background: linear-gradient(90deg, #00d4ff, #7b2cbf, #f1c40f); -webkit-background-clip: text; -webkit-text-fill-color: transparent; }\n        header p { color: #888; margin-top: 10px; }\n        .dex-badge { background: linear-gradient(90deg, #9b59b6, #3498db); padding: 5px 15px; border-radius: 20px; font-size: 0.85em; display: inline-block; margin-top: 10px; }\n        .stats-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 15px; margin-bottom: 30px; }\n        .stat-box { background: rgba(255,255,255,0.05); border: 1px solid rgba(255,255,255,0.1); border-radius: 12px; padding: 20px; text-align: center; }\n        .stat-box h4 { color: #888; font-size: 0.75em; text-transform: uppercase; }\n        .stat-box .value { font-size: 1.5em; font-weight: bold; color: #00d4ff; margin-top: 5px; }\n        .stat-box .value.green { color: #2ecc71; }\n        .stat-box .value.purple { color: #9b59b6; }\n        .main-grid { display: grid; grid-template-columns: 1fr 400px; gap: 30px; }\n        @media (max-width: 900px) { .main-grid { grid-template-columns: 1fr; } }\n        .panel { background: rgba(255,255,255,0.05); border: 1px solid rgba(255,255,255,0.1); border-radius: 20px; padding: 25px; margin-bottom: 20px; }\n        .panel h3 { color: #00d4ff; margin-bottom: 20px; }\n        .swap-box { background: rgba(0,0,0,0.3); border-radius: 15px; padding: 20px; margin-bottom: 15px; }\n        .swap-box label { color: #888; font-size: 0.85em; display: block; margin-bottom: 8px; }\n        .swap-input-row { display: flex; gap: 10px; align-items: center; }\n        .swap-input-row input { flex: 1; padding: 15px; border: 1px solid rgba(255,255,255,0.1); border-radius: 10px; background: rgba(255,255,255,0.05); color: #fff; font-size: 1.2em; }\n        .swap-input-row select { padding: 15px; border: 1px solid rgba(255,255,255,0.1); border-radius: 10px; background: rgba(255,255,255,0.1); color: #fff; font-size: 1em; min-width: 120px; }\n        .swap-arrow { text-align: center; font-size: 1.5em; color: #00d4ff; cursor: pointer; padding: 10px; transition: transform 0.3s; }\n        .swap-arrow:hover { transform: rotate(180deg); }\n        .swap-details { background: rgba(0,0,0,0.2); border-radius: 10px; padding: 15px; margin-top: 15px; }\n        .swap-details .row { display: flex; justify-content: space-between; padding: 5px 0; color: #888; font-size: 0.9em; }\n        .swap-details .row span:last-child { color: #fff; }\n        .btn { background: linear-gradient(90deg, #00d4ff, #7b2cbf); color: white; border: none; padding: 15px 30px; border-radius: 10px; cursor: pointer; font-size: 1em; font-weight: bold; transition: all 0.3s; width: 100%; margin-top: 15px; }\n        .btn:hover { transform: scale(1.02); box-shadow: 0 5px 25px rgba(0,212,255,0.3); }\n        .btn:disabled { opacity: 0.5; cursor: not-allowed; }\n        .btn-green { background: linear-gradient(90deg, #2ecc71, #27ae60); }\n        .btn-red { background: linear-gradient(90deg, #e74c3c, #c0392b); }\n        .btn-purple { background: linear-gradient(90deg, #9b59b6, #8e44ad); }\n        .btn-small { padding: 8px 15px; font-size: 0.85em; width: auto; margin: 0; }\n        .tabs { display: flex; gap: 5px; margin-bottom: 20px; }\n        .tab { flex: 1; padding: 12px; background: rgba(255,255,255,0.05); border: 1px solid rgba(255,255,255,0.1); color: #888; cursor: pointer; border-radius: 10px; text-align: center; transition: all 0.3s; }\n        .tab.active { background: rgba(0,212,255,0.2); border-color: #00d4ff; color: #00d4ff; }\n        .tab-content { display: none; }\n        .tab-content.active { display: block; }\n        .pool-card { background: rgba(0,0,0,0.2); border: 1px solid rgba(255,255,255,0.1); border-radius: 12px; padding: 20px; margin-bottom: 15px; }\n        .pool-stats { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }\n        .pool-stat { background: rgba(255,255,255,0.05); padding: 10px; border-radius: 8px; text-align: center; }\n        .pool-stat label { color: #888; font-size: 0.75em; display: block; }\n        .order-book { max-height: 300px; overflow-y: auto; }\n        .order-row { display: grid; grid-template-columns: 1fr 1fr 1fr; padding: 8px 0; border-bottom: 1px solid rgba(255,255,255,0.05); font-size: 0.85em; }\n        .order-row.header { color: #888; font-weight: bold; }\n        .order-row.buy { color: #2ecc71; }\n        .order-row.sell { color: #e74c3c; }\n        .order-book-mid { text-align: center; padding: 15px; background: rgba(0,212,255,0.1); margin: 10px 0; border-radius: 8px; }\n        .order-book-mid .price { font-size: 1.3em; font-weight: bold; color: #00d4ff; }\n        .wallet-section { background: rgba(0,212,255,0.1); border: 1px solid rgba(0,212,255,0.3); border-radius: 12px; padding: 15px; margin-bottom: 20px; }\n        .wallet-section select { width: 100%; padding: 12px; border: 1px solid rgba(255,255,255,0.2); border-radius: 8px; background: rgba(255,255,255,0.05); color: #fff; margin-bottom: 10px; }\n        .wallet-balance { display: flex; justify-content: space-between; padding: 8px 0; border-bottom: 1px solid rgba(255,255,255,0.1); }\n        input, select { outline: none; }\n        input:focus, select:focus { border-color: #00d4ff; }\n        .alert { padding: 12px 20px; border-radius: 10px; margin: 15px 0; font-size: 0.9em; }\n        .alert-success { background: rgba(46,204,113,0.2); border: 1px solid #2ecc71; color: #2ecc71; }\n        .alert-error { background: rgba(231,76,60,0.2); border: 1px solid #e74c3c; color: #e74c3c; }\n        .loading { text-align: center; padding: 20px; color: #888; }\n        .spinner { border: 3px solid rgba(255,255,255,0.1); border-top: 3px solid #00d4ff; border-radius: 50%; width: 25px; height: 25px; animation: spin 1s linear infinite; margin: 0 auto 10px; }\n        @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }\n        .trade-item { display: flex; justify-content: space-between; padding: 10px 0; border-bottom: 1px solid rgba(255,255,255,0.05); font-size: 0.85em; }\n        .trade-item .type { padding: 3px 8px; border-radius: 5px; font-size: 0.8em; }\n        .trade-item .type.buy { background: rgba(46,204,113,0.2); color: #2ecc71; }\n        .trade-item .type.sell { background: rgba(231,76,60,0.2); color: #e74c3c; }\n        footer { text-align: center; padding: 30px; color: #666; border-top: 1px solid rgba(255,255,255,0.1); margin-top: 40px; }\n        footer nav a { color: #00d4ff; text-decoration: none; margin: 0 15px; }\n        #message { position: fixed; top: 20px; right: 20px; padding: 15px 25px; border-radius: 10px; z-index: 1000; display: none; max-width: 400px; }\n    <\/style>\n<\/head>\n<body>\n    <div class=\"container\">\n        <header>\n            <h1>\ud83d\udd04 ShaneSwap<\/h1>\n            <p>Decentralized Exchange &#8211; Swap, Trade &#038; Earn<\/p>\n            <span class=\"dex-badge\">\u26a1 Instant Swaps \u2022 0.3% Fee<\/span>\n        <\/header>\n        \n        <div id=\"message\" role=\"alert\" aria-live=\"polite\"><\/div>\n        \n        <section aria-label=\"DEX Statistics\">\n            <div class=\"stats-row\">\n                <article class=\"stat-box\"><h4>Total Liquidity<\/h4><div class=\"value\" id=\"totalLiquidity\">$0<\/div><\/article>\n                <article class=\"stat-box\"><h4>24h Volume<\/h4><div class=\"value green\" id=\"volume24h\">$0<\/div><\/article>\n                <article class=\"stat-box\"><h4>Total Trades<\/h4><div class=\"value purple\" id=\"totalTrades\">0<\/div><\/article>\n                <article class=\"stat-box\"><h4>SHANE Price<\/h4><div class=\"value\" id=\"shanePrice\">$0.00<\/div><\/article>\n            <\/div>\n        <\/section>\n        \n        <main class=\"main-grid\">\n            <div>\n                <section class=\"wallet-section\" aria-label=\"Connect Wallet\">\n                    <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px;\">\n                        <strong>\ud83d\udd17 Connect Wallet<\/strong>\n                        <button class=\"btn btn-small btn-purple\" onclick=\"createWallet()\">+ New<\/button>\n                    <\/div>\n                    <label for=\"walletSelect\" class=\"sr-only\">Select Wallet<\/label>\n                    <select id=\"walletSelect\" onchange=\"updateBalances()\" aria-label=\"Select Wallet\">\n                        <option value=\"\">Select Wallet&#8230;<\/option>\n                    <\/select>\n                    <div id=\"walletBalances\"><\/div>\n                <\/section>\n                \n                <nav class=\"tabs\" role=\"tablist\" aria-label=\"Trading Options\">\n                    <button class=\"tab active\" onclick=\"showMainTab('swap')\" role=\"tab\" aria-selected=\"true\">\ud83d\udd04 Swap<\/button>\n                    <button class=\"tab\" onclick=\"showMainTab('liquidity')\" role=\"tab\">\ud83d\udca7 Liquidity<\/button>\n                    <button class=\"tab\" onclick=\"showMainTab('orders')\" role=\"tab\">\ud83d\udccb Orders<\/button>\n                <\/nav>\n                \n                <section id=\"swap-tab\" class=\"tab-content active\" role=\"tabpanel\" aria-label=\"Token Swap\">\n                    <div class=\"panel\">\n                        <h3>\ud83d\udd04 Swap Tokens<\/h3>\n                        <div class=\"swap-box\">\n                            <label for=\"fromAmount\">From<\/label>\n                            <div class=\"swap-input-row\">\n                                <input type=\"number\" id=\"fromAmount\" placeholder=\"0.0\" oninput=\"getQuote()\" aria-label=\"Amount to swap\">\n                                <select id=\"fromToken\" onchange=\"getQuote()\" aria-label=\"From token\">\n                                    <option value=\"COIN\">COIN<\/option>\n                                    <option value=\"SHANE\">SHANE<\/option>\n                                <\/select>\n                            <\/div>\n                            <div style=\"text-align: right; color: #888; font-size: 0.85em; margin-top: 5px;\">\n                                Balance: <span id=\"fromBalance\">0<\/span>\n                                <a href=\"#\" onclick=\"setMaxFrom()\" style=\"color: #00d4ff; margin-left: 10px;\">MAX<\/a>\n                            <\/div>\n                        <\/div>\n                        <div class=\"swap-arrow\" onclick=\"swapTokens()\" role=\"button\" aria-label=\"Swap direction\">\u21c5<\/div>\n                        <div class=\"swap-box\">\n                            <label for=\"toAmount\">To<\/label>\n                            <div class=\"swap-input-row\">\n                                <input type=\"number\" id=\"toAmount\" placeholder=\"0.0\" readonly aria-label=\"Amount to receive\">\n                                <select id=\"toToken\" onchange=\"getQuote()\" aria-label=\"To token\">\n                                    <option value=\"SHANE\">SHANE<\/option>\n                                    <option value=\"COIN\">COIN<\/option>\n                                <\/select>\n                            <\/div>\n                            <div style=\"text-align: right; color: #888; font-size: 0.85em; margin-top: 5px;\">\n                                Balance: <span id=\"toBalance\">0<\/span>\n                            <\/div>\n                        <\/div>\n                        <div class=\"swap-details\" id=\"swapDetails\" style=\"display: none;\">\n                            <div class=\"row\"><span>Price<\/span><span id=\"swapPrice\">&#8211;<\/span><\/div>\n                            <div class=\"row\"><span>Price Impact<\/span><span id=\"priceImpact\">&#8211;<\/span><\/div>\n                            <div class=\"row\"><span>Fee (0.3%)<\/span><span id=\"swapFee\">&#8211;<\/span><\/div>\n                            <div class=\"row\"><span>Minimum Received<\/span><span id=\"minReceived\">&#8211;<\/span><\/div>\n                        <\/div>\n                        <button class=\"btn\" id=\"swapBtn\" onclick=\"executeSwap()\" disabled>Enter an amount<\/button>\n                    <\/div>\n                <\/section>\n                \n                <section id=\"liquidity-tab\" class=\"tab-content\" role=\"tabpanel\" aria-label=\"Liquidity Pool\">\n                    <div class=\"panel\">\n                        <h3>\ud83d\udca7 Add Liquidity<\/h3>\n                        <p style=\"color: #888; margin-bottom: 20px; font-size: 0.9em;\">Add tokens to earn 0.3% fee on all trades proportional to your share.<\/p>\n                        <div class=\"swap-box\">\n                            <label for=\"lpAmount1\">SHANE Amount<\/label>\n                            <input type=\"number\" id=\"lpAmount1\" placeholder=\"0.0\" style=\"width: 100%; padding: 15px; border: 1px solid rgba(255,255,255,0.1); border-radius: 10px; background: rgba(255,255,255,0.05); color: #fff; font-size: 1.1em;\">\n                        <\/div>\n                        <div class=\"swap-box\">\n                            <label for=\"lpAmount2\">COIN Amount<\/label>\n                            <input type=\"number\" id=\"lpAmount2\" placeholder=\"0.0\" style=\"width: 100%; padding: 15px; border: 1px solid rgba(255,255,255,0.1); border-radius: 10px; background: rgba(255,255,255,0.05); color: #fff; font-size: 1.1em;\">\n                        <\/div>\n                        <button class=\"btn btn-green\" onclick=\"addLiquidity()\">\ud83d\udca7 Add Liquidity<\/button>\n                        <div id=\"liquidityStatus\" style=\"margin-top: 15px;\"><\/div>\n                    <\/div>\n                    <div class=\"panel\">\n                        <h3>\ud83c\udfca Your Liquidity Positions<\/h3>\n                        <div id=\"myLiquidity\"><div class=\"loading\">Connect wallet to see positions<\/div><\/div>\n                    <\/div>\n                <\/section>\n                \n                <section id=\"orders-tab\" class=\"tab-content\" role=\"tabpanel\" aria-label=\"Limit Orders\">\n                    <div class=\"panel\">\n                        <h3>\ud83d\udccb Place Limit Order<\/h3>\n                        <div class=\"tabs\" style=\"margin-bottom: 15px;\" role=\"tablist\">\n                            <button class=\"tab active\" onclick=\"setOrderSide('buy')\" id=\"buyTab\" role=\"tab\">Buy<\/button>\n                            <button class=\"tab\" onclick=\"setOrderSide('sell')\" id=\"sellTab\" role=\"tab\">Sell<\/button>\n                        <\/div>\n                        <div class=\"swap-box\">\n                            <label for=\"orderPrice\">Price (COIN per SHANE)<\/label>\n                            <input type=\"number\" id=\"orderPrice\" placeholder=\"0.0\" style=\"width: 100%; padding: 15px; border: 1px solid rgba(255,255,255,0.1); border-radius: 10px; background: rgba(255,255,255,0.05); color: #fff;\">\n                        <\/div>\n                        <div class=\"swap-box\">\n                            <label for=\"orderAmount\">Amount (SHANE)<\/label>\n                            <input type=\"number\" id=\"orderAmount\" placeholder=\"0.0\" style=\"width: 100%; padding: 15px; border: 1px solid rgba(255,255,255,0.1); border-radius: 10px; background: rgba(255,255,255,0.05); color: #fff;\">\n                        <\/div>\n                        <div style=\"background: rgba(0,0,0,0.2); padding: 10px; border-radius: 8px; margin-top: 10px;\">\n                            <div style=\"display: flex; justify-content: space-between; color: #888;\">\n                                <span>Total:<\/span>\n                                <span id=\"orderTotal\">0 COIN<\/span>\n                            <\/div>\n                        <\/div>\n                        <button class=\"btn btn-green\" id=\"orderBtn\" onclick=\"placeOrder()\">Place Buy Order<\/button>\n                        <div id=\"orderStatus\" style=\"margin-top: 15px;\"><\/div>\n                    <\/div>\n                <\/section>\n            <\/div>\n            \n            <aside>\n                <section class=\"panel\" aria-label=\"Pool Information\">\n                    <h3>\ud83d\udcca SHANE\/COIN Pool<\/h3>\n                    <div class=\"pool-card\">\n                        <div class=\"pool-stats\">\n                            <div class=\"pool-stat\"><label>SHANE Reserve<\/label><div style=\"color: #2ecc71; font-weight: bold;\" id=\"reserve1\">0<\/div><\/div>\n                            <div class=\"pool-stat\"><label>COIN Reserve<\/label><div style=\"color: #3498db; font-weight: bold;\" id=\"reserve2\">0<\/div><\/div>\n                            <div class=\"pool-stat\"><label>Price<\/label><div style=\"color: #f1c40f; font-weight: bold;\" id=\"poolPrice\">0<\/div><\/div>\n                            <div class=\"pool-stat\"><label>Total LP<\/label><div style=\"color: #9b59b6; font-weight: bold;\" id=\"totalLP\">0<\/div><\/div>\n                        <\/div>\n                    <\/div>\n                <\/section>\n                \n                <section class=\"panel\" aria-label=\"Order Book\">\n                    <h3>\ud83d\udcd6 Order Book<\/h3>\n                    <div class=\"order-book\">\n                        <div class=\"order-row header\"><span>Price<\/span><span>Amount<\/span><span>Total<\/span><\/div>\n                        <div id=\"sellOrders\"><\/div>\n                        <div class=\"order-book-mid\"><div class=\"price\" id=\"midPrice\">0.1000<\/div><div style=\"color: #888; font-size: 0.8em;\">Current Price<\/div><\/div>\n                        <div id=\"buyOrders\"><\/div>\n                    <\/div>\n                <\/section>\n                \n                <section class=\"panel\" aria-label=\"Recent Trades\">\n                    <h3>\ud83d\udcdc Recent Trades<\/h3>\n                    <div id=\"recentTrades\">\n                        <div class=\"trade-item\"><span class=\"type buy\">BUY<\/span><span>100 SHANE<\/span><span style=\"color: #888;\">@ 0.10<\/span><\/div>\n                        <div class=\"trade-item\"><span class=\"type sell\">SELL<\/span><span>50 SHANE<\/span><span style=\"color: #888;\">@ 0.10<\/span><\/div>\n                    <\/div>\n                <\/section>\n            <\/aside>\n        <\/main>\n        \n        <footer>\n            <nav aria-label=\"Site Navigation\">\n                <a href=\"\/?page_id=49\">Blockchain Explorer<\/a>\n                <a href=\"\/ico\">Token Sale<\/a>\n                <a href=\"\/dex\">DEX Exchange<\/a>\n                <a href=\"\/\">Home<\/a>\n            <\/nav>\n            <p>\u00a9 2026 ShaneSwap DEX. Powered by ShaneCoin.<\/p>\n            <p style=\"margin-top: 10px; font-size: 0.8em;\">Trading cryptocurrencies involves risk. Only trade what you can afford to lose.<\/p>\n        <\/footer>\n    <\/div>\n    \n    <script>\n        const API_URL = 'https:\/\/shanecherry.com\/api';\n        let wallets = [];\n        \n        \/\/ Load wallets from localStorage (shared with main explorer)\n        function loadWallets() {\n            try {\n                var saved = localStorage.getItem('shanecoin_wallets');\n                if (saved) {\n                    wallets = JSON.parse(saved);\n                }\n            } catch (e) {\n                wallets = [];\n            }\n        }\n        \n        \/\/ Save wallets to localStorage\n        function saveWallets() {\n            try {\n                localStorage.setItem('shanecoin_wallets', JSON.stringify(wallets));\n            } catch (e) {\n                console.error('Failed to save wallets:', e);\n            }\n        }\n        let currentPool = null;\n        let orderSide = 'buy';\n        let slippage = 0.5;\n\n        function showMessage(text, type) {\n            var msg = document.getElementById('message');\n            msg.textContent = text;\n            msg.className = 'alert alert-' + (type || 'success');\n            msg.style.display = 'block';\n            setTimeout(function() { msg.style.display = 'none'; }, 4000);\n        }\n\n        function showMainTab(tabName) {\n            var tabs = document.querySelectorAll('.tabs:not(.panel .tabs) .tab');\n            var contents = document.querySelectorAll('.tab-content');\n            for (var i = 0; i < tabs.length; i++) { tabs[i].classList.remove('active'); tabs[i].setAttribute('aria-selected', 'false'); }\n            for (var i = 0; i < contents.length; i++) { contents[i].classList.remove('active'); }\n            event.target.classList.add('active');\n            event.target.setAttribute('aria-selected', 'true');\n            document.getElementById(tabName + '-tab').classList.add('active');\n        }\n\n        async function fetchPool() {\n            try {\n                var response = await fetch(API_URL + '\/dex\/pool\/SHANE_COIN');\n                var data = await response.json();\n                currentPool = data;\n                document.getElementById('reserve1').textContent = Math.round(data.reserve1).toLocaleString();\n                document.getElementById('reserve2').textContent = Math.round(data.reserve2).toLocaleString();\n                document.getElementById('poolPrice').textContent = data.price.toFixed(4) + ' COIN';\n                document.getElementById('totalLP').textContent = Math.round(data.total_lp).toLocaleString();\n                document.getElementById('midPrice').textContent = data.price.toFixed(4);\n                document.getElementById('shanePrice').textContent = '$' + (data.price * 0.05).toFixed(4);\n                document.getElementById('totalLiquidity').textContent = '$' + Math.round(data.reserve2 * 0.05 * 2).toLocaleString();\n                document.getElementById('volume24h').textContent = '$' + Math.round(data.volume_24h * 0.05).toLocaleString();\n                document.getElementById('totalTrades').textContent = data.trades;\n            } catch (error) { console.error('Failed to fetch pool:', error); }\n        }\n\n        async function fetchOrders() {\n            try {\n                var response = await fetch(API_URL + '\/dex\/orders\/SHANE_COIN');\n                var data = await response.json();\n                var sellHtml = '';\n                var sells = data.sell_orders.slice(0, 5).reverse();\n                for (var i = 0; i < sells.length; i++) {\n                    var o = sells[i];\n                    sellHtml += '<div class=\"order-row sell\"><span>' + o.price.toFixed(4) + '<\/span><span>' + o.amount + '<\/span><span>' + (o.price * o.amount).toFixed(2) + '<\/span><\/div>';\n                }\n                document.getElementById('sellOrders').innerHTML = sellHtml || '<div style=\"text-align:center;color:#888;padding:10px;\">No sell orders<\/div>';\n                var buyHtml = '';\n                var buys = data.buy_orders.slice(0, 5);\n                for (var i = 0; i < buys.length; i++) {\n                    var o = buys[i];\n                    buyHtml += '<div class=\"order-row buy\"><span>' + o.price.toFixed(4) + '<\/span><span>' + o.amount + '<\/span><span>' + (o.price * o.amount).toFixed(2) + '<\/span><\/div>';\n                }\n                document.getElementById('buyOrders').innerHTML = buyHtml || '<div style=\"text-align:center;color:#888;padding:10px;\">No buy orders<\/div>';\n            } catch (error) { console.error('Failed to fetch orders:', error); }\n        }\n\n        async function createWallet() {\n            try {\n                var response = await fetch(API_URL + '\/wallet\/new', { method: 'POST' });\n                var data = await response.json();\n                wallets.push({ id: data.wallet_id, address: data.address, seedPhrase: data.seed_phrase, privateKey: data.private_key });\n                saveWallets();\n                updateWalletSelect();\n                document.getElementById('walletSelect').value = data.wallet_id;\n                updateBalances();\n                showMessage('Wallet created: ' + data.wallet_id + ' (500 test coins)', 'success');\n            } catch (error) { showMessage('Failed to create wallet', 'error'); }\n        }\n\n        function updateWalletSelect() {\n            var select = document.getElementById('walletSelect');\n            var html = '<option value=\"\">Select Wallet...<\/option>';\n            for (var i = 0; i < wallets.length; i++) {\n                html += '<option value=\"' + wallets[i].id + '\">Wallet ' + wallets[i].id + '<\/option>';\n            }\n            select.innerHTML = html;\n        }\n\n        async function updateBalances() {\n            var walletId = document.getElementById('walletSelect').value;\n            var balDiv = document.getElementById('walletBalances');\n            if (!walletId) { balDiv.innerHTML = ''; document.getElementById('fromBalance').textContent = '0'; document.getElementById('toBalance').textContent = '0'; return; }\n            var wallet = wallets.find(function(w) { return w.id === walletId; });\n            if (!wallet) return;\n            try {\n                var response = await fetch(API_URL + '\/balance\/' + encodeURIComponent(wallet.address));\n                var data = await response.json();\n                balDiv.innerHTML = '<div class=\"wallet-balance\"><span>COIN<\/span><span style=\"color:#2ecc71\">' + (data.balance || 0) + '<\/span><\/div><div class=\"wallet-balance\"><span>SHANE<\/span><span style=\"color:#9b59b6\">0<\/span><\/div>';\n                var fromToken = document.getElementById('fromToken').value;\n                var toToken = document.getElementById('toToken').value;\n                document.getElementById('fromBalance').textContent = fromToken === 'COIN' ? (data.balance || 0) : '0';\n                document.getElementById('toBalance').textContent = toToken === 'COIN' ? (data.balance || 0) : '0';\n            } catch (e) { balDiv.innerHTML = ''; }\n        }\n\n        function swapTokens() {\n            var fromToken = document.getElementById('fromToken');\n            var toToken = document.getElementById('toToken');\n            var temp = fromToken.value;\n            fromToken.value = toToken.value;\n            toToken.value = temp;\n            var fromAmount = document.getElementById('fromAmount');\n            var toAmount = document.getElementById('toAmount');\n            fromAmount.value = toAmount.value;\n            toAmount.value = '';\n            updateBalances();\n            getQuote();\n        }\n\n        function setMaxFrom() {\n            var balance = parseFloat(document.getElementById('fromBalance').textContent) || 0;\n            document.getElementById('fromAmount').value = balance;\n            getQuote();\n        }\n\n        async function getQuote() {\n            var fromToken = document.getElementById('fromToken').value;\n            var toToken = document.getElementById('toToken').value;\n            var amount = parseFloat(document.getElementById('fromAmount').value) || 0;\n            var btn = document.getElementById('swapBtn');\n            var details = document.getElementById('swapDetails');\n            if (amount <= 0) { btn.textContent = 'Enter an amount'; btn.disabled = true; details.style.display = 'none'; document.getElementById('toAmount').value = ''; return; }\n            try {\n                var response = await fetch(API_URL + '\/dex\/quote', {\n                    method: 'POST',\n                    headers: { 'Content-Type': 'application\/json' },\n                    body: JSON.stringify({ from_token: fromToken, to_token: toToken, amount: amount })\n                });\n                var data = await response.json();\n                if (response.ok) {\n                    document.getElementById('toAmount').value = data.output_amount.toFixed(6);\n                    document.getElementById('swapPrice').textContent = '1 ' + fromToken + ' = ' + data.price.toFixed(6) + ' ' + toToken;\n                    document.getElementById('priceImpact').textContent = data.price_impact.toFixed(2) + '%';\n                    document.getElementById('swapFee').textContent = data.fee.toFixed(6) + ' ' + fromToken;\n                    document.getElementById('minReceived').textContent = (data.output_amount * (1 - slippage\/100)).toFixed(6) + ' ' + toToken;\n                    details.style.display = 'block';\n                    btn.textContent = 'Swap ' + fromToken + ' for ' + toToken;\n                    btn.disabled = false;\n                    var balance = parseFloat(document.getElementById('fromBalance').textContent) || 0;\n                    if (amount > balance) { btn.textContent = 'Insufficient ' + fromToken + ' balance'; btn.disabled = true; }\n                } else { btn.textContent = data.error || 'Error getting quote'; btn.disabled = true; }\n            } catch (error) { btn.textContent = 'Error getting quote'; btn.disabled = true; }\n        }\n\n        async function executeSwap() {\n            var walletId = document.getElementById('walletSelect').value;\n            if (!walletId) { showMessage('Please select a wallet first', 'error'); return; }\n            var fromToken = document.getElementById('fromToken').value;\n            var toToken = document.getElementById('toToken').value;\n            var amount = parseFloat(document.getElementById('fromAmount').value) || 0;\n            var minOutput = parseFloat(document.getElementById('toAmount').value) * (1 - slippage\/100);\n            var btn = document.getElementById('swapBtn');\n            btn.textContent = 'Swapping...'; btn.disabled = true;\n            try {\n                var response = await fetch(API_URL + '\/dex\/swap', {\n                    method: 'POST',\n                    headers: { 'Content-Type': 'application\/json' },\n                    body: JSON.stringify({ wallet_id: walletId, from_token: fromToken, to_token: toToken, amount: amount, min_output: minOutput })\n                });\n                var data = await response.json();\n                if (response.ok) {\n                    showMessage('\u2705 Swapped ' + amount + ' ' + fromToken + ' for ' + data.output_amount + ' ' + toToken, 'success');\n                    document.getElementById('fromAmount').value = '';\n                    document.getElementById('toAmount').value = '';\n                    updateBalances(); fetchPool();\n                    btn.textContent = 'Enter an amount';\n                } else { showMessage(data.error || 'Swap failed', 'error'); btn.textContent = 'Swap'; btn.disabled = false; }\n            } catch (error) { showMessage('Swap failed', 'error'); btn.textContent = 'Swap'; btn.disabled = false; }\n        }\n\n        async function addLiquidity() {\n            var walletId = document.getElementById('walletSelect').value;\n            if (!walletId) { showMessage('Please select a wallet first', 'error'); return; }\n            var amount1 = parseFloat(document.getElementById('lpAmount1').value) || 0;\n            var amount2 = parseFloat(document.getElementById('lpAmount2').value) || 0;\n            if (amount1 <= 0 || amount2 <= 0) { showMessage('Enter both amounts', 'error'); return; }\n            var statusDiv = document.getElementById('liquidityStatus');\n            statusDiv.innerHTML = '<div class=\"loading\"><div class=\"spinner\"><\/div>Adding liquidity...<\/div>';\n            try {\n                var response = await fetch(API_URL + '\/dex\/add-liquidity', {\n                    method: 'POST',\n                    headers: { 'Content-Type': 'application\/json' },\n                    body: JSON.stringify({ wallet_id: walletId, pair: 'SHANE_COIN', amount1: amount1, amount2: amount2 })\n                });\n                var data = await response.json();\n                if (response.ok) {\n                    statusDiv.innerHTML = '<div class=\"alert alert-success\">\u2705 Added liquidity! LP tokens: ' + data.lp_tokens_minted.toFixed(4) + '<br>Pool share: ' + data.pool_share + '%<\/div>';\n                    document.getElementById('lpAmount1').value = '';\n                    document.getElementById('lpAmount2').value = '';\n                    updateBalances(); fetchPool();\n                } else { statusDiv.innerHTML = '<div class=\"alert alert-error\">' + data.error + '<\/div>'; }\n            } catch (error) { statusDiv.innerHTML = '<div class=\"alert alert-error\">Failed to add liquidity<\/div>'; }\n        }\n\n        function setOrderSide(side) {\n            orderSide = side;\n            document.getElementById('buyTab').classList.toggle('active', side === 'buy');\n            document.getElementById('sellTab').classList.toggle('active', side === 'sell');\n            document.getElementById('orderBtn').textContent = 'Place ' + (side === 'buy' ? 'Buy' : 'Sell') + ' Order';\n            document.getElementById('orderBtn').className = 'btn ' + (side === 'buy' ? 'btn-green' : 'btn-red');\n        }\n\n        document.getElementById('orderPrice').addEventListener('input', updateOrderTotal);\n        document.getElementById('orderAmount').addEventListener('input', updateOrderTotal);\n\n        function updateOrderTotal() {\n            var price = parseFloat(document.getElementById('orderPrice').value) || 0;\n            var amount = parseFloat(document.getElementById('orderAmount').value) || 0;\n            document.getElementById('orderTotal').textContent = (price * amount).toFixed(4) + ' COIN';\n        }\n\n        async function placeOrder() {\n            var walletId = document.getElementById('walletSelect').value;\n            if (!walletId) { showMessage('Please select a wallet first', 'error'); return; }\n            var price = parseFloat(document.getElementById('orderPrice').value) || 0;\n            var amount = parseFloat(document.getElementById('orderAmount').value) || 0;\n            if (price <= 0 || amount <= 0) { showMessage('Enter price and amount', 'error'); return; }\n            var statusDiv = document.getElementById('orderStatus');\n            statusDiv.innerHTML = '<div class=\"loading\"><div class=\"spinner\"><\/div>Placing order...<\/div>';\n            try {\n                var response = await fetch(API_URL + '\/dex\/order', {\n                    method: 'POST',\n                    headers: { 'Content-Type': 'application\/json' },\n                    body: JSON.stringify({ wallet_id: walletId, pair: 'SHANE_COIN', side: orderSide, price: price, amount: amount })\n                });\n                var data = await response.json();\n                if (response.ok) {\n                    statusDiv.innerHTML = '<div class=\"alert alert-success\">\u2705 ' + data.message + '<\/div>';\n                    document.getElementById('orderPrice').value = '';\n                    document.getElementById('orderAmount').value = '';\n                    fetchOrders();\n                } else { statusDiv.innerHTML = '<div class=\"alert alert-error\">' + data.error + '<\/div>'; }\n            } catch (error) { statusDiv.innerHTML = '<div class=\"alert alert-error\">Failed to place order<\/div>'; }\n        }\n\n        async function init() {\n            \/\/ Load wallets from localStorage\n            loadWallets();\n            \n            await fetchPool();\n            await fetchOrders();\n            \n            \/\/ Re-register wallets with backend\n            if (wallets.length > 0) {\n                for (var i = 0; i < wallets.length; i++) {\n                    var wallet = wallets[i];\n                    if (wallet.seedPhrase || wallet.privateKey) {\n                        try {\n                            var body = {};\n                            if (wallet.seedPhrase) body.seed_phrase = wallet.seedPhrase;\n                            else if (wallet.privateKey) body.private_key = wallet.privateKey;\n                            \n                            var response = await fetch(API_URL + '\/wallet\/import', {\n                                method: 'POST',\n                                headers: { 'Content-Type': 'application\/json' },\n                                body: JSON.stringify(body)\n                            });\n                            var data = await response.json();\n                            if (response.ok) {\n                                wallets[i].id = data.wallet_id;\n                                wallets[i].address = data.address;\n                            }\n                        } catch (e) {}\n                    }\n                }\n                saveWallets();\n                updateWalletSelect();\n                showMessage('Loaded ' + wallets.length + ' wallet(s)', 'success');\n            }\n            \n            setInterval(fetchPool, 10000);\n            setInterval(fetchOrders, 10000);\n        }\n\n        init();\n    <\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>ShaneSwap DEX | Decentralized Exchange &#8211; Trade SHANE Tokens \ud83d\udd04 ShaneSwap Decentralized Exchange &#8211; Swap, Trade &#038; Earn \u26a1 Instant Swaps \u2022 0.3% Fee Total Liquidity $0 24h Volume $0 Total Trades 0 SHANE Price $0.00 \ud83d\udd17 Connect Wallet + New Select Wallet Select Wallet&#8230; \ud83d\udd04 Swap \ud83d\udca7 Liquidity \ud83d\udccb Orders \ud83d\udd04 Swap Tokens From [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-66","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/shanecherry.com\/index.php?rest_route=\/wp\/v2\/pages\/66","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/shanecherry.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/shanecherry.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/shanecherry.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/shanecherry.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=66"}],"version-history":[{"count":4,"href":"https:\/\/shanecherry.com\/index.php?rest_route=\/wp\/v2\/pages\/66\/revisions"}],"predecessor-version":[{"id":78,"href":"https:\/\/shanecherry.com\/index.php?rest_route=\/wp\/v2\/pages\/66\/revisions\/78"}],"wp:attachment":[{"href":"https:\/\/shanecherry.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=66"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}