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.
Files changed (75) hide show
  1. package/accounts/package.json +4 -0
  2. package/dist/abi.d.ts +3 -3
  3. package/dist/abi.js +2 -2
  4. package/dist/abi.mjs +1 -1
  5. package/dist/accounts/index.d.ts +81 -0
  6. package/dist/accounts/index.js +142 -0
  7. package/dist/accounts/index.js.map +1 -0
  8. package/dist/accounts/index.mjs +142 -0
  9. package/dist/accounts/index.mjs.map +1 -0
  10. package/dist/{chain-1b53ef88.d.ts → chain-5507c6f0.d.ts} +212 -148
  11. package/dist/{chain-ec8c485d.d.ts → chain-fe47467d.d.ts} +1 -1
  12. package/dist/chains.d.ts +867 -99
  13. package/dist/chains.js +115 -63
  14. package/dist/chains.js.map +1 -1
  15. package/dist/chains.mjs +58 -6
  16. package/dist/chains.mjs.map +1 -1
  17. package/dist/chunk-EMXJKA5P.mjs +31 -0
  18. package/dist/chunk-EMXJKA5P.mjs.map +1 -0
  19. package/dist/{chunk-LGWBVIG5.mjs → chunk-KILBOPDD.mjs} +1887 -262
  20. package/dist/chunk-KILBOPDD.mjs.map +1 -0
  21. package/dist/chunk-KQOOAYBY.js +31 -0
  22. package/dist/chunk-KQOOAYBY.js.map +1 -0
  23. package/dist/{chunk-VLSWFKRM.js → chunk-PWUNCH5G.js} +1943 -318
  24. package/dist/chunk-PWUNCH5G.js.map +1 -0
  25. package/dist/contract.d.ts +9 -7
  26. package/dist/contract.js +2 -2
  27. package/dist/contract.mjs +1 -1
  28. package/dist/{createTransport-e3eba9f7.d.ts → createTransport-21a0d2b3.d.ts} +24 -10
  29. package/dist/{eip1193-4f4e240c.d.ts → eip1193-2f3a9cd2.d.ts} +1 -1
  30. package/dist/{encodeFunctionResult-1f324375.d.ts → encodeFunctionResult-c5185b98.d.ts} +15 -15
  31. package/dist/{encodePacked-d5d5264a.d.ts → encodePacked-98f67d09.d.ts} +1 -1
  32. package/dist/ens.d.ts +6 -4
  33. package/dist/ens.js +8 -3
  34. package/dist/ens.js.map +1 -1
  35. package/dist/ens.mjs +7 -2
  36. package/dist/ens.mjs.map +1 -1
  37. package/dist/ethers.d.ts +5 -6
  38. package/dist/ethers.js +7 -5
  39. package/dist/ethers.js.map +1 -1
  40. package/dist/ethers.mjs +7 -5
  41. package/dist/ethers.mjs.map +1 -1
  42. package/dist/{formatAbiItem-15e8817d.d.ts → formatAbiItem-56dff508.d.ts} +1 -1
  43. package/dist/{getAbiItem-3e809ff9.d.ts → getAbiItem-bfba73d1.d.ts} +3 -3
  44. package/dist/getEnsResolver-9e26c596.d.ts +876 -0
  45. package/dist/index.d.ts +132 -15
  46. package/dist/index.js +150 -103
  47. package/dist/index.js.map +1 -1
  48. package/dist/index.mjs +96 -49
  49. package/dist/index.mjs.map +1 -1
  50. package/dist/{parseGwei-361e8a12.d.ts → parseGwei-d2147f8b.d.ts} +95 -15
  51. package/dist/public.d.ts +6 -4
  52. package/dist/public.js +2 -2
  53. package/dist/public.mjs +1 -1
  54. package/dist/publicKeyToAddress-623eb398.d.ts +16 -0
  55. package/dist/test-b67569fe.d.ts +198 -0
  56. package/dist/test.d.ts +11 -11
  57. package/dist/test.js +2 -2
  58. package/dist/test.mjs +1 -1
  59. package/dist/typedData-46b4d81f.d.ts +93 -0
  60. package/dist/utils/index.d.ts +22 -30
  61. package/dist/utils/index.js +28 -2
  62. package/dist/utils/index.mjs +31 -5
  63. package/dist/wallet.d.ts +6 -4
  64. package/dist/wallet.js +2 -2
  65. package/dist/wallet.mjs +1 -1
  66. package/dist/window.d.ts +2 -2
  67. package/package.json +12 -3
  68. package/dist/chunk-3JK5RHC7.mjs +0 -186
  69. package/dist/chunk-3JK5RHC7.mjs.map +0 -1
  70. package/dist/chunk-LGWBVIG5.mjs.map +0 -1
  71. package/dist/chunk-M4VQVSC6.js +0 -186
  72. package/dist/chunk-M4VQVSC6.js.map +0 -1
  73. package/dist/chunk-VLSWFKRM.js.map +0 -1
  74. package/dist/createPublicClient-31d44569.d.ts +0 -841
  75. package/dist/test-67630299.d.ts +0 -205
@@ -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
- verifyMessage
108
- } from "../chunk-LGWBVIG5.mjs";
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
- verifyMessage
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 { bk as AddChainParameters, bl as FormattedTransactionRequest, bn as GetAddressesReturnType, bm as GetPermissionsReturnType, bo as RequestAddressesReturnType, bp as RequestPermissionsReturnType, S as SendTransactionParameters, bq as SendTransactionReturnType, br as SignMessageParameters, bs as SignMessageReturnType, bt as SignTypedDataParameters, bu as SignTypedDataReturnType, bv as SwitchChainParameters, bw as WatchAssetParameters, bx as WatchAssetReturnType, ba as addChain, bb as getAddresses, bc as getPermissions, bd as requestAddresses, be as requestPermissions, bf as sendTransaction, bg as signMessage, bh as signTypedData, bi as switchChain, bj as watchAsset } from './createPublicClient-31d44569.js';
2
- import './eip1193-4f4e240c.js';
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-1b53ef88.js';
5
+ import './chain-5507c6f0.js';
5
6
  import '@wagmi/chains';
6
- import './createTransport-e3eba9f7.js';
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 _chunkVLSWFKRMjs = require('./chunk-VLSWFKRM.js');
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 = _chunkVLSWFKRMjs.addChain; exports.getAddresses = _chunkVLSWFKRMjs.getAddresses; exports.getPermissions = _chunkVLSWFKRMjs.getPermissions; exports.requestAddresses = _chunkVLSWFKRMjs.requestAddresses; exports.requestPermissions = _chunkVLSWFKRMjs.requestPermissions; exports.sendTransaction = _chunkVLSWFKRMjs.sendTransaction; exports.signMessage = _chunkVLSWFKRMjs.signMessage; exports.signTypedData = _chunkVLSWFKRMjs.signTypedData; exports.switchChain = _chunkVLSWFKRMjs.switchChain; exports.watchAsset = _chunkVLSWFKRMjs.watchAsset;
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
@@ -9,7 +9,7 @@ import {
9
9
  signTypedData,
10
10
  switchChain,
11
11
  watchAsset
12
- } from "./chunk-LGWBVIG5.mjs";
12
+ } from "./chunk-KILBOPDD.mjs";
13
13
  export {
14
14
  addChain,
15
15
  getAddresses,
package/dist/window.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { R as Requests, E as Events } from './eip1193-4f4e240c.js';
1
+ import { R as Requests, E as Events } from './eip1193-2f3a9cd2.js';
2
2
  import 'abitype';
3
- import './chain-1b53ef88.js';
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
- "@noble/secp256k1": "^1.7.1",
7
- "@wagmi/chains": "~0.2.11",
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.20230330T201928",
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",
@@ -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"]}