2026-01-27 23:57:29 +00:00
|
|
|
|
<!DOCTYPE html>
|
|
|
|
|
|
<html lang="en">
|
|
|
|
|
|
<head>
|
|
|
|
|
|
<meta charset="UTF-8">
|
|
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
2026-02-01 13:24:03 +00:00
|
|
|
|
<title>Bitcoin Knots - Archipelago</title>
|
2026-01-28 00:12:11 +00:00
|
|
|
|
<script src="https://cdn.tailwindcss.com"></script>
|
2026-01-27 23:57:29 +00:00
|
|
|
|
<style>
|
|
|
|
|
|
* {
|
|
|
|
|
|
margin: 0;
|
|
|
|
|
|
padding: 0;
|
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
body {
|
|
|
|
|
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', sans-serif;
|
|
|
|
|
|
min-height: 100vh;
|
|
|
|
|
|
color: white;
|
2026-01-28 00:12:11 +00:00
|
|
|
|
overflow-x: hidden;
|
2026-01-27 23:57:29 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-28 00:12:11 +00:00
|
|
|
|
/* Background - Web5 style */
|
|
|
|
|
|
.bg-perspective-container {
|
|
|
|
|
|
position: fixed;
|
|
|
|
|
|
inset: 0;
|
|
|
|
|
|
z-index: -10;
|
|
|
|
|
|
perspective: 1000px;
|
|
|
|
|
|
perspective-origin: 50% 50%;
|
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.bg-layer {
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
inset: 0;
|
2026-01-28 00:47:00 +00:00
|
|
|
|
background-image: url('/assets/img/bg-web5.jpg');
|
2026-01-28 00:12:11 +00:00
|
|
|
|
background-size: cover;
|
|
|
|
|
|
background-position: center;
|
|
|
|
|
|
background-repeat: no-repeat;
|
|
|
|
|
|
transition: all 0.45s cubic-bezier(0.68, -0.55, 0.265, 1.55);
|
|
|
|
|
|
transform-style: preserve-3d;
|
|
|
|
|
|
opacity: 1;
|
|
|
|
|
|
transform: translateZ(0) scale(1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* Dark overlay - Web5 style (0.8 opacity) */
|
|
|
|
|
|
.overlay {
|
|
|
|
|
|
position: fixed;
|
|
|
|
|
|
inset: 0;
|
|
|
|
|
|
background: rgba(0, 0, 0, 0.8);
|
|
|
|
|
|
z-index: -5;
|
|
|
|
|
|
pointer-events: none;
|
2026-01-27 23:57:29 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-28 00:12:11 +00:00
|
|
|
|
/* Glass card - Web5 style */
|
2026-01-27 23:57:29 +00:00
|
|
|
|
.glass-card {
|
|
|
|
|
|
background-color: rgba(0, 0, 0, 0.65);
|
|
|
|
|
|
backdrop-filter: blur(18px);
|
|
|
|
|
|
-webkit-backdrop-filter: blur(18px);
|
|
|
|
|
|
border: 1px solid rgba(255, 255, 255, 0.18);
|
|
|
|
|
|
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.45);
|
|
|
|
|
|
border-radius: 1rem;
|
2026-01-28 00:12:11 +00:00
|
|
|
|
overflow-x: hidden;
|
|
|
|
|
|
overflow-y: visible;
|
2026-01-27 23:57:29 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-28 00:12:11 +00:00
|
|
|
|
/* Glass button - Web5 style */
|
2026-01-27 23:57:29 +00:00
|
|
|
|
.glass-button {
|
|
|
|
|
|
background-color: rgba(0, 0, 0, 0.6);
|
|
|
|
|
|
backdrop-filter: blur(18px);
|
|
|
|
|
|
-webkit-backdrop-filter: blur(18px);
|
|
|
|
|
|
border: 1px solid rgba(255, 255, 255, 0.18);
|
|
|
|
|
|
color: rgba(255, 255, 255, 0.9);
|
|
|
|
|
|
transition: all 0.3s ease;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.glass-button:hover {
|
|
|
|
|
|
color: white;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-28 00:12:11 +00:00
|
|
|
|
/* Container */
|
|
|
|
|
|
.container {
|
|
|
|
|
|
max-width: 1400px;
|
|
|
|
|
|
margin: 0 auto;
|
2026-01-27 23:57:29 +00:00
|
|
|
|
padding: 2rem;
|
2026-01-28 00:12:11 +00:00
|
|
|
|
padding-bottom: 4rem;
|
2026-01-27 23:57:29 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-28 00:12:11 +00:00
|
|
|
|
/* Logo gradient border */
|
|
|
|
|
|
.logo-gradient-border {
|
|
|
|
|
|
position: relative;
|
|
|
|
|
|
border-radius: 16px;
|
|
|
|
|
|
padding: 3px;
|
|
|
|
|
|
background: linear-gradient(135deg, rgba(255, 255, 255, 0.6) 0%, rgba(0, 0, 0, 0.8) 100%);
|
|
|
|
|
|
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5);
|
|
|
|
|
|
display: inline-block;
|
2026-01-27 23:57:29 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-28 00:12:11 +00:00
|
|
|
|
.logo-gradient-border::after {
|
|
|
|
|
|
content: '';
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
inset: 3px;
|
|
|
|
|
|
border-radius: 13px;
|
|
|
|
|
|
background: #fff;
|
|
|
|
|
|
z-index: 0;
|
2026-01-27 23:57:29 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-28 00:12:11 +00:00
|
|
|
|
.logo-gradient-border img {
|
|
|
|
|
|
border-radius: 13px;
|
|
|
|
|
|
display: block;
|
|
|
|
|
|
position: relative;
|
|
|
|
|
|
z-index: 1;
|
|
|
|
|
|
width: 64px;
|
|
|
|
|
|
height: 64px;
|
2026-01-27 23:57:29 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-28 00:12:11 +00:00
|
|
|
|
/* Ping animation for status dots */
|
|
|
|
|
|
@keyframes ping {
|
|
|
|
|
|
75%, 100% {
|
|
|
|
|
|
transform: scale(2);
|
|
|
|
|
|
opacity: 0;
|
2026-01-27 23:57:29 +00:00
|
|
|
|
}
|
2026-01-28 00:12:11 +00:00
|
|
|
|
}
|
2026-01-27 23:57:29 +00:00
|
|
|
|
|
2026-01-28 00:12:11 +00:00
|
|
|
|
.animate-ping {
|
|
|
|
|
|
animation: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;
|
2026-01-27 23:57:29 +00:00
|
|
|
|
}
|
|
|
|
|
|
</style>
|
|
|
|
|
|
</head>
|
|
|
|
|
|
<body>
|
2026-01-28 00:12:11 +00:00
|
|
|
|
<div class="bg-perspective-container">
|
|
|
|
|
|
<div class="bg-layer"></div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="overlay"></div>
|
|
|
|
|
|
|
2026-01-27 23:57:29 +00:00
|
|
|
|
<div class="container">
|
2026-01-28 00:12:11 +00:00
|
|
|
|
<!-- Header - Glass card with logo top left -->
|
|
|
|
|
|
<div class="glass-card p-6 mb-6">
|
|
|
|
|
|
<div class="flex items-start gap-4">
|
|
|
|
|
|
<!-- Logo - Top Left -->
|
|
|
|
|
|
<div class="flex-shrink-0">
|
|
|
|
|
|
<div class="logo-gradient-border">
|
|
|
|
|
|
<img
|
2026-02-01 13:24:03 +00:00
|
|
|
|
src="/assets/img/app-icons/bitcoin-knots.webp"
|
|
|
|
|
|
alt="Bitcoin Knots"
|
2026-01-28 00:12:11 +00:00
|
|
|
|
class="w-16 h-16"
|
|
|
|
|
|
style="object-fit: contain;"
|
|
|
|
|
|
/>
|
2026-01-27 23:57:29 +00:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
2026-01-28 00:12:11 +00:00
|
|
|
|
|
|
|
|
|
|
<!-- Title and Description -->
|
|
|
|
|
|
<div class="flex-1 min-w-0">
|
2026-02-01 13:24:03 +00:00
|
|
|
|
<h1 class="text-3xl font-bold text-white mb-2">Bitcoin Knots</h1>
|
|
|
|
|
|
<p class="text-white/70">Enhanced Bitcoin node implementation</p>
|
2026-01-28 00:12:11 +00:00
|
|
|
|
<p class="text-sm text-white/60 mt-2">Regtest mode - Development environment</p>
|
2026-01-27 23:57:29 +00:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
2026-01-28 00:12:11 +00:00
|
|
|
|
<!-- Quick Actions Container - Web5 style -->
|
|
|
|
|
|
<div class="glass-card p-6 mb-6">
|
|
|
|
|
|
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4">
|
|
|
|
|
|
<!-- Network Status -->
|
|
|
|
|
|
<div class="flex items-center justify-between p-4 bg-white/5 rounded-lg">
|
|
|
|
|
|
<div class="flex items-center gap-3">
|
|
|
|
|
|
<div class="relative">
|
|
|
|
|
|
<div class="w-3 h-3 rounded-full bg-green-400"></div>
|
|
|
|
|
|
<div class="absolute inset-0 w-3 h-3 rounded-full bg-green-400 animate-ping opacity-75"></div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div>
|
|
|
|
|
|
<p class="text-sm font-medium text-white">Network</p>
|
|
|
|
|
|
<p class="text-xs text-white/60">Regtest</p>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- Block Height -->
|
|
|
|
|
|
<div class="flex items-center justify-between p-4 bg-white/5 rounded-lg">
|
|
|
|
|
|
<div class="flex items-center gap-3">
|
|
|
|
|
|
<div class="relative">
|
|
|
|
|
|
<span class="text-2xl text-orange-500 font-bold">₿</span>
|
2026-01-27 23:57:29 +00:00
|
|
|
|
</div>
|
2026-01-28 00:12:11 +00:00
|
|
|
|
<div>
|
|
|
|
|
|
<p class="text-sm font-medium text-white">Block Height</p>
|
|
|
|
|
|
<p class="text-xs text-orange-500 font-medium" id="blockHeight">0</p>
|
2026-01-27 23:57:29 +00:00
|
|
|
|
</div>
|
2026-01-28 00:12:11 +00:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- RPC Status -->
|
|
|
|
|
|
<div class="flex items-center justify-between p-4 bg-white/5 rounded-lg">
|
|
|
|
|
|
<div class="flex items-center gap-3">
|
|
|
|
|
|
<div class="relative">
|
|
|
|
|
|
<div class="w-3 h-3 rounded-full bg-green-400"></div>
|
|
|
|
|
|
<div class="absolute inset-0 w-3 h-3 rounded-full bg-green-400 animate-ping opacity-75"></div>
|
2026-01-27 23:57:29 +00:00
|
|
|
|
</div>
|
2026-01-28 00:12:11 +00:00
|
|
|
|
<div>
|
|
|
|
|
|
<p class="text-sm font-medium text-white">RPC Server</p>
|
|
|
|
|
|
<p class="text-xs text-white/60">Active</p>
|
2026-01-27 23:57:29 +00:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
2026-01-28 00:12:11 +00:00
|
|
|
|
<button
|
|
|
|
|
|
onclick="openSettings()"
|
|
|
|
|
|
class="px-3 py-1.5 glass-button rounded text-xs font-medium text-white/90 hover:text-white transition-colors"
|
|
|
|
|
|
>
|
|
|
|
|
|
Settings
|
|
|
|
|
|
</button>
|
2026-01-27 23:57:29 +00:00
|
|
|
|
</div>
|
|
|
|
|
|
|
2026-01-28 00:12:11 +00:00
|
|
|
|
<!-- ZMQ Status -->
|
|
|
|
|
|
<div class="flex items-center justify-between p-4 bg-white/5 rounded-lg">
|
|
|
|
|
|
<div class="flex items-center gap-3">
|
|
|
|
|
|
<div class="relative">
|
|
|
|
|
|
<div class="w-3 h-3 rounded-full bg-green-400"></div>
|
|
|
|
|
|
<div class="absolute inset-0 w-3 h-3 rounded-full bg-green-400 animate-ping opacity-75"></div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div>
|
|
|
|
|
|
<p class="text-sm font-medium text-white">ZMQ</p>
|
|
|
|
|
|
<p class="text-xs text-white/60">Enabled</p>
|
2026-01-27 23:57:29 +00:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
2026-01-28 00:12:11 +00:00
|
|
|
|
<button
|
|
|
|
|
|
onclick="openLogs()"
|
|
|
|
|
|
class="px-3 py-1.5 glass-button rounded text-xs font-medium text-white/90 hover:text-white transition-colors"
|
|
|
|
|
|
>
|
|
|
|
|
|
Logs
|
|
|
|
|
|
</button>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- Core Services Overview Cards - Web5 style -->
|
|
|
|
|
|
<div class="grid grid-cols-1 lg:grid-cols-3 gap-6 mb-8">
|
|
|
|
|
|
<!-- Node Information -->
|
|
|
|
|
|
<div class="glass-card p-6">
|
|
|
|
|
|
<div class="flex items-start gap-4 mb-4">
|
|
|
|
|
|
<div class="flex-shrink-0 w-12 h-12 rounded-lg bg-white/10 flex items-center justify-center">
|
|
|
|
|
|
<svg class="w-6 h-6 text-white/80" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
|
|
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h14M5 12a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v4a2 2 0 01-2 2M5 12a2 2 0 00-2 2v4a2 2 0 002 2h14a2 2 0 002-2v-4a2 2 0 00-2-2m-2-4h.01M17 16h.01" />
|
|
|
|
|
|
</svg>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="flex-1">
|
|
|
|
|
|
<h2 class="text-xl font-semibold text-white mb-2">Node Information</h2>
|
|
|
|
|
|
<p class="text-white/70 text-sm mb-4">Bitcoin Core node status</p>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<div class="space-y-3">
|
|
|
|
|
|
<div class="flex items-center justify-between p-3 bg-white/5 rounded-lg">
|
|
|
|
|
|
<div class="flex items-center gap-3">
|
|
|
|
|
|
<svg class="w-5 h-5 text-white/60" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
|
|
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z" />
|
|
|
|
|
|
</svg>
|
|
|
|
|
|
<span class="text-white/80 text-sm">Node Status</span>
|
2026-01-27 23:57:29 +00:00
|
|
|
|
</div>
|
2026-01-28 00:12:11 +00:00
|
|
|
|
<span class="text-green-400 text-sm font-medium">Running</span>
|
2026-01-27 23:57:29 +00:00
|
|
|
|
</div>
|
2026-01-28 00:12:11 +00:00
|
|
|
|
|
|
|
|
|
|
<div class="flex items-center justify-between p-3 bg-white/5 rounded-lg">
|
|
|
|
|
|
<div class="flex items-center gap-3">
|
|
|
|
|
|
<svg class="w-5 h-5 text-white/60" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
|
|
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z" />
|
|
|
|
|
|
</svg>
|
|
|
|
|
|
<span class="text-white/80 text-sm">Version</span>
|
2026-01-27 23:57:29 +00:00
|
|
|
|
</div>
|
2026-01-28 00:12:11 +00:00
|
|
|
|
<span class="text-white/60 text-sm">v27.0</span>
|
2026-01-27 23:57:29 +00:00
|
|
|
|
</div>
|
2026-01-28 00:12:11 +00:00
|
|
|
|
|
|
|
|
|
|
<div class="flex items-center justify-between p-3 bg-white/5 rounded-lg">
|
|
|
|
|
|
<div class="flex items-center gap-3">
|
|
|
|
|
|
<svg class="w-5 h-5 text-white/60" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
|
|
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 20l-5.447-2.724A1 1 0 013 16.382V5.618a1 1 0 011.447-.894L9 7m0 13l6-3m-6 3V7m6 10l4.553 2.276A1 1 0 0021 18.382V7.618a1 1 0 00-.553-.894L15 4m0 13V4m0 0L9 7" />
|
|
|
|
|
|
</svg>
|
|
|
|
|
|
<span class="text-white/80 text-sm">Network</span>
|
2026-01-27 23:57:29 +00:00
|
|
|
|
</div>
|
2026-01-28 00:12:11 +00:00
|
|
|
|
<span class="text-white/60 text-sm">Regtest</span>
|
2026-01-27 23:57:29 +00:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
2026-01-28 00:12:11 +00:00
|
|
|
|
|
|
|
|
|
|
<button class="mt-4 w-full px-4 py-2 glass-button rounded-lg text-sm font-medium text-white/90 hover:text-white transition-colors" onclick="openSettings()">
|
|
|
|
|
|
Node Settings
|
|
|
|
|
|
</button>
|
2026-01-27 23:57:29 +00:00
|
|
|
|
</div>
|
|
|
|
|
|
|
2026-01-28 00:12:11 +00:00
|
|
|
|
<!-- RPC Connection -->
|
|
|
|
|
|
<div class="glass-card p-6">
|
|
|
|
|
|
<div class="flex items-start gap-4 mb-4">
|
|
|
|
|
|
<div class="flex-shrink-0 w-12 h-12 rounded-lg bg-white/10 flex items-center justify-center">
|
|
|
|
|
|
<svg class="w-6 h-6 text-white/80" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
|
|
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.111 16.404a5.5 5.5 0 017.778 0M12 20h.01m-7.08-7.071c3.904-3.905 10.236-3.905 14.141 0M1.394 9.393c5.857-5.857 15.355-5.857 21.213 0" />
|
2026-01-27 23:57:29 +00:00
|
|
|
|
</svg>
|
2026-01-28 00:12:11 +00:00
|
|
|
|
</div>
|
|
|
|
|
|
<div class="flex-1">
|
|
|
|
|
|
<h2 class="text-xl font-semibold text-white mb-2">RPC Connection</h2>
|
|
|
|
|
|
<p class="text-white/70 text-sm mb-4">JSON-RPC API access</p>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<div class="space-y-3">
|
|
|
|
|
|
<div class="flex items-center justify-between p-3 bg-white/5 rounded-lg">
|
|
|
|
|
|
<div class="flex items-center gap-3">
|
|
|
|
|
|
<svg class="w-5 h-5 text-white/60" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
|
|
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1" />
|
|
|
|
|
|
</svg>
|
|
|
|
|
|
<span class="text-white/80 text-sm">RPC Host</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<span class="text-white/60 text-sm font-mono">localhost:18443</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<div class="flex items-center justify-between p-3 bg-white/5 rounded-lg">
|
|
|
|
|
|
<div class="flex items-center gap-3">
|
|
|
|
|
|
<svg class="w-5 h-5 text-white/60" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
|
|
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" />
|
|
|
|
|
|
</svg>
|
|
|
|
|
|
<span class="text-white/80 text-sm">RPC User</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<span class="text-white/60 text-sm font-mono">bitcoin</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<div class="flex items-center justify-between p-3 bg-white/5 rounded-lg">
|
|
|
|
|
|
<div class="flex items-center gap-3">
|
|
|
|
|
|
<svg class="w-5 h-5 text-white/60" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
|
|
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z" />
|
|
|
|
|
|
</svg>
|
|
|
|
|
|
<span class="text-white/80 text-sm">RPC Status</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<span class="text-green-400 text-sm font-medium">Connected</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<button class="mt-4 w-full px-4 py-2 glass-button rounded-lg text-sm font-medium text-white/90 hover:text-white transition-colors" onclick="copyRPCInfo()">
|
|
|
|
|
|
Copy RPC Info
|
|
|
|
|
|
</button>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- ZMQ Notifications -->
|
|
|
|
|
|
<div class="glass-card p-6">
|
|
|
|
|
|
<div class="flex items-start gap-4 mb-4">
|
|
|
|
|
|
<div class="flex-shrink-0 w-12 h-12 rounded-lg bg-white/10 flex items-center justify-center">
|
|
|
|
|
|
<svg class="w-6 h-6 text-white/80" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
|
|
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9" />
|
2026-01-27 23:57:29 +00:00
|
|
|
|
</svg>
|
|
|
|
|
|
</div>
|
2026-01-28 00:12:11 +00:00
|
|
|
|
<div class="flex-1">
|
|
|
|
|
|
<h2 class="text-xl font-semibold text-white mb-2">ZMQ Notifications</h2>
|
|
|
|
|
|
<p class="text-white/70 text-sm mb-4">Real-time block and transaction updates</p>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<div class="space-y-3">
|
|
|
|
|
|
<div class="flex items-center justify-between p-3 bg-white/5 rounded-lg">
|
|
|
|
|
|
<div class="flex items-center gap-3">
|
|
|
|
|
|
<svg class="w-5 h-5 text-white/60" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
|
|
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 20l-5.447-2.724A1 1 0 013 16.382V5.618a1 1 0 011.447-.894L9 7m0 13l6-3m-6 3V7m6 10l4.553 2.276A1 1 0 0021 18.382V7.618a1 1 0 00-.553-.894L15 4m0 13V4m0 0L9 7" />
|
|
|
|
|
|
</svg>
|
|
|
|
|
|
<span class="text-white/80 text-sm">Block Notifications</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<span class="text-white/60 text-sm font-mono">tcp://localhost:28332</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<div class="flex items-center justify-between p-3 bg-white/5 rounded-lg">
|
|
|
|
|
|
<div class="flex items-center gap-3">
|
|
|
|
|
|
<svg class="w-5 h-5 text-white/60" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
|
|
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2" />
|
|
|
|
|
|
</svg>
|
|
|
|
|
|
<span class="text-white/80 text-sm">TX Notifications</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<span class="text-white/60 text-sm font-mono">tcp://localhost:28333</span>
|
2026-01-27 23:57:29 +00:00
|
|
|
|
</div>
|
2026-01-28 00:12:11 +00:00
|
|
|
|
|
|
|
|
|
|
<div class="flex items-center justify-between p-3 bg-white/5 rounded-lg">
|
|
|
|
|
|
<div class="flex items-center gap-3">
|
|
|
|
|
|
<svg class="w-5 h-5 text-white/60" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
|
|
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z" />
|
|
|
|
|
|
</svg>
|
|
|
|
|
|
<span class="text-white/80 text-sm">ZMQ Status</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<span class="text-green-400 text-sm font-medium">Active</span>
|
2026-01-27 23:57:29 +00:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
2026-01-28 00:12:11 +00:00
|
|
|
|
|
|
|
|
|
|
<button class="mt-4 w-full px-4 py-2 glass-button rounded-lg text-sm font-medium text-white/90 hover:text-white transition-colors" onclick="openLogs()">
|
|
|
|
|
|
View Logs
|
|
|
|
|
|
</button>
|
2026-01-27 23:57:29 +00:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- Settings Modal -->
|
2026-01-28 00:12:11 +00:00
|
|
|
|
<div class="modal hidden fixed inset-0 bg-black/80 backdrop-blur-sm z-50 items-center justify-center p-4" id="settingsModal">
|
|
|
|
|
|
<div class="glass-card p-6 max-w-2xl w-full max-h-[80vh] overflow-y-auto">
|
|
|
|
|
|
<div class="flex justify-between items-center mb-4">
|
|
|
|
|
|
<h2 class="text-2xl font-bold text-white">Node Settings</h2>
|
|
|
|
|
|
<button onclick="closeSettings()" class="w-10 h-10 rounded-lg bg-white/10 border border-white/18 text-white text-xl flex items-center justify-center hover:bg-white/20 transition-colors">×</button>
|
2026-01-27 23:57:29 +00:00
|
|
|
|
</div>
|
2026-01-28 00:12:11 +00:00
|
|
|
|
<div class="space-y-3">
|
|
|
|
|
|
<div class="p-3 bg-white/5 rounded-lg">
|
|
|
|
|
|
<div class="font-semibold text-white mb-1">Network Mode</div>
|
|
|
|
|
|
<div class="text-white/70 text-sm">Regtest (Development)</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="p-3 bg-white/5 rounded-lg">
|
|
|
|
|
|
<div class="font-semibold text-white mb-1">Transaction Index</div>
|
|
|
|
|
|
<div class="text-white/70 text-sm">Enabled (txindex=1)</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="p-3 bg-white/5 rounded-lg">
|
|
|
|
|
|
<div class="font-semibold text-white mb-1">ZMQ Publishing</div>
|
|
|
|
|
|
<div class="text-white/70 text-sm">Block & TX notifications enabled</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="p-3 bg-white/5 rounded-lg">
|
|
|
|
|
|
<div class="font-semibold text-white mb-1">RPC Access</div>
|
|
|
|
|
|
<div class="text-white/70 text-sm">Enabled on 0.0.0.0:18443</div>
|
|
|
|
|
|
</div>
|
2026-01-27 23:57:29 +00:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- Logs Modal -->
|
2026-01-28 00:12:11 +00:00
|
|
|
|
<div class="modal hidden fixed inset-0 bg-black/80 backdrop-blur-sm z-50 items-center justify-center p-4" id="logsModal">
|
|
|
|
|
|
<div class="glass-card p-6 max-w-4xl w-full max-h-[80vh] overflow-y-auto">
|
|
|
|
|
|
<div class="flex justify-between items-center mb-4">
|
|
|
|
|
|
<h2 class="text-2xl font-bold text-white">Node Logs</h2>
|
|
|
|
|
|
<button onclick="closeLogs()" class="w-10 h-10 rounded-lg bg-white/10 border border-white/18 text-white text-xl flex items-center justify-center hover:bg-white/20 transition-colors">×</button>
|
2026-01-27 23:57:29 +00:00
|
|
|
|
</div>
|
2026-01-28 00:12:11 +00:00
|
|
|
|
<div class="bg-black/40 rounded-lg p-4 font-mono text-xs text-white/80 whitespace-pre-wrap break-all" id="logsContent">
|
2026-01-27 23:57:29 +00:00
|
|
|
|
Loading logs...
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<script>
|
2026-01-28 00:12:11 +00:00
|
|
|
|
function copyRPCInfo() {
|
|
|
|
|
|
const info = `RPC Host: localhost:18443\nRPC User: bitcoin\nRPC Password: bitcoinpass`;
|
|
|
|
|
|
navigator.clipboard.writeText(info).then(() => {
|
|
|
|
|
|
alert('RPC info copied to clipboard!');
|
2026-01-27 23:57:29 +00:00
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function openSettings() {
|
2026-01-28 00:12:11 +00:00
|
|
|
|
document.getElementById('settingsModal').classList.remove('hidden');
|
|
|
|
|
|
document.getElementById('settingsModal').classList.add('flex');
|
2026-01-27 23:57:29 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function closeSettings() {
|
2026-01-28 00:12:11 +00:00
|
|
|
|
document.getElementById('settingsModal').classList.add('hidden');
|
|
|
|
|
|
document.getElementById('settingsModal').classList.remove('flex');
|
2026-01-27 23:57:29 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function openLogs() {
|
2026-01-28 00:12:11 +00:00
|
|
|
|
document.getElementById('logsModal').classList.remove('hidden');
|
|
|
|
|
|
document.getElementById('logsModal').classList.add('flex');
|
2026-01-27 23:57:29 +00:00
|
|
|
|
loadLogs();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function closeLogs() {
|
2026-01-28 00:12:11 +00:00
|
|
|
|
document.getElementById('logsModal').classList.add('hidden');
|
|
|
|
|
|
document.getElementById('logsModal').classList.remove('flex');
|
2026-01-27 23:57:29 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function loadLogs() {
|
|
|
|
|
|
const logsContent = document.getElementById('logsContent');
|
|
|
|
|
|
logsContent.textContent = `Bitcoin Core version v27.0
|
|
|
|
|
|
Assuming ancestors of block 0000000000000000000000000000000000000000000000000000000000000000 have valid signatures.
|
|
|
|
|
|
Setting nMinimumChainWork=0000000000000000000000000000000000000000000000000000000000000000
|
|
|
|
|
|
|
|
|
|
|
|
Regtest mode activated
|
|
|
|
|
|
RPC server listening on 0.0.0.0:18443
|
|
|
|
|
|
ZMQ block notifications enabled on tcp://0.0.0.0:28332
|
|
|
|
|
|
ZMQ tx notifications enabled on tcp://0.0.0.0:28333
|
|
|
|
|
|
Transaction index enabled (txindex=1)
|
|
|
|
|
|
|
|
|
|
|
|
Node initialization complete
|
|
|
|
|
|
Ready to accept connections on port 18444`;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
let blockHeight = 0;
|
|
|
|
|
|
setInterval(() => {
|
|
|
|
|
|
if (Math.random() > 0.7) {
|
|
|
|
|
|
blockHeight++;
|
|
|
|
|
|
document.getElementById('blockHeight').textContent = blockHeight;
|
|
|
|
|
|
}
|
|
|
|
|
|
}, 5000);
|
|
|
|
|
|
|
|
|
|
|
|
document.addEventListener('keydown', (e) => {
|
|
|
|
|
|
if (e.key === 'Escape') {
|
|
|
|
|
|
closeSettings();
|
|
|
|
|
|
closeLogs();
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
document.querySelectorAll('.modal').forEach(modal => {
|
|
|
|
|
|
modal.addEventListener('click', (e) => {
|
|
|
|
|
|
if (e.target === modal) {
|
|
|
|
|
|
closeSettings();
|
|
|
|
|
|
closeLogs();
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
});
|
|
|
|
|
|
</script>
|
|
|
|
|
|
</body>
|
|
|
|
|
|
</html>
|