DChain single-node blockchain + React Native messenger client. Core: - PBFT consensus with multi-sig validator admission + equivocation slashing - BadgerDB + schema migration scaffold (CurrentSchemaVersion=0) - libp2p gossipsub (tx/v1, blocks/v1, relay/v1, version/v1) - Native Go contracts (username_registry) alongside WASM (wazero) - WebSocket gateway with topic-based fanout + Ed25519-nonce auth - Relay mailbox with NaCl envelope encryption (X25519 + Ed25519) - Prometheus /metrics, per-IP rate limit, body-size cap Deployment: - Single-node compose (deploy/single/) with Caddy TLS + optional Prometheus - 3-node dev compose (docker-compose.yml) with mocked internet topology - 3-validator prod compose (deploy/prod/) for federation - Auto-update from Gitea via /api/update-check + systemd timer - Build-time version injection (ldflags → node --version) - UI / Swagger toggle flags (DCHAIN_DISABLE_UI, DCHAIN_DISABLE_SWAGGER) Client (client-app/): - Expo / React Native / NativeWind - E2E NaCl encryption, typing indicator, contact requests - Auto-discovery of canonical contracts, chain_id aware, WS reconnect on node switch Documentation: - README.md, CHANGELOG.md, CONTEXT.md - deploy/single/README.md with 6 operator scenarios - deploy/UPDATE_STRATEGY.md with 4-layer forward-compat design - docs/contracts/*.md per contract
90 lines
3.4 KiB
HTML
90 lines
3.4 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>Token | DChain Explorer</title>
|
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
|
|
<link rel="stylesheet" href="/assets/explorer/style.css">
|
|
<script src="https://unpkg.com/lucide@latest"></script>
|
|
<script defer src="/assets/explorer/common.js"></script>
|
|
<script defer src="/assets/explorer/token.js"></script>
|
|
</head>
|
|
<body>
|
|
|
|
<header class="topnav">
|
|
<div class="topnav-inner">
|
|
<a class="topnav-brand" href="/">
|
|
<span class="brand-gem">◆</span>
|
|
<span class="brand-name">DChain</span>
|
|
</a>
|
|
<nav class="topnav-links">
|
|
<a href="/contract">Contracts</a>
|
|
<a href="/tokens" style="color:var(--text)">Tokens</a>
|
|
<a href="/validators">Validators</a>
|
|
<a href="/relays">Relay Nodes</a>
|
|
</nav>
|
|
</div>
|
|
</header>
|
|
|
|
<div class="addr-searchbar">
|
|
<div class="addr-searchbar-inner">
|
|
<div id="status" class="hero-status"></div>
|
|
</div>
|
|
</div>
|
|
|
|
<main class="page-body" id="mainContent" style="display:none">
|
|
|
|
<!-- ── Banner ─────────────────────────────────────────────────────────── -->
|
|
<div class="tx-banner tx-banner-ok" id="banner">
|
|
<div class="tx-banner-left">
|
|
<div class="tx-banner-icon tx-banner-ok" id="bannerIcon">
|
|
<i data-lucide="coins"></i>
|
|
</div>
|
|
<div class="tx-banner-body">
|
|
<div class="tx-banner-title" id="bannerType">Token</div>
|
|
<div class="tx-banner-desc" id="bannerName">—</div>
|
|
</div>
|
|
</div>
|
|
<div class="tx-banner-time" id="bannerBlock">block —</div>
|
|
</div>
|
|
|
|
<!-- NFT image (shown only for NFTs with image URI) -->
|
|
<div id="nftImageWrap" style="display:none;text-align:center;margin-bottom:1rem">
|
|
<img id="nftImage" style="max-width:340px;border-radius:14px;border:1px solid var(--line)" src="" alt="">
|
|
</div>
|
|
|
|
<!-- ── Detail panel ───────────────────────────────────────────────────── -->
|
|
<div class="panel tx-overview-panel">
|
|
|
|
<div class="tx-tabs">
|
|
<button class="tx-tab tx-tab-active" id="tabOverview">Overview</button>
|
|
<button class="tx-tab" id="tabRaw" style="display:none">Raw JSON</button>
|
|
</div>
|
|
|
|
<div id="paneOverview">
|
|
<div class="addr-kv-list" id="kvList">
|
|
<!-- filled by JS -->
|
|
</div>
|
|
|
|
<!-- Attributes (NFT) -->
|
|
<div id="attrsSection" style="display:none;padding:0 1.25rem 1rem">
|
|
<div style="font-size:0.8rem;font-weight:600;text-transform:uppercase;letter-spacing:0.06em;color:var(--muted);margin-bottom:0.5rem">
|
|
<i data-lucide="tag" style="width:12px;height:12px;vertical-align:middle"></i> Attributes
|
|
</div>
|
|
<div id="attrsGrid" class="attrs-grid"></div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="paneRaw" style="display:none">
|
|
<pre id="rawJSON" class="raw tx-raw-pre">No data.</pre>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</main>
|
|
</body>
|
|
</html>
|