The block explorer started as a phosphor-green terminal demo in Phase 2. Then it got a rebrand in Phase 8 (dark neutral palette, clickable blocks, block detail). Then search + validator list + skeletons in the polish pass. But it was still missing the things that make a block explorer actually useful for developers building on the chain.
Today's batch of changes fills those gaps.
fees everywhere
Every transaction in the explorer now shows its gas cost. Block detail, tx detail, embedded tx cards — all of them display Gas used: X / Y (actual vs limit) and Tx fee: Z ASE (computed as gasUsed × baseFeePerGas). On the testnet the base fee is 1 wei per gas, so a 21,000-gas transfer costs 0.000000000000021 ASE. Not economically meaningful today, but structurally correct — and users can see that gas IS being metered on every operation.
addresses are clickable
Every "From" and "To" field in the explorer is now a link. Click any address → navigate to /address/<addr>. The search bar also accepts 40-hex addresses now (it already handled block numbers and tx hashes). This means the explorer is fully navigable: blocks → txs → addresses → contracts, with back-button support throughout.
contract pages
The big one. When you navigate to /address/<addr> and that address has code deployed (i.e. it's a smart contract, not just a wallet), the explorer shows:
- Balance + nonce — same as any address.
- Type indicator — "Contract" in gold, or "Externally Owned Account (EOA)" for regular wallets.
- Source code — the full JavaScript source, decoded from the hex returned by
eth_getCode, displayed in a scrollable monospace panel. This is the actual code that runs when someone calls the contract. No compilation artifacts, no ABI encoding — just the JavaScript the developer wrote. - Read contract — every view function parsed from the source, each in its own card with auto-generated parameter inputs and a "Call" button. Calls are free and instant — they hit the
/viewendpoint server-side, no wallet needed. - Write contract — every state-changing function, each with a "Send tx" button. Requires a connected wallet (there's a Connect/Disconnect button at the top of the section). Clicking "Send tx" calls
window.asentum.callContract()via the Asentum wallet extension, which opens the per-transaction approval popup.
The function classification (view vs write) uses the same heuristic as the playground: if the function body contains storage.set or emit(, it's a write. Otherwise it's a view. Not perfect for edge cases, but correct for every contract pattern we've seen so far.
deploy tx → contract link
When you view a deploy transaction on the explorer, the "To" field (which would normally show the zero address) is replaced with a gold-colored "Contract: 0x..." label that links directly to the deployed contract's address page. Click it → source code + Read/Write sections. This closes the loop: deploy from the playground → view tx on explorer → click through to the contract → interact with it.
the branding pass
All remaining "AsentumChain" references in the explorer are now just "Asentum" — hero title, footer, MetaMask toast, faucet hint, aria labels. The brand is settling into its short form. Copyright headers and GitHub links still reference the repo name (AsentumChain) since that's what the repo is actually called.
the numbers
The explorer HTML template (packages/node/src/explorer/html.ts) is now ~2,000 lines of inline CSS + HTML + JS. The playground (playground.ts) is another ~400 lines. Both are self-contained, zero external dependencies, served as template-literal strings from the node's RPC handler. The entire block explorer + contract playground + wallet integration fits inside a single dist/bin/run.js bundle that's 265 KB.
Five content-negotiated routes handle browser vs API access on the same URLs: / (explorer), /playground (IDE), /block/<n>, /tx/<hash>, /address/<addr>. A browser typing the URL gets the HTML shell; a fetch() call gets JSON. One if block per route in server.ts, one parseRoute() function in the client-side JS. The architecture is embarrassingly simple for what it delivers.
— milkie
