-
Notifications
You must be signed in to change notification settings - Fork 458
/
Copy pathuseEns.ts
72 lines (62 loc) · 1.65 KB
/
useEns.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import { ethers } from 'ethers';
import { useEffect, useState } from 'react';
import { isValidEthAddress } from '~/systems/Core';
export type EnsData = {
name: string | null;
avatar: string | null;
loading: boolean;
error: Error | null;
};
export function useEns(address?: string) {
const [ensData, setEnsData] = useState<EnsData>({
name: null,
avatar: null,
loading: false,
error: null,
});
useEffect(() => {
async function resolveEns() {
if (!address || !isValidEthAddress(address)) {
setEnsData({
name: null,
avatar: null,
loading: false,
error: null,
});
return;
}
setEnsData((prev) => ({ ...prev, loading: true, error: null }));
try {
// Using Ethereum mainnet for ENS resolution
const provider = new ethers.providers.JsonRpcProvider(
'https://mainnet.infura.io/v3/84842078b09946638c03157f83405213'
);
// Get ENS name for the address (reverse lookup)
const name = await provider.lookupAddress(address);
// Get avatar if ENS name exists
let avatar = null;
if (name) {
const resolver = await provider.getResolver(name);
if (resolver) {
avatar = await resolver.getText('avatar');
}
}
setEnsData({
name,
avatar,
loading: false,
error: null,
});
} catch (error) {
setEnsData({
name: null,
avatar: null,
loading: false,
error: error as Error,
});
}
}
resolveEns();
}, [address]);
return ensData;
}