Skip to main content

Batch Naming - Name Multiple Contracts in One Go

· 6 min read
Nischal Sharma
Co-Founder and Lead Engineer at Enscribe

Enscribe has shipped Contract Batch Naming feature for our Enscribe UI app. Teams and projects can now name multiple smart contracts at once under a single parent domain. This reduces the contract naming process for projects with multiple deployed contracts from hours to minutes.

Batch naming page

Why Batch Naming?

Managing multiple smart contracts across different chains has always been a challenge and time-consuming. Whether you're a DAO with governance contracts, a DeFi with multiple vault, protocol, core and utility contracts, or an infrastructure project with contracts deployed across chains, naming each contract individually means repeating the same steps: creating subnames, setting forward resolutions, and setting reverse resolutions. Each step costs gas.

When we worked with Nouns DAO to name their contracts, we saw this problem firsthand. They had to create subnames, set forward resolutions, and set reverse resolutions for each contract as a new step and their governance only allows maximum 10 transaction in a single proposal. This was their first proposal: ENS x Nouns, Name our Smart Contracts which didn't get through because of this issue.

Thus we built the Enscribe V2 contract to support batch naming with multi-chain support. This contract is now live on Ethereum mainnet and Sepolia testnet. You can read more about it in this blog post. Using the Enscribe V2 contract, you can name multiple contracts in one transaction.

We are now adding this batch naming feature support to our Enscribe UI app.

How Batch Naming Works

Batch naming uses the Enscribe V2 contract's setNameBatch() function. This involves a single transaction for creating subnames under the same parent domain and setting forward resolutions for all contracts at once. For example, if you're naming 10 contracts under myproject.eth, you just need one transaction to create 10 subnames and forward resolutions for all 10 contracts.

But for setting primary names, you need to execute one transaction for each compatible contract (contracts that are ownable/ERC-173 compliant) to set reverse resolution. Here's what happens under the hood:

The Technical Flow

  1. Operator Access: First, Enscribe requests operator approval for your parent ENS domain. This is a one-time permission that allows the Enscribe contract to create subnames under your domain.

  2. Batch Creation: All contract addresses and their corresponding names are sent in a single transaction to the Enscribe V2 contract. This creates subnames and sets forward resolutions for all contracts at once.

  3. Reverse Resolution (L1): For contracts which are ownable/ERC-173 compliant and owned by your wallet, Enscribe sets up reverse resolution on Ethereum mainnet (or testnet), enabling address-to-name lookups.

  4. L2 Primary Names: If you've selected L2 chains, Enscribe automatically switches to each chain and sets up primary names for the contracts there, ensuring consistent naming across all networks.

  5. Operator Revocation: Finally, operator access is revoked, returning full control of your ENS domain to you.

All of this happens in one modal flow, with clear progress indicators for each step.

Batch naming form

Parent Subdomains Support

Batch naming supports automatic parent subdomain creation. If you're naming contracts hierarchically (e.g., vault1.defi.myproject.eth, vault2.defi.myproject.eth), Enscribe automatically creates the intermediate parent (defi.myproject.eth) with no forward resolution. This keeps your namespace organized.

Note that each new level of parent subdomain requires a new batch naming transaction. For example, if you're naming three contracts under myproject.eth (app1.myproject.eth, app2.myproject.eth, app3.myproject.eth) and two more contracts under defi.myproject.eth (vault1.defi.myproject.eth, vault2.defi.myproject.eth), you need two separate batch naming transactions:

  1. First transaction: app1.myproject.eth, app2.myproject.eth, app3.myproject.eth, defi.myproject.eth
  2. Second transaction: vault1.defi.myproject.eth, vault2.defi.myproject.eth

Step-by-Step Guide: Batch Naming Your Contracts

Let's walk through naming multiple contracts using batch naming.

1. Navigate to Batch Naming

Head to app.enscribe.xyz and click on "Batch Naming" from the homepage.

2. Choose Your Parent Domain

Select the parent ENS domain under which all your contracts will be named. You can use:

  • Your project's ENS domain (e.g., myproject.eth)
  • The default Enscribe parent (deployd.eth)
Operator Access

Batch naming requires operator access to create subnames. An info tooltip explains this next to the Parent Domain field. Don't worry—access is revoked after naming completes or else it can be revoked manually anytime.

3. Add Your Contracts

Enter your contract addresses and their desired names. You can:

  • Add contracts one by one using the "Add Entry" button or use Upload CSV to import a CSV file with contract addresses and names.
  • You can also download a template CSV file to get started with the format. It has two columns - address and name.
  • Use hierarchical names with dots (e.g., vault1.defi, vault2.defi)
  • Mix different types of contracts in the same batch

Validation Features:

  • Real-time validation of contract addresses
  • Duplicate address detection
  • Duplicate name detection
  • Invalid label format warnings
  • Auto-generated parent subdomains highlighted

4. Advanced Options: L2 Chain Selection

Expand the Advanced Options section to configure L2 primary names.

Advanced options with L2 selection

Click "Choose L2 Chains" to select which Layer 2 networks you want to set up primary names on:

  • Optimism
  • Arbitrum
  • Base
  • Scroll
  • Linea

The system will add the corresponding coin types and create additional transaction steps to switch to each chain and set primary names.

If you only want to set up L2 primary names without L1 forward/reverse resolution, enable "Skip L1 Naming" in the Advanced Options.

5. Review and Submit

Once you've added all contracts and configured your options, click "Name Your Contracts". The system will:

  • Validate all entries
  • Verify contract ownership (for reverse resolution)
  • Add steps for naming process

6. Execute Transaction Steps

A modal will guide you through each step of the process:

Transaction steps modal

Step Progress:

  • ✅ Grant operator access
  • ✅ Create subnames and set forward resolution (batched)
  • ✅ Set reverse records (for owned contracts)
  • ✅ Switch to L2 chains and set primary names
  • ✅ Revoke operator access

Once all steps complete, you'll see a success screen showing:

  • Your parent domain
  • An expandable list of all named contracts with their addresses
  • Share buttons for X/Twitter and Farcaster
  • POAP claiming button (for mainnet deployments)

Limitations and Considerations

Prerequisites

  • You must connect from an L1 chain (Ethereum mainnet or Sepolia)
  • You need to give operator access for the parent domain (granted during the flow)
  • For reverse resolution, you must own the contract (also contract must be ownable/ERC173 compatible)

Gas Considerations

Batch naming is more gas-efficient than individual naming, but naming many contracts still requires significant gas. The transaction cost will depend on:

  • Number of contracts in the batch
  • Number of L2 chains selected

Maximum recommended batch size: 50 contracts (gas limits may reach for larger batches)

Try Batch Naming Today

Ready to name multiple contracts? Visit app.enscribe.xyz, connect your wallet to Ethereum mainnet or Sepolia, navigate to "Batch Naming", and start naming.

We'd love to hear about your batch naming experience:

Happy batch naming! 🚀

Naming Smart Contracts with Foundry

· 3 min read
Abhijeet Bhagat
Enscribe Senior Engineer

handshake

Foundry is one of the most popular toolchains for Ethereum smart contract development. Built in Rust, Foundry provides everything needed to build, test, and deploy smart contracts. At the center of this workflow is Forge, Foundry’s scripting and deployment tool. Forge scripts are written in Solidity itself, allowing developers to deploy contracts and interact with them.

However, one key step that developers miss in their workflows is to name their contracts right after the deployment is done. This is where our new Enscribe plugin comes in.

The key idea behind Enscribe is simple: naming should be automated and baked into the deployment scripts. Using Enscribe, a Forge script can register or update an ENS name for a deployed contract, optimally only set forward resolution (ENS → address), and set reverse resolution (address → ENS). Because this logic runs in Solidity, it integrates naturally with Foundry’s scripting environment.

Let’s see how developers can set names for their contract with Enscribe and Forge working together.

  1. Create a new project:

    forge init counter
    cd counter
  2. Install the Enscribe plugin:

    forge install enscribexyz/enscribe
  3. Install openzeppelin:

    forge install OpenZeppelin/openzeppelin-contracts
  4. Create remapping.txt in the root dir and add the following to it to simplify imports:

    enscribe/=lib/enscribe/src/
    @openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/
  5. Make Counter implement Ownable:

    import "@openzeppelin/contracts/access/Ownable.sol";  

    contract Counter is Ownable {
    constructor(uint256 initialCount) Ownable(msg.sender) {
    number = initialCount
    }
    }
  6. Edit our deployment script Counter.s.sol to set a primary name for the contract once deployed:

    import {Ens} from "enscribe/Ens.sol";  
    import {Script, console} from "forge-std/Script.sol";
    import {Counter} from "../src/Counter.sol";

    contract CounterScript is Script {
    Counter public counter;

    function setUp() public {}

    function run() public {
    vm.startBroadcast();

    counter = new Counter(0);
    Ens.setName(block.chainid, address(counter), "v1.counter.abhi.eth");

    vm.stopBroadcast();
    }
    }
  7. Run the script to deploy the contract on Sepolia and set the name at deployment!

    forge script script/Counter.s.sol:CounterScript --chain-id 11155111 --rpc-url $SEPOLIA_RPC_URL --broadcast --private-key $PRIVATE_KEY

You can now view the deployed contract in Enscribe app:

details

This simplification means that teams can use Enscribe to name their releases. For example, we not only named our contract but versioned it too with v1.counter.abhi.eth.

By making contract naming easier and part of the deployment workflow with Foundry, Enscribe encourages better UX and improves safety and usability across the Ethereum ecosystem.

In a world where users increasingly should see human-readable names instead of hex addresses in wallets and explorers, Enscribe helps ensure that smart contracts are just as legible as the accounts that interact with them.

Give it a try.

Happy naming! 🚀

Nouns DAO x Enscribe: Bringing Clear, Human-Readable Names to the Nouns Contract Universe

· 3 min read
Conor Svensson
Founder of Enscribe and Web3 Labs

Nouns x Enscribe logos

Nouns DAO has rolled out Enscribe-powered ENS names across its contract ecosystem. This change makes the core Nouns infrastructure easier to understand, integrate with, and safer to interact with.

As Nouns has grown, so has the number of contracts powering auctions, governance, treasury movements, builder deployments, experiments, and extensions. But with growth comes complexity, and raw hex addresses don’t communicate the intent or role of a contract to users.

Naming fixes that.

By giving each Nouns contract a clear, verifiable ENS-based identity, the DAO is making its onchain footprint more accessible to builders, researchers, delegates, and collectors who want clarity with their Nouns interactions.

Why Nouns Are Doing This

🔍 Transparency for DAO participants

Delegates and community members shouldn’t have to decode long addresses when evaluating proposals or upgrades. A named contract instantly provides clarification as to which part of the system is being touched.

🛠 Better developer ergonomics

Projects building on or around Nouns, from auction derivatives to governance tools, can integrate faster and with fewer mistakes when contract roles are obvious from their names.

📜 Improved historical traceability

Nouns is one of Ethereum’s most studied DAOs. Clear naming makes it easier to follow how the system has evolved, which contracts relate to which modules, and how upgrades have been deployed over time.

🔐 Reducing user risk

Contract spoofing and lookalike addresses have become more common across the ecosystem. Verified ENS names help users and tools avoid interacting with the wrong address.

How the Naming Works

Each contract receives a structured ENS name that reflects its purpose within the Nouns architecture. Examples include:

You can read more about them on the contract naming proposal that was executed.

These names form a browsable, consistent directory of the Nouns DAO contract suite. Wallets, explorers, and dashboards that support ENS resolution will automatically display these identities, making interactions clearer everywhere they appear.

What This Means for the Nouns Ecosystem

For delegates:

You can verify contract changes in governance proposals without needing to cross-reference addresses manually.

For builders:

Integrations become safer and less error-prone. Tooling becomes easier to maintain. Dependencies become clearer.

For researchers and historians:

Tracking protocol evolution becomes significantly more intuitive.

For the community:

Greater clarity around what powers Nouns under the hood, with greater confidence when interacting with the DAO’s infrastructure.

Name Your Contracts. Strengthen Your Protocol

Naming isn’t just for Nouns, it’s for anyone building on Ethereum.

Whether you’re a DAO, social app, game, or DeFi protocol with dozens of contracts, Enscribe helps you structure and create trust for your users.

Join the growing standard for Ethereum: Name your contracts with Enscribe.

Happy naming! 🚀

Announcing the Enscribe Contract Naming Audit Service

· 4 min read
Conor Svensson
Founder of Enscribe and Web3 Labs

Since we launched Enscribe, we've collaborated with a number of teams on their contract naming.

Whilst we try to ensure the naming process is as simple as possible in our app. Which is supported by extensive documentation and our guides, it can be non-trivial for teams to get the naming work done. Especially when they have an existing legacy of contracts to name, as well as changes to be made to their deployment habits.

As a result of this, we've decided to launch a new service — the Enscribe Contract Naming Audit, which maps every smart contract in your protocol, designs a complete ENS naming architecture, and delivers a launch-ready rollout plan.

Smart Contract Naming Can't be an Afterthought

As protocols grow, so does the complexity of the contract surface area: proxies, implementations, admin roles and ownership, cross-chain deployments, and internal tooling assumptions. Development teams should standardize naming, but the real-world gets in the way.

This results in:

  • Users don’t know which contracts belong to your protocol
  • Wallets and explorers can’t present meaningful context about it
  • Admin and ownership is unclear
  • Onboarding developers takes longer
  • Security reviewers must manually reconstruct your architecture

With ENS now widely integrated across wallets, explorers, and infra providers, naming is no longer “nice to have”, it’s part of your protocol’s identity and trust.

A Naming Audit For Your Contract Ecosystem

With our Contract Naming Audit service, we provide a structured service designed to help teams map, organize, and publicly name every contract in their protocol using ENS.

The audit includes:

1. Full Smart Contract & Wallet Inventory

We analyze your entire contracts to build a picture of:

  • All deployed contracts across chains
  • Ownership, admin and upgrade paths
  • Proxy types (EIP-1967, Beacon, Minimal, custom)
  • Role/access control patterns
  • Any orphaned or legacy deployments

This provides a holistic view of your onchain infrastructure.

2. ENS Naming Architecture & Implementation Guidance

Working with your team, we design a naming structure that reflects your protocol’s architecture:

  • Namespace definition (protocol.eth)
  • Subname hierarchy (vaults.protocol.eth, router.v4.protocol.eth, etc.)
  • Cross-chain naming strategy
  • Reverse resolution setup
  • Naming rollout planning
  • Technical assistance including code reviews, calldata generation/review for multisigs, updates to deployment pipelines

This ensures the foundations are right and the naming can scale with your project.

3. Go-to-market & Messaging

Naming only makes an impact if users, auditors, and partners see it.

Your contract audit includes:

  • Announcement blog post
  • Social communications
  • Recommended rollout timing
  • Additional messaging if required for partners, auditors, and ecosystem integrations

This gives you something to really shout about with your project that is beneficial for your users and Ethereum as a whole.

Why Teams Choose Enscribe

Enscribe powers ENS naming for protocols who want:

  • Clearer user experience across wallets and explorers
  • Better auditability through visible ownership and permissioning of onchain contracts
  • Reduced operational risk by surfacing deployment patterns
  • A unified naming framework across all deployments
  • A polished public launch with consistent messaging

We’ve seen repeatedly that naming when done right, becomes part of the developer experience, the security story, and the brand.

Get Your Protocol's Contracts Audited

If your team is preparing an audit, a major release, or simply wants to improve transparency, we’d love to help.

👉 Explore the Contract Naming Audit Service

🌐 https://enscribe.xyz/audit

Or reach out directly:

📬 hi@enscribe.xyz

Naming Contracts = Responsible Development

We believe smart contract naming is a key trust layer for web3.

And we’re excited to bring a structured, repeatable audit process to help teams adopt it cleanly, safely, and with confidence.

Happy naming! 🚀

Enscribe Now Available as a Safe App

· 4 min read
Nischal Sharma
Co-Founder and Lead Engineer at Enscribe

Enscribe is now available as a native Safe app. You can add Enscribe directly to your Safe environment and name contracts using your multisig wallet without leaving the Safe interface.

This update makes it easier for teams and DAOs to manage contract naming through their existing Safe workflows.

Enscribe Safe App

Why This Matters

If you manage contracts through a Safe multisig, you can now:

  • Name contracts directly from the Safe interface
  • Deploy new contracts with ENS names set using your Safe wallet
  • Queue naming transactions for other signers to review
  • Execute contract naming once your signing threshold is met
  • Keep all contract management in one place

Previously, connecting Enscribe to Safe required WalletConnect, which added friction to the process. With native Safe SDK integration, Enscribe works as a custom Safe app. Add it once, and it's available whenever you need it.

When you use Enscribe inside Safe, the contract naming process creates multiple transactions. These transactions are visible for you to review before signing, added to your Safe's transaction queue, shareable with other signers in your Safe, and executable by any signer once the signing threshold is reached. This workflow matches how Safe handles all multisig operations, making contract naming part of your standard governance process.

Adding Enscribe to Your Safe

Here's how to add Enscribe as a custom app to your Safe:

Use this link to add Enscribe directly to your Safe.

If the link doesn't work, follow the manual steps below.

Manual Installation

Step 1: Open Your Safe

Navigate to app.safe.global and select the Safe you want to use.

Step 2: Access the Apps Menu

Click on "Apps" in the left sidebar of your Safe interface.

Step 3: Add Custom App

  1. Click "Add custom app" in the top right
  2. Enter the Enscribe app URL: https://app.enscribe.xyz
  3. Confirm the app details
  4. Click "Add"

Enscribe will now appear in your Safe's app list.

Step 4: Open Enscribe

Click on Enscribe from your apps list to launch it within Safe.

Steps to manually add Enscribe to Safe

Naming a Contract from Safe

Once Enscribe is added to your Safe, you can name contracts using the same interface you're familiar with:

Step 1: Connect to Enscribe

Open the Enscribe app from your Safe. The app will detect your Safe wallet automatically and connect.

Step 2: Choose Your Chain

Select the network where your contract is deployed. Enscribe supports Ethereum Mainnet, Base, Linea, Optimism, Arbitrum, Scroll, and their testnets.

Step 3: Enter Contract Details

Provide the contract address and choose the ENS name you want to assign. Enscribe will guide you through the naming process.

Step 4: Review Transactions

Enscribe will show you the transactions needed to complete the naming process. This typically includes:

  • Creating ENS subname
  • Setting forward resolution for your contract
  • Setting the primary name

Step 5: Sign and Queue

When you sign these transactions in Safe:

  • They're added to your Safe's transaction queue
  • Other signers can review them
  • Transactions show up in the "Queue" tab of your Safe
  • You can share the queue with your team

Step 6: Execute After Threshold

Once enough signers approve the transactions (based on your Safe's signing threshold), any signer can execute them. The contract naming completes when all transactions are confirmed onchain.

Managing Multiple Contracts

If you're naming multiple contracts, you can queue all the transactions before executing any of them. This gives your team time to review everything together.

Each contract naming operation creates its own set of transactions in the queue. Signers can approve them individually or in batches, depending on your workflow.

Once all the transactions are approved or signed by the required number of signers, you can execute them all at once in a batched transaction, this will save you gas and time.

Feedback and Community

Enscribe makes smart contracts easier to identify by giving them human-readable names. With native Safe support, teams can now manage contract naming through their existing multisig workflows.

If you have feedback or feature requests for the Safe app experience, reach out through our socials - X, Discord and Telegram

Happy naming! 🚀

Naming your contracts with Basenames

· 3 min read
Abhijeet Bhagat
Enscribe Senior Engineer

Basenames are growing in popularity. Users set them for their EOA accounts so that they don’t have to use hex addresses when interacting on Base. Basenames use the solid ENS infra underneath and are fully ENSIP-19 compliant.

Since Enscribe is on a mission to eradicate hex addresses from Web3 UX and contract naming is overlooked, we wanted to enable users to set Basenames for deployed contracts as well. We are excited to announce support for naming your contracts using Basenames.

ENSIP-19 in short

ENSIP-19 is an ENS Standardization Proposal that standardizes reverse and primary name resolution for all coin types, and defines how this resolution process operates across the multichain Ethereum ecosystem.

This is done by deploying an L2-specific Reverse Registrar contract that takes care of setting reverse records.

For example, suppose we want to set a Basename v1app.alice.base.eth. Then, we first create a subname on L2 ENS Registry by calling setSubnodeRecord:

setSubnodeRecord(namehash(alice.base.eth), labelhas(v1app), deployerAddress, resolverAddress, 0)

Then we can set a forward resolution that maps the name to address with:

setAddr(namehash(v1app.alice.base.eth), BASE_COIN_TYPE, contractAddress)

Finally, set the reverse record with the L2 Reverse Registrar:

setNameForAddr(contractAddress, v1app.alice.base.eth)

How to set a Basename for your contract?

Navigate to the Name Contract page & connect your wallet if you haven’t already. From the chain dropdown, select Base/Base Sepolia i.e. the chain you want to set the Basename on.

Name Contract

Enter your contract’s address in the Contract Address field and it should automatically detect the chain like shown above.

Click on Create New Name button and enter the new contract name you want to register and the parent domain under which you want to register the subname:

details

Note: the parent domain entered should already be registered. If you want to register a new parent domain, then use https://www.base.org/names to do so.

Click on Name Your Contract button & you’ll see all the transactions executing successfully:

success

And just like that, we have successfully set a Basename for our deployed Ownable contract!

Here's a video tutorial on how to set a Basename for your contract:

What This Means for the Ecosystem

We’re excited to see how the community puts this to use. As always, feedback is welcome—we’re continuing to refine our ENSIP-19 aligned features and would love to hear what you think.

Head over to Enscribe and use a Basename to name your contract!

Happy naming! 🚀

EnscribeV2 is now live on Ethereum mainnet

· 4 min read
Nischal Sharma
Co-Founder and Lead Engineer at Enscribe

Enscribe V2 is now deployed on Ethereum mainnet. This upgrade brings batch operations, multi-chain support, and gas optimizations that make naming large numbers of contracts practical.

Contract Addresses

Ethereum Mainnet:

Testnet (Sepolia):

The Problem: Naming Contracts at Scale

Projects deploying multiple smart contracts face a challenge: each contract needs a separate ENS transaction to get a human-readable name. For a project with 10, 20, or 100+ contracts, this means:

  • Dozens of individual transactions
  • High cumulative gas costs
  • Hours of manual execution
  • Complex workflow coordination

A DAO deploying governance contracts, treasury modules, and token contracts previously needed separate ENS transactions for each — monitoring every transaction and managing a complex deployment process.

Enscribe V2 solves this.

What's New

Batch Contract Naming

Name multiple existing contracts in a single transaction.

// Name 10 contracts at once
address[] memory contracts = [
0x1234..., // governance.dao.eth
0x5678..., // treasury.dao.eth
0x9abc..., // token.dao.eth
0x0000.... // 0x0 address to reserve the subname
];

string[] memory labels = ["governance", "treasury", "token", "reserve"];

enscribeV2.setNameBatch(
contracts,
labels,
"dao.eth",
[60, 2147492101] // Ethereum and Base cointypes
);

Note: The reserve subname is created with the address(0) address. This is useful when you just want to create the subname but not set an address yet.

ENSIP-19 Multi-Chain Support

Set forward resolution for multiple chains at once:

uint256[] memory coinTypes = [
60, // Ethereum
2147492101, // Base
42161, // Arbitrum
10 // Optimism
];

enscribeV2.setName(
contractAddress,
"bridge",
"protocol.eth",
coinTypes
);

This matters for cross-chain protocols and multi-chain deployments where the same contract needs to resolve on different networks.

Simpler API

Before V2:

bytes32 parentNode = namehash("myproject.eth"); // Manual computation
enscribe.setName(addr, "app", "myproject.eth", parentNode);

With V2:

enscribe.setName(addr, "app", "myproject.eth"); // Computed automatically

The contract now computes parent nodes using ENS's NameCoder library.

Reserve Names Without Addresses

Create subnames without setting an address:

address[] memory contracts = [
0x1234..., // Active contract
address(0), // Reserve "staging", 0x0000000000000000000000000000000000000000 address
0x5678... // Active contract
];

enscribeV2.setNameBatch(
contracts,
["prod", "staging", "analytics"],
"myproject.eth"
);

As demontrated in Batch Contract Naming section also, using address(0) creates the subname but skips forward resolution — useful for just creating the subname.

EnscribeV2 Functions

Projects can now:

  • Name dozens of contracts in one transaction
  • Save gas through batch operations and new gas optimizations
  • Can name contracts on multiple chains at once
  • Fully ENSIP-19 compatible

Technical Improvements

V2 includes several optimizations:

  • ENS NameCoder Integration: Uses official ENS library gas savings per operation
  • OpenZeppelin Create2: Deterministic contract deployment with industry-standard implementation
  • Custom Errors and Events: ~50% gas savings on reverts compared to string messages
  • Internal Optimizations: Automatic subname existence checking and address validation

What's Next

Enscribe V2 contracts are live and ready to use via web3 libraries or transaction builders like Gnosis Safe.

Coming Soon:

  • UI updates for batch operations and multi-chain support on Enscribe app
  • EnscribeV2 integration to our Enscribe library
  • EnscribeV2 for Basenames

Building Contract Identity

Enscribe makes smart contracts easier to trust by giving them human-readable names. Earlier this year, we proposed an ENSIP for contract metadata standards. V2's batch capabilities and multi-chain support lay the groundwork for that vision — making it practical for projects to build complete, discoverable contract identities.

Whether you're deploying a DeFi protocol, launching a DAO, or building any multi-contract system, Enscribe V2 helps you establish clear contract identity from day one.

Questions? Join our Discord, Telegram or reach out on X.

Happy naming! 🚀

ENS Contract Naming Season

· 3 min read
Conor Svensson
Founder of Enscribe and Web3 Labs

The ENS DAO has officially passed a proposal launching ENS Contract Naming Season — a new community initiative to bring names, identity, and trust to smart contracts across Ethereum.

Contract naming season banner

What is Contract Naming Season?

Contract Naming Season is a collaborative effort between the ENS DAO, Enscribe and others to help projects name their smart contracts using ENS names, turning unreadable hexadecimal addresses into human-readable, trustworthy names.

To encourage adoption, the ENS DAO has created a 10,000 ENS reward pool, offering incentives to teams that name their contracts and help lead others to do the same.

Enscribe naming contract view

You can read the proposal on Tally for background.

Why it Matters

Every time users interact with a smart contract, they’re asked to trust a long, meaningless hex address.

Not only does this make Ethereum harder to use, it leaves users exposed to address spoofing and phishing attacks from scammers.

Web3 UX Needs to Change slide

Millions of dollars is lost every year to address spoofing and poisoning attacks on Ethereum.

Enscribe was created to address these issues. It’s a smart contract naming service built on ENS.

It allows developers and projects to easily name their smart contracts with ENS names. This creates human-readable, trustworthy identities for contracts, turning unreadable hexadecimal addresses into meaningful names.

Where it’s Happening

Enscribe is live on Ethereum and integrates directly with ENS and contract verification platforms like Etherscan, Blockscout and Sourcify.

We've integrated with projects like Safe, Ethereum Follow Protocol and Open Labels Initiative to make contract naming a new standard for increased safety for Ethereum’s users.

Try it now: app.enscribe.xyz

Enscribe contract view

How to Get Involved

  1. Join the conversation in the:

  2. Check out our Best Practice Guides for:

  3. Start naming your contracts:

When

Contract Naming Season runs November 2025 → April 2026.

Reward distribution details will be announced soon — stay tuned!

Voices From the Community

ENS has always been about empowering the Ethereum community to name and own their digital identities. Contract Naming Season continues that mission — helping developers, DAOs, and protocols give their smart contracts names users can trust.

nick.eth, Creator of ENS

All smart contracts should be named onchain, for security, readability, and transparency. Contract Naming Season with Enscribe is a great opportunity to finally get it done.

brantly.eth, Executive Director, Ethereum Identity Foundation, ENS DAO Delegate, ex-Director of Operations, ENS

Naming Season captures what makes ENS, DAOs and Ethereum special — community-led initiatives that drive our ecosystem forward! It’s actions like naming contracts that build the culture of safety and transparency we all depend on.

james.eth, Fire Eyes DAO, ENS DAO Delegate

Named contracts upgrade security and enhance UX. Promoting awareness of contract naming opportunities across protocols, DAOs, and apps through Contract Naming Season is a key step forward for the Ethereum community.

lightwalker.eth, NameHash Labs

Let’s Make Ethereum Safer

Contract naming is a simple step every team can take to strengthen Ethereum’s foundation of trust and transparency. Let’s eliminate hex contract addresses and make human-readable contracts the new default.

Join the movement: app.enscribe.xyz

Happy naming! 🚀

Viewing Calldata to Simplify DAO Smart Contract Naming

· 3 min read
Abhijeet Bhagat
Enscribe Senior Engineer

We created the Enscribe App to make it as simple as possible for teams to name their smart contracts. However, this approach is not always compatible with naming DAO contracts.

What we’ve noticed is that DAOs often use a high-level function wrapper that needs to call multiple transactions required to name a contract.

This requires multi-sig high level transaction calling a method such as execute() or executeTransactions() which wraps over executing multiple transactions, each represented by a calldata – an encoded form of a function call along with its arguments.

To make this kind of name setting easy, we’ve shipped a small feature in Enscribe that enables displaying call-data previews.

How to View Calldata?

In the Enscribe App, there is now a new collapsable Advanced Options section. Open it and you’ll see a calldata section that shows a list of the transactions Enscribe will execute for your naming flow — including items such as subname creation, forward resolution, and reverse resolution.

name-contract

To try this out yourself, when you paste a contract address, pick a parent (e.g. myapp.eth), and type a name, Enscribe now shows the exact encoded function calls of the transactions that will be sent on-chain as individual transactions.

Each entry shows the target, selector, and ABI-encoded calldata:

calldata

You can copy the individual calldata using the copy button displayed against it or you can also copy the entire calldata list in different forms by clicking on the Copy All button at the top of the list on the right side.

Realtime Updates

This isn’t a static blob. Change any of the inputs — address, label, or parent, and the calldata recomputes instantly. If you switch from router.myapp.eth to vault.myapp.eth, you’ll watch the encoded arguments update in place.

L2 Calldata

We also moved the Choose L2 Chains button into the Advanced Options section. L2 forward/reverse steps sometimes add extra calls (or different targets), and keeping them alongside the call-data preview makes it obvious what will happen. The calldata displayed also includes transactions that will execute on the L2 chain.

TLDR;

  • Enter your contract address.
  • Pick a parent (e.g., myapp.eth) and type a label (e.g., router).
  • Expand the Advanced Options section
  • Expand the Call data section
  • Copy the calldata

So head over to the Enscribe App, enter the details about the contract you want to name and inspect the calldata generated in the Advanced Options section.

Happy naming! 🚀

Name Your Contracts with the Enscribe Library

· 3 min read
Abhijeet Bhagat
Enscribe Senior Engineer

Last week, we announced the hardhat-enscribe plugin for smart contract developers to name their contracts. We showed how smart contract developers can name their contracts with hardhat:

  • Using a CLI command, powered by the hardhat-enscribe plugin, that can be executed after the deployment command
  • Using the enscribe library in the hardhat deployment script

Under the hood, the hardhat-enscribe plugin uses the same @enscribe/enscribe library. It is a small TypeScript library you can use in any app or tool.

In this post, we will take a look at how to use the library to name your smart contracts in your apps.

It is very simple to use. From its public API, a single abstraction function creates the subname, sets forward and reverse records, and returns useful metadata (tx hashes, detected contract type, explorer link).

Using the Library

Start by installing the library:

pnpm install @enscribe/enscribe  

Once installed, import the nameContract function:

import { nameContract } from "@enscribe/enscribe";

The nameContract function itself has a simple interface. It accepts the following parameters:

  • Contract name
  • Contract address
  • Wallet client (from viem or wagmi)
  • Name of the chain on which the contract address is
  • Optional flag for logging naming metrics

We now create a wallet client object with wagmi:

import useWalletClient from ‘wagmi’

const { data: walletClient } = useWalletClient()

Once we have the wallet client created, we are ready to name our contract with nameContract:

const res = await nameContract({
name: "vault.myapp.eth",
contractAddress: "0x…",
walletClient,
chainName: "sepolia",
enableMetrics: true
});

That’s it! With this single function, developers can easily set a name to their contracts without having to worry about sending individual transactions like creation of subname and setting resolutions.

However, the library is also flexible in leaking this abstraction (which isn’t a bad thing always 🙂) by exposing the following functions and use them however you want:

  • createSubname
  • setForwardResolution
  • setReverseResolution

We want to make it easier for developers to name their contracts during contract deployment time and this is where the library comes in – they can integrate it in their Hardhat scripts. But they can also name their contracts after the contract is deployed with the hardhat-enscribe plugin. You can head over to the library documentation to explore the API.

Get started

  • Hardhat plugin: install, configure, and run npm hardhat enscribe name ... to label new or existing deployments. (GitHub)
  • Core library: import @enscribe/enscribe and call nameContract() wherever you manage contracts (GitHub)
  • Docs & guides: quick starts, concepts, and best practices for contract naming and multi-chain resolution. (enscribe.xyz)

Happy naming! 🚀