1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <title>zkPULSE - Code Verification</title> 7 <style> 8 * { 9 margin: 0; 10 padding: 0; 11 box-sizing: border-box; 12 } 13 14 body { 15 font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; 16 background: linear-gradient(135deg, #000000 0%, #0a0a0a 100%); 17 color: #e0e0e0; 18 padding: 40px 20px; 19 min-height: 100vh; 20 } 21 22 .container { 23 max-width: 900px; 24 margin: 0 auto; 25 background: rgba(10, 10, 10, 0.7); 26 backdrop-filter: blur(10px); 27 border-radius: 20px; 28 padding: 40px; 29 border: 1px solid rgba(0, 255, 65, 0.2); 30 box-shadow: 0 0 40px rgba(0, 255, 65, 0.1); 31 } 32 33 h1 { 34 color: #00ff41; 35 margin-bottom: 10px; 36 text-shadow: 0 0 20px rgba(0, 255, 65, 0.5); 37 } 38 39 .subtitle { 40 color: #a0a0a0; 41 margin-bottom: 30px; 42 } 43 44 .status-box { 45 background: rgba(0, 255, 65, 0.1); 46 border: 2px solid #00ff41; 47 border-radius: 10px; 48 padding: 20px; 49 margin-bottom: 30px; 50 } 51 52 .status-box.checking { 53 border-color: #ffc107; 54 background: rgba(255, 193, 7, 0.1); 55 } 56 57 .status-box.error { 58 border-color: #ff0033; 59 background: rgba(255, 0, 51, 0.1); 60 } 61 62 .file-check { 63 display: flex; 64 justify-content: space-between; 65 align-items: center; 66 padding: 10px; 67 margin: 5px 0; 68 background: rgba(10, 10, 10, 0.5); 69 border-radius: 5px; 70 font-family: monospace; 71 font-size: 13px; 72 } 73 74 .file-name { 75 color: #e0e0e0; 76 } 77 78 .status { 79 font-weight: bold; 80 padding: 4px 12px; 81 border-radius: 4px; 82 } 83 84 .status.pending { 85 color: #a0a0a0; 86 background: rgba(160, 160, 160, 0.2); 87 } 88 89 .status.checking { 90 color: #ffc107; 91 background: rgba(255, 193, 7, 0.2); 92 } 93 94 .status.verified { 95 color: #00ff41; 96 background: rgba(0, 255, 65, 0.2); 97 } 98 99 .status.failed { 100 color: #ff0033; 101 background: rgba(255, 0, 51, 0.2); 102 } 103 104 .hash-display { 105 font-family: monospace; 106 font-size: 11px; 107 color: #a0a0a0; 108 word-break: break-all; 109 margin-top: 5px; 110 } 111 112 .button { 113 background: rgba(10, 10, 10, 0.7); 114 color: #00ff41; 115 border: 2px solid #00ff41; 116 padding: 12px 24px; 117 border-radius: 8px; 118 cursor: pointer; 119 font-size: 16px; 120 font-weight: 600; 121 transition: all 0.3s; 122 margin-top: 20px; 123 } 124 125 .button:hover { 126 box-shadow: 0 0 20px rgba(0, 255, 65, 0.4); 127 transform: translateY(-2px); 128 } 129 130 .info-box { 131 background: rgba(10, 10, 10, 0.5); 132 border-left: 3px solid #00ff41; 133 padding: 15px; 134 margin: 20px 0; 135 border-radius: 5px; 136 } 137 138 .info-box h3 { 139 color: #00ff41; 140 margin-bottom: 10px; 141 } 142 143 .info-box p { 144 color: #a0a0a0; 145 line-height: 1.6; 146 } 147 148 .github-link { 149 color: #00ff41; 150 text-decoration: none; 151 border-bottom: 1px solid rgba(0, 255, 65, 0.3); 152 } 153 154 .github-link:hover { 155 border-bottom-color: #00ff41; 156 } 157 158 code { 159 background: rgba(0, 255, 65, 0.1); 160 padding: 2px 6px; 161 border-radius: 3px; 162 font-family: monospace; 163 color: #00ff41; 164 } 165 </style> 166</head> 167<body> 168 <div class="container"> 169 <h1>ð Code Verification</h1> 170 <p class="subtitle">Verify that this site matches the public GitHub repository</p> 171 172 <div class="status-box" id="mainStatus"> 173 <h2 style="margin-bottom: 15px; color: #00ff41;">Verification Status</h2> 174 <p id="statusMessage">Click "Verify Files" to check that this site matches the GitHub repository.</p> 175 </div> 176 177 <div id="fileChecks"></div> 178 179 <button class="button" onclick="verifyFiles()">ð Verify Files</button> 180 181 <div class="info-box"> 182 <h3>What This Verifies</h3> 183 <p> 184 This tool downloads the public source code from 185 <a href="https://github.com/proestever/zkPULSE_OFFICIAL" target="_blank" class="github-link">GitHub</a> 186 and compares it with the files currently running on this site. 187 </p> 188 <p style="margin-top: 10px;"> 189 â If hashes match: The code is identical - no hidden changes<br> 190 â If hashes don't match: The files have been modified 191 </p> 192 </div> 193 194 <div class="info-box"> 195 <h3>How to Verify Manually</h3> 196 <p> 197 You can also verify the code yourself: 198 </p> 199 <ol style="color: #a0a0a0; margin-left: 20px; margin-top: 10px; line-height: 1.8;"> 200 <li>Press F12 to open browser Developer Tools</li> 201 <li>Go to the "Sources" or "Debugger" tab</li> 202 <li>View any file (like <code>app-complete.js</code>)</li> 203 <li>Compare with the 204 <a href="https://github.com/proestever/zkPULSE_OFFICIAL" target="_blank" class="github-link">GitHub repository</a> 205 </li> 206 </ol> 207 </div> 208 209 <div class="info-box"> 210 <h3>Smart Contract Verification</h3> 211 <p>Smart contracts are verified on PulseScan:</p> 212 <ul style="color: #a0a0a0; margin-left: 20px; margin-top: 10px; line-height: 1.8;"> 213 <li>1M PLS: <a href="https://scan.pulsechain.com/address/0x65d1D748b4d513756cA179049227F6599D803594" target="_blank" class="github-link">View Contract</a></li> 214 <li>10M PLS: <a href="https://scan.pulsechain.com/address/0x21349F435c703F933eBF2bb2A5aB2d716e00b205" target="_blank" class="github-link">View Contract</a></li> 215 <li>100M PLS: <a href="https://scan.pulsechain.com/address/0x2443ccEef2D2803A97A12f5A9AA7db3BEc154B73" target="_blank" class="github-link">View Contract</a></li> 216 <li>1B PLS: <a href="https://scan.pulsechain.com/address/0x282476B716146eAAbCfBDd339e527903deFD969b" target="_blank" class="github-link">View Contract</a></li> 217 </ul> 218 </div> 219 </div> 220 221
221<script> 222 // Expected file hashes from GitHub repository 223 const EXPECTED_HASHES = { 224 'index.html': 'fdc9b058a61edfa952e87d8b8b263d01633f3279db7b7190f0dfb660ad7633d7', 225 'app-complete.js': '2b50d5ef22434fe56123d135b600213a180b135737842dd13d4c807eff9c35ac', 226 'deposit-tracker.js': '6c55f86b096698a65412fe42791570be9ab4212cda68182d511b5dc88156dacf', 227 'withdrawal-complete.js': 'e89f0781ef40ceeadcb7807eaa3c5536ec47b88278171d53e20d600b0181c0ce', 228 'web3.min.js': 'd532f1e74af7c10e763a5026e6349fa53c1b37d309e75372b1f2e6b179943c39', 229 'relayer-ui.js': 'ff52035f446061a056406eab8ada56fc799d095176e04dea482b60103e151afb', 230 'deposit-recovery.js': '60528de9f40ea79582bb7c6d2a6e5a531f0b9d56953726b9a2d91cb4d195170b' 231 }; 232 233 async function sha256(text) { 234 const buffer = new TextEncoder().encode(text); 235 const hashBuffer = await crypto.subtle.digest('SHA-256', buffer); 236 const hashArray = Array.from(new Uint8Array(hashBuffer)); 237 return hashArray.map(b => b.toString(16).padStart(2, '0')).join(''); 238 } 239 240 async function verifyFiles() { 241 const filesDiv = document.getElementById('fileChecks'); 242 filesDiv.innerHTML = ''; 243 244 const statusBox = document.getElementById('mainStatus'); 245 statusBox.className = 'status-box checking'; 246 document.getElementById('statusMessage').textContent = 'Verifying files...'; 247 248 let verified = 0; 249 let failed = 0; 250 251 for (const [filename, expectedHash] of Object.entries(EXPECTED_HASHES)) { 252 const fileDiv = document.createElement('div'); 253 fileDiv.className = 'file-check'; 254 fileDiv.innerHTML = ` 255 <span class="file-name">${filename}</span> 256 <span class="status checking" id="status-${filename}">Checking...</span> 257 `; 258 filesDiv.appendChild(fileDiv); 259 260 try { 261 const response = await fetch(filename); 262 const content = await response.text(); 263 const actualHash = await sha256(content); 264 265 const statusEl = document.getElementById(`status-${filename}`); 266 267 if (actualHash === expectedHash) { 268 statusEl.textContent = 'â Verified'; 269 statusEl.className = 'status verified'; 270 verified++; 271 } else { 272 statusEl.textContent = 'â Mismatch'; 273 statusEl.className = 'status failed'; 274 failed++; 275 276 // Show hash details 277 const hashDiv = document.createElement('div'); 278 hashDiv.className = 'hash-display'; 279 hashDiv.innerHTML = ` 280 Expected: ${expectedHash}<br> 281 Actual: ${actualHash} 282 `; 283 fileDiv.appendChild(hashDiv); 284 } 285 } catch (error) { 286 const statusEl = document.getElementById(`status-${filename}`); 287 statusEl.textContent = 'â ï¸ Error'; 288 statusEl.className = 'status failed'; 289 failed++; 290 } 291 } 292 293 // Update main status 294 if (failed === 0) { 295 statusBox.className = 'status-box'; 296 document.getElementById('statusMessage').innerHTML = ` 297 ð <strong>SUCCESS!</strong> All ${verified} files verified.<br> 298 The code running on this site matches the public GitHub repository. 299 `; 300 } else { 301 statusBox.className = 'status-box error'; 302 document.getElementById('statusMessage').innerHTML = ` 303 â ï¸ <strong>Warning:</strong> ${failed} file(s) don't match the repository.<br> 304 This could indicate the site has been modified. 305 `; 306 } 307 } 308 </script>
vendor: 1 bytes, line 308
308
309<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v4bc70e2c01a94c73b74392e4234840661791215815920" integrity="sha512-L0ha0OXavK/8okipN9F8BtP84dg9DUhPERbBXzwI6dgTA55d2+yweo3pn5CSFYs45/r8md2+xvUPtTdvTNRfjA==" data-cf-beacon='{"version":"2024.11.0","token":"5306fd7e53f340799b76ddd158dd3691","r":1,"spa":2}' crossorigin="anonymous"></script>
309 310</body> 311</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.