11/* eslint-disable import/no-extraneous-dependencies */
22import { Address , encodeFunctionData , namehash , parseAbi } from 'viem'
33
4- import { registryResolverSnippet } from '@ensdomains/ensjs/contracts'
5- import { setPrimaryName , setResolver } from '@ensdomains/ensjs/wallet'
6-
74import { Accounts , User } from './accounts'
85import {
96 deploymentAddresses ,
@@ -18,6 +15,17 @@ const defaultReverseRegistrarAbi = parseAbi([
1815 'function nameForAddr(address addr) external view returns (string)' ,
1916] )
2017
18+ // ABI for L1 ReverseRegistrar contract
19+ const reverseRegistrarAbi = parseAbi ( [ 'function setName(string name) external returns (bytes32)' ] )
20+
21+ // ABI for ENS Registry setResolver function
22+ const registrySetResolverAbi = parseAbi ( [
23+ 'function setResolver(bytes32 node, address resolver) external' ,
24+ ] )
25+
26+ // ABI for ENS Registry resolver function
27+ const registryResolverAbi = parseAbi ( [ 'function resolver(bytes32 node) external view returns (address)' ] )
28+
2129// ABI for resolver name() function
2230const resolverNameSnippet = parseAbi ( [
2331 'function name(bytes32 node) external view returns (string)' ,
@@ -72,24 +80,27 @@ export async function setPrimaryNameState(
7280 if ( state . l1 !== undefined ) {
7381 if ( state . l1 === '' ) {
7482 // To clear L1 primary name, set the resolver for the reverse node to zero address
75- const functionData = setResolver . makeFunctionData ( walletClient , {
76- name : getReverseNode ( address ) ,
77- contract : 'registry' ,
78- resolverAddress : '0x0000000000000000000000000000000000000000' ,
79- } )
83+ const reverseNodeHash = namehash ( getReverseNode ( address ) )
8084 const tx = await walletClient . sendTransaction ( {
8185 account,
82- ...functionData ,
86+ to : deploymentAddresses . ENSRegistry as Address ,
87+ data : encodeFunctionData ( {
88+ abi : registrySetResolverAbi ,
89+ functionName : 'setResolver' ,
90+ args : [ reverseNodeHash , '0x0000000000000000000000000000000000000000' ] ,
91+ } ) ,
8392 } )
8493 await waitForTransaction ( tx )
8594 } else {
86- // Set the primary name
87- const functionData = setPrimaryName . makeFunctionData ( walletClient , {
88- name : state . l1 ,
89- } )
95+ // Set the primary name using the L1 ReverseRegistrar
9096 const tx = await walletClient . sendTransaction ( {
9197 account,
92- ...functionData ,
98+ to : deploymentAddresses . ReverseRegistrar as Address ,
99+ data : encodeFunctionData ( {
100+ abi : reverseRegistrarAbi ,
101+ functionName : 'setName' ,
102+ args : [ state . l1 ] ,
103+ } ) ,
93104 } )
94105 await waitForTransaction ( tx )
95106 }
@@ -127,7 +138,7 @@ export async function getPrimaryNameState(
127138 // First, get the resolver for the reverse node from the ENS Registry
128139 const resolverAddress = await publicClient . readContract ( {
129140 address : deploymentAddresses . ENSRegistry as Address ,
130- abi : registryResolverSnippet ,
141+ abi : registryResolverAbi ,
131142 functionName : 'resolver' ,
132143 args : [ reverseNodeHash ] ,
133144 } )
0 commit comments