viem 2.1.1 → 2.3.1
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/CHANGELOG.md +24 -0
- package/_cjs/actions/ens/getEnsAddress.js +12 -3
- package/_cjs/actions/ens/getEnsAddress.js.map +1 -1
- package/_cjs/actions/ens/getEnsAvatar.js +7 -2
- package/_cjs/actions/ens/getEnsAvatar.js.map +1 -1
- package/_cjs/actions/ens/getEnsName.js +12 -3
- package/_cjs/actions/ens/getEnsName.js.map +1 -1
- package/_cjs/actions/ens/getEnsText.js +12 -3
- package/_cjs/actions/ens/getEnsText.js.map +1 -1
- package/_cjs/actions/public/estimateFeesPerGas.js +1 -1
- package/_cjs/actions/public/estimateFeesPerGas.js.map +1 -1
- package/_cjs/actions/public/watchContractEvent.js.map +1 -1
- package/_cjs/actions/public/watchEvent.js.map +1 -1
- package/_cjs/actions/wallet/sendTransaction.js.map +1 -1
- package/_cjs/chains/definitions/baseSepolia.js +3 -3
- package/_cjs/chains/definitions/baseSepolia.js.map +1 -1
- package/_cjs/chains/definitions/gnosis.js +3 -2
- package/_cjs/chains/definitions/gnosis.js.map +1 -1
- package/_cjs/chains/definitions/goerli.js +2 -2
- package/_cjs/chains/definitions/goerli.js.map +1 -1
- package/_cjs/chains/definitions/mainnet.js +2 -2
- package/_cjs/chains/definitions/sepolia.js +2 -2
- package/_cjs/chains/definitions/sepolia.js.map +1 -1
- package/_cjs/clients/transports/fallback.js.map +1 -1
- package/_cjs/constants/abis.js +64 -0
- package/_cjs/constants/abis.js.map +1 -1
- package/_cjs/errors/contract.js.map +1 -1
- package/_cjs/errors/version.js +1 -1
- package/_cjs/utils/abi/parseEventLogs.js.map +1 -1
- package/_cjs/utils/ccip.js.map +1 -1
- package/_cjs/utils/encoding/toHex.js.map +1 -1
- package/_cjs/utils/ens/errors.js +6 -0
- package/_cjs/utils/ens/errors.js.map +1 -1
- package/_cjs/utils/rpc.js.map +1 -1
- package/_esm/actions/ens/getEnsAddress.js +12 -3
- package/_esm/actions/ens/getEnsAddress.js.map +1 -1
- package/_esm/actions/ens/getEnsAvatar.js +7 -2
- package/_esm/actions/ens/getEnsAvatar.js.map +1 -1
- package/_esm/actions/ens/getEnsName.js +12 -3
- package/_esm/actions/ens/getEnsName.js.map +1 -1
- package/_esm/actions/ens/getEnsText.js +12 -3
- package/_esm/actions/ens/getEnsText.js.map +1 -1
- package/_esm/actions/public/estimateFeesPerGas.js +1 -1
- package/_esm/actions/public/estimateFeesPerGas.js.map +1 -1
- package/_esm/actions/public/watchContractEvent.js.map +1 -1
- package/_esm/actions/public/watchEvent.js.map +1 -1
- package/_esm/actions/wallet/sendTransaction.js.map +1 -1
- package/_esm/chains/definitions/baseSepolia.js +3 -3
- package/_esm/chains/definitions/baseSepolia.js.map +1 -1
- package/_esm/chains/definitions/gnosis.js +3 -2
- package/_esm/chains/definitions/gnosis.js.map +1 -1
- package/_esm/chains/definitions/goerli.js +2 -2
- package/_esm/chains/definitions/goerli.js.map +1 -1
- package/_esm/chains/definitions/mainnet.js +2 -2
- package/_esm/chains/definitions/sepolia.js +2 -2
- package/_esm/chains/definitions/sepolia.js.map +1 -1
- package/_esm/clients/transports/fallback.js.map +1 -1
- package/_esm/constants/abis.js +64 -0
- package/_esm/constants/abis.js.map +1 -1
- package/_esm/errors/contract.js.map +1 -1
- package/_esm/errors/version.js +1 -1
- package/_esm/utils/abi/parseEventLogs.js.map +1 -1
- package/_esm/utils/ccip.js.map +1 -1
- package/_esm/utils/encoding/toHex.js.map +1 -1
- package/_esm/utils/ens/errors.js +6 -0
- package/_esm/utils/ens/errors.js.map +1 -1
- package/_esm/utils/rpc.js.map +1 -1
- package/_types/actions/ens/getEnsAddress.d.ts +5 -1
- package/_types/actions/ens/getEnsAddress.d.ts.map +1 -1
- package/_types/actions/ens/getEnsAvatar.d.ts +2 -2
- package/_types/actions/ens/getEnsAvatar.d.ts.map +1 -1
- package/_types/actions/ens/getEnsName.d.ts +5 -1
- package/_types/actions/ens/getEnsName.d.ts.map +1 -1
- package/_types/actions/ens/getEnsText.d.ts +5 -1
- package/_types/actions/ens/getEnsText.d.ts.map +1 -1
- package/_types/actions/public/estimateFeesPerGas.d.ts.map +1 -1
- package/_types/chains/definitions/baseSepolia.d.ts +3 -3
- package/_types/chains/definitions/gnosis.d.ts +3 -2
- package/_types/chains/definitions/gnosis.d.ts.map +1 -1
- package/_types/chains/definitions/goerli.d.ts +2 -2
- package/_types/chains/definitions/mainnet.d.ts +2 -2
- package/_types/chains/definitions/sepolia.d.ts +2 -2
- package/_types/constants/abis.d.ts +95 -0
- package/_types/constants/abis.d.ts.map +1 -1
- package/_types/errors/version.d.ts +1 -1
- package/_types/utils/ens/errors.d.ts.map +1 -1
- package/actions/ens/getEnsAddress.ts +18 -6
- package/actions/ens/getEnsAvatar.ts +10 -3
- package/actions/ens/getEnsName.ts +19 -6
- package/actions/ens/getEnsText.ts +18 -6
- package/actions/public/estimateFeesPerGas.ts +11 -10
- package/actions/public/watchContractEvent.ts +2 -2
- package/actions/public/watchEvent.ts +2 -2
- package/actions/wallet/sendTransaction.ts +1 -1
- package/chains/definitions/baseSepolia.ts +3 -3
- package/chains/definitions/gnosis.ts +3 -2
- package/chains/definitions/goerli.ts +2 -2
- package/chains/definitions/mainnet.ts +2 -2
- package/chains/definitions/sepolia.ts +2 -2
- package/clients/transports/fallback.ts +2 -2
- package/constants/abis.ts +64 -0
- package/errors/contract.ts +2 -2
- package/errors/version.ts +1 -1
- package/package.json +2 -2
- package/utils/abi/parseEventLogs.ts +2 -2
- package/utils/ccip.ts +1 -1
- package/utils/encoding/toHex.ts +1 -1
- package/utils/ens/errors.ts +3 -0
- package/utils/rpc.ts +1 -1
@@ -36,6 +36,49 @@ export declare const universalResolverResolveAbi: readonly [{
|
|
36
36
|
readonly inputs: readonly [];
|
37
37
|
readonly name: "ResolverWildcardNotSupported";
|
38
38
|
readonly type: "error";
|
39
|
+
}, {
|
40
|
+
readonly inputs: readonly [];
|
41
|
+
readonly name: "ResolverNotContract";
|
42
|
+
readonly type: "error";
|
43
|
+
}, {
|
44
|
+
readonly inputs: readonly [{
|
45
|
+
readonly name: "returnData";
|
46
|
+
readonly type: "bytes";
|
47
|
+
}];
|
48
|
+
readonly name: "ResolverError";
|
49
|
+
readonly type: "error";
|
50
|
+
}, {
|
51
|
+
readonly inputs: readonly [{
|
52
|
+
readonly components: readonly [{
|
53
|
+
readonly name: "status";
|
54
|
+
readonly type: "uint16";
|
55
|
+
}, {
|
56
|
+
readonly name: "message";
|
57
|
+
readonly type: "string";
|
58
|
+
}];
|
59
|
+
readonly name: "errors";
|
60
|
+
readonly type: "tuple[]";
|
61
|
+
}];
|
62
|
+
readonly name: "HttpError";
|
63
|
+
readonly type: "error";
|
64
|
+
}, {
|
65
|
+
readonly name: "resolve";
|
66
|
+
readonly type: "function";
|
67
|
+
readonly stateMutability: "view";
|
68
|
+
readonly inputs: readonly [{
|
69
|
+
readonly name: "name";
|
70
|
+
readonly type: "bytes";
|
71
|
+
}, {
|
72
|
+
readonly name: "data";
|
73
|
+
readonly type: "bytes";
|
74
|
+
}];
|
75
|
+
readonly outputs: readonly [{
|
76
|
+
readonly name: "";
|
77
|
+
readonly type: "bytes";
|
78
|
+
}, {
|
79
|
+
readonly name: "address";
|
80
|
+
readonly type: "address";
|
81
|
+
}];
|
39
82
|
}, {
|
40
83
|
readonly name: "resolve";
|
41
84
|
readonly type: "function";
|
@@ -46,6 +89,9 @@ export declare const universalResolverResolveAbi: readonly [{
|
|
46
89
|
}, {
|
47
90
|
readonly name: "data";
|
48
91
|
readonly type: "bytes";
|
92
|
+
}, {
|
93
|
+
readonly name: "gateways";
|
94
|
+
readonly type: "string[]";
|
49
95
|
}];
|
50
96
|
readonly outputs: readonly [{
|
51
97
|
readonly name: "";
|
@@ -63,6 +109,31 @@ export declare const universalResolverReverseAbi: readonly [{
|
|
63
109
|
readonly inputs: readonly [];
|
64
110
|
readonly name: "ResolverWildcardNotSupported";
|
65
111
|
readonly type: "error";
|
112
|
+
}, {
|
113
|
+
readonly inputs: readonly [];
|
114
|
+
readonly name: "ResolverNotContract";
|
115
|
+
readonly type: "error";
|
116
|
+
}, {
|
117
|
+
readonly inputs: readonly [{
|
118
|
+
readonly name: "returnData";
|
119
|
+
readonly type: "bytes";
|
120
|
+
}];
|
121
|
+
readonly name: "ResolverError";
|
122
|
+
readonly type: "error";
|
123
|
+
}, {
|
124
|
+
readonly inputs: readonly [{
|
125
|
+
readonly components: readonly [{
|
126
|
+
readonly name: "status";
|
127
|
+
readonly type: "uint16";
|
128
|
+
}, {
|
129
|
+
readonly name: "message";
|
130
|
+
readonly type: "string";
|
131
|
+
}];
|
132
|
+
readonly name: "errors";
|
133
|
+
readonly type: "tuple[]";
|
134
|
+
}];
|
135
|
+
readonly name: "HttpError";
|
136
|
+
readonly type: "error";
|
66
137
|
}, {
|
67
138
|
readonly name: "reverse";
|
68
139
|
readonly type: "function";
|
@@ -84,6 +155,30 @@ export declare const universalResolverReverseAbi: readonly [{
|
|
84
155
|
readonly type: "address";
|
85
156
|
readonly name: "resolver";
|
86
157
|
}];
|
158
|
+
}, {
|
159
|
+
readonly name: "reverse";
|
160
|
+
readonly type: "function";
|
161
|
+
readonly stateMutability: "view";
|
162
|
+
readonly inputs: readonly [{
|
163
|
+
readonly type: "bytes";
|
164
|
+
readonly name: "reverseName";
|
165
|
+
}, {
|
166
|
+
readonly type: "string[]";
|
167
|
+
readonly name: "gateways";
|
168
|
+
}];
|
169
|
+
readonly outputs: readonly [{
|
170
|
+
readonly type: "string";
|
171
|
+
readonly name: "resolvedName";
|
172
|
+
}, {
|
173
|
+
readonly type: "address";
|
174
|
+
readonly name: "resolvedAddress";
|
175
|
+
}, {
|
176
|
+
readonly type: "address";
|
177
|
+
readonly name: "reverseResolver";
|
178
|
+
}, {
|
179
|
+
readonly type: "address";
|
180
|
+
readonly name: "resolver";
|
181
|
+
}];
|
87
182
|
}];
|
88
183
|
export declare const textResolverAbi: readonly [{
|
89
184
|
readonly name: "text";
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"abis.d.ts","sourceRoot":"","sources":["../../constants/abis.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0ChB,CAAA;
|
1
|
+
{"version":3,"file":"abis.d.ts","sourceRoot":"","sources":["../../constants/abis.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0ChB,CAAA;AAkDV,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6B9B,CAAA;AAEV,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6B9B,CAAA;AAEV,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;EAWlB,CAAA;AAEV,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBrB,CAAA;AAIV,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;EAWlB,CAAA;AAKV,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;EAsBjC,CAAA;AAEV,+FAA+F;AAC/F,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2LX,CAAA;AAEV;;;GAGG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2LnB,CAAA;AAEV,8GAA8G;AAC9G,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2TZ,CAAA;AAEV,8GAA8G;AAC9G,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqfb,CAAA"}
|
@@ -1,2 +1,2 @@
|
|
1
|
-
export declare const version = "2.
|
1
|
+
export declare const version = "2.3.1";
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../utils/ens/errors.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAEtD,MAAM,MAAM,qCAAqC,GAAG,SAAS,CAAA;AAK7D,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,SAAS,GAAG,SAAS,GAC9B,OAAO,
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../utils/ens/errors.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAEtD,MAAM,MAAM,qCAAqC,GAAG,SAAS,CAAA;AAK7D,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,SAAS,GAAG,SAAS,GAC9B,OAAO,CAmBT"}
|
@@ -39,8 +39,12 @@ export type GetEnsAddressParameters = Prettify<
|
|
39
39
|
Pick<ReadContractParameters, 'blockNumber' | 'blockTag'> & {
|
40
40
|
/** ENSIP-9 compliant coinType used to resolve addresses for other chains */
|
41
41
|
coinType?: number
|
42
|
+
/** Universal Resolver gateway URLs to use for resolving CCIP-read requests. */
|
43
|
+
gatewayUrls?: string[]
|
42
44
|
/** Name to get the address for. */
|
43
45
|
name: string
|
46
|
+
/** Whether or not to throw errors propagated from the ENS Universal Resolver Contract. */
|
47
|
+
strict?: boolean
|
44
48
|
/** Address of ENS Universal Resolver Contract. */
|
45
49
|
universalResolverAddress?: Address
|
46
50
|
}
|
@@ -93,6 +97,8 @@ export async function getEnsAddress<TChain extends Chain | undefined>(
|
|
93
97
|
blockTag,
|
94
98
|
coinType,
|
95
99
|
name,
|
100
|
+
gatewayUrls,
|
101
|
+
strict,
|
96
102
|
universalResolverAddress: universalResolverAddress_,
|
97
103
|
}: GetEnsAddressParameters,
|
98
104
|
): Promise<GetEnsAddressReturnType> {
|
@@ -119,18 +125,23 @@ export async function getEnsAddress<TChain extends Chain | undefined>(
|
|
119
125
|
: { args: [namehash(name)] }),
|
120
126
|
})
|
121
127
|
|
122
|
-
const
|
123
|
-
client,
|
124
|
-
readContract,
|
125
|
-
'readContract',
|
126
|
-
)({
|
128
|
+
const readContractParameters = {
|
127
129
|
address: universalResolverAddress,
|
128
130
|
abi: universalResolverResolveAbi,
|
129
131
|
functionName: 'resolve',
|
130
132
|
args: [toHex(packetToBytes(name)), functionData],
|
131
133
|
blockNumber,
|
132
134
|
blockTag,
|
133
|
-
}
|
135
|
+
} as const
|
136
|
+
|
137
|
+
const readContractAction = getAction(client, readContract, 'readContract')
|
138
|
+
|
139
|
+
const res = gatewayUrls
|
140
|
+
? await readContractAction({
|
141
|
+
...readContractParameters,
|
142
|
+
args: [...readContractParameters.args, gatewayUrls],
|
143
|
+
})
|
144
|
+
: await readContractAction(readContractParameters)
|
134
145
|
|
135
146
|
if (res[0] === '0x') return null
|
136
147
|
|
@@ -145,6 +156,7 @@ export async function getEnsAddress<TChain extends Chain | undefined>(
|
|
145
156
|
if (trim(address) === '0x00') return null
|
146
157
|
return address
|
147
158
|
} catch (err) {
|
159
|
+
if (strict) throw err
|
148
160
|
if (isNullUniversalResolverError(err, 'resolve')) return null
|
149
161
|
throw err
|
150
162
|
}
|
@@ -19,7 +19,7 @@ import {
|
|
19
19
|
export type GetEnsAvatarParameters = Prettify<
|
20
20
|
Omit<GetEnsTextParameters, 'key'> & {
|
21
21
|
/** Gateway urls to resolve IPFS and/or Arweave assets. */
|
22
|
-
|
22
|
+
assetGatewayUrls?: AssetGatewayUrls
|
23
23
|
}
|
24
24
|
>
|
25
25
|
|
@@ -63,8 +63,10 @@ export async function getEnsAvatar<TChain extends Chain | undefined>(
|
|
63
63
|
{
|
64
64
|
blockNumber,
|
65
65
|
blockTag,
|
66
|
-
|
66
|
+
assetGatewayUrls,
|
67
67
|
name,
|
68
|
+
gatewayUrls,
|
69
|
+
strict,
|
68
70
|
universalResolverAddress,
|
69
71
|
}: GetEnsAvatarParameters,
|
70
72
|
): Promise<GetEnsAvatarReturnType> {
|
@@ -78,10 +80,15 @@ export async function getEnsAvatar<TChain extends Chain | undefined>(
|
|
78
80
|
key: 'avatar',
|
79
81
|
name,
|
80
82
|
universalResolverAddress,
|
83
|
+
gatewayUrls,
|
84
|
+
strict,
|
81
85
|
})
|
82
86
|
if (!record) return null
|
83
87
|
try {
|
84
|
-
return await parseAvatarRecord(client, {
|
88
|
+
return await parseAvatarRecord(client, {
|
89
|
+
record,
|
90
|
+
gatewayUrls: assetGatewayUrls,
|
91
|
+
})
|
85
92
|
} catch {
|
86
93
|
return null
|
87
94
|
}
|
@@ -27,6 +27,10 @@ export type GetEnsNameParameters = Prettify<
|
|
27
27
|
Pick<ReadContractParameters, 'blockNumber' | 'blockTag'> & {
|
28
28
|
/** Address to get ENS name for. */
|
29
29
|
address: Address
|
30
|
+
/** Universal Resolver gateway URLs to use for resolving CCIP-read requests. */
|
31
|
+
gatewayUrls?: string[]
|
32
|
+
/** Whether or not to throw errors propagated from the ENS Universal Resolver Contract. */
|
33
|
+
strict?: boolean
|
30
34
|
/** Address of ENS Universal Resolver Contract. */
|
31
35
|
universalResolverAddress?: Address
|
32
36
|
}
|
@@ -73,6 +77,8 @@ export async function getEnsName<TChain extends Chain | undefined>(
|
|
73
77
|
address,
|
74
78
|
blockNumber,
|
75
79
|
blockTag,
|
80
|
+
gatewayUrls,
|
81
|
+
strict,
|
76
82
|
universalResolverAddress: universalResolverAddress_,
|
77
83
|
}: GetEnsNameParameters,
|
78
84
|
): Promise<GetEnsNameReturnType> {
|
@@ -92,21 +98,28 @@ export async function getEnsName<TChain extends Chain | undefined>(
|
|
92
98
|
|
93
99
|
const reverseNode = `${address.toLowerCase().substring(2)}.addr.reverse`
|
94
100
|
try {
|
95
|
-
const
|
96
|
-
client,
|
97
|
-
readContract,
|
98
|
-
'readContract',
|
99
|
-
)({
|
101
|
+
const readContractParameters = {
|
100
102
|
address: universalResolverAddress,
|
101
103
|
abi: universalResolverReverseAbi,
|
102
104
|
functionName: 'reverse',
|
103
105
|
args: [toHex(packetToBytes(reverseNode))],
|
104
106
|
blockNumber,
|
105
107
|
blockTag,
|
106
|
-
}
|
108
|
+
} as const
|
109
|
+
|
110
|
+
const readContractAction = getAction(client, readContract, 'readContract')
|
111
|
+
|
112
|
+
const [name, resolvedAddress] = gatewayUrls
|
113
|
+
? await readContractAction({
|
114
|
+
...readContractParameters,
|
115
|
+
args: [...readContractParameters.args, gatewayUrls],
|
116
|
+
})
|
117
|
+
: await readContractAction(readContractParameters)
|
118
|
+
|
107
119
|
if (address.toLowerCase() !== resolvedAddress.toLowerCase()) return null
|
108
120
|
return name
|
109
121
|
} catch (err) {
|
122
|
+
if (strict) throw err
|
110
123
|
if (isNullUniversalResolverError(err, 'reverse')) return null
|
111
124
|
throw err
|
112
125
|
}
|
@@ -38,8 +38,12 @@ export type GetEnsTextParameters = Prettify<
|
|
38
38
|
Pick<ReadContractParameters, 'blockNumber' | 'blockTag'> & {
|
39
39
|
/** ENS name to get Text for. */
|
40
40
|
name: string
|
41
|
+
/** Universal Resolver gateway URLs to use for resolving CCIP-read requests. */
|
42
|
+
gatewayUrls?: string[]
|
41
43
|
/** Text record to retrieve. */
|
42
44
|
key: string
|
45
|
+
/** Whether or not to throw errors propagated from the ENS Universal Resolver Contract. */
|
46
|
+
strict?: boolean
|
43
47
|
/** Address of ENS Universal Resolver Contract. */
|
44
48
|
universalResolverAddress?: Address
|
45
49
|
}
|
@@ -92,6 +96,8 @@ export async function getEnsText<TChain extends Chain | undefined>(
|
|
92
96
|
blockTag,
|
93
97
|
name,
|
94
98
|
key,
|
99
|
+
gatewayUrls,
|
100
|
+
strict,
|
95
101
|
universalResolverAddress: universalResolverAddress_,
|
96
102
|
}: GetEnsTextParameters,
|
97
103
|
): Promise<GetEnsTextReturnType> {
|
@@ -110,11 +116,7 @@ export async function getEnsText<TChain extends Chain | undefined>(
|
|
110
116
|
}
|
111
117
|
|
112
118
|
try {
|
113
|
-
const
|
114
|
-
client,
|
115
|
-
readContract,
|
116
|
-
'readContract',
|
117
|
-
)({
|
119
|
+
const readContractParameters = {
|
118
120
|
address: universalResolverAddress,
|
119
121
|
abi: universalResolverResolveAbi,
|
120
122
|
functionName: 'resolve',
|
@@ -128,7 +130,16 @@ export async function getEnsText<TChain extends Chain | undefined>(
|
|
128
130
|
],
|
129
131
|
blockNumber,
|
130
132
|
blockTag,
|
131
|
-
}
|
133
|
+
} as const
|
134
|
+
|
135
|
+
const readContractAction = getAction(client, readContract, 'readContract')
|
136
|
+
|
137
|
+
const res = gatewayUrls
|
138
|
+
? await readContractAction({
|
139
|
+
...readContractParameters,
|
140
|
+
args: [...readContractParameters.args, gatewayUrls],
|
141
|
+
})
|
142
|
+
: await readContractAction(readContractParameters)
|
132
143
|
|
133
144
|
if (res[0] === '0x') return null
|
134
145
|
|
@@ -140,6 +151,7 @@ export async function getEnsText<TChain extends Chain | undefined>(
|
|
140
151
|
|
141
152
|
return record === '' ? null : record
|
142
153
|
} catch (err) {
|
154
|
+
if (strict) throw err
|
143
155
|
if (isNullUniversalResolverError(err, 'resolve')) return null
|
144
156
|
throw err
|
145
157
|
}
|
@@ -143,16 +143,17 @@ export async function internal_estimateFeesPerGas<
|
|
143
143
|
if (typeof block.baseFeePerGas !== 'bigint')
|
144
144
|
throw new Eip1559FeesNotSupportedError()
|
145
145
|
|
146
|
-
const maxPriorityFeePerGas =
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
146
|
+
const maxPriorityFeePerGas =
|
147
|
+
typeof request?.maxPriorityFeePerGas === 'bigint'
|
148
|
+
? request.maxPriorityFeePerGas
|
149
|
+
: await internal_estimateMaxPriorityFeePerGas(
|
150
|
+
client as Client<Transport, Chain>,
|
151
|
+
{
|
152
|
+
block: block as Block,
|
153
|
+
chain,
|
154
|
+
request,
|
155
|
+
},
|
156
|
+
)
|
156
157
|
|
157
158
|
const baseFeePerGas = multiply(block.baseFeePerGas)
|
158
159
|
const maxFeePerGas =
|
@@ -292,8 +292,8 @@ export function watchContractEvent<
|
|
292
292
|
})
|
293
293
|
onLogs([formatted] as any)
|
294
294
|
} catch (err) {
|
295
|
-
let eventName
|
296
|
-
let isUnnamed
|
295
|
+
let eventName: string | undefined
|
296
|
+
let isUnnamed: boolean | undefined
|
297
297
|
if (
|
298
298
|
err instanceof DecodeLogDataMismatch ||
|
299
299
|
err instanceof DecodeLogTopicsMismatch
|
@@ -317,8 +317,8 @@ export function watchEvent<
|
|
317
317
|
const formatted = formatLog(log, { args, eventName })
|
318
318
|
onLogs([formatted] as any)
|
319
319
|
} catch (err) {
|
320
|
-
let eventName
|
321
|
-
let isUnnamed
|
320
|
+
let eventName: string | undefined
|
321
|
+
let isUnnamed: boolean | undefined
|
322
322
|
if (
|
323
323
|
err instanceof DecodeLogDataMismatch ||
|
324
324
|
err instanceof DecodeLogTopicsMismatch
|
@@ -150,7 +150,7 @@ export async function sendTransaction<
|
|
150
150
|
try {
|
151
151
|
assertRequest(args as AssertRequestParameters)
|
152
152
|
|
153
|
-
let chainId
|
153
|
+
let chainId: number | undefined
|
154
154
|
if (chain !== null) {
|
155
155
|
chainId = await getAction(client, getChainId, 'getChainId')({})
|
156
156
|
assertCurrentChain({
|
@@ -16,9 +16,9 @@ export const baseSepolia = /*#__PURE__*/ defineChain({
|
|
16
16
|
},
|
17
17
|
blockExplorers: {
|
18
18
|
default: {
|
19
|
-
name: '
|
20
|
-
url: 'https://
|
21
|
-
apiUrl: 'https://
|
19
|
+
name: 'Basescan',
|
20
|
+
url: 'https://sepolia.basescan.org',
|
21
|
+
apiUrl: 'https://api-sepolia.basescan.org/api',
|
22
22
|
},
|
23
23
|
},
|
24
24
|
contracts: {
|
@@ -16,8 +16,9 @@ export const gnosis = /*#__PURE__*/ defineChain({
|
|
16
16
|
},
|
17
17
|
blockExplorers: {
|
18
18
|
default: {
|
19
|
-
name: '
|
20
|
-
url: 'https://
|
19
|
+
name: 'Gnosisscan',
|
20
|
+
url: 'https://gnosisscan.io',
|
21
|
+
apiUrl: 'https://api.gnosisscan.io/api',
|
21
22
|
},
|
22
23
|
},
|
23
24
|
contracts: {
|
@@ -21,8 +21,8 @@ export const goerli = /*#__PURE__*/ defineChain({
|
|
21
21
|
address: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',
|
22
22
|
},
|
23
23
|
ensUniversalResolver: {
|
24
|
-
address: '
|
25
|
-
blockCreated:
|
24
|
+
address: '0xfc4AC75C46C914aF5892d6d3eFFcebD7917293F1',
|
25
|
+
blockCreated: 10_339_206,
|
26
26
|
},
|
27
27
|
multicall3: {
|
28
28
|
address: '0xca11bde05977b3631167028862be2a173976ca11',
|
@@ -21,8 +21,8 @@ export const mainnet = /*#__PURE__*/ defineChain({
|
|
21
21
|
address: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',
|
22
22
|
},
|
23
23
|
ensUniversalResolver: {
|
24
|
-
address: '
|
25
|
-
blockCreated:
|
24
|
+
address: '0x8cab227b1162f03b8338331adaad7aadc83b895e',
|
25
|
+
blockCreated: 18_958_930,
|
26
26
|
},
|
27
27
|
multicall3: {
|
28
28
|
address: '0xca11bde05977b3631167028862be2a173976ca11',
|
@@ -23,8 +23,8 @@ export const sepolia = /*#__PURE__*/ defineChain({
|
|
23
23
|
},
|
24
24
|
ensRegistry: { address: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e' },
|
25
25
|
ensUniversalResolver: {
|
26
|
-
address: '
|
27
|
-
blockCreated:
|
26
|
+
address: '0xBaBC7678D7A63104f1658c11D6AE9A21cdA09725',
|
27
|
+
blockCreated: 5_043_334,
|
28
28
|
},
|
29
29
|
},
|
30
30
|
testnet: true,
|
@@ -220,8 +220,8 @@ export function rankTransports({
|
|
220
220
|
const transport_ = transport({ chain, retryCount: 0, timeout })
|
221
221
|
|
222
222
|
const start = Date.now()
|
223
|
-
let end
|
224
|
-
let success
|
223
|
+
let end: number
|
224
|
+
let success: number
|
225
225
|
try {
|
226
226
|
await transport_.request({ method: 'net_listening' })
|
227
227
|
success = 1
|
package/constants/abis.ts
CHANGED
@@ -54,6 +54,41 @@ const universalResolverErrors = [
|
|
54
54
|
name: 'ResolverWildcardNotSupported',
|
55
55
|
type: 'error',
|
56
56
|
},
|
57
|
+
{
|
58
|
+
inputs: [],
|
59
|
+
name: 'ResolverNotContract',
|
60
|
+
type: 'error',
|
61
|
+
},
|
62
|
+
{
|
63
|
+
inputs: [
|
64
|
+
{
|
65
|
+
name: 'returnData',
|
66
|
+
type: 'bytes',
|
67
|
+
},
|
68
|
+
],
|
69
|
+
name: 'ResolverError',
|
70
|
+
type: 'error',
|
71
|
+
},
|
72
|
+
{
|
73
|
+
inputs: [
|
74
|
+
{
|
75
|
+
components: [
|
76
|
+
{
|
77
|
+
name: 'status',
|
78
|
+
type: 'uint16',
|
79
|
+
},
|
80
|
+
{
|
81
|
+
name: 'message',
|
82
|
+
type: 'string',
|
83
|
+
},
|
84
|
+
],
|
85
|
+
name: 'errors',
|
86
|
+
type: 'tuple[]',
|
87
|
+
},
|
88
|
+
],
|
89
|
+
name: 'HttpError',
|
90
|
+
type: 'error',
|
91
|
+
},
|
57
92
|
] as const
|
58
93
|
|
59
94
|
export const universalResolverResolveAbi = [
|
@@ -71,6 +106,20 @@ export const universalResolverResolveAbi = [
|
|
71
106
|
{ name: 'address', type: 'address' },
|
72
107
|
],
|
73
108
|
},
|
109
|
+
{
|
110
|
+
name: 'resolve',
|
111
|
+
type: 'function',
|
112
|
+
stateMutability: 'view',
|
113
|
+
inputs: [
|
114
|
+
{ name: 'name', type: 'bytes' },
|
115
|
+
{ name: 'data', type: 'bytes' },
|
116
|
+
{ name: 'gateways', type: 'string[]' },
|
117
|
+
],
|
118
|
+
outputs: [
|
119
|
+
{ name: '', type: 'bytes' },
|
120
|
+
{ name: 'address', type: 'address' },
|
121
|
+
],
|
122
|
+
},
|
74
123
|
] as const
|
75
124
|
|
76
125
|
export const universalResolverReverseAbi = [
|
@@ -87,6 +136,21 @@ export const universalResolverReverseAbi = [
|
|
87
136
|
{ type: 'address', name: 'resolver' },
|
88
137
|
],
|
89
138
|
},
|
139
|
+
{
|
140
|
+
name: 'reverse',
|
141
|
+
type: 'function',
|
142
|
+
stateMutability: 'view',
|
143
|
+
inputs: [
|
144
|
+
{ type: 'bytes', name: 'reverseName' },
|
145
|
+
{ type: 'string[]', name: 'gateways' },
|
146
|
+
],
|
147
|
+
outputs: [
|
148
|
+
{ type: 'string', name: 'resolvedName' },
|
149
|
+
{ type: 'address', name: 'resolvedAddress' },
|
150
|
+
{ type: 'address', name: 'reverseResolver' },
|
151
|
+
{ type: 'address', name: 'resolver' },
|
152
|
+
],
|
153
|
+
},
|
90
154
|
] as const
|
91
155
|
|
92
156
|
export const textResolverAbi = [
|
package/errors/contract.ts
CHANGED
@@ -176,8 +176,8 @@ export class ContractFunctionRevertedError extends BaseError {
|
|
176
176
|
}: { abi: Abi; data?: Hex; functionName: string; message?: string }) {
|
177
177
|
let cause: Error | undefined
|
178
178
|
let decodedData: DecodeErrorResultReturnType | undefined = undefined
|
179
|
-
let metaMessages
|
180
|
-
let reason
|
179
|
+
let metaMessages: string[] | undefined
|
180
|
+
let reason: string | undefined
|
181
181
|
if (data && data !== '0x') {
|
182
182
|
try {
|
183
183
|
decodedData = decodeErrorResult({ abi, data })
|
package/errors/version.ts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export const version = '2.
|
1
|
+
export const version = '2.3.1'
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "viem",
|
3
3
|
"description": "TypeScript Interface for Ethereum",
|
4
|
-
"version": "2.
|
4
|
+
"version": "2.3.1",
|
5
5
|
"main": "./_cjs/index.js",
|
6
6
|
"module": "./_esm/index.js",
|
7
7
|
"types": "./_types/index.d.ts",
|
@@ -122,7 +122,7 @@
|
|
122
122
|
"@noble/hashes": "1.3.2",
|
123
123
|
"@scure/bip32": "1.3.2",
|
124
124
|
"@scure/bip39": "1.2.1",
|
125
|
-
"abitype": "0.
|
125
|
+
"abitype": "1.0.0",
|
126
126
|
"isows": "1.0.3",
|
127
127
|
"ws": "8.13.0"
|
128
128
|
},
|
@@ -103,8 +103,8 @@ export function parseEventLogs<
|
|
103
103
|
if (eventName && !eventName.includes(event.eventName!)) return null
|
104
104
|
return { ...event, ...log }
|
105
105
|
} catch (err) {
|
106
|
-
let eventName
|
107
|
-
let isUnnamed
|
106
|
+
let eventName: string | undefined
|
107
|
+
let isUnnamed: boolean | undefined
|
108
108
|
|
109
109
|
if (err instanceof AbiEventSignatureNotFoundError) return null
|
110
110
|
if (
|
package/utils/ccip.ts
CHANGED
package/utils/encoding/toHex.ts
CHANGED
@@ -187,7 +187,7 @@ export function numberToHex(
|
|
187
187
|
|
188
188
|
const value = BigInt(value_)
|
189
189
|
|
190
|
-
let maxValue
|
190
|
+
let maxValue: bigint | number | undefined
|
191
191
|
if (size) {
|
192
192
|
if (signed) maxValue = (1n << (BigInt(size) * 8n - 1n)) - 1n
|
193
193
|
else maxValue = 2n ** (BigInt(size) * 8n) - 1n
|
package/utils/ens/errors.ts
CHANGED
@@ -17,6 +17,9 @@ export function isNullUniversalResolverError(
|
|
17
17
|
if (!(cause instanceof ContractFunctionRevertedError)) return false
|
18
18
|
if (cause.data?.errorName === 'ResolverNotFound') return true
|
19
19
|
if (cause.data?.errorName === 'ResolverWildcardNotSupported') return true
|
20
|
+
if (cause.data?.errorName === 'ResolverNotContract') return true
|
21
|
+
if (cause.data?.errorName === 'ResolverError') return true
|
22
|
+
if (cause.data?.errorName === 'HttpError') return true
|
20
23
|
// Backwards compatibility for older UniversalResolver contracts
|
21
24
|
if (
|
22
25
|
cause.reason?.includes(
|
package/utils/rpc.ts
CHANGED