const namehash = require("eth-ens-namehash");
async function registerAdditionalNames(hre) {
const { ethers } = hre;
const resolverAddress = process.env.PUBLIC_ENS_RESOLVER_ADDRESS;
if (!resolverAddress) {
console.error("PUBLIC_ENS_RESOLVER_ADDRESS not set");
process.exit(1);
}
const resolver = await ethers.getContractAt(
"PublicResolver",
resolverAddress,
);
const registryAddress = await resolver.ens();
const ensRegistry = await ethers.getContractAt(
"ENSRegistry",
registryAddress,
);
console.log("Using ENS Registry:", registryAddress);
console.log("Using Public Resolver:", resolverAddress);
const [deployer, creator, customer1, verifiedShaman, localProvider, backend] =
await ethers.getSigners();
const ensNames = [
{
name: "master.eth",
owner: "0x2789023F36933E208675889869c7d3914A422921",
signer: deployer,
},
{
name: "creator.eth",
owner: "0x96e37a0cD915c38dE8B5aAC0db61eB7eB839CeeB",
signer: creator,
},
{
name: "customer1.eth",
owner: "0xA84036A18ecd8f4F3D21ca7f85BEcC033571b15e",
signer: customer1,
},
{
name: "verifiedshaman.eth",
owner: "0x7617b92b06c4ce513c53Df1c818ed25f95475f69",
signer: verifiedShaman,
},
{
name: "localprovider.eth",
owner: "0x9772d9a6A104c162b97767e6a654Be54370A042F",
signer: localProvider,
},
{
name: "backend.eth",
owner: "0xEd7f6CA6e91AaA3Ff2C3918B5cAF02FF449Ab3A4",
signer: backend,
},
];
for (const { name, owner, signer } of ensNames) {
const label = name.split(".")[0];
const node = namehash.hash(name);
try {
const currentOwner = await ensRegistry.owner(node);
if (currentOwner === ethers.ZeroAddress) {
const tx = await ensRegistry.setSubnodeRecord(
namehash.hash("eth"),
ethers.keccak256(ethers.toUtf8Bytes(label)),
owner,
resolverAddress,
0,
);
await tx.wait();
await resolver.connect(signer).setAddr(node, owner);
console.log(`Registered ${name} -> ${owner}`);
} else {
console.log(`${name} already registered to ${currentOwner}`);
}
const addrHex = owner.slice(2).toLowerCase();
const addrHash = ethers.keccak256(ethers.toUtf8Bytes(addrHex));
const addrReverseNode =
"0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2";
const reverseNode = ethers.keccak256(
ethers.solidityPacked(
["bytes32", "bytes32"],
[addrReverseNode, addrHash],
),
);
const currentReverseName = await resolver.name(reverseNode);
if (currentReverseName) {
console.log(` Reverse record already set: ${currentReverseName}`);
continue;
}
const reverseRegistrarAddr = await ensRegistry.owner(addrReverseNode);
const reverseRegistrar = await ethers.getContractAt(
"ReverseRegistrar",
reverseRegistrarAddr,
);
await reverseRegistrar.connect(signer).setName(name);
await resolver.connect(signer).setName(reverseNode, name);
console.log(` Set reverse record: ${owner} -> ${name}`);
} catch (error) {
console.error(`Failed to process ${name}:`, error.message);
}
}
console.log("\nAll ENS names registered!");
}
registerAdditionalNames(hre)
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});