Summary
Blockbook does not support Basenames (Coinbase's ENS-fork naming service on Base, names of the form <label>.base.eth). The existing ENS machinery in bchain/coins/eth/ is deliberately scoped to Ethereum mainnet, so no names are indexed or resolved on Base. This is a feature request to add Basenames support.
Current state
There are two independent name-handling mechanisms for EthereumType coins, both wired to Ethereum mainnet only:
-
Alias indexing (passive, sync-time) — scans NameRegistered logs from trusted registrar contracts and stores address → name aliases. This is what renders a name next to an address in the explorer.
getEnsRecord — bchain/coins/eth/dataparser.go:345
isTrustedNameRegisteredEvent accepts only the three ENS ETHRegistrarController signatures (5/6/7-arg) — bchain/coins/eth/dataparser.go:336, constants at bchain/coins/eth/contract.go:29-37
- trusted emitters come from the
ens_registrars config; empty ⇒ records nothing (bchain/coins/eth/ethrpc.go:97-99)
- display suffix appended by
FormatAddressAlias = name + EnsSuffix (bchain/coins/eth/ethparser.go:636); default .eth (ethparser.go:68), overridden to .bnb/.trx by BSC/Tron
-
Live forward resolution (search box) — ResolveENS (bchain/coins/eth/ethrpc.go:2546), reachable from explorer search (server/public.go:1266).
ensContracts() hard-fails when MainNetChainID != MainNet (bchain/coins/eth/ethrpc.go:2537-2542), disabling resolution on every L2 including Base.
Live reverse resolution (address → name) does not exist in production (only a test stub, tests/dbtestdata/fakechain_ethereumtype.go).
Base config today: configs/coins/base_archive.json has address_aliases: true but no ens_registrars; configs/coins/base.json has neither. A bchain/coins/base/baserpc.go package already exists (chain id 8453) with a ResolveENS passthrough hook — a natural home for Base-specific wiring.
Proposed work
Feature A — Basenames alias indexing (core, recommended first)
Feature B — live *.eth search resolution (optional)
Out of scope
Live reverse resolution (address → name). The alias index already provides address → name for display.
Facts to confirm before implementing
- Basenames
RegistrarController address on Base.
- Exact
NameRegistered event signature and indexed-param layout.
- Whether the emitted
name is the bare label (jesse) or the full name (decides whether .base.eth suffix is correct or would double-suffix).
- Registry / L2Resolver / BaseRegistrar addresses (Feature B).
- Basenames deployment block (backfill floor).
Summary
Blockbook does not support Basenames (Coinbase's ENS-fork naming service on Base, names of the form
<label>.base.eth). The existing ENS machinery inbchain/coins/eth/is deliberately scoped to Ethereum mainnet, so no names are indexed or resolved on Base. This is a feature request to add Basenames support.Current state
There are two independent name-handling mechanisms for EthereumType coins, both wired to Ethereum mainnet only:
Alias indexing (passive, sync-time) — scans
NameRegisteredlogs from trusted registrar contracts and storesaddress → namealiases. This is what renders a name next to an address in the explorer.getEnsRecord—bchain/coins/eth/dataparser.go:345isTrustedNameRegisteredEventaccepts only the three ENSETHRegistrarControllersignatures (5/6/7-arg) —bchain/coins/eth/dataparser.go:336, constants atbchain/coins/eth/contract.go:29-37ens_registrarsconfig; empty ⇒ records nothing (bchain/coins/eth/ethrpc.go:97-99)FormatAddressAlias=name + EnsSuffix(bchain/coins/eth/ethparser.go:636); default.eth(ethparser.go:68), overridden to.bnb/.trxby BSC/TronLive forward resolution (search box) —
ResolveENS(bchain/coins/eth/ethrpc.go:2546), reachable from explorer search (server/public.go:1266).ensContracts()hard-fails whenMainNetChainID != MainNet(bchain/coins/eth/ethrpc.go:2537-2542), disabling resolution on every L2 including Base.Live reverse resolution (address → name) does not exist in production (only a test stub,
tests/dbtestdata/fakechain_ethereumtype.go).Base config today:
configs/coins/base_archive.jsonhasaddress_aliases: truebut noens_registrars;configs/coins/base.jsonhas neither. Abchain/coins/base/baserpc.gopackage already exists (chain id 8453) with aResolveENSpassthrough hook — a natural home for Base-specific wiring.Proposed work
Feature A — Basenames alias indexing (core, recommended first)
RegistrarControlleraddress toens_registrarsinconfigs/coins/base.jsonandconfigs/coins/base_archive.json, and setaddress_aliases: trueon both.NameRegisteredevent signature to the constants (bchain/coins/eth/contract.go) and toisTrustedNameRegisteredEvent(dataparser.go:336). Structurally it's already compatible:getEnsRecordneeds exactly 3 topics (sig + indexedlabel+ indexedowner, owner intopic[2]) andparseEnsNameFromLogDatareads the first dynamicstringparam by offset..base.ethfor Base viaSetEnsSuffix(".base.eth")inbchain/coins/base/baserpc.goInitialize()(mirrors BSC/Tron). A single flat suffix is correct because the registrar trust-list guarantees every captured alias is a Basename. (Alternative: add a genericens_suffixconfig field toeth.Configuration.)blockbook -rebuildensaliases(RebuildEnsAliases,ethrpc.go:1471); give the rescan the Basenames deployment block as a floor to avoid scanning from genesis.NameRegisteredlog fixture →getEnsRecordaccepts it andFormatAddressAliasyields<label>.base.eth.Feature B — live
*.ethsearch resolution (optional)ensContracts()for Base by overriding it inbchain/coins/baseto return the Basenames Registry + BaseRegistrar addresses on chain 8453.ResolveENSlargely works as-is:.base.ethpasses the suffix check andensNameHashalready does full recursive namehash. Caveat: names resolving via CCIP-read/offchain gateways won't resolve through a plaineth_call; on-chain names will.CheckENSExpiration(ethrpc.go:2621) extracts the label asparts[len-1], which forjesse.base.ethyieldsbase(wrong token). Needs Basenames-aware label extraction + Base's BaseRegistrar address, or skip initially.Out of scope
Live reverse resolution (address → name). The alias index already provides address → name for display.
Facts to confirm before implementing
RegistrarControlleraddress on Base.NameRegisteredevent signature and indexed-param layout.nameis the bare label (jesse) or the full name (decides whether.base.ethsuffix is correct or would double-suffix).