@ensdomains/ensjs 3.0.0-alpha.41 → 3.0.0-alpha.43
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/getDecryptedName.js +111 -0
- package/dist/cjs/functions/getHistory.js +14 -7
- package/dist/cjs/functions/getNames.js +10 -6
- package/dist/cjs/functions/getOwner.js +28 -15
- package/dist/cjs/functions/getPrice.js +6 -6
- package/dist/cjs/functions/getProfile.js +11 -5
- package/dist/cjs/functions/getWrapperData.js +4 -5
- package/dist/cjs/functions/renewNames.js +13 -20
- package/dist/cjs/functions/{burnFuses.js → setFuses.js} +24 -6
- package/dist/cjs/functions/wrapName.js +9 -25
- package/dist/cjs/generated/factories/BaseRegistrarImplementation__factory.js +2 -2
- package/dist/cjs/generated/factories/BulkRenewal__factory.js +2 -2
- package/dist/cjs/generated/factories/DNSRegistrar__factory.js +2 -2
- package/dist/cjs/generated/factories/DNSSECImpl__factory.js +2 -2
- package/dist/cjs/generated/factories/DefaultReverseResolver__factory.js +2 -2
- package/dist/cjs/generated/factories/ENSRegistry__factory.js +2 -2
- package/dist/cjs/generated/factories/ETHRegistrarController__factory.js +8 -57
- package/dist/cjs/generated/factories/Multicall__factory.js +2 -2
- package/dist/cjs/generated/factories/NameWrapper__factory.js +92 -71
- package/dist/cjs/generated/factories/P256SHA256Algorithm__factory.js +2 -2
- package/dist/cjs/generated/factories/PublicResolver__factory.js +85 -2
- package/dist/cjs/generated/factories/RSASHA1Algorithm__factory.js +2 -2
- package/dist/cjs/generated/factories/RSASHA256Algorithm__factory.js +2 -2
- package/dist/cjs/generated/factories/ReverseRegistrar__factory.js +2 -2
- package/dist/cjs/generated/factories/Root__factory.js +2 -2
- package/dist/cjs/generated/factories/SHA1Digest__factory.js +2 -2
- package/dist/cjs/generated/factories/SHA1NSEC3Digest__factory.js +2 -2
- package/dist/cjs/generated/factories/SHA256Digest__factory.js +2 -2
- package/dist/cjs/generated/factories/StaticMetadataService__factory.js +2 -2
- package/dist/cjs/generated/factories/TLDPublicSuffixList__factory.js +2 -2
- package/dist/cjs/generated/factories/UniversalResolver__factory.js +69 -4
- package/dist/cjs/index.js +6 -4
- package/dist/cjs/utils/ccip.js +3 -3
- package/dist/cjs/utils/consts.js +3 -1
- package/dist/cjs/utils/fuses.js +218 -53
- package/dist/cjs/utils/hexEncodedName.js +2 -0
- package/dist/cjs/utils/labels.js +14 -8
- package/dist/cjs/utils/normalise.js +2 -2
- package/dist/cjs/utils/recordHelpers.js +4 -3
- package/dist/cjs/utils/registerHelpers.js +11 -25
- package/dist/cjs/utils/subgraph-types.js +16 -0
- package/dist/cjs/utils/wrapper.js +3 -3
- 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/getDecryptedName.mjs +96 -0
- package/dist/esm/functions/getHistory.mjs +14 -7
- package/dist/esm/functions/getNames.mjs +10 -6
- package/dist/esm/functions/getOwner.mjs +26 -13
- package/dist/esm/functions/getPrice.mjs +2 -2
- package/dist/esm/functions/getProfile.mjs +10 -4
- package/dist/esm/functions/getWrapperData.mjs +4 -5
- package/dist/esm/functions/renewNames.mjs +13 -20
- package/dist/esm/functions/setFuses.mjs +30 -0
- package/dist/esm/functions/wrapName.mjs +9 -19
- package/dist/esm/generated/factories/BaseRegistrarImplementation__factory.mjs +1 -1
- package/dist/esm/generated/factories/BulkRenewal__factory.mjs +1 -1
- package/dist/esm/generated/factories/DNSRegistrar__factory.mjs +1 -1
- package/dist/esm/generated/factories/DNSSECImpl__factory.mjs +1 -1
- package/dist/esm/generated/factories/DefaultReverseResolver__factory.mjs +1 -1
- package/dist/esm/generated/factories/ENSRegistry__factory.mjs +1 -1
- package/dist/esm/generated/factories/ETHRegistrarController__factory.mjs +7 -56
- package/dist/esm/generated/factories/Multicall__factory.mjs +1 -1
- package/dist/esm/generated/factories/NameWrapper__factory.mjs +91 -70
- package/dist/esm/generated/factories/P256SHA256Algorithm__factory.mjs +1 -1
- package/dist/esm/generated/factories/PublicResolver__factory.mjs +84 -1
- package/dist/esm/generated/factories/RSASHA1Algorithm__factory.mjs +1 -1
- package/dist/esm/generated/factories/RSASHA256Algorithm__factory.mjs +1 -1
- package/dist/esm/generated/factories/ReverseRegistrar__factory.mjs +1 -1
- package/dist/esm/generated/factories/Root__factory.mjs +1 -1
- package/dist/esm/generated/factories/SHA1Digest__factory.mjs +1 -1
- package/dist/esm/generated/factories/SHA1NSEC3Digest__factory.mjs +1 -1
- package/dist/esm/generated/factories/SHA256Digest__factory.mjs +1 -1
- package/dist/esm/generated/factories/StaticMetadataService__factory.mjs +1 -1
- package/dist/esm/generated/factories/TLDPublicSuffixList__factory.mjs +1 -1
- package/dist/esm/generated/factories/UniversalResolver__factory.mjs +68 -3
- package/dist/esm/index.mjs +6 -4
- package/dist/esm/utils/ccip.mjs +2 -2
- package/dist/esm/utils/consts.mjs +3 -1
- package/dist/esm/utils/fuses.mjs +218 -53
- package/dist/esm/utils/hexEncodedName.mjs +2 -0
- package/dist/esm/utils/labels.mjs +11 -8
- package/dist/esm/utils/normalise.mjs +1 -1
- package/dist/esm/utils/recordHelpers.mjs +2 -1
- package/dist/esm/utils/registerHelpers.mjs +10 -18
- package/dist/esm/utils/subgraph-types.mjs +0 -0
- package/dist/esm/utils/wrapper.mjs +2 -2
- package/dist/types/functions/commitName.d.ts +0 -1
- package/dist/types/functions/createSubname.d.ts +2 -2
- package/dist/types/functions/getDecryptedName.d.ts +9 -0
- 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/getPrice.d.ts +1 -1
- package/dist/types/functions/getProfile.d.ts +1 -0
- package/dist/types/functions/getRecords.d.ts +1 -0
- package/dist/types/functions/getWrapperData.d.ts +44 -5
- 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/types.d.ts +8 -4
- package/dist/types/functions/wrapName.d.ts +3 -3
- 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 +60 -9
- package/dist/types/static.d.ts +1 -1
- package/dist/types/utils/consts.d.ts +1 -0
- package/dist/types/utils/fuses.d.ts +115 -45
- package/dist/types/utils/hexEncodedName.d.ts +1 -0
- package/dist/types/utils/labels.d.ts +2 -1
- package/dist/types/utils/registerHelpers.d.ts +7 -25
- package/dist/types/utils/subgraph-types.d.ts +284 -0
- package/dist/types/utils/wrapper.d.ts +1 -1
- package/package.json +5 -5
- 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 +5 -6
- package/src/functions/getDecryptedName.test.ts +49 -0
- package/src/functions/getDecryptedName.ts +119 -0
- package/src/functions/getExpiry.ts +1 -1
- package/src/functions/getHistory.ts +59 -25
- package/src/functions/getNames.test.ts +2 -2
- package/src/functions/getNames.ts +26 -13
- package/src/functions/getOwner.test.ts +62 -3
- package/src/functions/getOwner.ts +33 -13
- package/src/functions/getPrice.ts +2 -2
- package/src/functions/getProfile.test.ts +7 -0
- package/src/functions/getProfile.ts +13 -4
- package/src/functions/getWrapperData.test.ts +11 -45
- package/src/functions/getWrapperData.ts +8 -6
- package/src/functions/registerName.test.ts +3 -3
- package/src/functions/registerName.ts +1 -1
- package/src/functions/renewNames.ts +18 -24
- package/src/functions/setFuses.test.ts +240 -0
- package/src/functions/setFuses.ts +44 -0
- package/src/functions/types.ts +8 -4
- package/src/functions/wrapName.test.ts +8 -7
- package/src/functions/wrapName.ts +11 -25
- 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/BaseRegistrarImplementation__factory.ts +1 -1
- package/src/generated/factories/BulkRenewal__factory.ts +1 -1
- package/src/generated/factories/DNSRegistrar__factory.ts +1 -1
- package/src/generated/factories/DNSSECImpl__factory.ts +1 -1
- package/src/generated/factories/DefaultReverseResolver__factory.ts +1 -1
- package/src/generated/factories/ENSRegistry__factory.ts +1 -1
- package/src/generated/factories/ETHRegistrarController__factory.ts +7 -56
- package/src/generated/factories/Multicall__factory.ts +1 -1
- package/src/generated/factories/NameWrapper__factory.ts +91 -70
- package/src/generated/factories/P256SHA256Algorithm__factory.ts +1 -1
- package/src/generated/factories/PublicResolver__factory.ts +84 -1
- package/src/generated/factories/RSASHA1Algorithm__factory.ts +1 -1
- package/src/generated/factories/RSASHA256Algorithm__factory.ts +1 -1
- package/src/generated/factories/ReverseRegistrar__factory.ts +1 -1
- package/src/generated/factories/Root__factory.ts +1 -1
- package/src/generated/factories/SHA1Digest__factory.ts +1 -1
- package/src/generated/factories/SHA1NSEC3Digest__factory.ts +1 -1
- package/src/generated/factories/SHA256Digest__factory.ts +1 -1
- package/src/generated/factories/StaticMetadataService__factory.ts +1 -1
- package/src/generated/factories/TLDPublicSuffixList__factory.ts +1 -1
- package/src/generated/factories/UniversalResolver__factory.ts +68 -3
- package/src/index.ts +15 -14
- package/src/static.ts +1 -1
- package/src/utils/ccip.ts +2 -2
- package/src/utils/consts.ts +1 -0
- package/src/utils/fuses.ts +299 -102
- package/src/utils/hexEncodedName.ts +3 -0
- package/src/utils/labels.ts +13 -11
- package/src/utils/normalise.ts +1 -1
- package/src/utils/recordHelpers.ts +2 -1
- package/src/utils/registerHelpers.ts +14 -42
- package/src/utils/subgraph-types.ts +312 -0
- package/src/utils/wrapper.ts +2 -2
- 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
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/* tslint:disable */
|
|
3
3
|
/* eslint-disable */
|
|
4
4
|
|
|
5
|
-
import { Interface } from '@ethersproject/abi
|
|
5
|
+
import { Interface } from '@ethersproject/abi'
|
|
6
6
|
import { Signer } from '@ethersproject/abstract-signer'
|
|
7
7
|
import { Contract } from '@ethersproject/contracts'
|
|
8
8
|
import type { Provider } from '@ethersproject/providers'
|
|
@@ -59,6 +59,25 @@ const _abi = [
|
|
|
59
59
|
name: 'OffchainLookup',
|
|
60
60
|
type: 'error',
|
|
61
61
|
},
|
|
62
|
+
{
|
|
63
|
+
anonymous: false,
|
|
64
|
+
inputs: [
|
|
65
|
+
{
|
|
66
|
+
indexed: true,
|
|
67
|
+
internalType: 'address',
|
|
68
|
+
name: 'previousOwner',
|
|
69
|
+
type: 'address',
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
indexed: true,
|
|
73
|
+
internalType: 'address',
|
|
74
|
+
name: 'newOwner',
|
|
75
|
+
type: 'address',
|
|
76
|
+
},
|
|
77
|
+
],
|
|
78
|
+
name: 'OwnershipTransferred',
|
|
79
|
+
type: 'event',
|
|
80
|
+
},
|
|
62
81
|
{
|
|
63
82
|
inputs: [
|
|
64
83
|
{
|
|
@@ -146,6 +165,19 @@ const _abi = [
|
|
|
146
165
|
stateMutability: 'view',
|
|
147
166
|
type: 'function',
|
|
148
167
|
},
|
|
168
|
+
{
|
|
169
|
+
inputs: [],
|
|
170
|
+
name: 'owner',
|
|
171
|
+
outputs: [
|
|
172
|
+
{
|
|
173
|
+
internalType: 'address',
|
|
174
|
+
name: '',
|
|
175
|
+
type: 'address',
|
|
176
|
+
},
|
|
177
|
+
],
|
|
178
|
+
stateMutability: 'view',
|
|
179
|
+
type: 'function',
|
|
180
|
+
},
|
|
149
181
|
{
|
|
150
182
|
inputs: [],
|
|
151
183
|
name: 'registry',
|
|
@@ -159,6 +191,13 @@ const _abi = [
|
|
|
159
191
|
stateMutability: 'view',
|
|
160
192
|
type: 'function',
|
|
161
193
|
},
|
|
194
|
+
{
|
|
195
|
+
inputs: [],
|
|
196
|
+
name: 'renounceOwnership',
|
|
197
|
+
outputs: [],
|
|
198
|
+
stateMutability: 'nonpayable',
|
|
199
|
+
type: 'function',
|
|
200
|
+
},
|
|
162
201
|
{
|
|
163
202
|
inputs: [
|
|
164
203
|
{
|
|
@@ -311,7 +350,7 @@ const _abi = [
|
|
|
311
350
|
type: 'address',
|
|
312
351
|
},
|
|
313
352
|
],
|
|
314
|
-
stateMutability: '
|
|
353
|
+
stateMutability: 'view',
|
|
315
354
|
type: 'function',
|
|
316
355
|
},
|
|
317
356
|
{
|
|
@@ -340,7 +379,7 @@ const _abi = [
|
|
|
340
379
|
type: 'address',
|
|
341
380
|
},
|
|
342
381
|
],
|
|
343
|
-
stateMutability: '
|
|
382
|
+
stateMutability: 'view',
|
|
344
383
|
type: 'function',
|
|
345
384
|
},
|
|
346
385
|
{
|
|
@@ -452,6 +491,19 @@ const _abi = [
|
|
|
452
491
|
type: 'address',
|
|
453
492
|
},
|
|
454
493
|
],
|
|
494
|
+
stateMutability: 'view',
|
|
495
|
+
type: 'function',
|
|
496
|
+
},
|
|
497
|
+
{
|
|
498
|
+
inputs: [
|
|
499
|
+
{
|
|
500
|
+
internalType: 'string[]',
|
|
501
|
+
name: '_urls',
|
|
502
|
+
type: 'string[]',
|
|
503
|
+
},
|
|
504
|
+
],
|
|
505
|
+
name: 'setGatewayURLs',
|
|
506
|
+
outputs: [],
|
|
455
507
|
stateMutability: 'nonpayable',
|
|
456
508
|
type: 'function',
|
|
457
509
|
},
|
|
@@ -474,6 +526,19 @@ const _abi = [
|
|
|
474
526
|
stateMutability: 'view',
|
|
475
527
|
type: 'function',
|
|
476
528
|
},
|
|
529
|
+
{
|
|
530
|
+
inputs: [
|
|
531
|
+
{
|
|
532
|
+
internalType: 'address',
|
|
533
|
+
name: 'newOwner',
|
|
534
|
+
type: 'address',
|
|
535
|
+
},
|
|
536
|
+
],
|
|
537
|
+
name: 'transferOwnership',
|
|
538
|
+
outputs: [],
|
|
539
|
+
stateMutability: 'nonpayable',
|
|
540
|
+
type: 'function',
|
|
541
|
+
},
|
|
477
542
|
]
|
|
478
543
|
|
|
479
544
|
export class UniversalResolver__factory {
|
package/src/index.ts
CHANGED
|
@@ -15,14 +15,7 @@ import GqlManager from './GqlManager'
|
|
|
15
15
|
import singleCall from './utils/singleCall'
|
|
16
16
|
import writeTx from './utils/writeTx'
|
|
17
17
|
|
|
18
|
-
export type {
|
|
19
|
-
Fuse,
|
|
20
|
-
FuseArrayPossibilities,
|
|
21
|
-
FuseObj,
|
|
22
|
-
NamedFusesToBurn,
|
|
23
|
-
UnnamedFuseType,
|
|
24
|
-
UnnamedFuseValues,
|
|
25
|
-
} from './utils/fuses'
|
|
18
|
+
export type { ChildFuses, ParentFuses } from './utils/fuses'
|
|
26
19
|
|
|
27
20
|
type ENSOptions = {
|
|
28
21
|
graphURI?: string | null
|
|
@@ -555,6 +548,10 @@ export class ENS {
|
|
|
555
548
|
['contracts'],
|
|
556
549
|
)
|
|
557
550
|
|
|
551
|
+
public getDecryptedName = this.generateRawFunction<
|
|
552
|
+
FunctionTypes['getDecryptedName']
|
|
553
|
+
>('getDecryptedName', ['contracts', 'gqlInstance'])
|
|
554
|
+
|
|
558
555
|
public universalWrapper = this.generateRawFunction<
|
|
559
556
|
FunctionTypes['universalWrapper']
|
|
560
557
|
>('initialGetters', ['contracts'], 'universalWrapper')
|
|
@@ -597,7 +594,7 @@ export class ENS {
|
|
|
597
594
|
|
|
598
595
|
public wrapName = this.generateWriteFunction<FunctionTypes['wrapName']>(
|
|
599
596
|
'wrapName',
|
|
600
|
-
['contracts'
|
|
597
|
+
['contracts'],
|
|
601
598
|
)
|
|
602
599
|
|
|
603
600
|
public unwrapName = this.generateWriteFunction<FunctionTypes['unwrapName']>(
|
|
@@ -605,11 +602,15 @@ export class ENS {
|
|
|
605
602
|
['contracts'],
|
|
606
603
|
)
|
|
607
604
|
|
|
608
|
-
public
|
|
609
|
-
'
|
|
605
|
+
public setFuses = this.generateWriteFunction<FunctionTypes['setFuses']>(
|
|
606
|
+
'setFuses',
|
|
610
607
|
['contracts'],
|
|
611
608
|
)
|
|
612
609
|
|
|
610
|
+
public setChildFuses = this.generateWriteFunction<
|
|
611
|
+
FunctionTypes['setChildFuses']
|
|
612
|
+
>('setFuses', ['contracts'], 'setChildFuses')
|
|
613
|
+
|
|
613
614
|
public importDNSSECName = this.generateWriteFunction<
|
|
614
615
|
FunctionTypes['importDNSSECName']
|
|
615
616
|
>('importDNSSECName', ['contracts', 'provider', 'signer'])
|
|
@@ -640,7 +641,7 @@ export class ENS {
|
|
|
640
641
|
['contracts'],
|
|
641
642
|
)
|
|
642
643
|
|
|
643
|
-
public
|
|
644
|
-
FunctionTypes['
|
|
645
|
-
>('renewNames', ['contracts'], '
|
|
644
|
+
public extendWrappedName = this.generateWriteFunction<
|
|
645
|
+
FunctionTypes['extendWrappedName']
|
|
646
|
+
>('renewNames', ['contracts'], 'extendWrappedName')
|
|
646
647
|
}
|
package/src/static.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { StaticJsonRpcProvider } from '@ethersproject/providers
|
|
1
|
+
import type { StaticJsonRpcProvider } from '@ethersproject/providers'
|
|
2
2
|
import { gql, GraphQLClient } from 'graphql-request'
|
|
3
3
|
import { parse, print, visit } from 'graphql/language'
|
|
4
4
|
import traverse from 'traverse'
|
package/src/utils/ccip.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BigNumber } from '@ethersproject/bignumber
|
|
1
|
+
import { BigNumber } from '@ethersproject/bignumber'
|
|
2
2
|
import {
|
|
3
3
|
arrayify,
|
|
4
4
|
BytesLike,
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
hexDataSlice,
|
|
7
7
|
} from '@ethersproject/bytes'
|
|
8
8
|
import type { BaseProvider, TransactionRequest } from '@ethersproject/providers'
|
|
9
|
-
import { toUtf8String } from '@ethersproject/strings
|
|
9
|
+
import { toUtf8String } from '@ethersproject/strings'
|
|
10
10
|
import type { Transaction } from '@ethersproject/transactions'
|
|
11
11
|
|
|
12
12
|
function bytesPad(value: Uint8Array): Uint8Array {
|
package/src/utils/consts.ts
CHANGED
package/src/utils/fuses.ts
CHANGED
|
@@ -1,160 +1,357 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
// child named fuses
|
|
3
2
|
const CANNOT_UNWRAP = 1
|
|
4
3
|
const CANNOT_BURN_FUSES = 2
|
|
5
4
|
const CANNOT_TRANSFER = 4
|
|
6
5
|
const CANNOT_SET_RESOLVER = 8
|
|
7
6
|
const CANNOT_SET_TTL = 16
|
|
8
7
|
const CANNOT_CREATE_SUBDOMAIN = 32
|
|
9
|
-
|
|
8
|
+
|
|
9
|
+
// parent named fuses
|
|
10
|
+
const PARENT_CANNOT_CONTROL = 0x10000
|
|
11
|
+
const IS_DOT_ETH = 0x20000
|
|
12
|
+
const CAN_EXTEND_EXPIRY = 0x40000
|
|
13
|
+
|
|
14
|
+
// fuse ranges
|
|
15
|
+
export const CHILD_CONTROLLED_FUSES = 0x0000ffff
|
|
16
|
+
export const PARENT_CONTROLLED_FUSES = 0xffff0000
|
|
17
|
+
export const USER_SETTABLE_FUSES = 0xfffdffff
|
|
18
|
+
|
|
19
|
+
// empty fuse
|
|
10
20
|
const CAN_DO_EVERYTHING = 0
|
|
11
21
|
|
|
12
|
-
export const
|
|
22
|
+
export const childFuseEnum = {
|
|
13
23
|
CANNOT_UNWRAP,
|
|
14
24
|
CANNOT_BURN_FUSES,
|
|
15
25
|
CANNOT_TRANSFER,
|
|
16
26
|
CANNOT_SET_RESOLVER,
|
|
17
27
|
CANNOT_SET_TTL,
|
|
18
28
|
CANNOT_CREATE_SUBDOMAIN,
|
|
19
|
-
PARENT_CANNOT_CONTROL,
|
|
20
29
|
} as const
|
|
21
30
|
|
|
22
|
-
export
|
|
31
|
+
export const parentFuseEnum = {
|
|
32
|
+
PARENT_CANNOT_CONTROL,
|
|
33
|
+
CAN_EXTEND_EXPIRY,
|
|
34
|
+
}
|
|
23
35
|
|
|
24
|
-
export const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
36
|
+
export const fullParentFuseEnum = {
|
|
37
|
+
...parentFuseEnum,
|
|
38
|
+
IS_DOT_ETH,
|
|
39
|
+
} as const
|
|
40
|
+
|
|
41
|
+
export const userSettableFuseEnum = {
|
|
42
|
+
...childFuseEnum,
|
|
43
|
+
...parentFuseEnum,
|
|
44
|
+
} as const
|
|
29
45
|
|
|
30
|
-
const fullFuseEnum = {
|
|
31
|
-
...
|
|
46
|
+
export const fullFuseEnum = {
|
|
47
|
+
...userSettableFuseEnum,
|
|
32
48
|
CAN_DO_EVERYTHING,
|
|
33
49
|
}
|
|
34
50
|
|
|
35
|
-
export
|
|
36
|
-
|
|
37
|
-
|
|
51
|
+
export const unnamedChildFuses = [
|
|
52
|
+
64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768,
|
|
53
|
+
] as const
|
|
54
|
+
|
|
55
|
+
export const unnamedParentFuses = [
|
|
56
|
+
0x80000, 0x100000, 0x200000, 0x400000, 0x800000, 0x1000000, 0x2000000,
|
|
57
|
+
0x4000000, 0x8000000, 0x10000000, 0x20000000, 0x40000000, 0x80000000,
|
|
58
|
+
] as const
|
|
59
|
+
|
|
60
|
+
export const unnamedUserSettableFuses = [
|
|
61
|
+
...unnamedChildFuses,
|
|
62
|
+
...unnamedParentFuses,
|
|
63
|
+
] as const
|
|
64
|
+
|
|
65
|
+
export const childFuseKeys = Object.keys(
|
|
66
|
+
childFuseEnum,
|
|
67
|
+
) as (keyof typeof childFuseEnum)[]
|
|
68
|
+
export const parentFuseKeys = Object.keys(
|
|
69
|
+
parentFuseEnum,
|
|
70
|
+
) as (keyof typeof parentFuseEnum)[]
|
|
71
|
+
export const fullParentFuseKeys = Object.keys(
|
|
72
|
+
fullParentFuseEnum,
|
|
73
|
+
) as (keyof typeof fullParentFuseEnum)[]
|
|
74
|
+
export const userSettableFuseKeys = Object.keys(
|
|
75
|
+
userSettableFuseEnum,
|
|
76
|
+
) as (keyof typeof userSettableFuseEnum)[]
|
|
77
|
+
|
|
78
|
+
type FuseType<
|
|
79
|
+
Enum extends Record<string, number>,
|
|
80
|
+
UnnamedTuple extends readonly number[],
|
|
81
|
+
CustomFuses extends string = never,
|
|
82
|
+
> = {
|
|
83
|
+
fuse: keyof Enum
|
|
84
|
+
options: { -readonly [K in keyof Enum]?: boolean }
|
|
85
|
+
current: { [K in keyof Enum]: boolean } & {
|
|
86
|
+
readonly [K in CustomFuses]: boolean
|
|
87
|
+
}
|
|
88
|
+
unnamed: UnnamedTuple
|
|
89
|
+
unnamedValues: UnnamedTuple[number]
|
|
90
|
+
unnamedObject: { [K in UnnamedTuple[number]]: boolean }
|
|
38
91
|
}
|
|
39
|
-
|
|
40
|
-
export type
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
export type FusePropsNamedArray = {
|
|
78
|
-
namedFusesToBurn: NamedFusesToBurn
|
|
92
|
+
|
|
93
|
+
export type ChildFuses = FuseType<
|
|
94
|
+
typeof childFuseEnum,
|
|
95
|
+
typeof unnamedChildFuses,
|
|
96
|
+
'CAN_DO_EVERYTHING'
|
|
97
|
+
>
|
|
98
|
+
export type ParentFuses = FuseType<
|
|
99
|
+
typeof parentFuseEnum,
|
|
100
|
+
typeof unnamedParentFuses
|
|
101
|
+
>
|
|
102
|
+
export type FullParentFuses = FuseType<
|
|
103
|
+
typeof fullParentFuseEnum,
|
|
104
|
+
typeof unnamedParentFuses
|
|
105
|
+
>
|
|
106
|
+
export type UserSettableFuses = FuseType<
|
|
107
|
+
typeof userSettableFuseEnum,
|
|
108
|
+
typeof unnamedUserSettableFuses
|
|
109
|
+
>
|
|
110
|
+
|
|
111
|
+
type InputFuses<NamedFuse extends string, UnnamedFuse extends number> =
|
|
112
|
+
| {
|
|
113
|
+
named: readonly NamedFuse[]
|
|
114
|
+
}
|
|
115
|
+
| {
|
|
116
|
+
unnamed: readonly UnnamedFuse[]
|
|
117
|
+
}
|
|
118
|
+
| {
|
|
119
|
+
named: readonly NamedFuse[]
|
|
120
|
+
unnamed: readonly UnnamedFuse[]
|
|
121
|
+
}
|
|
122
|
+
| {
|
|
123
|
+
number: number
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export type CombinedFuseInput = {
|
|
127
|
+
child: InputFuses<ChildFuses['fuse'], ChildFuses['unnamedValues']>
|
|
128
|
+
parent: InputFuses<ParentFuses['fuse'], ParentFuses['unnamedValues']>
|
|
79
129
|
}
|
|
80
130
|
|
|
81
|
-
|
|
82
|
-
|
|
131
|
+
type FuseRestriction = 'parent' | 'child'
|
|
132
|
+
|
|
133
|
+
const checkNumber = (fuses: number) => {
|
|
134
|
+
if (fuses > 2 ** 32 || fuses < 1) {
|
|
135
|
+
throw new Error(
|
|
136
|
+
`Fuse number must be limited to uint32, ${fuses} was too ${
|
|
137
|
+
fuses < 1 ? 'low' : 'high'
|
|
138
|
+
}.`,
|
|
139
|
+
)
|
|
140
|
+
} else if (fuses % 1 !== 0) {
|
|
141
|
+
throw new Error(`Fuse number must be an integer, ${fuses} was not.`)
|
|
142
|
+
} else if ((fuses & USER_SETTABLE_FUSES) !== fuses) {
|
|
143
|
+
throw new Error(
|
|
144
|
+
`Fuse number must be limited to user settable fuses, ${fuses} was not.`,
|
|
145
|
+
)
|
|
146
|
+
}
|
|
83
147
|
}
|
|
84
148
|
|
|
85
|
-
|
|
86
|
-
|
|
149
|
+
const testFuses = (fuses: any) => {
|
|
150
|
+
if ('named' in fuses && fuses.named.length > 0) {
|
|
151
|
+
return true
|
|
152
|
+
}
|
|
153
|
+
if ('unnamed' in fuses && fuses.unnamed.length > 0) {
|
|
154
|
+
return true
|
|
155
|
+
}
|
|
156
|
+
if ('number' in fuses && fuses.number !== 0) {
|
|
157
|
+
return true
|
|
158
|
+
}
|
|
159
|
+
return false
|
|
87
160
|
}
|
|
88
161
|
|
|
89
|
-
export
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
162
|
+
export const hasFuses = (fuses: any) => {
|
|
163
|
+
if (typeof fuses === 'number') {
|
|
164
|
+
return fuses !== 0
|
|
165
|
+
}
|
|
93
166
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
167
|
+
if (typeof fuses === 'object') {
|
|
168
|
+
if ('child' in fuses && testFuses(fuses.child)) {
|
|
169
|
+
return true
|
|
170
|
+
}
|
|
171
|
+
if ('parent' in fuses && testFuses(fuses.parent)) {
|
|
172
|
+
return true
|
|
173
|
+
}
|
|
174
|
+
if (testFuses(fuses)) {
|
|
175
|
+
return true
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return false
|
|
179
|
+
}
|
|
98
180
|
|
|
181
|
+
export function encodeFuses(fuses: Partial<CombinedFuseInput> | number): number
|
|
182
|
+
export function encodeFuses(
|
|
183
|
+
fuses: CombinedFuseInput['child'],
|
|
184
|
+
restrictTo: 'child',
|
|
185
|
+
): number
|
|
186
|
+
export function encodeFuses(
|
|
187
|
+
fuses: CombinedFuseInput['parent'],
|
|
188
|
+
restrictTo: 'parent',
|
|
189
|
+
): number
|
|
190
|
+
export function encodeFuses<T extends FuseRestriction>(
|
|
191
|
+
fuses: CombinedFuseInput[T],
|
|
192
|
+
restrictTo?: T,
|
|
193
|
+
) {
|
|
99
194
|
let encodedFuses: number = 0
|
|
100
195
|
|
|
101
|
-
if (
|
|
102
|
-
if (
|
|
103
|
-
throw new Error(
|
|
104
|
-
`Fuse number must be limited to uint32, ${
|
|
105
|
-
fuses.fuseNumberToBurn
|
|
106
|
-
} was too ${fuses.fuseNumberToBurn < 1 ? 'low' : 'high'}.`,
|
|
107
|
-
)
|
|
108
|
-
} else if (fuses.fuseNumberToBurn % 1 !== 0) {
|
|
109
|
-
throw new Error(
|
|
110
|
-
`Fuse number must be an integer, ${fuses.fuseNumberToBurn} was not.`,
|
|
111
|
-
)
|
|
196
|
+
if (typeof fuses === 'number') {
|
|
197
|
+
if (restrictTo) {
|
|
198
|
+
throw new Error('Cannot specify an exact fuse value when restricted.')
|
|
112
199
|
}
|
|
113
|
-
|
|
200
|
+
checkNumber(fuses)
|
|
201
|
+
|
|
202
|
+
encodedFuses = fuses
|
|
114
203
|
} else {
|
|
115
|
-
|
|
116
|
-
|
|
204
|
+
let fusesRef = fuses as unknown as CombinedFuseInput
|
|
205
|
+
let allowedNamed: readonly UserSettableFuses['fuse'][] = []
|
|
206
|
+
let allowedUnnamed: readonly UserSettableFuses['unnamedValues'][] = []
|
|
207
|
+
|
|
208
|
+
let namedArray: readonly UserSettableFuses['fuse'][] = []
|
|
209
|
+
let unnamedArray: readonly UserSettableFuses['unnamedValues'][] = []
|
|
210
|
+
|
|
211
|
+
if (restrictTo) {
|
|
212
|
+
if ('parent' in fuses || 'child' in fuses) {
|
|
213
|
+
throw new Error("Can't specify fuse category when restricted.")
|
|
214
|
+
}
|
|
215
|
+
allowedNamed = restrictTo === 'child' ? childFuseKeys : parentFuseKeys
|
|
216
|
+
allowedUnnamed =
|
|
217
|
+
restrictTo === 'child' ? unnamedChildFuses : unnamedParentFuses
|
|
218
|
+
|
|
219
|
+
fusesRef = { [restrictTo]: fuses } as unknown as CombinedFuseInput
|
|
220
|
+
} else {
|
|
221
|
+
allowedNamed = userSettableFuseKeys
|
|
222
|
+
allowedUnnamed = unnamedUserSettableFuses
|
|
223
|
+
}
|
|
224
|
+
if ('parent' in fusesRef) {
|
|
225
|
+
if ('named' in fusesRef.parent) namedArray = fusesRef.parent.named
|
|
226
|
+
if ('unnamed' in fusesRef.parent) unnamedArray = fusesRef.parent.unnamed
|
|
227
|
+
if ('number' in fusesRef.parent) {
|
|
228
|
+
if ('named' in fusesRef.parent || 'unnamed' in fusesRef.parent) {
|
|
229
|
+
throw new Error(
|
|
230
|
+
'Cannot specify both a fuse number and named/unnamed fuses.',
|
|
231
|
+
)
|
|
232
|
+
}
|
|
233
|
+
checkNumber(fusesRef.parent.number)
|
|
234
|
+
|
|
235
|
+
if (
|
|
236
|
+
(fusesRef.parent.number & PARENT_CONTROLLED_FUSES) !==
|
|
237
|
+
fusesRef.parent.number
|
|
238
|
+
) {
|
|
239
|
+
throw new Error(
|
|
240
|
+
"Cannot specify a fuse value to set that is outside of the parent's control.",
|
|
241
|
+
)
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
encodedFuses |= fusesRef.parent.number
|
|
245
|
+
}
|
|
117
246
|
}
|
|
118
|
-
if (
|
|
119
|
-
|
|
120
|
-
|
|
247
|
+
if ('child' in fusesRef) {
|
|
248
|
+
if ('named' in fusesRef.child)
|
|
249
|
+
namedArray = [...namedArray, ...fusesRef.child.named]
|
|
250
|
+
if ('unnamed' in fusesRef.child)
|
|
251
|
+
unnamedArray = [...unnamedArray, ...fusesRef.child.unnamed]
|
|
252
|
+
if ('number' in fusesRef.child) {
|
|
253
|
+
if ('named' in fusesRef.child || 'unnamed' in fusesRef.child) {
|
|
254
|
+
throw new Error(
|
|
255
|
+
'Cannot specify both a fuse number and named/unnamed fuses.',
|
|
256
|
+
)
|
|
257
|
+
}
|
|
258
|
+
checkNumber(fusesRef.child.number)
|
|
259
|
+
|
|
260
|
+
if (
|
|
261
|
+
(fusesRef.child.number & CHILD_CONTROLLED_FUSES) !==
|
|
262
|
+
fusesRef.child.number
|
|
263
|
+
) {
|
|
264
|
+
throw new Error(
|
|
265
|
+
"Cannot specify a fuse value to set that is outside of the owner's control.",
|
|
266
|
+
)
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
encodedFuses |= fusesRef.child.number
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
if (!namedArray.length && !unnamedArray.length && !encodedFuses) {
|
|
274
|
+
throw new Error('Must specify at least one fuse.')
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
for (const fuse of namedArray) {
|
|
278
|
+
if (!allowedNamed.includes(fuse)) {
|
|
279
|
+
if (!userSettableFuseKeys.includes(fuse)) {
|
|
121
280
|
throw new Error(`${fuse} is not a valid named fuse.`)
|
|
122
281
|
}
|
|
123
|
-
|
|
282
|
+
throw new Error(`Fuse ${fuse} is not allowed for this operation.`)
|
|
124
283
|
}
|
|
284
|
+
encodedFuses |= userSettableFuseEnum[fuse]
|
|
125
285
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
if (!
|
|
286
|
+
for (const fuse of unnamedArray) {
|
|
287
|
+
if (!allowedUnnamed.includes(fuse)) {
|
|
288
|
+
if (!unnamedUserSettableFuses.includes(fuse)) {
|
|
129
289
|
throw new Error(
|
|
130
|
-
`${fuse} is not a valid unnamed fuse. If you are trying to
|
|
290
|
+
`${fuse} is not a valid unnamed fuse. If you are trying to set a named fuse, use the named property.`,
|
|
131
291
|
)
|
|
132
292
|
}
|
|
133
|
-
|
|
293
|
+
throw new Error(`Fuse ${fuse} is not allowed for this operation.`)
|
|
134
294
|
}
|
|
295
|
+
encodedFuses |= fuse
|
|
135
296
|
}
|
|
136
297
|
}
|
|
137
298
|
|
|
138
299
|
return encodedFuses
|
|
139
300
|
}
|
|
140
301
|
|
|
141
|
-
|
|
142
|
-
const bnFuses = BigNumber.from(fuses)
|
|
143
|
-
|
|
302
|
+
const decodeNamedFuses = (fuses: number, arr: readonly string[]) => {
|
|
144
303
|
const fuseObj = Object.fromEntries(
|
|
145
|
-
|
|
304
|
+
arr.map((fuse) => [
|
|
146
305
|
fuse,
|
|
147
|
-
|
|
306
|
+
(fuses &
|
|
307
|
+
userSettableFuseEnum[fuse as keyof typeof userSettableFuseEnum]) >
|
|
308
|
+
0,
|
|
148
309
|
]),
|
|
149
310
|
)
|
|
150
311
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
} else {
|
|
154
|
-
fuseObj.CAN_DO_EVERYTHING = false
|
|
155
|
-
}
|
|
312
|
+
return fuseObj
|
|
313
|
+
}
|
|
156
314
|
|
|
157
|
-
|
|
315
|
+
const decodeUnnamedFuses = (fuses: number, arr: readonly number[]) => {
|
|
316
|
+
const fuseObj = Object.fromEntries(
|
|
317
|
+
arr.map((fuse) => [fuse, (fuses & fuse) > 0]),
|
|
318
|
+
)
|
|
319
|
+
|
|
320
|
+
return fuseObj
|
|
158
321
|
}
|
|
159
322
|
|
|
323
|
+
export const decodeFuses = (fuses: number) => {
|
|
324
|
+
const parentNamedFuses = decodeNamedFuses(
|
|
325
|
+
fuses,
|
|
326
|
+
fullParentFuseKeys,
|
|
327
|
+
) as FullParentFuses['current']
|
|
328
|
+
const parentUnnamedFuses = decodeUnnamedFuses(
|
|
329
|
+
fuses,
|
|
330
|
+
unnamedParentFuses,
|
|
331
|
+
) as ParentFuses['unnamedObject']
|
|
332
|
+
|
|
333
|
+
const childNamedFuses = decodeNamedFuses(
|
|
334
|
+
fuses,
|
|
335
|
+
childFuseKeys,
|
|
336
|
+
) as ChildFuses['current']
|
|
337
|
+
const childUnnamedFuses = decodeUnnamedFuses(
|
|
338
|
+
fuses,
|
|
339
|
+
unnamedChildFuses,
|
|
340
|
+
) as ChildFuses['unnamedObject']
|
|
341
|
+
|
|
342
|
+
return {
|
|
343
|
+
parent: {
|
|
344
|
+
...parentNamedFuses,
|
|
345
|
+
unnamed: parentUnnamedFuses,
|
|
346
|
+
},
|
|
347
|
+
child: {
|
|
348
|
+
...childNamedFuses,
|
|
349
|
+
CAN_DO_EVERYTHING: (fuses & CHILD_CONTROLLED_FUSES) === 0,
|
|
350
|
+
unnamed: childUnnamedFuses,
|
|
351
|
+
},
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
export type AllCurrentFuses = ReturnType<typeof decodeFuses>
|
|
356
|
+
|
|
160
357
|
export default fullFuseEnum
|