@ensdomains/ensjs 3.0.0-alpha.40 → 3.0.0-alpha.42
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/dist/cjs/contracts/getContractAddress.js +4 -4
- package/dist/cjs/functions/commitName.js +2 -3
- package/dist/cjs/functions/createSubname.js +2 -8
- package/dist/cjs/functions/getHistory.js +14 -7
- package/dist/cjs/functions/getNames.js +10 -6
- package/dist/cjs/functions/getOwner.js +25 -12
- package/dist/cjs/functions/getSpecificRecord.js +83 -0
- package/dist/cjs/functions/getWrapperData.js +3 -4
- package/dist/cjs/functions/renewNames.js +13 -20
- package/dist/cjs/functions/{burnFuses.js → setFuses.js} +24 -6
- package/dist/cjs/functions/wrapName.js +7 -23
- package/dist/cjs/generated/factories/ETHRegistrarController__factory.js +6 -55
- package/dist/cjs/generated/factories/NameWrapper__factory.js +90 -69
- package/dist/cjs/generated/factories/PublicResolver__factory.js +83 -0
- package/dist/cjs/generated/factories/UniversalResolver__factory.js +67 -2
- package/dist/cjs/index.js +15 -4
- package/dist/cjs/utils/consts.js +3 -1
- package/dist/cjs/utils/fuses.js +218 -53
- package/dist/cjs/utils/normalise.js +2 -2
- package/dist/cjs/utils/recordHelpers.js +55 -0
- package/dist/cjs/utils/registerHelpers.js +9 -23
- package/dist/cjs/utils/subgraph-types.js +16 -0
- package/dist/cjs/utils/wrapper.js +2 -2
- package/dist/esm/contracts/getContractAddress.mjs +4 -4
- package/dist/esm/functions/commitName.mjs +2 -3
- package/dist/esm/functions/createSubname.mjs +2 -2
- package/dist/esm/functions/getHistory.mjs +14 -7
- package/dist/esm/functions/getNames.mjs +10 -6
- package/dist/esm/functions/getOwner.mjs +25 -12
- package/dist/esm/functions/getSpecificRecord.mjs +78 -1
- package/dist/esm/functions/getWrapperData.mjs +3 -4
- package/dist/esm/functions/renewNames.mjs +13 -20
- package/dist/esm/functions/setFuses.mjs +30 -0
- package/dist/esm/functions/wrapName.mjs +8 -18
- package/dist/esm/generated/factories/ETHRegistrarController__factory.mjs +6 -55
- package/dist/esm/generated/factories/NameWrapper__factory.mjs +90 -69
- package/dist/esm/generated/factories/PublicResolver__factory.mjs +83 -0
- package/dist/esm/generated/factories/UniversalResolver__factory.mjs +67 -2
- package/dist/esm/index.mjs +15 -4
- package/dist/esm/utils/consts.mjs +3 -1
- package/dist/esm/utils/fuses.mjs +218 -53
- package/dist/esm/utils/normalise.mjs +1 -1
- package/dist/esm/utils/recordHelpers.mjs +49 -0
- package/dist/esm/utils/registerHelpers.mjs +9 -17
- package/dist/esm/utils/subgraph-types.mjs +0 -0
- package/dist/esm/utils/wrapper.mjs +1 -1
- package/dist/types/functions/commitName.d.ts +5 -6
- package/dist/types/functions/createSubname.d.ts +3 -3
- package/dist/types/functions/deleteSubname.d.ts +1 -1
- package/dist/types/functions/getHistory.d.ts +1 -1
- package/dist/types/functions/getNames.d.ts +3 -3
- package/dist/types/functions/getOwner.d.ts +1 -0
- package/dist/types/functions/getSpecificRecord.d.ts +22 -0
- package/dist/types/functions/getWrapperData.d.ts +44 -5
- package/dist/types/functions/importDNSSECName.d.ts +1 -1
- package/dist/types/functions/registerName.d.ts +1 -1
- package/dist/types/functions/renewNames.d.ts +5 -6
- package/dist/types/functions/setFuses.d.ts +7 -0
- package/dist/types/functions/setName.d.ts +1 -1
- package/dist/types/functions/setRecord.d.ts +5 -1
- package/dist/types/functions/setRecords.d.ts +1 -1
- package/dist/types/functions/setResolver.d.ts +1 -1
- package/dist/types/functions/transferController.d.ts +1 -1
- package/dist/types/functions/transferName.d.ts +1 -1
- package/dist/types/functions/transferSubname.d.ts +1 -1
- package/dist/types/functions/types.d.ts +9 -5
- package/dist/types/functions/unwrapName.d.ts +1 -1
- package/dist/types/functions/wrapName.d.ts +4 -4
- package/dist/types/generated/ETHRegistrarController.d.ts +13 -36
- package/dist/types/generated/NameWrapper.d.ts +97 -52
- package/dist/types/generated/PublicResolver.d.ts +50 -1
- package/dist/types/generated/UniversalResolver.d.ts +79 -32
- package/dist/types/generated/factories/UniversalResolver__factory.d.ts +15 -0
- package/dist/types/index.d.ts +75 -11
- package/dist/types/utils/consts.d.ts +1 -0
- package/dist/types/utils/fuses.d.ts +115 -45
- package/dist/types/utils/recordHelpers.d.ts +14 -2
- package/dist/types/utils/registerHelpers.d.ts +7 -25
- package/dist/types/utils/subgraph-types.d.ts +284 -0
- package/dist/types/utils/writeTx.d.ts +5 -5
- package/package.json +8 -5
- package/src/@types/pako.d.ts +188 -0
- package/src/contracts/bulkRenewal.ts +1 -1
- package/src/contracts/getContractAddress.ts +4 -4
- package/src/functions/commitName.test.ts +0 -3
- package/src/functions/commitName.ts +1 -2
- package/src/functions/createSubname.ts +4 -5
- package/src/functions/getHistory.ts +59 -25
- package/src/functions/getNames.test.ts +1 -1
- package/src/functions/getNames.ts +26 -13
- package/src/functions/getOwner.test.ts +62 -3
- package/src/functions/getOwner.ts +31 -11
- package/src/functions/getSpecificRecord.test.ts +162 -0
- package/src/functions/getSpecificRecord.ts +95 -1
- package/src/functions/getWrapperData.test.ts +11 -45
- package/src/functions/getWrapperData.ts +7 -5
- package/src/functions/registerName.test.ts +3 -3
- package/src/functions/renewNames.ts +17 -23
- package/src/functions/setFuses.test.ts +240 -0
- package/src/functions/setFuses.ts +44 -0
- package/src/functions/setRecord.test.ts +147 -1
- package/src/functions/setRecord.ts +6 -1
- package/src/functions/types.ts +10 -4
- package/src/functions/wrapName.test.ts +8 -7
- package/src/functions/wrapName.ts +10 -24
- package/src/generated/ETHRegistrarController.ts +12 -79
- package/src/generated/NameWrapper.ts +155 -99
- package/src/generated/PublicResolver.ts +123 -0
- package/src/generated/UniversalResolver.ts +157 -16
- package/src/generated/factories/ETHRegistrarController__factory.ts +6 -55
- package/src/generated/factories/NameWrapper__factory.ts +90 -69
- package/src/generated/factories/PublicResolver__factory.ts +83 -0
- package/src/generated/factories/UniversalResolver__factory.ts +67 -2
- package/src/index.ts +23 -14
- package/src/utils/consts.ts +1 -0
- package/src/utils/fuses.ts +299 -102
- package/src/utils/normalise.ts +1 -1
- package/src/utils/recordHelpers.ts +64 -1
- package/src/utils/registerHelpers.ts +13 -41
- package/src/utils/subgraph-types.ts +312 -0
- package/src/utils/wrapper.ts +1 -1
- package/dist/cjs/utils/generateFuseInput.js +0 -40
- package/dist/esm/functions/burnFuses.mjs +0 -12
- package/dist/esm/utils/generateFuseInput.mjs +0 -15
- package/dist/types/functions/burnFuses.d.ts +0 -3
- package/dist/types/utils/generateFuseInput.d.ts +0 -3
- package/src/functions/burnFuses.test.ts +0 -148
- package/src/functions/burnFuses.ts +0 -16
- package/src/utils/generateFuseInput.ts +0 -13
package/dist/esm/utils/fuses.mjs
CHANGED
|
@@ -1,23 +1,43 @@
|
|
|
1
1
|
// src/utils/fuses.ts
|
|
2
|
-
import { BigNumber } from "@ethersproject/bignumber/lib.esm/bignumber.js";
|
|
3
2
|
var CANNOT_UNWRAP = 1;
|
|
4
3
|
var CANNOT_BURN_FUSES = 2;
|
|
5
4
|
var CANNOT_TRANSFER = 4;
|
|
6
5
|
var CANNOT_SET_RESOLVER = 8;
|
|
7
6
|
var CANNOT_SET_TTL = 16;
|
|
8
7
|
var CANNOT_CREATE_SUBDOMAIN = 32;
|
|
9
|
-
var PARENT_CANNOT_CONTROL =
|
|
8
|
+
var PARENT_CANNOT_CONTROL = 65536;
|
|
9
|
+
var IS_DOT_ETH = 131072;
|
|
10
|
+
var CAN_EXTEND_EXPIRY = 262144;
|
|
11
|
+
var CHILD_CONTROLLED_FUSES = 65535;
|
|
12
|
+
var PARENT_CONTROLLED_FUSES = 4294901760;
|
|
13
|
+
var USER_SETTABLE_FUSES = 4294836223;
|
|
10
14
|
var CAN_DO_EVERYTHING = 0;
|
|
11
|
-
var
|
|
15
|
+
var childFuseEnum = {
|
|
12
16
|
CANNOT_UNWRAP,
|
|
13
17
|
CANNOT_BURN_FUSES,
|
|
14
18
|
CANNOT_TRANSFER,
|
|
15
19
|
CANNOT_SET_RESOLVER,
|
|
16
20
|
CANNOT_SET_TTL,
|
|
17
|
-
CANNOT_CREATE_SUBDOMAIN
|
|
18
|
-
PARENT_CANNOT_CONTROL
|
|
21
|
+
CANNOT_CREATE_SUBDOMAIN
|
|
19
22
|
};
|
|
20
|
-
var
|
|
23
|
+
var parentFuseEnum = {
|
|
24
|
+
PARENT_CANNOT_CONTROL,
|
|
25
|
+
CAN_EXTEND_EXPIRY
|
|
26
|
+
};
|
|
27
|
+
var fullParentFuseEnum = {
|
|
28
|
+
...parentFuseEnum,
|
|
29
|
+
IS_DOT_ETH
|
|
30
|
+
};
|
|
31
|
+
var userSettableFuseEnum = {
|
|
32
|
+
...childFuseEnum,
|
|
33
|
+
...parentFuseEnum
|
|
34
|
+
};
|
|
35
|
+
var fullFuseEnum = {
|
|
36
|
+
...userSettableFuseEnum,
|
|
37
|
+
CAN_DO_EVERYTHING
|
|
38
|
+
};
|
|
39
|
+
var unnamedChildFuses = [
|
|
40
|
+
64,
|
|
21
41
|
128,
|
|
22
42
|
256,
|
|
23
43
|
512,
|
|
@@ -26,10 +46,9 @@ var unnamedFuses = [
|
|
|
26
46
|
4096,
|
|
27
47
|
8192,
|
|
28
48
|
16384,
|
|
29
|
-
32768
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
262144,
|
|
49
|
+
32768
|
|
50
|
+
];
|
|
51
|
+
var unnamedParentFuses = [
|
|
33
52
|
524288,
|
|
34
53
|
1048576,
|
|
35
54
|
2097152,
|
|
@@ -42,74 +61,220 @@ var unnamedFuses = [
|
|
|
42
61
|
268435456,
|
|
43
62
|
536870912,
|
|
44
63
|
1073741824,
|
|
45
|
-
2147483648
|
|
46
|
-
4294967296
|
|
64
|
+
2147483648
|
|
47
65
|
];
|
|
48
|
-
var
|
|
49
|
-
...
|
|
50
|
-
|
|
66
|
+
var unnamedUserSettableFuses = [
|
|
67
|
+
...unnamedChildFuses,
|
|
68
|
+
...unnamedParentFuses
|
|
69
|
+
];
|
|
70
|
+
var childFuseKeys = Object.keys(
|
|
71
|
+
childFuseEnum
|
|
72
|
+
);
|
|
73
|
+
var parentFuseKeys = Object.keys(
|
|
74
|
+
parentFuseEnum
|
|
75
|
+
);
|
|
76
|
+
var fullParentFuseKeys = Object.keys(
|
|
77
|
+
fullParentFuseEnum
|
|
78
|
+
);
|
|
79
|
+
var userSettableFuseKeys = Object.keys(
|
|
80
|
+
userSettableFuseEnum
|
|
81
|
+
);
|
|
82
|
+
var checkNumber = (fuses) => {
|
|
83
|
+
if (fuses > 2 ** 32 || fuses < 1) {
|
|
84
|
+
throw new Error(
|
|
85
|
+
`Fuse number must be limited to uint32, ${fuses} was too ${fuses < 1 ? "low" : "high"}.`
|
|
86
|
+
);
|
|
87
|
+
} else if (fuses % 1 !== 0) {
|
|
88
|
+
throw new Error(`Fuse number must be an integer, ${fuses} was not.`);
|
|
89
|
+
} else if ((fuses & USER_SETTABLE_FUSES) !== fuses) {
|
|
90
|
+
throw new Error(
|
|
91
|
+
`Fuse number must be limited to user settable fuses, ${fuses} was not.`
|
|
92
|
+
);
|
|
93
|
+
}
|
|
51
94
|
};
|
|
52
|
-
var
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
95
|
+
var testFuses = (fuses) => {
|
|
96
|
+
if ("named" in fuses && fuses.named.length > 0) {
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
if ("unnamed" in fuses && fuses.unnamed.length > 0) {
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
if ("number" in fuses && fuses.number !== 0) {
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
return false;
|
|
106
|
+
};
|
|
107
|
+
var hasFuses = (fuses) => {
|
|
108
|
+
if (typeof fuses === "number") {
|
|
109
|
+
return fuses !== 0;
|
|
110
|
+
}
|
|
111
|
+
if (typeof fuses === "object") {
|
|
112
|
+
if ("child" in fuses && testFuses(fuses.child)) {
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
if ("parent" in fuses && testFuses(fuses.parent)) {
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
if (testFuses(fuses)) {
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return false;
|
|
123
|
+
};
|
|
124
|
+
function encodeFuses(fuses, restrictTo) {
|
|
56
125
|
let encodedFuses = 0;
|
|
57
|
-
if (
|
|
58
|
-
if (
|
|
59
|
-
throw new Error(
|
|
60
|
-
`Fuse number must be limited to uint32, ${fuses.fuseNumberToBurn} was too ${fuses.fuseNumberToBurn < 1 ? "low" : "high"}.`
|
|
61
|
-
);
|
|
62
|
-
} else if (fuses.fuseNumberToBurn % 1 !== 0) {
|
|
63
|
-
throw new Error(
|
|
64
|
-
`Fuse number must be an integer, ${fuses.fuseNumberToBurn} was not.`
|
|
65
|
-
);
|
|
126
|
+
if (typeof fuses === "number") {
|
|
127
|
+
if (restrictTo) {
|
|
128
|
+
throw new Error("Cannot specify an exact fuse value when restricted.");
|
|
66
129
|
}
|
|
67
|
-
|
|
130
|
+
checkNumber(fuses);
|
|
131
|
+
encodedFuses = fuses;
|
|
68
132
|
} else {
|
|
69
|
-
|
|
70
|
-
|
|
133
|
+
let fusesRef = fuses;
|
|
134
|
+
let allowedNamed = [];
|
|
135
|
+
let allowedUnnamed = [];
|
|
136
|
+
let namedArray = [];
|
|
137
|
+
let unnamedArray = [];
|
|
138
|
+
if (restrictTo) {
|
|
139
|
+
if ("parent" in fuses || "child" in fuses) {
|
|
140
|
+
throw new Error("Can't specify fuse category when restricted.");
|
|
141
|
+
}
|
|
142
|
+
allowedNamed = restrictTo === "child" ? childFuseKeys : parentFuseKeys;
|
|
143
|
+
allowedUnnamed = restrictTo === "child" ? unnamedChildFuses : unnamedParentFuses;
|
|
144
|
+
fusesRef = { [restrictTo]: fuses };
|
|
145
|
+
} else {
|
|
146
|
+
allowedNamed = userSettableFuseKeys;
|
|
147
|
+
allowedUnnamed = unnamedUserSettableFuses;
|
|
148
|
+
}
|
|
149
|
+
if ("parent" in fusesRef) {
|
|
150
|
+
if ("named" in fusesRef.parent)
|
|
151
|
+
namedArray = fusesRef.parent.named;
|
|
152
|
+
if ("unnamed" in fusesRef.parent)
|
|
153
|
+
unnamedArray = fusesRef.parent.unnamed;
|
|
154
|
+
if ("number" in fusesRef.parent) {
|
|
155
|
+
if ("named" in fusesRef.parent || "unnamed" in fusesRef.parent) {
|
|
156
|
+
throw new Error(
|
|
157
|
+
"Cannot specify both a fuse number and named/unnamed fuses."
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
checkNumber(fusesRef.parent.number);
|
|
161
|
+
if ((fusesRef.parent.number & PARENT_CONTROLLED_FUSES) !== fusesRef.parent.number) {
|
|
162
|
+
throw new Error(
|
|
163
|
+
"Cannot specify a fuse value to set that is outside of the parent's control."
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
encodedFuses |= fusesRef.parent.number;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
if ("child" in fusesRef) {
|
|
170
|
+
if ("named" in fusesRef.child)
|
|
171
|
+
namedArray = [...namedArray, ...fusesRef.child.named];
|
|
172
|
+
if ("unnamed" in fusesRef.child)
|
|
173
|
+
unnamedArray = [...unnamedArray, ...fusesRef.child.unnamed];
|
|
174
|
+
if ("number" in fusesRef.child) {
|
|
175
|
+
if ("named" in fusesRef.child || "unnamed" in fusesRef.child) {
|
|
176
|
+
throw new Error(
|
|
177
|
+
"Cannot specify both a fuse number and named/unnamed fuses."
|
|
178
|
+
);
|
|
179
|
+
}
|
|
180
|
+
checkNumber(fusesRef.child.number);
|
|
181
|
+
if ((fusesRef.child.number & CHILD_CONTROLLED_FUSES) !== fusesRef.child.number) {
|
|
182
|
+
throw new Error(
|
|
183
|
+
"Cannot specify a fuse value to set that is outside of the owner's control."
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
encodedFuses |= fusesRef.child.number;
|
|
187
|
+
}
|
|
71
188
|
}
|
|
72
|
-
if (
|
|
73
|
-
|
|
74
|
-
|
|
189
|
+
if (!namedArray.length && !unnamedArray.length && !encodedFuses) {
|
|
190
|
+
throw new Error("Must specify at least one fuse.");
|
|
191
|
+
}
|
|
192
|
+
for (const fuse of namedArray) {
|
|
193
|
+
if (!allowedNamed.includes(fuse)) {
|
|
194
|
+
if (!userSettableFuseKeys.includes(fuse)) {
|
|
75
195
|
throw new Error(`${fuse} is not a valid named fuse.`);
|
|
76
196
|
}
|
|
77
|
-
|
|
197
|
+
throw new Error(`Fuse ${fuse} is not allowed for this operation.`);
|
|
78
198
|
}
|
|
199
|
+
encodedFuses |= userSettableFuseEnum[fuse];
|
|
79
200
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
if (!
|
|
201
|
+
for (const fuse of unnamedArray) {
|
|
202
|
+
if (!allowedUnnamed.includes(fuse)) {
|
|
203
|
+
if (!unnamedUserSettableFuses.includes(fuse)) {
|
|
83
204
|
throw new Error(
|
|
84
|
-
`${fuse} is not a valid unnamed fuse. If you are trying to
|
|
205
|
+
`${fuse} is not a valid unnamed fuse. If you are trying to set a named fuse, use the named property.`
|
|
85
206
|
);
|
|
86
207
|
}
|
|
87
|
-
|
|
208
|
+
throw new Error(`Fuse ${fuse} is not allowed for this operation.`);
|
|
88
209
|
}
|
|
210
|
+
encodedFuses |= fuse;
|
|
89
211
|
}
|
|
90
212
|
}
|
|
91
213
|
return encodedFuses;
|
|
92
|
-
}
|
|
93
|
-
var
|
|
94
|
-
const bnFuses = BigNumber.from(fuses);
|
|
214
|
+
}
|
|
215
|
+
var decodeNamedFuses = (fuses, arr) => {
|
|
95
216
|
const fuseObj = Object.fromEntries(
|
|
96
|
-
|
|
217
|
+
arr.map((fuse) => [
|
|
97
218
|
fuse,
|
|
98
|
-
|
|
219
|
+
(fuses & userSettableFuseEnum[fuse]) > 0
|
|
99
220
|
])
|
|
100
221
|
);
|
|
101
|
-
if (bnFuses.eq(0)) {
|
|
102
|
-
fuseObj.CAN_DO_EVERYTHING = true;
|
|
103
|
-
} else {
|
|
104
|
-
fuseObj.CAN_DO_EVERYTHING = false;
|
|
105
|
-
}
|
|
106
222
|
return fuseObj;
|
|
107
223
|
};
|
|
224
|
+
var decodeUnnamedFuses = (fuses, arr) => {
|
|
225
|
+
const fuseObj = Object.fromEntries(
|
|
226
|
+
arr.map((fuse) => [fuse, (fuses & fuse) > 0])
|
|
227
|
+
);
|
|
228
|
+
return fuseObj;
|
|
229
|
+
};
|
|
230
|
+
var decodeFuses = (fuses) => {
|
|
231
|
+
const parentNamedFuses = decodeNamedFuses(
|
|
232
|
+
fuses,
|
|
233
|
+
fullParentFuseKeys
|
|
234
|
+
);
|
|
235
|
+
const parentUnnamedFuses = decodeUnnamedFuses(
|
|
236
|
+
fuses,
|
|
237
|
+
unnamedParentFuses
|
|
238
|
+
);
|
|
239
|
+
const childNamedFuses = decodeNamedFuses(
|
|
240
|
+
fuses,
|
|
241
|
+
childFuseKeys
|
|
242
|
+
);
|
|
243
|
+
const childUnnamedFuses = decodeUnnamedFuses(
|
|
244
|
+
fuses,
|
|
245
|
+
unnamedChildFuses
|
|
246
|
+
);
|
|
247
|
+
return {
|
|
248
|
+
parent: {
|
|
249
|
+
...parentNamedFuses,
|
|
250
|
+
unnamed: parentUnnamedFuses
|
|
251
|
+
},
|
|
252
|
+
child: {
|
|
253
|
+
...childNamedFuses,
|
|
254
|
+
CAN_DO_EVERYTHING: (fuses & CHILD_CONTROLLED_FUSES) === 0,
|
|
255
|
+
unnamed: childUnnamedFuses
|
|
256
|
+
}
|
|
257
|
+
};
|
|
258
|
+
};
|
|
108
259
|
var fuses_default = fullFuseEnum;
|
|
109
260
|
export {
|
|
261
|
+
CHILD_CONTROLLED_FUSES,
|
|
262
|
+
PARENT_CONTROLLED_FUSES,
|
|
263
|
+
USER_SETTABLE_FUSES,
|
|
264
|
+
childFuseEnum,
|
|
265
|
+
childFuseKeys,
|
|
110
266
|
decodeFuses,
|
|
111
267
|
fuses_default as default,
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
268
|
+
encodeFuses,
|
|
269
|
+
fullFuseEnum,
|
|
270
|
+
fullParentFuseEnum,
|
|
271
|
+
fullParentFuseKeys,
|
|
272
|
+
hasFuses,
|
|
273
|
+
parentFuseEnum,
|
|
274
|
+
parentFuseKeys,
|
|
275
|
+
unnamedChildFuses,
|
|
276
|
+
unnamedParentFuses,
|
|
277
|
+
unnamedUserSettableFuses,
|
|
278
|
+
userSettableFuseEnum,
|
|
279
|
+
userSettableFuseKeys
|
|
115
280
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// src/utils/normalise.ts
|
|
2
2
|
import { concat, hexlify } from "@ethersproject/bytes";
|
|
3
3
|
import { keccak256 } from "@ethersproject/keccak256";
|
|
4
|
-
import { toUtf8Bytes } from "@ethersproject/strings
|
|
4
|
+
import { toUtf8Bytes } from "@ethersproject/strings";
|
|
5
5
|
import uts46 from "idna-uts46-hx/uts46bundle.js";
|
|
6
6
|
import { decodeLabelhash, isEncodedLabelhash } from "./labels.mjs";
|
|
7
7
|
var zeros = new Uint8Array(32);
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
// src/utils/recordHelpers.ts
|
|
2
2
|
import { formatsByCoinType, formatsByName } from "@ensdomains/address-encoder";
|
|
3
|
+
import { isBytesLike } from "@ethersproject/bytes";
|
|
4
|
+
import { toUtf8Bytes } from "@ethersproject/strings";
|
|
3
5
|
import { encodeContenthash } from "./contentHash.mjs";
|
|
4
6
|
var generateSetAddr = (namehash, coinType, address, resolver) => {
|
|
5
7
|
let coinTypeInstance;
|
|
@@ -15,6 +17,34 @@ var generateSetAddr = (namehash, coinType, address, resolver) => {
|
|
|
15
17
|
[namehash, inputCoinType, encodedAddress]
|
|
16
18
|
);
|
|
17
19
|
};
|
|
20
|
+
var generateABIInput = async (encodeAs, data) => {
|
|
21
|
+
let contentType;
|
|
22
|
+
let encodedData;
|
|
23
|
+
switch (encodeAs) {
|
|
24
|
+
case "json":
|
|
25
|
+
contentType = 1;
|
|
26
|
+
encodedData = JSON.stringify(data);
|
|
27
|
+
break;
|
|
28
|
+
case "zlib": {
|
|
29
|
+
contentType = 2;
|
|
30
|
+
const { deflate } = await import("pako/dist/pako_deflate.min.js");
|
|
31
|
+
encodedData = deflate(JSON.stringify(data));
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
case "cbor": {
|
|
35
|
+
contentType = 4;
|
|
36
|
+
const { encode } = await import("cbor");
|
|
37
|
+
encodedData = encode(data);
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
default: {
|
|
41
|
+
contentType = 8;
|
|
42
|
+
encodedData = data;
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return { contentType, data: encodedData };
|
|
47
|
+
};
|
|
18
48
|
function generateSingleRecordCall(namehash, resolver, type) {
|
|
19
49
|
if (type === "contentHash") {
|
|
20
50
|
return (_r) => {
|
|
@@ -32,6 +62,24 @@ function generateSingleRecordCall(namehash, resolver, type) {
|
|
|
32
62
|
]);
|
|
33
63
|
};
|
|
34
64
|
}
|
|
65
|
+
if (type === "abi") {
|
|
66
|
+
return (_r) => {
|
|
67
|
+
const record = _r;
|
|
68
|
+
const { contentType = 1, data } = record;
|
|
69
|
+
let encodedData = data;
|
|
70
|
+
if (!isBytesLike(encodedData)) {
|
|
71
|
+
if (typeof encodedData === "object") {
|
|
72
|
+
encodedData = JSON.stringify(encodedData);
|
|
73
|
+
}
|
|
74
|
+
encodedData = toUtf8Bytes(encodedData);
|
|
75
|
+
}
|
|
76
|
+
return resolver.interface.encodeFunctionData("setABI", [
|
|
77
|
+
namehash,
|
|
78
|
+
contentType,
|
|
79
|
+
encodedData
|
|
80
|
+
]);
|
|
81
|
+
};
|
|
82
|
+
}
|
|
35
83
|
return (_r) => {
|
|
36
84
|
const record = _r;
|
|
37
85
|
if (type === "text") {
|
|
@@ -69,6 +117,7 @@ var generateRecordCallArray = (namehash, records, resolver) => {
|
|
|
69
117
|
return calls;
|
|
70
118
|
};
|
|
71
119
|
export {
|
|
120
|
+
generateABIInput,
|
|
72
121
|
generateRecordCallArray,
|
|
73
122
|
generateSetAddr,
|
|
74
123
|
generateSingleRecordCall
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
// src/utils/registerHelpers.ts
|
|
2
2
|
import { defaultAbiCoder } from "@ethersproject/abi/lib.esm/abi-coder.js";
|
|
3
3
|
import { keccak256 } from "@ethersproject/keccak256";
|
|
4
|
-
import
|
|
4
|
+
import { encodeFuses, hasFuses } from "./fuses.mjs";
|
|
5
5
|
import { labelhash } from "./labels.mjs";
|
|
6
6
|
import { namehash } from "./normalise.mjs";
|
|
7
7
|
import { generateRecordCallArray } from "./recordHelpers.mjs";
|
|
8
|
-
var MAX_INT_64 = 2n ** 64n - 1n;
|
|
9
8
|
var randomSecret = () => {
|
|
10
9
|
const bytes = Buffer.allocUnsafe(32);
|
|
11
10
|
return `0x${crypto.getRandomValues(bytes).toString("hex")}`;
|
|
@@ -18,13 +17,12 @@ var makeCommitmentData = ({
|
|
|
18
17
|
records,
|
|
19
18
|
reverseRecord,
|
|
20
19
|
fuses,
|
|
21
|
-
wrapperExpiry,
|
|
22
20
|
secret
|
|
23
21
|
}) => {
|
|
24
|
-
const
|
|
22
|
+
const labelHash = labelhash(name.split(".")[0]);
|
|
25
23
|
const hash = namehash(name);
|
|
26
24
|
const resolverAddress = resolver.address;
|
|
27
|
-
const fuseData = fuses ?
|
|
25
|
+
const fuseData = hasFuses(fuses) ? encodeFuses(fuses, "child") : 0;
|
|
28
26
|
if (reverseRecord) {
|
|
29
27
|
if (!records) {
|
|
30
28
|
records = { coinTypes: [{ key: "ETH", value: owner }] };
|
|
@@ -36,23 +34,20 @@ var makeCommitmentData = ({
|
|
|
36
34
|
}
|
|
37
35
|
const data = records ? generateRecordCallArray(hash, records, resolver) : [];
|
|
38
36
|
return [
|
|
39
|
-
|
|
37
|
+
labelHash,
|
|
40
38
|
owner,
|
|
41
39
|
duration,
|
|
40
|
+
secret,
|
|
42
41
|
resolverAddress,
|
|
43
42
|
data,
|
|
44
|
-
secret,
|
|
45
43
|
!!reverseRecord,
|
|
46
|
-
fuseData
|
|
47
|
-
wrapperExpiry || MAX_INT_64
|
|
44
|
+
fuseData
|
|
48
45
|
];
|
|
49
46
|
};
|
|
50
47
|
var makeRegistrationData = (params) => {
|
|
51
48
|
const commitmentData = makeCommitmentData(params);
|
|
52
49
|
const label = params.name.split(".")[0];
|
|
53
50
|
commitmentData[0] = label;
|
|
54
|
-
const secret = commitmentData.splice(5, 1)[0];
|
|
55
|
-
commitmentData.splice(3, 0, secret);
|
|
56
51
|
return commitmentData;
|
|
57
52
|
};
|
|
58
53
|
var _makeCommitment = (params) => {
|
|
@@ -62,12 +57,11 @@ var _makeCommitment = (params) => {
|
|
|
62
57
|
"bytes32",
|
|
63
58
|
"address",
|
|
64
59
|
"uint256",
|
|
60
|
+
"bytes32",
|
|
65
61
|
"address",
|
|
66
62
|
"bytes[]",
|
|
67
|
-
"bytes32",
|
|
68
63
|
"bool",
|
|
69
|
-
"
|
|
70
|
-
"uint64"
|
|
64
|
+
"uint16"
|
|
71
65
|
],
|
|
72
66
|
params
|
|
73
67
|
)
|
|
@@ -84,12 +78,10 @@ var makeCommitment = ({
|
|
|
84
78
|
const commitment = _makeCommitment(generatedParams);
|
|
85
79
|
return {
|
|
86
80
|
secret,
|
|
87
|
-
commitment
|
|
88
|
-
wrapperExpiry: generatedParams[8]
|
|
81
|
+
commitment
|
|
89
82
|
};
|
|
90
83
|
};
|
|
91
84
|
export {
|
|
92
|
-
MAX_INT_64,
|
|
93
85
|
_makeCommitment,
|
|
94
86
|
makeCommitment,
|
|
95
87
|
makeCommitmentData,
|
|
File without changes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// src/utils/wrapper.ts
|
|
2
2
|
import { BigNumber } from "@ethersproject/bignumber/lib.esm/bignumber.js";
|
|
3
|
-
import { toUtf8Bytes } from "@ethersproject/strings
|
|
3
|
+
import { toUtf8Bytes } from "@ethersproject/strings";
|
|
4
4
|
var MAX_EXPIRY = BigNumber.from(2).pow(64).sub(1);
|
|
5
5
|
var makeExpiry = async ({ getExpiry }, name, expiry) => {
|
|
6
6
|
if (expiry) {
|
|
@@ -7,20 +7,19 @@ export default function ({ contracts }: ENSArgs<'contracts'>, name: string, { re
|
|
|
7
7
|
customData: {
|
|
8
8
|
secret: string;
|
|
9
9
|
commitment: string;
|
|
10
|
-
wrapperExpiry: import("@ethersproject/bignumber").BigNumberish;
|
|
11
10
|
};
|
|
12
11
|
to?: string | undefined;
|
|
13
12
|
from?: string | undefined;
|
|
14
13
|
nonce?: number | undefined;
|
|
15
|
-
gasLimit?: import("
|
|
16
|
-
gasPrice?: import("
|
|
14
|
+
gasLimit?: import("ethers").BigNumber | undefined;
|
|
15
|
+
gasPrice?: import("ethers").BigNumber | undefined;
|
|
17
16
|
data?: string | undefined;
|
|
18
|
-
value?: import("
|
|
17
|
+
value?: import("ethers").BigNumber | undefined;
|
|
19
18
|
chainId?: number | undefined;
|
|
20
19
|
type?: number | undefined;
|
|
21
20
|
accessList?: import("@ethersproject/transactions").AccessList | undefined;
|
|
22
|
-
maxFeePerGas?: import("
|
|
23
|
-
maxPriorityFeePerGas?: import("
|
|
21
|
+
maxFeePerGas?: import("ethers").BigNumber | undefined;
|
|
22
|
+
maxPriorityFeePerGas?: import("ethers").BigNumber | undefined;
|
|
24
23
|
ccipReadEnabled?: boolean | undefined;
|
|
25
24
|
}>;
|
|
26
25
|
export {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ENSArgs } from '..';
|
|
2
|
-
import {
|
|
2
|
+
import { CombinedFuseInput } from '../utils/fuses';
|
|
3
3
|
import { Expiry } from '../utils/wrapper';
|
|
4
4
|
declare type BaseArgs = {
|
|
5
5
|
owner: string;
|
|
@@ -8,9 +8,9 @@ declare type BaseArgs = {
|
|
|
8
8
|
};
|
|
9
9
|
declare type NameWrapperArgs = {
|
|
10
10
|
contract: 'nameWrapper';
|
|
11
|
-
fuses?:
|
|
11
|
+
fuses?: CombinedFuseInput;
|
|
12
12
|
expiry?: Expiry;
|
|
13
13
|
} & BaseArgs;
|
|
14
14
|
declare type Args = BaseArgs | NameWrapperArgs;
|
|
15
|
-
export default function ({ contracts, signer, getExpiry, }: ENSArgs<'contracts' | 'signer' | 'getExpiry'>, name: string, { owner, resolverAddress, contract, ...wrapperArgs }: Args): Promise<import("
|
|
15
|
+
export default function ({ contracts, signer, getExpiry, }: ENSArgs<'contracts' | 'signer' | 'getExpiry'>, name: string, { owner, resolverAddress, contract, ...wrapperArgs }: Args): Promise<import("ethers").PopulatedTransaction>;
|
|
16
16
|
export {};
|
|
@@ -2,5 +2,5 @@ import { ENSArgs } from '..';
|
|
|
2
2
|
declare type Args = {
|
|
3
3
|
contract: 'registry' | 'nameWrapper';
|
|
4
4
|
};
|
|
5
|
-
export default function ({ contracts, signer }: ENSArgs<'contracts' | 'signer' | 'getExpiry'>, name: string, { contract }: Args): Promise<import("
|
|
5
|
+
export default function ({ contracts, signer }: ENSArgs<'contracts' | 'signer' | 'getExpiry'>, name: string, { contract }: Args): Promise<import("ethers").PopulatedTransaction>;
|
|
6
6
|
export {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ENSArgs } from '..';
|
|
2
|
-
declare type DomainEvent = 'NewOwner' | 'NewResolver' | 'Transfer' | 'NewTTL' | 'WrappedTransfer' | 'NameWrapped' | 'NameUnwrapped' | 'FusesSet';
|
|
2
|
+
declare type DomainEvent = 'NewOwner' | 'NewResolver' | 'Transfer' | 'NewTTL' | 'WrappedTransfer' | 'NameWrapped' | 'NameUnwrapped' | 'FusesSet' | 'ExpiryExtended';
|
|
3
3
|
declare type RegistrationEvent = 'NameRegistered' | 'NameRenewed' | 'NameTransferred';
|
|
4
4
|
declare type ResolverEvent = 'AddrChanged' | 'MulticoinAddrChanged' | 'NameChanged' | 'AbiChanged' | 'PubkeyChanged' | 'TextChanged' | 'ContenthashChanged' | 'InterfaceChanged' | 'AuthorisationChanged' | 'VersionChanged';
|
|
5
5
|
export declare function getHistory({ gqlInstance }: ENSArgs<'gqlInstance'>, name: string): Promise<{
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ENSArgs } from '..';
|
|
2
|
-
import {
|
|
2
|
+
import { AllCurrentFuses } from '../utils/fuses';
|
|
3
3
|
export declare type Name = {
|
|
4
4
|
id: string;
|
|
5
5
|
labelName: string | null;
|
|
@@ -13,7 +13,7 @@ export declare type Name = {
|
|
|
13
13
|
createdAt?: Date;
|
|
14
14
|
registrationDate?: Date;
|
|
15
15
|
expiryDate?: Date;
|
|
16
|
-
fuses?:
|
|
16
|
+
fuses?: AllCurrentFuses;
|
|
17
17
|
registration?: {
|
|
18
18
|
expiryDate: Date;
|
|
19
19
|
registrationDate: Date;
|
|
@@ -37,7 +37,7 @@ declare type OwnerParams = {
|
|
|
37
37
|
};
|
|
38
38
|
declare type WrappedOwnerParams = {
|
|
39
39
|
type: 'wrappedOwner';
|
|
40
|
-
orderBy?: 'expiryDate' | '
|
|
40
|
+
orderBy?: 'expiryDate' | 'name';
|
|
41
41
|
};
|
|
42
42
|
declare type AllParams = {
|
|
43
43
|
type: 'all';
|
|
@@ -3,6 +3,7 @@ declare type Owner = {
|
|
|
3
3
|
registrant?: string;
|
|
4
4
|
owner?: string;
|
|
5
5
|
ownershipLevel: 'nameWrapper' | 'registry' | 'registrar';
|
|
6
|
+
expired?: boolean;
|
|
6
7
|
};
|
|
7
8
|
declare const _default: {
|
|
8
9
|
raw: ({ contracts, multicallWrapper }: ENSArgs<"contracts" | "multicallWrapper">, name: string, contract?: "nameWrapper" | "registrar" | "registry" | undefined) => Promise<{
|
|
@@ -71,3 +71,25 @@ export declare const getAddr: {
|
|
|
71
71
|
addr: string;
|
|
72
72
|
} | undefined>;
|
|
73
73
|
};
|
|
74
|
+
export declare const _getABI: {
|
|
75
|
+
raw: ({ contracts }: ENSArgs<'contracts'>, name: string) => Promise<{
|
|
76
|
+
to: string;
|
|
77
|
+
data: string;
|
|
78
|
+
}>;
|
|
79
|
+
decode: ({ contracts }: ENSArgs<'contracts'>, data: string) => Promise<{
|
|
80
|
+
contentType: number;
|
|
81
|
+
decoded: boolean;
|
|
82
|
+
abi: string | object;
|
|
83
|
+
} | undefined>;
|
|
84
|
+
};
|
|
85
|
+
export declare const getABI: {
|
|
86
|
+
raw: ({ contracts, universalWrapper }: ENSArgs<'contracts' | 'universalWrapper'>, name: string) => Promise<{
|
|
87
|
+
to: string;
|
|
88
|
+
data: string;
|
|
89
|
+
}>;
|
|
90
|
+
decode: ({ contracts, universalWrapper }: ENSArgs<'contracts' | 'universalWrapper'>, data: string) => Promise<{
|
|
91
|
+
contentType: number;
|
|
92
|
+
decoded: boolean;
|
|
93
|
+
abi: string | object;
|
|
94
|
+
} | undefined>;
|
|
95
|
+
};
|