block.timestamp.
Special Control Fuses
There are three fuses that have special control over the burning mechanism:PARENT_CANNOT_CONTROL, CANNOT_UNWRAP, and CANNOT_BURN_FUSES.
PARENT_CANNOT_CONTROL
PARENT_CANNOT_CONTROLcannot be burned unlessCANNOT_UNWRAPis burned on the parent name. BurningPARENT_CANNOT_CONTROLmoves the name to the Emancipated state.- Burning
PARENT_CANNOT_CONTROLprevents the owner of the parent name from burning any further fuses on the name. - Burning
PARENT_CANNOT_CONTROLensures the parent cannot callsetSubnodeOwner()orsetSubnodeRecord()on that specific subdomain. This means that a parent cannot change the owner or records of a subdomain usingsetSubnode*()and additionally a parent cannot burn fuses or extend withsetSubnode*()andsetChildFuses(), since the functions are now restricted. - Burning
PARENT_CANNOT_CONTROLallows the parent or name owner to burn owner-controlled fuses. UntilPARENT_CANNOT_CONTROLis burnt, no owner-controlled fuses can be set. This does not affect parent-controlled fuses. - A parent name’s owner can still extend the expiry of a name with
PARENT_CANNOT_CONTROLburned.
CANNOT_UNWRAP
CANNOT_UNWRAPcannot be burned unlessPARENT_CANNOT_CONTROLis also burned. BurningCANNOT_UNWRAPmoves the name to the Locked state.- Burning
CANNOT_UNWRAPensures the name cannot be unwrapped. - Other user-controlled fuses cannot be burned unless
CANNOT_UNWRAPis burned. - Other user-controlled fuses can only be burned if
CANNOT_UNWRAPis also burned. This also allows the owner of the name to burnPARENT_CANNOT_CONTROLand all parent-controlled fuses on subdomains.
CANNOT_BURN_FUSES
CANNOT_BURN_FUSEScan be burned to prevent any further changes to fuses. As with all user-controlled fuses, this cannot be burned unlessPARENT_CANNOT_CONTROLandCANNOT_UNWRAPare both burned.
Owner-Controlled Fuses
These fuses can be burned by the owner of a name or by the owner of the parent name (if the name is not emancipated). Fuse bits 1-16 (the first uint16 of the uint32) are owner-controlled fuses.CANNOT_UNWRAP = 1
If this fuse is burned, the name cannot be unwrapped, and calls tounwrap and unwrapETH2LD, as well as other effects that would unwrap a name such as setSubnodeOwner will fail.
CANNOT_BURN_FUSES = 2
If this fuse is burned, no further fuses can be burned. This has the effect of ‘locking open’ some set of permissions on the name. Calls tosetFuses, and other methods that modify the set of fuses, will fail. Other methods can still be called successfully so long as they do not specify new fuses to burn.
CANNOT_TRANSFER = 4
If this fuse is burned, the name cannot be transferred. Calls tosafeTransferFrom and safeBatchTransferFrom will fail.
CANNOT_SET_RESOLVER = 8
If this fuse is burned, the resolver cannot be changed. Calls tosetResolver, setRecord and setSubnodeRecord will fail.
CANNOT_SET_TTL = 16
If this fuse is burned, the TTL cannot be changed. Calls tosetTTL, setRecord, and setSubnodeRecord will fail.
CANNOT_CREATE_SUBDOMAIN = 32
If this fuse is burned, new subdomains cannot be created. Calls tosetSubnodeOwner and setSubnodeRecord will fail if they reference a name that does not already exist.
CANNOT_APPROVE = 64
If this fuse is burned,approve() cannot be called on this name anymore and so the current approved address cannot be changed until expiry.
Parent-Controlled Fuses
These fuses can only be burned by the owner of the parent name. Fuse bits 17-32 (the second half of the uint32) are parent-controlled fuses.PARENT_CANNOT_CONTROL = 65536
If this fuse is burned, existing subdomains cannot be replaced by the parent name and the parent can no longer burn other fuses on this child. Calls tosetSubnodeOwner and setSubnodeRecord will fail if they reference a name that already exists. Attempting to burn fuses in setChildFuses will also fail.
This fuse can only be burnt by the parent of a node.
IS_DOT_ETH = 131072
If this fuse is burned, it means that the name is a .eth name.CAN_EXTEND_EXPIRY = 262144
If this fuse is burned, a name will be able to extend its own expiry in the NameWrapper.Does not apply to .eth 2LDs, as the expiry will inherit from the registrar in that case, and this fuse will not be burned when wrapping/registering .eth 2LDs.
Custom Fuses
Anything that is not predefined as a fuse can be burnt as a custom fuse:- Fuse bits 1-16 (the first uint16 of the uint32) can be burnt by the owner of the name, or by the owner of the parent name at the same time as burning
PARENT_CANNOT_CONTROL. - Fuse bits 17-32 (the second half of the uint32) can only be burnt by the owner of the parent name.
Fuse Constants
Checking Fuses
Using allFusesBurned()
To check whether or not a fuse is burnt you can use this function that takes a fuse mask of all fuses you want to check.Using getData()
getData() gets the owner, fuses and also the expiry of the name. The fuses it returns will be a uint32 and you will have to decode this yourself. If you just need to check a fuse has been burned, you can call allFusesBurned as it will use less gas.