Skip to content

Instantly share code, notes, and snippets.

@dhadrien
Created September 23, 2021 07:16
Show Gist options
  • Save dhadrien/c688b9a54153583cbdd9f9731cd1e01d to your computer and use it in GitHub Desktop.
Save dhadrien/c688b9a54153583cbdd9f9731cd1e01d to your computer and use it in GitHub Desktop.
pragma solidity >=0.8.4;
import {INameWrapper, PublicResolver} from '@ensdomains/ens-contracts/contracts/resolvers/PublicResolver.sol';
import '@ensdomains/ens-contracts/contracts/registry/ENSRegistry.sol';
import '@ensdomains/ens-contracts/contracts/registry/FIFSRegistrar.sol';
import {NameResolver, ReverseRegistrar} from '@ensdomains/ens-contracts/contracts/registry/ReverseRegistrar.sol';
import { NameWrapper, IMetadataService, BaseRegistrar } from './NameWrapper.sol';
// Construct a set of test ENS contracts.
contract ENSDeployer {
bytes32 public constant TLD_LABEL = keccak256('eth');
bytes32 public constant RESOLVER_LABEL = keccak256('resolver');
bytes32 public constant REVERSE_REGISTRAR_LABEL = keccak256('reverse');
bytes32 public constant ADDR_LABEL = keccak256('addr');
ENSRegistry public ens;
FIFSRegistrar public fifsRegistrar;
ReverseRegistrar public reverseRegistrar;
PublicResolver public publicResolver;
NameWrapper public nameWrapper;
function namehash(bytes32 node, bytes32 label) public pure returns (bytes32) {
return keccak256(abi.encodePacked(node, label));
}
constructor() public {
ens = new ENSRegistry();
// Create a FIFS registrar for the TLD
fifsRegistrar = new FIFSRegistrar(ens, namehash(bytes32(0), TLD_LABEL));
ens.setSubnodeOwner(bytes32(0), TLD_LABEL, address(fifsRegistrar));
nameWrapper = new NameWrapper(ens, BaseRegistrar(address(fifsRegistrar)), IMetadataService(address(0)));
publicResolver = new PublicResolver(ens, INameWrapper(address(nameWrapper)));
// Set up the resolver
bytes32 resolverNode = namehash(bytes32(0), RESOLVER_LABEL);
ens.setSubnodeOwner(bytes32(0), RESOLVER_LABEL, address(this));
ens.setResolver(resolverNode, address(publicResolver));
publicResolver.setAddr(resolverNode, address(publicResolver));
// Construct a new reverse registrar and point it at the public resolver
reverseRegistrar = new ReverseRegistrar(
ens,
NameResolver(address(publicResolver))
);
// Set up the reverse registrar
ens.setSubnodeOwner(bytes32(0), REVERSE_REGISTRAR_LABEL, address(this));
ens.setSubnodeOwner(
namehash(bytes32(0), REVERSE_REGISTRAR_LABEL),
ADDR_LABEL,
address(reverseRegistrar)
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment