Unify explorer DBIS taxonomy and branding
All checks were successful
phoenix-deploy Deployed to explorer-live
Deploy Explorer Live / deploy (push) Successful in 2m18s

This commit is contained in:
defiQUG
2026-04-30 03:06:49 -07:00
parent 3b7e24080f
commit 8cd8bfa195
44 changed files with 1057 additions and 997 deletions

View File

@@ -5,7 +5,7 @@
"minor": 1,
"patch": 0
},
"generatedBy": "SolaceScan",
"generatedBy": "DBIS Explorer",
"timestamp": "2026-03-28T00:00:00Z",
"chainId": 138,
"chainName": "DeFi Oracle Meta Mainnet",

View File

@@ -4,7 +4,7 @@
"defaultChainId": 138,
"explorerUrl": "https://explorer.d-bis.org",
"tokenListUrl": "https://explorer.d-bis.org/api/config/token-list",
"generatedBy": "SolaceScan",
"generatedBy": "DBIS Explorer",
"chains": [
{"chainId":"0x8a","chainIdDecimal":138,"chainName":"DeFi Oracle Meta Mainnet","shortName":"dbis","rpcUrls":["https://rpc-http-pub.d-bis.org","https://rpc.d-bis.org","https://rpc2.d-bis.org","https://rpc.defi-oracle.io"],"nativeCurrency":{"name":"Ether","symbol":"ETH","decimals":18},"blockExplorerUrls":["https://explorer.d-bis.org","https://blockscout.defi-oracle.io"],"iconUrls":["https://raw.githubusercontent.com/ethereum/ethereum.org/main/static/images/eth-diamond-black.png"],"infoURL":"https://explorer.d-bis.org","explorerApiUrl":"https://explorer.d-bis.org/api/v2","testnet":false},
{"chainId":"0x1","chainIdDecimal":1,"chainName":"Ethereum Mainnet","shortName":"eth","rpcUrls":["https://eth.llamarpc.com","https://rpc.ankr.com/eth","https://ethereum.publicnode.com","https://1rpc.io/eth"],"nativeCurrency":{"name":"Ether","symbol":"ETH","decimals":18},"blockExplorerUrls":["https://etherscan.io"],"iconUrls":["https://raw.githubusercontent.com/ethereum/ethereum.org/main/static/images/eth-diamond-black.png"],"infoURL":"https://ethereum.org","testnet":false},

View File

@@ -485,7 +485,7 @@
],
"blockers": [
"Desired public EVM targets still missing cW suites: Wemix.",
"Wave 1 transport is still pending for: EUR, JPY, GBP, AUD, CAD, CHF, XAU.",
"Wave 1 public-network activation is still pending for: EUR, JPY, GBP, AUD, CAD, CHF, XAU.",
"Arbitrum bootstrap remains blocked on the current Mainnet hub leg: tx 0x97df657f0e31341ca852666766e553650531bbcc86621246d041985d7261bb07 reverted before any bridge event was emitted."
],
"resolutionMatrix": [
@@ -540,7 +540,7 @@
{
"key": "wave1_transport_pending",
"state": "open",
"blocker": "Wave 1 transport is still pending for: EUR, JPY, GBP, AUD, CAD, CHF, XAU.",
"blocker": "Wave 1 public-network activation is still pending for: EUR, JPY, GBP, AUD, CAD, CHF, XAU.",
"targets": [
{
"code": "EUR",
@@ -614,7 +614,7 @@
],
"resolution": [
"Enable bridge controls and supervision policy for each Wave 1 canonical asset on Chain 138.",
"Set max-outstanding / capacity controls, then promote the canonical symbols into config/gru-transport-active.json.",
"Set max-outstanding / capacity controls, then promote the canonical symbols into the GRU public-network overlay.",
"Verify the overlay promotion with check-gru-global-priority-rollout.sh and check-gru-v2-chain138-readiness.sh before attaching public liquidity."
],
"runbooks": [
@@ -623,7 +623,7 @@
"scripts/verify/check-gru-global-priority-rollout.sh",
"scripts/verify/check-gru-v2-chain138-readiness.sh"
],
"exitCriteria": "Wave 1 transport pending count reaches zero and the overlay reports the seven non-USD assets as live_transport."
"exitCriteria": "Wave 1 public-network pending count reaches zero and the overlay reports the seven non-USD assets as live cW public-network representations."
},
{
"key": "first_tier_public_pools_not_live",
@@ -801,9 +801,9 @@
}
],
"resolution": [
"Complete Wave 1 transport and first-tier public liquidity before promoting the remaining ranked assets.",
"Complete Wave 1 public-network activation and first-tier public liquidity before promoting the remaining ranked assets.",
"For each backlog asset, add canonical + wrapped symbols to the manifest/rollout plan, deploy contracts, and extend the public pool matrix.",
"Promote each new asset through the same transport and public-liquidity gates used for Wave 1."
"Promote each new asset through the same public-network and public-liquidity gates used for Wave 1."
],
"runbooks": [
"config/gru-global-priority-currency-rollout.json",
@@ -827,7 +827,7 @@
"Completed in-repo: 13-asset Chain 138 → SPL target table (WETH + twelve c* → cW* symbols) in config/solana-gru-bridge-lineup.json and docs/03-deployment/CHAIN138_TO_SOLANA_GRU_TOKEN_DEPLOYMENT_LINEUP.md.",
"Define and implement SPL mint authority / bridge program wiring; record solanaMint for each asset.",
"Replace SolanaRelayService stub with production relay; mainnet-beta E2E both directions.",
"Add dedicated verifier coverage and only then promote Solana into active transport inventory and public status surfaces."
"Add dedicated verifier coverage and only then promote Solana into active public-network inventory and public status surfaces."
],
"runbooks": [
"config/solana-gru-bridge-lineup.json",
@@ -842,7 +842,7 @@
}
],
"notes": [
"This queue is an operator/deployment planning surface. It does not mark queued pools or transports as live.",
"This queue is an operator/deployment planning surface. It does not mark queued pools or public-network representations as live.",
"Chain 138 canonical venues remain a separate live surface from the public cW mesh."
]
}

View File

@@ -265,7 +265,7 @@
"nextStep": "activate_transport_and_attach_public_liquidity"
}
],
"note": "USD is the only live transport asset today. Wave 1 non-USD assets are deployed canonically on Chain 138 but are not yet promoted into the active transport overlay."
"note": "USD is the only live cW public-network asset today. Wave 1 non-USD assets are deployed canonically on Chain 138 but are not yet promoted into the active public-network overlay."
},
"protocols": {
"publicCwMesh": [

File diff suppressed because it is too large Load Diff

View File

@@ -479,7 +479,7 @@ EOF
```bash
cat > /etc/systemd/system/solacescanscout-frontend.service << 'EOF'
[Unit]
Description=SolaceScan Next Frontend Service
Description=DBIS Explorer Next Frontend Service
After=network.target explorer-api.service
Requires=explorer-api.service

View File

@@ -1,6 +1,6 @@
# Live Deployment Map
Current production deployment map for the SolaceScan public explorer surface.
Current production deployment map for the DBIS Explorer public explorer surface.
This file is the authoritative reference for the live explorer stack as of `2026-04-05`. It supersedes the older monolithic deployment notes in this directory when the question is "what is running in production right now?"

View File

@@ -1,4 +1,4 @@
# Next.js frontend proxy locations for SolaceScan.
# Next.js frontend proxy locations for DBIS Explorer.
# Keep the existing higher-priority locations for:
# - /api/
# - /api/config/token-list

View File

@@ -1,5 +1,5 @@
[Unit]
Description=SolaceScan Next Frontend Service
Description=DBIS Explorer Next Frontend Service
After=network.target
Wants=network.target

View File

@@ -3,8 +3,8 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Acknowledgments | SolaceScan</title>
<meta name="description" content="Acknowledgments for the SolaceScan Chain 138 explorer.">
<title>Acknowledgments | DBIS Explorer</title>
<meta name="description" content="Acknowledgments for the DBIS Explorer Chain 138 explorer.">
<style>
body { margin: 0; font-family: Arial, Helvetica, sans-serif; background: linear-gradient(180deg, #0f172a 0%, #111827 45%, #f8fafc 46%, #ffffff 100%); color: #0f172a; }
.shell { max-width: 980px; margin: 0 auto; padding: 2rem 1rem 3rem; }
@@ -19,7 +19,7 @@
<body>
<div class="shell">
<div class="topbar">
<div class="brand">SolaceScan Acknowledgments</div>
<div class="brand">DBIS Explorer Acknowledgments</div>
<a href="/">Back to explorer</a>
</div>
<div class="card">
@@ -28,10 +28,10 @@
<ul>
<li><strong>Blockscout</strong> for explorer indexing and API compatibility.</li>
<li><strong>MetaMask</strong> for wallet connectivity and Snap support.</li>
<li><strong>Chainlink CCIP</strong> for bridge-related routing, transport, and companion operational surfaces where applicable.</li>
<li><strong>Chainlink CCIP</strong> for bridge-related routing, cW public-network representations, and companion operational surfaces where applicable.</li>
<li><strong>ethers.js</strong> for wallet and Ethereum interaction support.</li>
<li><strong>Font Awesome</strong> for iconography.</li>
<li><strong>Next.js</strong> and the frontend contributors supporting the DBIS / Defi Oracle explorer experience.</li>
<li><strong>Next.js</strong> and the frontend contributors supporting the DBIS explorer experience.</li>
</ul>
<p class="muted">If we have missed a contributor or dependency, please let us know at <a href="mailto:support@d-bis.org">support@d-bis.org</a>.</p>
</div>

View File

@@ -206,7 +206,7 @@ flowchart TB
subgraph CCIP_L2["Other live CCIP EVM destinations"]
L2CLU["OP 10 · Base 8453 · Arb 42161 · Polygon 137 · BSC 56 · Avax 43114 · Gnosis 100 · Celo 42220 · Cronos 25"]
LEAF_L2["Leaf — per-chain native DEX · cW token transport · partial edge pools"]
LEAF_L2["Leaf — per-chain native DEX · cW public-network representation · partial edge pools"]
end
subgraph ALLTRA["ALL Mainnet 651940"]
@@ -404,9 +404,9 @@ flowchart LR
<!-- 4 Cross-chain -->
<div class="content" id="panel-4" role="tabpanel" aria-labelledby="tab-4" hidden>
<p class="panel-desc">CCIP transport, Alltra round-trip, the dedicated c-to-cW mint corridors, and the orchestrated swap-bridge-swap target.</p>
<p class="panel-desc">CCIP routing, Alltra round-trip, the dedicated c-to-cW mint corridors, and the orchestrated swap-bridge-swap target.</p>
<div class="mermaid-wrap">
<h3>CCIP — WETH primary transport</h3>
<h3>CCIP — WETH primary routing lane</h3>
<div class="mermaid">
sequenceDiagram
participant U as User or bot

View File

@@ -3,8 +3,8 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documentation Redirect | SolaceScan</title>
<meta name="description" content="Redirecting to the canonical SolaceScan documentation hub.">
<title>Documentation Redirect | DBIS Explorer</title>
<meta name="description" content="Redirecting to the canonical DBIS Explorer documentation hub.">
<meta http-equiv="refresh" content="0; url=/docs">
<link rel="canonical" href="https://blockscout.defi-oracle.io/docs">
<style>
@@ -23,7 +23,7 @@
<body>
<div class="shell">
<div class="topbar">
<div class="brand">SolaceScan Documentation</div>
<div class="brand">DBIS Explorer Documentation</div>
<a href="/">Back to explorer</a>
</div>
<div class="card">

View File

@@ -1124,7 +1124,7 @@
}
// Sign message
const message = `Sign this message to authenticate with SolaceScan.\n\nNonce: ${nonceData.nonce}`;
const message = `Sign this message to authenticate with DBIS Explorer.\n\nNonce: ${nonceData.nonce}`;
const signer = provider.getSigner();
const signature = await signer.signMessage(message);
@@ -4518,7 +4518,7 @@
title: 'Tools',
items: [
{ title: 'Input Data Decoder', icon: 'fa-file-code', status: 'Live', badgeClass: 'badge-info', desc: 'Open transaction detail pages to decode calldata, logs, and contract interactions already exposed by the explorer.', action: 'showTransactionsList();', href: '/transactions' },
{ title: 'Unit Converter', icon: 'fa-scale-balanced', status: 'Live', badgeClass: 'badge-success', desc: 'Convert wei, gwei, ether, and common Chain 138 6-decimal electronic-money units with a quick in-page helper.', action: 'showUnitConverterModal();', href: '/operations' },
{ title: 'Unit Converter', icon: 'fa-scale-balanced', status: 'Live', badgeClass: 'badge-success', desc: 'Convert wei, gwei, ether, and common Chain 138 6-decimal GRU units with a quick in-page helper.', action: 'showUnitConverterModal();', href: '/operations' },
{ title: 'CSV Export', icon: 'fa-file-csv', status: 'Live', badgeClass: 'badge-success', desc: 'Export pool state and route inventory snapshots for operator review and downstream ingestion.', action: 'showPools(); updatePath(\'/pools\'); setTimeout(function(){ if (typeof exportPoolsCSV === \"function\") exportPoolsCSV(); }, 200);', href: '/pools' },
{ title: 'Account Balance Checker', icon: 'fa-wallet', status: 'Live', badgeClass: 'badge-success', desc: 'Jump into indexed addresses to inspect balances, token inventory, internal transfers, and recent activity.', action: 'showAddresses();', href: '/addresses' }
]
@@ -4551,7 +4551,7 @@
var html = '<div style="display:grid; grid-template-columns:minmax(240px, 0.9fr) repeat(3, minmax(220px, 1fr)); gap:1rem; align-items:start;">';
html += '<div style="border:1px solid var(--border); border-radius:18px; padding:1.25rem; background:linear-gradient(180deg, rgba(59,130,246,0.08), rgba(15,23,42,0.02)); min-height:100%;">';
html += '<div style="font-size:1.25rem; font-weight:800; margin-bottom:0.75rem;">Operations Hub</div>';
html += '<div style="color:var(--text-light); line-height:1.7; margin-bottom:1rem;">Discover SolaceScan operational explorer tools in one place, grouped the way users expect from a polished specialist explorer.</div>';
html += '<div style="color:var(--text-light); line-height:1.7; margin-bottom:1rem;">Discover DBIS Explorer operational tools in one place, grouped the way users expect from a polished specialist explorer.</div>';
html += '<div style="display:grid; gap:0.75rem;">';
html += '<div style="padding:0.85rem; border:1px solid var(--border); border-radius:14px; background:var(--muted-surface);"><div style="font-size:0.82rem; text-transform:uppercase; letter-spacing:0.08em; color:var(--text-light); margin-bottom:0.35rem;">Now live</div><div style="font-weight:700;">Route matrix, ingestion APIs, smart search, pool exports, and live Mainnet stable bridge discovery.</div></div>';
html += '<div style="padding:0.85rem; border:1px solid var(--border); border-radius:14px; background:var(--muted-surface);"><div style="font-size:0.82rem; text-transform:uppercase; letter-spacing:0.08em; color:var(--text-light); margin-bottom:0.35rem;">Good entry points</div><div style="display:flex; flex-wrap:wrap; gap:0.5rem;">';
@@ -4602,12 +4602,12 @@
modal.innerHTML = '' +
'<div style="width:min(560px, 100%); border-radius:18px; border:1px solid var(--border); background:var(--background); box-shadow:0 24px 90px rgba(0,0,0,0.35); overflow:hidden;">' +
'<div style="display:flex; justify-content:space-between; align-items:center; padding:1rem 1.1rem; border-bottom:1px solid var(--border);">' +
'<div><div style="font-size:1.1rem; font-weight:800;">Unit Converter</div><div style="color:var(--text-light); font-size:0.9rem; margin-top:0.2rem;">Wei, gwei, ether, and 6-decimal electronic-money units for Chain 138.</div></div>' +
'<div><div style="font-size:1.1rem; font-weight:800;">Unit Converter</div><div style="color:var(--text-light); font-size:0.9rem; margin-top:0.2rem;">Wei, gwei, ether, and 6-decimal GRU units for Chain 138.</div></div>' +
'<button type="button" class="btn btn-secondary" id="unitConverterCloseBtn"><i class="fas fa-times"></i></button>' +
'</div>' +
'<div style="padding:1rem 1.1rem; display:grid; gap:0.9rem;">' +
'<label style="display:grid; gap:0.35rem;"><span style="font-weight:700;">Amount</span><input id="unitConverterAmount" type="number" min="0" step="any" placeholder="1.0" style="padding:0.8rem 0.9rem; border:1px solid var(--border); border-radius:12px; background:var(--light); color:var(--text);"></label>' +
'<label style="display:grid; gap:0.35rem;"><span style="font-weight:700;">Unit</span><select id="unitConverterUnit" style="padding:0.8rem 0.9rem; border:1px solid var(--border); border-radius:12px; background:var(--light); color:var(--text);"><option value="ether">Ether / WETH</option><option value="gwei">Gwei</option><option value="wei">Wei</option><option value="stable">Electronic money (6 decimals)</option></select></label>' +
'<label style="display:grid; gap:0.35rem;"><span style="font-weight:700;">Unit</span><select id="unitConverterUnit" style="padding:0.8rem 0.9rem; border:1px solid var(--border); border-radius:12px; background:var(--light); color:var(--text);"><option value="ether">Ether / WETH</option><option value="gwei">Gwei</option><option value="wei">Wei</option><option value="stable">GRU token (6 decimals)</option></select></label>' +
'<div id="unitConverterResults" style="display:grid; gap:0.55rem;"></div>' +
'</div>' +
'</div>';

View File

@@ -8,11 +8,11 @@
<meta http-equiv="Expires" content="0">
<!-- CSP: unsafe-eval required by ethers.js v5 UMD from CDN (uses new Function for ABI). Our code avoids eval/string setTimeout. Can be removed when moving to ethers v6 build (no UMD eval). -->
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline' 'unsafe-eval' https://cdn.jsdelivr.net https://unpkg.com https://cdnjs.cloudflare.com; style-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com; font-src 'self' https://cdnjs.cloudflare.com; img-src 'self' data: https:; connect-src 'self' https://blockscout.defi-oracle.io https://explorer.d-bis.org https://rpc-http-pub.d-bis.org wss://rpc-ws-pub.d-bis.org http://192.168.11.221:8545 ws://192.168.11.221:8546;">
<title>SolaceScan | Chain 138 Explorer by DBIS</title>
<meta name="description" content="SolaceScan - Chain 138 Explorer by DBIS. Public explorer surfaces for blocks, transactions, addresses, routes, wallet tools, and bridge monitoring.">
<meta name="keywords" content="blockchain explorer, ChainID 138, DBIS, SolaceScan, bridge monitoring, wallet tools, blockchain, ethereum, blockscout">
<meta name="author" content="SolaceScan">
<meta name="application-name" content="SolaceScan">
<title>DBIS Explorer | Chain 138 Explorer by DBIS</title>
<meta name="description" content="DBIS Explorer - Chain 138 Explorer by DBIS. Public explorer surfaces for blocks, transactions, addresses, routes, wallet tools, and bridge monitoring.">
<meta name="keywords" content="blockchain explorer, ChainID 138, DBIS, DBIS Explorer, bridge monitoring, wallet tools, blockchain, ethereum, blockscout">
<meta name="author" content="DBIS Explorer">
<meta name="application-name" content="DBIS Explorer">
<meta name="theme-color" content="#667eea">
<script>
(function(){function t(){var e=document.getElementById('navLinks'),n=document.getElementById('navToggle'),r=document.getElementById('navToggleIcon');if(e&&n){var o=e.classList.toggle('nav-open');n.setAttribute('aria-expanded',o?'true':'false');if(r)r.className=o?'fas fa-times':'fas fa-bars';}}function c(){var e=document.getElementById('navLinks'),n=document.getElementById('navToggle'),r=document.getElementById('navToggleIcon');if(e)e.classList.remove('nav-open');if(n)n.setAttribute('aria-expanded','false');if(r)r.className='fas fa-bars';}window.toggleNavMenu=t;window.closeNavMenu=c;})();
@@ -20,15 +20,15 @@
<!-- Open Graph / Facebook -->
<meta property="og:type" content="website">
<meta property="og:url" content="https://blockscout.defi-oracle.io/">
<meta property="og:title" content="SolaceScan - Chain 138 Explorer by DBIS">
<meta property="og:title" content="DBIS Explorer - Chain 138 Explorer by DBIS">
<meta property="og:description" content="Comprehensive blockchain explorer for ChainID 138 with cross-chain bridge monitoring and WETH utilities.">
<meta property="og:image" content="https://blockscout.defi-oracle.io/og-image.png">
<meta property="og:site_name" content="SolaceScan">
<meta property="og:site_name" content="DBIS Explorer">
<!-- Twitter -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:url" content="https://blockscout.defi-oracle.io/">
<meta name="twitter:title" content="SolaceScan - Chain 138 Explorer by DBIS">
<meta name="twitter:title" content="DBIS Explorer - Chain 138 Explorer by DBIS">
<meta name="twitter:description" content="Comprehensive blockchain explorer for ChainID 138 with cross-chain bridge monitoring and WETH utilities.">
<meta name="twitter:image" content="https://blockscout.defi-oracle.io/og-image.png">
@@ -1214,7 +1214,7 @@
<a class="logo" href="/" aria-label="Go to explorer home" style="text-decoration:none; color:inherit;">
<i class="fas fa-cube"></i>
<div style="display: flex; flex-direction: column; gap: 0.25rem;">
<span>SolaceScan</span>
<span>DBIS Explorer</span>
<span style="font-size: 0.75rem; font-weight: normal; opacity: 0.9;">Chain 138 Explorer by DBIS</span>
</div>
</a>
@@ -1784,14 +1784,14 @@
<div class="container">
<div class="site-footer-grid">
<div>
<div style="font-size: 1.05rem; font-weight: 700; margin-bottom: 0.5rem;">SolaceScan</div>
<div style="font-size: 1.05rem; font-weight: 700; margin-bottom: 0.5rem;">DBIS Explorer</div>
<div class="site-footer-note">
Built on Blockscout foundations for the DBIS / Defi Oracle Chain 138 explorer surface.
Built on Blockscout foundations for the DBIS Chain 138 explorer surface.
Explorer data, block indexing, and public chain visibility are powered by Blockscout,
Chain 138 RPC, and the MetaMask Snap companion.
</div>
<div class="site-footer-note" style="margin-top: 0.8rem;">
© 2026 DBIS / Defi Oracle. All rights reserved.
© 2026 DBIS. All rights reserved.
</div>
</div>
<div>

View File

@@ -3,8 +3,8 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Privacy Policy | SolaceScan</title>
<meta name="description" content="Privacy policy for the SolaceScan Chain 138 explorer operated by DBIS / Defi Oracle.">
<title>Privacy Policy | DBIS Explorer</title>
<meta name="description" content="Privacy policy for the DBIS Explorer Chain 138 explorer operated by DBIS.">
<style>
body { margin: 0; font-family: Arial, Helvetica, sans-serif; background: linear-gradient(180deg, #0f172a 0%, #111827 45%, #f8fafc 46%, #ffffff 100%); color: #0f172a; }
.shell { max-width: 980px; margin: 0 auto; padding: 2rem 1rem 3rem; }
@@ -19,13 +19,13 @@
<body>
<div class="shell">
<div class="topbar">
<div class="brand">SolaceScan Privacy Policy</div>
<div class="brand">DBIS Explorer Privacy Policy</div>
<a href="/">Back to explorer</a>
</div>
<div class="card">
<h1 style="margin-top:0;">Privacy Policy</h1>
<p class="muted">Last updated: 2026-03-25</p>
<p>SolaceScan is the public Chain 138 explorer surface operated by DBIS / Defi Oracle. Most content you view comes from public blockchain data, explorer indexers, route services, and public configuration endpoints. We do not ask for personal information to browse the public explorer.</p>
<p>DBIS Explorer is the public Chain 138 explorer surface operated by DBIS. Most content you view comes from public blockchain data, explorer indexers, route services, and public configuration endpoints. We do not ask for personal information to browse the public explorer.</p>
<h2>What we store locally</h2>
<ul>
<li>We may store theme preference, locale, recent searches, and similar local UI settings in your browser.</li>

View File

@@ -3,8 +3,8 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Terms of Service | SolaceScan</title>
<meta name="description" content="Terms of service for the SolaceScan Chain 138 explorer operated by DBIS / Defi Oracle.">
<title>Terms of Service | DBIS Explorer</title>
<meta name="description" content="Terms of service for the DBIS Explorer Chain 138 explorer operated by DBIS.">
<style>
body { margin: 0; font-family: Arial, Helvetica, sans-serif; background: linear-gradient(180deg, #0f172a 0%, #111827 45%, #f8fafc 46%, #ffffff 100%); color: #0f172a; }
.shell { max-width: 980px; margin: 0 auto; padding: 2rem 1rem 3rem; }
@@ -19,13 +19,13 @@
<body>
<div class="shell">
<div class="topbar">
<div class="brand">SolaceScan Terms of Service</div>
<div class="brand">DBIS Explorer Terms of Service</div>
<a href="/">Back to explorer</a>
</div>
<div class="card">
<h1 style="margin-top:0;">Terms of Service</h1>
<p class="muted">Last updated: 2026-03-25</p>
<p>SolaceScan is provided for informational and operational purposes by DBIS / Defi Oracle. By using the public explorer, wallet tools, docs, and linked companion resources, you agree that:</p>
<p>DBIS Explorer is provided for informational and operational purposes by DBIS. By using the public explorer, wallet tools, docs, and linked companion resources, you agree that:</p>
<h2>Service scope</h2>
<ul>
<li>Blockchain data may be delayed, incomplete, or temporarily unavailable.</li>
@@ -55,7 +55,7 @@
<li>Bridge, route, liquidity, and operational surfaces are investigative and informational unless a page explicitly presents an authenticated management workflow.</li>
</ul>
<h2>Operator identity</h2>
<p>SolaceScan is operated by DBIS / Defi Oracle. Public explorer access may appear under <code>blockscout.defi-oracle.io</code>, while companion resources may appear under <code>explorer.d-bis.org</code> and related DBIS domains.</p>
<p>DBIS Explorer is operated by DBIS. Public explorer access may appear under <code>blockscout.defi-oracle.io</code>, while companion resources may appear under <code>explorer.d-bis.org</code> and related DBIS domains.</p>
<h2>Support and notices</h2>
<p>For service questions, operational issues, or policy notices, contact <a href="mailto:support@d-bis.org">support@d-bis.org</a>.</p>
<h2>Disputes and interpretation</h2>

View File

@@ -4,7 +4,7 @@ const baseUrl = (process.env.BASE_URL || 'https://explorer.d-bis.org').replace(/
const addressUnderTest = process.env.SMOKE_ADDRESS || '0x99b3511a2d315a497c8112c1fdd8d508d4b1e506'
const checks = [
{ path: '/', expectTexts: ['SolaceScan', 'Recent Blocks', 'Open wallet tools'] },
{ path: '/', expectTexts: ['DBIS Explorer', 'Recent Blocks', 'Open wallet tools'] },
{ path: '/blocks', expectTexts: ['Blocks'] },
{ path: '/transactions', expectTexts: ['Transactions'] },
{ path: '/addresses', expectTexts: ['Addresses', 'Open An Address'] },

View File

@@ -11,7 +11,7 @@ export default function BrandLockup({ compact = false }: { compact?: boolean })
compact ? 'text-[1.45rem]' : 'text-[1.65rem]',
].join(' ')}
>
SolaceScan
DBIS Explorer
</span>
<span
className={[

View File

@@ -15,18 +15,29 @@ function toneClasses(tone: 'neutral' | 'success' | 'warning' | 'info') {
export function getEntityBadgeTone(tag: string): 'neutral' | 'success' | 'warning' | 'info' {
const normalized = tag.toLowerCase()
if (normalized === 'compliant' || normalized === 'listed' || normalized === 'verified') {
if (normalized === 'compliant' || normalized === 'listed' || normalized === 'verified' || normalized === 'gru') {
return 'success'
}
if (normalized === 'wrapped') {
if (normalized === 'wrapped' || normalized === 'treasury-bond') {
return 'warning'
}
if (normalized === 'bridge' || normalized === 'canonical' || normalized === 'official') {
if (normalized === 'bridge' || normalized === 'canonical' || normalized === 'official' || normalized === 'electronic-money' || normalized === 'commodity') {
return 'info'
}
return 'neutral'
}
export function formatEntityBadgeLabel(label: string): string {
const normalized = label.toLowerCase()
const labels: Record<string, string> = {
'reference-asset': 'reference asset',
'electronic-money': 'cash e-money',
'treasury-bond': 'treasury / gov bond',
gru: 'GRU',
}
return labels[normalized] || label
}
export default function EntityBadge({
label,
tone,
@@ -46,7 +57,7 @@ export default function EntityBadge({
className,
)}
>
{label}
{formatEntityBadgeLabel(label)}
</span>
)
}

View File

@@ -25,7 +25,7 @@ export default function ExplorerAgentTool() {
{
role: 'assistant',
content:
'Explorer AI Agent Tool is ready. I can explain this page, summarize what you are looking at, and help investigate transactions, contracts, routes, and system surfaces.',
'DBIS Explorer AI Assist is ready. I can explain this page, summarize what you are looking at, and help investigate transactions, contracts, routes, and system surfaces.',
},
])
@@ -96,7 +96,7 @@ export default function ExplorerAgentTool() {
<section className="w-[min(24rem,calc(100vw-1.5rem))] overflow-hidden rounded-2xl border border-gray-200 bg-white shadow-2xl dark:border-gray-700 dark:bg-gray-900">
<div className="flex items-start justify-between gap-3 border-b border-gray-200 px-4 py-3 dark:border-gray-700">
<div>
<h2 className="text-sm font-semibold text-gray-900 dark:text-white">Explorer AI Agent Tool</h2>
<h2 className="text-sm font-semibold text-gray-900 dark:text-white">DBIS Explorer AI Assist</h2>
<p className="mt-1 text-xs text-gray-500 dark:text-gray-400">
Page-aware guidance for the explorer. Helpful, read-only, and designed for quick investigation.
</p>
@@ -163,15 +163,16 @@ export default function ExplorerAgentTool() {
<button
type="button"
onClick={() => setOpen((value) => !value)}
className="inline-flex items-center gap-2 rounded-full bg-primary-600 px-4 py-3 text-sm font-semibold text-white shadow-lg transition hover:bg-primary-700"
className="inline-flex items-center gap-2 rounded-full bg-primary-600 p-3 text-sm font-semibold text-white shadow-lg transition hover:bg-primary-700 lg:px-4 lg:py-3"
aria-expanded={open}
aria-label="Open DBIS Explorer AI Assist"
>
<span className="inline-flex h-7 w-7 items-center justify-center rounded-full bg-white/15">
<svg className="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" aria-hidden>
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M8 10h.01M12 10h.01M16 10h.01M9 16H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-4l-4 4v-4Z" />
</svg>
</span>
Agent Tool
<span className="hidden lg:inline">AI Assist</span>
</button>
</div>
)

View File

@@ -12,18 +12,18 @@ export default function Footer() {
<div className="grid gap-4 sm:gap-6 md:grid-cols-[minmax(0,1.5fr)_minmax(0,1fr)_minmax(0,1fr)]">
<div className="space-y-3 rounded-xl border border-gray-200 bg-gray-50/80 p-4 dark:border-gray-800 dark:bg-gray-900/40 md:border-0 md:bg-transparent md:p-0">
<div className="text-base font-semibold text-gray-900 dark:text-white sm:text-lg">
SolaceScan
DBIS Explorer
</div>
<p className="max-w-xl text-sm leading-6 text-gray-600 dark:text-gray-400">
Built on Blockscout for the DBIS / Defi Oracle Chain 138 explorer surface.
Built on Blockscout for the DBIS Chain 138 explorer surface.
Explorer data is powered by Blockscout, Chain 138 RPC, and the companion MetaMask Snap.
</p>
<p className="max-w-xl text-xs leading-5 text-gray-500 dark:text-gray-500">
Public explorer access may appear under <code>blockscout.defi-oracle.io</code> or <code>explorer.d-bis.org</code>.
Both domains belong to the same DBIS / Defi Oracle explorer surface.
Primary public explorer access is served at <code>explorer.d-bis.org</code>.
<code> blockscout.defi-oracle.io</code> is the Blockscout companion domain for the same Chain 138 explorer surface.
</p>
<p className="text-xs text-gray-500 dark:text-gray-500">
© {year} DBIS / Defi Oracle. All rights reserved.
© {year} DBIS. All rights reserved.
</p>
</div>

View File

@@ -12,11 +12,26 @@ const STANDARD_EXPLANATIONS: Record<string, string> = {
'ERC-2612': 'Permit support for signature-based approvals without a separate on-chain approve transaction.',
'ERC-3009': 'Authorization-based transfer model for signed payment flows without prior allowances.',
'ERC-5267': 'Discoverable EIP-712 domain introspection so wallets and relayers can inspect the signing domain cleanly.',
IeMoneyToken: 'Repo-native electronic-money token methodology for issuance and redemption semantics.',
CashElectronicMoneyInterface: 'Repo-native GRU instrument methodology for issuance and redemption semantics.',
DeterministicStorageNamespace: 'Stable namespace for upgrade-aware policy, registry, and audit resolution.',
JurisdictionAndSupervisionMetadata: 'Governance, supervisory, disclosure, and reporting metadata required by the GRU operating model.',
}
const STANDARD_DISPLAY_LABELS: Record<string, string> = {
CashElectronicMoneyInterface: 'Cash electronic-money interface',
DeterministicStorageNamespace: 'Deterministic storage namespace',
JurisdictionAndSupervisionMetadata: 'Jurisdiction and supervision metadata',
}
function formatStandardLabel(id: string): string {
return STANDARD_DISPLAY_LABELS[id] || id
}
function formatProfileLabel(id: string): string {
if (id === 'gru-c-star-v2-public-network-and-payment') return 'GRU C* v2 payment profile'
return id
}
function formatDuration(seconds: number | null): string | null {
if (seconds == null || !Number.isFinite(seconds) || seconds <= 0) return null
const units = [
@@ -56,16 +71,16 @@ export default function GruStandardsCard({
? `Review the live contract ABI and deployment against the GRU v2 base-token matrix before treating this asset as fully canonical.`
: `The live contract exposes the full required GRU v2 base-token surface currently checked by the explorer.`,
profile.wrappedTransport
? 'This looks like a wrapped transport asset, so confirm the corresponding bridge lane and reserve-verifier posture in addition to the token ABI.'
: 'This looks like a canonical GRU asset, so the next meaningful checks are reserve, governance, and transport activation beyond the token interface itself.',
? 'This looks like a cW public-network representation, so confirm the corresponding bridge lane and reserve-verifier posture in addition to the token ABI.'
: 'This looks like a canonical GRU asset, so the next meaningful checks are reserve, governance, and bridge activation beyond the token interface itself.',
profile.x402Ready
? 'This contract appears ready for x402-style payment flows because the explorer can see the required signature and domain surfaces.'
: 'This contract does not currently look x402-ready from the live explorer surface; verify EIP-712, ERC-5267, and permit or authorization flow exposure before using it as a payment rail.',
profile.forwardCanonical === true
? 'This version is marked forward-canonical, so it should be treated as the preferred successor surface even if older liquidity or transport versions still coexist.'
? 'This version is marked forward-canonical, so it should be treated as the preferred successor surface even if older liquidity or bridge versions still coexist.'
: profile.forwardCanonical === false
? 'This version is not forward-canonical, which usually means it is legacy, staged, or transport-only relative to the intended primary canonical surface.'
: 'Forward-canonical posture is not directly detectable on this contract, so rely on the transport overlay and deployment records before making promotion assumptions.',
? 'This version is not forward-canonical, which usually means it is legacy, staged, or bridge-only relative to the intended primary canonical surface.'
: 'Forward-canonical posture is not directly detectable on this contract, so rely on the bridge overlay and deployment records before making promotion assumptions.',
profile.legacyAliasSupport
? 'Legacy alias support is exposed, which is useful during version cutovers and explorer/search reconciliation.'
: 'Legacy alias support is not visible from the current explorer contract surface, so name/version migration may need registry or deployment-record cross-checks.',
@@ -78,9 +93,9 @@ export default function GruStandardsCard({
<DetailRow label="Profile">
<div className="space-y-2">
<div className="flex flex-wrap gap-2">
<EntityBadge label={profile.profileId} tone="info" className="normal-case tracking-normal" />
<EntityBadge label={formatProfileLabel(profile.profileId)} tone="info" className="normal-case tracking-normal" />
<EntityBadge
label={profile.wrappedTransport ? 'wrapped transport' : 'canonical GRU'}
label={profile.wrappedTransport ? 'cW public-network' : 'canonical GRU'}
tone={profile.wrappedTransport ? 'warning' : 'success'}
/>
</div>
@@ -94,14 +109,14 @@ export default function GruStandardsCard({
{profile.standards.map((standard) => (
<EntityBadge
key={standard.id}
label={standard.detected ? `${standard.id} detected` : `${standard.id} missing`}
label={standard.detected ? `${formatStandardLabel(standard.id)} detected` : `${formatStandardLabel(standard.id)} missing`}
tone={standard.detected ? 'success' : 'warning'}
className="normal-case tracking-normal"
/>
))}
</DetailRow>
<DetailRow label="Transport Posture">
<DetailRow label="Bridge Posture">
<div className="space-y-3">
<div className="flex flex-wrap gap-2">
<EntityBadge
@@ -134,8 +149,8 @@ export default function GruStandardsCard({
<div className="text-xs font-semibold uppercase tracking-wide text-gray-500 dark:text-gray-400">Settlement posture</div>
<div className="mt-2 text-gray-900 dark:text-white">
{profile.wrappedTransport
? 'This contract presents itself like a wrapped public-transport asset instead of the canonical Chain 138 money surface.'
: 'This contract presents itself like the canonical Chain 138 GRU money surface instead of a wrapped transport mirror.'}
? 'This contract presents itself like a cW public-network representation instead of the canonical Chain 138 GRU surface.'
: 'This contract presents itself like the canonical Chain 138 GRU surface instead of a cW public-network representation.'}
</div>
</div>
<div className="rounded-xl border border-gray-200 bg-gray-50 p-3 text-sm dark:border-gray-700 dark:bg-gray-900/40">
@@ -150,7 +165,7 @@ export default function GruStandardsCard({
<div className="text-xs font-semibold uppercase tracking-wide text-gray-500 dark:text-gray-400">Version posture</div>
<div className="mt-2 text-gray-900 dark:text-white">
{profile.activeVersion || profile.forwardVersion
? `Active liquidity/transport version: ${profile.activeVersion || 'unknown'}; preferred forward version: ${profile.forwardVersion || 'unknown'}.`
? `Active liquidity/bridge version: ${profile.activeVersion || 'unknown'}; preferred forward version: ${profile.forwardVersion || 'unknown'}.`
: 'No explicit active-versus-forward version posture is available from the local GRU catalog yet.'}
</div>
</div>
@@ -163,7 +178,7 @@ export default function GruStandardsCard({
{profile.standards.map((standard) => (
<div key={`${standard.id}-explanation`} className="rounded-xl border border-gray-200 bg-gray-50 p-3 text-sm dark:border-gray-700 dark:bg-gray-900/40">
<div className="flex flex-wrap items-center gap-2">
<div className="font-medium text-gray-900 dark:text-white">{standard.id}</div>
<div className="font-medium text-gray-900 dark:text-white">{formatStandardLabel(standard.id)}</div>
<EntityBadge label={standard.detected ? 'detected' : 'missing'} tone={standard.detected ? 'success' : 'warning'} />
</div>
<div className="mt-2 text-gray-600 dark:text-gray-400">
@@ -190,12 +205,12 @@ export default function GruStandardsCard({
<DetailRow label="References">
<div className="space-y-2 text-sm text-gray-600 dark:text-gray-400">
<div><Link href="/docs/gru" className="text-primary-600 hover:underline">Explorer GRU guide</Link></div>
<div>Canonical profile: <code className="rounded bg-gray-100 px-1.5 py-0.5 text-xs dark:bg-gray-800">{profile.profileId}</code></div>
<div>Repo standards matrix: <code className="rounded bg-gray-100 px-1.5 py-0.5 text-xs dark:bg-gray-800">docs/04-configuration/GRU_C_STAR_V2_STANDARDS_MATRIX_AND_IMPLEMENTATION_PLAN.md</code></div>
<div>Machine-readable profile: <code className="rounded bg-gray-100 px-1.5 py-0.5 text-xs dark:bg-gray-800">config/gru-standards-profile.json</code></div>
<div>Transport overlay: <code className="rounded bg-gray-100 px-1.5 py-0.5 text-xs dark:bg-gray-800">config/gru-transport-active.json</code></div>
<div>x402 support note: <code className="rounded bg-gray-100 px-1.5 py-0.5 text-xs dark:bg-gray-800">docs/04-configuration/CHAIN138_X402_TOKEN_SUPPORT.md</code></div>
<div>Chain 138 readiness guide: <code className="rounded bg-gray-100 px-1.5 py-0.5 text-xs dark:bg-gray-800">docs/04-configuration/GRU_V2_CHAIN138_READINESS.md</code></div>
<div>Canonical profile: <code className="rounded bg-gray-100 px-1.5 py-0.5 text-xs dark:bg-gray-800">{formatProfileLabel(profile.profileId)}</code></div>
<div>Standards matrix: <code className="rounded bg-gray-100 px-1.5 py-0.5 text-xs dark:bg-gray-800">GRU C* v2 implementation plan</code></div>
<div>Machine-readable profile: <code className="rounded bg-gray-100 px-1.5 py-0.5 text-xs dark:bg-gray-800">GRU standards profile</code></div>
<div>Public-network overlay: <code className="rounded bg-gray-100 px-1.5 py-0.5 text-xs dark:bg-gray-800">GRU cW representation registry</code></div>
<div>x402 support note: <code className="rounded bg-gray-100 px-1.5 py-0.5 text-xs dark:bg-gray-800">Chain 138 x402 token support</code></div>
<div>Chain 138 readiness guide: <code className="rounded bg-gray-100 px-1.5 py-0.5 text-xs dark:bg-gray-800">GRU v2 Chain 138 readiness</code></div>
</div>
</DetailRow>

View File

@@ -704,7 +704,7 @@ export default function Navbar() {
href="/"
className="group inline-flex min-w-0 items-center gap-3 rounded-2xl py-2 pr-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 dark:focus-visible:ring-offset-gray-950"
onClick={() => setMobileMenuOpen(false)}
aria-label="Go to SolaceScan home"
aria-label="Go to DBIS Explorer home"
>
<BrandLockup />
</Link>

View File

@@ -105,7 +105,7 @@ export default function WethOperationsPage({
<OperationsPageShell page={page}>
<Card className="mb-6 border border-amber-200 bg-amber-50/70 dark:border-amber-900/50 dark:bg-amber-950/20">
<p className="text-sm leading-6 text-amber-950 dark:text-amber-100">
These WETH references are bridge and transport surfaces, not a claim that Ethereum mainnet WETH contracts are native Chain 138 assets.
These WETH references are bridge-lane and public-network representation surfaces, not a claim that Ethereum mainnet WETH contracts are native Chain 138 assets.
Use this page to review wrapped-asset lane posture, counterpart contracts, and operational dependencies.
</p>
</Card>

View File

@@ -609,7 +609,7 @@ export default function Home({
<div className="rounded-2xl border border-white/40 bg-white/55 p-4 shadow-sm backdrop-blur dark:border-white/10 dark:bg-black/10">
<div className="text-xs font-semibold uppercase tracking-wide opacity-70">Chain 138 Status</div>
<div className="mt-2 text-lg font-semibold">{chainStatus.status || 'unknown'}</div>
<div className="mt-1 text-sm opacity-80">{chainStatus.name || 'Defi Oracle Meta Mainnet'}</div>
<div className="mt-1 text-sm opacity-80">{chainStatus.name || 'DeFi Oracle Meta Mainnet'}</div>
</div>
<div className="rounded-2xl border border-white/40 bg-white/55 p-4 shadow-sm backdrop-blur dark:border-white/10 dark:bg-black/10">
<div className="text-xs font-semibold uppercase tracking-wide opacity-70">Head Age</div>

View File

@@ -148,7 +148,7 @@ const FALLBACK_CAPABILITIES_138: CapabilitiesCatalog = {
name: 'Chain 138 RPC Capabilities',
version: { major: 1, minor: 1, patch: 0 },
timestamp: '2026-03-28T00:00:00Z',
generatedBy: 'SolaceScan',
generatedBy: 'DBIS Explorer',
chainId: 138,
chainName: 'DeFi Oracle Meta Mainnet',
rpcUrl: 'https://rpc-http-pub.d-bis.org',

View File

@@ -424,7 +424,7 @@ export default function AddressDetailPage() {
{gruMetadata ? <EntityBadge label="GRU" tone="success" /> : null}
{gruMetadata?.x402Ready ? <EntityBadge label="x402 ready" tone="info" /> : null}
{gruMetadata?.iso20022Ready ? <EntityBadge label="ISO-20022" tone="info" /> : null}
{gruMetadata?.transportActiveVersion ? <EntityBadge label={`transport ${gruMetadata.transportActiveVersion}`} tone="warning" /> : null}
{gruMetadata?.transportActiveVersion ? <EntityBadge label={`cW public-network ${gruMetadata.transportActiveVersion}`} tone="warning" /> : null}
</div>
{transfer.token_address && (
<Link href={`/tokens/${transfer.token_address}`} className="text-primary-600 hover:underline">

View File

@@ -11,7 +11,7 @@ export default function GruDocsPage() {
<PageIntro
eyebrow="Explorer Documentation"
title="GRU Guide"
description="A user-facing summary of the GRU standards, transport posture, and x402 readiness model, with concrete places to inspect those signals on live token, address, and search pages."
description="A user-facing summary of the GRU standards, bridge posture, public-network representations, and x402 readiness model, with concrete places to inspect those signals on live token, address, and search pages."
actions={[
{ href: '/tokens', label: 'Browse tokens' },
{ href: '/search?q=cUSDC', label: 'Search cUSDC' },
@@ -23,7 +23,7 @@ export default function GruDocsPage() {
<Card title="What The Explorer Is Showing You">
<div className="space-y-4 text-sm text-gray-600 dark:text-gray-400">
<p>
The explorer now distinguishes between canonical GRU money surfaces on Chain 138 and wrapped transport assets used on public-chain bridge lanes.
The explorer now distinguishes between canonical GRU surfaces on Chain 138 and cW public-network representations used on bridge lanes.
It also highlights when a token looks ready for x402-style payment flows.
</p>
<p>
@@ -103,7 +103,7 @@ export default function GruDocsPage() {
<Card title="Chain 138 Practical Reading">
<div className="space-y-3 text-sm text-gray-600 dark:text-gray-400">
<p>
A token can be forward-canonical and x402-ready even while older liquidity or transport lanes still run on a prior version.
A token can be forward-canonical and x402-ready even while older liquidity or bridge lanes still run on a prior version.
That is why the explorer separates active liquidity posture from forward-canonical posture.
</p>
<p>

View File

@@ -8,7 +8,7 @@ const docsCards = [
{
title: 'GRU Guide',
href: '/docs/gru',
description: 'Understand GRU standards, x402 readiness, wrapped transport posture, and forward-canonical versioning as surfaced by the explorer.',
description: 'Understand GRU standards, x402 readiness, cW public-network posture, and forward-canonical versioning as surfaced by the explorer.',
},
{
title: 'Transaction Evidence Matrix',
@@ -88,8 +88,8 @@ export default function DocsIndexPage() {
<Card title="Operator & Domains">
<div className="space-y-3 text-sm text-gray-600 dark:text-gray-400">
<p>
SolaceScan is the public Chain 138 explorer operated by DBIS / Defi Oracle. The explorer may be reached through
<code> blockscout.defi-oracle.io</code> or <code> explorer.d-bis.org</code>.
DBIS Explorer is the public Chain 138 explorer operated by DBIS. Primary public access is served at
<code> explorer.d-bis.org</code>; <code> blockscout.defi-oracle.io</code> is the Blockscout companion domain.
</p>
<p>
These domains are part of the same explorer and companion-tooling surface, including the Snap install path at

View File

@@ -12,7 +12,7 @@ export default function HomeAliasPage() {
return (
<main className="container mx-auto px-4 py-12">
<div className="mx-auto max-w-xl rounded-xl border border-gray-200 bg-white p-6 text-center shadow-sm dark:border-gray-700 dark:bg-gray-800">
<h1 className="text-2xl font-semibold text-gray-900 dark:text-white">Redirecting to SolaceScan</h1>
<h1 className="text-2xl font-semibold text-gray-900 dark:text-white">Redirecting to DBIS Explorer</h1>
<p className="mt-3 text-sm leading-7 text-gray-600 dark:text-gray-400">
The legacy <code className="rounded bg-gray-100 px-1 py-0.5 text-xs dark:bg-gray-900">/home</code> route now redirects to the main explorer landing page.
</p>

View File

@@ -392,7 +392,7 @@ export default function SearchPage({
{result.is_curated_token && <EntityBadge label="listed" tone="success" />}
{result.is_gru_token && <EntityBadge label="GRU" tone="success" />}
{result.is_x402_ready && <EntityBadge label="x402 ready" tone="info" />}
{result.is_wrapped_transport && <EntityBadge label="wrapped" tone="warning" />}
{result.is_wrapped_transport && <EntityBadge label="cW public-network" tone="warning" />}
{result.currency_code ? <EntityBadge label={result.currency_code} tone="neutral" /> : null}
{result.match_reason ? <EntityBadge label={result.match_reason} tone="info" className="normal-case tracking-normal" /> : null}
{result.matched_tags?.map((tag) => <EntityBadge key={tag} label={tag} />)}

View File

@@ -432,7 +432,7 @@ export default function TokenDetailPage() {
<Card title="Other Networks">
<div className="space-y-4">
<p className="text-sm text-gray-600 dark:text-gray-400">
These are sibling representations or settlement counterparts for the same GRU asset family on other networks, drawn from the local transport and mapping posture used by this workspace.
These are sibling representations or settlement counterparts for the same GRU asset family on other networks, drawn from the local public-network overlay and mapping posture used by this workspace.
</p>
<div className="space-y-3">
{gruExplorerMetadata.otherNetworks.map((network) => (

View File

@@ -11,8 +11,8 @@ import { tokenAggregationApi, type TokenAggregationTokenSnapshot } from '@/servi
import { fetchPublicJson } from '@/utils/publicExplorer'
const quickSearches = [
{ label: 'cUSDT', description: 'Canonical compliant USD electronic-money liquidity and address results.' },
{ label: 'cUSDC', description: 'Canonical compliant USD electronic-money routes and address coverage.' },
{ label: 'cUSDT', description: 'Canonical compliant USD treasury / government bond liquidity and address results.' },
{ label: 'cUSDC', description: 'Canonical compliant USD cash electronic-money routes and address coverage.' },
{ label: 'cXAUC', description: 'Gold-backed cXAUC pools and token references.' },
{ label: 'cXAUT', description: 'Gold-backed cXAUT references and search coverage.' },
{ label: 'cEURT', description: 'EUR liquidity and cXAUC-connected route coverage.' },
@@ -37,6 +37,19 @@ function formatUsd(value: number | undefined): string {
}).format(value)
}
function tagPriority(tag: string) {
const order: Record<string, number> = {
gru: 0,
compliant: 1,
'treasury-bond': 2,
'electronic-money': 2,
commodity: 2,
'reference-asset': 0,
defi: 4,
}
return order[tag] ?? 3
}
export default function TokensPage({ initialCuratedTokens }: TokensPageProps) {
const router = useRouter()
const [query, setQuery] = useState('')
@@ -106,7 +119,7 @@ export default function TokensPage({ initialCuratedTokens }: TokensPageProps) {
<PageIntro
eyebrow="Token Discovery"
title="Tokens"
description="Browse curated Chain 138 assets, open token contracts directly, and move into holders, transfers, liquidity, and provenance without pretending a search box is a complete token strategy."
description="Browse curated Chain 138 assets, open token contracts directly, and review holders, transfers, liquidity, and provenance from the same institutional explorer surface."
actions={[
{ href: '/wallet', label: 'Wallet tools' },
{ href: '/liquidity', label: 'Liquidity access' },
@@ -114,7 +127,7 @@ export default function TokensPage({ initialCuratedTokens }: TokensPageProps) {
]}
/>
<Card className="mb-6" title="Find A Token">
<Card className="mb-6" title="Find a token">
<form onSubmit={handleSubmit} className="flex flex-col gap-3 md:flex-row">
<input
type="text"
@@ -139,7 +152,7 @@ export default function TokensPage({ initialCuratedTokens }: TokensPageProps) {
<div className="grid gap-6 lg:grid-cols-3">
<Card title="Curated Registry">
<p className="text-sm text-gray-600 dark:text-gray-400">
Review listed Chain 138 assets with provenance tags such as compliant, wrapped, and bridge-aware before acting on a symbol match.
Review listed Chain 138 assets with provenance tags such as GRU, compliant, cW public-network, and reference asset before acting on a symbol match.
</p>
<div className="mt-4">
<Link href="/tokens" className="text-primary-600 hover:underline">
@@ -194,7 +207,7 @@ export default function TokensPage({ initialCuratedTokens }: TokensPageProps) {
) : null}
{token.tags && token.tags.length > 0 && (
<div className="mt-3 flex flex-wrap gap-2">
{token.tags.slice(0, 3).map((tag) => (
{[...token.tags].sort((a, b) => tagPriority(a) - tagPriority(b)).slice(0, 3).map((tag) => (
<EntityBadge key={`${token.address}-${tag}`} label={tag} className="px-2 py-1 text-[11px]" />
))}
</div>

View File

@@ -146,7 +146,7 @@ function setStoredWalletSession(session: WalletAccessSession | null) {
}
function buildWalletMessage(nonce: string) {
return `Sign this message to authenticate with SolaceScan.\n\nNonce: ${nonce}`
return `Sign this message to authenticate with DBIS Explorer.\n\nNonce: ${nonce}`
}
async function fetchWalletJson<T>(path: string, init?: RequestInit): Promise<T> {

View File

@@ -30,7 +30,7 @@ export interface GruStandardsProfile {
metadata: GruMetadataField[]
}
const GRU_PROFILE_ID = 'gru-c-star-v2-transport-and-payment'
const GRU_PROFILE_ID = 'gru-c-star-v2-public-network-and-payment'
const STANDARD_DEFINITIONS = [
{ id: 'ERC-20', required: true },
@@ -40,7 +40,7 @@ const STANDARD_DEFINITIONS = [
{ id: 'ERC-2612', required: true },
{ id: 'ERC-3009', required: true },
{ id: 'ERC-5267', required: true },
{ id: 'IeMoneyToken', required: true },
{ id: 'CashElectronicMoneyInterface', required: true },
{ id: 'DeterministicStorageNamespace', required: true },
{ id: 'JurisdictionAndSupervisionMetadata', required: true },
] as const
@@ -146,7 +146,7 @@ export async function getGruStandardsProfileSafe(input: {
'ERC-2612': nonces != null || hasMethod(contractProfile, 'permit') || hasMethod(contractProfile, 'nonces'),
'ERC-3009': authorizationState != null || hasMethod(contractProfile, 'authorizationState'),
'ERC-5267': hasMethod(contractProfile, 'eip712Domain'),
IeMoneyToken: currencyCode != null || versionTag != null,
CashElectronicMoneyInterface: currencyCode != null || versionTag != null,
DeterministicStorageNamespace: storageNamespace != null,
JurisdictionAndSupervisionMetadata:
governanceProfileId != null ||
@@ -187,7 +187,7 @@ export async function getGruStandardsProfileSafe(input: {
regulatoryDisclosureURI ? { label: 'Disclosure URI', value: regulatoryDisclosureURI } : null,
reportingURI ? { label: 'Reporting URI', value: reportingURI } : null,
minimumUpgradeNoticePeriod ? { label: 'Upgrade Notice Period', value: `${minimumUpgradeNoticePeriod} seconds` } : null,
wrappedTransport != null ? { label: 'Wrapped Transport', value: wrappedTransport } : null,
wrappedTransport != null ? { label: 'cW Public-Network Representation', value: wrappedTransport } : null,
forwardCanonical != null ? { label: 'Forward Canonical', value: forwardCanonical } : null,
legacyAliasSupport ? { label: 'Legacy Alias Support', value: 'true' } : null,
{ label: 'x402 Readiness', value: x402Ready ? 'true' : 'false' },

View File

@@ -6,7 +6,7 @@ set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
echo "=== SolaceScan Tiered Architecture - Deployment & Testing ==="
echo "=== DBIS Explorer Tiered Architecture - Deployment & Testing ==="
echo ""
# Colors

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash
# Deploy the current Next.js standalone frontend to VMID 5000.
# This is the canonical deployment path for the current SolaceScan frontend.
# This is the canonical deployment path for the current DBIS Explorer frontend.
# It builds the local frontend, uploads the standalone bundle, installs a systemd
# service, and starts the Node server on 127.0.0.1:3000 inside the container.
@@ -81,7 +81,7 @@ run_in_vmid() {
}
echo "=========================================="
echo "Deploying Next SolaceScan Frontend"
echo "Deploying Next DBIS Explorer Frontend"
echo "=========================================="
echo "VMID: $VMID"
echo "Frontend root: $FRONTEND_ROOT"
@@ -143,6 +143,10 @@ tar -C "$STAGE_DIR" -cf "${TMP_DIR}/${ARCHIVE_NAME}" .
cp "$SERVICE_TEMPLATE" "${TMP_DIR}/${SERVICE_NAME}.service"
sed -i "s|/opt/solacescanscout/frontend/current|${APP_ROOT}/current|g" "${TMP_DIR}/${SERVICE_NAME}.service"
sed -i "s|Environment=PORT=3000|Environment=PORT=${FRONTEND_PORT}|g" "${TMP_DIR}/${SERVICE_NAME}.service"
if [[ "${APP_RELATIVE_DIR}" != "." ]]; then
sed -i "s|WorkingDirectory=${APP_ROOT}/current|WorkingDirectory=${APP_ROOT}/current/${APP_RELATIVE_DIR}|g" "${TMP_DIR}/${SERVICE_NAME}.service"
sed -i "s|ExecStart=/usr/bin/node ${APP_ROOT}/current/server.js|ExecStart=/usr/bin/node ${APP_ROOT}/current/${APP_RELATIVE_DIR}/server.js|g" "${TMP_DIR}/${SERVICE_NAME}.service"
fi
cat > "${TMP_DIR}/install-next-frontend.sh" <<EOF
#!/usr/bin/env bash
@@ -171,10 +175,10 @@ for attempt in \$(seq 1 45); do
sleep 1
done
if ! grep -qiE "SolaceScan|Chain 138 Explorer by DBIS" /tmp/\${SERVICE_NAME}-health.out; then
if ! grep -qiE "DBIS Explorer|Chain 138 Explorer by DBIS" /tmp/\${SERVICE_NAME}-health.out; then
systemctl status "\${SERVICE_NAME}.service" --no-pager || true
journalctl -u "\${SERVICE_NAME}.service" -n 50 --no-pager || true
echo "Frontend health check did not find the expected SolaceScan marker." >&2
echo "Frontend health check did not find the expected DBIS Explorer marker." >&2
exit 1
fi
@@ -207,7 +211,7 @@ echo ""
echo "== Verification =="
run_in_vmid "systemctl is-active ${SERVICE_NAME}.service"
run_in_vmid "curl -fsS --max-time 5 http://127.0.0.1:${FRONTEND_PORT}/ | grep -qiE 'SolaceScan|Chain 138 Explorer by DBIS'"
run_in_vmid "curl -fsS --max-time 5 http://127.0.0.1:${FRONTEND_PORT}/ | grep -qiE 'DBIS Explorer|Chain 138 Explorer by DBIS'"
echo "Service ${SERVICE_NAME} is running on 127.0.0.1:${FRONTEND_PORT}"
echo ""
echo "Nginx follow-up:"

View File

@@ -6,7 +6,7 @@ set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
echo "=== SolaceScan Tiered Architecture Deployment ==="
echo "=== DBIS Explorer Tiered Architecture Deployment ==="
echo ""
# Step 1: Verify prerequisites

View File

@@ -30,7 +30,7 @@ function collectUnexpectedConsoleErrors(page: Page, allowlist: RegExp[] = []) {
test.describe('Explorer Frontend - Route Coverage', () => {
for (const route of [
{ path: '/', heading: /SolaceScan/i },
{ path: '/', heading: /DBIS Explorer/i },
{ path: '/blocks', heading: /^Blocks$/i },
{ path: '/transactions', heading: /^Transactions$/i },
{ path: '/addresses', heading: /^Addresses$/i },

View File

@@ -36,7 +36,7 @@ test.describe('Explorer full-stack smoke', () => {
})
for (const route of [
{ path: '/', heading: /SolaceScan/i, name: 'home' },
{ path: '/', heading: /DBIS Explorer/i, name: 'home' },
{ path: '/blocks', heading: /^Blocks$/i, name: 'blocks' },
{ path: '/transactions', heading: /^Transactions$/i, name: 'transactions' },
{ path: '/addresses', heading: /^Addresses$/i, name: 'addresses' },

View File

@@ -141,7 +141,7 @@ echo "=== 2. Frontend Content Tests ==="
CONTENT_URL="$BASE_URL:80"
# Test homepage content
test_content "$CONTENT_URL" "SolaceScan" "Homepage contains SolaceScan title"
test_content "$CONTENT_URL" "DBIS Explorer" "Homepage contains DBIS Explorer title"
# Test explorer branding
test_content "$CONTENT_URL" "Explorer" "Homepage contains explorer branding"
@@ -347,12 +347,12 @@ PATH_CURL_EXTRA=""
# SPA serves index.html for all paths - verify path-based routing is present
test_content "$PATH_TEST_BASE/address/0x99b3511a2d315a497c8112c1fdd8d508d4b1e506" "fromPath" "Path-based routing code present (address URL)" "$PATH_CURL_EXTRA"
test_content "$PATH_TEST_BASE/address/0x99b3511a2d315a497c8112c1fdd8d508d4b1e506" "SolaceScan" "Address path serves SPA shell" "$PATH_CURL_EXTRA"
test_content "$PATH_TEST_BASE/blocks" "SolaceScan" "Blocks path serves SPA" "$PATH_CURL_EXTRA"
test_content "$PATH_TEST_BASE/transactions" "SolaceScan" "Transactions path serves SPA" "$PATH_CURL_EXTRA"
test_content "$PATH_TEST_BASE/bridge" "SolaceScan" "Bridge path serves SPA" "$PATH_CURL_EXTRA"
test_content "$PATH_TEST_BASE/weth" "SolaceScan" "WETH path serves SPA" "$PATH_CURL_EXTRA"
test_content "$PATH_TEST_BASE/watchlist" "SolaceScan" "Watchlist path serves SPA" "$PATH_CURL_EXTRA"
test_content "$PATH_TEST_BASE/address/0x99b3511a2d315a497c8112c1fdd8d508d4b1e506" "DBIS Explorer" "Address path serves SPA shell" "$PATH_CURL_EXTRA"
test_content "$PATH_TEST_BASE/blocks" "DBIS Explorer" "Blocks path serves SPA" "$PATH_CURL_EXTRA"
test_content "$PATH_TEST_BASE/transactions" "DBIS Explorer" "Transactions path serves SPA" "$PATH_CURL_EXTRA"
test_content "$PATH_TEST_BASE/bridge" "DBIS Explorer" "Bridge path serves SPA" "$PATH_CURL_EXTRA"
test_content "$PATH_TEST_BASE/weth" "DBIS Explorer" "WETH path serves SPA" "$PATH_CURL_EXTRA"
test_content "$PATH_TEST_BASE/watchlist" "DBIS Explorer" "Watchlist path serves SPA" "$PATH_CURL_EXTRA"
# Verify nav links exist in HTML (use same base)
test_content "$PATH_TEST_BASE/" "#/home" "Home nav link present" "$PATH_CURL_EXTRA"

View File

@@ -388,7 +388,7 @@ sleep 2
if [ -f /var/www/html/index.html ]; then
echo "✅ Custom frontend file exists"
if grep -qiE "SolaceScan|Chain 138 Explorer by DBIS" /var/www/html/index.html; then
if grep -qiE "DBIS Explorer|Chain 138 Explorer by DBIS" /var/www/html/index.html; then
echo "✅ Custom frontend content verified"
else
echo "⚠️ Frontend file exists but may not be the custom one"
@@ -405,7 +405,7 @@ fi
echo ""
echo "Testing HTTP endpoint:"
HTTP_RESPONSE=$(curl -s --max-time 5 http://localhost/ 2>/dev/null | head -5) || true
if echo "$HTTP_RESPONSE" | grep -qiE "SolaceScan|Chain 138 Explorer by DBIS|<!DOCTYPE html"; then
if echo "$HTTP_RESPONSE" | grep -qiE "DBIS Explorer|Chain 138 Explorer by DBIS|<!DOCTYPE html"; then
echo "✅ Custom frontend is accessible via HTTP"
else
echo "⚠️ Frontend may not be accessible (check if file exists)"

View File

@@ -6,7 +6,7 @@ set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
echo "=== SolaceScan Tiered Architecture Setup ==="
echo "=== DBIS Explorer Tiered Architecture Setup ==="
echo ""
# Step 1: Run database migration