viem 0.0.1-alpha.35 → 0.0.1-alpha.36
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/README.md +132 -0
- package/dist/abi.d.ts +2 -2
- package/dist/abi.js +2 -2
- package/dist/abi.mjs +1 -1
- package/dist/{chain-7b7ac245.d.ts → chain-a34aa9a2.d.ts} +65 -63
- package/dist/{chain-145cfaf3.d.ts → chain-b1229232.d.ts} +1 -1
- package/dist/chains.d.ts +3 -3
- package/dist/chains.js +46 -46
- package/dist/chains.mjs +1 -1
- package/dist/{chunk-57YM6E7I.js → chunk-4AEFOF5R.js} +21 -23
- package/dist/chunk-4AEFOF5R.js.map +1 -0
- package/dist/{chunk-PBW4YL37.mjs → chunk-AXATFOBJ.mjs} +1835 -140
- package/dist/chunk-AXATFOBJ.mjs.map +1 -0
- package/dist/{chunk-5NDMORWZ.mjs → chunk-CUT73KXY.mjs} +3 -5
- package/dist/{chunk-5NDMORWZ.mjs.map → chunk-CUT73KXY.mjs.map} +1 -1
- package/dist/{chunk-HQCSH22G.js → chunk-KXGQFW2R.js} +1824 -129
- package/dist/chunk-KXGQFW2R.js.map +1 -0
- package/dist/contract.d.ts +7 -7
- package/dist/contract.js +2 -6
- package/dist/contract.mjs +11 -15
- package/dist/{createClient-7c715e2c.d.ts → createClient-8024655d.d.ts} +3 -11
- package/dist/{createPublicClient-4d24afb2.d.ts → createPublicClient-f283b09d.d.ts} +62 -59
- package/dist/{eip1193-d538ae6d.d.ts → eip1193-a4f254d2.d.ts} +2 -2
- package/dist/{encodeFunctionResult-f59f4cfe.d.ts → encodeFunctionResult-c3d6c7ea.d.ts} +1 -1
- package/dist/ens.d.ts +4 -4
- package/dist/ens.js +3 -4
- package/dist/ens.js.map +1 -1
- package/dist/ens.mjs +2 -3
- package/dist/ens.mjs.map +1 -1
- package/dist/{formatAbiItem-89d97367.d.ts → formatAbiItem-d79cb207.d.ts} +1 -1
- package/dist/{getAbiItem-c9cbc8b8.d.ts → getAbiItem-48e793da.d.ts} +1 -1
- package/dist/index.d.ts +27 -16
- package/dist/index.js +89 -93
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +78 -82
- package/dist/index.mjs.map +1 -1
- package/dist/{parseGwei-ad6d1914.d.ts → parseGwei-5dc2744d.d.ts} +9 -20
- package/dist/public.d.ts +6 -6
- package/dist/public.js +2 -3
- package/dist/public.mjs +1 -2
- package/dist/{test-8646fb50.d.ts → test-f8bc2fa7.d.ts} +3 -11
- package/dist/test.d.ts +5 -5
- package/dist/test.js +2 -3
- package/dist/test.mjs +1 -2
- package/dist/utils/index.d.ts +27 -16
- package/dist/utils/index.js +2 -4
- package/dist/utils/index.mjs +7 -9
- package/dist/wallet.d.ts +4 -4
- package/dist/wallet.js +2 -4
- package/dist/wallet.mjs +5 -7
- package/dist/window.d.ts +2 -2
- package/package.json +1 -1
- package/dist/chunk-3FT7UKPT.js +0 -1216
- package/dist/chunk-3FT7UKPT.js.map +0 -1
- package/dist/chunk-57YM6E7I.js.map +0 -1
- package/dist/chunk-A665BF7O.js +0 -205
- package/dist/chunk-A665BF7O.js.map +0 -1
- package/dist/chunk-HQCSH22G.js.map +0 -1
- package/dist/chunk-PBW4YL37.mjs.map +0 -1
- package/dist/chunk-PH5LCMME.mjs +0 -205
- package/dist/chunk-PH5LCMME.mjs.map +0 -1
- package/dist/chunk-TJK6AFBM.js +0 -265
- package/dist/chunk-TJK6AFBM.js.map +0 -1
- package/dist/chunk-WQDVW7EJ.mjs +0 -1216
- package/dist/chunk-WQDVW7EJ.mjs.map +0 -1
- package/dist/chunk-YEVW7GK5.mjs +0 -265
- package/dist/chunk-YEVW7GK5.mjs.map +0 -1
@@ -1,6 +1,5 @@
|
|
1
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
2
|
|
3
|
-
var _chunk3FT7UKPTjs = require('./chunk-3FT7UKPT.js');
|
4
3
|
|
5
4
|
|
6
5
|
|
@@ -12,28 +11,27 @@ var _chunk3FT7UKPTjs = require('./chunk-3FT7UKPT.js');
|
|
12
11
|
|
13
12
|
|
14
13
|
|
15
|
-
|
16
|
-
var _chunkHQCSH22Gjs = require('./chunk-HQCSH22G.js');
|
14
|
+
var _chunkKXGQFW2Rjs = require('./chunk-KXGQFW2R.js');
|
17
15
|
|
18
16
|
// src/utils/ens/labelhash.ts
|
19
17
|
function labelhash(label) {
|
20
18
|
let result = new Uint8Array(32).fill(0);
|
21
19
|
if (!label)
|
22
|
-
return
|
23
|
-
return
|
20
|
+
return _chunkKXGQFW2Rjs.bytesToHex.call(void 0, result);
|
21
|
+
return _chunkKXGQFW2Rjs.keccak256.call(void 0, _chunkKXGQFW2Rjs.stringToBytes.call(void 0, label));
|
24
22
|
}
|
25
23
|
|
26
24
|
// src/utils/ens/namehash.ts
|
27
25
|
function namehash(name) {
|
28
26
|
let result = new Uint8Array(32).fill(0);
|
29
27
|
if (!name)
|
30
|
-
return
|
28
|
+
return _chunkKXGQFW2Rjs.bytesToHex.call(void 0, result);
|
31
29
|
const labels = name.split(".");
|
32
30
|
for (let i = labels.length - 1; i >= 0; i -= 1) {
|
33
|
-
const hashed =
|
34
|
-
result =
|
31
|
+
const hashed = _chunkKXGQFW2Rjs.keccak256.call(void 0, _chunkKXGQFW2Rjs.stringToBytes.call(void 0, labels[i]), "bytes");
|
32
|
+
result = _chunkKXGQFW2Rjs.keccak256.call(void 0, _chunkKXGQFW2Rjs.concat.call(void 0, [result, hashed]), "bytes");
|
35
33
|
}
|
36
|
-
return
|
34
|
+
return _chunkKXGQFW2Rjs.bytesToHex.call(void 0, result);
|
37
35
|
}
|
38
36
|
|
39
37
|
// src/utils/ens/packetToBytes.ts
|
@@ -41,7 +39,7 @@ function packetToBytes(packet) {
|
|
41
39
|
function length(value2) {
|
42
40
|
if (value2 === "." || value2 === "..")
|
43
41
|
return 1;
|
44
|
-
return
|
42
|
+
return _chunkKXGQFW2Rjs.toBytes.call(void 0, value2.replace(/^\.|\.$/gm, "")).length + 2;
|
45
43
|
}
|
46
44
|
const bytes = new Uint8Array(length(packet));
|
47
45
|
const value = packet.replace(/^\.|\.$/gm, "");
|
@@ -50,7 +48,7 @@ function packetToBytes(packet) {
|
|
50
48
|
let offset = 0;
|
51
49
|
const list = value.split(".");
|
52
50
|
for (let i = 0; i < list.length; i++) {
|
53
|
-
const encoded =
|
51
|
+
const encoded = _chunkKXGQFW2Rjs.toBytes.call(void 0, list[i]);
|
54
52
|
bytes[offset] = encoded.length;
|
55
53
|
bytes.set(encoded, offset + 1);
|
56
54
|
offset += encoded.length + 1;
|
@@ -73,12 +71,12 @@ async function getEnsAddress(client, {
|
|
73
71
|
);
|
74
72
|
const contract = _optionalChain([client, 'access', _ => _.chain, 'optionalAccess', _2 => _2.contracts, 'optionalAccess', _3 => _3.ensUniversalResolver]);
|
75
73
|
if (!contract)
|
76
|
-
throw new (0,
|
74
|
+
throw new (0, _chunkKXGQFW2Rjs.ChainDoesNotSupportContract)({
|
77
75
|
chain: client.chain,
|
78
76
|
contract: { name: "ensUniversalResolver" }
|
79
77
|
});
|
80
78
|
if (blockNumber && contract.blockCreated && contract.blockCreated > blockNumber)
|
81
|
-
throw new (0,
|
79
|
+
throw new (0, _chunkKXGQFW2Rjs.ChainDoesNotSupportContract)({
|
82
80
|
blockNumber,
|
83
81
|
chain: client.chain,
|
84
82
|
contract: {
|
@@ -88,7 +86,7 @@ async function getEnsAddress(client, {
|
|
88
86
|
});
|
89
87
|
universalResolverAddress = contract.address;
|
90
88
|
}
|
91
|
-
const res = await
|
89
|
+
const res = await _chunkKXGQFW2Rjs.readContract.call(void 0, client, {
|
92
90
|
address: universalResolverAddress,
|
93
91
|
abi: [
|
94
92
|
{
|
@@ -107,8 +105,8 @@ async function getEnsAddress(client, {
|
|
107
105
|
],
|
108
106
|
functionName: "resolve",
|
109
107
|
args: [
|
110
|
-
|
111
|
-
|
108
|
+
_chunkKXGQFW2Rjs.toHex.call(void 0, packetToBytes(name)),
|
109
|
+
_chunkKXGQFW2Rjs.encodeFunctionData.call(void 0, {
|
112
110
|
abi: [
|
113
111
|
{
|
114
112
|
name: "addr",
|
@@ -125,7 +123,7 @@ async function getEnsAddress(client, {
|
|
125
123
|
blockNumber,
|
126
124
|
blockTag
|
127
125
|
});
|
128
|
-
return
|
126
|
+
return _chunkKXGQFW2Rjs.decodeFunctionResult.call(void 0, {
|
129
127
|
abi: [
|
130
128
|
{
|
131
129
|
name: "addr",
|
@@ -155,12 +153,12 @@ async function getEnsName(client, {
|
|
155
153
|
);
|
156
154
|
const contract = _optionalChain([client, 'access', _4 => _4.chain, 'optionalAccess', _5 => _5.contracts, 'optionalAccess', _6 => _6.ensUniversalResolver]);
|
157
155
|
if (!contract)
|
158
|
-
throw new (0,
|
156
|
+
throw new (0, _chunkKXGQFW2Rjs.ChainDoesNotSupportContract)({
|
159
157
|
chain: client.chain,
|
160
158
|
contract: { name: "ensUniversalResolver" }
|
161
159
|
});
|
162
160
|
if (blockNumber && contract.blockCreated && contract.blockCreated > blockNumber)
|
163
|
-
throw new (0,
|
161
|
+
throw new (0, _chunkKXGQFW2Rjs.ChainDoesNotSupportContract)({
|
164
162
|
blockNumber,
|
165
163
|
chain: client.chain,
|
166
164
|
contract: {
|
@@ -172,7 +170,7 @@ async function getEnsName(client, {
|
|
172
170
|
}
|
173
171
|
const reverseNode = `${address.toLowerCase().substring(2)}.addr.reverse`;
|
174
172
|
try {
|
175
|
-
const res = await
|
173
|
+
const res = await _chunkKXGQFW2Rjs.readContract.call(void 0, client, {
|
176
174
|
address: universalResolverAddress,
|
177
175
|
abi: [
|
178
176
|
{
|
@@ -189,13 +187,13 @@ async function getEnsName(client, {
|
|
189
187
|
}
|
190
188
|
],
|
191
189
|
functionName: "reverse",
|
192
|
-
args: [
|
190
|
+
args: [_chunkKXGQFW2Rjs.toHex.call(void 0, packetToBytes(reverseNode))],
|
193
191
|
blockNumber,
|
194
192
|
blockTag
|
195
193
|
});
|
196
194
|
return res[0];
|
197
195
|
} catch (error) {
|
198
|
-
if (error instanceof
|
196
|
+
if (error instanceof _chunkKXGQFW2Rjs.ContractFunctionExecutionError && error.cause.reason === _chunkKXGQFW2Rjs.panicReasons[50])
|
199
197
|
return null;
|
200
198
|
throw error;
|
201
199
|
}
|
@@ -207,4 +205,4 @@ async function getEnsName(client, {
|
|
207
205
|
|
208
206
|
|
209
207
|
exports.labelhash = labelhash; exports.namehash = namehash; exports.getEnsAddress = getEnsAddress; exports.getEnsName = getEnsName;
|
210
|
-
//# sourceMappingURL=chunk-
|
208
|
+
//# sourceMappingURL=chunk-4AEFOF5R.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"]}
|