PageSourceSearch

https://zkpulse.app/verify.html

html zkpulse.app collected 2026-10-08 23:37:03 UTC 11,565 bytes, 311 lines download raw bytes

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.