{"id":49,"date":"2026-01-11T16:40:48","date_gmt":"2026-01-11T16:40:48","guid":{"rendered":"https:\/\/shanecherry.com\/?page_id=49"},"modified":"2026-01-13T01:36:31","modified_gmt":"2026-01-13T01:36:31","slug":"blockchain-explorer","status":"publish","type":"page","link":"https:\/\/shanecherry.com\/?page_id=49","title":{"rendered":"Blockchain Explorer"},"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>ShaneCoin Blockchain Explorer | Proof of Stake Crypto Platform<\/title>\n    <meta name=\"title\" content=\"ShaneCoin Blockchain Explorer | Proof of Stake Crypto Platform\">\n    <meta name=\"description\" content=\"Explore the ShaneCoin blockchain. Create wallets, stake coins, deploy smart contracts, create tokens, and trade on our decentralized exchange. Built with Proof of Stake consensus.\">\n    <meta name=\"keywords\" content=\"blockchain, cryptocurrency, ShaneCoin, proof of stake, PoS, smart contracts, tokens, staking, crypto wallet, decentralized exchange, DEX, Web3\">\n    <meta name=\"author\" content=\"Shane Cherry\">\n    <meta name=\"robots\" content=\"index, follow\">\n    <link rel=\"canonical\" href=\"https:\/\/shanecherry.com\/blockchain\">\n    \n    <!-- Open Graph \/ Facebook -->\n    <meta property=\"og:type\" content=\"website\">\n    <meta property=\"og:url\" content=\"https:\/\/shanecherry.com\/blockchain\">\n    <meta property=\"og:title\" content=\"ShaneCoin Blockchain Explorer | Proof of Stake Crypto Platform\">\n    <meta property=\"og:description\" content=\"Explore the ShaneCoin blockchain. Create wallets, stake coins, deploy smart contracts, and trade on our DEX.\">\n    <meta property=\"og:image\" content=\"https:\/\/shanecherry.com\/images\/shanecoin-og.png\">\n    <meta property=\"og:site_name\" content=\"ShaneCoin\">\n    \n    <!-- Twitter -->\n    <meta name=\"twitter:card\" content=\"summary_large_image\">\n    <meta name=\"twitter:url\" content=\"https:\/\/shanecherry.com\/blockchain\">\n    <meta name=\"twitter:title\" content=\"ShaneCoin Blockchain Explorer | Proof of Stake Crypto Platform\">\n    <meta name=\"twitter:description\" content=\"Explore the ShaneCoin blockchain. Create wallets, stake coins, deploy smart contracts, and trade on our DEX.\">\n    <meta name=\"twitter:image\" content=\"https:\/\/shanecherry.com\/images\/shanecoin-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\": \"ShaneCoin Blockchain Explorer\",\n        \"description\": \"A full-featured blockchain platform with Proof of Stake consensus, smart contracts, token creation, and decentralized exchange.\",\n        \"url\": \"https:\/\/shanecherry.com\/blockchain\",\n        \"applicationCategory\": \"FinanceApplication\",\n        \"operatingSystem\": \"Web Browser\",\n        \"offers\": {\n            \"@type\": \"Offer\",\n            \"price\": \"0\",\n            \"priceCurrency\": \"USD\"\n        },\n        \"author\": {\n            \"@type\": \"Person\",\n            \"name\": \"Shane Cherry\",\n            \"url\": \"https:\/\/shanecherry.com\"\n        },\n        \"publisher\": {\n            \"@type\": \"Organization\",\n            \"name\": \"ShaneCoin\",\n            \"url\": \"https:\/\/shanecherry.com\"\n        },\n        \"featureList\": [\n            \"Proof of Stake Consensus\",\n            \"Smart Contract Deployment\",\n            \"Custom Token Creation\",\n            \"Decentralized Exchange\",\n            \"Wallet Management\",\n            \"Staking Rewards\"\n        ]\n    }\n    <\/script>\n    \n    <!-- Additional Structured Data for Cryptocurrency -->\n    <script type=\"application\/ld+json\">\n    {\n        \"@context\": \"https:\/\/schema.org\",\n        \"@type\": \"FinancialProduct\",\n        \"name\": \"ShaneCoin\",\n        \"description\": \"ShaneCoin (SHANE) is a Proof of Stake cryptocurrency with smart contract capabilities.\",\n        \"url\": \"https:\/\/shanecherry.com\",\n        \"provider\": {\n            \"@type\": \"Organization\",\n            \"name\": \"ShaneCoin\"\n        },\n        \"category\": \"Cryptocurrency\"\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, #1a1a2e 0%, #16213e 50%, #0f3460 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); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; }\n        header p { color: #888; margin-top: 10px; }\n        .stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); gap: 12px; margin-bottom: 30px; }\n        .stat-card { background: rgba(255,255,255,0.05); border: 1px solid rgba(255,255,255,0.1); border-radius: 15px; padding: 15px; text-align: center; transition: transform 0.3s, box-shadow 0.3s; }\n        .stat-card:hover { transform: translateY(-5px); box-shadow: 0 10px 30px rgba(0,212,255,0.2); }\n        .stat-card h3 { color: #888; font-size: 0.7em; text-transform: uppercase; letter-spacing: 1px; }\n        .stat-card .value { font-size: 1.8em; font-weight: bold; color: #00d4ff; margin-top: 8px; }\n        .stat-card .value.green { color: #2ecc71; }\n        .stat-card .value.purple { color: #9b59b6; }\n        .main-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 30px; margin-bottom: 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: 15px; padding: 25px; }\n        .btn { background: linear-gradient(90deg, #00d4ff, #7b2cbf); color: white; border: none; padding: 12px 25px; border-radius: 8px; cursor: pointer; font-size: 1em; font-weight: bold; transition: transform 0.2s, box-shadow 0.2s; width: 100%; margin-top: 10px; }\n        .btn:hover { transform: scale(1.02); box-shadow: 0 5px 20px rgba(0,212,255,0.4); }\n        .btn-stake { background: linear-gradient(90deg, #2ecc71, #27ae60); }\n        .btn-validate { background: linear-gradient(90deg, #f39c12, #e67e22); }\n        .btn-token { background: linear-gradient(90deg, #9b59b6, #3498db); }\n        .btn-vote { background: linear-gradient(90deg, #1abc9c, #16a085); }\n        .btn-unstake { background: linear-gradient(90deg, #e74c3c, #c0392b); }\n        .btn-purple { background: linear-gradient(90deg, #9b59b6, #8e44ad); }\n        .btn-buy { background: linear-gradient(90deg, #f1c40f, #f39c12); color: #000; }\n        input, select { width: 100%; padding: 12px 15px; border: 1px solid rgba(255,255,255,0.2); border-radius: 8px; background: rgba(255,255,255,0.05); color: #fff; font-size: 1em; margin-bottom: 15px; }\n        input:focus, select:focus { outline: none; border-color: #00d4ff; }\n        label { display: block; margin-bottom: 8px; color: #aaa; }\n        .wallet-list { max-height: 200px; overflow-y: auto; }\n        .wallet-item { background: rgba(255,255,255,0.05); border: 1px solid rgba(255,255,255,0.1); border-radius: 10px; padding: 15px; margin-bottom: 10px; }\n        .wallet-item .wallet-id { color: #00d4ff; font-weight: bold; }\n        .wallet-item .wallet-balance { color: #2ecc71; font-size: 1.3em; float: right; }\n        .wallet-item .wallet-address { color: #888; font-size: 0.8em; word-break: break-all; margin-top: 5px; }\n        .blockchain-view { max-height: 400px; overflow-y: auto; }\n        .block { background: rgba(255,255,255,0.05); border: 1px solid rgba(255,255,255,0.1); border-radius: 10px; padding: 15px; margin-bottom: 10px; }\n        .block-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; }\n        .block-index { background: linear-gradient(90deg, #00d4ff, #7b2cbf); color: white; padding: 3px 12px; border-radius: 15px; font-weight: bold; font-size: 0.9em; }\n        .block-hash { color: #888; font-family: monospace; font-size: 0.8em; }\n        .alert { padding: 15px; border-radius: 8px; margin-bottom: 15px; }\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: 30px; height: 30px; animation: spin 1s linear infinite; margin: 0 auto 10px; }\n        @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }\n        #message { position: fixed; top: 20px; right: 20px; padding: 15px 25px; border-radius: 10px; z-index: 1000; display: none; }\n        .tab-buttons { display: flex; gap: 5px; margin-bottom: 20px; flex-wrap: wrap; }\n        .tab-btn { flex: 1; min-width: 45px; padding: 10px 5px; background: rgba(255,255,255,0.05); border: 1px solid rgba(255,255,255,0.1); color: #888; cursor: pointer; border-radius: 8px; transition: all 0.3s; font-size: 0.75em; }\n        .tab-btn.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        .contract-item { background: rgba(255,255,255,0.05); border: 1px solid rgba(255,255,255,0.1); border-radius: 10px; padding: 15px; margin-bottom: 10px; }\n        .contract-type { display: inline-block; padding: 3px 10px; border-radius: 15px; font-size: 0.8em; font-weight: bold; }\n        .contract-type.token { background: linear-gradient(90deg, #9b59b6, #3498db); }\n        .contract-type.voting { background: linear-gradient(90deg, #2ecc71, #27ae60); }\n        .contract-address { color: #888; font-family: monospace; font-size: 0.75em; word-break: break-all; margin-top: 5px; }\n        .validator-item { background: rgba(255,255,255,0.05); border: 1px solid rgba(46,204,113,0.3); border-radius: 10px; padding: 15px; margin-bottom: 10px; }\n        .validator-item .stake { color: #2ecc71; font-size: 1.2em; font-weight: bold; float: right; }\n        .validator-item .stats { color: #888; font-size: 0.85em; margin-top: 8px; }\n        .validator-badge { background: linear-gradient(90deg, #2ecc71, #27ae60); color: white; padding: 2px 8px; border-radius: 10px; font-size: 0.75em; margin-left: 5px; }\n        .pos-badge { background: linear-gradient(90deg, #f39c12, #e67e22); color: white; padding: 5px 15px; border-radius: 20px; font-size: 0.9em; display: inline-block; margin-top: 5px; }\n        .package-card { background: rgba(255,255,255,0.05); border: 1px solid rgba(255,255,255,0.1); border-radius: 10px; padding: 15px; margin-bottom: 10px; cursor: pointer; transition: all 0.3s; }\n        .package-card:hover { border-color: #f1c40f; transform: scale(1.02); }\n        .package-card.selected { border-color: #f1c40f; background: rgba(241,196,15,0.1); }\n        .package-card .coins { font-size: 1.5em; font-weight: bold; color: #f1c40f; }\n        .package-card .price { color: #2ecc71; font-size: 1.2em; float: right; }\n        .package-card .bonus { color: #888; font-size: 0.8em; }\n        \n        \/* Footer for SEO *\/\n        footer { text-align: center; padding: 40px 20px; 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        footer nav a:hover { text-decoration: underline; }\n        footer p { color: #666; margin-top: 20px; font-size: 0.9em; }\n    <\/style>\n<\/head>\n<body>\n    <div class=\"container\">\n        <header>\n            <h1>\u26d3\ufe0f Blockchain Explorer<\/h1>\n            <p>Proof of Stake \u2022 Smart Contracts \u2022 Tokens \u2022 Voting<\/p>\n            <span class=\"pos-badge\">\ud83e\udd69 PoS Consensus<\/span>\n        <\/header>\n        \n        <div id=\"message\" role=\"alert\" aria-live=\"polite\"><\/div>\n        \n        <section aria-label=\"Blockchain Statistics\">\n            <div class=\"stats-grid\">\n                <article class=\"stat-card\"><h3>Chain<\/h3><div class=\"value\" id=\"chainLength\">&#8211;<\/div><\/article>\n                <article class=\"stat-card\"><h3>Supply<\/h3><div class=\"value\" id=\"totalSupply\">&#8211;<\/div><\/article>\n                <article class=\"stat-card\"><h3>Staked<\/h3><div class=\"value green\" id=\"totalStaked\">&#8211;<\/div><\/article>\n                <article class=\"stat-card\"><h3>Validators<\/h3><div class=\"value green\" id=\"activeValidators\">&#8211;<\/div><\/article>\n                <article class=\"stat-card\"><h3>Reward<\/h3><div class=\"value\" id=\"blockReward\">&#8211;<\/div><\/article>\n                <article class=\"stat-card\"><h3>Contracts<\/h3><div class=\"value purple\" id=\"totalContracts\">&#8211;<\/div><\/article>\n            <\/div>\n        <\/section>\n        \n        <main class=\"main-grid\">\n            <section class=\"panel\" aria-label=\"Wallet and Transaction Management\">\n                <nav class=\"tab-buttons\" role=\"tablist\">\n                    <button class=\"tab-btn active\" onclick=\"showTab('wallets')\" role=\"tab\" aria-selected=\"true\">\ud83d\udcb0 Wallets<\/button>\n                    <button class=\"tab-btn\" onclick=\"showTab('buy')\" role=\"tab\">\ud83d\udcb3 Buy<\/button>\n                    <button class=\"tab-btn\" onclick=\"showTab('send')\" role=\"tab\">\ud83d\udce4 Send<\/button>\n                    <button class=\"tab-btn\" onclick=\"showTab('stake')\" role=\"tab\">\ud83e\udd69 Stake<\/button>\n                    <button class=\"tab-btn\" onclick=\"showTab('token')\" role=\"tab\">\ud83e\ude99 Token<\/button>\n                    <button class=\"tab-btn\" onclick=\"showTab('voting')\" role=\"tab\">\ud83d\uddf3\ufe0f Vote<\/button>\n                <\/nav>\n                \n                <div id=\"wallets-tab\" class=\"tab-content active\" role=\"tabpanel\">\n                    <button class=\"btn\" onclick=\"createWallet()\">+ Create New Wallet<\/button>\n                    <button class=\"btn btn-purple\" onclick=\"showImportModal()\" style=\"margin-top: 10px;\">\ud83d\udce5 Import Wallet<\/button>\n                    <button class=\"btn btn-unstake\" onclick=\"clearWallets()\" style=\"margin-top: 10px; font-size: 0.85em;\">\ud83d\uddd1\ufe0f Clear All Wallets<\/button>\n                    <div class=\"wallet-list\" id=\"walletList\" style=\"margin-top: 20px;\"><div class=\"loading\">No wallets yet. Create one!<\/div><\/div>\n                <\/div>\n                \n                <div id=\"buy-tab\" class=\"tab-content\" role=\"tabpanel\">\n                    <h3 style=\"color: #f1c40f; margin-bottom: 15px;\">\ud83d\udcb3 Buy Coins<\/h3>\n                    <p style=\"color: #888; margin-bottom: 15px; font-size: 0.9em;\">Purchase coins with credit card. Instant delivery to your wallet!<\/p>\n                    <label for=\"buyWallet\">Select Wallet<\/label>\n                    <select id=\"buyWallet\" required onchange=\"updateBuyInfo()\"><option value=\"\">Select wallet&#8230;<\/option><\/select>\n                    <div id=\"buyWalletInfo\" style=\"margin-bottom: 15px;\"><\/div>\n                    <label>Select Package<\/label>\n                    <div id=\"packagesList\">\n                        <div class=\"package-card\" onclick=\"selectPackage('starter')\" id=\"pkg-starter\">\n                            <span class=\"price\">$5.00<\/span>\n                            <div class=\"coins\">100 Coins<\/div>\n                            <div class=\"bonus\">Best for trying out<\/div>\n                        <\/div>\n                        <div class=\"package-card\" onclick=\"selectPackage('basic')\" id=\"pkg-basic\">\n                            <span class=\"price\">$20.00<\/span>\n                            <div class=\"coins\">500 Coins<\/div>\n                            <div class=\"bonus\">Most popular!<\/div>\n                        <\/div>\n                        <div class=\"package-card\" onclick=\"selectPackage('pro')\" id=\"pkg-pro\">\n                            <span class=\"price\">$35.00<\/span>\n                            <div class=\"coins\">1,000 Coins<\/div>\n                            <div class=\"bonus\">Save 12.5%<\/div>\n                        <\/div>\n                        <div class=\"package-card\" onclick=\"selectPackage('whale')\" id=\"pkg-whale\">\n                            <span class=\"price\">$150.00<\/span>\n                            <div class=\"coins\">5,000 Coins<\/div>\n                            <div class=\"bonus\">Save 40% &#8211; Best value!<\/div>\n                        <\/div>\n                    <\/div>\n                    <button class=\"btn btn-buy\" onclick=\"buyCoins()\">\ud83d\udcb3 Buy Now with Card<\/button>\n                    <div id=\"buyStatus\" style=\"margin-top: 20px;\"><\/div>\n                <\/div>\n                \n                <div id=\"send-tab\" class=\"tab-content\" role=\"tabpanel\">\n                    <form onsubmit=\"sendTransaction(event)\">\n                        <label for=\"fromWallet\">From Wallet<\/label>\n                        <select id=\"fromWallet\" required><option value=\"\">Select wallet&#8230;<\/option><\/select>\n                        <label for=\"toAddress\">To Address<\/label>\n                        <select id=\"toAddress\" required><option value=\"\">Select recipient&#8230;<\/option><\/select>\n                        <label for=\"amount\">Amount<\/label>\n                        <input type=\"number\" id=\"amount\" step=\"0.01\" min=\"0.01\" placeholder=\"Enter amount\" required>\n                        <button type=\"submit\" class=\"btn\">Send Transaction<\/button>\n                    <\/form>\n                <\/div>\n                \n                <div id=\"stake-tab\" class=\"tab-content\" role=\"tabpanel\">\n                    <h3 style=\"color: #2ecc71; margin-bottom: 15px;\">\ud83e\udd69 Stake to Become a Validator<\/h3>\n                    <p style=\"color: #888; margin-bottom: 15px; font-size: 0.9em;\">Stake at least 100 coins to validate blocks and earn rewards.<\/p>\n                    <label for=\"stakeWallet\">Your Wallet<\/label>\n                    <select id=\"stakeWallet\" required onchange=\"updateStakeInfo()\"><option value=\"\">Select wallet&#8230;<\/option><\/select>\n                    <div id=\"stakeInfo\" style=\"margin-bottom: 15px;\"><\/div>\n                    <label for=\"stakeAmount\">Amount to Stake<\/label>\n                    <input type=\"number\" id=\"stakeAmount\" step=\"1\" min=\"100\" placeholder=\"Min: 100 coins\">\n                    <button class=\"btn btn-stake\" onclick=\"stakeCoins()\">\ud83e\udd69 Stake Coins<\/button>\n                    <button class=\"btn btn-validate\" onclick=\"validateBlock()\" style=\"margin-top: 10px;\">\u2705 Validate Block<\/button>\n                    <button class=\"btn btn-unstake\" onclick=\"unstakeCoins()\" style=\"margin-top: 10px;\">\ud83d\udce4 Unstake Coins<\/button>\n                    <div id=\"stakeStatus\" style=\"margin-top: 20px;\"><\/div>\n                <\/div>\n                \n                <div id=\"token-tab\" class=\"tab-content\" role=\"tabpanel\">\n                    <h3 style=\"color: #9b59b6; margin-bottom: 15px;\">\ud83e\ude99 Create Your Token<\/h3>\n                    <label for=\"tokenWallet\">Your Wallet<\/label>\n                    <select id=\"tokenWallet\" required><option value=\"\">Select wallet&#8230;<\/option><\/select>\n                    <label for=\"tokenName\">Token Name<\/label>\n                    <input type=\"text\" id=\"tokenName\" placeholder=\"e.g. MyToken\">\n                    <label for=\"tokenSymbol\">Symbol<\/label>\n                    <input type=\"text\" id=\"tokenSymbol\" placeholder=\"e.g. MTK\" maxlength=\"10\">\n                    <label for=\"tokenSupply\">Total Supply<\/label>\n                    <input type=\"number\" id=\"tokenSupply\" placeholder=\"e.g. 1000000\">\n                    <button class=\"btn btn-token\" onclick=\"deployToken()\">\ud83d\ude80 Deploy Token<\/button>\n                    <div id=\"tokenStatus\" style=\"margin-top: 20px;\"><\/div>\n                <\/div>\n                \n                <div id=\"voting-tab\" class=\"tab-content\" role=\"tabpanel\">\n                    <h3 style=\"color: #1abc9c; margin-bottom: 15px;\">\ud83d\uddf3\ufe0f Create a Poll<\/h3>\n                    <label for=\"voteWallet\">Your Wallet<\/label>\n                    <select id=\"voteWallet\" required><option value=\"\">Select wallet&#8230;<\/option><\/select>\n                    <label for=\"voteQuestion\">Question<\/label>\n                    <input type=\"text\" id=\"voteQuestion\" placeholder=\"What should we build next?\">\n                    <label for=\"voteOptions\">Options (comma separated)<\/label>\n                    <input type=\"text\" id=\"voteOptions\" placeholder=\"Option A, Option B, Option C\">\n                    <button class=\"btn btn-vote\" onclick=\"deployVoting()\">\ud83d\udcca Create Poll<\/button>\n                    <div id=\"votingStatus\" style=\"margin-top: 20px;\"><\/div>\n                <\/div>\n            <\/section>\n            \n            <section class=\"panel\" aria-label=\"Blockchain Data\">\n                <nav class=\"tab-buttons\" role=\"tablist\">\n                    <button class=\"tab-btn active\" onclick=\"showRightTab('blockchain')\" role=\"tab\" aria-selected=\"true\">\ud83d\udce6 Blocks<\/button>\n                    <button class=\"tab-btn\" onclick=\"showRightTab('validators')\" role=\"tab\">\ud83d\udc65 Validators<\/button>\n                    <button class=\"tab-btn\" onclick=\"showRightTab('contracts')\" role=\"tab\">\ud83d\udcdc Contracts<\/button>\n                <\/nav>\n                \n                <div id=\"blockchain-rtab\" class=\"tab-content active\" role=\"tabpanel\">\n                    <div class=\"blockchain-view\" id=\"blockchainView\"><div class=\"loading\"><div class=\"spinner\"><\/div>Loading blockchain&#8230;<\/div><\/div>\n                <\/div>\n                \n                <div id=\"validators-rtab\" class=\"tab-content\" role=\"tabpanel\">\n                    <div id=\"validatorsList\"><div class=\"loading\">No validators yet<\/div><\/div>\n                <\/div>\n                \n                <div id=\"contracts-rtab\" class=\"tab-content\" role=\"tabpanel\">\n                    <div id=\"contractsList\"><div class=\"loading\">No contracts yet<\/div><\/div>\n                <\/div>\n            <\/section>\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 (ICO)<\/a>\n                <a href=\"\/dex\">DEX Exchange<\/a>\n                <a href=\"\/\">Home<\/a>\n            <\/nav>\n            <p>\u00a9 2026 ShaneCoin. Built with Proof of Stake consensus. All rights reserved.<\/p>\n            <p style=\"margin-top: 10px; font-size: 0.8em;\">Cryptocurrency investments carry risk. This platform is for educational purposes.<\/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\n        function loadWallets() {\n            try {\n                var saved = localStorage.getItem('shanecoin_wallets');\n                if (saved) {\n                    wallets = JSON.parse(saved);\n                    console.log('Loaded ' + wallets.length + ' wallets from storage');\n                }\n            } catch (e) {\n                console.error('Failed to load wallets:', 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                console.log('Saved ' + wallets.length + ' wallets to storage');\n            } catch (e) {\n                console.error('Failed to save wallets:', e);\n            }\n        }\n        \n        \/\/ Clear all wallets (for debugging)\n        function clearWallets() {\n            if (confirm('Are you sure you want to delete ALL wallets? This cannot be undone!')) {\n                wallets = [];\n                saveWallets();\n                updateWalletList();\n                updateWalletSelects();\n                showMessage('All wallets cleared', 'error');\n            }\n        }\n        let contracts = [];\n        let validators = [];\n        let selectedPackage = 'basic';\n\n        window.onload = function() {\n            const urlParams = new URLSearchParams(window.location.search);\n            const purchase = urlParams.get('purchase');\n            const coins = urlParams.get('coins');\n            if (purchase === 'success' && coins) {\n                showMessage('\ud83c\udf89 Purchase successful! ' + coins + ' coins added to your wallet!', 'success');\n            } else if (purchase === 'cancelled') {\n                showMessage('Purchase cancelled', 'error');\n            } else if (purchase === 'error') {\n                showMessage('Purchase error. Please contact support.', 'error');\n            }\n            init();\n        };\n\n        function showMessage(text, type) {\n            if (!type) type = 'success';\n            var msg = document.getElementById('message');\n            msg.textContent = text;\n            msg.className = 'alert alert-' + type;\n            msg.style.display = 'block';\n            setTimeout(function() { msg.style.display = 'none'; }, 4000);\n        }\n\n        function showTab(tabName) {\n            var btns = document.querySelectorAll('.panel:first-of-type .tab-btn');\n            var tabs = document.querySelectorAll('.panel:first-of-type .tab-content');\n            for (var i = 0; i < btns.length; i++) { btns[i].classList.remove('active'); btns[i].setAttribute('aria-selected', 'false'); }\n            for (var i = 0; i < tabs.length; i++) { tabs[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        function showRightTab(tabName) {\n            var btns = document.querySelectorAll('.panel:last-of-type .tab-btn');\n            var tabs = document.querySelectorAll('.panel:last-of-type .tab-content');\n            for (var i = 0; i < btns.length; i++) { btns[i].classList.remove('active'); btns[i].setAttribute('aria-selected', 'false'); }\n            for (var i = 0; i < tabs.length; i++) { tabs[i].classList.remove('active'); }\n            event.target.classList.add('active');\n            event.target.setAttribute('aria-selected', 'true');\n            document.getElementById(tabName + '-rtab').classList.add('active');\n        }\n\n        function selectPackage(pkg) {\n            selectedPackage = pkg;\n            var cards = document.querySelectorAll('.package-card');\n            for (var i = 0; i < cards.length; i++) { cards[i].classList.remove('selected'); }\n            document.getElementById('pkg-' + pkg).classList.add('selected');\n        }\n\n        async function fetchStats() {\n            try {\n                var response = await fetch(API_URL + '\/stats');\n                var data = await response.json();\n                document.getElementById('chainLength').textContent = data.chain_length;\n                document.getElementById('totalSupply').textContent = Math.round(data.total_supply);\n                document.getElementById('totalStaked').textContent = Math.round(data.total_staked || 0);\n                document.getElementById('activeValidators').textContent = data.active_validators || 0;\n                document.getElementById('blockReward').textContent = data.block_reward || 10;\n                document.getElementById('totalContracts').textContent = data.total_contracts || 0;\n            } catch (error) {\n                console.error('Failed to fetch stats:', error);\n            }\n        }\n\n        async function fetchBlockchain() {\n            try {\n                var response = await fetch(API_URL + '\/chain');\n                var data = await response.json();\n                renderBlockchain(data.chain);\n            } catch (error) {\n                document.getElementById('blockchainView').innerHTML = '<div class=\"alert alert-error\">Failed to connect to blockchain<\/div>';\n            }\n        }\n\n        function renderBlockchain(chain) {\n            var container = document.getElementById('blockchainView');\n            var blocks = chain.slice().reverse();\n            var html = '';\n            for (var i = 0; i < blocks.length; i++) {\n                var block = blocks[i];\n                html += '<article class=\"block\"><div class=\"block-header\"><span class=\"block-index\">Block #' + block.index + '<\/span><span style=\"color:#888;font-size:0.8em\">' + new Date(block.timestamp * 1000).toLocaleString() + '<\/span><\/div><div class=\"block-hash\"><strong>Hash:<\/strong> ' + block.hash.substring(0, 20) + '...<\/div><div style=\"margin-top:8px;color:#888;font-size:0.85em\">\ud83d\udcdd ' + block.transactions.length + ' tx' + (block.validator ? ' \u2022 \u2705 Validated' : '') + '<\/div><\/article>';\n            }\n            container.innerHTML = html;\n        }\n\n        async function fetchValidators() {\n            try {\n                var response = await fetch(API_URL + '\/validators');\n                var data = await response.json();\n                validators = data.validators || [];\n                renderValidators();\n            } catch (error) {\n                console.error('Failed to fetch validators:', error);\n            }\n        }\n\n        function renderValidators() {\n            var container = document.getElementById('validatorsList');\n            if (validators.length === 0) {\n                container.innerHTML = '<div class=\"loading\">No validators yet. Stake coins to become one!<\/div>';\n                return;\n            }\n            var html = '';\n            for (var i = 0; i < validators.length; i++) {\n                var v = validators[i];\n                html += '<article class=\"validator-item\"><span class=\"stake\">' + v.stake + ' staked<\/span><div><strong style=\"color:#00d4ff\">Validator<\/strong>' + (v.is_active ? '<span class=\"validator-badge\">Active<\/span>' : '<span style=\"color:#e74c3c;font-size:0.8em;margin-left:5px\">Inactive<\/span>') + '<\/div><div class=\"stats\">Blocks: ' + v.blocks_validated + ' \u2022 Rewards: ' + v.rewards_earned + ' coins<\/div><div style=\"color:#666;font-size:0.7em;margin-top:5px\">' + v.address + '<\/div><\/article>';\n            }\n            container.innerHTML = html;\n        }\n\n        async function fetchContracts() {\n            try {\n                var response = await fetch(API_URL + '\/contracts');\n                var data = await response.json();\n                contracts = data.contracts || [];\n                renderContracts();\n            } catch (error) {\n                console.error('Failed to fetch contracts:', error);\n            }\n        }\n\n        function renderContracts() {\n            var container = document.getElementById('contractsList');\n            if (contracts.length === 0) {\n                container.innerHTML = '<div class=\"loading\">No contracts deployed yet<\/div>';\n                return;\n            }\n            var html = '';\n            for (var i = 0; i < contracts.length; i++) {\n                var c = contracts[i];\n                html += '<article class=\"contract-item\"><span class=\"contract-type ' + c.code_type + '\">' + c.code_type.toUpperCase() + '<\/span>';\n                if (c.code_type === 'token') {\n                    html += '<span style=\"float:right;color:#9b59b6;font-weight:bold\">' + c.state.name + ' (' + c.state.symbol + ')<\/span>';\n                }\n                if (c.code_type === 'voting' && c.state.question) {\n                    html += '<span style=\"float:right;color:#1abc9c;font-size:0.9em\">' + c.state.question.substring(0, 20) + '...<\/span>';\n                }\n                html += '<div class=\"contract-address\">' + c.address + '<\/div><\/article>';\n            }\n            container.innerHTML = html;\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, privateKey: data.private_key, seedPhrase: data.seed_phrase });\n                saveWallets();\n                updateWalletList();\n                updateWalletSelects();\n                showSeedPhraseModal(data.seed_phrase, data.address, data.private_key);\n                fetchStats();\n            } catch (error) {\n                showMessage('Failed to create wallet', 'error');\n            }\n        }\n        \n        function showSeedPhraseModal(seedPhrase, address, privateKey) {\n            var modal = document.createElement('div');\n            modal.id = 'seedModal';\n            modal.setAttribute('role', 'dialog');\n            modal.setAttribute('aria-labelledby', 'seedModalTitle');\n            modal.style.cssText = 'position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.9);z-index:9999;display:flex;align-items:center;justify-content:center;';\n            modal.innerHTML = '<div style=\"background:linear-gradient(135deg,#1a1a2e,#16213e);border:1px solid #00d4ff;border-radius:20px;padding:30px;max-width:500px;width:90%;max-height:90vh;overflow-y:auto;\">' +\n                '<h2 id=\"seedModalTitle\" style=\"color:#f1c40f;margin-bottom:20px;text-align:center;\">\ud83d\udd10 Save Your Recovery Phrase!<\/h2>' +\n                '<p style=\"color:#e74c3c;margin-bottom:20px;text-align:center;font-weight:bold;\">\u26a0\ufe0f Write this down and keep it safe! You will need it to recover your wallet.<\/p>' +\n                '<div style=\"background:rgba(0,0,0,0.3);padding:20px;border-radius:10px;margin-bottom:20px;\">' +\n                '<label style=\"color:#888;font-size:0.85em;\">12-Word Seed Phrase<\/label>' +\n                '<div id=\"seedWords\" style=\"background:#000;padding:15px;border-radius:8px;font-family:monospace;color:#2ecc71;font-size:1.1em;word-spacing:8px;line-height:1.8;margin-top:10px;\">' + seedPhrase + '<\/div>' +\n                '<button onclick=\"copyToClipboard(\\'' + seedPhrase + '\\')\" style=\"margin-top:10px;padding:8px 15px;background:#3498db;border:none;border-radius:5px;color:#fff;cursor:pointer;\">\ud83d\udccb Copy Seed Phrase<\/button>' +\n                '<\/div>' +\n                '<div style=\"background:rgba(0,0,0,0.3);padding:15px;border-radius:10px;margin-bottom:20px;\">' +\n                '<label style=\"color:#888;font-size:0.85em;\">Address (0x...)<\/label>' +\n                '<div style=\"background:#000;padding:10px;border-radius:5px;font-family:monospace;color:#00d4ff;font-size:0.9em;word-break:break-all;margin-top:5px;\">' + address + '<\/div>' +\n                '<\/div>' +\n                '<div style=\"background:rgba(0,0,0,0.3);padding:15px;border-radius:10px;margin-bottom:20px;\">' +\n                '<label style=\"color:#888;font-size:0.85em;\">Private Key<\/label>' +\n                '<div style=\"background:#000;padding:10px;border-radius:5px;font-family:monospace;color:#9b59b6;font-size:0.75em;word-break:break-all;margin-top:5px;\">' + privateKey + '<\/div>' +\n                '<\/div>' +\n                '<button onclick=\"closeSeedModal()\" style=\"width:100%;padding:15px;background:linear-gradient(90deg,#2ecc71,#27ae60);border:none;border-radius:10px;color:#fff;font-weight:bold;font-size:1em;cursor:pointer;\">\u2705 I\\'ve Saved My Recovery Phrase<\/button>' +\n                '<\/div>';\n            document.body.appendChild(modal);\n        }\n        \n        function closeSeedModal() {\n            var modal = document.getElementById('seedModal');\n            if (modal) modal.remove();\n            showMessage('Wallet created! Remember to keep your seed phrase safe!', 'success');\n        }\n        \n        function copyToClipboard(text) {\n            navigator.clipboard.writeText(text).then(function() {\n                showMessage('Copied to clipboard!', 'success');\n            });\n        }\n        \n        function showImportModal() {\n            var modal = document.createElement('div');\n            modal.id = 'importModal';\n            modal.setAttribute('role', 'dialog');\n            modal.setAttribute('aria-labelledby', 'importModalTitle');\n            modal.style.cssText = 'position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.9);z-index:9999;display:flex;align-items:center;justify-content:center;';\n            modal.innerHTML = '<div style=\"background:linear-gradient(135deg,#1a1a2e,#16213e);border:1px solid #00d4ff;border-radius:20px;padding:30px;max-width:500px;width:90%;\">' +\n                '<h2 id=\"importModalTitle\" style=\"color:#00d4ff;margin-bottom:20px;text-align:center;\">\ud83d\udce5 Import Wallet<\/h2>' +\n                '<div style=\"margin-bottom:20px;\">' +\n                '<label for=\"importSeedPhrase\" style=\"color:#888;display:block;margin-bottom:8px;\">Enter 12-Word Seed Phrase<\/label>' +\n                '<textarea id=\"importSeedPhrase\" rows=\"3\" style=\"width:100%;padding:15px;border:1px solid rgba(255,255,255,0.2);border-radius:10px;background:rgba(0,0,0,0.3);color:#fff;font-family:monospace;resize:none;\" placeholder=\"word1 word2 word3 word4 word5 word6 word7 word8 word9 word10 word11 word12\"><\/textarea>' +\n                '<\/div>' +\n                '<p style=\"color:#888;text-align:center;margin-bottom:15px;\">\u2014 OR \u2014<\/p>' +\n                '<div style=\"margin-bottom:20px;\">' +\n                '<label for=\"importPrivateKey\" style=\"color:#888;display:block;margin-bottom:8px;\">Enter Private Key (0x...)<\/label>' +\n                '<input type=\"text\" id=\"importPrivateKey\" style=\"width:100%;padding:15px;border:1px solid rgba(255,255,255,0.2);border-radius:10px;background:rgba(0,0,0,0.3);color:#fff;font-family:monospace;\" placeholder=\"0x...\">' +\n                '<\/div>' +\n                '<button onclick=\"importWallet()\" style=\"width:100%;padding:15px;background:linear-gradient(90deg,#9b59b6,#8e44ad);border:none;border-radius:10px;color:#fff;font-weight:bold;cursor:pointer;margin-bottom:10px;\">\ud83d\udce5 Import Wallet<\/button>' +\n                '<button onclick=\"closeImportModal()\" style=\"width:100%;padding:12px;background:rgba(255,255,255,0.1);border:1px solid rgba(255,255,255,0.2);border-radius:10px;color:#888;cursor:pointer;\">Cancel<\/button>' +\n                '<\/div>';\n            document.body.appendChild(modal);\n        }\n        \n        function closeImportModal() {\n            var modal = document.getElementById('importModal');\n            if (modal) modal.remove();\n        }\n        \n        async function importWallet() {\n            var seedPhrase = document.getElementById('importSeedPhrase').value.trim();\n            var privateKey = document.getElementById('importPrivateKey').value.trim();\n            \n            if (!seedPhrase && !privateKey) {\n                showMessage('Enter seed phrase or private key', 'error');\n                return;\n            }\n            \n            try {\n                var body = {};\n                if (seedPhrase) body.seed_phrase = seedPhrase;\n                if (privateKey) body.private_key = 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                \n                if (response.ok) {\n                    wallets.push({ id: data.wallet_id, address: data.address });\n                    saveWallets();\n                    updateWalletList();\n                    updateWalletSelects();\n                    closeImportModal();\n                    showMessage('Wallet imported! Address: ' + data.address.substring(0, 10) + '...', 'success');\n                    fetchStats();\n                } else {\n                    showMessage(data.error || 'Import failed', 'error');\n                }\n            } catch (error) {\n                showMessage('Import failed', 'error');\n            }\n        }\n\n        async function updateWalletList() {\n            var container = document.getElementById('walletList');\n            if (wallets.length === 0) {\n                container.innerHTML = '<div class=\"loading\">No wallets yet. Create one!<\/div>';\n                return;\n            }\n            var html = '';\n            for (var i = 0; i < wallets.length; i++) {\n                var wallet = wallets[i];\n                var balance = 0;\n                var staked = 0;\n                try {\n                    var response = await fetch(API_URL + '\/balance\/' + encodeURIComponent(wallet.address));\n                    var data = await response.json();\n                    balance = data.balance || 0;\n                    staked = data.staked || 0;\n                } catch (e) {}\n                html += '<article class=\"wallet-item\">' +\n                    '<span class=\"wallet-balance\">' + balance + ' coins<\/span>' +\n                    '<div class=\"wallet-id\">Wallet ' + wallet.id + (staked > 0 ? ' <span class=\"validator-badge\">' + staked + ' staked<\/span>' : '') + '<\/div>' +\n                    '<div class=\"wallet-address\" style=\"color:#00d4ff;font-family:monospace;\">' + wallet.address + '<\/div>' +\n                    '<\/article>';\n            }\n            container.innerHTML = html;\n        }\n\n        function updateWalletSelects() {\n            var selects = ['fromWallet', 'toAddress', 'stakeWallet', 'tokenWallet', 'voteWallet', 'buyWallet'];\n            var options = '';\n            for (var i = 0; i < wallets.length; i++) {\n                options += '<option value=\"' + wallets[i].id + '\">Wallet ' + wallets[i].id + '<\/option>';\n            }\n            for (var i = 0; i < selects.length; i++) {\n                var select = document.getElementById(selects[i]);\n                if (select) {\n                    if (selects[i] === 'toAddress') {\n                        var toOptions = '<option value=\"\">Select recipient...<\/option>';\n                        for (var j = 0; j < wallets.length; j++) {\n                            toOptions += '<option value=\"' + wallets[j].address + '\">Wallet ' + wallets[j].id + '<\/option>';\n                        }\n                        select.innerHTML = toOptions;\n                    } else {\n                        select.innerHTML = '<option value=\"\">Select wallet...<\/option>' + options;\n                    }\n                }\n            }\n        }\n\n        async function updateBuyInfo() {\n            var walletId = document.getElementById('buyWallet').value;\n            var infoDiv = document.getElementById('buyWalletInfo');\n            if (!walletId) { infoDiv.innerHTML = ''; return; }\n            var wallet = null;\n            for (var i = 0; i < wallets.length; i++) {\n                if (wallets[i].id === walletId) { wallet = wallets[i]; break; }\n            }\n            if (!wallet) return;\n            try {\n                var response = await fetch(API_URL + '\/balance\/' + encodeURIComponent(wallet.address));\n                var data = await response.json();\n                infoDiv.innerHTML = '<div style=\"background:rgba(241,196,15,0.1);padding:10px;border-radius:8px;font-size:0.9em;border:1px solid rgba(241,196,15,0.3)\"><strong>Current Balance:<\/strong> ' + (data.balance || 0) + ' coins<\/div>';\n            } catch (e) { infoDiv.innerHTML = ''; }\n        }\n\n        async function updateStakeInfo() {\n            var walletId = document.getElementById('stakeWallet').value;\n            var infoDiv = document.getElementById('stakeInfo');\n            if (!walletId) { infoDiv.innerHTML = ''; return; }\n            var wallet = null;\n            for (var i = 0; i < wallets.length; i++) {\n                if (wallets[i].id === walletId) { wallet = wallets[i]; break; }\n            }\n            if (!wallet) return;\n            try {\n                var response = await fetch(API_URL + '\/balance\/' + encodeURIComponent(wallet.address));\n                var data = await response.json();\n                infoDiv.innerHTML = '<div style=\"background:rgba(0,212,255,0.1);padding:10px;border-radius:8px;font-size:0.9em\"><strong>Balance:<\/strong> ' + (data.balance || 0) + ' coins<br><strong>Staked:<\/strong> ' + (data.staked || 0) + ' coins<\/div>';\n            } catch (e) { infoDiv.innerHTML = ''; }\n        }\n\n        async function buyCoins() {\n            var walletId = document.getElementById('buyWallet').value;\n            if (!walletId) { showMessage('Please select a wallet first', 'error'); return; }\n            var statusDiv = document.getElementById('buyStatus');\n            statusDiv.innerHTML = '<div class=\"loading\"><div class=\"spinner\"><\/div>Creating checkout session...<\/div>';\n            try {\n                var response = await fetch(API_URL + '\/buy\/create-checkout', {\n                    method: 'POST',\n                    headers: { 'Content-Type': 'application\/json' },\n                    body: JSON.stringify({ wallet_id: walletId, package: selectedPackage })\n                });\n                var data = await response.json();\n                if (response.ok && data.checkout_url) {\n                    statusDiv.innerHTML = '<div class=\"alert alert-success\">Redirecting to payment...<\/div>';\n                    window.location.href = data.checkout_url;\n                } else {\n                    statusDiv.innerHTML = '<div class=\"alert alert-error\">' + (data.error || 'Failed to create checkout') + '<\/div>';\n                }\n            } catch (error) {\n                statusDiv.innerHTML = '<div class=\"alert alert-error\">Payment system unavailable. Please try again later.<\/div>';\n            }\n        }\n\n        async function sendTransaction(event) {\n            event.preventDefault();\n            var fromWalletId = document.getElementById('fromWallet').value;\n            var toAddress = document.getElementById('toAddress').value;\n            var amount = document.getElementById('amount').value;\n            try {\n                var response = await fetch(API_URL + '\/transaction\/new', {\n                    method: 'POST',\n                    headers: { 'Content-Type': 'application\/json' },\n                    body: JSON.stringify({ wallet_id: fromWalletId, recipient: toAddress, amount: parseFloat(amount) })\n                });\n                var data = await response.json();\n                if (response.ok) {\n                    showMessage('Transaction added to pending!');\n                    document.getElementById('amount').value = '';\n                    fetchStats();\n                } else {\n                    showMessage(data.error || 'Transaction failed', 'error');\n                }\n            } catch (error) {\n                showMessage('Failed to send transaction', 'error');\n            }\n        }\n\n        async function stakeCoins() {\n            var walletId = document.getElementById('stakeWallet').value;\n            var amount = document.getElementById('stakeAmount').value;\n            if (!walletId || !amount) { showMessage('Select wallet and enter amount', 'error'); return; }\n            var statusDiv = document.getElementById('stakeStatus');\n            statusDiv.innerHTML = '<div class=\"loading\"><div class=\"spinner\"><\/div>Staking...<\/div>';\n            try {\n                var response = await fetch(API_URL + '\/stake', {\n                    method: 'POST',\n                    headers: { 'Content-Type': 'application\/json' },\n                    body: JSON.stringify({ wallet_id: walletId, amount: parseFloat(amount) })\n                });\n                var data = await response.json();\n                if (response.ok) {\n                    statusDiv.innerHTML = '<div class=\"alert alert-success\">\ud83c\udf89 ' + data.message + '<br>Remaining: ' + data.remaining_balance + ' coins<\/div>';\n                    fetchStats(); fetchValidators(); updateWalletList(); updateStakeInfo();\n                } else {\n                    statusDiv.innerHTML = '<div class=\"alert alert-error\">' + data.error + '<\/div>';\n                }\n            } catch (error) {\n                statusDiv.innerHTML = '<div class=\"alert alert-error\">Staking failed<\/div>';\n            }\n        }\n\n        async function unstakeCoins() {\n            var walletId = document.getElementById('stakeWallet').value;\n            var amount = document.getElementById('stakeAmount').value;\n            if (!walletId || !amount) { showMessage('Select wallet and enter amount', 'error'); return; }\n            var statusDiv = document.getElementById('stakeStatus');\n            statusDiv.innerHTML = '<div class=\"loading\"><div class=\"spinner\"><\/div>Unstaking...<\/div>';\n            try {\n                var response = await fetch(API_URL + '\/unstake', {\n                    method: 'POST',\n                    headers: { 'Content-Type': 'application\/json' },\n                    body: JSON.stringify({ wallet_id: walletId, amount: parseFloat(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                    fetchStats(); fetchValidators(); updateWalletList(); updateStakeInfo();\n                } else {\n                    statusDiv.innerHTML = '<div class=\"alert alert-error\">' + data.error + '<\/div>';\n                }\n            } catch (error) {\n                statusDiv.innerHTML = '<div class=\"alert alert-error\">Unstaking failed<\/div>';\n            }\n        }\n\n        async function validateBlock() {\n            var walletId = document.getElementById('stakeWallet').value;\n            if (!walletId) { showMessage('Select a wallet first', 'error'); return; }\n            var statusDiv = document.getElementById('stakeStatus');\n            statusDiv.innerHTML = '<div class=\"loading\"><div class=\"spinner\"><\/div>Validating block...<\/div>';\n            try {\n                var response = await fetch(API_URL + '\/validate', {\n                    method: 'POST',\n                    headers: { 'Content-Type': 'application\/json' },\n                    body: JSON.stringify({ wallet_id: walletId })\n                });\n                var data = await response.json();\n                if (response.ok) {\n                    statusDiv.innerHTML = '<div class=\"alert alert-success\">\u2705 Block validated!<br>Reward: ' + data.reward + ' coins<\/div>';\n                    fetchStats(); fetchBlockchain(); fetchValidators(); updateWalletList();\n                } else {\n                    statusDiv.innerHTML = '<div class=\"alert alert-error\">' + data.error + '<\/div>';\n                }\n            } catch (error) {\n                statusDiv.innerHTML = '<div class=\"alert alert-error\">Validation failed<\/div>';\n            }\n        }\n\n        async function deployToken() {\n            var walletId = document.getElementById('tokenWallet').value;\n            var name = document.getElementById('tokenName').value;\n            var symbol = document.getElementById('tokenSymbol').value;\n            var supply = document.getElementById('tokenSupply').value;\n            if (!walletId || !name || !symbol || !supply) { showMessage('Please fill all fields', 'error'); return; }\n            var statusDiv = document.getElementById('tokenStatus');\n            statusDiv.innerHTML = '<div class=\"loading\"><div class=\"spinner\"><\/div>Deploying token...<\/div>';\n            try {\n                var response = await fetch(API_URL + '\/contract\/deploy', {\n                    method: 'POST',\n                    headers: { 'Content-Type': 'application\/json' },\n                    body: JSON.stringify({ wallet_id: walletId, code_type: 'token', params: { name: name, symbol: symbol.toUpperCase(), total_supply: parseFloat(supply) } })\n                });\n                var data = await response.json();\n                if (response.ok) {\n                    statusDiv.innerHTML = '<div class=\"alert alert-success\">\ud83c\udf89 ' + name + ' (' + symbol + ') deployed!<br><small>' + data.contract.address + '<\/small><\/div>';\n                    fetchStats(); fetchContracts();\n                } else {\n                    statusDiv.innerHTML = '<div class=\"alert alert-error\">' + data.error + '<\/div>';\n                }\n            } catch (error) {\n                statusDiv.innerHTML = '<div class=\"alert alert-error\">Deployment failed<\/div>';\n            }\n        }\n\n        async function deployVoting() {\n            var walletId = document.getElementById('voteWallet').value;\n            var question = document.getElementById('voteQuestion').value;\n            var optionsStr = document.getElementById('voteOptions').value;\n            if (!walletId || !question || !optionsStr) { showMessage('Please fill all fields', 'error'); return; }\n            var optionsArr = optionsStr.split(',');\n            var options = [];\n            for (var i = 0; i < optionsArr.length; i++) {\n                var trimmed = optionsArr[i].trim();\n                if (trimmed) options.push(trimmed);\n            }\n            var statusDiv = document.getElementById('votingStatus');\n            statusDiv.innerHTML = '<div class=\"loading\"><div class=\"spinner\"><\/div>Creating poll...<\/div>';\n            try {\n                var response = await fetch(API_URL + '\/contract\/deploy', {\n                    method: 'POST',\n                    headers: { 'Content-Type': 'application\/json' },\n                    body: JSON.stringify({ wallet_id: walletId, code_type: 'voting', params: { question: question, options: options, end_time: Date.now() \/ 1000 + 86400 } })\n                });\n                var data = await response.json();\n                if (response.ok) {\n                    statusDiv.innerHTML = '<div class=\"alert alert-success\">\ud83d\uddf3\ufe0f Poll created!<br><small>' + data.contract.address + '<\/small><\/div>';\n                    fetchStats(); fetchContracts();\n                } else {\n                    statusDiv.innerHTML = '<div class=\"alert alert-error\">' + data.error + '<\/div>';\n                }\n            } catch (error) {\n                statusDiv.innerHTML = '<div class=\"alert alert-error\">Failed to create poll<\/div>';\n            }\n        }\n\n        async function init() {\n            \/\/ Load saved wallets from localStorage\n            loadWallets();\n            \n            selectPackage('basic');\n            await fetchStats();\n            await fetchBlockchain();\n            await fetchValidators();\n            await fetchContracts();\n            \n            \/\/ Re-register saved wallets with backend\n            if (wallets.length > 0) {\n                var reregistered = 0;\n                for (var i = 0; i < wallets.length; i++) {\n                    var wallet = wallets[i];\n                    \/\/ Re-import wallet to backend using seed phrase or private key\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                                \/\/ Update wallet ID from backend\n                                wallets[i].id = data.wallet_id;\n                                wallets[i].address = data.address;\n                                reregistered++;\n                            }\n                        } catch (e) {\n                            console.error('Failed to re-register wallet:', e);\n                        }\n                    }\n                }\n                saveWallets();\n                updateWalletList();\n                updateWalletSelects();\n                if (reregistered > 0) {\n                    showMessage('Restored ' + reregistered + ' wallet(s) from storage', 'success');\n                }\n            }\n            \n            setInterval(function() { fetchStats(); updateWalletList(); }, 5000);\n        }\n    <\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>ShaneCoin Blockchain Explorer | Proof of Stake Crypto Platform \u26d3\ufe0f Blockchain Explorer Proof of Stake \u2022 Smart Contracts \u2022 Tokens \u2022 Voting \ud83e\udd69 PoS Consensus Chain &#8211; Supply &#8211; Staked &#8211; Validators &#8211; Reward &#8211; Contracts &#8211; \ud83d\udcb0 Wallets \ud83d\udcb3 Buy \ud83d\udce4 Send \ud83e\udd69 Stake \ud83e\ude99 Token \ud83d\uddf3\ufe0f Vote + Create New Wallet \ud83d\udce5 Import [&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-49","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/shanecherry.com\/index.php?rest_route=\/wp\/v2\/pages\/49","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=49"}],"version-history":[{"count":14,"href":"https:\/\/shanecherry.com\/index.php?rest_route=\/wp\/v2\/pages\/49\/revisions"}],"predecessor-version":[{"id":75,"href":"https:\/\/shanecherry.com\/index.php?rest_route=\/wp\/v2\/pages\/49\/revisions\/75"}],"wp:attachment":[{"href":"https:\/\/shanecherry.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=49"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}