Name Wrapper Fuses
A "fuse" is a permission or perk that can be granted/revoked on a name. As the name implies, once the fuse is "burned", it cannot be unburned.
Fuses will only reset when the expiry is reached. In the ENS Manager UI, this is available in the "Permissions" section of the name.
By wrapped expiry, we mean that for .eth second-level names (like name.eth
), this is the end of the 90-day grace period, the time at which the .eth 2LD is truly released. For all other names (such as subnames), there is no grace period, so the expiry is just the expiration date for that specific subname.
For example, by default when you wrap a name, you can transfer that NFT around freely, just as you can with other NFTs. However, if the CANNOT_TRANSFER
fuse is burned, then the NFT becomes non-transferrable. In the ENS Manager UI, you would do this by revoking the "Can send this name" permission.
In order to burn fuses on a name, the parent name must be Locked (meaning, you cannot unwrap the name). The reason is, if the parent name was not locked, then the owner of the parent name could simply get around the constraints of the Name Wrapper by unwrapping the name, and replacing/revoking subnames against the core ENS Registry.
There are parent-controlled and owner-controlled fuses:
Only the owner of the parent name can burn one of these fuses on a name. These can generally be thought of as "perks" that can be granted to a name, though they can be used in other ways.
Fuse name | Description |
---|---|
PARENT_CANNOT_CONTROL | Allows a parent owner to Emancipate a child name. After this is burned, the parent will no longer be able to burn any further fuses, and will no longer be able to replace/delete the child name. This fuse must be burned in order for any owner-controlled fuses to be burned on the name. |
IS_DOT_ETH | This fuse cannot be burned by users of the Name Wrapper, it is only set internally when a .eth 2LD is wrapped. |
CAN_EXTEND_EXPIRY | The owner of the child name will be able to extend their own expiry. Normally, only the parent owner can extend the expiry of a child name. See the Expiry section for more information. |
Custom Fuses | There are 13 other parent-controlled fuses that are not reserved, and can be used in any custom way you want! |
Either the owner of the name or the owner of the parent name can burn one of these fuses. These can generally be thought of as "permissions" that can be revoked on a name, though they can be used in other ways.
Fuse name | Description |
---|---|
CANNOT_UNWRAP | The name will now be Locked, and can no longer be unwrapped. This fuse must be burned in order for any other owner-controlled fuses to be burned on the name. |
CANNOT_BURN_FUSES | No further fuses can be burned on the name. |
CANNOT_TRANSFER | The name (wrapped NFT) can no longer be transferred. |
CANNOT_SET_RESOLVER | The resolver contract for the name can no longer be updated. |
CANNOT_SET_TTL | The TTL for the name can no longer be updated. |
CANNOT_CREATE_SUBDOMAIN | New subdomains can no longer be created. |
CANNOT_APPROVE | The approved "subname renewal manager" for the name can no longer be updated. See the Approved Operators section for more information. |
Custom Fuses | There are 9 other owner-controlled fuses that are not reserved, and can be used in any custom way you want! |
This is also covered in the Wrapped States section, but here is a quick recap:
All .eth second-level names (like name.eth
) are automatically placed into the Emancipated state when wrapped.
Emancipated means that the parent no longer has control over the child name. It can no longer burn any fuses or replace the subname, up until the expiry.
A name is Emancipated when the parent burns the PARENT_CANNOT_CONTROL
(PCC) fuse. The parent must first be in the Locked state to be able to do this.
Locked means that the name cannot be unwrapped. This provides assurance to subnames that the parent owner cannot unwrap and then, for example, start replacing subnames directly against the registry.
An Emancipated name is Locked when the CANNOT_UNWRAP
(CU) fuse is burned.
Think of the special PCC / CU fuses recursively:
- To burn owner-controlled or subname fuses, CU must be burned.
- To burn CU, PCC must be burned.
- Only the parent can burn PCC on the child name, and only if CU is first burned on the parent.
- To burn CU on the parent, PCC must be burned on the parent.
- Only the grandparent can burn PCC on the parent name, and only if CU is first burned on the grandparent.
- And so on...
Follow that chain up until you hit a .eth second-level name like name.eth
, since .eth second-level names will have PCC automatically burned when wrapping. The parent eth
node is already in the Locked state.
A parent name can burn all the fuses it needs to on a child name in one transaction. This can be done when the subname is created, or on an existing subname that has not yet been Emancipated.
Currently, only .eth names support fuses, because only the eth
node is on-chain native and completely locked beyond anyone's control.
Technically speaking, the owner of a DNS TLD has the ability to burn fuses on that TLD in the Name Wrapper, and set it to the "Locked" state. And then from there, all subnames under that DNS TLD will be able to use fuses.
The DNS TLD owner would need to:
- Request the Controller of that TLD from the ENS DAO
- Wrap the TLD node in the Name Wrapper
- Burn the
PARENT_CANNOT_CONTROL
andCANNOT_UNWRAP
fuses on the wrapped TLD to lock it
However, this still does not have all the immutable guarantees that .eth names do. This is because for DNS names, the "source of truth" always lies not in the Ethereum network, but in the DNS network, and the DNS root zone governed by ICANN stakeholders.
So even if the DNS TLD owner "Locks" that TLD in the ENS Name Wrapper, if that TLD were to ever change ownership on the DNS side, then (per the ENS DAO Constitution) the new owner would be able to override control of that TLD on the ENS side, unwrap it, and replace/revoke all 2LDs. This is just something to keep in mind for wrapped DNS domains.
Even if wrapped DNS domains do not support fuses, you can still use them as ERC-1155 NFTs. They will still have their own NFT metadata and show up in your wallet, with whatever avatar you have set, etc. They just won't have all the extra functionality that comes with the fuse/permission system.