viem 0.2.0-main.20230330T201928 → 0.2.0-main.20230403T061632
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/accounts/package.json +4 -0
- package/dist/abi.d.ts +3 -3
- package/dist/abi.js +2 -2
- package/dist/abi.mjs +1 -1
- package/dist/accounts/index.d.ts +81 -0
- package/dist/accounts/index.js +142 -0
- package/dist/accounts/index.js.map +1 -0
- package/dist/accounts/index.mjs +142 -0
- package/dist/accounts/index.mjs.map +1 -0
- package/dist/{chain-1b53ef88.d.ts → chain-5507c6f0.d.ts} +212 -148
- package/dist/{chain-ec8c485d.d.ts → chain-fe47467d.d.ts} +1 -1
- package/dist/chains.d.ts +867 -99
- package/dist/chains.js +115 -63
- package/dist/chains.js.map +1 -1
- package/dist/chains.mjs +58 -6
- package/dist/chains.mjs.map +1 -1
- package/dist/chunk-EMXJKA5P.mjs +31 -0
- package/dist/chunk-EMXJKA5P.mjs.map +1 -0
- package/dist/{chunk-LGWBVIG5.mjs → chunk-KILBOPDD.mjs} +1887 -262
- package/dist/chunk-KILBOPDD.mjs.map +1 -0
- package/dist/chunk-KQOOAYBY.js +31 -0
- package/dist/chunk-KQOOAYBY.js.map +1 -0
- package/dist/{chunk-VLSWFKRM.js → chunk-PWUNCH5G.js} +1943 -318
- package/dist/chunk-PWUNCH5G.js.map +1 -0
- package/dist/contract.d.ts +9 -7
- package/dist/contract.js +2 -2
- package/dist/contract.mjs +1 -1
- package/dist/{createTransport-e3eba9f7.d.ts → createTransport-21a0d2b3.d.ts} +24 -10
- package/dist/{eip1193-4f4e240c.d.ts → eip1193-2f3a9cd2.d.ts} +1 -1
- package/dist/{encodeFunctionResult-1f324375.d.ts → encodeFunctionResult-c5185b98.d.ts} +15 -15
- package/dist/{encodePacked-d5d5264a.d.ts → encodePacked-98f67d09.d.ts} +1 -1
- package/dist/ens.d.ts +6 -4
- package/dist/ens.js +8 -3
- package/dist/ens.js.map +1 -1
- package/dist/ens.mjs +7 -2
- package/dist/ens.mjs.map +1 -1
- package/dist/ethers.d.ts +5 -6
- package/dist/ethers.js +7 -5
- package/dist/ethers.js.map +1 -1
- package/dist/ethers.mjs +7 -5
- package/dist/ethers.mjs.map +1 -1
- package/dist/{formatAbiItem-15e8817d.d.ts → formatAbiItem-56dff508.d.ts} +1 -1
- package/dist/{getAbiItem-3e809ff9.d.ts → getAbiItem-bfba73d1.d.ts} +3 -3
- package/dist/getEnsResolver-9e26c596.d.ts +876 -0
- package/dist/index.d.ts +132 -15
- package/dist/index.js +150 -103
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +96 -49
- package/dist/index.mjs.map +1 -1
- package/dist/{parseGwei-361e8a12.d.ts → parseGwei-d2147f8b.d.ts} +95 -15
- package/dist/public.d.ts +6 -4
- package/dist/public.js +2 -2
- package/dist/public.mjs +1 -1
- package/dist/publicKeyToAddress-623eb398.d.ts +16 -0
- package/dist/test-b67569fe.d.ts +198 -0
- package/dist/test.d.ts +11 -11
- package/dist/test.js +2 -2
- package/dist/test.mjs +1 -1
- package/dist/typedData-46b4d81f.d.ts +93 -0
- package/dist/utils/index.d.ts +22 -30
- package/dist/utils/index.js +28 -2
- package/dist/utils/index.mjs +31 -5
- package/dist/wallet.d.ts +6 -4
- package/dist/wallet.js +2 -2
- package/dist/wallet.mjs +1 -1
- package/dist/window.d.ts +2 -2
- package/package.json +12 -3
- package/dist/chunk-3JK5RHC7.mjs +0 -186
- package/dist/chunk-3JK5RHC7.mjs.map +0 -1
- package/dist/chunk-LGWBVIG5.mjs.map +0 -1
- package/dist/chunk-M4VQVSC6.js +0 -186
- package/dist/chunk-M4VQVSC6.js.map +0 -1
- package/dist/chunk-VLSWFKRM.js.map +0 -1
- package/dist/createPublicClient-31d44569.d.ts +0 -841
- package/dist/test-67630299.d.ts +0 -205
package/dist/utils/index.mjs
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
import {
|
2
2
|
arrayRegex,
|
3
3
|
assertRequest,
|
4
|
+
assertTransactionEIP1559,
|
5
|
+
assertTransactionEIP2930,
|
6
|
+
assertTransactionLegacy,
|
4
7
|
boolToBytes,
|
5
8
|
boolToHex,
|
6
9
|
buildRequest,
|
@@ -50,7 +53,6 @@ import {
|
|
50
53
|
fromHex,
|
51
54
|
fromRlp,
|
52
55
|
getAbiItem,
|
53
|
-
getAccount,
|
54
56
|
getAddress,
|
55
57
|
getCallError,
|
56
58
|
getChainContractAddress,
|
@@ -62,9 +64,12 @@ import {
|
|
62
64
|
getEventSelector,
|
63
65
|
getFunctionSelector,
|
64
66
|
getNodeError,
|
67
|
+
getSerializedTransactionType,
|
65
68
|
getSocket,
|
66
69
|
getTransactionError,
|
70
|
+
getTransactionType,
|
67
71
|
hashMessage,
|
72
|
+
hashTypedData,
|
68
73
|
hexToBigInt,
|
69
74
|
hexToBool,
|
70
75
|
hexToBytes,
|
@@ -74,6 +79,7 @@ import {
|
|
74
79
|
isAddress,
|
75
80
|
isAddressEqual,
|
76
81
|
isBytes,
|
82
|
+
isHash,
|
77
83
|
isHex,
|
78
84
|
keccak256,
|
79
85
|
numberToBytes,
|
@@ -85,13 +91,18 @@ import {
|
|
85
91
|
parseAbiItem,
|
86
92
|
parseAbiParameter,
|
87
93
|
parseAbiParameters,
|
94
|
+
parseAccount,
|
88
95
|
parseEther,
|
89
96
|
parseGwei,
|
97
|
+
parseTransaction,
|
90
98
|
parseUnits,
|
91
99
|
prepareRequest,
|
100
|
+
publicKeyToAddress,
|
92
101
|
recoverAddress,
|
93
102
|
recoverMessageAddress,
|
103
|
+
recoverTypedDataAddress,
|
94
104
|
rpc,
|
105
|
+
serializeTransaction,
|
95
106
|
size,
|
96
107
|
slice,
|
97
108
|
sliceBytes,
|
@@ -104,11 +115,16 @@ import {
|
|
104
115
|
toRlp,
|
105
116
|
transactionType,
|
106
117
|
trim,
|
107
|
-
|
108
|
-
|
118
|
+
validateTypedData,
|
119
|
+
verifyMessage,
|
120
|
+
verifyTypedData
|
121
|
+
} from "../chunk-KILBOPDD.mjs";
|
109
122
|
export {
|
110
123
|
arrayRegex,
|
111
124
|
assertRequest,
|
125
|
+
assertTransactionEIP1559,
|
126
|
+
assertTransactionEIP2930,
|
127
|
+
assertTransactionLegacy,
|
112
128
|
boolToBytes,
|
113
129
|
boolToHex,
|
114
130
|
buildRequest,
|
@@ -158,7 +174,6 @@ export {
|
|
158
174
|
fromHex,
|
159
175
|
fromRlp,
|
160
176
|
getAbiItem,
|
161
|
-
getAccount,
|
162
177
|
getAddress,
|
163
178
|
getCallError,
|
164
179
|
getChainContractAddress,
|
@@ -170,9 +185,12 @@ export {
|
|
170
185
|
getEventSelector,
|
171
186
|
getFunctionSelector,
|
172
187
|
getNodeError,
|
188
|
+
getSerializedTransactionType,
|
173
189
|
getSocket,
|
174
190
|
getTransactionError,
|
191
|
+
getTransactionType,
|
175
192
|
hashMessage,
|
193
|
+
hashTypedData,
|
176
194
|
hexToBigInt,
|
177
195
|
hexToBool,
|
178
196
|
hexToBytes,
|
@@ -182,6 +200,7 @@ export {
|
|
182
200
|
isAddress,
|
183
201
|
isAddressEqual,
|
184
202
|
isBytes,
|
203
|
+
isHash,
|
185
204
|
isHex,
|
186
205
|
keccak256,
|
187
206
|
numberToBytes,
|
@@ -193,13 +212,18 @@ export {
|
|
193
212
|
parseAbiItem,
|
194
213
|
parseAbiParameter,
|
195
214
|
parseAbiParameters,
|
215
|
+
parseAccount,
|
196
216
|
parseEther,
|
197
217
|
parseGwei,
|
218
|
+
parseTransaction,
|
198
219
|
parseUnits,
|
199
220
|
prepareRequest,
|
221
|
+
publicKeyToAddress,
|
200
222
|
recoverAddress,
|
201
223
|
recoverMessageAddress,
|
224
|
+
recoverTypedDataAddress,
|
202
225
|
rpc,
|
226
|
+
serializeTransaction,
|
203
227
|
size,
|
204
228
|
slice,
|
205
229
|
sliceBytes,
|
@@ -212,6 +236,8 @@ export {
|
|
212
236
|
toRlp,
|
213
237
|
transactionType,
|
214
238
|
trim,
|
215
|
-
|
239
|
+
validateTypedData,
|
240
|
+
verifyMessage,
|
241
|
+
verifyTypedData
|
216
242
|
};
|
217
243
|
//# sourceMappingURL=index.mjs.map
|
package/dist/wallet.d.ts
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
export {
|
2
|
-
import './
|
1
|
+
export { A as AddChainParameters, bX as FormattedTransactionRequest, G as GetAddressesReturnType, _ as GetPermissionsReturnType, al as RequestAddressesReturnType, am as RequestPermissionsReturnType, ao as SendTransactionParameters, ap as SendTransactionReturnType, aq as SignMessageParameters, ar as SignMessageReturnType, as as SignTypedDataParameters, at as SignTypedDataReturnType, au as SwitchChainParameters, az as WatchAssetParameters, aA as WatchAssetReturnType, bN as addChain, bO as getAddresses, bP as getPermissions, bQ as requestAddresses, bR as requestPermissions, bS as sendTransaction, bT as signMessage, bU as signTypedData, bV as switchChain, bW as watchAsset } from './getEnsResolver-9e26c596.js';
|
2
|
+
import './createTransport-21a0d2b3.js';
|
3
|
+
import './eip1193-2f3a9cd2.js';
|
3
4
|
import 'abitype';
|
4
|
-
import './chain-
|
5
|
+
import './chain-5507c6f0.js';
|
5
6
|
import '@wagmi/chains';
|
6
|
-
import './
|
7
|
+
import './typedData-46b4d81f.js';
|
8
|
+
import '@scure/bip32';
|
package/dist/wallet.js
CHANGED
@@ -9,7 +9,7 @@
|
|
9
9
|
|
10
10
|
|
11
11
|
|
12
|
-
var
|
12
|
+
var _chunkPWUNCH5Gjs = require('./chunk-PWUNCH5G.js');
|
13
13
|
|
14
14
|
|
15
15
|
|
@@ -21,5 +21,5 @@ var _chunkVLSWFKRMjs = require('./chunk-VLSWFKRM.js');
|
|
21
21
|
|
22
22
|
|
23
23
|
|
24
|
-
exports.addChain =
|
24
|
+
exports.addChain = _chunkPWUNCH5Gjs.addChain; exports.getAddresses = _chunkPWUNCH5Gjs.getAddresses; exports.getPermissions = _chunkPWUNCH5Gjs.getPermissions; exports.requestAddresses = _chunkPWUNCH5Gjs.requestAddresses; exports.requestPermissions = _chunkPWUNCH5Gjs.requestPermissions; exports.sendTransaction = _chunkPWUNCH5Gjs.sendTransaction; exports.signMessage = _chunkPWUNCH5Gjs.signMessage; exports.signTypedData = _chunkPWUNCH5Gjs.signTypedData; exports.switchChain = _chunkPWUNCH5Gjs.switchChain; exports.watchAsset = _chunkPWUNCH5Gjs.watchAsset;
|
25
25
|
//# sourceMappingURL=wallet.js.map
|
package/dist/wallet.mjs
CHANGED
package/dist/window.d.ts
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
import { R as Requests, E as Events } from './eip1193-
|
1
|
+
import { R as Requests, E as Events } from './eip1193-2f3a9cd2.js';
|
2
2
|
import 'abitype';
|
3
|
-
import './chain-
|
3
|
+
import './chain-5507c6f0.js';
|
4
4
|
import '@wagmi/chains';
|
5
5
|
|
6
6
|
type WindowProvider = Requests & Events;
|
package/package.json
CHANGED
@@ -2,17 +2,21 @@
|
|
2
2
|
"name": "viem",
|
3
3
|
"description": "TypeScript Interface for Ethereum",
|
4
4
|
"dependencies": {
|
5
|
+
"@ensdomains/address-encoder": "^0.2.21",
|
6
|
+
"@noble/curves": "^0.9.0",
|
5
7
|
"@noble/hashes": "^1.1.2",
|
6
|
-
"@
|
7
|
-
"@
|
8
|
+
"@scure/bip32": "^1.2.0",
|
9
|
+
"@scure/bip39": "^1.1.1",
|
10
|
+
"@wagmi/chains": "~0.2.15",
|
8
11
|
"abitype": "~0.7.1",
|
9
12
|
"idna-uts46-hx": "^4.1.2",
|
10
13
|
"isomorphic-ws": "^5.0.0",
|
11
14
|
"ws": "^8.12.0"
|
12
15
|
},
|
13
|
-
"version": "0.2.0-main.
|
16
|
+
"version": "0.2.0-main.20230403T061632",
|
14
17
|
"files": [
|
15
18
|
"/abi",
|
19
|
+
"/accounts",
|
16
20
|
"/dist",
|
17
21
|
"/chains",
|
18
22
|
"/contract",
|
@@ -35,6 +39,11 @@
|
|
35
39
|
"module": "./dist/abi.mjs",
|
36
40
|
"default": "./dist/abi.js"
|
37
41
|
},
|
42
|
+
"./accounts": {
|
43
|
+
"types": "./dist/accounts/index.d.ts",
|
44
|
+
"module": "./dist/accounts/index.mjs",
|
45
|
+
"default": "./dist/accounts/index.js"
|
46
|
+
},
|
38
47
|
"./chains": {
|
39
48
|
"types": "./dist/chains.d.ts",
|
40
49
|
"module": "./dist/chains.mjs",
|
package/dist/chunk-3JK5RHC7.mjs
DELETED
@@ -1,186 +0,0 @@
|
|
1
|
-
import {
|
2
|
-
ContractFunctionExecutionError,
|
3
|
-
bytesToHex,
|
4
|
-
concat,
|
5
|
-
decodeFunctionResult,
|
6
|
-
encodeFunctionData,
|
7
|
-
getChainContractAddress,
|
8
|
-
keccak256,
|
9
|
-
panicReasons,
|
10
|
-
readContract,
|
11
|
-
stringToBytes,
|
12
|
-
toBytes,
|
13
|
-
toHex
|
14
|
-
} from "./chunk-LGWBVIG5.mjs";
|
15
|
-
|
16
|
-
// src/utils/ens/labelhash.ts
|
17
|
-
function labelhash(label) {
|
18
|
-
let result = new Uint8Array(32).fill(0);
|
19
|
-
if (!label)
|
20
|
-
return bytesToHex(result);
|
21
|
-
return keccak256(stringToBytes(label));
|
22
|
-
}
|
23
|
-
|
24
|
-
// src/utils/ens/namehash.ts
|
25
|
-
function namehash(name) {
|
26
|
-
let result = new Uint8Array(32).fill(0);
|
27
|
-
if (!name)
|
28
|
-
return bytesToHex(result);
|
29
|
-
const labels = name.split(".");
|
30
|
-
for (let i = labels.length - 1; i >= 0; i -= 1) {
|
31
|
-
const hashed = keccak256(stringToBytes(labels[i]), "bytes");
|
32
|
-
result = keccak256(concat([result, hashed]), "bytes");
|
33
|
-
}
|
34
|
-
return bytesToHex(result);
|
35
|
-
}
|
36
|
-
|
37
|
-
// src/utils/ens/packetToBytes.ts
|
38
|
-
function packetToBytes(packet) {
|
39
|
-
function length(value2) {
|
40
|
-
if (value2 === "." || value2 === "..")
|
41
|
-
return 1;
|
42
|
-
return toBytes(value2.replace(/^\.|\.$/gm, "")).length + 2;
|
43
|
-
}
|
44
|
-
const bytes = new Uint8Array(length(packet));
|
45
|
-
const value = packet.replace(/^\.|\.$/gm, "");
|
46
|
-
if (!value.length)
|
47
|
-
return bytes;
|
48
|
-
let offset = 0;
|
49
|
-
const list = value.split(".");
|
50
|
-
for (let i = 0; i < list.length; i++) {
|
51
|
-
const encoded = toBytes(list[i]);
|
52
|
-
bytes[offset] = encoded.length;
|
53
|
-
bytes.set(encoded, offset + 1);
|
54
|
-
offset += encoded.length + 1;
|
55
|
-
}
|
56
|
-
return bytes;
|
57
|
-
}
|
58
|
-
|
59
|
-
// src/actions/ens/getEnsAddress.ts
|
60
|
-
async function getEnsAddress(client, {
|
61
|
-
blockNumber,
|
62
|
-
blockTag,
|
63
|
-
name,
|
64
|
-
universalResolverAddress: universalResolverAddress_
|
65
|
-
}) {
|
66
|
-
let universalResolverAddress = universalResolverAddress_;
|
67
|
-
if (!universalResolverAddress) {
|
68
|
-
if (!client.chain)
|
69
|
-
throw new Error(
|
70
|
-
"client chain not configured. universalResolverAddress is required."
|
71
|
-
);
|
72
|
-
universalResolverAddress = getChainContractAddress({
|
73
|
-
blockNumber,
|
74
|
-
chain: client.chain,
|
75
|
-
contract: "ensUniversalResolver"
|
76
|
-
});
|
77
|
-
}
|
78
|
-
const res = await readContract(client, {
|
79
|
-
address: universalResolverAddress,
|
80
|
-
abi: [
|
81
|
-
{
|
82
|
-
name: "resolve",
|
83
|
-
type: "function",
|
84
|
-
stateMutability: "view",
|
85
|
-
inputs: [
|
86
|
-
{ name: "name", type: "bytes" },
|
87
|
-
{ name: "data", type: "bytes" }
|
88
|
-
],
|
89
|
-
outputs: [
|
90
|
-
{ name: "", type: "bytes" },
|
91
|
-
{ name: "address", type: "address" }
|
92
|
-
]
|
93
|
-
}
|
94
|
-
],
|
95
|
-
functionName: "resolve",
|
96
|
-
args: [
|
97
|
-
toHex(packetToBytes(name)),
|
98
|
-
encodeFunctionData({
|
99
|
-
abi: [
|
100
|
-
{
|
101
|
-
name: "addr",
|
102
|
-
type: "function",
|
103
|
-
stateMutability: "view",
|
104
|
-
inputs: [{ name: "name", type: "bytes32" }],
|
105
|
-
outputs: []
|
106
|
-
}
|
107
|
-
],
|
108
|
-
functionName: "addr",
|
109
|
-
args: [namehash(name)]
|
110
|
-
})
|
111
|
-
],
|
112
|
-
blockNumber,
|
113
|
-
blockTag
|
114
|
-
});
|
115
|
-
return decodeFunctionResult({
|
116
|
-
abi: [
|
117
|
-
{
|
118
|
-
name: "addr",
|
119
|
-
type: "function",
|
120
|
-
stateMutability: "view",
|
121
|
-
inputs: [],
|
122
|
-
outputs: [{ name: "name", type: "address" }]
|
123
|
-
}
|
124
|
-
],
|
125
|
-
functionName: "addr",
|
126
|
-
data: res[0]
|
127
|
-
});
|
128
|
-
}
|
129
|
-
|
130
|
-
// src/actions/ens/getEnsName.ts
|
131
|
-
async function getEnsName(client, {
|
132
|
-
address,
|
133
|
-
blockNumber,
|
134
|
-
blockTag,
|
135
|
-
universalResolverAddress: universalResolverAddress_
|
136
|
-
}) {
|
137
|
-
let universalResolverAddress = universalResolverAddress_;
|
138
|
-
if (!universalResolverAddress) {
|
139
|
-
if (!client.chain)
|
140
|
-
throw new Error(
|
141
|
-
"client chain not configured. universalResolverAddress is required."
|
142
|
-
);
|
143
|
-
universalResolverAddress = getChainContractAddress({
|
144
|
-
blockNumber,
|
145
|
-
chain: client.chain,
|
146
|
-
contract: "ensUniversalResolver"
|
147
|
-
});
|
148
|
-
}
|
149
|
-
const reverseNode = `${address.toLowerCase().substring(2)}.addr.reverse`;
|
150
|
-
try {
|
151
|
-
const res = await readContract(client, {
|
152
|
-
address: universalResolverAddress,
|
153
|
-
abi: [
|
154
|
-
{
|
155
|
-
name: "reverse",
|
156
|
-
type: "function",
|
157
|
-
stateMutability: "view",
|
158
|
-
inputs: [{ type: "bytes", name: "reverseName" }],
|
159
|
-
outputs: [
|
160
|
-
{ type: "string", name: "resolvedName" },
|
161
|
-
{ type: "address", name: "resolvedAddress" },
|
162
|
-
{ type: "address", name: "reverseResolver" },
|
163
|
-
{ type: "address", name: "resolver" }
|
164
|
-
]
|
165
|
-
}
|
166
|
-
],
|
167
|
-
functionName: "reverse",
|
168
|
-
args: [toHex(packetToBytes(reverseNode))],
|
169
|
-
blockNumber,
|
170
|
-
blockTag
|
171
|
-
});
|
172
|
-
return res[0];
|
173
|
-
} catch (error) {
|
174
|
-
if (error instanceof ContractFunctionExecutionError && error.cause.reason === panicReasons[50])
|
175
|
-
return null;
|
176
|
-
throw error;
|
177
|
-
}
|
178
|
-
}
|
179
|
-
|
180
|
-
export {
|
181
|
-
labelhash,
|
182
|
-
namehash,
|
183
|
-
getEnsAddress,
|
184
|
-
getEnsName
|
185
|
-
};
|
186
|
-
//# sourceMappingURL=chunk-3JK5RHC7.mjs.map
|
@@ -1 +0,0 @@
|
|
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"],"sourcesContent":["import { bytesToHex, stringToBytes } from '../encoding'\nimport { keccak256 } from '../hash'\n\n/**\n * @description Hashes ENS label\n *\n * - Since ENS labels prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS labels](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `labelhash`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize.html) function for this.\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 * - Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `namehash`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize.html) function for this.\n *\n * @example\n * namehash('wagmi-dev.eth')\n * '0xf246651c1b9a6b141d19c2604e9a58f567973833990f830d882534a747801359'\n *\n * @link https://eips.ethereum.org/EIPS/eip-137\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 type { 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 type { PublicClient } from '../../clients'\nimport type { Address, Prettify } from '../../types'\nimport {\n decodeFunctionResult,\n encodeFunctionData,\n getChainContractAddress,\n toHex,\n} from '../../utils'\nimport { namehash, packetToBytes } from '../../utils/ens'\nimport { readContract, ReadContractParameters } from '../public'\n\nexport type GetEnsAddressParameters = Prettify<\n Pick<ReadContractParameters, '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 GetEnsAddressReturnType = Address\n\n/**\n * @description Gets address for ENS name.\n *\n * - Calls `resolve(bytes, bytes)` on ENS Universal Resolver Contract.\n * - Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `getEnsAddress`. You can use the built-in [`normalize`](https://viem.sh/docs/ens/utilities/normalize.html) function for this.\n *\n * @example\n * import { normalize } from 'viem/ens'\n *\n * const ensAddress = await getEnsAddress(publicClient, {\n * name: normalize('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 }: GetEnsAddressParameters,\n): Promise<GetEnsAddressReturnType> {\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 universalResolverAddress = getChainContractAddress({\n blockNumber,\n chain: client.chain,\n contract: 'ensUniversalResolver',\n })\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 type { PublicClient } from '../../clients'\nimport { panicReasons } from '../../constants'\nimport {\n ContractFunctionExecutionError,\n ContractFunctionRevertedError,\n} from '../../errors'\nimport type { Address, Prettify } from '../../types'\nimport { getChainContractAddress, toHex } from '../../utils'\nimport { packetToBytes } from '../../utils/ens'\nimport { readContract, ReadContractParameters } from '../public'\n\nexport type GetEnsNameParameters = Prettify<\n Pick<ReadContractParameters, '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 GetEnsNameReturnType = 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 }: GetEnsNameParameters,\n): Promise<GetEnsNameReturnType> {\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 universalResolverAddress = getChainContractAddress({\n blockNumber,\n chain: client.chain,\n contract: 'ensUniversalResolver',\n })\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"],"mappings":"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","names":["value"]}
|