viem 0.0.1-alpha.3 → 0.0.1-alpha.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/chains/package.json +1 -1
- package/contract/package.json +4 -0
- package/dist/chain-00b37e4e.d.ts +543 -0
- package/dist/chain-38182d92.d.ts +5 -0
- package/dist/chains.d.ts +1305 -74
- package/dist/chains.js +125 -130
- package/dist/chains.js.map +1 -0
- package/dist/chains.mjs +129 -0
- package/dist/chains.mjs.map +1 -0
- package/dist/chunk-5STAX3WF.js +265 -0
- package/dist/chunk-5STAX3WF.js.map +1 -0
- package/dist/chunk-6ZFIUYGC.mjs +3436 -0
- package/dist/chunk-6ZFIUYGC.mjs.map +1 -0
- package/dist/chunk-APXHGB76.mjs +197 -0
- package/dist/chunk-APXHGB76.mjs.map +1 -0
- package/dist/chunk-C54QK7K3.mjs +210 -0
- package/dist/chunk-C54QK7K3.mjs.map +1 -0
- package/dist/{chunk-YZEQFYZ3.js → chunk-IBWRBL2I.mjs} +725 -556
- package/dist/chunk-IBWRBL2I.mjs.map +1 -0
- package/dist/chunk-J7QHQ26Y.js +3436 -0
- package/dist/chunk-J7QHQ26Y.js.map +1 -0
- package/dist/chunk-MYFKW55L.js +210 -0
- package/dist/chunk-MYFKW55L.js.map +1 -0
- package/dist/chunk-NCPBWOQA.js +1216 -0
- package/dist/chunk-NCPBWOQA.js.map +1 -0
- package/dist/chunk-QBB3DFIB.mjs +265 -0
- package/dist/chunk-QBB3DFIB.mjs.map +1 -0
- package/dist/chunk-UUULPQHV.js +197 -0
- package/dist/chunk-UUULPQHV.js.map +1 -0
- package/dist/contract.d.ts +11 -0
- package/dist/contract.js +57 -0
- package/dist/contract.js.map +1 -0
- package/dist/contract.mjs +57 -0
- package/dist/contract.mjs.map +1 -0
- package/dist/createClient-5258d590.d.ts +70 -0
- package/dist/createPublicClient-99be385b.d.ts +650 -0
- package/dist/{eip1193-8b4d90ce.d.ts → eip1193-fcdeee04.d.ts} +13 -10
- package/dist/ens.d.ts +22 -0
- package/dist/ens.js +22 -0
- package/dist/ens.js.map +1 -0
- package/dist/ens.mjs +22 -0
- package/dist/ens.mjs.map +1 -0
- package/dist/formatAbiItem-50cb39d8.d.ts +14 -0
- package/dist/getAbiItem-6d4f64d2.d.ts +97 -0
- package/dist/index.d.ts +251 -67
- package/dist/index.js +769 -344
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +769 -0
- package/dist/index.mjs.map +1 -0
- package/dist/namehash-88f4639d.d.ts +22 -0
- package/dist/parseGwei-8af7a0a6.d.ts +509 -0
- package/dist/public.d.ts +29 -0
- package/dist/public.js +60 -0
- package/dist/public.js.map +1 -0
- package/dist/public.mjs +60 -0
- package/dist/public.mjs.map +1 -0
- package/dist/test-79ec416c.d.ts +213 -0
- package/dist/test.d.ts +20 -0
- package/dist/test.js +62 -0
- package/dist/test.js.map +1 -0
- package/dist/test.mjs +62 -0
- package/dist/test.mjs.map +1 -0
- package/dist/utils/index.d.ts +52 -7
- package/dist/utils/index.js +187 -126
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/index.mjs +187 -0
- package/dist/utils/index.mjs.map +1 -0
- package/dist/wallet-cf5c8351.d.ts +115 -0
- package/dist/wallet.d.ts +7 -0
- package/dist/wallet.js +24 -0
- package/dist/wallet.js.map +1 -0
- package/dist/wallet.mjs +24 -0
- package/dist/wallet.mjs.map +1 -0
- package/dist/window.d.ts +5 -2
- package/dist/window.js +1 -0
- package/dist/window.js.map +1 -0
- package/dist/window.mjs +1 -0
- package/dist/window.mjs.map +1 -0
- package/ens/package.json +4 -0
- package/package.json +46 -73
- package/public/package.json +4 -0
- package/test/package.json +4 -0
- package/utils/package.json +1 -1
- package/wallet/package.json +4 -0
- package/window/package.json +1 -1
- package/actions/package.json +0 -4
- package/clients/package.json +0 -4
- package/dist/actions/index.d.ts +0 -7
- package/dist/actions/index.js +0 -124
- package/dist/chunk-SRDTRROA.js +0 -1214
- package/dist/chunk-TLEMV4T3.js +0 -258
- package/dist/chunk-WZITKXV3.js +0 -996
- package/dist/clients/index.d.ts +0 -7
- package/dist/clients/index.js +0 -23
- package/dist/createWalletClient-15ad1601.d.ts +0 -130
- package/dist/parseGwei-0f85e8ca.d.ts +0 -248
- package/dist/rpc-15b85963.d.ts +0 -292
- package/dist/rpc-26932bae.d.ts +0 -61
- package/dist/transactionRequest-f538ea86.d.ts +0 -44
- package/dist/watchAsset-0c9d01e2.d.ts +0 -522
- package/dist/webSocket-b55b0951.d.ts +0 -83
@@ -0,0 +1,210 @@
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
2
|
+
|
3
|
+
var _chunkNCPBWOQAjs = require('./chunk-NCPBWOQA.js');
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
|
16
|
+
var _chunkJ7QHQ26Yjs = require('./chunk-J7QHQ26Y.js');
|
17
|
+
|
18
|
+
// src/utils/ens/labelhash.ts
|
19
|
+
function labelhash(label) {
|
20
|
+
let result = new Uint8Array(32).fill(0);
|
21
|
+
if (!label)
|
22
|
+
return _chunkJ7QHQ26Yjs.bytesToHex.call(void 0, result);
|
23
|
+
return _chunkJ7QHQ26Yjs.keccak256.call(void 0, _chunkJ7QHQ26Yjs.stringToBytes.call(void 0, label));
|
24
|
+
}
|
25
|
+
|
26
|
+
// src/utils/ens/namehash.ts
|
27
|
+
function namehash(name) {
|
28
|
+
let result = new Uint8Array(32).fill(0);
|
29
|
+
if (!name)
|
30
|
+
return _chunkJ7QHQ26Yjs.bytesToHex.call(void 0, result);
|
31
|
+
const labels = name.split(".");
|
32
|
+
for (let i = labels.length - 1; i >= 0; i -= 1) {
|
33
|
+
const hashed = _chunkJ7QHQ26Yjs.keccak256.call(void 0, _chunkJ7QHQ26Yjs.stringToBytes.call(void 0, labels[i]), "bytes");
|
34
|
+
result = _chunkJ7QHQ26Yjs.keccak256.call(void 0, _chunkJ7QHQ26Yjs.concat.call(void 0, [result, hashed]), "bytes");
|
35
|
+
}
|
36
|
+
return _chunkJ7QHQ26Yjs.bytesToHex.call(void 0, result);
|
37
|
+
}
|
38
|
+
|
39
|
+
// src/utils/ens/packetToBytes.ts
|
40
|
+
function packetToBytes(packet) {
|
41
|
+
function length(value2) {
|
42
|
+
if (value2 === "." || value2 === "..")
|
43
|
+
return 1;
|
44
|
+
return _chunkJ7QHQ26Yjs.toBytes.call(void 0, value2.replace(/^\.|\.$/gm, "")).length + 2;
|
45
|
+
}
|
46
|
+
const bytes = new Uint8Array(length(packet));
|
47
|
+
const value = packet.replace(/^\.|\.$/gm, "");
|
48
|
+
if (!value.length)
|
49
|
+
return bytes;
|
50
|
+
let offset = 0;
|
51
|
+
const list = value.split(".");
|
52
|
+
for (let i = 0; i < list.length; i++) {
|
53
|
+
const encoded = _chunkJ7QHQ26Yjs.toBytes.call(void 0, list[i]);
|
54
|
+
bytes[offset] = encoded.length;
|
55
|
+
bytes.set(encoded, offset + 1);
|
56
|
+
offset += encoded.length + 1;
|
57
|
+
}
|
58
|
+
return bytes;
|
59
|
+
}
|
60
|
+
|
61
|
+
// src/actions/ens/getEnsAddress.ts
|
62
|
+
async function getEnsAddress(client, {
|
63
|
+
blockNumber,
|
64
|
+
blockTag,
|
65
|
+
name,
|
66
|
+
universalResolverAddress: universalResolverAddress_
|
67
|
+
}) {
|
68
|
+
let universalResolverAddress = universalResolverAddress_;
|
69
|
+
if (!universalResolverAddress) {
|
70
|
+
if (!client.chain)
|
71
|
+
throw new Error(
|
72
|
+
"client chain not configured. universalResolverAddress is required."
|
73
|
+
);
|
74
|
+
const contract = _optionalChain([client, 'access', _ => _.chain, 'optionalAccess', _2 => _2.contracts, 'optionalAccess', _3 => _3.ensUniversalResolver]);
|
75
|
+
if (!contract)
|
76
|
+
throw new (0, _chunkJ7QHQ26Yjs.ChainDoesNotSupportContract)({
|
77
|
+
chain: client.chain,
|
78
|
+
contract: { name: "ensUniversalResolver" }
|
79
|
+
});
|
80
|
+
if (blockNumber && contract.blockCreated && contract.blockCreated > blockNumber)
|
81
|
+
throw new (0, _chunkJ7QHQ26Yjs.ChainDoesNotSupportContract)({
|
82
|
+
blockNumber,
|
83
|
+
chain: client.chain,
|
84
|
+
contract: {
|
85
|
+
name: "ensUniversalResolver",
|
86
|
+
blockCreated: contract.blockCreated
|
87
|
+
}
|
88
|
+
});
|
89
|
+
universalResolverAddress = contract.address;
|
90
|
+
}
|
91
|
+
const res = await _chunkNCPBWOQAjs.readContract.call(void 0, client, {
|
92
|
+
address: universalResolverAddress,
|
93
|
+
abi: [
|
94
|
+
{
|
95
|
+
name: "resolve",
|
96
|
+
type: "function",
|
97
|
+
stateMutability: "view",
|
98
|
+
inputs: [
|
99
|
+
{ name: "name", type: "bytes" },
|
100
|
+
{ name: "data", type: "bytes" }
|
101
|
+
],
|
102
|
+
outputs: [
|
103
|
+
{ name: "", type: "bytes" },
|
104
|
+
{ name: "address", type: "address" }
|
105
|
+
]
|
106
|
+
}
|
107
|
+
],
|
108
|
+
functionName: "resolve",
|
109
|
+
args: [
|
110
|
+
_chunkJ7QHQ26Yjs.toHex.call(void 0, packetToBytes(name)),
|
111
|
+
_chunkJ7QHQ26Yjs.encodeFunctionData.call(void 0, {
|
112
|
+
abi: [
|
113
|
+
{
|
114
|
+
name: "addr",
|
115
|
+
type: "function",
|
116
|
+
stateMutability: "view",
|
117
|
+
inputs: [{ name: "name", type: "bytes32" }],
|
118
|
+
outputs: []
|
119
|
+
}
|
120
|
+
],
|
121
|
+
functionName: "addr",
|
122
|
+
args: [namehash(name)]
|
123
|
+
})
|
124
|
+
],
|
125
|
+
blockNumber,
|
126
|
+
blockTag
|
127
|
+
});
|
128
|
+
return _chunkJ7QHQ26Yjs.decodeFunctionResult.call(void 0, {
|
129
|
+
abi: [
|
130
|
+
{
|
131
|
+
name: "addr",
|
132
|
+
type: "function",
|
133
|
+
stateMutability: "view",
|
134
|
+
inputs: [],
|
135
|
+
outputs: [{ name: "name", type: "address" }]
|
136
|
+
}
|
137
|
+
],
|
138
|
+
functionName: "addr",
|
139
|
+
data: res[0]
|
140
|
+
});
|
141
|
+
}
|
142
|
+
|
143
|
+
// src/actions/ens/getEnsName.ts
|
144
|
+
async function getEnsName(client, {
|
145
|
+
address,
|
146
|
+
blockNumber,
|
147
|
+
blockTag,
|
148
|
+
universalResolverAddress: universalResolverAddress_
|
149
|
+
}) {
|
150
|
+
let universalResolverAddress = universalResolverAddress_;
|
151
|
+
if (!universalResolverAddress) {
|
152
|
+
if (!client.chain)
|
153
|
+
throw new Error(
|
154
|
+
"client chain not configured. universalResolverAddress is required."
|
155
|
+
);
|
156
|
+
const contract = _optionalChain([client, 'access', _4 => _4.chain, 'optionalAccess', _5 => _5.contracts, 'optionalAccess', _6 => _6.ensUniversalResolver]);
|
157
|
+
if (!contract)
|
158
|
+
throw new (0, _chunkJ7QHQ26Yjs.ChainDoesNotSupportContract)({
|
159
|
+
chain: client.chain,
|
160
|
+
contract: { name: "ensUniversalResolver" }
|
161
|
+
});
|
162
|
+
if (blockNumber && contract.blockCreated && contract.blockCreated > blockNumber)
|
163
|
+
throw new (0, _chunkJ7QHQ26Yjs.ChainDoesNotSupportContract)({
|
164
|
+
blockNumber,
|
165
|
+
chain: client.chain,
|
166
|
+
contract: {
|
167
|
+
name: "ensUniversalResolver",
|
168
|
+
blockCreated: contract.blockCreated
|
169
|
+
}
|
170
|
+
});
|
171
|
+
universalResolverAddress = contract.address;
|
172
|
+
}
|
173
|
+
const reverseNode = `${address.toLowerCase().substring(2)}.addr.reverse`;
|
174
|
+
try {
|
175
|
+
const res = await _chunkNCPBWOQAjs.readContract.call(void 0, client, {
|
176
|
+
address: universalResolverAddress,
|
177
|
+
abi: [
|
178
|
+
{
|
179
|
+
name: "reverse",
|
180
|
+
type: "function",
|
181
|
+
stateMutability: "view",
|
182
|
+
inputs: [{ type: "bytes", name: "reverseName" }],
|
183
|
+
outputs: [
|
184
|
+
{ type: "string", name: "resolvedName" },
|
185
|
+
{ type: "address", name: "resolvedAddress" },
|
186
|
+
{ type: "address", name: "reverseResolver" },
|
187
|
+
{ type: "address", name: "resolver" }
|
188
|
+
]
|
189
|
+
}
|
190
|
+
],
|
191
|
+
functionName: "reverse",
|
192
|
+
args: [_chunkJ7QHQ26Yjs.toHex.call(void 0, packetToBytes(reverseNode))],
|
193
|
+
blockNumber,
|
194
|
+
blockTag
|
195
|
+
});
|
196
|
+
return res[0];
|
197
|
+
} catch (error) {
|
198
|
+
if (error instanceof _chunkJ7QHQ26Yjs.ContractFunctionExecutionError && error.cause.reason === _chunkJ7QHQ26Yjs.panicReasons[50])
|
199
|
+
return null;
|
200
|
+
throw error;
|
201
|
+
}
|
202
|
+
}
|
203
|
+
|
204
|
+
|
205
|
+
|
206
|
+
|
207
|
+
|
208
|
+
|
209
|
+
exports.labelhash = labelhash; exports.namehash = namehash; exports.getEnsAddress = getEnsAddress; exports.getEnsName = getEnsName;
|
210
|
+
//# sourceMappingURL=chunk-MYFKW55L.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/utils/ens/labelhash.ts","../src/utils/ens/namehash.ts","../src/utils/ens/packetToBytes.ts","../src/actions/ens/getEnsAddress.ts","../src/actions/ens/getEnsName.ts"],"names":["value"],"mappings":"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","sourcesContent":["import { bytesToHex, stringToBytes } from '../encoding'\nimport { keccak256 } from '../hash'\n\n/**\n * @description Hashes ENS label\n *\n * @example\n * labelhash('eth')\n * '0x4f5b812789fc606be1b3b16908db13fc7a9adf7ca72641f84d75b47069d3d7f0'\n */\nexport function labelhash(label: string) {\n let result = new Uint8Array(32).fill(0)\n if (!label) return bytesToHex(result)\n return keccak256(stringToBytes(label))\n}\n","import { concat } from '../data'\nimport { bytesToHex, stringToBytes } from '../encoding'\nimport { keccak256 } from '../hash'\n\n/**\n * @description Hashes ENS name\n *\n * @example\n * namehash('wagmi-dev.eth')\n * '0xf246651c1b9a6b141d19c2604e9a58f567973833990f830d882534a747801359'\n *\n * @see https://eips.ethereum.org/EIPS/eip-137\n * @see https://docs.ens.domains/contract-api-reference/name-processing#hashing-names\n */\nexport function namehash(name: string) {\n let result = new Uint8Array(32).fill(0)\n if (!name) return bytesToHex(result)\n\n const labels = name.split('.')\n // Iterate in reverse order building up hash\n for (let i = labels.length - 1; i >= 0; i -= 1) {\n const hashed = keccak256(stringToBytes(labels[i]), 'bytes')\n result = keccak256(concat([result, hashed]), 'bytes')\n }\n\n return bytesToHex(result)\n}\n","// Adapted from https://github.com/mafintosh/dns-packet\nimport { ByteArray } from '../../types'\nimport { toBytes } from '../encoding'\n\n/*\n * @description Encodes a DNS packet into a ByteArray containing a UDP payload.\n */\nexport function packetToBytes(packet: string): ByteArray {\n function length(value: string) {\n if (value === '.' || value === '..') return 1\n return toBytes(value.replace(/^\\.|\\.$/gm, '')).length + 2\n }\n\n const bytes = new Uint8Array(length(packet))\n // strip leading and trailing `.`\n const value = packet.replace(/^\\.|\\.$/gm, '')\n if (!value.length) return bytes\n\n let offset = 0\n const list = value.split('.')\n for (let i = 0; i < list.length; i++) {\n const encoded = toBytes(list[i])\n bytes[offset] = encoded.length\n bytes.set(encoded, offset + 1)\n offset += encoded.length + 1\n }\n\n return bytes\n}\n","import { PublicClient } from '../../clients'\nimport { ChainDoesNotSupportContract } from '../../errors'\nimport type { Address, Prettify } from '../../types'\nimport { decodeFunctionResult, encodeFunctionData, toHex } from '../../utils'\nimport { namehash, packetToBytes } from '../../utils/ens'\nimport { readContract, ReadContractArgs } from '../public'\n\nexport type GetEnsAddressArgs = Prettify<\n Pick<ReadContractArgs, 'blockNumber' | 'blockTag'> & {\n /** ENS name to get address. */\n name: string\n /** Address of ENS Universal Resolver Contract */\n universalResolverAddress?: Address\n }\n>\n\nexport type GetEnsAddressResponse = Address\n\n/**\n * @description Gets address for ENS name.\n *\n * - Calls `resolve(bytes, bytes)` on ENS Universal Resolver Contract.\n *\n * @example\n * const ensAddress = await getEnsAddress(publicClient, {\n * name: 'wagmi-dev.eth',\n * })\n * // '0xd2135CfB216b74109775236E36d4b433F1DF507B'\n */\nexport async function getEnsAddress(\n client: PublicClient,\n {\n blockNumber,\n blockTag,\n name,\n universalResolverAddress: universalResolverAddress_,\n }: GetEnsAddressArgs,\n): Promise<GetEnsAddressResponse> {\n let universalResolverAddress = universalResolverAddress_\n if (!universalResolverAddress) {\n if (!client.chain)\n throw new Error(\n 'client chain not configured. universalResolverAddress is required.',\n )\n\n const contract = client.chain?.contracts?.ensUniversalResolver\n if (!contract)\n throw new ChainDoesNotSupportContract({\n chain: client.chain,\n contract: { name: 'ensUniversalResolver' },\n })\n\n if (\n blockNumber &&\n contract.blockCreated &&\n contract.blockCreated > blockNumber\n )\n throw new ChainDoesNotSupportContract({\n blockNumber,\n chain: client.chain,\n contract: {\n name: 'ensUniversalResolver',\n blockCreated: contract.blockCreated,\n },\n })\n\n universalResolverAddress = contract.address\n }\n\n const res = await readContract(client, {\n address: universalResolverAddress,\n abi: [\n {\n name: 'resolve',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes' },\n { name: 'data', type: 'bytes' },\n ],\n outputs: [\n { name: '', type: 'bytes' },\n { name: 'address', type: 'address' },\n ],\n },\n ],\n functionName: 'resolve',\n args: [\n toHex(packetToBytes(name)),\n encodeFunctionData({\n abi: [\n {\n name: 'addr',\n type: 'function',\n stateMutability: 'view',\n inputs: [{ name: 'name', type: 'bytes32' }],\n outputs: [],\n },\n ],\n functionName: 'addr',\n args: [namehash(name)],\n }),\n ],\n blockNumber,\n blockTag,\n })\n return decodeFunctionResult({\n abi: [\n {\n name: 'addr',\n type: 'function',\n stateMutability: 'view',\n inputs: [],\n outputs: [{ name: 'name', type: 'address' }],\n },\n ],\n functionName: 'addr',\n data: res[0],\n })\n}\n","import { PublicClient } from '../../clients'\nimport { panicReasons } from '../../constants'\nimport {\n ChainDoesNotSupportContract,\n ContractFunctionExecutionError,\n ContractFunctionRevertedError,\n} from '../../errors'\nimport type { Address, Prettify } from '../../types'\nimport { toHex } from '../../utils'\nimport { packetToBytes } from '../../utils/ens'\nimport { readContract, ReadContractArgs } from '../public'\n\nexport type GetEnsNameArgs = Prettify<\n Pick<ReadContractArgs, 'blockNumber' | 'blockTag'> & {\n /** Address to get ENS name for. */\n address: Address\n /** Address of ENS Universal Resolver Contract. */\n universalResolverAddress?: Address\n }\n>\n\nexport type GetEnsNameResponse = string | null\n\n/**\n * @description Gets primary name for specified address.\n *\n * - Calls `reverse(bytes)` on ENS Universal Resolver Contract.\n *\n * @example\n * const ensName = await getEnsName(publicClient, {\n * address: '0xd2135CfB216b74109775236E36d4b433F1DF507B',\n * })\n * // 'wagmi-dev.eth'\n */\nexport async function getEnsName(\n client: PublicClient,\n {\n address,\n blockNumber,\n blockTag,\n universalResolverAddress: universalResolverAddress_,\n }: GetEnsNameArgs,\n): Promise<GetEnsNameResponse> {\n let universalResolverAddress = universalResolverAddress_\n if (!universalResolverAddress) {\n if (!client.chain)\n throw new Error(\n 'client chain not configured. universalResolverAddress is required.',\n )\n\n const contract = client.chain?.contracts?.ensUniversalResolver\n if (!contract)\n throw new ChainDoesNotSupportContract({\n chain: client.chain,\n contract: { name: 'ensUniversalResolver' },\n })\n\n if (\n blockNumber &&\n contract.blockCreated &&\n contract.blockCreated > blockNumber\n )\n throw new ChainDoesNotSupportContract({\n blockNumber,\n chain: client.chain,\n contract: {\n name: 'ensUniversalResolver',\n blockCreated: contract.blockCreated,\n },\n })\n\n universalResolverAddress = contract.address\n }\n\n const reverseNode = `${address.toLowerCase().substring(2)}.addr.reverse`\n try {\n const res = await readContract(client, {\n address: universalResolverAddress,\n abi: [\n {\n name: 'reverse',\n type: 'function',\n stateMutability: 'view',\n inputs: [{ type: 'bytes', name: 'reverseName' }],\n outputs: [\n { type: 'string', name: 'resolvedName' },\n { type: 'address', name: 'resolvedAddress' },\n { type: 'address', name: 'reverseResolver' },\n { type: 'address', name: 'resolver' },\n ],\n },\n ],\n functionName: 'reverse',\n args: [toHex(packetToBytes(reverseNode))],\n blockNumber,\n blockTag,\n })\n return res[0]\n } catch (error) {\n if (\n error instanceof ContractFunctionExecutionError &&\n (error.cause as ContractFunctionRevertedError).reason === panicReasons[50]\n )\n // No primary name set for address.\n return null\n throw error\n }\n}\n"]}
|