@ensdomains/ensjs 3.0.0-alpha.1 → 3.0.0-alpha.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/cjs/GqlManager.d.ts +3 -0
- package/dist/cjs/GqlManager.js +62 -2
- package/dist/cjs/contracts/baseRegistrar.d.ts +1 -1
- package/dist/cjs/contracts/index.d.ts +3 -3
- package/dist/cjs/contracts/multicall.d.ts +1 -1
- package/dist/cjs/contracts/registry.d.ts +1 -1
- package/dist/cjs/functions/burnFuses.d.ts +3 -2
- package/dist/cjs/functions/burnFuses.js +4 -8
- package/dist/cjs/functions/createSubname.d.ts +3 -5
- package/dist/cjs/functions/createSubname.js +7 -8
- package/dist/cjs/functions/deleteSubname.d.ts +3 -3
- package/dist/cjs/functions/deleteSubname.js +6 -2
- package/dist/cjs/functions/getDNSOwner.d.ts +7 -0
- package/dist/cjs/functions/getDNSOwner.js +81 -0
- package/dist/cjs/functions/getExpiry.d.ts +9 -2
- package/dist/cjs/functions/getExpiry.js +52 -7
- package/dist/cjs/functions/getFuses.d.ts +2 -3
- package/dist/cjs/functions/getFuses.js +6 -14
- package/dist/cjs/functions/getHistory.d.ts +0 -30
- package/dist/cjs/functions/getHistory.js +3 -99
- package/dist/cjs/functions/getName.d.ts +2 -2
- package/dist/cjs/functions/getName.js +1 -1
- package/dist/cjs/functions/getOwner.js +7 -6
- package/dist/cjs/functions/getProfile.d.ts +4 -1
- package/dist/cjs/functions/getProfile.js +102 -24
- package/dist/cjs/functions/getRecords.d.ts +1 -0
- package/dist/cjs/functions/getSpecificRecord.js +30 -6
- package/dist/cjs/functions/getSubnames.d.ts +1 -1
- package/dist/cjs/functions/getSubnames.js +7 -7
- package/dist/cjs/functions/setName.d.ts +4 -3
- package/dist/cjs/functions/setName.js +5 -10
- package/dist/cjs/functions/setRecord.d.ts +18 -0
- package/dist/cjs/functions/setRecord.js +27 -0
- package/dist/cjs/functions/setRecords.d.ts +4 -2
- package/dist/cjs/functions/setRecords.js +14 -12
- package/dist/cjs/functions/setResolver.d.ts +4 -4
- package/dist/cjs/functions/setResolver.js +6 -12
- package/dist/cjs/functions/transferName.d.ts +4 -3
- package/dist/cjs/functions/transferName.js +9 -13
- package/dist/cjs/functions/transferSubname.d.ts +13 -3
- package/dist/cjs/functions/transferSubname.js +7 -8
- package/dist/cjs/functions/unwrapName.d.ts +4 -3
- package/dist/cjs/functions/unwrapName.js +5 -9
- package/dist/cjs/functions/wrapName.d.ts +7 -3
- package/dist/cjs/functions/wrapName.js +38 -36
- package/dist/cjs/generated/BaseRegistrarImplementation.d.ts +222 -201
- package/dist/cjs/generated/DNSRegistrar.d.ts +68 -64
- package/dist/cjs/generated/DNSSECImpl.d.ts +111 -111
- package/dist/cjs/generated/DefaultReverseResolver.d.ts +17 -17
- package/dist/cjs/generated/ENSRegistry.d.ts +126 -111
- package/dist/cjs/generated/ETHRegistrarController.d.ts +111 -109
- package/dist/cjs/generated/Multicall.d.ts +60 -60
- package/dist/cjs/generated/NameWrapper.d.ts +493 -354
- package/dist/cjs/generated/P256SHA256Algorithm.d.ts +11 -7
- package/dist/cjs/generated/PublicResolver.d.ts +259 -235
- package/dist/cjs/generated/RSASHA1Algorithm.d.ts +11 -7
- package/dist/cjs/generated/RSASHA256Algorithm.d.ts +11 -7
- package/dist/cjs/generated/ReverseRegistrar.d.ts +112 -103
- package/dist/cjs/generated/Root.d.ts +77 -77
- package/dist/cjs/generated/SHA1Digest.d.ts +7 -7
- package/dist/cjs/generated/SHA1NSEC3Digest.d.ts +11 -7
- package/dist/cjs/generated/SHA256Digest.d.ts +7 -7
- package/dist/cjs/generated/StaticMetadataService.d.ts +7 -7
- package/dist/cjs/generated/TLDPublicSuffixList.d.ts +7 -7
- package/dist/cjs/generated/UniversalResolver.d.ts +31 -31
- package/dist/cjs/generated/common.d.ts +1 -0
- package/dist/cjs/generated/factories/DNSRegistrar__factory.d.ts +3 -15
- package/dist/cjs/generated/factories/DNSRegistrar__factory.js +3 -26
- package/dist/cjs/generated/factories/DNSSECImpl__factory.d.ts +3 -15
- package/dist/cjs/generated/factories/DNSSECImpl__factory.js +3 -26
- package/dist/cjs/generated/factories/ETHRegistrarController__factory.js +14 -4
- package/dist/cjs/generated/factories/NameWrapper__factory.js +210 -79
- package/dist/cjs/generated/factories/P256SHA256Algorithm__factory.d.ts +3 -15
- package/dist/cjs/generated/factories/P256SHA256Algorithm__factory.js +3 -26
- package/dist/cjs/generated/factories/RSASHA1Algorithm__factory.d.ts +3 -15
- package/dist/cjs/generated/factories/RSASHA1Algorithm__factory.js +3 -26
- package/dist/cjs/generated/factories/RSASHA256Algorithm__factory.d.ts +3 -15
- package/dist/cjs/generated/factories/RSASHA256Algorithm__factory.js +3 -26
- package/dist/cjs/generated/factories/SHA1Digest__factory.d.ts +3 -15
- package/dist/cjs/generated/factories/SHA1Digest__factory.js +3 -26
- package/dist/cjs/generated/factories/SHA1NSEC3Digest__factory.d.ts +3 -15
- package/dist/cjs/generated/factories/SHA1NSEC3Digest__factory.js +3 -26
- package/dist/cjs/generated/factories/SHA256Digest__factory.d.ts +3 -15
- package/dist/cjs/generated/factories/SHA256Digest__factory.js +3 -26
- package/dist/cjs/generated/factories/TLDPublicSuffixList__factory.d.ts +3 -15
- package/dist/cjs/generated/factories/TLDPublicSuffixList__factory.js +3 -26
- package/dist/cjs/generated/factories/index.d.ts +14 -0
- package/dist/cjs/generated/factories/index.js +29 -1
- package/dist/cjs/generated/index.d.ts +29 -1
- package/dist/cjs/generated/index.js +31 -3
- package/dist/cjs/index.d.ts +62 -84
- package/dist/cjs/index.js +44 -21
- package/dist/cjs/utils/labels.js +5 -4
- package/dist/cjs/utils/makeHashIndexes.js +2 -2
- package/dist/cjs/utils/normalise.d.ts +1 -0
- package/dist/cjs/utils/normalise.js +27 -1
- package/dist/cjs/utils/recordHelpers.d.ts +3 -0
- package/dist/cjs/utils/recordHelpers.js +42 -15
- package/dist/cjs/utils/registerHelpers.js +3 -4
- package/dist/cjs/utils/wrapperExpiry.d.ts +5 -0
- package/dist/cjs/utils/wrapperExpiry.js +30 -0
- package/dist/cjs/utils/writeTx.d.ts +4 -0
- package/dist/cjs/utils/writeTx.js +3 -0
- package/dist/esm/GqlManager.d.ts +3 -0
- package/dist/esm/GqlManager.js +58 -2
- package/dist/esm/contracts/baseRegistrar.d.ts +1 -1
- package/dist/esm/contracts/index.d.ts +3 -3
- package/dist/esm/contracts/multicall.d.ts +1 -1
- package/dist/esm/contracts/registry.d.ts +1 -1
- package/dist/esm/functions/burnFuses.d.ts +3 -2
- package/dist/esm/functions/burnFuses.js +4 -8
- package/dist/esm/functions/createSubname.d.ts +3 -5
- package/dist/esm/functions/createSubname.js +7 -8
- package/dist/esm/functions/deleteSubname.d.ts +3 -3
- package/dist/esm/functions/deleteSubname.js +6 -2
- package/dist/esm/functions/getDNSOwner.d.ts +7 -0
- package/dist/esm/functions/getDNSOwner.js +51 -0
- package/dist/esm/functions/getExpiry.d.ts +9 -2
- package/dist/esm/functions/getExpiry.js +52 -7
- package/dist/esm/functions/getFuses.d.ts +2 -3
- package/dist/esm/functions/getFuses.js +7 -15
- package/dist/esm/functions/getHistory.d.ts +0 -30
- package/dist/esm/functions/getHistory.js +2 -96
- package/dist/esm/functions/getName.d.ts +2 -2
- package/dist/esm/functions/getName.js +1 -1
- package/dist/esm/functions/getOwner.js +7 -6
- package/dist/esm/functions/getProfile.d.ts +4 -1
- package/dist/esm/functions/getProfile.js +102 -24
- package/dist/esm/functions/getRecords.d.ts +1 -0
- package/dist/esm/functions/getSpecificRecord.js +30 -6
- package/dist/esm/functions/getSubnames.d.ts +1 -1
- package/dist/esm/functions/getSubnames.js +4 -4
- package/dist/esm/functions/setName.d.ts +4 -3
- package/dist/esm/functions/setName.js +5 -10
- package/dist/esm/functions/setRecord.d.ts +18 -0
- package/dist/esm/functions/setRecord.js +24 -0
- package/dist/esm/functions/setRecords.d.ts +4 -2
- package/dist/esm/functions/setRecords.js +14 -12
- package/dist/esm/functions/setResolver.d.ts +4 -4
- package/dist/esm/functions/setResolver.js +6 -12
- package/dist/esm/functions/transferName.d.ts +4 -3
- package/dist/esm/functions/transferName.js +9 -13
- package/dist/esm/functions/transferSubname.d.ts +13 -3
- package/dist/esm/functions/transferSubname.js +7 -8
- package/dist/esm/functions/unwrapName.d.ts +4 -3
- package/dist/esm/functions/unwrapName.js +5 -9
- package/dist/esm/functions/wrapName.d.ts +7 -3
- package/dist/esm/functions/wrapName.js +38 -36
- package/dist/esm/generated/BaseRegistrarImplementation.d.ts +222 -201
- package/dist/esm/generated/DNSRegistrar.d.ts +68 -64
- package/dist/esm/generated/DNSSECImpl.d.ts +111 -111
- package/dist/esm/generated/DefaultReverseResolver.d.ts +17 -17
- package/dist/esm/generated/ENSRegistry.d.ts +126 -111
- package/dist/esm/generated/ETHRegistrarController.d.ts +111 -109
- package/dist/esm/generated/Multicall.d.ts +60 -60
- package/dist/esm/generated/NameWrapper.d.ts +493 -354
- package/dist/esm/generated/P256SHA256Algorithm.d.ts +11 -7
- package/dist/esm/generated/PublicResolver.d.ts +259 -235
- package/dist/esm/generated/RSASHA1Algorithm.d.ts +11 -7
- package/dist/esm/generated/RSASHA256Algorithm.d.ts +11 -7
- package/dist/esm/generated/ReverseRegistrar.d.ts +112 -103
- package/dist/esm/generated/Root.d.ts +77 -77
- package/dist/esm/generated/SHA1Digest.d.ts +7 -7
- package/dist/esm/generated/SHA1NSEC3Digest.d.ts +11 -7
- package/dist/esm/generated/SHA256Digest.d.ts +7 -7
- package/dist/esm/generated/StaticMetadataService.d.ts +7 -7
- package/dist/esm/generated/TLDPublicSuffixList.d.ts +7 -7
- package/dist/esm/generated/UniversalResolver.d.ts +31 -31
- package/dist/esm/generated/common.d.ts +1 -0
- package/dist/esm/generated/factories/DNSRegistrar__factory.d.ts +3 -15
- package/dist/esm/generated/factories/DNSRegistrar__factory.js +2 -25
- package/dist/esm/generated/factories/DNSSECImpl__factory.d.ts +3 -15
- package/dist/esm/generated/factories/DNSSECImpl__factory.js +2 -25
- package/dist/esm/generated/factories/ETHRegistrarController__factory.js +14 -4
- package/dist/esm/generated/factories/NameWrapper__factory.js +210 -79
- package/dist/esm/generated/factories/P256SHA256Algorithm__factory.d.ts +3 -15
- package/dist/esm/generated/factories/P256SHA256Algorithm__factory.js +2 -25
- package/dist/esm/generated/factories/RSASHA1Algorithm__factory.d.ts +3 -15
- package/dist/esm/generated/factories/RSASHA1Algorithm__factory.js +2 -25
- package/dist/esm/generated/factories/RSASHA256Algorithm__factory.d.ts +3 -15
- package/dist/esm/generated/factories/RSASHA256Algorithm__factory.js +2 -25
- package/dist/esm/generated/factories/SHA1Digest__factory.d.ts +3 -15
- package/dist/esm/generated/factories/SHA1Digest__factory.js +2 -25
- package/dist/esm/generated/factories/SHA1NSEC3Digest__factory.d.ts +3 -15
- package/dist/esm/generated/factories/SHA1NSEC3Digest__factory.js +2 -25
- package/dist/esm/generated/factories/SHA256Digest__factory.d.ts +3 -15
- package/dist/esm/generated/factories/SHA256Digest__factory.js +2 -25
- package/dist/esm/generated/factories/TLDPublicSuffixList__factory.d.ts +3 -15
- package/dist/esm/generated/factories/TLDPublicSuffixList__factory.js +2 -25
- package/dist/esm/generated/factories/index.d.ts +14 -0
- package/dist/esm/generated/factories/index.js +14 -0
- package/dist/esm/generated/index.d.ts +29 -1
- package/dist/esm/generated/index.js +15 -1
- package/dist/esm/index.d.ts +62 -84
- package/dist/esm/index.js +44 -21
- package/dist/esm/utils/labels.js +5 -4
- package/dist/esm/utils/makeHashIndexes.js +2 -2
- package/dist/esm/utils/normalise.d.ts +1 -0
- package/dist/esm/utils/normalise.js +25 -0
- package/dist/esm/utils/recordHelpers.d.ts +3 -0
- package/dist/esm/utils/recordHelpers.js +40 -14
- package/dist/esm/utils/registerHelpers.js +3 -4
- package/dist/esm/utils/wrapperExpiry.d.ts +5 -0
- package/dist/esm/utils/wrapperExpiry.js +26 -0
- package/dist/esm/utils/writeTx.d.ts +4 -0
- package/dist/esm/utils/writeTx.js +1 -0
- package/package.json +24 -14
- package/src/@types/dns-packet/index.d.ts +114 -0
- package/src/ABIs/Multicall.json +452 -0
- package/src/GqlManager.test.ts +170 -0
- package/src/GqlManager.ts +67 -2
- package/src/contracts/index.ts +1 -1
- package/src/{tests → functions}/batch.test.ts +7 -7
- package/src/{tests → functions}/batchWrappers.test.ts +6 -6
- package/src/{tests → functions}/burnFuses.test.ts +12 -15
- package/src/functions/burnFuses.ts +9 -11
- package/src/{tests → functions}/createSubname.test.ts +9 -17
- package/src/functions/createSubname.ts +20 -14
- package/src/{tests → functions}/deleteSubname.test.ts +12 -31
- package/src/functions/deleteSubname.ts +10 -12
- package/src/functions/getDNSOwner.test.ts +118 -0
- package/src/functions/getDNSOwner.ts +61 -0
- package/src/functions/getExpiry.test.ts +59 -0
- package/src/functions/getExpiry.ts +87 -9
- package/src/{tests → functions}/getFuses.test.ts +16 -37
- package/src/functions/getFuses.ts +12 -17
- package/src/functions/getHistory.test.ts +29 -0
- package/src/functions/getHistory.ts +2 -127
- package/src/{tests → functions}/getName.test.ts +6 -6
- package/src/functions/getName.ts +1 -1
- package/src/{tests → functions}/getNames.test.ts +98 -69
- package/src/{tests → functions}/getOwner.test.ts +21 -24
- package/src/functions/getOwner.ts +7 -7
- package/src/functions/getProfile.test.ts +143 -0
- package/src/functions/getProfile.ts +151 -24
- package/src/functions/getRecords.ts +1 -0
- package/src/functions/getResolver.test.ts +15 -0
- package/src/{tests → functions}/getSpecificRecord.test.ts +17 -14
- package/src/functions/getSpecificRecord.ts +38 -12
- package/src/functions/getSubnames.test.ts +35 -0
- package/src/functions/getSubnames.ts +76 -67
- package/src/{tests → functions}/makeCommitment.test.ts +2 -2
- package/src/functions/normalise.test.ts +22 -0
- package/src/{tests → functions}/setName.test.ts +11 -11
- package/src/functions/setName.ts +15 -17
- package/src/functions/setRecord.test.ts +103 -0
- package/src/functions/setRecord.ts +63 -0
- package/src/{tests → functions}/setRecords.test.ts +16 -13
- package/src/functions/setRecords.ts +22 -16
- package/src/{tests → functions}/setResolver.test.ts +13 -19
- package/src/functions/setResolver.ts +15 -20
- package/src/{tests → functions}/transferName.test.ts +20 -35
- package/src/functions/transferName.ts +19 -22
- package/src/{tests → functions}/transferSubname.test.ts +14 -33
- package/src/functions/transferSubname.ts +39 -13
- package/src/{tests → functions}/unwrapName.test.ts +16 -30
- package/src/functions/unwrapName.ts +20 -15
- package/src/functions/wrapName.test.ts +142 -0
- package/src/functions/wrapName.ts +63 -49
- package/src/generated/BaseRegistrarImplementation.ts +382 -296
- package/src/generated/DNSRegistrar.ts +103 -89
- package/src/generated/DNSSECImpl.ts +180 -149
- package/src/generated/DefaultReverseResolver.ts +37 -21
- package/src/generated/ENSRegistry.ts +257 -184
- package/src/generated/ETHRegistrarController.ts +252 -191
- package/src/generated/Multicall.ts +73 -57
- package/src/generated/NameWrapper.ts +979 -649
- package/src/generated/P256SHA256Algorithm.ts +21 -16
- package/src/generated/PublicResolver.ts +452 -362
- package/src/generated/RSASHA1Algorithm.ts +21 -16
- package/src/generated/RSASHA256Algorithm.ts +21 -16
- package/src/generated/ReverseRegistrar.ts +193 -141
- package/src/generated/Root.ts +146 -86
- package/src/generated/SHA1Digest.ts +12 -11
- package/src/generated/SHA1NSEC3Digest.ts +21 -16
- package/src/generated/SHA256Digest.ts +12 -11
- package/src/generated/StaticMetadataService.ts +22 -6
- package/src/generated/TLDPublicSuffixList.ts +10 -6
- package/src/generated/UniversalResolver.ts +44 -40
- package/src/generated/common.ts +2 -0
- package/src/generated/factories/DNSRegistrar__factory.ts +4 -56
- package/src/generated/factories/DNSSECImpl__factory.ts +4 -49
- package/src/generated/factories/ETHRegistrarController__factory.ts +14 -4
- package/src/generated/factories/NameWrapper__factory.ts +210 -79
- package/src/generated/factories/P256SHA256Algorithm__factory.ts +4 -40
- package/src/generated/factories/RSASHA1Algorithm__factory.ts +4 -40
- package/src/generated/factories/RSASHA256Algorithm__factory.ts +4 -40
- package/src/generated/factories/SHA1Digest__factory.ts +4 -40
- package/src/generated/factories/SHA1NSEC3Digest__factory.ts +4 -40
- package/src/generated/factories/SHA256Digest__factory.ts +4 -40
- package/src/generated/factories/TLDPublicSuffixList__factory.ts +4 -40
- package/src/generated/factories/index.ts +14 -0
- package/src/generated/index.ts +29 -1
- package/src/index.ts +117 -47
- package/src/tests/populateTransaction.test.ts +40 -0
- package/src/tests/setup.ts +17 -13
- package/src/tests/signerInjection.test.ts +46 -0
- package/src/tests/withProvider.test.ts +3 -3
- package/src/utils/labels.ts +6 -4
- package/src/utils/makeHashIndexes.ts +4 -4
- package/src/utils/normalise.ts +29 -0
- package/src/utils/recordHelpers.ts +52 -18
- package/src/utils/registerHelpers.ts +3 -4
- package/src/utils/wrapperExpiry.ts +31 -0
- package/src/utils/writeTx.ts +6 -0
- package/dist/cjs/contracts/doNotCallOnChainUniversalResolverProxy.d.ts +0 -3
- package/dist/cjs/contracts/doNotCallOnChainUniversalResolverProxy.js +0 -4
- package/dist/cjs/generated/DoNotCallOnChainUniversalResolverProxy.d.ts +0 -144
- package/dist/cjs/generated/DoNotCallOnChainUniversalResolverProxy.js +0 -2
- package/dist/cjs/generated/factories/DoNotCallOnChainUniversalResolverProxy__factory.d.ts +0 -56
- package/dist/cjs/generated/factories/DoNotCallOnChainUniversalResolverProxy__factory.js +0 -171
- package/dist/esm/contracts/doNotCallOnChainUniversalResolverProxy.d.ts +0 -3
- package/dist/esm/contracts/doNotCallOnChainUniversalResolverProxy.js +0 -2
- package/dist/esm/generated/DoNotCallOnChainUniversalResolverProxy.d.ts +0 -144
- package/dist/esm/generated/DoNotCallOnChainUniversalResolverProxy.js +0 -1
- package/dist/esm/generated/factories/DoNotCallOnChainUniversalResolverProxy__factory.d.ts +0 -56
- package/dist/esm/generated/factories/DoNotCallOnChainUniversalResolverProxy__factory.js +0 -167
- package/src/ABIs/ETHRegistrarController.json +0 -494
- package/src/ABIs/NameWrapper.json +0 -1183
- package/src/ABIs/PublicResolver.json +0 -875
- package/src/ABIs/ReverseRegistrar.json +0 -323
- package/src/ABIs/StaticMetadataService.json +0 -32
- package/src/ABIs/UniversalResolver.json +0 -187
- package/src/contracts/doNotCallOnChainUniversalResolverProxy.ts +0 -5
- package/src/generated/DoNotCallOnChainUniversalResolverProxy.ts +0 -285
- package/src/generated/factories/DoNotCallOnChainUniversalResolverProxy__factory.ts +0 -186
- package/src/tests/getExpiry.test.ts +0 -37
- package/src/tests/getHistory.test.ts +0 -101
- package/src/tests/getProfile.test.ts +0 -102
- package/src/tests/getResolver.test.ts +0 -19
- package/src/tests/getSubnames.test.ts +0 -31
- package/src/tests/wrapName.test.ts +0 -67
|
@@ -10,8 +10,8 @@ declare const _default: {
|
|
|
10
10
|
reverseResolverAddress: any;
|
|
11
11
|
resolverAddress: any;
|
|
12
12
|
} | {
|
|
13
|
-
name:
|
|
14
|
-
match
|
|
13
|
+
name: undefined;
|
|
14
|
+
match?: undefined;
|
|
15
15
|
reverseResolverAddress?: undefined;
|
|
16
16
|
resolverAddress?: undefined;
|
|
17
17
|
} | undefined>;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ethers } from 'ethers';
|
|
2
2
|
import { labelhash } from '../utils/labels';
|
|
3
|
+
import { namehash as makeNamehash } from '../utils/normalise';
|
|
3
4
|
const singleContractOwnerRaw = async ({ contracts }, contract, namehash, labels) => {
|
|
4
5
|
switch (contract) {
|
|
5
6
|
case 'nameWrapper': {
|
|
@@ -28,10 +29,10 @@ const singleContractOwnerRaw = async ({ contracts }, contract, namehash, labels)
|
|
|
28
29
|
}
|
|
29
30
|
};
|
|
30
31
|
const raw = async ({ contracts, multicallWrapper }, name, contract) => {
|
|
31
|
-
const namehash =
|
|
32
|
+
const namehash = makeNamehash(name);
|
|
32
33
|
const labels = name.split('.');
|
|
33
|
-
if (contract) {
|
|
34
|
-
return await singleContractOwnerRaw({ contracts }, contract, namehash, labels);
|
|
34
|
+
if (contract || labels.length === 1) {
|
|
35
|
+
return await singleContractOwnerRaw({ contracts }, contract || 'registry', namehash, labels);
|
|
35
36
|
}
|
|
36
37
|
const registryData = await singleContractOwnerRaw({ contracts }, 'registry', namehash, labels);
|
|
37
38
|
const nameWrapperData = await singleContractOwnerRaw({ contracts }, 'nameWrapper', namehash, labels);
|
|
@@ -46,10 +47,11 @@ const singleContractOwnerDecode = (data) => ethers.utils.defaultAbiCoder.decode(
|
|
|
46
47
|
const decode = async ({ contracts, multicallWrapper }, data, name, contract) => {
|
|
47
48
|
if (data === null)
|
|
48
49
|
return;
|
|
49
|
-
|
|
50
|
+
const labels = name.split('.');
|
|
51
|
+
if (contract || labels.length === 1) {
|
|
50
52
|
const singleOwner = singleContractOwnerDecode(data);
|
|
51
53
|
let obj = {
|
|
52
|
-
ownershipLevel: contract,
|
|
54
|
+
ownershipLevel: contract || 'registry',
|
|
53
55
|
};
|
|
54
56
|
if (contract === 'registrar') {
|
|
55
57
|
return {
|
|
@@ -74,7 +76,6 @@ const decode = async ({ contracts, multicallWrapper }, data, name, contract) =>
|
|
|
74
76
|
const registryOwner = decodedData[0][0];
|
|
75
77
|
const nameWrapperOwner = decodedData[1][0];
|
|
76
78
|
const registrarOwner = decodedData[2]?.[0];
|
|
77
|
-
const labels = name.split('.');
|
|
78
79
|
// check for only .eth names
|
|
79
80
|
if (labels[labels.length - 1] === 'eth') {
|
|
80
81
|
// if the owner on the registrar is the namewrapper, then the namewrapper owner is the owner
|
|
@@ -26,5 +26,8 @@ declare type ProfileOptions = {
|
|
|
26
26
|
texts?: boolean | string[];
|
|
27
27
|
coinTypes?: boolean | string[];
|
|
28
28
|
};
|
|
29
|
-
|
|
29
|
+
declare type InputProfileOptions = ProfileOptions & {
|
|
30
|
+
resolverAddress?: string;
|
|
31
|
+
};
|
|
32
|
+
export default function ({ contracts, gqlInstance, getName, _getAddr, _getContentHash, _getText, resolverMulticallWrapper, multicallWrapper, }: ENSArgs<'contracts' | 'gqlInstance' | 'getName' | '_getText' | '_getAddr' | '_getContentHash' | 'resolverMulticallWrapper' | 'multicallWrapper'>, nameOrAddress: string, options?: InputProfileOptions): Promise<ResolvedProfile | undefined>;
|
|
30
33
|
export {};
|
|
@@ -2,6 +2,7 @@ import { formatsByName } from '@ensdomains/address-encoder';
|
|
|
2
2
|
import { ethers } from 'ethers';
|
|
3
3
|
import { decodeContenthash } from '../utils/contentHash';
|
|
4
4
|
import { hexEncodeName } from '../utils/hexEncodedName';
|
|
5
|
+
import { namehash } from '../utils/normalise';
|
|
5
6
|
import { parseInputType } from '../utils/validation';
|
|
6
7
|
const makeMulticallData = async ({ _getAddr, _getContentHash, _getText, resolverMulticallWrapper, }, name, options) => {
|
|
7
8
|
let calls = [];
|
|
@@ -40,23 +41,51 @@ const makeMulticallData = async ({ _getAddr, _getContentHash, _getText, resolver
|
|
|
40
41
|
const prRawData = await resolverMulticallWrapper.raw(calls.map((x) => x.data));
|
|
41
42
|
return { data: prRawData.data, calls };
|
|
42
43
|
};
|
|
43
|
-
const
|
|
44
|
-
const
|
|
44
|
+
const fetchWithoutResolverMulticall = async ({ multicallWrapper }, calls, resolverAddress) => {
|
|
45
|
+
const callsWithResolver = calls.map((call) => ({
|
|
46
|
+
to: resolverAddress,
|
|
47
|
+
data: call.data.data,
|
|
48
|
+
}));
|
|
49
|
+
return (await multicallWrapper(callsWithResolver)).map((x) => x[1]);
|
|
50
|
+
};
|
|
51
|
+
const getDataForName = async ({ contracts, _getAddr, _getContentHash, _getText, resolverMulticallWrapper, multicallWrapper, }, name, options, fallbackResolver, specificResolver) => {
|
|
45
52
|
const universalResolver = await contracts?.getUniversalResolver();
|
|
46
53
|
const { data, calls } = await makeMulticallData({ _getAddr, _getContentHash, _getText, resolverMulticallWrapper }, name, options);
|
|
47
|
-
let
|
|
54
|
+
let resolvedData;
|
|
55
|
+
let useFallbackResolver = false;
|
|
48
56
|
try {
|
|
49
|
-
|
|
57
|
+
if (specificResolver) {
|
|
58
|
+
const publicResolver = await contracts?.getPublicResolver(undefined, specificResolver);
|
|
59
|
+
resolvedData = await publicResolver?.callStatic.multicall(calls.map((x) => x.data));
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
resolvedData = await universalResolver?.resolve(hexEncodeName(name), data);
|
|
63
|
+
}
|
|
50
64
|
}
|
|
51
65
|
catch {
|
|
52
|
-
|
|
66
|
+
useFallbackResolver = true;
|
|
67
|
+
}
|
|
68
|
+
let resolverAddress;
|
|
69
|
+
let recordData;
|
|
70
|
+
if (useFallbackResolver) {
|
|
71
|
+
resolverAddress = specificResolver || fallbackResolver;
|
|
72
|
+
recordData = await fetchWithoutResolverMulticall({ multicallWrapper }, calls, resolverAddress);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
resolverAddress = specificResolver || resolvedData['1'];
|
|
76
|
+
if (specificResolver) {
|
|
77
|
+
recordData = resolvedData;
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
;
|
|
81
|
+
[recordData] = await resolverMulticallWrapper.decode(resolvedData['0']);
|
|
82
|
+
}
|
|
53
83
|
}
|
|
54
|
-
const [recordData] = await resolverMulticallWrapper.decode(resolver['0']);
|
|
55
84
|
const matchAddress = recordData[calls.findIndex((x) => x.key === '60')];
|
|
56
85
|
return {
|
|
57
86
|
address: matchAddress && (await _getAddr.decode(matchAddress)),
|
|
58
87
|
records: await formatRecords({ _getAddr, _getContentHash, _getText }, recordData, calls, options),
|
|
59
|
-
resolverAddress
|
|
88
|
+
resolverAddress,
|
|
60
89
|
};
|
|
61
90
|
};
|
|
62
91
|
const formatRecords = async ({ _getText, _getAddr, _getContentHash, }, data, calls, options) => {
|
|
@@ -66,7 +95,7 @@ const formatRecords = async ({ _getText, _getAddr, _getContentHash, }, data, cal
|
|
|
66
95
|
key: calls[i].key,
|
|
67
96
|
type: calls[i].type,
|
|
68
97
|
};
|
|
69
|
-
if (itemRet.type === '
|
|
98
|
+
if (itemRet.type === 'contenthash') {
|
|
70
99
|
decodedFromAbi = ethers.utils.defaultAbiCoder.decode(['bytes'], item)[0];
|
|
71
100
|
if (ethers.utils.hexStripZeros(decodedFromAbi) === '0x') {
|
|
72
101
|
return;
|
|
@@ -142,10 +171,10 @@ const formatRecords = async ({ _getText, _getAddr, _getContentHash, }, data, cal
|
|
|
142
171
|
}
|
|
143
172
|
return returnedResponse;
|
|
144
173
|
};
|
|
145
|
-
const graphFetch = async ({ gqlInstance }, name, wantedRecords) => {
|
|
174
|
+
const graphFetch = async ({ gqlInstance }, name, wantedRecords, resolverAddress) => {
|
|
146
175
|
const query = gqlInstance.gql `
|
|
147
|
-
query getRecords($
|
|
148
|
-
|
|
176
|
+
query getRecords($id: String!) {
|
|
177
|
+
domain(id: $id) {
|
|
149
178
|
isMigrated
|
|
150
179
|
createdAt
|
|
151
180
|
resolver {
|
|
@@ -155,18 +184,52 @@ const graphFetch = async ({ gqlInstance }, name, wantedRecords) => {
|
|
|
155
184
|
addr {
|
|
156
185
|
id
|
|
157
186
|
}
|
|
187
|
+
address
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
`;
|
|
192
|
+
const customResolverQuery = gqlInstance.gql `
|
|
193
|
+
query getRecordsWithCustomResolver($id: String!, $resolverId: String!) {
|
|
194
|
+
domain(id: $id) {
|
|
195
|
+
isMigrated
|
|
196
|
+
createdAt
|
|
197
|
+
}
|
|
198
|
+
resolver(id: $resolverId) {
|
|
199
|
+
texts
|
|
200
|
+
coinTypes
|
|
201
|
+
contentHash
|
|
202
|
+
addr {
|
|
203
|
+
id
|
|
158
204
|
}
|
|
159
205
|
}
|
|
160
206
|
}
|
|
161
207
|
`;
|
|
162
208
|
const client = gqlInstance.client;
|
|
163
|
-
const
|
|
164
|
-
|
|
209
|
+
const id = namehash(name);
|
|
210
|
+
let domain;
|
|
211
|
+
let resolverResponse;
|
|
212
|
+
if (!resolverAddress) {
|
|
213
|
+
;
|
|
214
|
+
({ domain } = await client.request(query, { id }));
|
|
215
|
+
resolverResponse = domain?.resolver;
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
const resolverId = `${resolverAddress}-${id}`;
|
|
219
|
+
({ resolver: resolverResponse, domain } = await client.request(customResolverQuery, { id, resolverId }));
|
|
220
|
+
}
|
|
221
|
+
if (!domain)
|
|
165
222
|
return;
|
|
166
|
-
const
|
|
223
|
+
const { isMigrated, createdAt } = domain;
|
|
167
224
|
let returnedRecords = {};
|
|
168
|
-
if (!
|
|
225
|
+
if (!resolverResponse)
|
|
169
226
|
return { isMigrated, createdAt };
|
|
227
|
+
if (!wantedRecords)
|
|
228
|
+
return {
|
|
229
|
+
isMigrated,
|
|
230
|
+
createdAt,
|
|
231
|
+
graphResolverAddress: resolverResponse.address || resolverAddress,
|
|
232
|
+
};
|
|
170
233
|
Object.keys(wantedRecords).forEach((key) => {
|
|
171
234
|
const data = wantedRecords[key];
|
|
172
235
|
if (typeof data === 'boolean' && data) {
|
|
@@ -178,28 +241,40 @@ const graphFetch = async ({ gqlInstance }, name, wantedRecords) => {
|
|
|
178
241
|
}
|
|
179
242
|
}
|
|
180
243
|
});
|
|
181
|
-
return {
|
|
244
|
+
return {
|
|
245
|
+
...returnedRecords,
|
|
246
|
+
isMigrated,
|
|
247
|
+
createdAt,
|
|
248
|
+
graphResolverAddress: resolverResponse.address || resolverAddress,
|
|
249
|
+
};
|
|
182
250
|
};
|
|
183
|
-
const getProfileFromName = async ({ contracts, gqlInstance, _getAddr, _getContentHash, _getText, resolverMulticallWrapper, }, name, options) => {
|
|
184
|
-
const
|
|
185
|
-
|
|
251
|
+
const getProfileFromName = async ({ contracts, gqlInstance, _getAddr, _getContentHash, _getText, resolverMulticallWrapper, multicallWrapper, }, name, options) => {
|
|
252
|
+
const { resolverAddress, ..._options } = options || {};
|
|
253
|
+
const optsLength = Object.keys(_options).length;
|
|
254
|
+
const usingOptions = !optsLength || _options?.texts === true || _options?.coinTypes === true
|
|
255
|
+
? optsLength
|
|
256
|
+
? _options
|
|
257
|
+
: { contentHash: true, texts: true, coinTypes: true }
|
|
186
258
|
: undefined;
|
|
187
|
-
const graphResult = await graphFetch({ gqlInstance }, name, usingOptions);
|
|
259
|
+
const graphResult = await graphFetch({ gqlInstance }, name, usingOptions, resolverAddress);
|
|
188
260
|
if (!graphResult)
|
|
189
261
|
return;
|
|
190
|
-
const { isMigrated, createdAt, ...wantedRecords } = graphResult;
|
|
262
|
+
const { isMigrated, createdAt, graphResolverAddress, ...wantedRecords } = graphResult;
|
|
263
|
+
if (!graphResolverAddress && !options?.resolverAddress)
|
|
264
|
+
return { isMigrated, createdAt, message: "Name doesn't have a resolver" };
|
|
191
265
|
const result = await getDataForName({
|
|
192
266
|
contracts,
|
|
193
267
|
_getAddr,
|
|
194
268
|
_getContentHash,
|
|
195
269
|
_getText,
|
|
196
270
|
resolverMulticallWrapper,
|
|
197
|
-
|
|
271
|
+
multicallWrapper,
|
|
272
|
+
}, name, usingOptions ? wantedRecords : options, graphResolverAddress, options?.resolverAddress);
|
|
198
273
|
if (!result)
|
|
199
274
|
return { isMigrated, createdAt, message: "Records fetch didn't complete" };
|
|
200
275
|
return { ...result, isMigrated, createdAt, message: undefined };
|
|
201
276
|
};
|
|
202
|
-
const getProfileFromAddress = async ({ contracts, gqlInstance, getName, _getAddr, _getContentHash, _getText, resolverMulticallWrapper, }, address, options) => {
|
|
277
|
+
const getProfileFromAddress = async ({ contracts, gqlInstance, getName, _getAddr, _getContentHash, _getText, resolverMulticallWrapper, multicallWrapper, }, address, options) => {
|
|
203
278
|
let name;
|
|
204
279
|
try {
|
|
205
280
|
name = await getName(address);
|
|
@@ -218,6 +293,7 @@ const getProfileFromAddress = async ({ contracts, gqlInstance, getName, _getAddr
|
|
|
218
293
|
_getContentHash,
|
|
219
294
|
_getText,
|
|
220
295
|
resolverMulticallWrapper,
|
|
296
|
+
multicallWrapper,
|
|
221
297
|
}, name.name, options);
|
|
222
298
|
if (!result || result.message)
|
|
223
299
|
return;
|
|
@@ -228,7 +304,7 @@ const getProfileFromAddress = async ({ contracts, gqlInstance, getName, _getAddr
|
|
|
228
304
|
message: undefined,
|
|
229
305
|
};
|
|
230
306
|
};
|
|
231
|
-
export default async function ({ contracts, gqlInstance, getName, _getAddr, _getContentHash, _getText, resolverMulticallWrapper, }, nameOrAddress, options) {
|
|
307
|
+
export default async function ({ contracts, gqlInstance, getName, _getAddr, _getContentHash, _getText, resolverMulticallWrapper, multicallWrapper, }, nameOrAddress, options) {
|
|
232
308
|
if (options && options.coinTypes && typeof options.coinTypes !== 'boolean') {
|
|
233
309
|
options.coinTypes = options.coinTypes.map((coin) => {
|
|
234
310
|
if (!isNaN(parseInt(coin))) {
|
|
@@ -252,6 +328,7 @@ export default async function ({ contracts, gqlInstance, getName, _getAddr, _get
|
|
|
252
328
|
_getContentHash,
|
|
253
329
|
_getText,
|
|
254
330
|
resolverMulticallWrapper,
|
|
331
|
+
multicallWrapper,
|
|
255
332
|
}, nameOrAddress, options);
|
|
256
333
|
}
|
|
257
334
|
return getProfileFromName({
|
|
@@ -261,5 +338,6 @@ export default async function ({ contracts, gqlInstance, getName, _getAddr, _get
|
|
|
261
338
|
_getContentHash,
|
|
262
339
|
_getText,
|
|
263
340
|
resolverMulticallWrapper,
|
|
341
|
+
multicallWrapper,
|
|
264
342
|
}, nameOrAddress, options);
|
|
265
343
|
}
|
|
@@ -3,6 +3,7 @@ declare type ProfileOptions = {
|
|
|
3
3
|
contentHash?: boolean;
|
|
4
4
|
texts?: boolean | string[];
|
|
5
5
|
coinTypes?: boolean | string[];
|
|
6
|
+
resolverAddress?: string;
|
|
6
7
|
};
|
|
7
8
|
export default function ({ getProfile }: ENSArgs<'getProfile'>, name: string, options?: ProfileOptions): Promise<{
|
|
8
9
|
isMigrated: boolean | null;
|
|
@@ -1,19 +1,27 @@
|
|
|
1
1
|
import { formatsByCoinType, formatsByName } from '@ensdomains/address-encoder';
|
|
2
2
|
import { ethers } from 'ethers';
|
|
3
3
|
import { decodeContenthash } from '../utils/contentHash';
|
|
4
|
+
import { namehash } from '../utils/normalise';
|
|
4
5
|
export const _getContentHash = {
|
|
5
6
|
raw: async ({ contracts }, name) => {
|
|
6
7
|
const publicResolver = await contracts?.getPublicResolver();
|
|
7
8
|
return {
|
|
8
9
|
to: '0x0000000000000000000000000000000000000000',
|
|
9
10
|
data: publicResolver.interface.encodeFunctionData('contenthash', [
|
|
10
|
-
|
|
11
|
+
namehash(name),
|
|
11
12
|
]),
|
|
12
13
|
};
|
|
13
14
|
},
|
|
14
15
|
decode: async ({ contracts }, data) => {
|
|
16
|
+
let response;
|
|
15
17
|
const publicResolver = await contracts?.getPublicResolver();
|
|
16
|
-
|
|
18
|
+
try {
|
|
19
|
+
;
|
|
20
|
+
[response] = publicResolver.interface.decodeFunctionResult('contenthash', data);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
17
25
|
if (!response) {
|
|
18
26
|
return;
|
|
19
27
|
}
|
|
@@ -45,7 +53,7 @@ export const _getText = {
|
|
|
45
53
|
return {
|
|
46
54
|
to: '0x0000000000000000000000000000000000000000',
|
|
47
55
|
data: publicResolver.interface.encodeFunctionData('text', [
|
|
48
|
-
|
|
56
|
+
namehash(name),
|
|
49
57
|
key,
|
|
50
58
|
]),
|
|
51
59
|
};
|
|
@@ -77,10 +85,18 @@ export const _getAddr = {
|
|
|
77
85
|
coinType = 60;
|
|
78
86
|
}
|
|
79
87
|
const publicResolver = await contracts?.getPublicResolver();
|
|
88
|
+
if (coinType === 60 || coinType === '60') {
|
|
89
|
+
return {
|
|
90
|
+
to: '0x0000000000000000000000000000000000000000',
|
|
91
|
+
data: publicResolver.interface.encodeFunctionData('addr(bytes32)', [
|
|
92
|
+
namehash(name),
|
|
93
|
+
]),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
80
96
|
if (bypassFormat) {
|
|
81
97
|
return {
|
|
82
98
|
to: '0x0000000000000000000000000000000000000000',
|
|
83
|
-
data: publicResolver.interface.encodeFunctionData('addr(bytes32,uint256)', [
|
|
99
|
+
data: publicResolver.interface.encodeFunctionData('addr(bytes32,uint256)', [namehash(name), coinType]),
|
|
84
100
|
};
|
|
85
101
|
}
|
|
86
102
|
const formatter = typeof coinType === 'string' && isNaN(parseInt(coinType))
|
|
@@ -91,7 +107,7 @@ export const _getAddr = {
|
|
|
91
107
|
}
|
|
92
108
|
return {
|
|
93
109
|
to: '0x0000000000000000000000000000000000000000',
|
|
94
|
-
data: publicResolver.interface.encodeFunctionData('addr(bytes32,uint256)', [
|
|
110
|
+
data: publicResolver.interface.encodeFunctionData('addr(bytes32,uint256)', [namehash(name), formatter.coinType]),
|
|
95
111
|
};
|
|
96
112
|
},
|
|
97
113
|
decode: async ({ contracts }, data, _name, coinType) => {
|
|
@@ -104,7 +120,15 @@ export const _getAddr = {
|
|
|
104
120
|
const formatter = typeof coinType === 'string' && isNaN(parseInt(coinType))
|
|
105
121
|
? formatsByName[coinType]
|
|
106
122
|
: formatsByCoinType[typeof coinType === 'number' ? coinType : parseInt(coinType)];
|
|
107
|
-
|
|
123
|
+
let response;
|
|
124
|
+
if (coinType === 60 || coinType === '60') {
|
|
125
|
+
;
|
|
126
|
+
[response] = publicResolver.interface.decodeFunctionResult('addr(bytes32)', data);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
;
|
|
130
|
+
[response] = publicResolver.interface.decodeFunctionResult('addr(bytes32,uint256)', data);
|
|
131
|
+
}
|
|
108
132
|
if (!response)
|
|
109
133
|
return;
|
|
110
134
|
if (ethers.utils.hexStripZeros(response) === '0x') {
|
|
@@ -16,7 +16,7 @@ declare type Params = {
|
|
|
16
16
|
pageSize?: number;
|
|
17
17
|
orderDirection?: 'asc' | 'desc';
|
|
18
18
|
orderBy?: 'createdAt' | 'labelName';
|
|
19
|
-
lastSubnames
|
|
19
|
+
lastSubnames?: Array<any>;
|
|
20
20
|
isLargeQuery?: boolean;
|
|
21
21
|
};
|
|
22
22
|
declare const getSubnames: (injected: ENSArgs<'gqlInstance'>, functionArgs: Params) => Promise<{
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { namehash } from 'ethers/lib/utils';
|
|
2
1
|
import { truncateFormat } from '../utils/format';
|
|
3
2
|
import { decryptName } from '../utils/labels';
|
|
4
|
-
|
|
3
|
+
import { namehash } from '../utils/normalise';
|
|
4
|
+
const largeQuery = async ({ gqlInstance }, { name, page, pageSize = 10, orderDirection, orderBy, lastSubnames = [], }) => {
|
|
5
5
|
const client = gqlInstance.client;
|
|
6
6
|
let finalQuery = gqlInstance.gql `
|
|
7
7
|
query getSubnames(
|
|
@@ -53,7 +53,7 @@ const largeQuery = async ({ gqlInstance }, { name, page, pageSize = 10, orderDir
|
|
|
53
53
|
});
|
|
54
54
|
return {
|
|
55
55
|
subnames: subdomains,
|
|
56
|
-
subnameCount: domain.subdomainCount
|
|
56
|
+
subnameCount: domain.subdomainCount,
|
|
57
57
|
};
|
|
58
58
|
};
|
|
59
59
|
const smallQuery = async ({ gqlInstance }, { name, page, pageSize = 10, orderDirection, orderBy }) => {
|
|
@@ -140,7 +140,7 @@ const smallQuery = async ({ gqlInstance }, { name, page, pageSize = 10, orderDir
|
|
|
140
140
|
});
|
|
141
141
|
return {
|
|
142
142
|
subnames: subdomains,
|
|
143
|
-
subnameCount: domain.subdomainCount
|
|
143
|
+
subnameCount: domain.subdomainCount,
|
|
144
144
|
};
|
|
145
145
|
};
|
|
146
146
|
const getSubnames = (injected, functionArgs) => {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ENSArgs } from '..';
|
|
2
|
-
export default function ({ contracts,
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
export default function ({ contracts, signer }: ENSArgs<'contracts' | 'signer'>, name: string, { address, resolver, }?: {
|
|
3
|
+
address?: string;
|
|
4
|
+
resolver?: string;
|
|
5
|
+
}): Promise<import("ethers").PopulatedTransaction>;
|
|
@@ -1,14 +1,9 @@
|
|
|
1
|
-
export default async function ({ contracts,
|
|
2
|
-
const signerAddress = await
|
|
3
|
-
|
|
4
|
-
.getAddress();
|
|
5
|
-
if (!signerAddress) {
|
|
6
|
-
throw new Error('No signer found');
|
|
7
|
-
}
|
|
8
|
-
const reverseRegistrar = (await contracts?.getReverseRegistrar())?.connect(provider?.getSigner());
|
|
1
|
+
export default async function ({ contracts, signer }, name, { address, resolver, } = {}) {
|
|
2
|
+
const signerAddress = await signer.getAddress();
|
|
3
|
+
const reverseRegistrar = (await contracts?.getReverseRegistrar())?.connect(signer);
|
|
9
4
|
if (address) {
|
|
10
5
|
const publicResolver = await contracts?.getPublicResolver();
|
|
11
|
-
return reverseRegistrar
|
|
6
|
+
return reverseRegistrar.populateTransaction.setNameForAddr(address, signerAddress, resolver || publicResolver.address, name);
|
|
12
7
|
}
|
|
13
|
-
return reverseRegistrar
|
|
8
|
+
return reverseRegistrar.populateTransaction.setName(name);
|
|
14
9
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ENSArgs } from '..';
|
|
2
|
+
import { RecordInput, RecordTypes } from '../utils/recordHelpers';
|
|
3
|
+
declare type BaseInput = {
|
|
4
|
+
resolverAddress?: string;
|
|
5
|
+
};
|
|
6
|
+
declare type ContentHashInput = {
|
|
7
|
+
record: RecordInput<'contentHash'>;
|
|
8
|
+
type: 'contentHash';
|
|
9
|
+
};
|
|
10
|
+
declare type AddrOrTextInput = {
|
|
11
|
+
record: RecordInput<'addr' | 'text'>;
|
|
12
|
+
type: 'addr' | 'text';
|
|
13
|
+
};
|
|
14
|
+
export default function <T extends RecordTypes>({ contracts, provider, getResolver, signer, }: ENSArgs<'contracts' | 'provider' | 'getResolver' | 'signer'>, name: string, { record, type, resolverAddress, }: BaseInput & (ContentHashInput | AddrOrTextInput)): Promise<{
|
|
15
|
+
to: string;
|
|
16
|
+
data: string;
|
|
17
|
+
}>;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { namehash } from '../utils/normalise';
|
|
2
|
+
import { generateSingleRecordCall, } from '../utils/recordHelpers';
|
|
3
|
+
export default async function ({ contracts, provider, getResolver, signer, }, name, { record, type, resolverAddress, }) {
|
|
4
|
+
if (!name.includes('.')) {
|
|
5
|
+
throw new Error('Input is not an ENS name');
|
|
6
|
+
}
|
|
7
|
+
let resolverToUse;
|
|
8
|
+
if (resolverAddress) {
|
|
9
|
+
resolverToUse = resolverAddress;
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
resolverToUse = await getResolver(name);
|
|
13
|
+
}
|
|
14
|
+
if (!resolverToUse) {
|
|
15
|
+
throw new Error('No resolver found for input address');
|
|
16
|
+
}
|
|
17
|
+
const resolver = (await contracts?.getPublicResolver(provider, resolverToUse))?.connect(signer);
|
|
18
|
+
const hash = namehash(name);
|
|
19
|
+
const call = generateSingleRecordCall(hash, resolver, type)(record);
|
|
20
|
+
return {
|
|
21
|
+
to: resolver.address,
|
|
22
|
+
data: call,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { ethers } from 'ethers';
|
|
2
1
|
import { ENSArgs } from '..';
|
|
3
2
|
import { RecordOptions } from '../utils/recordHelpers';
|
|
4
|
-
export default function ({ contracts, provider, getResolver, }: ENSArgs<'contracts' | 'provider' | 'getResolver'>, name: string, records
|
|
3
|
+
export default function ({ contracts, provider, getResolver, signer, }: ENSArgs<'contracts' | 'provider' | 'getResolver' | 'signer'>, name: string, { records, resolverAddress, }: {
|
|
4
|
+
records: RecordOptions;
|
|
5
|
+
resolverAddress?: string;
|
|
6
|
+
}): Promise<import("ethers").PopulatedTransaction>;
|
|
@@ -1,19 +1,21 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { namehash } from '../utils/normalise';
|
|
2
2
|
import { generateRecordCallArray } from '../utils/recordHelpers';
|
|
3
|
-
export default async function ({ contracts, provider, getResolver, }, name, records) {
|
|
3
|
+
export default async function ({ contracts, provider, getResolver, signer, }, name, { records, resolverAddress, }) {
|
|
4
4
|
if (!name.includes('.')) {
|
|
5
5
|
throw new Error('Input is not an ENS name');
|
|
6
6
|
}
|
|
7
|
-
|
|
8
|
-
if (
|
|
9
|
-
|
|
7
|
+
let resolverToUse;
|
|
8
|
+
if (resolverAddress) {
|
|
9
|
+
resolverToUse = resolverAddress;
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
resolverToUse = await getResolver(name);
|
|
10
13
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
throw new Error('No signer found');
|
|
14
|
+
if (!resolverToUse) {
|
|
15
|
+
throw new Error('No resolver found for input address');
|
|
14
16
|
}
|
|
15
|
-
const resolver = (await contracts?.getPublicResolver(provider,
|
|
16
|
-
const
|
|
17
|
-
const calls = generateRecordCallArray(
|
|
18
|
-
return resolver
|
|
17
|
+
const resolver = (await contracts?.getPublicResolver(provider, resolverToUse))?.connect(signer);
|
|
18
|
+
const hash = namehash(name);
|
|
19
|
+
const calls = generateRecordCallArray(hash, records, resolver);
|
|
20
|
+
return resolver.populateTransaction.multicall(calls);
|
|
19
21
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ethers } from 'ethers';
|
|
2
1
|
import { ENSArgs } from '..';
|
|
3
|
-
export default function ({ contracts,
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
export default function ({ contracts, signer }: ENSArgs<'contracts' | 'signer'>, name: string, { contract, resolver, }: {
|
|
3
|
+
contract: 'registry' | 'nameWrapper';
|
|
4
|
+
resolver?: string;
|
|
5
|
+
}): Promise<import("ethers").PopulatedTransaction>;
|
|
@@ -1,22 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export default async function ({ contracts,
|
|
3
|
-
const address = await provider
|
|
4
|
-
?.getSigner(options?.addressOrIndex)
|
|
5
|
-
.getAddress();
|
|
6
|
-
if (!address) {
|
|
7
|
-
throw new Error('No signer found');
|
|
8
|
-
}
|
|
1
|
+
import { namehash } from '../utils/normalise';
|
|
2
|
+
export default async function ({ contracts, signer }, name, { contract, resolver, }) {
|
|
9
3
|
if (!resolver) {
|
|
10
4
|
resolver = (await contracts?.getPublicResolver()).address;
|
|
11
5
|
}
|
|
12
6
|
switch (contract) {
|
|
13
7
|
case 'registry': {
|
|
14
|
-
const registry = (await contracts?.getRegistry()).connect(
|
|
15
|
-
return registry.setResolver(
|
|
8
|
+
const registry = (await contracts?.getRegistry()).connect(signer);
|
|
9
|
+
return registry.populateTransaction.setResolver(namehash(name), resolver);
|
|
16
10
|
}
|
|
17
11
|
case 'nameWrapper': {
|
|
18
|
-
const nameWrapper = (await contracts?.getNameWrapper()).connect(
|
|
19
|
-
return nameWrapper.setResolver(
|
|
12
|
+
const nameWrapper = (await contracts?.getNameWrapper()).connect(signer);
|
|
13
|
+
return nameWrapper.populateTransaction.setResolver(namehash(name), resolver);
|
|
20
14
|
}
|
|
21
15
|
default: {
|
|
22
16
|
throw new Error(`Unknown contract: ${contract}`);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ethers } from 'ethers';
|
|
2
2
|
import { ENSArgs } from '..';
|
|
3
|
-
export default function ({ contracts,
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
export default function ({ contracts, signer }: ENSArgs<'contracts' | 'signer'>, name: string, { newOwner, contract, }: {
|
|
4
|
+
newOwner: string;
|
|
5
|
+
contract: 'registry' | 'nameWrapper' | 'baseRegistrar';
|
|
6
|
+
}): Promise<ethers.PopulatedTransaction>;
|
|
@@ -1,27 +1,23 @@
|
|
|
1
1
|
import { ethers } from 'ethers';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
.getAddress();
|
|
6
|
-
if (!address) {
|
|
7
|
-
throw new Error('No signer found');
|
|
8
|
-
}
|
|
2
|
+
import { namehash } from '../utils/normalise';
|
|
3
|
+
export default async function ({ contracts, signer }, name, { newOwner, contract, }) {
|
|
4
|
+
const address = await signer.getAddress();
|
|
9
5
|
switch (contract) {
|
|
10
6
|
case 'registry': {
|
|
11
|
-
const registry = (await contracts?.getRegistry()).connect(
|
|
12
|
-
return registry.setOwner(
|
|
7
|
+
const registry = (await contracts?.getRegistry()).connect(signer);
|
|
8
|
+
return registry.populateTransaction.setOwner(namehash(name), newOwner);
|
|
13
9
|
}
|
|
14
10
|
case 'baseRegistrar': {
|
|
15
|
-
const baseRegistrar = (await contracts?.getBaseRegistrar()).connect(
|
|
11
|
+
const baseRegistrar = (await contracts?.getBaseRegistrar()).connect(signer);
|
|
16
12
|
const labels = name.split('.');
|
|
17
13
|
if (labels.length > 2 || labels[labels.length - 1] !== 'eth') {
|
|
18
14
|
throw new Error('Invalid name for baseRegistrar');
|
|
19
15
|
}
|
|
20
|
-
return baseRegistrar['safeTransferFrom(address,address,uint256)'](address, newOwner, ethers.utils.solidityKeccak256(['string'], [labels[0]]));
|
|
16
|
+
return baseRegistrar.populateTransaction['safeTransferFrom(address,address,uint256)'](address, newOwner, ethers.utils.solidityKeccak256(['string'], [labels[0]]));
|
|
21
17
|
}
|
|
22
18
|
case 'nameWrapper': {
|
|
23
|
-
const nameWrapper = (await contracts?.getNameWrapper()).connect(
|
|
24
|
-
return nameWrapper.safeTransferFrom(address, newOwner,
|
|
19
|
+
const nameWrapper = (await contracts?.getNameWrapper()).connect(signer);
|
|
20
|
+
return nameWrapper.populateTransaction.safeTransferFrom(address, newOwner, namehash(name), 1, '0x');
|
|
25
21
|
}
|
|
26
22
|
default: {
|
|
27
23
|
throw new Error(`Unknown contract: ${contract}`);
|