Add Chain 138 wallet network metadata and stats coin-price enrichment; sync frontend explorer SPA, command center, and address/token pages with backend config. Co-authored-by: Cursor <cursoragent@cursor.com>
1000 lines
36 KiB
HTML
1000 lines
36 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<title>Chain 138 — Visual Command Center</title>
|
||
<script src="/thirdparty/mermaid.min.js"></script>
|
||
<style>
|
||
:root {
|
||
--bg: #0b0f14;
|
||
--panel: #0f172a;
|
||
--header: #111827;
|
||
--border: #1f2937;
|
||
--text: #e6edf3;
|
||
--muted: #94a3b8;
|
||
--accent: #2563eb;
|
||
--accent-hover: #1d4ed8;
|
||
--callout: #1e293b;
|
||
--success: #10b981;
|
||
--warning: #f59e0b;
|
||
}
|
||
* { box-sizing: border-box; }
|
||
body {
|
||
margin: 0;
|
||
font-family: system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, sans-serif;
|
||
background: var(--bg);
|
||
color: var(--text);
|
||
min-height: 100vh;
|
||
}
|
||
.explorer-chrome {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
gap: 0.5rem 1rem;
|
||
padding: 0.55rem 1rem;
|
||
background: #0a0e17;
|
||
border-bottom: 1px solid var(--border);
|
||
font-size: 0.8125rem;
|
||
}
|
||
.explorer-chrome a {
|
||
color: #93c5fd;
|
||
text-decoration: none;
|
||
}
|
||
.explorer-chrome a:hover { text-decoration: underline; }
|
||
.chrome-brand {
|
||
font-weight: 700;
|
||
color: var(--text) !important;
|
||
margin-right: 0.25rem;
|
||
}
|
||
.chrome-links {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 0.35rem 0.85rem;
|
||
}
|
||
header {
|
||
padding: 1rem 1.25rem;
|
||
background: var(--header);
|
||
border-bottom: 1px solid var(--border);
|
||
}
|
||
header h1 {
|
||
margin: 0;
|
||
font-size: 1.25rem;
|
||
font-weight: 700;
|
||
}
|
||
header p {
|
||
margin: 0.35rem 0 0;
|
||
font-size: 0.875rem;
|
||
color: var(--muted);
|
||
max-width: 56rem;
|
||
line-height: 1.45;
|
||
}
|
||
.toolbar {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
align-items: center;
|
||
gap: 0.5rem;
|
||
padding: 0.65rem 1rem;
|
||
border-bottom: 1px solid var(--border);
|
||
background: rgba(17, 24, 39, 0.85);
|
||
position: sticky;
|
||
top: 0;
|
||
z-index: 10;
|
||
}
|
||
.tabs-wrap {
|
||
flex: 1;
|
||
min-width: 0;
|
||
overflow-x: auto;
|
||
-webkit-overflow-scrolling: touch;
|
||
scrollbar-width: thin;
|
||
}
|
||
.tabs {
|
||
display: flex;
|
||
flex-wrap: nowrap;
|
||
gap: 0.25rem;
|
||
padding-bottom: 2px;
|
||
}
|
||
.tab {
|
||
padding: 0.5rem 0.85rem;
|
||
cursor: pointer;
|
||
border: 1px solid transparent;
|
||
border-radius: 8px;
|
||
font-size: 0.8125rem;
|
||
font-weight: 600;
|
||
color: var(--muted);
|
||
background: transparent;
|
||
white-space: nowrap;
|
||
flex-shrink: 0;
|
||
}
|
||
.tab:hover {
|
||
color: var(--text);
|
||
background: var(--border);
|
||
}
|
||
.tab.active {
|
||
color: #fff;
|
||
background: var(--accent);
|
||
border-color: var(--accent-hover);
|
||
}
|
||
.toolbar a.back {
|
||
font-size: 0.8125rem;
|
||
color: #93c5fd;
|
||
text-decoration: none;
|
||
white-space: nowrap;
|
||
}
|
||
.toolbar a.back:hover { text-decoration: underline; }
|
||
.content {
|
||
display: none;
|
||
padding: 1.25rem;
|
||
max-width: 120rem;
|
||
margin: 0 auto;
|
||
}
|
||
.content.active { display: block; }
|
||
.panel-desc {
|
||
color: var(--muted);
|
||
font-size: 0.875rem;
|
||
line-height: 1.5;
|
||
margin-bottom: 1rem;
|
||
max-width: 56rem;
|
||
}
|
||
.callout {
|
||
border: 1px solid #334155;
|
||
border-radius: 12px;
|
||
padding: 1rem 1.1rem;
|
||
background: var(--callout);
|
||
margin-bottom: 1rem;
|
||
font-size: 0.875rem;
|
||
line-height: 1.55;
|
||
max-width: 56rem;
|
||
}
|
||
.callout strong { color: #e2e8f0; }
|
||
.callout a { color: #93c5fd; text-decoration: none; }
|
||
.callout a:hover { text-decoration: underline; }
|
||
.callout-warn { border-color: #b45309; background: rgba(180, 83, 9, 0.12); }
|
||
.mermaid-wrap {
|
||
background: var(--panel);
|
||
padding: 1.25rem;
|
||
border-radius: 12px;
|
||
border: 1px solid var(--border);
|
||
overflow-x: auto;
|
||
margin-bottom: 1.25rem;
|
||
}
|
||
.mermaid-wrap h3 {
|
||
margin: 0 0 0.75rem;
|
||
font-size: 0.95rem;
|
||
font-weight: 700;
|
||
color: #cbd5e1;
|
||
}
|
||
.mermaid-wrap + .mermaid-wrap { margin-top: 0.5rem; }
|
||
.link-grid {
|
||
display: grid;
|
||
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
|
||
gap: 0.75rem;
|
||
}
|
||
.link-card {
|
||
display: block;
|
||
text-decoration: none;
|
||
color: inherit;
|
||
border: 1px solid var(--border);
|
||
border-radius: 14px;
|
||
padding: 1rem;
|
||
background: var(--panel);
|
||
}
|
||
.link-card:hover { border-color: #475569; }
|
||
.link-card-title { font-weight: 700; margin-bottom: 0.3rem; }
|
||
.link-card-desc { color: var(--muted); line-height: 1.5; font-size: 0.875rem; }
|
||
.pool-table {
|
||
width: 100%;
|
||
border-collapse: collapse;
|
||
font-size: 0.8125rem;
|
||
margin-top: 0.5rem;
|
||
}
|
||
.pool-table th, .pool-table td {
|
||
border-bottom: 1px solid var(--border);
|
||
padding: 0.45rem 0.5rem;
|
||
text-align: left;
|
||
}
|
||
.pool-table th { color: var(--muted); font-weight: 600; }
|
||
.pool-table a { color: #93c5fd; text-decoration: none; }
|
||
.pool-table a:hover { text-decoration: underline; }
|
||
footer {
|
||
padding: 1.5rem;
|
||
border-top: 1px solid var(--border);
|
||
font-size: 0.75rem;
|
||
color: var(--muted);
|
||
text-align: center;
|
||
line-height: 1.6;
|
||
}
|
||
footer code { color: #a5b4fc; }
|
||
footer a { color: #93c5fd; }
|
||
.status-note {
|
||
margin: 0.75rem 1.25rem 0;
|
||
padding: 0.85rem 1rem;
|
||
border-radius: 12px;
|
||
border: 1px solid #334155;
|
||
background: rgba(15, 23, 42, 0.8);
|
||
color: var(--muted);
|
||
font-size: 0.875rem;
|
||
line-height: 1.5;
|
||
}
|
||
.status-note a { color: #93c5fd; text-decoration: none; }
|
||
.status-note a:hover { text-decoration: underline; }
|
||
.status-note summary {
|
||
cursor: pointer;
|
||
font-weight: 600;
|
||
color: #cbd5e1;
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
|
||
<nav class="explorer-chrome" aria-label="Explorer navigation">
|
||
<a class="chrome-brand" href="/">DBIS Explorer</a>
|
||
<div class="chrome-links">
|
||
<a href="/operations">Operations</a>
|
||
<a href="/bridge">Bridge</a>
|
||
<a href="/protocols">Protocols</a>
|
||
<a href="/liquidity">Liquidity</a>
|
||
<a href="/docs">Docs</a>
|
||
<a href="/topology">Topology</a>
|
||
</div>
|
||
</nav>
|
||
|
||
<header>
|
||
<h1>Chain 138 — deployment and liquidity topology</h1>
|
||
<p>
|
||
Static architecture companion maintained in
|
||
<code>explorer-monorepo/docs/CHAIN138_VISUAL_TOPOLOGY_SOURCE.md</code>.
|
||
Diagrams are informational only; live contract addresses and guardrails are on
|
||
<a href="/protocols">/protocols</a> and the main explorer SPA.
|
||
Deep links: <code>?tab=mission-control</code> or slugs <code>master</code> … <code>mission-control</code>
|
||
(numeric <code>?tab=0</code>–<code>8</code>).
|
||
Bundle: <span id="meta-version">—</span>.
|
||
</p>
|
||
</header>
|
||
|
||
<details class="status-note" id="page-about">
|
||
<summary>About this page (live explorer is canonical)</summary>
|
||
<p id="mermaid-status" style="margin:0.65rem 0 0;">
|
||
Loading diagram assets from <code>/thirdparty/mermaid.min.js</code>; CDN fallback runs automatically if local Mermaid is unavailable.
|
||
</p>
|
||
<p style="margin:0.65rem 0 0;">
|
||
Operational surfaces:
|
||
<a href="/operations">Operations hub</a>,
|
||
<a href="/bridge">Bridge</a>,
|
||
<a href="/routes">Routes</a>,
|
||
<a href="/liquidity">Liquidity</a>,
|
||
<a href="/pools">Pools</a>,
|
||
<a href="/protocols">Protocols</a>,
|
||
<a href="/analytics">Analytics</a>,
|
||
<a href="/system">System</a>,
|
||
<a href="/operator">Operator</a>,
|
||
<a href="/access">Access</a>,
|
||
<a href="/docs">Docs</a>,
|
||
<a href="/snap/">MetaMask Snap</a>.
|
||
</p>
|
||
</details>
|
||
|
||
<div class="toolbar">
|
||
<div class="tabs-wrap">
|
||
<div class="tabs" role="tablist" aria-label="Topology panels">
|
||
<button type="button" id="tab-0" class="tab active" role="tab" aria-selected="true" aria-controls="panel-0" data-tab="0" tabindex="0">Master map</button>
|
||
<button type="button" id="tab-1" class="tab" role="tab" aria-selected="false" aria-controls="panel-1" data-tab="1" tabindex="-1">Network</button>
|
||
<button type="button" id="tab-2" class="tab" role="tab" aria-selected="false" aria-controls="panel-2" data-tab="2" tabindex="-1">Stack</button>
|
||
<button type="button" id="tab-3" class="tab" role="tab" aria-selected="false" aria-controls="panel-3" data-tab="3" tabindex="-1">Flows</button>
|
||
<button type="button" id="tab-4" class="tab" role="tab" aria-selected="false" aria-controls="panel-4" data-tab="4" tabindex="-1">Cross-chain</button>
|
||
<button type="button" id="tab-5" class="tab" role="tab" aria-selected="false" aria-controls="panel-5" data-tab="5" tabindex="-1">Public cW</button>
|
||
<button type="button" id="tab-6" class="tab" role="tab" aria-selected="false" aria-controls="panel-6" data-tab="6" tabindex="-1">Off-chain</button>
|
||
<button type="button" id="tab-7" class="tab" role="tab" aria-selected="false" aria-controls="panel-7" data-tab="7" tabindex="-1">Integrations</button>
|
||
<button type="button" id="tab-8" class="tab" role="tab" aria-selected="false" aria-controls="panel-8" data-tab="8" tabindex="-1">Mission Control</button>
|
||
</div>
|
||
</div>
|
||
<a class="back" href="/operations">Operations hub</a>
|
||
</div>
|
||
|
||
<!-- 0 Master -->
|
||
<div class="content active" id="panel-0" role="tabpanel" aria-labelledby="tab-0">
|
||
<p class="panel-desc">Hub, leaf endings, CCIP destinations, Alltra, Avalanche cW corridor, public cW mesh, and pending programs. Mainnet cW mint corridors and optional TRUU sit under the Ethereum anchor.</p>
|
||
<div class="mermaid-wrap"><div class="mermaid" id="g-master">
|
||
flowchart TB
|
||
subgraph LEAF_INGRESS["Leaves — access to 138"]
|
||
WU[Wallets · MetaMask Snaps · Ledger · Chainlist · SDKs · ethers.js]
|
||
OPS[Operators · Foundry scripts · relay · systemd · deploy hooks]
|
||
RPCPUB[Public RPC FQDNs · thirdweb mirrors]
|
||
FB[Fireblocks Web3 RPC]
|
||
end
|
||
|
||
subgraph LEAF_EDGE["Leaves — services that index or front 138"]
|
||
EXP[explorer.d-bis.org · blockscout.defi-oracle.io · token-aggregation]
|
||
INFO[info.defi-oracle.io]
|
||
DAPP[dapp.d-bis.org bridge UI · atomic-swap.defi-oracle.io]
|
||
DBIS[dbis-api Core hosts]
|
||
X402[x402 payment API]
|
||
MCP[MCP PMM controller]
|
||
end
|
||
|
||
subgraph HUB["CHAIN 138 — origin hub"]
|
||
C138["Besu EVM · tokens · DODO PMM Stack A · EnhancedSwapRouter live · UniV3 / Balancer / Curve / 1inch pilots · CCIP · AlltraAdapter · BridgeVault · ISO · reserve vault · Lockbox · Truth / Tron / Solana adapters"]
|
||
end
|
||
|
||
subgraph CCIP_ETH["Ethereum 1 — CCIP anchor"]
|
||
ETH1["WETH9 / WETH10 bridges · CCIPRelayRouter · RelayBridge · Logger · optional trustless stack"]
|
||
LEAF_ETH["Mainnet DEX · Li.Fi touchpoints · first-wave cW DODO pools · optional TRUU PMM rail"]
|
||
end
|
||
|
||
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["Per-chain native DEX · cW representation · partial edge pools"]
|
||
end
|
||
|
||
subgraph ALLTRA["ALL Mainnet 651940"]
|
||
A651["AlltraAdapter peer · AUSDT · WETH · WALL · HYDX · DEX env placeholders"]
|
||
LEAF_651["ALL native venues when configured"]
|
||
end
|
||
|
||
subgraph SPECIAL["Dedicated corridor from 138"]
|
||
AVAXCW["138 cUSDT to Avax cWUSDT mint path"]
|
||
LEAF_AVAX["Recipient on 43114"]
|
||
end
|
||
|
||
subgraph CW_MESH["Public cW GRU mesh"]
|
||
CW["Cross-public-EVM token matrix · pool design · Mainnet DODO concentration"]
|
||
end
|
||
|
||
subgraph PENDING["Pending or degraded scaffold"]
|
||
WEMIX[Wemix 1111 CCIP lane degraded]
|
||
XDC[XDC Zero parallel program]
|
||
SCAFF[Etherlink Tezos OP L2 design]
|
||
PNON[Truth pointer · Tron adapter · Solana partial]
|
||
end
|
||
|
||
WU --> RPCPUB
|
||
RPCPUB --> C138
|
||
WU --> C138
|
||
OPS --> C138
|
||
EXP --> C138
|
||
INFO --> C138
|
||
DAPP --> C138
|
||
DBIS --> C138
|
||
X402 --> C138
|
||
MCP --> C138
|
||
FB --> C138
|
||
|
||
C138 <--> ETH1
|
||
C138 <--> L2CLU
|
||
C138 <--> A651
|
||
C138 --> AVAXCW
|
||
AVAXCW --> LEAF_AVAX
|
||
|
||
ETH1 <--> L2CLU
|
||
ETH1 --> LEAF_ETH
|
||
L2CLU --> LEAF_L2
|
||
A651 --> LEAF_651
|
||
|
||
CW -.->|pool and peg design| LEAF_ETH
|
||
CW -.->|token mesh| L2CLU
|
||
|
||
C138 -.-> WEMIX
|
||
C138 -.-> XDC
|
||
C138 -.-> SCAFF
|
||
C138 -.-> PNON
|
||
</div></div>
|
||
</div>
|
||
|
||
<!-- 1 Network -->
|
||
<div class="content" id="panel-1" role="tabpanel" aria-labelledby="tab-1" hidden>
|
||
<p class="panel-desc">Chain 138 to the public EVM mesh, Alltra, scaffold targets, Avalanche cW minting, and the Mainnet cW mint corridor alongside the WETH-class CCIP rail.</p>
|
||
<div class="mermaid-wrap"><div class="mermaid">
|
||
flowchart TB
|
||
subgraph C138["Chain 138 — primary"]
|
||
CORE[Core registry vault oracle ISO router]
|
||
PMM[DODO PMM Stack A V2 DVM + pools]
|
||
R1[EnhancedSwapRouter live]
|
||
R2P[EnhancedSwapRouterV2 planned]
|
||
D3[D3MM pilot]
|
||
CCIPB[CCIP WETH9 WETH10 bridges]
|
||
ALLA[AlltraAdapter]
|
||
ADP[Truth Tron Solana adapters partial]
|
||
end
|
||
|
||
subgraph PUB["Public EVM mesh (cW*)"]
|
||
E1[Ethereum 1]
|
||
E10[Optimism 10]
|
||
E25[Cronos 25]
|
||
E56[BSC 56]
|
||
E100[Gnosis 100]
|
||
E137[Polygon 137]
|
||
E42161[Arbitrum 42161]
|
||
E43114[Avalanche 43114]
|
||
E8453[Base 8453]
|
||
E42220[Celo 42220]
|
||
end
|
||
|
||
subgraph PEND["Pending or separate"]
|
||
WEMIX[Wemix 1111 lane degraded]
|
||
XDC[XDC Zero parallel program]
|
||
SCAFF[Etherlink Tezos OP L2 scaffold]
|
||
end
|
||
|
||
subgraph A651["ALL Mainnet 651940"]
|
||
ALLTOK[AUSDT USDC WETH WALL HYDX]
|
||
end
|
||
|
||
C138 -->|CCIP WETH| PUB
|
||
C138 -->|CCIP WETH| E1
|
||
C138 -->|mainnet cW mint corridor| E1
|
||
C138 -->|AlltraAdapter| A651
|
||
PUB -->|CCIP return| C138
|
||
E1 -->|CCIP return| C138
|
||
C138 -.->|operator completion| WEMIX
|
||
C138 -.->|not CCIP matrix row| XDC
|
||
C138 -.->|future gated| SCAFF
|
||
|
||
C138 -->|avax cw corridor| E43114
|
||
R1 -.->|Phase 4b| R2P
|
||
</div></div>
|
||
<p class="panel-desc">Topology note: Mainnet has two Ethereum-facing patterns — standard WETH-class CCIP and the dedicated <code>cUSDC/cUSDT → cWUSDC/cWUSDT</code> mint corridor.</p>
|
||
</div>
|
||
|
||
<!-- 2 Stack -->
|
||
<div class="content" id="panel-2" role="tabpanel" aria-labelledby="tab-2" hidden>
|
||
<p class="panel-desc">On-chain layers: tokens, core, liquidity, cross-domain, reserve and settlement.</p>
|
||
|
||
<div class="callout callout-warn">
|
||
<strong>PMM Stack A (production).</strong>
|
||
Wire dApps and routers to
|
||
<code>DODOPMMIntegration</code> <code>0x86ADA6Ef91A3B450F89f2b751e93B1b7A3218895</code>
|
||
and <code>DODOPMMProvider</code> <code>0x3f729632E9553EBacCdE2e9b4c8F2B285b014F2e</code>.
|
||
</div>
|
||
<div class="callout callout-warn">
|
||
<strong>Do not wire Stack B</strong> parallel integration
|
||
<code>0x5BDc62f1ae7D630c37A8B363a1d49845356Ee72d</code> — seeded but un-traded pools.
|
||
See <a href="/protocols">official protocol registry</a>.
|
||
</div>
|
||
<div class="callout">
|
||
<strong>EnhancedSwapRouter (live)</strong> <code>0xE6Cc7643ae2A4C720A28D8263BC4972905d7DE0f</code> —
|
||
DODO Stack A active; UniV3/Balancer/1inch slots wired per-pair.
|
||
<strong>EnhancedSwapRouterV2</strong> is planned (Phase 4b), not the default production router.
|
||
</div>
|
||
|
||
<div class="mermaid-wrap"><div class="mermaid">
|
||
flowchart TB
|
||
subgraph L1["Tokens and compliance"]
|
||
CT[cUSDT · cUSDC · cEUR* · cXAU* · mirrors · USDT · USDC]
|
||
GEN[WETH WETH10 LINK]
|
||
end
|
||
|
||
subgraph L2["Core infrastructure"]
|
||
REG[Compliance TokenFactory TokenRegistry BridgeVault]
|
||
POL[PolicyManager DebtRegistry FeeCollector]
|
||
ISO[ISO20022Router]
|
||
end
|
||
|
||
subgraph L3["Liquidity and execution"]
|
||
DVM[Stack A DVMFactory VendingMachine DODOPMMIntegration]
|
||
PRV[DODOPMMProvider PrivatePoolRegistry]
|
||
R1[EnhancedSwapRouter live]
|
||
R2P[EnhancedSwapRouterV2 planned]
|
||
VEN[Uniswap v3 Balancer Curve 1inch pilots]
|
||
D3[D3Oracle D3Vault D3Proxy D3MMFactory]
|
||
end
|
||
|
||
subgraph L4["Cross-domain"]
|
||
CCIP[CCIP Router CCIPWETH9 CCIPWETH10]
|
||
ALL[AlltraAdapter]
|
||
LBX[Lockbox138]
|
||
CH[PaymentChannel Mirror AddressMapper]
|
||
end
|
||
|
||
subgraph L5["Reserve vault settlement"]
|
||
RS[ReserveSystem OraclePriceFeed]
|
||
VF[VaultFactory Ledger Liquidation XAUOracle]
|
||
MSR[MerchantSettlementRegistry WithdrawalEscrow]
|
||
end
|
||
|
||
L1 --> L2
|
||
L2 --> L3
|
||
L3 --> R1
|
||
R1 --> VEN
|
||
R1 -.-> R2P
|
||
L2 --> L4
|
||
L2 --> L5
|
||
DVM --> PRV
|
||
</div></div>
|
||
|
||
<div class="callout">
|
||
<strong>Compliance & evidence (explorer surfaces).</strong>
|
||
<code>ISO20022Router</code> on-chain aligns with ISO-20022 posture badges —
|
||
<a href="/docs/posture-glossary">posture glossary</a>.
|
||
x402 readiness (EIP-712, ERC-5267, permit/3009) —
|
||
<a href="/docs/gru">GRU guide</a> and <a href="/search?q=cUSDT">token/search filters</a>.
|
||
Transaction evidence scoring —
|
||
<a href="/docs/transaction-review">transaction review matrix</a>.
|
||
Li* RWA factory is separate from c*→cW* transport —
|
||
<a href="/protocols/rwa_token_factory">RWA token factory registry</a>.
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 3 Flows -->
|
||
<div class="content" id="panel-3" role="tabpanel" aria-labelledby="tab-3" hidden>
|
||
<p class="panel-desc">Same-chain 138: Stack A PMM pools, EnhancedSwapRouter (live), D3 pilot. Live pool inventory: <a href="/pools">/pools</a>.</p>
|
||
|
||
<div class="mermaid-wrap">
|
||
<h3>Stack A PMM pools (live, traded)</h3>
|
||
<table class="pool-table">
|
||
<thead><tr><th>Pair</th><th>Pool</th></tr></thead>
|
||
<tbody>
|
||
<tr><td>cUSDT/cUSDC</td><td><a href="/pools/0x9e89bAe009adf128782E19e8341996c596ac40dC">0x9e89…40dC</a></td></tr>
|
||
<tr><td>cUSDT/USDT</td><td><a href="/pools/0x866Cb44b59303d8dc5f4F9E3E7A8e8b0bf238d66">0x866C…8d66</a></td></tr>
|
||
<tr><td>cUSDC/USDC</td><td><a href="/pools/0xc39B7D0F40838cbFb54649d327f49a6DAC964062">0xc39B…4062</a></td></tr>
|
||
<tr><td>cBTC/cUSDT</td><td><a href="/pools/0x67049e7333481e2cac91af61403ac7bddfab7bcd">0x6704…7bcd</a></td></tr>
|
||
<tr><td>cBTC/cUSDC</td><td><a href="/pools/0x72f1a0794153c3b8a1e8a731f1d8e1a52cb10dc5">0x72f1…0dc5</a></td></tr>
|
||
<tr><td>WETH/USDC</td><td><a href="/pools/0xb53a0508940b1ff90f1aad4f6cb50a7012fe5593">0xb53a…5593</a></td></tr>
|
||
<tr><td>WETH/USDT</td><td><a href="/pools/0xe227f6c0520c0c6e8786fe56fa76c4914f861533">0xe227…1533</a></td></tr>
|
||
<tr><td>cBTC/cXAUC</td><td><a href="/pools/0xf3e8a07d419b61f002114e64d79f7cf8f7989433">0xf3e8…9433</a></td></tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="mermaid-wrap"><div class="mermaid">
|
||
flowchart LR
|
||
subgraph inputs["Typical inputs"]
|
||
U1[cUSDT]
|
||
U2[cUSDC]
|
||
U3[USDT mirror]
|
||
U4[USDC mirror]
|
||
U5[cEURT]
|
||
U6[cXAUC]
|
||
end
|
||
|
||
subgraph path_pmm["DODO PMM Stack A"]
|
||
INT[DODOPMMIntegration 0x86ADA6Ef]
|
||
POOL[Stable pools XAU public pools Private XAU registry]
|
||
end
|
||
|
||
subgraph path_r1["EnhancedSwapRouter live"]
|
||
R1[EnhancedSwapRouter 0xE6Cc7643]
|
||
UV3[Uniswap v3 WETH stable]
|
||
PILOT[Balancer Curve 1inch]
|
||
end
|
||
|
||
subgraph path_d3["Pilot"]
|
||
D3[D3MM WETH10 pilot pool]
|
||
end
|
||
|
||
inputs --> INT
|
||
INT --> POOL
|
||
inputs --> R1
|
||
R1 --> UV3
|
||
R1 --> PILOT
|
||
GEN2[WETH WETH10] --> R1
|
||
GEN2 --> D3
|
||
</div></div>
|
||
</div>
|
||
|
||
<!-- 4 Cross-chain -->
|
||
<div class="content" id="panel-4" role="tabpanel" aria-labelledby="tab-4" hidden>
|
||
<p class="panel-desc">CCIP routing, managed relay fleet, Alltra round-trip, c→cW mint corridors, and swap-bridge-swap orchestration. Live relay posture: <a href="/bridge">/bridge</a>.</p>
|
||
|
||
<div class="mermaid-wrap">
|
||
<h3>Managed CCIP relay fleet (explorer /bridge)</h3>
|
||
<div class="mermaid">
|
||
flowchart TB
|
||
C138[Chain 138 hub]
|
||
|
||
subgraph RELAYS["Managed relay lanes"]
|
||
MW[mainnet_weth]
|
||
MC[mainnet_cw]
|
||
BSC[bsc]
|
||
AV[avax]
|
||
AVC[avax_cw]
|
||
A138[avax_to_138]
|
||
end
|
||
|
||
C138 --> MW
|
||
C138 --> MC
|
||
C138 --> BSC
|
||
C138 --> AV
|
||
C138 --> AVC
|
||
AVC --> A138
|
||
A138 --> C138
|
||
</div>
|
||
</div>
|
||
|
||
<div class="mermaid-wrap">
|
||
<h3>CCIP — WETH primary routing lane</h3>
|
||
<div class="mermaid">
|
||
sequenceDiagram
|
||
participant U as User or bot
|
||
participant C138 as Chain 138
|
||
participant BR as CCIPWETH9 or WETH10 bridge
|
||
participant R as CCIP Router
|
||
participant D as Destination EVM
|
||
|
||
U->>C138: Fund WETH bridge fee LINK
|
||
U->>BR: Initiate cross-chain WETH transfer
|
||
BR->>R: CCIP message
|
||
R->>D: Deliver WETH class asset
|
||
Note over D: Native DEX or cW pools where deployed
|
||
D->>R: Optional return leg
|
||
R->>C138: Inbound to receiver bridge
|
||
</div>
|
||
</div>
|
||
<div class="mermaid-wrap">
|
||
<h3>Alltra — 138 to ALL Mainnet</h3>
|
||
<div class="mermaid">
|
||
flowchart LR
|
||
A[Chain 138] -->|AlltraAdapter| B[ALL 651940]
|
||
B -->|AlltraAdapter| A
|
||
</div>
|
||
</div>
|
||
<div class="mermaid-wrap">
|
||
<h3>Special corridors — c* to cW* mint</h3>
|
||
<div class="mermaid">
|
||
flowchart LR
|
||
S1[cUSDT on 138] -->|avax cw relay mint| T1[cWUSDT on Avalanche]
|
||
S2[cUSDC on 138] -->|mainnet relay mint| T2[cWUSDC on Mainnet]
|
||
S3[cUSDT on 138] -->|mainnet relay mint| T3[cWUSDT on Mainnet]
|
||
</div>
|
||
</div>
|
||
<div class="mermaid-wrap">
|
||
<h3>Orchestrated swap-bridge-swap (design target)</h3>
|
||
<div class="mermaid">
|
||
flowchart LR
|
||
Q[QuoteService POST api bridge quote] --> S1[Source leg e.g. 138 PMM]
|
||
S1 --> BR[Bridge CCIP Alltra or special]
|
||
BR --> S2[Destination leg DEX or cW pool]
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 5 Public cW -->
|
||
<div class="content" id="panel-5" role="tabpanel" aria-labelledby="tab-5" hidden>
|
||
<p class="panel-desc">
|
||
Ethereum Mainnet first-wave cW DODO mesh plus optional TRUU PMM rail.
|
||
<strong>c*</strong> on Chain 138 is the compliant canonical instrument;
|
||
<strong>cW*</strong> on public chains is the wrapped transport representation (not Li* RWA).
|
||
Guide: <a href="/docs/gru">GRU guide</a> · mesh search <a href="/search?q=cWUSDC">cWUSDC</a>.
|
||
</p>
|
||
<div class="callout callout-warn">
|
||
<strong>Mainnet cWUSDC/USDC guardrail.</strong>
|
||
Do not route cWUSDC→USDC through skewed legacy UniV2 pair <code>0xC28706F8…</code> when peg deviation is high.
|
||
Prefer DODO / UniV3 repair lanes and explorer <a href="/liquidity">liquidity policy</a> (bridge underlying, not LP).
|
||
</div>
|
||
<div class="mermaid-wrap"><div class="mermaid">
|
||
flowchart TB
|
||
subgraph ETH["Ethereum Mainnet"]
|
||
CW[cWUSDT cWUSDC cWEURC cWGBPC cWAUDC cWCADC cWJPYC cWCHFC]
|
||
HUB[USDC USDT]
|
||
DODO[DODO PMM Wave 1 pools]
|
||
end
|
||
|
||
CW <--> DODO
|
||
HUB <--> DODO
|
||
</div></div>
|
||
<p class="panel-desc">TRUU: optional Mainnet Truth volatile PMM lane — not part of the default cW stable mesh.</p>
|
||
<div class="mermaid-wrap">
|
||
<h3>Mainnet TRUU PMM (volatile, optional)</h3>
|
||
<div class="mermaid">
|
||
flowchart LR
|
||
subgraph TRUUmesh["Mainnet TRUU rail optional"]
|
||
CWu[cWUSDT or cWUSDC]
|
||
TRUU[TRUU ERC-20]
|
||
PMM[DODO PMM integration]
|
||
end
|
||
|
||
CWu <--> PMM
|
||
TRUU <--> PMM
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 6 Off-chain -->
|
||
<div class="content" id="panel-6" role="tabpanel" aria-labelledby="tab-6" hidden>
|
||
<p class="panel-desc">Wallets, edge FQDNs, APIs, operators, and explorer-hosted Mission Control surfaces.</p>
|
||
<div class="mermaid-wrap"><div class="mermaid">
|
||
flowchart TB
|
||
subgraph users["Wallets and tools"]
|
||
MM[MetaMask custom network · /snap/]
|
||
MCP[MCP PMM controller allowlist 138]
|
||
end
|
||
|
||
subgraph edge["Public edge"]
|
||
EXP[explorer.d-bis.org · blockscout.defi-oracle.io]
|
||
MC[Mission Control panels · /bridge · homepage]
|
||
INFO[info.defi-oracle.io]
|
||
DAPP[dapp.d-bis.org · atomic-swap.defi-oracle.io]
|
||
RPC[rpc-http-pub.d-bis.org]
|
||
end
|
||
|
||
subgraph api["APIs"]
|
||
TA[token-aggregation v1 v2 quote pools bridge routes]
|
||
DBIS[dbis-api Core runtime]
|
||
X402[x402-api readiness surface]
|
||
end
|
||
|
||
subgraph ops["Operator"]
|
||
REL[CCIP relay systemd · mainnet_cw bsc avax lanes]
|
||
SCR[smom-dbis-138 forge scripts]
|
||
end
|
||
|
||
users --> edge
|
||
EXP --> MC
|
||
edge --> api
|
||
MC --> api
|
||
api --> C138[Chain 138 RPC]
|
||
ops --> C138
|
||
</div></div>
|
||
<p class="panel-desc">Live Mission Control UI: <a href="/bridge">bridge monitoring</a>, <a href="/operations">operations hub</a>, homepage Mission Control card. This page stays the static topology reference.</p>
|
||
</div>
|
||
|
||
<!-- 7 Integrations -->
|
||
<div class="content" id="panel-7" role="tabpanel" aria-labelledby="tab-7" hidden>
|
||
<p class="panel-desc">
|
||
Contract families vs wallet/client integrations.
|
||
<strong>Wormhole</strong> appears in the <a href="/protocols">official protocol registry</a> as integration scaffold / docs scope — not a live Chain 138 liquidity rail unless listed as production on <a href="/protocols/wormhole">protocol detail</a>.
|
||
</p>
|
||
<div class="mermaid-wrap"><div class="mermaid">
|
||
flowchart LR
|
||
subgraph chain138_tech["Chain 138 contract families"]
|
||
A[Besu EVM]
|
||
B[ERC-20 core registries]
|
||
C[DODO V2 V3 Stack A]
|
||
D[UniV3 Bal Curve 1inch pilots]
|
||
E[CCIP bridges router]
|
||
F[Alltra Vault ISO channels]
|
||
end
|
||
|
||
subgraph public_integrations["Wallet and client integrations"]
|
||
L[Ledger]
|
||
CL[Chainlist]
|
||
TW[thirdweb RPC]
|
||
ETH[ethers.js]
|
||
MM[MetaMask Snaps /snap/]
|
||
end
|
||
|
||
chain138_tech --> public_integrations
|
||
</div></div>
|
||
</div>
|
||
|
||
<!-- 8 Mission Control -->
|
||
<div class="content" id="panel-8" role="tabpanel" aria-labelledby="tab-8" hidden>
|
||
<p class="panel-desc">Mission Control: SSE health, bridge traces, liquidity proxy, and operator APIs. Interactive controls live in the explorer SPA; this tab lists entry points.</p>
|
||
<div class="mermaid-wrap">
|
||
<h3>Mission Control visual flow</h3>
|
||
<div class="mermaid">
|
||
flowchart LR
|
||
UI[Explorer SPA Mission Control panels]
|
||
SSE[SSE stream]
|
||
TRACE[Bridge trace]
|
||
LIQ[Liquidity proxy]
|
||
T4[Track 4 script API]
|
||
API[Explorer Go API]
|
||
UP[Blockscout and token-aggregation upstreams]
|
||
|
||
UI --> SSE
|
||
UI --> TRACE
|
||
UI --> LIQ
|
||
UI -.->|operator-only| T4
|
||
SSE --> API
|
||
TRACE --> API
|
||
LIQ --> API
|
||
T4 --> API
|
||
TRACE --> UP
|
||
LIQ --> UP
|
||
</div>
|
||
</div>
|
||
|
||
<div class="mermaid-wrap">
|
||
<h3>Explorer operational surfaces</h3>
|
||
<div class="link-grid">
|
||
<a class="link-card" href="/operations"><div class="link-card-title">Operations hub</div><div class="link-card-desc">Consolidated monitoring, routes, and topology shortcuts.</div></a>
|
||
<a class="link-card" href="/bridge"><div class="link-card-title">Bridge monitoring</div><div class="link-card-desc">Relay fleet, CCIP lane health, bridge trace card, SSE.</div></a>
|
||
<a class="link-card" href="/routes"><div class="link-card-title">Routes</div><div class="link-card-desc">Live route matrix and execution paths.</div></a>
|
||
<a class="link-card" href="/liquidity"><div class="link-card-title">Liquidity</div><div class="link-card-desc">PMM access, planner capabilities, pool inventory.</div></a>
|
||
<a class="link-card" href="/pools"><div class="link-card-title">Pools</div><div class="link-card-desc">Mission-control pool inventory snapshot.</div></a>
|
||
<a class="link-card" href="/protocols"><div class="link-card-title">Protocols</div><div class="link-card-desc">Official DODO, Uni, CCIP, Multicall3 registry.</div></a>
|
||
<a class="link-card" href="/weth"><div class="link-card-title">WETH utilities</div><div class="link-card-desc">Wrapped-asset references and bridge context.</div></a>
|
||
<a class="link-card" href="/analytics"><div class="link-card-title">Analytics</div><div class="link-card-desc">Track 3 blocks, transactions, activity summaries.</div></a>
|
||
<a class="link-card" href="/system"><div class="link-card-title">System</div><div class="link-card-desc">Networks, RPC capabilities, topology inventory.</div></a>
|
||
<a class="link-card" href="/operator"><div class="link-card-title">Operator</div><div class="link-card-desc">Track 4 relay, route, and planner shortcuts.</div></a>
|
||
<a class="link-card" href="/access"><div class="link-card-title">Access</div><div class="link-card-desc">Wallet-authenticated Track 3/4 features.</div></a>
|
||
<a class="link-card" href="/docs"><div class="link-card-title">Documentation</div><div class="link-card-desc">GRU, posture glossary, transaction review, APIs.</div></a>
|
||
<a class="link-card" href="/snap/"><div class="link-card-title">MetaMask Snap</div><div class="link-card-desc">Snap install path on this explorer domain.</div></a>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="mermaid-wrap">
|
||
<h3>Public JSON APIs</h3>
|
||
<div class="link-grid">
|
||
<a class="link-card" href="/explorer-api/v1/mission-control/stream" target="_blank" rel="noopener noreferrer"><div class="link-card-title">SSE stream</div><div class="link-card-desc"><code>GET /explorer-api/v1/mission-control/stream</code></div></a>
|
||
<a class="link-card" href="/explorer-api/v1/track1/bridge/status" target="_blank" rel="noopener noreferrer"><div class="link-card-title">Bridge status JSON</div><div class="link-card-desc"><code>GET /explorer-api/v1/track1/bridge/status</code></div></a>
|
||
<a class="link-card" href="/explorer-api/v1/mission-control/bridge/trace?tx=0x2f31d4f9a97be754b800f4af1a9eedf3b107d353bfa1a19e81417497a76c05c2" target="_blank" rel="noopener noreferrer"><div class="link-card-title">Bridge trace example</div><div class="link-card-desc"><code>GET …/mission-control/bridge/trace</code></div></a>
|
||
<a class="link-card" href="/explorer-api/v1/mission-control/liquidity/token/0x93E66202A11B1772E55407B32B44e5Cd8eda7f22/pools" target="_blank" rel="noopener noreferrer"><div class="link-card-title">Liquidity pools (cUSDT)</div><div class="link-card-desc"><code>GET …/liquidity/token/{address}/pools</code></div></a>
|
||
<a class="link-card" href="/token-aggregation/api/v1/routes/matrix?includeNonLive=true" target="_blank" rel="noopener noreferrer"><div class="link-card-title">Route matrix</div><div class="link-card-desc">Token-aggregation live and planned routes.</div></a>
|
||
<a class="link-card" href="/api/v1/report/external-indexer-readiness?chainId=138" target="_blank" rel="noopener noreferrer"><div class="link-card-title">Indexer readiness</div><div class="link-card-desc">External indexer readiness report (chain 138).</div></a>
|
||
<a class="link-card" href="/token-aggregation/api/v1/report/official-protocols" target="_blank" rel="noopener noreferrer"><div class="link-card-title">Official protocols JSON</div><div class="link-card-desc">Production guardrails and contract list.</div></a>
|
||
<a class="link-card" href="/api/v2/stats" target="_blank" rel="noopener noreferrer"><div class="link-card-title">Blockscout stats</div><div class="link-card-desc">Chain head, gas, indexer summary.</div></a>
|
||
<a class="link-card" href="/api/config/networks" target="_blank" rel="noopener noreferrer"><div class="link-card-title">Wallet networks</div><div class="link-card-desc">Published chain metadata for onboarding.</div></a>
|
||
<a class="link-card" href="/explorer-api/v1/walletconnect/config" target="_blank" rel="noopener noreferrer"><div class="link-card-title">WalletConnect config</div><div class="link-card-desc">WalletConnect v2 posture.</div></a>
|
||
</div>
|
||
<p class="panel-desc" style="margin-top:1rem;">
|
||
<strong>Track 4 script API:</strong>
|
||
<code>POST /explorer-api/v1/track4/operator/run-script</code> —
|
||
wallet auth, IP allowlist, and backend allowlist required.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
|
||
<footer>
|
||
Source: <code>explorer-monorepo/docs/CHAIN138_VISUAL_TOPOLOGY_SOURCE.md</code> ·
|
||
Live addresses: <a href="/protocols">/protocols</a>,
|
||
<a href="/token-aggregation/api/v1/report/official-protocols">official-protocols JSON</a> ·
|
||
Meta: <a href="/chain138-command-center.meta.json">bundle metadata</a> ·
|
||
Alias: <a href="/topology">/topology</a>
|
||
</footer>
|
||
|
||
<script>
|
||
(function () {
|
||
mermaid.initialize({
|
||
startOnLoad: false,
|
||
theme: 'dark',
|
||
securityLevel: 'loose',
|
||
flowchart: { curve: 'basis', padding: 12 },
|
||
sequence: { actorMargin: 24, boxMargin: 8 }
|
||
});
|
||
|
||
var TAB_SLUGS = ['master', 'network', 'stack', 'flows', 'cross-chain', 'public-cw', 'off-chain', 'integrations', 'mission-control'];
|
||
var TAB_BY_NAME = {};
|
||
TAB_SLUGS.forEach(function (s, i) { TAB_BY_NAME[s] = i; });
|
||
|
||
var tabs = document.querySelectorAll('.tab');
|
||
var panels = document.querySelectorAll('.content[role="tabpanel"]');
|
||
var tablist = document.querySelector('[role="tablist"]');
|
||
var done = {};
|
||
|
||
fetch('/chain138-command-center.meta.json', { credentials: 'same-origin' })
|
||
.then(function (r) { return r.ok ? r.json() : null; })
|
||
.then(function (meta) {
|
||
var el = document.getElementById('meta-version');
|
||
if (!el || !meta) return;
|
||
var parts = [meta.bundleVersion];
|
||
if (meta.routeMatrixUpdated) parts.push('routes ' + meta.routeMatrixUpdated);
|
||
el.textContent = parts.join(' · ');
|
||
})
|
||
.catch(function () {});
|
||
|
||
function parseInitialTab() {
|
||
var q = new URLSearchParams(window.location.search).get('tab');
|
||
if (q == null || q === '') return 0;
|
||
var n = parseInt(q, 10);
|
||
if (!isNaN(n) && n >= 0 && n < tabs.length) return n;
|
||
var key = String(q).toLowerCase().trim().replace(/\s+/g, '-');
|
||
if (Object.prototype.hasOwnProperty.call(TAB_BY_NAME, key)) return TAB_BY_NAME[key];
|
||
return 0;
|
||
}
|
||
|
||
function ensureMermaid() {
|
||
if (window.mermaid && typeof window.mermaid.run === 'function') {
|
||
return Promise.resolve(window.mermaid);
|
||
}
|
||
return new Promise(function (resolve, reject) {
|
||
var script = document.createElement('script');
|
||
script.src = 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.min.js';
|
||
script.async = true;
|
||
script.onload = function () {
|
||
if (window.mermaid && typeof window.mermaid.run === 'function') resolve(window.mermaid);
|
||
else reject(new Error('Mermaid fallback loaded without runtime'));
|
||
};
|
||
script.onerror = function () {
|
||
reject(new Error('Mermaid fallback failed to load'));
|
||
};
|
||
document.head.appendChild(script);
|
||
});
|
||
}
|
||
|
||
function syncUrl(index) {
|
||
var slug = TAB_SLUGS[index] != null ? TAB_SLUGS[index] : String(index);
|
||
try {
|
||
var u = new URL(window.location.href);
|
||
u.searchParams.set('tab', slug);
|
||
history.replaceState(null, '', u.pathname + u.search + u.hash);
|
||
} catch (e) { /* file:// */ }
|
||
}
|
||
|
||
function setActive(index) {
|
||
if (index < 0) index = 0;
|
||
if (index >= tabs.length) index = tabs.length - 1;
|
||
tabs.forEach(function (t, i) {
|
||
var on = i === index;
|
||
t.classList.toggle('active', on);
|
||
t.setAttribute('aria-selected', on ? 'true' : 'false');
|
||
t.setAttribute('tabindex', on ? '0' : '-1');
|
||
});
|
||
panels.forEach(function (p, i) {
|
||
var on = i === index;
|
||
p.classList.toggle('active', on);
|
||
if (on) p.removeAttribute('hidden');
|
||
else p.setAttribute('hidden', '');
|
||
});
|
||
}
|
||
|
||
async function renderPanel(index) {
|
||
var panel = document.getElementById('panel-' + index);
|
||
if (!panel || done[index]) return;
|
||
done[index] = true;
|
||
var nodes = panel.querySelectorAll('.mermaid');
|
||
if (nodes.length) {
|
||
try {
|
||
await ensureMermaid();
|
||
await mermaid.run({ nodes: nodes });
|
||
var status = document.getElementById('mermaid-status');
|
||
if (status) status.textContent = 'Diagram assets loaded. Use the main explorer for live operational data.';
|
||
} catch (e) {
|
||
console.error('Mermaid render failed for panel', index, e);
|
||
var statusError = document.getElementById('mermaid-status');
|
||
if (statusError) statusError.textContent = 'Diagram rendering failed. Open /operations or /bridge for live surfaces.';
|
||
}
|
||
}
|
||
}
|
||
|
||
async function showTab(index, opts) {
|
||
opts = opts || {};
|
||
setActive(index);
|
||
await renderPanel(index);
|
||
if (!opts.skipUrl) syncUrl(index);
|
||
}
|
||
|
||
tabs.forEach(function (tab) {
|
||
tab.addEventListener('click', function () {
|
||
var i = parseInt(tab.getAttribute('data-tab'), 10);
|
||
showTab(i);
|
||
});
|
||
});
|
||
|
||
if (tablist) {
|
||
tablist.addEventListener('keydown', function (e) {
|
||
var cur = -1;
|
||
tabs.forEach(function (t, idx) {
|
||
if (t.getAttribute('aria-selected') === 'true') cur = idx;
|
||
});
|
||
if (cur < 0) return;
|
||
var next = cur;
|
||
if (e.key === 'ArrowRight') {
|
||
e.preventDefault();
|
||
next = (cur + 1) % tabs.length;
|
||
} else if (e.key === 'ArrowLeft') {
|
||
e.preventDefault();
|
||
next = (cur - 1 + tabs.length) % tabs.length;
|
||
} else if (e.key === 'Home') {
|
||
e.preventDefault();
|
||
next = 0;
|
||
} else if (e.key === 'End') {
|
||
e.preventDefault();
|
||
next = tabs.length - 1;
|
||
} else {
|
||
return;
|
||
}
|
||
showTab(next).then(function () {
|
||
tabs[next].focus();
|
||
});
|
||
});
|
||
}
|
||
|
||
async function boot() {
|
||
var initial = parseInitialTab();
|
||
await showTab(initial, { skipUrl: true });
|
||
try {
|
||
var u = new URL(window.location.href);
|
||
if (u.searchParams.has('tab')) syncUrl(initial);
|
||
} catch (e2) { /* ignore */ }
|
||
}
|
||
if (document.readyState === 'loading') {
|
||
document.addEventListener('DOMContentLoaded', boot);
|
||
} else {
|
||
boot();
|
||
}
|
||
})();
|
||
</script>
|
||
</body>
|
||
</html>
|