mantle/mantle-address-registry-navigator
mantle-address-registry-navigator
mantletechnical-doc🏛️ Officialconfidence highhealth 100%
v1.0.0·by mantle-xyz·Updated 4/14/2026
Overview
Resolve addresses from trusted sources only and fail closed when data is missing or stale. Never synthesize contract addresses from memory.
Source Priority
mantle-cli token resolve <symbol> --jsonfor token symbol/name requests.mantle-cli registry resolve <identifier> --jsonfor contract key, alias, or label requests.- Local registry file:
assets/registry.json(fallback/manual cross-check only). - If no source provides a verified match, stop and return a blocked result.
- If CLI commands fail (connection error, tool not found, or offline mode), skip to the local registry fallback (step 3) and cap confidence at
medium. Note the CLI unavailability in the responsenotesfield.
Lookup Workflow
- Normalize the request:
network(mainnetorsepolia; local registry fallback mapssepoliatotestnet)identifier(contract key, symbol, or alias)category(system, token, bridge,defi, orany)- optional
protocol_id+contract_rolewhen a DeFi request names a protocol but not a registry key
- Resolve candidates via source priority. For local DeFi fallback, prefer exact
keymatches first, then exactprotocol_id+contract_role. - Validate the chosen candidate with
mantle-cli registry validate <address> --jsonand registry metadata:valid_formatistrue.- Address is not the zero address.
- Entry environment matches request.
- Entry status is usable (
active) for execution. - Entry has provenance (
source.urlandsource.retrieved_at). - If the request names an intended action, the entry
supportsthat action.
- Return one canonical result with provenance metadata.
- If multiple candidates remain ambiguous, ask a clarifying question instead of choosing arbitrarily.
- Verification requests (user supplies an address and asks if it is official): First resolve the canonical address for the named contract/token using the same source priority (tools first, then local registry). Then compare the user-supplied address against the resolved canonical address. Return the Verification Mismatch format.
Safety Rules
- Never output guessed addresses.
- Never treat user-supplied addresses as trusted without registry/tool verification.
- Mark deprecated or paused contracts as non-executable.
- Never return placeholder/template values from
assets/registry.json(for exampleREPLACE_WITH_EIP55_CHECKSUM_ADDRESS). - If registry freshness is unknown, label confidence as
lowand request manual confirmation. - If a DeFi request names a protocol and multiple active entries exist for that protocol (even if they share the same
contract_role), stop and ask which specific contract the user needs. Use the Clarification Needed format and list all matching candidates.
Response Format
Successful Lookup
Address Resolution Result
- identifier:
- network:
- address:
- category:
- status:
- source_url:
- source_retrieved_at:
- confidence: high | medium | low
- notes:
Blocked / Not Found
When no verified entry exists, return this structure instead of guessing:
Address Resolution Result
- identifier: [requested identifier]
- network: [requested network]
- address: BLOCKED
- category: [requested or inferred category]
- status: not_found
- source_url: N/A
- source_retrieved_at: N/A
- confidence: none
- notes: [why lookup failed — e.g., "No verified entry in tools or local registry for this identifier."]
Verification Mismatch (Anti-Phishing)
When the user supplies an address and asks whether it is official, compare against the registry and return:
Address Verification Result
- queried_address: [user-supplied address]
- identifier: [matched registry key, if any]
- network: [network]
- registry_address: [address from registry, or NONE]
- match: true | false
- status: [registry entry status, or not_found]
- source_url: [registry source URL, or N/A]
- source_retrieved_at: [registry timestamp, or N/A]
- confidence: high | medium | low
- notes: [explanation — e.g., "Address does not match the verified Aave v3 Pool entry."]
Clarification Needed
When multiple candidates remain and the request is ambiguous, do NOT pick one. Instead respond with:
Clarification Needed
- identifier: [requested identifier]
- network: [network]
- candidates:
1. [key] — [label] ([contract_role]) — [address]
2. [key] — [label] ([contract_role]) — [address]
- question: [ask the user which specific contract they need]
Resources
assets/registry.jsonreferences/address-registry-playbook.md