From e7fe77641e1c3f0deebf2eae0197751c753c175c Mon Sep 17 00:00:00 2001 From: storywithoutend Date: Mon, 2 Dec 2024 13:21:47 +0800 Subject: [PATCH 1/7] replace canEditRecordsWhenWrapped with resolverStatus isAuthorized --- .../input/ProfileEditor/ProfileEditor-flow.tsx | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/transaction-flow/input/ProfileEditor/ProfileEditor-flow.tsx b/src/transaction-flow/input/ProfileEditor/ProfileEditor-flow.tsx index 8a8e72bc2..4f774c17b 100644 --- a/src/transaction-flow/input/ProfileEditor/ProfileEditor-flow.tsx +++ b/src/transaction-flow/input/ProfileEditor/ProfileEditor-flow.tsx @@ -181,6 +181,7 @@ const ProfileEditor = ({ data = {}, transactions = [], dispatch, onDismiss }: Pr const resolverStatus = useResolverStatus({ name, }) + console.log('resolverStatus', resolverStatus) const chainId = useChainId() @@ -233,11 +234,7 @@ const ProfileEditor = ({ data = {}, transactions = [], dispatch, onDismiss }: Pr setView('addRecord') } - const canEditRecordsWhenWrapped = match(isWrapped) - .with(true, () => - getResolverWrapperAwareness({ chainId, resolverAddress: profile?.resolverAddress }), - ) - .otherwise(() => true) + const canEditRecordsWhenWrapped = !!resolverStatus.data?.isAuthorized if (isLoading || resolverStatus.isLoading || !isRecordsUpdated) return From 825dcb7337dcff31c9a3fce179c7c67030ab6e1a Mon Sep 17 00:00:00 2001 From: storywithoutend Date: Mon, 2 Dec 2024 13:32:01 +0800 Subject: [PATCH 2/7] fix lint error --- .../input/ProfileEditor/ProfileEditor-flow.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/transaction-flow/input/ProfileEditor/ProfileEditor-flow.tsx b/src/transaction-flow/input/ProfileEditor/ProfileEditor-flow.tsx index 4f774c17b..0add5800e 100644 --- a/src/transaction-flow/input/ProfileEditor/ProfileEditor-flow.tsx +++ b/src/transaction-flow/input/ProfileEditor/ProfileEditor-flow.tsx @@ -29,7 +29,8 @@ import { ProfileEditorForm, useProfileEditorForm } from '@app/hooks/useProfileEd import { createTransactionItem, TransactionItem } from '@app/transaction-flow/transaction' import TransactionLoader from '@app/transaction-flow/TransactionLoader' import type { TransactionDialogPassthrough } from '@app/transaction-flow/types' -import { getResolverWrapperAwareness } from '@app/utils/utils' + +// import { getResolverWrapperAwareness } from '@app/utils/utils' import ResolverWarningOverlay from './ResolverWarningOverlay' import { WrappedAvatarButton } from './WrappedAvatarButton' From ab296bcff4b9993166bad9364d9ed55b9bbfa19a Mon Sep 17 00:00:00 2001 From: storywithoutend Date: Mon, 2 Dec 2024 13:34:24 +0800 Subject: [PATCH 3/7] fix lint errors --- .../input/ProfileEditor/ProfileEditor-flow.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/transaction-flow/input/ProfileEditor/ProfileEditor-flow.tsx b/src/transaction-flow/input/ProfileEditor/ProfileEditor-flow.tsx index 0add5800e..6d9b001f9 100644 --- a/src/transaction-flow/input/ProfileEditor/ProfileEditor-flow.tsx +++ b/src/transaction-flow/input/ProfileEditor/ProfileEditor-flow.tsx @@ -4,7 +4,8 @@ import { Control, useWatch } from 'react-hook-form' import { useTranslation } from 'react-i18next' import styled, { css } from 'styled-components' import { match } from 'ts-pattern' -import { useChainId } from 'wagmi' + +// import { useChainId } from 'wagmi' import { Button, Dialog, mq, PlusSVG } from '@ensdomains/thorin' @@ -184,7 +185,7 @@ const ProfileEditor = ({ data = {}, transactions = [], dispatch, onDismiss }: Pr }) console.log('resolverStatus', resolverStatus) - const chainId = useChainId() + // const chainId = useChainId() const handleCreateTransaction = useCallback( async (form: ProfileEditorForm) => { From 74849504eb846b732bff3810e10d9b99a1172098 Mon Sep 17 00:00:00 2001 From: storywithoutend Date: Mon, 2 Dec 2024 14:22:58 +0800 Subject: [PATCH 4/7] test with no known resolvers --- src/constants/resolverAddressData.ts | 85 ++++++++++++++-------------- 1 file changed, 43 insertions(+), 42 deletions(-) diff --git a/src/constants/resolverAddressData.ts b/src/constants/resolverAddressData.ts index eecb73d9d..954ab36e7 100644 --- a/src/constants/resolverAddressData.ts +++ b/src/constants/resolverAddressData.ts @@ -212,48 +212,49 @@ export const KNOWN_RESOLVER_DATA: KnownResolverData = { ], ...(process.env.NEXT_PUBLIC_ETH_NODE === 'anvil' ? { - '1337': [ - { - address: deploymentAddresses.PublicResolver, - deployer: 'ENS Labs', - tag: 'latest', - isNameWrapperAware: true, - supportedInterfaces: [ - RESOLVER_INTERFACE_IDS.AddressResolver, - RESOLVER_INTERFACE_IDS.MultiCoinAddressResolver, - RESOLVER_INTERFACE_IDS.NameResolver, - RESOLVER_INTERFACE_IDS.AbiResolver, - RESOLVER_INTERFACE_IDS.TextResolver, - RESOLVER_INTERFACE_IDS.ContentHashResolver, - RESOLVER_INTERFACE_IDS.DnsRecordResolver, - RESOLVER_INTERFACE_IDS.InterfaceResolver, - RESOLVER_INTERFACE_IDS.VersionableResolver, - ], - }, - { - address: '0xd7a4F6473f32aC2Af804B3686AE8F1932bC35750', - deployer: 'dummy', - tag: null, - isNameWrapperAware: false, - supportedInterfaces: [], - }, - { - address: deploymentAddresses.LegacyPublicResolver, - deployer: 'ENS Labs', - tag: null, - isNameWrapperAware: false, - supportedInterfaces: [ - RESOLVER_INTERFACE_IDS.AddressResolver, - RESOLVER_INTERFACE_IDS.MultiCoinAddressResolver, - RESOLVER_INTERFACE_IDS.NameResolver, - RESOLVER_INTERFACE_IDS.AbiResolver, - RESOLVER_INTERFACE_IDS.TextResolver, - RESOLVER_INTERFACE_IDS.ContentHashResolver, - RESOLVER_INTERFACE_IDS.DnsRecordResolver, - RESOLVER_INTERFACE_IDS.InterfaceResolver, - ], - }, - ], + '1337': [], + // '1337': [ + // { + // address: deploymentAddresses.PublicResolver, + // deployer: 'ENS Labs', + // tag: 'latest', + // isNameWrapperAware: true, + // supportedInterfaces: [ + // RESOLVER_INTERFACE_IDS.AddressResolver, + // RESOLVER_INTERFACE_IDS.MultiCoinAddressResolver, + // RESOLVER_INTERFACE_IDS.NameResolver, + // RESOLVER_INTERFACE_IDS.AbiResolver, + // RESOLVER_INTERFACE_IDS.TextResolver, + // RESOLVER_INTERFACE_IDS.ContentHashResolver, + // RESOLVER_INTERFACE_IDS.DnsRecordResolver, + // RESOLVER_INTERFACE_IDS.InterfaceResolver, + // RESOLVER_INTERFACE_IDS.VersionableResolver, + // ], + // }, + // { + // address: '0xd7a4F6473f32aC2Af804B3686AE8F1932bC35750', + // deployer: 'dummy', + // tag: null, + // isNameWrapperAware: false, + // supportedInterfaces: [], + // }, + // { + // address: deploymentAddresses.LegacyPublicResolver, + // deployer: 'ENS Labs', + // tag: null, + // isNameWrapperAware: false, + // supportedInterfaces: [ + // RESOLVER_INTERFACE_IDS.AddressResolver, + // RESOLVER_INTERFACE_IDS.MultiCoinAddressResolver, + // RESOLVER_INTERFACE_IDS.NameResolver, + // RESOLVER_INTERFACE_IDS.AbiResolver, + // RESOLVER_INTERFACE_IDS.TextResolver, + // RESOLVER_INTERFACE_IDS.ContentHashResolver, + // RESOLVER_INTERFACE_IDS.DnsRecordResolver, + // RESOLVER_INTERFACE_IDS.InterfaceResolver, + // ], + // }, + // ], } : {}), } From 92b93e206cf166e4e7997cb67d8d577db4f63f3d Mon Sep 17 00:00:00 2001 From: storywithoutend Date: Tue, 3 Dec 2024 10:40:15 +0800 Subject: [PATCH 5/7] Update useResolverStatus.ts --- src/hooks/resolver/useResolverStatus.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/hooks/resolver/useResolverStatus.ts b/src/hooks/resolver/useResolverStatus.ts index 90c703b53..76ccc754d 100644 --- a/src/hooks/resolver/useResolverStatus.ts +++ b/src/hooks/resolver/useResolverStatus.ts @@ -94,7 +94,8 @@ export const useResolverStatus = ({ hasResolver: !!profileResolverAddress && profileResolverAddress !== emptyAddress, hasLatestResolver: resolverType.data?.type === 'latest', isNameWrapperAware: profileResolverAddress - ? getResolverWrapperAwareness({ resolverAddress: profileResolverAddress, chainId }) + ? getResolverWrapperAwareness({ resolverAddress: profileResolverAddress, chainId }) || + resolverIsAuthorised.data?.isAuthorised : false, hasProfile: profileHasRecords(profile), } From 94b1dca488fbfed34b0039178ac3b793a3f71f73 Mon Sep 17 00:00:00 2001 From: storywithoutend Date: Mon, 9 Dec 2024 10:18:27 +0800 Subject: [PATCH 6/7] add old resolver. Add ability to detect interfaces resolver supports in profile editor. --- deploy/.contracts/NoMulticallResolver.json | 456 ++++++++++++++++++ deploy/.contracts/NoTextResolver.json | 170 +++++++ deploy/.contracts/OldResolver.json | 170 +++++++ deploy/00_deploy_legacy_resolvers.ts | 78 +++ e2e/specs/stateless/profileEditor.spec.ts | 74 +++ pnpm-lock.yaml | 130 ++++- .../steps/Profile/AddProfileRecordView.tsx | 38 +- src/constants/profileRecordOptions.test.ts | 8 + src/constants/profileRecordOptions.ts | 51 +- src/constants/resolverAddressData.ts | 2 +- src/constants/supportedOtherRecordKeys.ts | 5 + src/hooks/resolver/useResolver.ts | 28 ++ src/hooks/resolver/useResolverStatus.ts | 2 + .../ProfileEditor/ProfileEditor-flow.tsx | 68 ++- .../hooks/useProfileEditorReducer.ts | 108 +++++ 15 files changed, 1344 insertions(+), 44 deletions(-) create mode 100644 deploy/.contracts/NoMulticallResolver.json create mode 100644 deploy/.contracts/NoTextResolver.json create mode 100644 deploy/.contracts/OldResolver.json create mode 100644 deploy/00_deploy_legacy_resolvers.ts create mode 100644 src/constants/profileRecordOptions.test.ts create mode 100644 src/hooks/resolver/useResolver.ts create mode 100644 src/transaction-flow/input/ProfileEditor/hooks/useProfileEditorReducer.ts diff --git a/deploy/.contracts/NoMulticallResolver.json b/deploy/.contracts/NoMulticallResolver.json new file mode 100644 index 000000000..b7aa097b2 --- /dev/null +++ b/deploy/.contracts/NoMulticallResolver.json @@ -0,0 +1,456 @@ +{ + "abi": [ + { + "constant": true, + "inputs": [ + { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" } + ], + "name": "supportsInterface", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "string", "name": "key", "type": "string" }, + { "internalType": "string", "name": "value", "type": "string" } + ], + "name": "setText", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" } + ], + "name": "interfaceImplementer", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "uint256", "name": "contentTypes", "type": "uint256" } + ], + "name": "ABI", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" }, + { "internalType": "bytes", "name": "", "type": "bytes" } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "bytes32", "name": "x", "type": "bytes32" }, + { "internalType": "bytes32", "name": "y", "type": "bytes32" } + ], + "name": "setPubkey", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "bytes", "name": "hash", "type": "bytes" } + ], + "name": "setContenthash", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" } + ], + "name": "addr", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "address", "name": "target", "type": "address" }, + { "internalType": "bool", "name": "isAuthorised", "type": "bool" } + ], + "name": "setAuthorisation", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "string", "name": "key", "type": "string" } + ], + "name": "text", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "uint256", "name": "contentType", "type": "uint256" }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "name": "setABI", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" } + ], + "name": "name", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "string", "name": "name", "type": "string" } + ], + "name": "setName", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "uint256", "name": "coinType", "type": "uint256" }, + { "internalType": "bytes", "name": "a", "type": "bytes" } + ], + "name": "setAddr", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" } + ], + "name": "contenthash", + "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" } + ], + "name": "pubkey", + "outputs": [ + { "internalType": "bytes32", "name": "x", "type": "bytes32" }, + { "internalType": "bytes32", "name": "y", "type": "bytes32" } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "address", "name": "a", "type": "address" } + ], + "name": "setAddr", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" }, + { "internalType": "address", "name": "implementer", "type": "address" } + ], + "name": "setInterface", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "uint256", "name": "coinType", "type": "uint256" } + ], + "name": "addr", + "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { "internalType": "bytes32", "name": "", "type": "bytes32" }, + { "internalType": "address", "name": "", "type": "address" }, + { "internalType": "address", "name": "", "type": "address" } + ], + "name": "authorisations", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "contract ENS", "name": "_ens", "type": "address" } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "isAuthorised", + "type": "bool" + } + ], + "name": "AuthorisationChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "string", + "name": "indexedKey", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "key", + "type": "string" + } + ], + "name": "TextChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "x", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "y", + "type": "bytes32" + } + ], + "name": "PubkeyChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + } + ], + "name": "NameChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes4", + "name": "interfaceID", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "address", + "name": "implementer", + "type": "address" + } + ], + "name": "InterfaceChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "hash", + "type": "bytes" + } + ], + "name": "ContenthashChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "a", + "type": "address" + } + ], + "name": "AddrChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "coinType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "newAddress", + "type": "bytes" + } + ], + "name": "AddressChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "contentType", + "type": "uint256" + } + ], + "name": "ABIChanged", + "type": "event" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b506040516124e33803806124e38339818101604052602081101561003357600080fd5b810190808051906020019092919050505080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505061244e806100956000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063623195b0116100ad578063c869023311610071578063c869023314610968578063d5fa2b00146109b1578063e59d895d146109ff578063f1cb7e0614610a76578063f86bc87914610b2757610121565b8063623195b01461063b578063691f3431146106c8578063773722131461076f5780638b95dd71146107f2578063bc1c58d1146108c157610121565b806329cd62ea116100f457806329cd62ea146103b2578063304e6ade146103f45780633b3b57de146104775780633e9ce794146104e557806359d1d43c1461053f57610121565b806301ffc9a71461012657806310f13a8c1461018b578063124a319c146102635780632203ab56146102fa575b600080fd5b6101716004803603602081101561013c57600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bad565b604051808215151515815260200191505060405180910390f35b610261600480360360608110156101a157600080fd5b8101908080359060200190929190803590602001906401000000008111156101c857600080fd5b8201836020820111156101da57600080fd5b803590602001918460018302840111640100000000831117156101fc57600080fd5b90919293919293908035906020019064010000000081111561021d57600080fd5b82018360208201111561022f57600080fd5b8035906020019184600183028401116401000000008311171561025157600080fd5b9091929391929390505050610c0e565b005b6102b86004803603604081101561027957600080fd5b810190808035906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610d09565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103306004803603604081101561031057600080fd5b810190808035906020019092919080359060200190929190505050611206565b6040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561037657808201518184015260208101905061035b565b50505050905090810190601f1680156103a35780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b6103f2600480360360608110156103c857600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611355565b005b6104756004803603604081101561040a57600080fd5b81019080803590602001909291908035906020019064010000000081111561043157600080fd5b82018360208201111561044357600080fd5b8035906020019184600183028401116401000000008311171561046557600080fd5b90919293919293905050506113ed565b005b6104a36004803603602081101561048d57600080fd5b810190808035906020019092919050505061148d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61053d600480360360608110156104fb57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506114c4565b005b6105c06004803603604081101561055557600080fd5b81019080803590602001909291908035906020019064010000000081111561057c57600080fd5b82018360208201111561058e57600080fd5b803590602001918460018302840111640100000000831117156105b057600080fd5b90919293919293905050506115d8565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106005780820151818401526020810190506105e5565b50505050905090810190601f16801561062d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106c66004803603606081101561065157600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561068257600080fd5b82018360208201111561069457600080fd5b803590602001918460018302840111640100000000831117156106b657600080fd5b90919293919293905050506116b4565b005b6106f4600480360360208110156106de57600080fd5b8101908080359060200190929190505050611741565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610734578082015181840152602081019050610719565b50505050905090810190601f1680156107615780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107f06004803603604081101561078557600080fd5b8101908080359060200190929190803590602001906401000000008111156107ac57600080fd5b8201836020820111156107be57600080fd5b803590602001918460018302840111640100000000831117156107e057600080fd5b90919293919293905050506117f6565b005b6108bf6004803603606081101561080857600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561083957600080fd5b82018360208201111561084b57600080fd5b8035906020019184600183028401116401000000008311171561086d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611896565b005b6108ed600480360360208110156108d757600080fd5b8101908080359060200190929190505050611a03565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561092d578082015181840152602081019050610912565b50505050905090810190601f16801561095a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6109946004803603602081101561097e57600080fd5b8101908080359060200190929190505050611ab8565b604051808381526020018281526020019250505060405180910390f35b6109fd600480360360408110156109c757600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611af2565b005b610a7460048036036060811015610a1557600080fd5b810190808035906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b1e565b005b610aac60048036036040811015610a8c57600080fd5b810190808035906020019092919080359060200190929190505050611c5c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610aec578082015181840152602081019050610ad1565b50505050905090810190601f168015610b195780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610b9360048036036060811015610b3d57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d23565b604051808215151515815260200191505060405180910390f35b60006359d1d43c60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c075750610c0682611d5f565b5b9050919050565b84610c1881611dc0565b610c2157600080fd5b828260066000898152602001908152602001600020878760405180838380828437808301925050509250505090815260200160405180910390209190610c68929190612250565b50857fd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a7550868688886040518080602001806020018381038352878782818152602001925080828437600081840152601f19601f8201169050808301925050508381038252858582818152602001925080828437600081840152601f19601f820116905080830192505050965050505050505060405180910390a2505050505050565b600080600360008581526020019081526020016000206000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610dce5780915050611200565b6000610dd98561148d565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e1b57600092505050611200565b600060608273ffffffffffffffffffffffffffffffffffffffff166301ffc9a760e01b60405160240180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019150506040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310610f3c5780518252602082019150602081019050602083039250610f19565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114610f9c576040519150601f19603f3d011682016040523d82523d6000602084013e610fa1565b606091505b5091509150811580610fb4575060208151105b80610ffb5750600060f81b81601f81518110610fcc57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b1561100d576000945050505050611200565b8273ffffffffffffffffffffffffffffffffffffffff168660405160240180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019150506040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106111235780518252602082019150602081019050602083039250611100565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114611183576040519150601f19603f3d011682016040523d82523d6000602084013e611188565b606091505b50809250819350505081158061119f575060208151105b806111e65750600060f81b81601f815181106111b757fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b156111f8576000945050505050611200565b829450505050505b92915050565b60006060600080600086815260200190815260200160002090506000600190505b8481116113325760008582161415801561126757506000826000838152602001908152602001600020805460018160011615610100020316600290049050115b156113265780826000838152602001908152602001600020808054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113145780601f106112e957610100808354040283529160200191611314565b820191906000526020600020905b8154815290600101906020018083116112f757829003601f168201915b5050505050905093509350505061134e565b600181901b9050611227565b5060006040518060200160405280600081525081915092509250505b9250929050565b8261135f81611dc0565b61136857600080fd5b604051806040016040528084815260200183815250600560008681526020019081526020016000206000820151816000015560208201518160010155905050837f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e468484604051808381526020018281526020019250505060405180910390a250505050565b826113f781611dc0565b61140057600080fd5b82826002600087815260200190815260200160002091906114229291906122d0565b50837fe379c1624ed7e714cc0937528a32359d69d5281337765313dba4e081b72d7578848460405180806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050935050505060405180910390a250505050565b6000606061149c83603c611c5c565b90506000815114156114b25760009150506114bf565b6114bb81611f4c565b9150505b919050565b806008600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16847fe1c5610a6e0cbe10764ecd182adcef1ec338dc4e199c99c32ce98f38e12791df84604051808215151515815260200191505060405180910390a4505050565b606060066000858152602001908152602001600020838360405180838380828437808301925050509250505090815260200160405180910390208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116a65780601f1061167b576101008083540402835291602001916116a6565b820191906000526020600020905b81548152906001019060200180831161168957829003601f168201915b505050505090509392505050565b836116be81611dc0565b6116c757600080fd5b6000846001860316146116d957600080fd5b82826000808881526020019081526020016000206000878152602001908152602001600020919061170b9291906122d0565b5083857faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe360405160405180910390a35050505050565b6060600460008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156117ea5780601f106117bf576101008083540402835291602001916117ea565b820191906000526020600020905b8154815290600101906020018083116117cd57829003601f168201915b50505050509050919050565b8261180081611dc0565b61180957600080fd5b828260046000878152602001908152602001600020919061182b929190612250565b50837fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f7848460405180806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050935050505060405180910390a250505050565b826118a081611dc0565b6118a957600080fd5b837f65412581168e88a1e60c6459d7f44ae83ad0832e670826c05a4e2476b57af75284846040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156119135780820151818401526020810190506118f8565b50505050905090810190601f1680156119405780820380516001836020036101000a031916815260200191505b50935050505060405180910390a2603c8314156119c457837f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd261198284611f4c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a25b8160016000868152602001908152602001600020600085815260200190815260200160002090805190602001906119fc929190612350565b5050505050565b6060600260008381526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aac5780601f10611a8157610100808354040283529160200191611aac565b820191906000526020600020905b815481529060010190602001808311611a8f57829003601f168201915b50505050509050919050565b6000806005600084815260200190815260200160002060000154600560008581526020019081526020016000206001015491509150915091565b81611afc81611dc0565b611b0557600080fd5b611b1983603c611b1485611f6f565b611896565b505050565b82611b2881611dc0565b611b3157600080fd5b81600360008681526020019081526020016000206000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916847f7c69f06bea0bdef565b709e93a147836b0063ba2dd89f02d0b7e8d931e6a6daa84604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a350505050565b60606001600084815260200190815260200160002060008381526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611d165780601f10611ceb57610100808354040283529160200191611d16565b820191906000526020600020905b815481529060010190602001808311611cf957829003601f168201915b5050505050905092915050565b6008602052826000526040600020602052816000526040600020602052806000526040600020600092509250509054906101000a900460ff1681565b600063c869023360e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611db95750611db882611fba565b5b9050919050565b600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611e3657600080fd5b505afa158015611e4a573d6000803e3d6000fd5b505050506040513d6020811015611e6057600080fd5b810190808051906020019092919050505090503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480611f4457506008600084815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b915050919050565b60006014825114611f5c57600080fd5b600c6101000a6020830151049050919050565b606060146040519080825280601f01601f191660200182016040528015611fa55781602001600182028038833980820191505090505b509050600c6101000a82026020820152919050565b600063691f343160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061201457506120138261201b565b5b9050919050565b600060405180806123f660249139602401905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061208657506120858261208d565b5b9050919050565b600063bc1c58d160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806120e757506120e6826120ee565b5b9050919050565b6000633b3b57de60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612187575063f1cb7e0660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061219757506121968261219e565b5b9050919050565b6000632203ab5660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806121f857506121f7826121ff565b5b9050919050565b60006301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061229157803560ff19168380011785556122bf565b828001600101855582156122bf579182015b828111156122be5782358255916020019190600101906122a3565b5b5090506122cc91906123d0565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061231157803560ff191683800117855561233f565b8280016001018555821561233f579182015b8281111561233e578235825591602001919060010190612323565b5b50905061234c91906123d0565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061239157805160ff19168380011785556123bf565b828001600101855582156123bf579182015b828111156123be5782518255916020019190600101906123a3565b5b5090506123cc91906123d0565b5090565b6123f291905b808211156123ee5760008160009055506001016123d6565b5090565b9056fe696e74657266616365496d706c656d656e74657228627974657333322c62797465733429a265627a7a72315820ad8f8a41d6a908b475138c4e12dbb403d590d1a66cd707d281b6f5adf64a8b9b64736f6c634300050b0032" +} diff --git a/deploy/.contracts/NoTextResolver.json b/deploy/.contracts/NoTextResolver.json new file mode 100644 index 000000000..a70b5c960 --- /dev/null +++ b/deploy/.contracts/NoTextResolver.json @@ -0,0 +1,170 @@ +{ + "abi": [ + { + "constant": true, + "inputs": [{ "name": "interfaceID", "type": "bytes4" }], + "name": "supportsInterface", + "outputs": [{ "name": "", "type": "bool" }], + "payable": false, + "type": "function" + }, + { + "constant": true, + "inputs": [ + { "name": "node", "type": "bytes32" }, + { "name": "contentTypes", "type": "uint256" } + ], + "name": "ABI", + "outputs": [ + { "name": "contentType", "type": "uint256" }, + { "name": "data", "type": "bytes" } + ], + "payable": false, + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "name": "node", "type": "bytes32" }, + { "name": "x", "type": "bytes32" }, + { "name": "y", "type": "bytes32" } + ], + "name": "setPubkey", + "outputs": [], + "payable": false, + "type": "function" + }, + { + "constant": true, + "inputs": [{ "name": "node", "type": "bytes32" }], + "name": "content", + "outputs": [{ "name": "ret", "type": "bytes32" }], + "payable": false, + "type": "function" + }, + { + "constant": true, + "inputs": [{ "name": "node", "type": "bytes32" }], + "name": "addr", + "outputs": [{ "name": "ret", "type": "address" }], + "payable": false, + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "name": "node", "type": "bytes32" }, + { "name": "contentType", "type": "uint256" }, + { "name": "data", "type": "bytes" } + ], + "name": "setABI", + "outputs": [], + "payable": false, + "type": "function" + }, + { + "constant": true, + "inputs": [{ "name": "node", "type": "bytes32" }], + "name": "name", + "outputs": [{ "name": "ret", "type": "string" }], + "payable": false, + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "name": "node", "type": "bytes32" }, + { "name": "name", "type": "string" } + ], + "name": "setName", + "outputs": [], + "payable": false, + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "name": "node", "type": "bytes32" }, + { "name": "hash", "type": "bytes32" } + ], + "name": "setContent", + "outputs": [], + "payable": false, + "type": "function" + }, + { + "constant": true, + "inputs": [{ "name": "node", "type": "bytes32" }], + "name": "pubkey", + "outputs": [ + { "name": "x", "type": "bytes32" }, + { "name": "y", "type": "bytes32" } + ], + "payable": false, + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "name": "node", "type": "bytes32" }, + { "name": "addr", "type": "address" } + ], + "name": "setAddr", + "outputs": [], + "payable": false, + "type": "function" + }, + { + "inputs": [{ "name": "ensAddr", "type": "address" }], + "payable": false, + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "name": "node", "type": "bytes32" }, + { "indexed": false, "name": "a", "type": "address" } + ], + "name": "AddrChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "name": "node", "type": "bytes32" }, + { "indexed": false, "name": "hash", "type": "bytes32" } + ], + "name": "ContentChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "name": "node", "type": "bytes32" }, + { "indexed": false, "name": "name", "type": "string" } + ], + "name": "NameChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "name": "node", "type": "bytes32" }, + { "indexed": true, "name": "contentType", "type": "uint256" } + ], + "name": "ABIChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "name": "node", "type": "bytes32" }, + { "indexed": false, "name": "x", "type": "bytes32" }, + { "indexed": false, "name": "y", "type": "bytes32" } + ], + "name": "PubkeyChanged", + "type": "event" + } + ], + "bytecode": "0x6060604052341561000c57fe5b604051602080610dc583398101604052515b60008054600160a060020a031916600160a060020a0383161790555b505b610d7a8061004b6000396000f300606060405236156100ac5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301ffc9a781146100ae5780632203ab56146100df57806329cd62ea146101815780632dff69411461019c5780633b3b57de146101c1578063623195b0146101f0578063691f34311461024c57806377372213146102df578063c3d014d614610338578063c869023314610350578063d5fa2b001461037c575bfe5b34156100b657fe5b6100cb600160e060020a03196004351661039d565b604080519115158252519081900360200190f35b34156100e757fe5b6100f56004356024356104d8565b6040518083815260200180602001828103825283818151815260200191508051906020019080838360008314610146575b80518252602083111561014657601f199092019160209182019101610126565b505050905090810190601f1680156101725780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b341561018957fe5b61019a6004356024356044356105ef565b005b34156101a457fe5b6101af6004356106e6565b60408051918252519081900360200190f35b34156101c957fe5b6101d46004356106ff565b60408051600160a060020a039092168252519081900360200190f35b34156101f857fe5b604080516020600460443581810135601f810184900484028501840190955284845261019a94823594602480359560649492939190920191819084018382808284375094965061071d95505050505050565b005b341561025457fe5b61025f600435610816565b6040805160208082528351818301528351919283929083019185019080838382156102a5575b8051825260208311156102a557601f199092019160209182019101610285565b505050905090810190601f1680156102d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156102e757fe5b60408051602060046024803582810135601f810185900485028601850190965285855261019a95833595939460449493929092019181908401838280828437509496506108c195505050505050565b005b341561034057fe5b61019a600435602435610a19565b005b341561035857fe5b610363600435610af1565b6040805192835260208301919091528051918290030190f35b341561038457fe5b61019a600435600160a060020a0360243516610b10565b005b6000600160e060020a031982167f3b3b57de0000000000000000000000000000000000000000000000000000000014806104005750600160e060020a031982167fd8389dc500000000000000000000000000000000000000000000000000000000145b806104345750600160e060020a031982167f691f343100000000000000000000000000000000000000000000000000000000145b806104685750600160e060020a031982167f2203ab5600000000000000000000000000000000000000000000000000000000145b8061049c5750600160e060020a031982167fc869023300000000000000000000000000000000000000000000000000000000145b806104d05750600160e060020a031982167f01ffc9a700000000000000000000000000000000000000000000000000000000145b90505b919050565b60006104e2610c0b565b60008481526001602081905260409091209092505b8383116105e257828416158015906105305750600083815260058201602052604081205460026000196101006001841615020190911604115b156105d657600083815260058201602090815260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156105ca5780601f1061059f576101008083540402835291602001916105ca565b820191906000526020600020905b8154815290600101906020018083116105ad57829003601f168201915b505050505091506105e7565b5b6002909202916104f7565b600092505b509250929050565b60008054604080516020908101849052815160e060020a6302571be30281526004810188905291518794600160a060020a033381169516936302571be393602480830194919391928390030190829087803b151561064957fe5b6102c65a03f1151561065757fe5b505060405151600160a060020a03169190911490506106765760006000fd5b604080518082018252848152602080820185815260008881526001835284902092516003840155516004909201919091558151858152908101849052815186927f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e46928290030190a25b5b50505050565b600081815260016020819052604090912001545b919050565b600081815260016020526040902054600160a060020a03165b919050565b60008054604080516020908101849052815160e060020a6302571be30281526004810188905291518794600160a060020a033381169516936302571be393602480830194919391928390030190829087803b151561077757fe5b6102c65a03f1151561078557fe5b505060405151600160a060020a03169190911490506107a45760006000fd5b60001983018316156107b65760006000fd5b6000848152600160209081526040808320868452600501825290912083516107e092850190610c1d565b50604051839085907faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe390600090a35b5b50505050565b61081e610c0b565b6000828152600160208181526040928390206002908101805485516000199582161561010002959095011691909104601f81018390048302840183019094528383529192908301828280156108b45780601f10610889576101008083540402835291602001916108b4565b820191906000526020600020905b81548152906001019060200180831161089757829003601f168201915b505050505090505b919050565b60008054604080516020908101849052815160e060020a6302571be30281526004810187905291518694600160a060020a033381169516936302571be393602480830194919391928390030190829087803b151561091b57fe5b6102c65a03f1151561092957fe5b505060405151600160a060020a03169190911490506109485760006000fd5b6000838152600160209081526040909120835161096d92600290920191850190610c1d565b50604080516020808252845181830152845186937fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f79387939092839283019185019080838382156109d9575b8051825260208311156109d957601f1990920191602091820191016109b9565b505050905090810190601f168015610a055780820380516001836020036101000a031916815260200191505b509250505060405180910390a25b5b505050565b60008054604080516020908101849052815160e060020a6302571be30281526004810187905291518694600160a060020a033381169516936302571be393602480830194919391928390030190829087803b1515610a7357fe5b6102c65a03f11515610a8157fe5b505060405151600160a060020a0316919091149050610aa05760006000fd5b6000838152600160208181526040928390209091018490558151848152915185927f0424b6fe0d9c3bdbece0e7879dc241bb0c22e900be8b6c168b4ee08bd9bf83bc92908290030190a25b5b505050565b600081815260016020526040902060038101546004909101545b915091565b60008054604080516020908101849052815160e060020a6302571be30281526004810187905291518694600160a060020a033381169516936302571be393602480830194919391928390030190829087803b1515610b6a57fe5b6102c65a03f11515610b7857fe5b505060405151600160a060020a0316919091149050610b975760006000fd5b600083815260016020908152604091829020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0386169081179091558251908152915185927f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd292908290030190a25b5b505050565b60408051602081019091526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610c5e57805160ff1916838001178555610c8b565b82800160010185558215610c8b579182015b82811115610c8b578251825591602001919060010190610c70565b5b50610c98929150610d2d565b5090565b60408051602081019091526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610c5e57805160ff1916838001178555610c8b565b82800160010185558215610c8b579182015b82811115610c8b578251825591602001919060010190610c70565b5b50610c98929150610d2d565b5090565b610d4b91905b80821115610c985760008155600101610d33565b5090565b905600a165627a7a72305820f05b42978350d3945a3fe885ef530e3f8ecbfcdb822550779dfcf0b06b00754f0029000000000000000000000000314159265dd8dbb310642f98f50c066173c1259b" +} diff --git a/deploy/.contracts/OldResolver.json b/deploy/.contracts/OldResolver.json new file mode 100644 index 000000000..75cd964d8 --- /dev/null +++ b/deploy/.contracts/OldResolver.json @@ -0,0 +1,170 @@ +{ + "abi": [ + { + "constant": true, + "inputs": [{ "name": "interfaceID", "type": "bytes4" }], + "name": "supportsInterface", + "outputs": [{ "name": "", "type": "bool" }], + "payable": false, + "type": "function" + }, + { + "constant": true, + "inputs": [ + { "name": "node", "type": "bytes32" }, + { "name": "contentTypes", "type": "uint256" } + ], + "name": "ABI", + "outputs": [ + { "name": "contentType", "type": "uint256" }, + { "name": "data", "type": "bytes" } + ], + "payable": false, + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "name": "node", "type": "bytes32" }, + { "name": "x", "type": "bytes32" }, + { "name": "y", "type": "bytes32" } + ], + "name": "setPubkey", + "outputs": [], + "payable": false, + "type": "function" + }, + { + "constant": true, + "inputs": [{ "name": "node", "type": "bytes32" }], + "name": "content", + "outputs": [{ "name": "ret", "type": "bytes32" }], + "payable": false, + "type": "function" + }, + { + "constant": true, + "inputs": [{ "name": "node", "type": "bytes32" }], + "name": "addr", + "outputs": [{ "name": "ret", "type": "address" }], + "payable": false, + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "name": "node", "type": "bytes32" }, + { "name": "contentType", "type": "uint256" }, + { "name": "data", "type": "bytes" } + ], + "name": "setABI", + "outputs": [], + "payable": false, + "type": "function" + }, + { + "constant": true, + "inputs": [{ "name": "node", "type": "bytes32" }], + "name": "name", + "outputs": [{ "name": "ret", "type": "string" }], + "payable": false, + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "name": "node", "type": "bytes32" }, + { "name": "name", "type": "string" } + ], + "name": "setName", + "outputs": [], + "payable": false, + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "name": "node", "type": "bytes32" }, + { "name": "hash", "type": "bytes32" } + ], + "name": "setContent", + "outputs": [], + "payable": false, + "type": "function" + }, + { + "constant": true, + "inputs": [{ "name": "node", "type": "bytes32" }], + "name": "pubkey", + "outputs": [ + { "name": "x", "type": "bytes32" }, + { "name": "y", "type": "bytes32" } + ], + "payable": false, + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "name": "node", "type": "bytes32" }, + { "name": "addr", "type": "address" } + ], + "name": "setAddr", + "outputs": [], + "payable": false, + "type": "function" + }, + { + "inputs": [{ "name": "ensAddr", "type": "address" }], + "payable": false, + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "name": "node", "type": "bytes32" }, + { "indexed": false, "name": "a", "type": "address" } + ], + "name": "AddrChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "name": "node", "type": "bytes32" }, + { "indexed": false, "name": "hash", "type": "bytes32" } + ], + "name": "ContentChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "name": "node", "type": "bytes32" }, + { "indexed": false, "name": "name", "type": "string" } + ], + "name": "NameChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "name": "node", "type": "bytes32" }, + { "indexed": true, "name": "contentType", "type": "uint256" } + ], + "name": "ABIChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "name": "node", "type": "bytes32" }, + { "indexed": false, "name": "x", "type": "bytes32" }, + { "indexed": false, "name": "y", "type": "bytes32" } + ], + "name": "PubkeyChanged", + "type": "event" + } + ], + "bytecode": "0x6060604052341561000c57fe5b604051602080610dc583398101604052515b60008054600160a060020a031916600160a060020a0383161790555b505b610d7a8061004b6000396000f300606060405236156100ac5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301ffc9a781146100ae5780632203ab56146100df57806329cd62ea146101815780632dff69411461019c5780633b3b57de146101c1578063623195b0146101f0578063691f34311461024c57806377372213146102df578063c3d014d614610338578063c869023314610350578063d5fa2b001461037c575bfe5b34156100b657fe5b6100cb600160e060020a03196004351661039d565b604080519115158252519081900360200190f35b34156100e757fe5b6100f56004356024356104d8565b6040518083815260200180602001828103825283818151815260200191508051906020019080838360008314610146575b80518252602083111561014657601f199092019160209182019101610126565b505050905090810190601f1680156101725780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b341561018957fe5b61019a6004356024356044356105ef565b005b34156101a457fe5b6101af6004356106e6565b60408051918252519081900360200190f35b34156101c957fe5b6101d46004356106ff565b60408051600160a060020a039092168252519081900360200190f35b34156101f857fe5b604080516020600460443581810135601f810184900484028501840190955284845261019a94823594602480359560649492939190920191819084018382808284375094965061071d95505050505050565b005b341561025457fe5b61025f600435610816565b6040805160208082528351818301528351919283929083019185019080838382156102a5575b8051825260208311156102a557601f199092019160209182019101610285565b505050905090810190601f1680156102d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156102e757fe5b60408051602060046024803582810135601f810185900485028601850190965285855261019a95833595939460449493929092019181908401838280828437509496506108c195505050505050565b005b341561034057fe5b61019a600435602435610a19565b005b341561035857fe5b610363600435610af1565b6040805192835260208301919091528051918290030190f35b341561038457fe5b61019a600435600160a060020a0360243516610b10565b005b6000600160e060020a031982167f3b3b57de0000000000000000000000000000000000000000000000000000000014806104005750600160e060020a031982167fd8389dc500000000000000000000000000000000000000000000000000000000145b806104345750600160e060020a031982167f691f343100000000000000000000000000000000000000000000000000000000145b806104685750600160e060020a031982167f2203ab5600000000000000000000000000000000000000000000000000000000145b8061049c5750600160e060020a031982167fc869023300000000000000000000000000000000000000000000000000000000145b806104d05750600160e060020a031982167f01ffc9a700000000000000000000000000000000000000000000000000000000145b90505b919050565b60006104e2610c0b565b60008481526001602081905260409091209092505b8383116105e257828416158015906105305750600083815260058201602052604081205460026000196101006001841615020190911604115b156105d657600083815260058201602090815260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156105ca5780601f1061059f576101008083540402835291602001916105ca565b820191906000526020600020905b8154815290600101906020018083116105ad57829003601f168201915b505050505091506105e7565b5b6002909202916104f7565b600092505b509250929050565b60008054604080516020908101849052815160e060020a6302571be30281526004810188905291518794600160a060020a033381169516936302571be393602480830194919391928390030190829087803b151561064957fe5b6102c65a03f1151561065757fe5b505060405151600160a060020a03169190911490506106765760006000fd5b604080518082018252848152602080820185815260008881526001835284902092516003840155516004909201919091558151858152908101849052815186927f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e46928290030190a25b5b50505050565b600081815260016020819052604090912001545b919050565b600081815260016020526040902054600160a060020a03165b919050565b60008054604080516020908101849052815160e060020a6302571be30281526004810188905291518794600160a060020a033381169516936302571be393602480830194919391928390030190829087803b151561077757fe5b6102c65a03f1151561078557fe5b505060405151600160a060020a03169190911490506107a45760006000fd5b60001983018316156107b65760006000fd5b6000848152600160209081526040808320868452600501825290912083516107e092850190610c1d565b50604051839085907faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe390600090a35b5b50505050565b61081e610c0b565b6000828152600160208181526040928390206002908101805485516000199582161561010002959095011691909104601f81018390048302840183019094528383529192908301828280156108b45780601f10610889576101008083540402835291602001916108b4565b820191906000526020600020905b81548152906001019060200180831161089757829003601f168201915b505050505090505b919050565b60008054604080516020908101849052815160e060020a6302571be30281526004810187905291518694600160a060020a033381169516936302571be393602480830194919391928390030190829087803b151561091b57fe5b6102c65a03f1151561092957fe5b505060405151600160a060020a03169190911490506109485760006000fd5b6000838152600160209081526040909120835161096d92600290920191850190610c1d565b50604080516020808252845181830152845186937fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f79387939092839283019185019080838382156109d9575b8051825260208311156109d957601f1990920191602091820191016109b9565b505050905090810190601f168015610a055780820380516001836020036101000a031916815260200191505b509250505060405180910390a25b5b505050565b60008054604080516020908101849052815160e060020a6302571be30281526004810187905291518694600160a060020a033381169516936302571be393602480830194919391928390030190829087803b1515610a7357fe5b6102c65a03f11515610a8157fe5b505060405151600160a060020a0316919091149050610aa05760006000fd5b6000838152600160208181526040928390209091018490558151848152915185927f0424b6fe0d9c3bdbece0e7879dc241bb0c22e900be8b6c168b4ee08bd9bf83bc92908290030190a25b5b505050565b600081815260016020526040902060038101546004909101545b915091565b60008054604080516020908101849052815160e060020a6302571be30281526004810187905291518694600160a060020a033381169516936302571be393602480830194919391928390030190829087803b1515610b6a57fe5b6102c65a03f11515610b7857fe5b505060405151600160a060020a0316919091149050610b975760006000fd5b600083815260016020908152604091829020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0386169081179091558251908152915185927f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd292908290030190a25b5b505050565b60408051602081019091526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610c5e57805160ff1916838001178555610c8b565b82800160010185558215610c8b579182015b82811115610c8b578251825591602001919060010190610c70565b5b50610c98929150610d2d565b5090565b60408051602081019091526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610c5e57805160ff1916838001178555610c8b565b82800160010185558215610c8b579182015b82811115610c8b578251825591602001919060010190610c70565b5b50610c98929150610d2d565b5090565b610d4b91905b80821115610c985760008155600101610d33565b5090565b905600a165627a7a72305820f05b42978350d3945a3fe885ef530e3f8ecbfcdb822550779dfcf0b06b00754f0029" +} diff --git a/deploy/00_deploy_legacy_resolvers.ts b/deploy/00_deploy_legacy_resolvers.ts new file mode 100644 index 000000000..fc79d1da9 --- /dev/null +++ b/deploy/00_deploy_legacy_resolvers.ts @@ -0,0 +1,78 @@ +/* eslint-disable import/no-extraneous-dependencies */ +import fs from 'fs/promises' +import { ethers } from 'hardhat' +import { DeployFunction } from 'hardhat-deploy/types' +import { HardhatRuntimeEnvironment } from 'hardhat/types' +import { resolve } from 'path' +import { namehash } from 'viem' + +const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { + const { getNamedAccounts, deployments } = hre + const allNamedAccts = await getNamedAccounts() + + const registry = await ethers.getContract('ENSRegistry') + + await deployments.deploy('NoMulticallResolver', { + from: allNamedAccts.deployer, + contract: JSON.parse( + await fs.readFile(resolve(__dirname, './.contracts/NoMulticallResolver.json'), { + encoding: 'utf8', + }), + ), + args: [registry.address], + }) + + await deployments.deploy('OldResolver', { + from: allNamedAccts.deployer, + contract: JSON.parse( + await fs.readFile(resolve(__dirname, './.contracts/OldResolver.json'), { + encoding: 'utf8', + }), + ), + args: [registry.address], + }) + + await deployments.deploy('NoTextResolver', { + from: allNamedAccts.deployer, + contract: JSON.parse( + await fs.readFile(resolve(__dirname, './.contracts/NoTextResolver.json'), { + encoding: 'utf8', + }), + ), + args: [registry.address], + }) + // const resolver = await ethers.getContract('NoMulticallResolver') + + // for (const { namedOwner, name, addr } of names) { + // const owner = allNamedAccts[namedOwner] + // const _resolver = resolver.connect(await ethers.getSigner(owner)) + // const _registry = registry.connect(await ethers.getSigner(owner)) + + // const tx = await _registry.setResolver(namehash(name), resolver.address) + // console.log( + // `Setting resolver for ${name} to ${resolver.address} (tx: ${tx.hash})...`, + // ) + // await tx.wait() + + // for (const { key, value } of addr) { + // const tx2 = await _resolver['setAddr(bytes32,uint256,bytes)']( + // namehash(name), + // key, + // value, + // { + // gasLimit: 100000, + // }, + // ) + // console.log(`Setting address for ${key} to ${value} (tx: ${tx.hash})...`) + // await tx2.wait() + // } + // } + + return true +} + +func.id = 'deploy-legacy-resolvers' +func.tags = ['deploy-legacy-resolvers'] +func.runAtTheEnd = true + +module.exports = func diff --git a/e2e/specs/stateless/profileEditor.spec.ts b/e2e/specs/stateless/profileEditor.spec.ts index 823c9cdb6..c08f96b36 100644 --- a/e2e/specs/stateless/profileEditor.spec.ts +++ b/e2e/specs/stateless/profileEditor.spec.ts @@ -20,6 +20,12 @@ const ownedResolverAddress = JSON.parse(process.env.NEXT_PUBLIC_DEPLOYMENT_ADDRESSES || '{}')?.OwnedResolver || '' const invalidResolverAddress = JSON.parse(process.env.NEXT_PUBLIC_DEPLOYMENT_ADDRESSES || '{}')?.NameWrapper || '' +const noMulticallResolverAddress = + JSON.parse(process.env.NEXT_PUBLIC_DEPLOYMENT_ADDRESSES || '{}')?.NoMulticallResolverAddress || '' +const oldestResolverAddress = + JSON.parse(process.env.NEXT_PUBLIC_DEPLOYMENT_ADDRESSES || '{}')?.OldesResolver || '' +const noTextResolverAddress = + JSON.parse(process.env.NEXT_PUBLIC_DEPLOYMENT_ADDRESSES || '{}')?.NoTextResolver || '' const dummyABI = { test: 'test', @@ -147,6 +153,7 @@ test.describe('migrations', () => { const profilePage = makePageObject('ProfilePage') await profilePage.editProfileButton.click() + await page.pause() await expect(page.getByText('Registry out of date')).toBeVisible() await expect(page.getByTestId('warning-overlay-next-button')).toHaveAttribute( 'href', @@ -155,6 +162,7 @@ test.describe('migrations', () => { }) test('should force a name without a resolver to update their resolver', async ({ + page, login, makeName, makePageObject, @@ -182,6 +190,7 @@ test.describe('migrations', () => { await login.connect() await profilePage.editProfileButton.click() + await page.pause() await expect(profilePage.profileEditor.locator('text=No resolver set')).toBeVisible() await profilePage.profileEditor.getByTestId('warning-overlay-next-button').click() @@ -195,6 +204,7 @@ test.describe('migrations', () => { test('should force a name with an unauthorised resolver to update their resolver', async ({ login, + page, makeName, makePageObject, }) => { @@ -217,6 +227,7 @@ test.describe('migrations', () => { await profilePage.goto(name) await profilePage.editProfileButton.click() + await page.pause() await expect(profilePage.profileEditor.getByText('Unauthorised resolver')).toBeVisible() await profilePage.profileEditor.getByTestId('warning-overlay-next-button').click() @@ -228,6 +239,7 @@ test.describe('migrations', () => { test('should force a name with an invalid resolver to update their resolver', async ({ login, + page, makeName, makePageObject, }) => { @@ -250,6 +262,7 @@ test.describe('migrations', () => { await profilePage.goto(name) await profilePage.editProfileButton.click() + await page.pause() await expect(profilePage.profileEditor.getByText('Unauthorised resolver')).toBeVisible() await profilePage.profileEditor.getByTestId('warning-overlay-next-button').click() @@ -261,6 +274,7 @@ test.describe('migrations', () => { test('should force a wrapped name with a resolver that is not name wrapper aware to migrate update their resolver', async ({ login, + page, makeName, makePageObject, }) => { @@ -281,6 +295,7 @@ test.describe('migrations', () => { await profilePage.goto(name) await profilePage.editProfileButton.click() + await page.pause() await expect(profilePage.profileEditor.getByText('Resolver incompatible')).toBeVisible() await profilePage.profileEditor.getByTestId('warning-overlay-next-button').click() @@ -629,6 +644,65 @@ test.describe('migrations', () => { await expect(page.getByText('No Content Hash')).toBeVisible() await expect(page.getByText('No ABI')).toBeVisible() }) + + test('old resolver', async ({ page, login, accounts, makeName, makePageObject }) => { + const name = await makeName({ + label: 'unwrapped', + type: 'legacy', + owner: 'user', + resolver: noTextResolverAddress, + records: await makeRecords(), + }) + + // Add records to latest resolver + await generateRecords({ accounts })({ + name, + owner: 'user', + resolver: newResolver, + records: await makeRecords({ + texts: [{ key: 'description', value: 'New profile' }], + coins: [{ coin: 'eth', value: createAccounts().getAddress('user2') }], + contentHash: 'bzz://d1de9994b4d039f6548d191eb26786769f580809256b4685ef316805265ea162', + abi: await encodeAbi({ encodeAs: 'cbor', data: { test2: 'test2' } }), + }), + }) + + const morePage = makePageObject('MorePage') + const recordsPage = makePageObject('RecordsPage') + const profilePage = makePageObject('ProfilePage') + const transactionModal = makePageObject('TransactionModal') + + await morePage.goto(name) + await login.connect() + + // await expect(morePage.resolver.getByText(oldResolver)).toBeVisible() + + await profilePage.goto(name) + await profilePage.editProfileButton.click() + await page.pause() + + await expect(page.getByText('Resolver out of sync')).toBeVisible() + await profilePage.profileEditor.getByTestId('warning-overlay-next-button').click() + + await page.getByTestId('migrate-profile-selector-reset').check() + await expect(page.getByTestId('migrate-profile-selector-reset')).toBeChecked() + await profilePage.profileEditor.getByTestId('warning-overlay-next-button').click() + + await expect(page.getByText('Reset profile')).toBeVisible() + await profilePage.profileEditor.getByTestId('warning-overlay-next-button').click() + + await transactionModal.autoComplete() + + await morePage.goto(name) + await expect(morePage.resolver.getByText(newResolver)).toBeVisible() + + await recordsPage.goto(name) + + await expect(page.getByTestId('text-amount')).toHaveText('0 Records') + await expect(page.getByTestId('address-amount')).toHaveText('0 Records') + await expect(page.getByText('No Content Hash')).toBeVisible() + await expect(page.getByText('No ABI')).toBeVisible() + }) }) test.describe('unwrapped', () => { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8be54304d..51859ab5b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -430,6 +430,84 @@ importers: specifier: ^1.0.0-pre.53 version: 1.0.0-pre.53 + .yalc/@ensdomains/ens-test-env: + dependencies: + '@ethersproject/wallet': + specifier: ^5.6.0 + version: 5.7.0 + ansi-colors: + specifier: ^4.1.1 + version: 4.1.3 + cli-progress: + specifier: ^3.10.0 + version: 3.12.0 + commander: + specifier: ^9.3.0 + version: 9.5.0 + concurrently: + specifier: ^7.1.0 + version: 7.6.0 + docker-compose: + specifier: ^0.24.7 + version: 0.24.8 + dotenv: + specifier: ^16.0.1 + version: 16.4.5 + js-yaml: + specifier: ^4.1.0 + version: 4.1.0 + lz4: + specifier: ^0.6.5 + version: 0.6.5 + progress-stream: + specifier: ^2.0.0 + version: 2.0.0 + tar-fs: + specifier: ^2.1.1 + version: 2.1.1 + viem: + specifier: ^2.21.37 + version: 2.21.40(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8) + wait-on: + specifier: ^6.0.1 + version: 6.0.1 + + .yalc/@ensdomains/ensjs: + dependencies: + '@adraffy/ens-normalize': + specifier: 1.10.1 + version: 1.10.1 + '@ensdomains/address-encoder': + specifier: 1.1.1 + version: 1.1.1 + '@ensdomains/content-hash': + specifier: 3.1.0-rc.1 + version: 3.1.0-rc.1 + '@ensdomains/dnsprovejs': + specifier: ^0.5.1 + version: 0.5.1 + abitype: + specifier: ^1.0.0 + version: 1.0.6(typescript@5.4.5)(zod@3.23.8) + dns-packet: + specifier: ^5.3.1 + version: 5.6.1 + graphql: + specifier: ^16.3.0 + version: 16.8.1 + graphql-request: + specifier: 6.1.0 + version: 6.1.0(encoding@0.1.13)(graphql@16.8.1) + pako: + specifier: ^2.1.0 + version: 2.1.0 + ts-pattern: + specifier: ^5.4.0 + version: 5.5.0 + viem: + specifier: ^2.9.2 + version: 2.21.40(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.23.8) + packages: '@adobe/css-tools@4.3.3': @@ -11823,9 +11901,9 @@ snapshots: '@ensdomains/address-encoder@1.1.1': dependencies: - '@noble/curves': 1.4.0 - '@noble/hashes': 1.4.0 - '@scure/base': 1.1.6 + '@noble/curves': 1.6.0 + '@noble/hashes': 1.5.0 + '@scure/base': 1.1.9 '@ensdomains/buffer@0.1.1': {} @@ -11880,7 +11958,7 @@ snapshots: '@ensdomains/ensjs@2.1.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)': dependencies: - '@babel/runtime': 7.24.6 + '@babel/runtime': 7.25.0 '@ensdomains/address-encoder': 0.1.9 '@ensdomains/ens': 0.4.5 '@ensdomains/resolver': 0.2.4 @@ -12734,8 +12812,8 @@ snapshots: '@metamask/utils@8.4.0': dependencies: '@ethereumjs/tx': 4.2.0 - '@noble/hashes': 1.4.0 - '@scure/base': 1.1.6 + '@noble/hashes': 1.5.0 + '@scure/base': 1.1.9 '@types/debug': 4.1.12 debug: 4.3.4(supports-color@5.5.0) pony-cause: 2.1.11 @@ -13516,19 +13594,19 @@ snapshots: dependencies: '@noble/hashes': 1.2.0 '@noble/secp256k1': 1.7.1 - '@scure/base': 1.1.6 + '@scure/base': 1.1.9 '@scure/bip32@1.3.3': dependencies: '@noble/curves': 1.3.0 '@noble/hashes': 1.3.3 - '@scure/base': 1.1.6 + '@scure/base': 1.1.9 '@scure/bip32@1.4.0': dependencies: '@noble/curves': 1.4.0 '@noble/hashes': 1.4.0 - '@scure/base': 1.1.6 + '@scure/base': 1.1.9 '@scure/bip32@1.5.0': dependencies: @@ -13539,17 +13617,17 @@ snapshots: '@scure/bip39@1.1.1': dependencies: '@noble/hashes': 1.2.0 - '@scure/base': 1.1.6 + '@scure/base': 1.1.9 '@scure/bip39@1.2.2': dependencies: '@noble/hashes': 1.3.3 - '@scure/base': 1.1.6 + '@scure/base': 1.1.9 '@scure/bip39@1.3.0': dependencies: '@noble/hashes': 1.4.0 - '@scure/base': 1.1.6 + '@scure/base': 1.1.9 '@scure/bip39@1.4.0': dependencies: @@ -13919,7 +13997,7 @@ snapshots: '@swc/helpers@0.5.2': dependencies: - tslib: 2.6.2 + tslib: 2.6.3 '@szmarczak/http-timer@4.0.6': dependencies: @@ -15670,7 +15748,7 @@ snapshots: capnp-ts@0.7.0: dependencies: debug: 4.3.6 - tslib: 2.6.2 + tslib: 2.6.3 transitivePeerDependencies: - supports-color @@ -17095,7 +17173,7 @@ snapshots: ethereum-bloom-filters@1.1.0: dependencies: - '@noble/hashes': 1.4.0 + '@noble/hashes': 1.5.0 ethereum-cryptography@0.1.3: dependencies: @@ -19028,7 +19106,7 @@ snapshots: media-query-parser@2.0.2: dependencies: - '@babel/runtime': 7.24.6 + '@babel/runtime': 7.25.0 media-typer@0.3.0: {} @@ -19289,7 +19367,7 @@ snapshots: stoppable: 1.1.0 undici: 5.28.4 workerd: 1.20240512.0 - ws: 8.17.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) youch: 3.3.3 zod: 3.23.8 transitivePeerDependencies: @@ -20426,7 +20504,7 @@ snapshots: dependencies: react: 18.3.1 react-style-singleton: 2.2.1(@types/react@18.2.21)(react@18.3.1) - tslib: 2.6.2 + tslib: 2.6.3 optionalDependencies: '@types/react': 18.2.21 @@ -20435,7 +20513,7 @@ snapshots: react: 18.3.1 react-remove-scroll-bar: 2.3.6(@types/react@18.2.21)(react@18.3.1) react-style-singleton: 2.2.1(@types/react@18.2.21)(react@18.3.1) - tslib: 2.6.2 + tslib: 2.6.3 use-callback-ref: 1.3.2(@types/react@18.2.21)(react@18.3.1) use-sidecar: 1.1.2(@types/react@18.2.21)(react@18.3.1) optionalDependencies: @@ -20452,7 +20530,7 @@ snapshots: get-nonce: 1.0.1 invariant: 2.2.4 react: 18.3.1 - tslib: 2.6.2 + tslib: 2.6.3 optionalDependencies: '@types/react': 18.2.21 @@ -20774,7 +20852,7 @@ snapshots: rtl-css-js@1.16.1: dependencies: - '@babel/runtime': 7.24.6 + '@babel/runtime': 7.25.0 run-async@2.4.1: {} @@ -21039,7 +21117,7 @@ snapshots: snake-case@3.0.4: dependencies: dot-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.6.3 socket.io-client@4.7.5(bufferutil@4.0.8)(utf-8-validate@5.0.10): dependencies: @@ -21971,7 +22049,7 @@ snapshots: use-callback-ref@1.3.2(@types/react@18.2.21)(react@18.3.1): dependencies: react: 18.3.1 - tslib: 2.6.2 + tslib: 2.6.3 optionalDependencies: '@types/react': 18.2.21 @@ -21984,7 +22062,7 @@ snapshots: dependencies: detect-node-es: 1.1.0 react: 18.3.1 - tslib: 2.6.2 + tslib: 2.6.3 optionalDependencies: '@types/react': 18.2.21 @@ -22680,8 +22758,8 @@ snapshots: webauthn-p256@0.0.5: dependencies: - '@noble/curves': 1.4.0 - '@noble/hashes': 1.4.0 + '@noble/curves': 1.6.0 + '@noble/hashes': 1.5.0 webextension-polyfill@0.10.0: {} diff --git a/src/components/pages/profile/[name]/registration/steps/Profile/AddProfileRecordView.tsx b/src/components/pages/profile/[name]/registration/steps/Profile/AddProfileRecordView.tsx index 08b89c3fe..feff39d41 100644 --- a/src/components/pages/profile/[name]/registration/steps/Profile/AddProfileRecordView.tsx +++ b/src/components/pages/profile/[name]/registration/steps/Profile/AddProfileRecordView.tsx @@ -3,14 +3,14 @@ import { Control, useWatch } from 'react-hook-form' import { useTranslation } from 'react-i18next' import styled, { css } from 'styled-components' -import { Button, Dialog, MagnifyingGlassSimpleSVG, mq, ScrollBox } from '@ensdomains/thorin' +import { Button, Dialog, Helper, MagnifyingGlassSimpleSVG, mq, ScrollBox } from '@ensdomains/thorin' import DismissDialogButton from '@app/components/@atoms/DismissDialogButton/DismissDialogButton' import { Spacer } from '@app/components/@atoms/Spacer' import { DialogFooterWithBorder } from '@app/components/@molecules/DialogComponentVariants/DialogFooterWithBorder' import { DialogInput } from '@app/components/@molecules/DialogComponentVariants/DialogInput' import { - grouped as options, + getGroupedProfileRecordsForInterfaces, ProfileRecord, ProfileRecordGroup, } from '@app/constants/profileRecordOptions' @@ -111,12 +111,25 @@ const DismissButtonWrapper = styled.div( type Props = { control: Control + hasTextInterface?: boolean + hasAddressInterface?: boolean + hasContenthashInterface?: boolean + hasAbiInterface?: boolean onAdd?: (records: ProfileRecord[]) => void onClose?: () => void showDismiss?: boolean } -export const AddProfileRecordView = ({ control, onAdd, onClose, showDismiss }: Props) => { +export const AddProfileRecordView = ({ + control, + hasTextInterface = true, + hasAddressInterface = true, + hasContenthashInterface = true, + hasAbiInterface = true, + onAdd, + onClose, + showDismiss, +}: Props) => { const { t, i18n } = useTranslation('register') const currentRecords = useWatch({ control, name: 'records' }) @@ -125,6 +138,12 @@ export const AddProfileRecordView = ({ control, onAdd, onClose, showDismiss }: P const [search, setSearch] = useState('') const filteredOptions = useMemo(() => { + const options = getGroupedProfileRecordsForInterfaces({ + textResolver: hasTextInterface, + addressResolver: hasAddressInterface, + contentHashResolver: hasContenthashInterface, + abiResolver: hasAbiInterface, + }) if (!i18n.isInitialized || !search) return options const matchSearch = (s: string) => s.toLowerCase().indexOf(search.toLocaleLowerCase()) !== -1 return options.map((option) => { @@ -150,7 +169,15 @@ export const AddProfileRecordView = ({ control, onAdd, onClose, showDismiss }: P items, } }) - }, [search, t, i18n]) + }, [ + search, + t, + i18n, + hasTextInterface, + hasAddressInterface, + hasContenthashInterface, + hasAbiInterface, + ]) // Tracks when to skip updating the sidebar while options grid is scrolling const shouldSkipObserverUpdateRef = useRef() @@ -307,6 +334,9 @@ export const AddProfileRecordView = ({ control, onAdd, onClose, showDismiss }: P
+ + Your custom resolver doesn't support all records + {filteredOptions.map((option) => { const showLabel = !['address', 'website'].includes(option.group) if (option.items.length === 0 && option.group !== 'other') return null diff --git a/src/constants/profileRecordOptions.test.ts b/src/constants/profileRecordOptions.test.ts new file mode 100644 index 000000000..acc042fd9 --- /dev/null +++ b/src/constants/profileRecordOptions.test.ts @@ -0,0 +1,8 @@ +import { describe, it, expect } from "vitest"; +import { getGroupedProfileRecordsForInterfaces } from "./profileRecordOptions"; + +describe('getGroupedProfileRecordsForInterfaces', () => { + it('', () => { + + }) +}) \ No newline at end of file diff --git a/src/constants/profileRecordOptions.ts b/src/constants/profileRecordOptions.ts index 532a53265..06a73c9fc 100644 --- a/src/constants/profileRecordOptions.ts +++ b/src/constants/profileRecordOptions.ts @@ -4,7 +4,10 @@ import coinsWithIcons from '@app/constants/coinsWithIcons.json' import coinsWithoutIcons from '@app/constants/coinsWithoutIcons.json' import { supportedContentHashKeys } from '@app/constants/supportedContentHashKeys' import { supportedGeneralRecordKeys } from '@app/constants/supportedGeneralRecordKeys' -import { supportedOtherRecordKeys } from '@app/constants/supportedOtherRecordKeys' +import { + getSupportedOtherRecordKeysForInterfaces, + supportedOtherRecordKeys, +} from '@app/constants/supportedOtherRecordKeys' import { supportedSocialRecordKeys } from '@app/constants/supportedSocialRecordKeys' export type ProfileRecordGroup = @@ -118,3 +121,49 @@ export const sortValues: { [key: string]: { [key: string]: number } } = { return acc }, {}), } + +export const getGroupedProfileRecordsForInterfaces = ( + interfaces: + | { + textResolver: boolean + addressResolver: boolean + abiResolver: boolean + contentHashResolver: boolean + } + | undefined, +) => { + const { + textResolver = true, + addressResolver = true, + abiResolver = true, + contentHashResolver = true, + } = interfaces || {} + if (textResolver && addressResolver && abiResolver && contentHashResolver) return grouped + return [ + { + group: 'general', + items: textResolver ? general : [], + }, + { + group: 'social', + items: textResolver ? social : [], + }, + { + group: 'address', + items: addressResolver ? address : [], + }, + { + group: 'website', + items: contentHashResolver ? website : [], + }, + { + group: 'other', + items: other.filter( + ({ type }) => + (type === 'abi' && abiResolver) || + (type === 'contenthash' && contentHashResolver) || + (type === 'text' && textResolver), + ), + }, + ] as const +} diff --git a/src/constants/resolverAddressData.ts b/src/constants/resolverAddressData.ts index 954ab36e7..be538289c 100644 --- a/src/constants/resolverAddressData.ts +++ b/src/constants/resolverAddressData.ts @@ -4,7 +4,7 @@ import { Address } from 'viem' import { deploymentAddresses } from './chains' import { RESOLVER_INTERFACE_IDS, ResolverInterfaceId } from './resolverInterfaceIds' -type KnownResolverItem = { +export type KnownResolverItem = { address: Address deployer: string tag: 'latest' | 'outdated' | null diff --git a/src/constants/supportedOtherRecordKeys.ts b/src/constants/supportedOtherRecordKeys.ts index 4e8730a6c..89bad73dd 100644 --- a/src/constants/supportedOtherRecordKeys.ts +++ b/src/constants/supportedOtherRecordKeys.ts @@ -1 +1,6 @@ export const supportedOtherRecordKeys = ['abi'] as const + +export const getSupportedOtherRecordKeysForInterfaces = (interfaces?: { abiResolver: boolean }) => { + const { abiResolver = true } = interfaces || {} + return abiResolver ? supportedOtherRecordKeys : [] +} diff --git a/src/hooks/resolver/useResolver.ts b/src/hooks/resolver/useResolver.ts new file mode 100644 index 000000000..a7c0e030a --- /dev/null +++ b/src/hooks/resolver/useResolver.ts @@ -0,0 +1,28 @@ +import { Hash } from 'viem' +import { useChainId } from 'wagmi' + +import { KNOWN_RESOLVER_DATA, KnownResolverItem } from '@app/constants/resolverAddressData' + +import { useResolverHasInterfaces } from '../useResolverHasInterfaces' + +type Resolver = KnownResolverItem + +export const useResolver = ({ resolverAddress }: { resolverAddress?: Hash }) => { + const chainId = useChainId() + const knownResolver = KNOWN_RESOLVER_DATA[chainId]?.find((r) => r.address === resolverAddress) + + const interfaces = useResolverHasInterfaces({ + resolverAddress: resolverAddress!, + interfaceNames: [ + 'AbiResolver', + 'AddressResolver', + 'MultiCoinAddressResolver', + 'ContentHashResolver', + 'TextResolver', + ], + enabled: !knownResolver && !!resolverAddress, + }) + + if (knownResolver) return knownResolver + return {} +} diff --git a/src/hooks/resolver/useResolverStatus.ts b/src/hooks/resolver/useResolverStatus.ts index 76ccc754d..8317c4d61 100644 --- a/src/hooks/resolver/useResolverStatus.ts +++ b/src/hooks/resolver/useResolverStatus.ts @@ -81,6 +81,7 @@ export const useResolverStatus = ({ hasResolver: false, hasLatestResolver: false, hasValidResolver: false, + isKnownResolver: false, isAuthorized: false, isNameWrapperAware: false, hasProfile: false, @@ -93,6 +94,7 @@ export const useResolverStatus = ({ ...defaultResults, hasResolver: !!profileResolverAddress && profileResolverAddress !== emptyAddress, hasLatestResolver: resolverType.data?.type === 'latest', + isKnownResolver: resolverType.data?.type !== 'custom', isNameWrapperAware: profileResolverAddress ? getResolverWrapperAwareness({ resolverAddress: profileResolverAddress, chainId }) || resolverIsAuthorised.data?.isAuthorised diff --git a/src/transaction-flow/input/ProfileEditor/ProfileEditor-flow.tsx b/src/transaction-flow/input/ProfileEditor/ProfileEditor-flow.tsx index 6d9b001f9..71dcc5132 100644 --- a/src/transaction-flow/input/ProfileEditor/ProfileEditor-flow.tsx +++ b/src/transaction-flow/input/ProfileEditor/ProfileEditor-flow.tsx @@ -27,10 +27,12 @@ import { useResolverStatus } from '@app/hooks/resolver/useResolverStatus' import { useIsWrapped } from '@app/hooks/useIsWrapped' import { useProfile } from '@app/hooks/useProfile' import { ProfileEditorForm, useProfileEditorForm } from '@app/hooks/useProfileEditorForm' +import { useResolverHasInterfaces } from '@app/hooks/useResolverHasInterfaces' import { createTransactionItem, TransactionItem } from '@app/transaction-flow/transaction' import TransactionLoader from '@app/transaction-flow/TransactionLoader' import type { TransactionDialogPassthrough } from '@app/transaction-flow/types' +import { useProfileEditorReducer } from './hooks/useProfileEditorReducer' // import { getResolverWrapperAwareness } from '@app/utils/utils' import ResolverWarningOverlay from './ResolverWarningOverlay' @@ -145,6 +147,7 @@ const ProfileEditor = ({ data = {}, transactions = [], dispatch, onDismiss }: Pr isDirtyForRecordAtIndex, hasErrors, } = useProfileEditorForm(existingRecords) + console.log('profileRecords', profileRecords, 'isLoading', isLoading) // Update profile records if transaction data exists const [isRecordsUpdated, setIsRecordsUpdated] = useState(false) @@ -185,6 +188,15 @@ const ProfileEditor = ({ data = {}, transactions = [], dispatch, onDismiss }: Pr }) console.log('resolverStatus', resolverStatus) + const { data: interfacesData } = useResolverHasInterfaces({ + resolverAddress: profile?.resolverAddress!, + interfaceNames: ['TextResolver', 'AddressResolver', 'AbiResolver', 'ContentHashResolver'], + enabled: !!profile?.resolverAddress, + }) + const [hasTextInterface, hasAddressInterface, hasAbiInterface, hasContenthashInterface] = + interfacesData || [] + console.log(interfacesData) + // const chainId = useChainId() const handleCreateTransaction = useCallback( @@ -211,21 +223,19 @@ const ProfileEditor = ({ data = {}, transactions = [], dispatch, onDismiss }: Pr const [avatarSrc, setAvatarSrc] = useState() const [avatarFile, setAvatarFile] = useState() + const hasOutdatedKnownResolver = + !resolverStatus.isLoading && + !resolverStatus.data?.hasLatestResolver && + !!resolverStatus.data?.isKnownResolver && + transactions.length === 0 + console.log('hasOutdatedKnownResolver', hasOutdatedKnownResolver, resolverStatus) + const hasNotMigratedProfile = !isProfileLoading && profile?.isMigrated === false + const shouldShowResolverWarning = hasOutdatedKnownResolver || hasNotMigratedProfile useEffect(() => { - if ( - !resolverStatus.isLoading && - !resolverStatus.data?.hasLatestResolver && - transactions.length === 0 - ) { - setView('warning') - } - }, [resolverStatus.isLoading, resolverStatus.data?.hasLatestResolver, transactions.length]) - - useEffect(() => { - if (!isProfileLoading && profile?.isMigrated === false) { + if (shouldShowResolverWarning) { setView('warning') } - }, [isProfileLoading, profile?.isMigrated]) + }, [shouldShowResolverWarning]) const handleDeleteRecord = (record: ProfileRecord, index: number) => { removeRecordAtIndex(index) @@ -237,6 +247,36 @@ const ProfileEditor = ({ data = {}, transactions = [], dispatch, onDismiss }: Pr } const canEditRecordsWhenWrapped = !!resolverStatus.data?.isAuthorized + console.log('canEditRecordsWhenWrapped', canEditRecordsWhenWrapped) + + console.log('resolverStatus', resolverStatus.isLoading) + const isLoading_ = isLoading || resolverStatus.isLoading + const [editorState, editorDispatch] = useProfileEditorReducer( + { + profile, + resolverStatus: resolverStatus.data, + isWrapped, + isLoading: isLoading_, + }, + {}, + ) + const view_ = editorState.flow[editorState.currentIndex] + console.log('editorState', editorState.flow[editorState.currentIndex]) + + const shouldInitializeEditorState = !isLoading_ && view_ === 'loading' + useEffect(() => { + if (shouldInitializeEditorState) + editorDispatch({ + type: 'init', + payload: { + profile, + resolverStatus: resolverStatus.data, + isWrapped, + isLoading: isLoading_, + }, + }) + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [shouldInitializeEditorState]) if (isLoading || resolverStatus.isLoading || !isRecordsUpdated) return @@ -366,6 +406,10 @@ const ProfileEditor = ({ data = {}, transactions = [], dispatch, onDismiss }: Pr .with('addRecord', () => ( { addRecords(newRecords) setView('editor') diff --git a/src/transaction-flow/input/ProfileEditor/hooks/useProfileEditorReducer.ts b/src/transaction-flow/input/ProfileEditor/hooks/useProfileEditorReducer.ts new file mode 100644 index 000000000..fc1561835 --- /dev/null +++ b/src/transaction-flow/input/ProfileEditor/hooks/useProfileEditorReducer.ts @@ -0,0 +1,108 @@ +import { useReducer } from 'react' +import { match, P } from 'ts-pattern' + +import type { useResolverStatus } from '@app/hooks/resolver/useResolverStatus' +import type { useProfile } from '@app/hooks/useProfile' + +type View = + | 'loading' + | 'migrateRegistry' + | 'noResolver' + | 'resolverNotNameWrapperAware' + | 'editor' + | 'upload' + | 'nft' + | 'addRecord' + +type State = { + flow: View[] + currentIndex: number +} + +type InitialData = { + resolverStatus: ReturnType['data'] + profile: ReturnType['data'] + isWrapped: boolean + isLoading: boolean +} + +const initializer = + (deps: any) => + ({ profile, resolverStatus, isWrapped, isLoading }: InitialData): State => { + const defaultState: State = { + flow: ['loading'], + currentIndex: 0, + } + + console.log('initializer', profile, resolverStatus, isLoading) + + if (isLoading || !profile || !resolverStatus) return defaultState + return match({ + profile, + resolverStatus, + isWrapped, + isLoading, + }) + .with( + { + profile: { isMigrated: false }, + }, + () => ({ ...defaultState, flow: ['migrateRegistry'] }), + ) + .with({ resolverStatus: { hasResolver: false } }, () => ({ + ...defaultState, + flow: ['noResolver'], + })) + .with({ resolverStatus: { isNameWrapperAware: false }, isWrapped: true }, () => ({ + ...defaultState, + flow: ['resolverNotNameWrapperAware'], + })) + .with( + { resolverStatus: { hasValidResolver: false } }, + { + resolverStatus: { isAuthorized: false }, + }, + () => ({ + ...defaultState, + flow: ['invalidResolver'], + }), + ) + .otherwise(() => ({ + ...defaultState, + flow: ['editor'], + })) + } + +type BaseAction = { + type: 'init' | 'increment' | 'decrement' | 'appendViews' + payload?: unknown +} + +type InitAction = BaseAction & { type: 'init'; payload: InitialData } +type IncrementAction = BaseAction & { type: 'increment'; payload: never } +type DecrementAction = BaseAction & { type: 'decrement'; payload: never } +type AppendViewsAction = BaseAction & { type: 'appendViews'; payload: View[] } + +type Action = InitAction | IncrementAction | DecrementAction | AppendViewsAction + +const reducer = (deps: any) => (state: any, action: Action) => { + const { type, payload } = action + switch (type) { + case 'init': + return initializer(deps)(payload) + case 'increment': + if (state.currentIndex >= state.flow.length - 1) return state + return { ...state, currentIndex: state.currentIndex + 1 } + case 'decrement': + if (state.currentIndex <= 0) return state + return { ...state, currentIndex: state.currentIndex - 1 } + case 'appendViews': + return { ...state, flow: [...state.flow, ...(payload as View[])] } + default: + return state + } +} + +export const useProfileEditorReducer = (initialState: InitialData, deps: {}) => { + return useReducer(reducer(deps), initialState, initializer(deps)) +} From 19ffe324123dab09121e03b604a31ae22863d6a5 Mon Sep 17 00:00:00 2001 From: storywithoutend Date: Wed, 11 Dec 2024 14:18:21 +0800 Subject: [PATCH 7/7] add legacy resolvers for testing --- deploy/.contracts/CustomResolver.json | 500 ++++++++++++++++++ deploy/.contracts/CustomResolver1.json | 5 + ...extResolver.json => LegacyResolverV1.json} | 0 deploy/.contracts/LegacyResolverV2.json | 170 ++++++ deploy/.contracts/LegacyResolverV3.json | 4 + deploy/.contracts/LegacyResolverV4.json | 4 + deploy/.contracts/LegacyResolverV5.json | 397 ++++++++++++++ deploy/00_deploy_legacy_resolvers.ts | 50 +- e2e/specs/stateless/profileEditor.spec.ts | 113 +++- src/constants/resolverAddressData.ts | 105 ++-- src/hooks/resolver/useResolverStatus.ts | 4 + src/hooks/resolver/useResolverType.ts | 1 + .../ProfileEditor/ProfileEditor-flow.tsx | 208 +++++++- .../hooks/useProfileEditorReducer.ts | 60 ++- .../views/ResolverOutOfDateView.tsx | 6 - .../views/TransferOrResetProfileView.tsx | 18 +- 16 files changed, 1539 insertions(+), 106 deletions(-) create mode 100644 deploy/.contracts/CustomResolver.json create mode 100644 deploy/.contracts/CustomResolver1.json rename deploy/.contracts/{NoTextResolver.json => LegacyResolverV1.json} (100%) create mode 100644 deploy/.contracts/LegacyResolverV2.json create mode 100644 deploy/.contracts/LegacyResolverV3.json create mode 100644 deploy/.contracts/LegacyResolverV4.json create mode 100644 deploy/.contracts/LegacyResolverV5.json diff --git a/deploy/.contracts/CustomResolver.json b/deploy/.contracts/CustomResolver.json new file mode 100644 index 000000000..cc434f5f6 --- /dev/null +++ b/deploy/.contracts/CustomResolver.json @@ -0,0 +1,500 @@ +{ + "abi": [ + { + "inputs": [ + { "internalType": "address[]", "name": "_signers", "type": "address[]" }, + { "internalType": "address", "name": "ens", "type": "address" }, + { "internalType": "address", "name": "nameWrapper", "type": "address" }, + { "internalType": "address", "name": "_fallbackResolver", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { "inputs": [], "name": "ECDSAInvalidSignature", "type": "error" }, + { + "inputs": [{ "internalType": "uint256", "name": "length", "type": "uint256" }], + "name": "ECDSAInvalidSignatureLength", + "type": "error" + }, + { + "inputs": [{ "internalType": "bytes32", "name": "s", "type": "bytes32" }], + "name": "ECDSAInvalidSignatureS", + "type": "error" + }, + { + "inputs": [ + { "internalType": "address", "name": "sender", "type": "address" }, + { "internalType": "string[]", "name": "urls", "type": "string[]" }, + { "internalType": "bytes", "name": "callData", "type": "bytes" }, + { "internalType": "bytes4", "name": "callbackFunction", "type": "bytes4" }, + { "internalType": "bytes", "name": "extraData", "type": "bytes" } + ], + "name": "OffchainLookup", + "type": "error" + }, + { + "inputs": [{ "internalType": "address", "name": "owner", "type": "address" }], + "name": "OwnableInvalidOwner", + "type": "error" + }, + { + "inputs": [{ "internalType": "address", "name": "account", "type": "address" }], + "name": "OwnableUnauthorizedAccount", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "indexed": true, "internalType": "uint256", "name": "contentType", "type": "uint256" } + ], + "name": "ABIChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "indexed": false, "internalType": "address", "name": "a", "type": "address" } + ], + "name": "AddrChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "indexed": false, "internalType": "uint256", "name": "coinType", "type": "uint256" }, + { "indexed": false, "internalType": "bytes", "name": "newAddress", "type": "bytes" } + ], + "name": "AddressChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "indexed": false, "internalType": "bytes", "name": "hash", "type": "bytes" } + ], + "name": "ContenthashChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": false, "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "indexed": false, "internalType": "address", "name": "newResolver", "type": "address" } + ], + "name": "FallbackResolverSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "indexed": true, "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" }, + { "indexed": false, "internalType": "address", "name": "implementer", "type": "address" } + ], + "name": "InterfaceChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "indexed": false, "internalType": "string", "name": "name", "type": "string" } + ], + "name": "NameChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": false, "internalType": "string[]", "name": "urls", "type": "string[]" } + ], + "name": "OffchainUrlsChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, + { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": false, "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "indexed": false, "internalType": "uint256", "name": "prevType", "type": "uint256" }, + { "indexed": false, "internalType": "uint256", "name": "newType", "type": "uint256" } + ], + "name": "ResolutionConfigChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "resolutionType", + "type": "uint256" + }, + { "indexed": false, "internalType": "string[]", "name": "urls", "type": "string[]" } + ], + "name": "ResolutionUrlsChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": false, "internalType": "address", "name": "signer", "type": "address" }, + { "indexed": false, "internalType": "bool", "name": "removed", "type": "bool" } + ], + "name": "SignerChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "indexed": true, "internalType": "string", "name": "indexedKey", "type": "string" }, + { "indexed": false, "internalType": "string", "name": "key", "type": "string" }, + { "indexed": false, "internalType": "string", "name": "value", "type": "string" } + ], + "name": "TextChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "indexed": false, "internalType": "uint64", "name": "newVersion", "type": "uint64" } + ], + "name": "VersionChanged", + "type": "event" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "uint256", "name": "contentTypes", "type": "uint256" } + ], + "name": "ABI", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" }, + { "internalType": "bytes", "name": "", "type": "bytes" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "bytes32", "name": "node", "type": "bytes32" }], + "name": "addr", + "outputs": [{ "internalType": "address payable", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "uint256", "name": "coinType", "type": "uint256" } + ], + "name": "addr", + "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "bytes32", "name": "node", "type": "bytes32" }], + "name": "clearRecords", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "name": "configs", + "outputs": [ + { "internalType": "bool", "name": "resolveOffchain", "type": "bool" }, + { "internalType": "uint256", "name": "resolutionType", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "bytes32", "name": "node", "type": "bytes32" }], + "name": "contenthash", + "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "defaultFallbackResolver", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "name": "fallbackResolvers", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" } + ], + "name": "interfaceImplementer", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address[]", "name": "_signers", "type": "address[]" }, + { "internalType": "bool", "name": "remove", "type": "bool" } + ], + "name": "modifyOffchainSigners", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "bytes[]", "name": "data", "type": "bytes[]" }], + "name": "multicall", + "outputs": [{ "internalType": "bytes[]", "name": "results", "type": "bytes[]" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "nodehash", "type": "bytes32" }, + { "internalType": "bytes[]", "name": "data", "type": "bytes[]" } + ], + "name": "multicallWithNodeCheck", + "outputs": [{ "internalType": "bytes[]", "name": "results", "type": "bytes[]" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "bytes32", "name": "node", "type": "bytes32" }], + "name": "name", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], + "name": "recordVersions", + "outputs": [{ "internalType": "uint64", "name": "", "type": "uint64" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" }, + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "name": "resolutionUrls", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes", "name": "dnsName", "type": "bytes" }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "name": "resolve", + "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes", "name": "response", "type": "bytes" }, + { "internalType": "bytes", "name": "extraData", "type": "bytes" } + ], + "name": "resolveWithProof", + "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "uint256", "name": "contentType", "type": "uint256" }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "name": "setABI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "uint256", "name": "coinType", "type": "uint256" }, + { "internalType": "bytes", "name": "a", "type": "bytes" } + ], + "name": "setAddr", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "address", "name": "a", "type": "address" } + ], + "name": "setAddr", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "bytes", "name": "hash", "type": "bytes" } + ], + "name": "setContenthash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "address", "name": "_fallbackResolver", "type": "address" }], + "name": "setDefaultFallbackResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "hash", "type": "bytes32" }, + { "internalType": "bool", "name": "value", "type": "bool" } + ], + "name": "setEmptyResponse", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "address", "name": "fallbackResolver", "type": "address" } + ], + "name": "setFallbackResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" }, + { "internalType": "address", "name": "implementer", "type": "address" } + ], + "name": "setInterface", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "string", "name": "newName", "type": "string" } + ], + "name": "setName", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "uint256", "name": "newResolutionType", "type": "uint256" } + ], + "name": "setResolutionType", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "resolutionType", "type": "uint256" }, + { "internalType": "string[]", "name": "urls", "type": "string[]" } + ], + "name": "setResolutionUrls", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "resolutionType", "type": "uint256" }, + { "internalType": "bool", "name": "supported", "type": "bool" } + ], + "name": "setSupportedResolutionType", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "string", "name": "key", "type": "string" }, + { "internalType": "string", "name": "value", "type": "string" } + ], + "name": "setText", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" }], + "name": "supportsInterface", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "string", "name": "key", "type": "string" } + ], + "name": "text", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "address", "name": "newOwner", "type": "address" }], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x604060c0815234620002945762003421803803806200001e81620002af565b928339810190608081830312620002945780516001600160401b039190828111620002945781019280601f850112156200029457835193602093851162000299578460051b90848062000073818501620002af565b809881520192820101928311620002945784809101915b8383106200027957509050620000a391508201620002d5565b90620000bf6060620000b7878401620002d5565b9201620002d5565b933315620002615760078054336001600160a01b031980831682179093556000956001600160a01b03958693909284929183167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08a80a3166080521660a052835b87835182101562000194575080846200013c60019386620002ea565b5116865260088752888620805460ff1916831790557f70f1a3dba165402559aaa92407aa69ed152f584fde0bc213bcf1c47acef771b68986620001808488620002ea565b51168151908152888a820152a10162000120565b828589896001858b7f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5638152600b8452600d8282209460ff199585878254161790557f569e75fc77c1a856f6daaf9e69d8a9566ca34aa47f9133711ce065a571af0cfd8352838320858782541617905561270f835252818120838582541617905561210581528181208385825416179055600a81522091825416179055169060095416176009555161310b9081620003168239608051818181612342015261270f015260a051816127800152f35b8551631e4fbdf760e01b815260006004820152602490fd5b81906200028684620002d5565b81520191019084906200008a565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6040519190601f01601f191682016001600160401b038111838210176200029957604052565b51906001600160a01b03821682036200029457565b8051821015620002ff5760209160051b010190565b634e487b7160e01b600052603260045260246000fdfe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a71461024757806310f13a8c14610242578063124a319c1461023d5780632203ab56146102385780632931570214610233578063304e6ade1461022e578063341e9393146102295780633603d758146102245780633b3b57de1461021f57806359d1d43c1461021a578063623195b014610215578063691f343114610210578063715018a61461020b5780637357c5671461020657806377372213146102015780637d85f6e2146101fc5780638b95dd71146101f75780638da5cb5b146101f25780638ed91c46146101ed5780639061b923146101e8578063a4c28248146101e3578063ac9650d8146101de578063aea9467d146101d9578063b9288916146101d4578063bc1c58d1146101cf578063bd47daa3146101ca578063c315b474146101c5578063ce8f6078146101c0578063d5fa2b00146101bb578063d700ff33146101b6578063e32954eb146101b1578063e59d895d146101ac578063f1cb7e06146101a7578063f2fde38b146101a25763f4d4d2f81461019d57600080fd5b6119c0565b611934565b6118d7565b611813565b6116fe565b6116c9565b6115cb565b611591565b61153a565b61139d565b61134e565b61131a565b6112d3565b6111f1565b611046565b610fdb565b610fb2565b610f89565b610e7f565b610dc9565b610ca1565b610c05565b610b45565b610adb565b610a1c565b6109a1565b610972565b6108c5565b6107bc565b61064a565b6105cc565b610584565b6104da565b6103f4565b61027f565b600435906001600160e01b03198216820361026357565b600080fd5b602435906001600160e01b03198216820361026357565b34610263576020366003190112610263576102ca6001600160e01b03196102a461024c565b16639061b92360e01b81149081156102ce575b5060405190151581529081906020820190565b0390f35b631674750f60e21b8114915081156102e8575b50386102b7565b63691f343160e01b811491508115610302575b50386102e1565b6304928c6760e21b81149150811561031c575b50386102fb565b63bc1c58d160e01b811491508115610336575b5038610315565b631d9dabef60e11b8114915081156103b6575b8115610357575b503861032f565b631101d5ab60e11b811491508115610371575b5038610350565b63d700ff3360e01b81149150811561038b575b503861036a565b634fbf043360e01b8114915081156103a5575b5038610384565b6301ffc9a760e01b1490503861039e565b6378e5bf0360e11b81149150610349565b9181601f84011215610263578235916001600160401b038311610263576020838186019501011161026357565b34610263576060366003190112610263576001600160401b03600435602435828111610263576104289036906004016103c7565b604492919235848111610263576104439036906004016103c7565b91909361044f846126e7565b15610263576104d47f448bc014f1536726cf8d54ff3d6481ed3cbc683c2591ca204274009afa09b1a1936000978689528860205260408920541688526006602052604088208689526020526104bd818860408b20602060405180928a8a83378a820190815203019020611b40565b6104c78484611c0e565b9660405194859485611c44565b0390a380f35b346102635760403660031901126102635760206105006104f8610268565b600435611ce4565b6040516001600160a01b039091168152f35b919082519283825260005b84811061053e575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161051d565b90604061056a92603c81528160208201520190610512565b90565b60409061056a939281528160208201520190610512565b34610263576040366003190112610263576105a3602435600435611ecc565b906102ca6040519283928361056d565b8015150361026357565b602435906105ca826105b3565b565b34610263576040366003190112610263576106156024356105ec816105b3565b6105f4612685565b600435600052600d60205260406000209060ff801983541691151516179055565b005b9060406003198301126102635760043591602435906001600160401b03821161026357610646916004016103c7565b9091565b346102635761065836610617565b9091610663816126e7565b1561026357600091818352602093836020526001600160401b03806040862054168552600360205260408520848652602052604085209083116107b7576106b4836106ae835461146a565b83611afb565b8495601f84116001146107295750610706838087987fe379c1624ed7e714cc0937528a32359d69d5281337765313dba4e081b72d757897989161071e575b508160011b916000199060031b1c19161790565b90555b61071860405192839283612007565b0390a280f35b9050840135386106f2565b601f1984169661073e83600052602060002090565b9187905b89821061079f575050847fe379c1624ed7e714cc0937528a32359d69d5281337765313dba4e081b72d757896979810610785575b5050600183811b019055610709565b830135600019600386901b60f8161c191690553880610776565b80600184958294958901358155019401920190610742565b610ba6565b34610263576040366003190112610263576004356024356107e46107df836126e7565b612018565b80600052600d60205260ff6040600020541615610874578161086f60016108367ffb370bde575cc90b84f91138780a4144849a157773e7bc467236da4842345e4295600052600c602052604060002090565b01549280600161085085600052600c602052604060002090565b0155604051938493846040919493926060820195825260208201520152565b0390a1005b60405162461bcd60e51b8152602060048201526024808201527f556e737570706f72746564207265736f6c7574696f6e20747970652070726f766044820152631a59195960e21b6064820152608490fd5b34610263576020366003190112610263576004356108e2816126e7565b156102635760009080825281602052604082208054906001600160401b038083169181831461096d577fc6621ccb8f3f5a04bb6502154b2caf6adf5983fe76dfef1cfc9c42e3579db44493826001610718950116906001600160401b03191617905583855284602052604085205416604051918291829190916001600160401b036020820193169052565b612064565b3461026357602036600319011261026357602061050060043561207a565b90602061056a928181520190610512565b3461026357610a06610a0d6102ca6109b836610617565b600094919492808452602095869185835260409586916001600160401b03838320541682526006855282822090825284522083865194859384378201908152030190208251958680926114a4565b0385610bbc565b51928284938452830190610512565b34610263576060366003190112610263576001600160401b0360243560043560443583811161026357610a539036906004016103c7565b610a5c836126e7565b1561026357600019840184811161096d57841661026357610ab491600095848752866020526040872054168652600160205260408620848752602052610aaf856040882090600052602052604060002090565b611f6a565b7faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe38380a380f35b346102635760208060031936011261026357610b2a90610b3160406004356000908082528185526001600160401b038383205416825260058552828220908252845220604051938480926114a4565b0383610bbc565b6102ca604051928284938452830190610512565b3461026357600080600319360112610ba357610b5f612685565b600780546001600160a01b0319811690915581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b80fd5b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b038211176107b757604052565b6001600160401b0381116107b75760051b60200190565b6001600160a01b0381160361026357565b34610263576040366003190112610263576004356001600160401b038111610263573660238201121561026357806004013590610c4182610bdd565b90610c4f6040519283610bbc565b8282526020926024602084019160051b8301019136831161026357602401905b828210610c885761061584610c826105bd565b906120f5565b8480918335610c9681610bf4565b815201910190610c6f565b3461026357610caf36610617565b9091610cba816126e7565b1561026357600091818352602093836020526001600160401b03806040862054168552600560205260408520848652602052604085209083116107b757610d05836106ae835461146a565b8495601f8411600114610d565750610706838087987fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f797989161071e57508160011b916000199060031b1c19161790565b601f19841696610d6b83600052602060002090565b9187905b898210610db1575050847fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f796979810610785575050600183811b019055610709565b80600184958294958901358155019401920190610d6f565b3461026357604036600319011261026357610615602435610de9816105b3565b610df1612685565b600435600052600b60205260406000209060ff801983541691151516179055565b6001600160401b0381116107b757601f01601f191660200190565b929192610e3982610e12565b91610e476040519384610bbc565b829481845281830111610263578281602093846000960137010152565b9080601f830112156102635781602061056a93359101610e2d565b34610263576060366003190112610263576001600160401b0360243560043560443583811161026357610eb6903690600401610e64565b90610ec0816126e7565b1561026357610f439281610f3e927f65412581168e88a1e60c6459d7f44ae83ad0832e670826c05a4e2476b57af75260405180610efe88878361056d565b0390a2603c8214610f46575b6000958187528660205260408720541686526002602052604086209086526020526040852090600052602052604060002090565b612247565b80f35b807f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd26020610f7387612805565b6040516001600160a01b039091168152a2610f0a565b34610263576000366003190112610263576007546040516001600160a01b039091168152602090f35b34610263576000366003190112610263576009546040516001600160a01b039091168152602090f35b34610263576040366003190112610263576001600160401b036004358181116102635761100c903690600401610e64565b90602435908111610263576102ca9161102c611032923690600401610e64565b90612310565b604051918291602083526020830190610512565b346102635760403660031901126102635760043560243561106681610bf4565b6110726107df836126e7565b6000828152600a60205260409020546001600160a01b0382811691161461110d57816110ec826110cd7f90e6a2cff4e717c36e6aa27f1da038ed159ffb4bb9a028ac97b4e706c156562795600052600a602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b604080519182526001600160a01b039092166020820152908190810161086f565b60405162461bcd60e51b815260206004820152602260248201527f53616d652066616c6c6261636b207265736f6c76657220616c72656164792073604482015261195d60f21b6064820152608490fd5b9181601f84011215610263578235916001600160401b038311610263576020808501948460051b01011161026357565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106111c35750505050505090565b90919293949584806111e1600193603f198682030187528a51610512565b98019301930191949392906111b3565b3461026357602080600319360112610263576004356001600160401b0381116102635761122290369060040161115d565b9161122c83610bdd565b9260409161123d6040519586610bbc565b818552601f1961124c83610bdd565b0160005b8181106112c45750505060005b81811061127257604051806102ca878261118d565b806000806112836001948689612b28565b90611292885180938193611ad6565b0390305af46112a86112a2611c8e565b91611acf565b6112b28288612233565b526112bd8187612233565b500161125d565b60608782018401528201611250565b34610263576020366003190112610263576004356112f081610bf4565b6112f8612685565b600980546001600160a01b0319166001600160a01b0392909216919091179055005b3461026357602036600319011261026357600435600052600a602052602060018060a01b0360406000205416604051908152f35b346102635760208060031936011261026357610b2a90610b3160406004356000908082528185526001600160401b038383205416825260038552828220908252845220604051938480926114a4565b34610263576040366003190112610263576001600160401b03602480358281116102635736602382011215610263578060040135916113db83610bdd565b926113e96040519485610bbc565b8084526020946024602086019260051b850101933685116102635760248101925b85841061141d57610615876004356123ef565b8335838111610263578201366043820112156102635788916114498392369060448a8201359101610e2d565b81520193019261140a565b634e487b7160e01b600052603260045260246000fd5b90600182811c9216801561149a575b602083101461148457565b634e487b7160e01b600052602260045260246000fd5b91607f1691611479565b8054600093926114b38261146a565b9182825260209360019160018116908160001461151b57506001146114da575b5050505050565b90939495506000929192528360002092846000945b838610611507575050505001019038808080806114d3565b8054858701830152940193859082016114ef565b60ff19168685015250505090151560051b0101915038808080806114d3565b34610263576040366003190112610263576024356000906004358252600e60205260408220805482101561158d5761158691602084611032936102ca96522001604051928380926114a4565b0382610bbc565b8280fd5b3461026357602036600319011261026357600435600052600c602052604080600020600160ff825416910154825191151582526020820152f35b346102635760408060031936011261026357600435906024356115ed81610bf4565b6115f6836126e7565b1561026357611603612c00565b9060601b6020820152611615836126e7565b1561026357610f3e82847f65412581168e88a1e60c6459d7f44ae83ad0832e670826c05a4e2476b57af752610f439551806116508782610552565b0390a2847f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd2602061168086612805565b84516001600160a01b039091168152a2600094808652856020526001600160401b038287205416865260026020528186209086526020528420603c600052602052604060002090565b3461026357602036600319011261026357600435600052600060205260206001600160401b0360406000205416604051908152f35b3461026357604080600319360112610263576004356024356001600160401b0381116102635761173290369060040161115d565b61173e81949294610bdd565b9361174c6040519586610bbc565b818552601f1961175b83610bdd565b0160005b8181106118025750508315159360005b83811061178457604051806102ca898261118d565b600190866117d6575b60008061179b838888612b28565b906117aa8a5180938193611ad6565b0390305af46117ba6112a2611c8e565b6117c4828a612233565b526117cf8189612233565b500161176f565b6117fd836117f76117f16117eb858a8a612b28565b90612b69565b90612b7a565b14612b97565b61178d565b806060602080938a0101520161175f565b346102635760603660031901126102635760043561182f610268565b906044359061183d82610bf4565b611846816126e7565b15610263577f7c69f06bea0bdef565b709e93a147836b0063ba2dd89f02d0b7e8d931e6a6daa60206000948386528582526001600160401b036040872054168652600482526040862084875282526118b8856110cd8360408a209063ffffffff60e01b16600052602052604060002090565b6040516001600160a01b0390951685526001600160e01b03191693a380f35b346102635760408060031936011261026357610a06906102ca60043591610a0d8160008581526020958187526001600160401b038383205416825260028752828220908252865281812060243582528652208251958680926114a4565b346102635760203660031901126102635760043561195181610bf4565b611959612685565b6001600160a01b039081169081156119a757600780546001600160a01b031981168417909155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b604051631e4fbdf760e01b815260006004820152602490fd5b34610263576040366003190112610263576001600160401b03600435818111610263576119f19036906004016103c7565b9060243583811161026357611a0a9036906004016103c7565b9390928201906060838303126102635782358181116102635782611a2f918501610e64565b9360208401359180831691828403610263576040860135918211610263576102ca97611a8f88611ab796611a7e611a9495611a75611abe9b611a9d99611ac39e01610e64565b95810190612c5c565b9091906001600160a01b0316612ec5565b612f42565b91421115612c92565b6001600160a01b0316600090815260086020526040902090565b5460ff1690565b612639565b60405191829182610990565b1561026357565b908092918237016000815290565b818110611aef575050565b60008155600101611ae4565b9190601f8111611b0a57505050565b6105ca926000526020600020906020601f840160051c83019310611b36575b601f0160051c0190611ae4565b9091508190611b29565b9092916001600160401b0381116107b757611b6581611b5f845461146a565b84611afb565b6000601f8211600114611ba6578190611b97939495600092611b9b575b50508160011b916000199060031b1c19161790565b9055565b013590503880611b82565b601f19821694611bbb84600052602060002090565b91805b878110611bf6575083600195969710611bdc575b505050811b019055565b0135600019600384901b60f8161c19169055388080611bd2565b90926020600181928686013581550194019101611bbe565b81604051928392833781016000815203902090565b908060209392818452848401376000828201840152601f01601f1916010190565b9290611c5d9061056a9593604086526040860191611c23565b926020818503910152611c23565b60405190602082018281106001600160401b038211176107b75760405260008252565b3d15611cb9573d90611c9f82610e12565b91611cad6040519384610bbc565b82523d6000602084013e565b606090565b8051601f1015611cce57603f0190565b611454565b908151811015611cce570160200190565b90611d64611d5782611d3f85611d30611d17611d0a836000526000602052604060002090565b546001600160401b031690565b6001600160401b03166000526004602052604060002090565b90600052602052604060002090565b9063ffffffff60e01b16600052602052604060002090565b546001600160a01b031690565b6001600160a01b039290838116611ec55750611d82611d8e9161207a565b6001600160a01b031690565b91821615611ebe576040516301ffc9a760e01b6020820181815260248084018390528352929091601f199190611dc5604482610bbc565b6000809581925190885afa611dd8611c8e565b9015908115611eb1575b8115611e91575b50611e8957604051602081019384526001600160e01b03199190911660248201526044918201815283928392909190611e229082610bbc565b5190855afa611e2f611c8e565b9015908115611e7c575b8115611e4e575b50611e49575090565b905090565b6001600160f81b03199150611e7490611e6690611cbe565b516001600160f81b03191690565b161538611e40565b9050602081511090611e39565b505050905090565b6001600160f81b03199150611ea990611e6690611cbe565b161538611de9565b9050602081511090611de2565b5050600090565b9250505090565b91906000928084526020846020526040906001600160401b038287205416865260019260016020528287209087526020528186209060015b85811115611f1a5750505050505061056a611c6b565b858116151580611f50575b611f3057841b611f04565b808852919052948190209051925061056a915082906115869082906114a4565b50808852828252611f638489205461146a565b1515611f25565b9092916001600160401b0381116107b757611f8981611b5f845461146a565b6000601f8211600114611fba578190611b97939495600092611b9b5750508160011b916000199060031b1c19161790565b601f19821694611fcf84600052602060002090565b91805b878110611fef575083600195969710611bdc57505050811b019055565b90926020600181928686013581550194019101611fd2565b91602061056a938181520191611c23565b1561201f57565b60405162461bcd60e51b815260206004820152601d60248201527f4e6f207065726d697373696f6e7320746f206d6f64696679206e616d650000006044820152606490fd5b634e487b7160e01b600052601160045260246000fd5b600090808252816020526001600160401b03604083205416825260026020526040822090825260205260408120603c82526020526115866120c460408320604051928380926114a4565b8051156120d55761056a9150612805565b5090565b60001981019190821161096d57565b9190820391821161096d57565b91906120ff612685565b60005b835181101561222d57600190821561219a5761213e612134611a9d6121278489612233565b516001600160a01b031690565b805460ff19169055565b7f70f1a3dba165402559aaa92407aa69ed152f584fde0bc213bcf1c47acef771b661219061216f6121278489612233565b604080516001600160a01b0390921682526001602083015290918291820190565b0390a15b01612102565b6121c9828060a01b036121ad8388612233565b51166001600160a01b0316600090815260086020526040902090565b805460ff1916831790557f70f1a3dba165402559aaa92407aa69ed152f584fde0bc213bcf1c47acef771b66122256122046121278489612233565b604080516001600160a01b0390921682526000602083015290918291820190565b0390a1612194565b50509050565b8051821015611cce5760209160051b010190565b91909182516001600160401b0381116107b75761226881611b5f845461146a565b602080601f83116001146122a657508190611b9793949560009261229b5750508160011b916000199060031b1c19161790565b015190503880611b82565b90601f198316956122bc85600052602060002090565b926000905b8882106122f8575050836001959697106122df57505050811b019055565b015160001960f88460031b161c19169055388080611bd2565b806001859682949686015181550195019301906122c1565b909161231d600083612864565b604051630178b8bf60e01b8152600481018290526001600160a01b03906020816024817f000000000000000000000000000000000000000000000000000000000000000086165afa9081156123ea576000916123bb575b5016151580612396575b612389575050612a59565b61056a92509290926129cb565b506123b660ff6123b083600052600c602052604060002090565b54161590565b61237e565b6123dd915060203d6020116123e3575b6123d58183610bbc565b8101906126b1565b38612374565b503d6123cb565b6126c6565b91906123f9612685565b6000928084526020600e6020526040852094835191600160401b83116107b757865483885580841061249f575b5061243d6020869893980192600052602060002090565b96915b83831061248357505050507f0df0b0cbb9f439eba06faac70607df7d7c1ec883582b7501d2e73b28e5262ffc92935061247e60405192839283612622565b0390a1565b600182826124938394518c612520565b01980192019196612440565b878352836020842091820191015b8181106124ba5750612426565b806124c76001925461146a565b806124d4575b50016124ad565b601f9081811184146124ec5750508481555b386124cd565b8361250e9261250085600052602060002090565b920160051c82019101611ae4565b600081815260208120818355556124e6565b91909182516001600160401b0381116107b75761254181611b5f845461146a565b602080601f831160011461257457508190611b9793949560009261229b5750508160011b916000199060031b1c19161790565b90601f1983169561258a85600052602060002090565b926000905b8882106125ad575050836001959697106122df57505050811b019055565b8060018596829496860151815501950193019061258f565b90808251908181526020809101926020808460051b8301019501936000915b8483106125f45750505050505090565b9091929394958480612612600193601f198682030187528a51610512565b98019301930191949392906125e4565b60409061056a9392815281602082015201906125c5565b1561264057565b60405162461bcd60e51b815260206004820152601c60248201527f5369676e61747572653a20496e76616c6964207369676e6174757265000000006044820152606490fd5b6007546001600160a01b0316330361269957565b60405163118cdaa760e01b8152336004820152602490fd5b90816020910312610263575161056a81610bf4565b6040513d6000823e3d90fd5b90816020910312610263575161056a816105b3565b6040516302571be360e01b8152600481018290526001600160a01b03919060209081816024817f000000000000000000000000000000000000000000000000000000000000000088165afa9081156123ea576000916127e8575b5083163314918215612755575b5050905090565b6040516341415eab60e01b8152600481019190915233602482015290929091508290829060449082907f0000000000000000000000000000000000000000000000000000000000000000165afa9182156123ea576000926127bb575b505080388061274e565b6127da9250803d106127e1575b6127d28183610bbc565b8101906126d2565b38806127b1565b503d6127c8565b6127ff9150823d84116123e3576123d58183610bbc565b38612741565b6014815103610263576020015160601c90565b1561281f57565b60405162461bcd60e51b815260206004820152601d60248201527f6e616d65686173683a204a756e6b20617420656e64206f66206e616d650000006044820152606490fd5b9081518110156129235761289561288f6001600160f81b03196128878486611cd3565b511660f81c90565b60ff1690565b908115612915576128c26128bd6128b5846128af85612cea565b87612f58565b935b83612cf8565b612cea565b9082156128fa57506128d49192612864565b6040805160208101928352808201939093528252906128f4606082610bbc565b51902090565b91505061290a61291092516120d9565b14612818565b600090565b6128c26128bd6000936128b7565b60405162461bcd60e51b815260206004820152601e60248201527f726561644c6162656c3a20496e646578206f7574206f6620626f756e647300006044820152606490fd5b1561296f57565b60405162461bcd60e51b815260206004820152602e60248201527f436f756c64206e6f74207175657279207468652066616c6c6261636b2072657360448201526d1bdb1d995c8818dbdb9d1c9858dd60921b6064820152608490fd5b9060208101906000918280835183305afa936129e5611c8e565b9480612a3c575b612a35578352600a602052604083205492935083926001600160a01b0390811680612a2d575060095416915b51915afa61056a612a27611c8e565b91612968565b905091612a18565b5050505090565b50845160208601208452600b60205260ff604085205416156129ec565b90612a6382612d05565b8015612b1f575b600052602091600e6020526040926040600020805491612a8983610bdd565b95612a976040519788610bbc565b83875260208701926000526020600020906000935b858510612afc578888888251612de45760405162461bcd60e51b8152602060048201526018602482015277139bc81c995cdbdd5b1d1a5bdb881d5c9b1cc8199bdd5b9960421b6044820152606490fd5b60018481928451612b1181611586818a6114a4565b815201930194019391612aac565b5061270f612a6a565b9190811015611cce5760051b81013590601e19813603018212156102635701908135916001600160401b038311610263576020018236038113610263579190565b906024116102635760040190602090565b359060208110612b88575090565b6000199060200360031b1b1690565b15612b9e57565b60405162461bcd60e51b815260206004820152603460248201527f6d756c746963616c6c3a20416c6c207265636f726473206d7573742068617665604482015273040c240dac2e8c6d0d2dcce40dcc2dacad0c2e6d60631b6064820152608490fd5b60405190604082018281106001600160401b038211176107b7576040526014825260203681840137565b90612c3482610e12565b612c416040519182610bbc565b8281528092612c52601f1991610e12565b0190602036910137565b91906040838203126102635782356001600160401b03811161026357602091612c86918501610e64565b92013561056a81610bf4565b15612c9957565b60405162461bcd60e51b8152602060048201526024808201527f5369676e617475726556657269666965723a205369676e6174757265206578706044820152631a5c995960e21b6064820152608490fd5b906001820180921161096d57565b9190820180921161096d57565b600090612d128282612864565b805b612d1d57505090565b808352602091600c8352600192836040862001541515600014612d57575050612d52919250600052600c602052604060002090565b015490565b90809392505115611cce57612d72849184015160f81c612cea565b91612d86612d818486516120e8565b612c2a565b9282825b612da1575b505050612d9b91612864565b80612d14565b9091928451821015612dde57508281612dc7611e66612dc1849587612cf8565b89611cd3565b881a612dd38288611cd3565b530186939291612d8a565b92612d8f565b612e1b612e919392612ea4612ec193612e2d6040938451958693639061b92360e01b60208601528660248601526064850190610512565b83810360231901604485015290610512565b0391612e41601f1993848101865285610bbc565b612e6c81519382602086015284612e5b6060820188610512565b308583015203908101855284610bbc565b51630556f18360e41b815230600482015260a0602482015295869560a48701906125c5565b6003199384878303016044880152610512565b631e9a9a5f60e31b60648601528481039092016084850152610512565b0390fd5b92909160208151910120906020815191012090604051926020840194601960f81b86526bffffffffffffffffffffffff199060601b1660228501526001600160401b0360c01b9060c01b166036840152603e830152605e820152605e8152608081018181106001600160401b038211176107b75760405251902090565b61056a91612f4f91612f72565b90929192612fce565b9082810180821161096d5782511061026357016020012090565b8151919060418303612fa357612f9c92506020820151906060604084015193015160001a9061305b565b9192909190565b505060009160029190565b60041115612fb857565b634e487b7160e01b600052602160045260246000fd5b612fd781612fae565b80612fe0575050565b612fe981612fae565b600181036130035760405163f645eedf60e01b8152600490fd5b61300c81612fae565b6002810361302d5760405163fce698f760e01b815260048101839052602490fd5b80613039600392612fae565b146130415750565b6040516335e2f38360e21b81526004810191909152602490fd5b91906fa2a8918ca85bafe22016d0b997e4df60600160ff1b0384116130c957926020929160ff608095604051948552168484015260408301526060820152600092839182805260015afa156123ea5780516001600160a01b038116156130c057918190565b50809160019190565b5050506000916003919056fea2646970667358221220fc06b184e314ff943d6c11b9e3d1cabe7bdfd0b88e4e8e5da353c804e0cab27d64736f6c63430008180033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000c2e074ec69a0dfb2997ba6c7d2e1e000000000000000000000000d4416b13d2b3a9abae7acd5d6c2bbdbe25686401000000000000000000000000231b0ee14048e9dccd1d247744d114a4eb5e8e630000000000000000000000000000000000000000000000000000000000000001000000000000000000000000740bdb3d297f951ad44bef7216ddd2cda339940b" +} diff --git a/deploy/.contracts/CustomResolver1.json b/deploy/.contracts/CustomResolver1.json new file mode 100644 index 000000000..95018fa86 --- /dev/null +++ b/deploy/.contracts/CustomResolver1.json @@ -0,0 +1,5 @@ +{ + "abi": [{"inputs":[{"internalType":"contract ENS","name":"_ens","type":"address"},{"internalType":"contract INameWrapper","name":"wrapperAddress","type":"address"},{"internalType":"address","name":"_trustedETHController","type":"address"},{"internalType":"address","name":"_trustedReverseRegistrar","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"contentType","type":"uint256"}],"name":"ABIChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"address","name":"a","type":"address"}],"name":"AddrChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"coinType","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"newAddress","type":"bytes"}],"name":"AddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":true,"internalType":"bool","name":"approved","type":"bool"}],"name":"Approved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"hash","type":"bytes"}],"name":"ContenthashChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"name","type":"bytes"},{"indexed":false,"internalType":"uint16","name":"resource","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"record","type":"bytes"}],"name":"DNSRecordChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"name","type":"bytes"},{"indexed":false,"internalType":"uint16","name":"resource","type":"uint16"}],"name":"DNSRecordDeleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"lastzonehash","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"zonehash","type":"bytes"}],"name":"DNSZonehashChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"bytes4","name":"interfaceID","type":"bytes4"},{"indexed":false,"internalType":"address","name":"implementer","type":"address"}],"name":"InterfaceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"string","name":"name","type":"string"}],"name":"NameChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"x","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"y","type":"bytes32"}],"name":"PubkeyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"string","name":"indexedKey","type":"string"},{"indexed":false,"internalType":"string","name":"key","type":"string"},{"indexed":false,"internalType":"string","name":"value","type":"string"}],"name":"TextChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"uint64","name":"newVersion","type":"uint64"}],"name":"VersionChanged","type":"event"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"contentTypes","type":"uint256"}],"name":"ABI","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"addr","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"coinType","type":"uint256"}],"name":"addr","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"address","name":"delegate","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"clearRecords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"contenthash","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes32","name":"name","type":"bytes32"},{"internalType":"uint16","name":"resource","type":"uint16"}],"name":"dnsRecord","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes32","name":"name","type":"bytes32"}],"name":"hasDNSRecords","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"interfaceImplementer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"address","name":"delegate","type":"address"}],"name":"isApprovedFor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"nodehash","type":"bytes32"},{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicallWithNodeCheck","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"pubkey","outputs":[{"internalType":"bytes32","name":"x","type":"bytes32"},{"internalType":"bytes32","name":"y","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"recordVersions","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"contentType","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"setABI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"coinType","type":"uint256"},{"internalType":"bytes","name":"a","type":"bytes"}],"name":"setAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"address","name":"a","type":"address"}],"name":"setAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes","name":"hash","type":"bytes"}],"name":"setContenthash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"setDNSRecords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes4","name":"interfaceID","type":"bytes4"},{"internalType":"address","name":"implementer","type":"address"}],"name":"setInterface","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"newName","type":"string"}],"name":"setName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes32","name":"x","type":"bytes32"},{"internalType":"bytes32","name":"y","type":"bytes32"}],"name":"setPubkey","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"value","type":"string"}],"name":"setText","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes","name":"hash","type":"bytes"}],"name":"setZonehash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"key","type":"string"}],"name":"text","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"zonehash","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"}], + "bytecode": "0x6101006040523480156200001257600080fd5b50604051620032943803806200329483398101604081905262000035916200017a565b6040516302571be360e01b81527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e26004820152849033906000906001600160a01b038416906302571be390602401602060405180830381865afa158015620000a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000c79190620001e2565b604051630f41a04d60e11b81526001600160a01b03848116600483015291925090821690631e83409a906024016020604051808303816000875af115801562000114573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200013a919062000209565b5050506001600160a01b039485166080525091831660a052821660c0521660e05262000223565b6001600160a01b03811681146200017757600080fd5b50565b600080600080608085870312156200019157600080fd5b84516200019e8162000161565b6020860151909450620001b18162000161565b6040860151909350620001c48162000161565b6060860151909250620001d78162000161565b939692955090935050565b600060208284031215620001f557600080fd5b8151620002028162000161565b9392505050565b6000602082840312156200021c57600080fd5b5051919050565b60805160a05160c05160e0516130306200026460003960006117d7015260006117a50152600081816118af01526119150152600061183801526130306000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80638b95dd7111610104578063c8690233116100a2578063e32954eb11610071578063e32954eb14610504578063e59d895d14610517578063e985e9c51461052a578063f1cb7e061461056657600080fd5b8063c869023314610442578063ce3decdc1461049b578063d5fa2b00146104ae578063d700ff33146104c157600080fd5b8063a8fa5682116100de578063a8fa5682146103b8578063a9784b3e146103cb578063ac9650d81461040f578063bc1c58d11461042f57600080fd5b80638b95dd711461037f578063a22cb46514610392578063a4b91a01146103a557600080fd5b80633603d7581161017c5780635c98042b1161014b5780635c98042b14610333578063623195b014610346578063691f343114610359578063773722131461036c57600080fd5b80633603d758146102a15780633b3b57de146102b45780634cbf6ba4146102c757806359d1d43c1461031357600080fd5b8063124a319c116101b8578063124a319c1461022f5780632203ab561461025a57806329cd62ea1461027b578063304e6ade1461028e57600080fd5b806301ffc9a7146101df5780630af179d71461020757806310f13a8c1461021c575b600080fd5b6101f26101ed366004612529565b610579565b60405190151581526020015b60405180910390f35b61021a610215366004612586565b61058a565b005b61021a61022a3660046125d2565b610794565b61024261023d36600461264c565b610861565b6040516001600160a01b0390911681526020016101fe565b61026d610268366004612678565b610b0d565b6040516101fe9291906126ea565b61021a610289366004612703565b610c44565b61021a61029c366004612586565b610cdf565b61021a6102af36600461272f565b610d5b565b6102426102c236600461272f565b610dfe565b6101f26102d5366004612678565b6000828152602081815260408083205467ffffffffffffffff1683526006825280832094835293815283822092825291909152205461ffff16151590565b610326610321366004612586565b610e30565b6040516101fe9190612748565b61032661034136600461272f565b610f10565b61021a61035436600461275b565b610fcf565b61032661036736600461272f565b61106c565b61021a61037a366004612586565b6110a6565b61021a61038d3660046127c4565b611122565b61021a6103a03660046128ad565b611202565b61021a6103b33660046128d9565b6112f1565b6103266103c6366004612917565b6113be565b6101f26103d9366004612957565b6001600160a01b039283166000908152600c60209081526040808320948352938152838220929094168152925290205460ff1690565b61042261041d3660046129d3565b61140c565b6040516101fe9190612a15565b61032661043d36600461272f565b61141a565b61048661045036600461272f565b6000818152602081815260408083205467ffffffffffffffff168352600982528083209383529290522080546001909101549091565b604080519283526020830191909152016101fe565b61021a6104a9366004612586565b611454565b61021a6104bc366004612a77565b611597565b6104eb6104cf36600461272f565b60006020819052908152604090205467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101fe565b610422610512366004612aa7565b6115be565b61021a610525366004612ae6565b6115d3565b6101f2610538366004612b1b565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205460ff1690565b610326610574366004612678565b611692565b60006105848261175a565b92915050565b8261059481611798565b61059d57600080fd5b600084815260208181526040808320548151601f870184900484028101840190925285825283926060928392859267ffffffffffffffff9091169183916106039183918d908d908190840183828082843760009201919091525092939250506119ff9050565b90505b8051516020820151101561072d578661ffff1660000361066b578060400151965061063081611a60565b9450846040516020016106439190612b49565b60405160208183030381529060405280519060200120925061066481611a81565b935061071f565b600061067682611a60565b9050816040015161ffff168861ffff1614158061069a57506106988682611a9d565b155b1561071d576106f68c878a8e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505060208801518d91506106ed908290612b7b565b8b51158a611abb565b81604001519750816020015196508095508580519060200120935061071a82611a81565b94505b505b61072881611d28565b610606565b50835115610788576107888a85888c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c925061077f91508290508f612b7b565b89511588611abb565b50505050505050505050565b8461079e81611798565b6107a757600080fd5b6000868152602081815260408083205467ffffffffffffffff168352600a8252808320898452909152908190209051849184916107e79089908990612b8e565b90815260200160405180910390209182610802929190612c26565b508484604051610813929190612b8e565b6040518091039020867f448bc014f1536726cf8d54ff3d6481ed3cbc683c2591ca204274009afa09b1a1878787876040516108519493929190612d0f565b60405180910390a3505050505050565b6000828152602081815260408083205467ffffffffffffffff1683526007825280832085845282528083206001600160e01b0319851684529091528120546001600160a01b031680156108b5579050610584565b60006108c085610dfe565b90506001600160a01b0381166108db57600092505050610584565b6040516301ffc9a760e01b602482015260009081906001600160a01b0384169060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166301ffc9a760e01b179052516109489190612b49565b600060405180830381855afa9150503d8060008114610983576040519150601f19603f3d011682016040523d82523d6000602084013e610988565b606091505b509150915081158061099b575060208151105b806109dd575080601f815181106109b4576109b4612d41565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016155b156109ef576000945050505050610584565b6040516001600160e01b0319871660248201526001600160a01b0384169060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166301ffc9a760e01b17905251610a5a9190612b49565b600060405180830381855afa9150503d8060008114610a95576040519150601f19603f3d011682016040523d82523d6000602084013e610a9a565b606091505b509092509050811580610aae575060208151105b80610af0575080601f81518110610ac757610ac7612d41565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016155b15610b02576000945050505050610584565b509095945050505050565b6000828152602081815260408083205467ffffffffffffffff168352600180835281842086855290925282206060915b848111610c245780851615801590610b6d575060008181526020839052604081208054610b6990612b9e565b9050115b15610c1c5780826000838152602001908152602001600020808054610b9190612b9e565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbd90612b9e565b8015610c0a5780601f10610bdf57610100808354040283529160200191610c0a565b820191906000526020600020905b815481529060010190602001808311610bed57829003601f168201915b50505050509050935093505050610c3d565b60011b610b3d565b5060006040518060200160405280600081525092509250505b9250929050565b82610c4e81611798565b610c5757600080fd5b604080518082018252848152602080820185815260008881528083528481205467ffffffffffffffff1681526009835284812089825283528490209251835551600190920191909155815185815290810184905285917f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e4691015b60405180910390a250505050565b82610ce981611798565b610cf257600080fd5b6000848152602081815260408083205467ffffffffffffffff168352600382528083208784529091529020610d28838583612c26565b50837fe379c1624ed7e714cc0937528a32359d69d5281337765313dba4e081b72d75788484604051610cd1929190612d57565b80610d6581611798565b610d6e57600080fd5b6000828152602081905260408120805467ffffffffffffffff1691610d9283612d6b565b82546101009290920a67ffffffffffffffff818102199093169183160217909155600084815260208181526040918290205491519190921681528492507fc6621ccb8f3f5a04bb6502154b2caf6adf5983fe76dfef1cfc9c42e3579db444910160405180910390a25050565b600080610e0c83603c611692565b90508051600003610e205750600092915050565b610e2981611e10565b9392505050565b6000838152602081815260408083205467ffffffffffffffff168352600a825280832086845290915290819020905160609190610e709085908590612b8e565b90815260200160405180910390208054610e8990612b9e565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb590612b9e565b8015610f025780601f10610ed757610100808354040283529160200191610f02565b820191906000526020600020905b815481529060010190602001808311610ee557829003601f168201915b505050505090509392505050565b6000818152602081815260408083205467ffffffffffffffff168352600482528083208484529091529020805460609190610f4a90612b9e565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7690612b9e565b8015610fc35780601f10610f9857610100808354040283529160200191610fc3565b820191906000526020600020905b815481529060010190602001808311610fa657829003601f168201915b50505050509050919050565b83610fd981611798565b610fe257600080fd5b83610fee600182612b7b565b1615610ff957600080fd5b6000858152602081815260408083205467ffffffffffffffff1683526001825280832088845282528083208784529091529020611037838583612c26565b50604051849086907faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe390600090a35050505050565b6000818152602081815260408083205467ffffffffffffffff168352600882528083208484529091529020805460609190610f4a90612b9e565b826110b081611798565b6110b957600080fd5b6000848152602081815260408083205467ffffffffffffffff1683526008825280832087845290915290206110ef838583612c26565b50837fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f78484604051610cd1929190612d57565b8261112c81611798565b61113557600080fd5b837f65412581168e88a1e60c6459d7f44ae83ad0832e670826c05a4e2476b57af75284846040516111679291906126ea565b60405180910390a2603c83036111be57837f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd26111a284611e10565b6040516001600160a01b03909116815260200160405180910390a25b6000848152602081815260408083205467ffffffffffffffff16835260028252808320878452825280832086845290915290206111fb8382612d92565b5050505050565b6001600160a01b03821633036112855760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b336000818152600b602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6001600160a01b03821633036113495760405162461bcd60e51b815260206004820181905260248201527f53657474696e672064656c65676174652073746174757320666f722073656c66604482015260640161127c565b336000818152600c6020908152604080832087845282528083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519384529286917ff0ddb3b04746704017f9aa8bd728fcc2c1d11675041205350018915f5e4750a0910160405180910390a4505050565b6000838152602081815260408083205467ffffffffffffffff168352600582528083208684528252808320858452825280832061ffff851684529091529020805460609190610e8990612b9e565b6060610e2960008484611e38565b6000818152602081815260408083205467ffffffffffffffff168352600382528083208484529091529020805460609190610f4a90612b9e565b8261145e81611798565b61146757600080fd5b6000848152602081815260408083205467ffffffffffffffff1680845260048352818420888552909252822080549192916114a190612b9e565b80601f01602080910402602001604051908101604052809291908181526020018280546114cd90612b9e565b801561151a5780601f106114ef5761010080835404028352916020019161151a565b820191906000526020600020905b8154815290600101906020018083116114fd57829003601f168201915b5050505067ffffffffffffffff841660009081526004602090815260408083208b845290915290209192506115529050858783612c26565b50857f8f15ed4b723ef428f250961da8315675b507046737e19319fc1a4d81bfe87f8582878760405161158793929190612e52565b60405180910390a2505050505050565b816115a181611798565b6115aa57600080fd5b6115b983603c61038d85612011565b505050565b60606115cb848484611e38565b949350505050565b826115dd81611798565b6115e657600080fd5b6000848152602081815260408083205467ffffffffffffffff1683526007825280832087845282528083206001600160e01b031987168085529083529281902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038716908117909155905190815286917f7c69f06bea0bdef565b709e93a147836b0063ba2dd89f02d0b7e8d931e6a6daa910160405180910390a350505050565b6000828152602081815260408083205467ffffffffffffffff16835260028252808320858452825280832084845290915290208054606091906116d490612b9e565b80601f016020809104026020016040519081016040528092919081815260200182805461170090612b9e565b801561174d5780601f106117225761010080835404028352916020019161174d565b820191906000526020600020905b81548152906001019060200180831161173057829003601f168201915b5050505050905092915050565b60006001600160e01b031982167f59d1d43c00000000000000000000000000000000000000000000000000000000148061058457506105848261204a565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806117f95750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b1561180657506001919050565b6040517f02571be3000000000000000000000000000000000000000000000000000000008152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906302571be390602401602060405180830381865afa158015611887573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ab9190612e82565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03160361198b576040517f6352211e000000000000000000000000000000000000000000000000000000008152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015611964573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119889190612e82565b90505b6001600160a01b0381163314806119c557506001600160a01b0381166000908152600b6020908152604080832033845290915290205460ff165b80610e2957506001600160a01b0381166000908152600c60209081526040808320868452825280832033845290915290205460ff16610e29565b611a4d6040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b82815260c0810182905261058481611d28565b6020810151815160609161058491611a789082612088565b845191906120e2565b60a081015160c082015160609161058491611a78908290612b7b565b600081518351148015610e295750610e298360008460008751612159565b865160208801206000611acf8787876120e2565b90508315611bf95767ffffffffffffffff831660009081526005602090815260408083208d84528252808320858452825280832061ffff8c16845290915290208054611b1a90612b9e565b159050611b795767ffffffffffffffff831660009081526006602090815260408083208d845282528083208584529091528120805461ffff1691611b5d83612e9f565b91906101000a81548161ffff021916908361ffff160217905550505b67ffffffffffffffff831660009081526005602090815260408083208d84528252808320858452825280832061ffff8c1684529091528120611bba916124b6565b897f03528ed0c2a3ebc993b12ce3c16bb382f9c7d88ef7d8a1bf290eaf35955a12078a8a604051611bec929190612ebd565b60405180910390a2610788565b67ffffffffffffffff831660009081526005602090815260408083208d84528252808320858452825280832061ffff8c16845290915290208054611c3c90612b9e565b9050600003611c9d5767ffffffffffffffff831660009081526006602090815260408083208d845282528083208584529091528120805461ffff1691611c8183612ee3565b91906101000a81548161ffff021916908361ffff160217905550505b67ffffffffffffffff831660009081526005602090815260408083208d84528252808320858452825280832061ffff8c1684529091529020611cdf8282612d92565b50897f52a608b3303a48862d07a73d82fa221318c0027fbbcfb1b2329bface3f19ff2b8a8a84604051611d1493929190612efa565b60405180910390a250505050505050505050565b60c08101516020820181905281515111611d3f5750565b6000611d5382600001518360200151612088565b8260200151611d629190612f29565b8251909150611d71908261217c565b61ffff166040830152611d85600282612f29565b8251909150611d94908261217c565b61ffff166060830152611da8600282612f29565b8251909150611db790826121a4565b63ffffffff166080830152611dcd600482612f29565b8251909150600090611ddf908361217c565b61ffff169050611df0600283612f29565b60a084018190529150611e038183612f29565b60c0909301929092525050565b60008151601414611e2057600080fd5b50602001516c01000000000000000000000000900490565b60608167ffffffffffffffff811115611e5357611e536127ae565b604051908082528060200260200182016040528015611e8657816020015b6060815260200190600190039081611e715790505b50905060005b82811015612009578415611f51576000848483818110611eae57611eae612d41565b9050602002810190611ec09190612f3c565b611ecf91602491600491612f83565b611ed891612fad565b9050858114611f4f5760405162461bcd60e51b815260206004820152603460248201527f6d756c746963616c6c3a20416c6c207265636f726473206d757374206861766560448201527f2061206d61746368696e67206e616d6568617368000000000000000000000000606482015260840161127c565b505b60008030868685818110611f6757611f67612d41565b9050602002810190611f799190612f3c565b604051611f87929190612b8e565b600060405180830381855af49150503d8060008114611fc2576040519150601f19603f3d011682016040523d82523d6000602084013e611fc7565b606091505b509150915081611fd657600080fd5b80848481518110611fe957611fe9612d41565b60200260200101819052505050808061200190612fcb565b915050611e8c565b509392505050565b6040805160148082528183019092526060916020820181803683375050506c010000000000000000000000009290920260208301525090565b60006001600160e01b031982167fc86902330000000000000000000000000000000000000000000000000000000014806105845750610584826121ce565b6000815b8351811061209c5761209c612fe4565b60006120a8858361220c565b60ff1690506120b8816001612f29565b6120c29083612f29565b9150806000036120d257506120d8565b5061208c565b6115cb8382612b7b565b82516060906120f18385612f29565b11156120fc57600080fd5b60008267ffffffffffffffff811115612117576121176127ae565b6040519080825280601f01601f191660200182016040528015612141576020820181803683370190505b50905060208082019086860101610b02828287612230565b6000612166848484612286565b612171878785612286565b149695505050505050565b815160009061218c836002612f29565b111561219757600080fd5b50016002015161ffff1690565b81516000906121b4836004612f29565b11156121bf57600080fd5b50016004015163ffffffff1690565b60006001600160e01b031982167f691f34310000000000000000000000000000000000000000000000000000000014806105845750610584826122aa565b600082828151811061222057612220612d41565b016020015160f81c905092915050565b602081106122685781518352612247602084612f29565b9250612254602083612f29565b9150612261602082612b7b565b9050612230565b905182516020929092036101000a6000190180199091169116179052565b82516000906122958385612f29565b11156122a057600080fd5b5091016020012090565b60006001600160e01b031982167f124a319c00000000000000000000000000000000000000000000000000000000148061058457506105848260006001600160e01b031982167fa8fa568200000000000000000000000000000000000000000000000000000000148061234657506001600160e01b031982167f5c98042b00000000000000000000000000000000000000000000000000000000145b8061058457506105848260006001600160e01b031982167fbc1c58d100000000000000000000000000000000000000000000000000000000148061058457506105848260006001600160e01b031982167f3b3b57de0000000000000000000000000000000000000000000000000000000014806123ec57506001600160e01b031982167ff1cb7e0600000000000000000000000000000000000000000000000000000000145b8061058457506105848260006001600160e01b031982167f2203ab5600000000000000000000000000000000000000000000000000000000148061058457506105848260006001600160e01b031982167fd700ff3300000000000000000000000000000000000000000000000000000000148061058457506105848260006001600160e01b031982167f4fbf043300000000000000000000000000000000000000000000000000000000148061058457506301ffc9a760e01b6001600160e01b0319831614610584565b5080546124c290612b9e565b6000825580601f106124d2575050565b601f0160209004906000526020600020908101906124f091906124f3565b50565b5b8082111561250857600081556001016124f4565b5090565b80356001600160e01b03198116811461252457600080fd5b919050565b60006020828403121561253b57600080fd5b610e298261250c565b60008083601f84011261255657600080fd5b50813567ffffffffffffffff81111561256e57600080fd5b602083019150836020828501011115610c3d57600080fd5b60008060006040848603121561259b57600080fd5b83359250602084013567ffffffffffffffff8111156125b957600080fd5b6125c586828701612544565b9497909650939450505050565b6000806000806000606086880312156125ea57600080fd5b85359450602086013567ffffffffffffffff8082111561260957600080fd5b61261589838a01612544565b9096509450604088013591508082111561262e57600080fd5b5061263b88828901612544565b969995985093965092949392505050565b6000806040838503121561265f57600080fd5b8235915061266f6020840161250c565b90509250929050565b6000806040838503121561268b57600080fd5b50508035926020909101359150565b60005b838110156126b557818101518382015260200161269d565b50506000910152565b600081518084526126d681602086016020860161269a565b601f01601f19169290920160200192915050565b8281526040602082015260006115cb60408301846126be565b60008060006060848603121561271857600080fd5b505081359360208301359350604090920135919050565b60006020828403121561274157600080fd5b5035919050565b602081526000610e2960208301846126be565b6000806000806060858703121561277157600080fd5b8435935060208501359250604085013567ffffffffffffffff81111561279657600080fd5b6127a287828801612544565b95989497509550505050565b634e487b7160e01b600052604160045260246000fd5b6000806000606084860312156127d957600080fd5b8335925060208401359150604084013567ffffffffffffffff808211156127ff57600080fd5b818601915086601f83011261281357600080fd5b813581811115612825576128256127ae565b604051601f8201601f19908116603f0116810190838211818310171561284d5761284d6127ae565b8160405282815289602084870101111561286657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6001600160a01b03811681146124f057600080fd5b8035801515811461252457600080fd5b600080604083850312156128c057600080fd5b82356128cb81612888565b915061266f6020840161289d565b6000806000606084860312156128ee57600080fd5b83359250602084013561290081612888565b915061290e6040850161289d565b90509250925092565b60008060006060848603121561292c57600080fd5b8335925060208401359150604084013561ffff8116811461294c57600080fd5b809150509250925092565b60008060006060848603121561296c57600080fd5b833561297781612888565b925060208401359150604084013561294c81612888565b60008083601f8401126129a057600080fd5b50813567ffffffffffffffff8111156129b857600080fd5b6020830191508360208260051b8501011115610c3d57600080fd5b600080602083850312156129e657600080fd5b823567ffffffffffffffff8111156129fd57600080fd5b612a098582860161298e565b90969095509350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015612a6a57603f19888603018452612a588583516126be565b94509285019290850190600101612a3c565b5092979650505050505050565b60008060408385031215612a8a57600080fd5b823591506020830135612a9c81612888565b809150509250929050565b600080600060408486031215612abc57600080fd5b83359250602084013567ffffffffffffffff811115612ada57600080fd5b6125c58682870161298e565b600080600060608486031215612afb57600080fd5b83359250612b0b6020850161250c565b9150604084013561294c81612888565b60008060408385031215612b2e57600080fd5b8235612b3981612888565b91506020830135612a9c81612888565b60008251612b5b81846020870161269a565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561058457610584612b65565b8183823760009101908152919050565b600181811c90821680612bb257607f821691505b602082108103612bd257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156115b957600081815260208120601f850160051c81016020861015612bff5750805b601f850160051c820191505b81811015612c1e57828155600101612c0b565b505050505050565b67ffffffffffffffff831115612c3e57612c3e6127ae565b612c5283612c4c8354612b9e565b83612bd8565b6000601f841160018114612c865760008515612c6e5750838201355b600019600387901b1c1916600186901b1783556111fb565b600083815260209020601f19861690835b82811015612cb75786850135825560209485019460019092019101612c97565b5086821015612cd45760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000612d23604083018688612ce6565b8281036020840152612d36818587612ce6565b979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6020815260006115cb602083018486612ce6565b600067ffffffffffffffff808316818103612d8857612d88612b65565b6001019392505050565b815167ffffffffffffffff811115612dac57612dac6127ae565b612dc081612dba8454612b9e565b84612bd8565b602080601f831160018114612df55760008415612ddd5750858301515b600019600386901b1c1916600185901b178555612c1e565b600085815260208120601f198616915b82811015612e2457888601518255948401946001909101908401612e05565b5085821015612e425787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b604081526000612e6560408301866126be565b8281036020840152612e78818587612ce6565b9695505050505050565b600060208284031215612e9457600080fd5b8151610e2981612888565b600061ffff821680612eb357612eb3612b65565b6000190192915050565b604081526000612ed060408301856126be565b905061ffff831660208301529392505050565b600061ffff808316818103612d8857612d88612b65565b606081526000612f0d60608301866126be565b61ffff851660208401528281036040840152612e7881856126be565b8082018082111561058457610584612b65565b6000808335601e19843603018112612f5357600080fd5b83018035915067ffffffffffffffff821115612f6e57600080fd5b602001915036819003821315610c3d57600080fd5b60008085851115612f9357600080fd5b83861115612fa057600080fd5b5050820193919092039150565b8035602083101561058457600019602084900360031b1b1692915050565b600060018201612fdd57612fdd612b65565b5060010190565b634e487b7160e01b600052600160045260246000fdfea26469706673582212200cadfbfa7a3500543d3cccaa88637fe3e6de9643115ee2aba8968d512f3c914864736f6c6343000811003300000000000000000000000000000000000c2e074ec69a0dfb2997ba6c7d2e1e0000000000000000000000006d372ba84722826a29ea564d1dafbff4e87db67a000000000000000000000000e077c349814d07c470e5f8edb984de4576bcc62000000000000000000000000022d350a65ef25f9596dcdb8a3a5212fa5bad345f" + +} diff --git a/deploy/.contracts/NoTextResolver.json b/deploy/.contracts/LegacyResolverV1.json similarity index 100% rename from deploy/.contracts/NoTextResolver.json rename to deploy/.contracts/LegacyResolverV1.json diff --git a/deploy/.contracts/LegacyResolverV2.json b/deploy/.contracts/LegacyResolverV2.json new file mode 100644 index 000000000..a70b5c960 --- /dev/null +++ b/deploy/.contracts/LegacyResolverV2.json @@ -0,0 +1,170 @@ +{ + "abi": [ + { + "constant": true, + "inputs": [{ "name": "interfaceID", "type": "bytes4" }], + "name": "supportsInterface", + "outputs": [{ "name": "", "type": "bool" }], + "payable": false, + "type": "function" + }, + { + "constant": true, + "inputs": [ + { "name": "node", "type": "bytes32" }, + { "name": "contentTypes", "type": "uint256" } + ], + "name": "ABI", + "outputs": [ + { "name": "contentType", "type": "uint256" }, + { "name": "data", "type": "bytes" } + ], + "payable": false, + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "name": "node", "type": "bytes32" }, + { "name": "x", "type": "bytes32" }, + { "name": "y", "type": "bytes32" } + ], + "name": "setPubkey", + "outputs": [], + "payable": false, + "type": "function" + }, + { + "constant": true, + "inputs": [{ "name": "node", "type": "bytes32" }], + "name": "content", + "outputs": [{ "name": "ret", "type": "bytes32" }], + "payable": false, + "type": "function" + }, + { + "constant": true, + "inputs": [{ "name": "node", "type": "bytes32" }], + "name": "addr", + "outputs": [{ "name": "ret", "type": "address" }], + "payable": false, + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "name": "node", "type": "bytes32" }, + { "name": "contentType", "type": "uint256" }, + { "name": "data", "type": "bytes" } + ], + "name": "setABI", + "outputs": [], + "payable": false, + "type": "function" + }, + { + "constant": true, + "inputs": [{ "name": "node", "type": "bytes32" }], + "name": "name", + "outputs": [{ "name": "ret", "type": "string" }], + "payable": false, + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "name": "node", "type": "bytes32" }, + { "name": "name", "type": "string" } + ], + "name": "setName", + "outputs": [], + "payable": false, + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "name": "node", "type": "bytes32" }, + { "name": "hash", "type": "bytes32" } + ], + "name": "setContent", + "outputs": [], + "payable": false, + "type": "function" + }, + { + "constant": true, + "inputs": [{ "name": "node", "type": "bytes32" }], + "name": "pubkey", + "outputs": [ + { "name": "x", "type": "bytes32" }, + { "name": "y", "type": "bytes32" } + ], + "payable": false, + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "name": "node", "type": "bytes32" }, + { "name": "addr", "type": "address" } + ], + "name": "setAddr", + "outputs": [], + "payable": false, + "type": "function" + }, + { + "inputs": [{ "name": "ensAddr", "type": "address" }], + "payable": false, + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "name": "node", "type": "bytes32" }, + { "indexed": false, "name": "a", "type": "address" } + ], + "name": "AddrChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "name": "node", "type": "bytes32" }, + { "indexed": false, "name": "hash", "type": "bytes32" } + ], + "name": "ContentChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "name": "node", "type": "bytes32" }, + { "indexed": false, "name": "name", "type": "string" } + ], + "name": "NameChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "name": "node", "type": "bytes32" }, + { "indexed": true, "name": "contentType", "type": "uint256" } + ], + "name": "ABIChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "name": "node", "type": "bytes32" }, + { "indexed": false, "name": "x", "type": "bytes32" }, + { "indexed": false, "name": "y", "type": "bytes32" } + ], + "name": "PubkeyChanged", + "type": "event" + } + ], + "bytecode": "0x6060604052341561000c57fe5b604051602080610dc583398101604052515b60008054600160a060020a031916600160a060020a0383161790555b505b610d7a8061004b6000396000f300606060405236156100ac5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301ffc9a781146100ae5780632203ab56146100df57806329cd62ea146101815780632dff69411461019c5780633b3b57de146101c1578063623195b0146101f0578063691f34311461024c57806377372213146102df578063c3d014d614610338578063c869023314610350578063d5fa2b001461037c575bfe5b34156100b657fe5b6100cb600160e060020a03196004351661039d565b604080519115158252519081900360200190f35b34156100e757fe5b6100f56004356024356104d8565b6040518083815260200180602001828103825283818151815260200191508051906020019080838360008314610146575b80518252602083111561014657601f199092019160209182019101610126565b505050905090810190601f1680156101725780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b341561018957fe5b61019a6004356024356044356105ef565b005b34156101a457fe5b6101af6004356106e6565b60408051918252519081900360200190f35b34156101c957fe5b6101d46004356106ff565b60408051600160a060020a039092168252519081900360200190f35b34156101f857fe5b604080516020600460443581810135601f810184900484028501840190955284845261019a94823594602480359560649492939190920191819084018382808284375094965061071d95505050505050565b005b341561025457fe5b61025f600435610816565b6040805160208082528351818301528351919283929083019185019080838382156102a5575b8051825260208311156102a557601f199092019160209182019101610285565b505050905090810190601f1680156102d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156102e757fe5b60408051602060046024803582810135601f810185900485028601850190965285855261019a95833595939460449493929092019181908401838280828437509496506108c195505050505050565b005b341561034057fe5b61019a600435602435610a19565b005b341561035857fe5b610363600435610af1565b6040805192835260208301919091528051918290030190f35b341561038457fe5b61019a600435600160a060020a0360243516610b10565b005b6000600160e060020a031982167f3b3b57de0000000000000000000000000000000000000000000000000000000014806104005750600160e060020a031982167fd8389dc500000000000000000000000000000000000000000000000000000000145b806104345750600160e060020a031982167f691f343100000000000000000000000000000000000000000000000000000000145b806104685750600160e060020a031982167f2203ab5600000000000000000000000000000000000000000000000000000000145b8061049c5750600160e060020a031982167fc869023300000000000000000000000000000000000000000000000000000000145b806104d05750600160e060020a031982167f01ffc9a700000000000000000000000000000000000000000000000000000000145b90505b919050565b60006104e2610c0b565b60008481526001602081905260409091209092505b8383116105e257828416158015906105305750600083815260058201602052604081205460026000196101006001841615020190911604115b156105d657600083815260058201602090815260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156105ca5780601f1061059f576101008083540402835291602001916105ca565b820191906000526020600020905b8154815290600101906020018083116105ad57829003601f168201915b505050505091506105e7565b5b6002909202916104f7565b600092505b509250929050565b60008054604080516020908101849052815160e060020a6302571be30281526004810188905291518794600160a060020a033381169516936302571be393602480830194919391928390030190829087803b151561064957fe5b6102c65a03f1151561065757fe5b505060405151600160a060020a03169190911490506106765760006000fd5b604080518082018252848152602080820185815260008881526001835284902092516003840155516004909201919091558151858152908101849052815186927f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e46928290030190a25b5b50505050565b600081815260016020819052604090912001545b919050565b600081815260016020526040902054600160a060020a03165b919050565b60008054604080516020908101849052815160e060020a6302571be30281526004810188905291518794600160a060020a033381169516936302571be393602480830194919391928390030190829087803b151561077757fe5b6102c65a03f1151561078557fe5b505060405151600160a060020a03169190911490506107a45760006000fd5b60001983018316156107b65760006000fd5b6000848152600160209081526040808320868452600501825290912083516107e092850190610c1d565b50604051839085907faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe390600090a35b5b50505050565b61081e610c0b565b6000828152600160208181526040928390206002908101805485516000199582161561010002959095011691909104601f81018390048302840183019094528383529192908301828280156108b45780601f10610889576101008083540402835291602001916108b4565b820191906000526020600020905b81548152906001019060200180831161089757829003601f168201915b505050505090505b919050565b60008054604080516020908101849052815160e060020a6302571be30281526004810187905291518694600160a060020a033381169516936302571be393602480830194919391928390030190829087803b151561091b57fe5b6102c65a03f1151561092957fe5b505060405151600160a060020a03169190911490506109485760006000fd5b6000838152600160209081526040909120835161096d92600290920191850190610c1d565b50604080516020808252845181830152845186937fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f79387939092839283019185019080838382156109d9575b8051825260208311156109d957601f1990920191602091820191016109b9565b505050905090810190601f168015610a055780820380516001836020036101000a031916815260200191505b509250505060405180910390a25b5b505050565b60008054604080516020908101849052815160e060020a6302571be30281526004810187905291518694600160a060020a033381169516936302571be393602480830194919391928390030190829087803b1515610a7357fe5b6102c65a03f11515610a8157fe5b505060405151600160a060020a0316919091149050610aa05760006000fd5b6000838152600160208181526040928390209091018490558151848152915185927f0424b6fe0d9c3bdbece0e7879dc241bb0c22e900be8b6c168b4ee08bd9bf83bc92908290030190a25b5b505050565b600081815260016020526040902060038101546004909101545b915091565b60008054604080516020908101849052815160e060020a6302571be30281526004810187905291518694600160a060020a033381169516936302571be393602480830194919391928390030190829087803b1515610b6a57fe5b6102c65a03f11515610b7857fe5b505060405151600160a060020a0316919091149050610b975760006000fd5b600083815260016020908152604091829020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0386169081179091558251908152915185927f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd292908290030190a25b5b505050565b60408051602081019091526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610c5e57805160ff1916838001178555610c8b565b82800160010185558215610c8b579182015b82811115610c8b578251825591602001919060010190610c70565b5b50610c98929150610d2d565b5090565b60408051602081019091526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610c5e57805160ff1916838001178555610c8b565b82800160010185558215610c8b579182015b82811115610c8b578251825591602001919060010190610c70565b5b50610c98929150610d2d565b5090565b610d4b91905b80821115610c985760008155600101610d33565b5090565b905600a165627a7a72305820f05b42978350d3945a3fe885ef530e3f8ecbfcdb822550779dfcf0b06b00754f0029000000000000000000000000314159265dd8dbb310642f98f50c066173c1259b" +} diff --git a/deploy/.contracts/LegacyResolverV3.json b/deploy/.contracts/LegacyResolverV3.json new file mode 100644 index 000000000..aae2dfb3d --- /dev/null +++ b/deploy/.contracts/LegacyResolverV3.json @@ -0,0 +1,4 @@ +{ + "abi": [{"constant":true,"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"value","type":"string"}],"name":"setText","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"interfaceImplementer","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"contentTypes","type":"uint256"}],"name":"ABI","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes32","name":"x","type":"bytes32"},{"internalType":"bytes32","name":"y","type":"bytes32"}],"name":"setPubkey","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes","name":"hash","type":"bytes"}],"name":"setContenthash","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"addr","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"isAuthorised","type":"bool"}],"name":"setAuthorisation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"key","type":"string"}],"name":"text","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"contentType","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"setABI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"coinType","type":"uint256"},{"internalType":"bytes","name":"a","type":"bytes"}],"name":"setAddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"contenthash","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"pubkey","outputs":[{"internalType":"bytes32","name":"x","type":"bytes32"},{"internalType":"bytes32","name":"y","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"address","name":"a","type":"address"}],"name":"setAddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes4","name":"interfaceID","type":"bytes4"},{"internalType":"address","name":"implementer","type":"address"}],"name":"setInterface","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"coinType","type":"uint256"}],"name":"addr","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"authorisations","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ENS","name":"_ens","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bool","name":"isAuthorised","type":"bool"}],"name":"AuthorisationChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"string","name":"indexedKey","type":"string"},{"indexed":false,"internalType":"string","name":"key","type":"string"}],"name":"TextChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"x","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"y","type":"bytes32"}],"name":"PubkeyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"string","name":"name","type":"string"}],"name":"NameChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"bytes4","name":"interfaceID","type":"bytes4"},{"indexed":false,"internalType":"address","name":"implementer","type":"address"}],"name":"InterfaceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"hash","type":"bytes"}],"name":"ContenthashChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"address","name":"a","type":"address"}],"name":"AddrChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"coinType","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"newAddress","type":"bytes"}],"name":"AddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"contentType","type":"uint256"}],"name":"ABIChanged","type":"event"}], + "bytecode": "0x608060405234801561001057600080fd5b506040516124e33803806124e38339818101604052602081101561003357600080fd5b810190808051906020019092919050505080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505061244e806100956000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063623195b0116100ad578063c869023311610071578063c869023314610968578063d5fa2b00146109b1578063e59d895d146109ff578063f1cb7e0614610a76578063f86bc87914610b2757610121565b8063623195b01461063b578063691f3431146106c8578063773722131461076f5780638b95dd71146107f2578063bc1c58d1146108c157610121565b806329cd62ea116100f457806329cd62ea146103b2578063304e6ade146103f45780633b3b57de146104775780633e9ce794146104e557806359d1d43c1461053f57610121565b806301ffc9a71461012657806310f13a8c1461018b578063124a319c146102635780632203ab56146102fa575b600080fd5b6101716004803603602081101561013c57600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bad565b604051808215151515815260200191505060405180910390f35b610261600480360360608110156101a157600080fd5b8101908080359060200190929190803590602001906401000000008111156101c857600080fd5b8201836020820111156101da57600080fd5b803590602001918460018302840111640100000000831117156101fc57600080fd5b90919293919293908035906020019064010000000081111561021d57600080fd5b82018360208201111561022f57600080fd5b8035906020019184600183028401116401000000008311171561025157600080fd5b9091929391929390505050610c0e565b005b6102b86004803603604081101561027957600080fd5b810190808035906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610d09565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103306004803603604081101561031057600080fd5b810190808035906020019092919080359060200190929190505050611206565b6040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561037657808201518184015260208101905061035b565b50505050905090810190601f1680156103a35780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b6103f2600480360360608110156103c857600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611355565b005b6104756004803603604081101561040a57600080fd5b81019080803590602001909291908035906020019064010000000081111561043157600080fd5b82018360208201111561044357600080fd5b8035906020019184600183028401116401000000008311171561046557600080fd5b90919293919293905050506113ed565b005b6104a36004803603602081101561048d57600080fd5b810190808035906020019092919050505061148d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61053d600480360360608110156104fb57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506114c4565b005b6105c06004803603604081101561055557600080fd5b81019080803590602001909291908035906020019064010000000081111561057c57600080fd5b82018360208201111561058e57600080fd5b803590602001918460018302840111640100000000831117156105b057600080fd5b90919293919293905050506115d8565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106005780820151818401526020810190506105e5565b50505050905090810190601f16801561062d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106c66004803603606081101561065157600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561068257600080fd5b82018360208201111561069457600080fd5b803590602001918460018302840111640100000000831117156106b657600080fd5b90919293919293905050506116b4565b005b6106f4600480360360208110156106de57600080fd5b8101908080359060200190929190505050611741565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610734578082015181840152602081019050610719565b50505050905090810190601f1680156107615780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107f06004803603604081101561078557600080fd5b8101908080359060200190929190803590602001906401000000008111156107ac57600080fd5b8201836020820111156107be57600080fd5b803590602001918460018302840111640100000000831117156107e057600080fd5b90919293919293905050506117f6565b005b6108bf6004803603606081101561080857600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561083957600080fd5b82018360208201111561084b57600080fd5b8035906020019184600183028401116401000000008311171561086d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611896565b005b6108ed600480360360208110156108d757600080fd5b8101908080359060200190929190505050611a03565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561092d578082015181840152602081019050610912565b50505050905090810190601f16801561095a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6109946004803603602081101561097e57600080fd5b8101908080359060200190929190505050611ab8565b604051808381526020018281526020019250505060405180910390f35b6109fd600480360360408110156109c757600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611af2565b005b610a7460048036036060811015610a1557600080fd5b810190808035906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b1e565b005b610aac60048036036040811015610a8c57600080fd5b810190808035906020019092919080359060200190929190505050611c5c565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610aec578082015181840152602081019050610ad1565b50505050905090810190601f168015610b195780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610b9360048036036060811015610b3d57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d23565b604051808215151515815260200191505060405180910390f35b60006359d1d43c60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c075750610c0682611d5f565b5b9050919050565b84610c1881611dc0565b610c2157600080fd5b828260066000898152602001908152602001600020878760405180838380828437808301925050509250505090815260200160405180910390209190610c68929190612250565b50857fd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a7550868688886040518080602001806020018381038352878782818152602001925080828437600081840152601f19601f8201169050808301925050508381038252858582818152602001925080828437600081840152601f19601f820116905080830192505050965050505050505060405180910390a2505050505050565b600080600360008581526020019081526020016000206000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610dce5780915050611200565b6000610dd98561148d565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e1b57600092505050611200565b600060608273ffffffffffffffffffffffffffffffffffffffff166301ffc9a760e01b60405160240180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019150506040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310610f3c5780518252602082019150602081019050602083039250610f19565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114610f9c576040519150601f19603f3d011682016040523d82523d6000602084013e610fa1565b606091505b5091509150811580610fb4575060208151105b80610ffb5750600060f81b81601f81518110610fcc57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b1561100d576000945050505050611200565b8273ffffffffffffffffffffffffffffffffffffffff168660405160240180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019150506040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106111235780518252602082019150602081019050602083039250611100565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114611183576040519150601f19603f3d011682016040523d82523d6000602084013e611188565b606091505b50809250819350505081158061119f575060208151105b806111e65750600060f81b81601f815181106111b757fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b156111f8576000945050505050611200565b829450505050505b92915050565b60006060600080600086815260200190815260200160002090506000600190505b8481116113325760008582161415801561126757506000826000838152602001908152602001600020805460018160011615610100020316600290049050115b156113265780826000838152602001908152602001600020808054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113145780601f106112e957610100808354040283529160200191611314565b820191906000526020600020905b8154815290600101906020018083116112f757829003601f168201915b5050505050905093509350505061134e565b600181901b9050611227565b5060006040518060200160405280600081525081915092509250505b9250929050565b8261135f81611dc0565b61136857600080fd5b604051806040016040528084815260200183815250600560008681526020019081526020016000206000820151816000015560208201518160010155905050837f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e468484604051808381526020018281526020019250505060405180910390a250505050565b826113f781611dc0565b61140057600080fd5b82826002600087815260200190815260200160002091906114229291906122d0565b50837fe379c1624ed7e714cc0937528a32359d69d5281337765313dba4e081b72d7578848460405180806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050935050505060405180910390a250505050565b6000606061149c83603c611c5c565b90506000815114156114b25760009150506114bf565b6114bb81611f4c565b9150505b919050565b806008600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16847fe1c5610a6e0cbe10764ecd182adcef1ec338dc4e199c99c32ce98f38e12791df84604051808215151515815260200191505060405180910390a4505050565b606060066000858152602001908152602001600020838360405180838380828437808301925050509250505090815260200160405180910390208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116a65780601f1061167b576101008083540402835291602001916116a6565b820191906000526020600020905b81548152906001019060200180831161168957829003601f168201915b505050505090509392505050565b836116be81611dc0565b6116c757600080fd5b6000846001860316146116d957600080fd5b82826000808881526020019081526020016000206000878152602001908152602001600020919061170b9291906122d0565b5083857faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe360405160405180910390a35050505050565b6060600460008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156117ea5780601f106117bf576101008083540402835291602001916117ea565b820191906000526020600020905b8154815290600101906020018083116117cd57829003601f168201915b50505050509050919050565b8261180081611dc0565b61180957600080fd5b828260046000878152602001908152602001600020919061182b929190612250565b50837fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f7848460405180806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050935050505060405180910390a250505050565b826118a081611dc0565b6118a957600080fd5b837f65412581168e88a1e60c6459d7f44ae83ad0832e670826c05a4e2476b57af75284846040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156119135780820151818401526020810190506118f8565b50505050905090810190601f1680156119405780820380516001836020036101000a031916815260200191505b50935050505060405180910390a2603c8314156119c457837f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd261198284611f4c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a25b8160016000868152602001908152602001600020600085815260200190815260200160002090805190602001906119fc929190612350565b5050505050565b6060600260008381526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611aac5780601f10611a8157610100808354040283529160200191611aac565b820191906000526020600020905b815481529060010190602001808311611a8f57829003601f168201915b50505050509050919050565b6000806005600084815260200190815260200160002060000154600560008581526020019081526020016000206001015491509150915091565b81611afc81611dc0565b611b0557600080fd5b611b1983603c611b1485611f6f565b611896565b505050565b82611b2881611dc0565b611b3157600080fd5b81600360008681526020019081526020016000206000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916847f7c69f06bea0bdef565b709e93a147836b0063ba2dd89f02d0b7e8d931e6a6daa84604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a350505050565b60606001600084815260200190815260200160002060008381526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611d165780601f10611ceb57610100808354040283529160200191611d16565b820191906000526020600020905b815481529060010190602001808311611cf957829003601f168201915b5050505050905092915050565b6008602052826000526040600020602052816000526040600020602052806000526040600020600092509250509054906101000a900460ff1681565b600063c869023360e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611db95750611db882611fba565b5b9050919050565b600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611e3657600080fd5b505afa158015611e4a573d6000803e3d6000fd5b505050506040513d6020811015611e6057600080fd5b810190808051906020019092919050505090503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480611f4457506008600084815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b915050919050565b60006014825114611f5c57600080fd5b600c6101000a6020830151049050919050565b606060146040519080825280601f01601f191660200182016040528015611fa55781602001600182028038833980820191505090505b509050600c6101000a82026020820152919050565b600063691f343160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061201457506120138261201b565b5b9050919050565b600060405180806123f660249139602401905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061208657506120858261208d565b5b9050919050565b600063bc1c58d160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806120e757506120e6826120ee565b5b9050919050565b6000633b3b57de60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612187575063f1cb7e0660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061219757506121968261219e565b5b9050919050565b6000632203ab5660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806121f857506121f7826121ff565b5b9050919050565b60006301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061229157803560ff19168380011785556122bf565b828001600101855582156122bf579182015b828111156122be5782358255916020019190600101906122a3565b5b5090506122cc91906123d0565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061231157803560ff191683800117855561233f565b8280016001018555821561233f579182015b8281111561233e578235825591602001919060010190612323565b5b50905061234c91906123d0565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061239157805160ff19168380011785556123bf565b828001600101855582156123bf579182015b828111156123be5782518255916020019190600101906123a3565b5b5090506123cc91906123d0565b5090565b6123f291905b808211156123ee5760008160009055506001016123d6565b5090565b9056fe696e74657266616365496d706c656d656e74657228627974657333322c62797465733429a265627a7a72315820ad8f8a41d6a908b475138c4e12dbb403d590d1a66cd707d281b6f5adf64a8b9b64736f6c634300050b0032000000000000000000000000314159265dd8dbb310642f98f50c066173c1259b" +} diff --git a/deploy/.contracts/LegacyResolverV4.json b/deploy/.contracts/LegacyResolverV4.json new file mode 100644 index 000000000..97e4cb904 --- /dev/null +++ b/deploy/.contracts/LegacyResolverV4.json @@ -0,0 +1,4 @@ +{ + "abi": [{"inputs":[{"internalType":"contract ENS","name":"_ens","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"contentType","type":"uint256"}],"name":"ABIChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"address","name":"a","type":"address"}],"name":"AddrChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"coinType","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"newAddress","type":"bytes"}],"name":"AddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bool","name":"isAuthorised","type":"bool"}],"name":"AuthorisationChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"hash","type":"bytes"}],"name":"ContenthashChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"name","type":"bytes"},{"indexed":false,"internalType":"uint16","name":"resource","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"record","type":"bytes"}],"name":"DNSRecordChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"name","type":"bytes"},{"indexed":false,"internalType":"uint16","name":"resource","type":"uint16"}],"name":"DNSRecordDeleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"DNSZoneCleared","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"bytes4","name":"interfaceID","type":"bytes4"},{"indexed":false,"internalType":"address","name":"implementer","type":"address"}],"name":"InterfaceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"string","name":"name","type":"string"}],"name":"NameChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"x","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"y","type":"bytes32"}],"name":"PubkeyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"string","name":"indexedKey","type":"string"},{"indexed":false,"internalType":"string","name":"key","type":"string"}],"name":"TextChanged","type":"event"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"contentTypes","type":"uint256"}],"name":"ABI","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"addr","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"coinType","type":"uint256"}],"name":"addr","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"authorisations","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"clearDNSZone","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"contenthash","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes32","name":"name","type":"bytes32"},{"internalType":"uint16","name":"resource","type":"uint16"}],"name":"dnsRecord","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes32","name":"name","type":"bytes32"}],"name":"hasDNSRecords","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"interfaceImplementer","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"pubkey","outputs":[{"internalType":"bytes32","name":"x","type":"bytes32"},{"internalType":"bytes32","name":"y","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"contentType","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"setABI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"coinType","type":"uint256"},{"internalType":"bytes","name":"a","type":"bytes"}],"name":"setAddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"address","name":"a","type":"address"}],"name":"setAddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"isAuthorised","type":"bool"}],"name":"setAuthorisation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes","name":"hash","type":"bytes"}],"name":"setContenthash","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"setDNSRecords","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes4","name":"interfaceID","type":"bytes4"},{"internalType":"address","name":"implementer","type":"address"}],"name":"setInterface","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes32","name":"x","type":"bytes32"},{"internalType":"bytes32","name":"y","type":"bytes32"}],"name":"setPubkey","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"value","type":"string"}],"name":"setText","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"key","type":"string"}],"name":"text","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"}], + "bytecode": "0x608060405234801561001057600080fd5b5060405161342e38038061342e8339818101604052602081101561003357600080fd5b810190808051906020019092919050505080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050613399806100956000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c8063623195b0116100c3578063bc1c58d11161007c578063bc1c58d114610aad578063c869023314610b54578063d5fa2b0014610b9d578063e59d895d14610beb578063f1cb7e0614610c62578063f86bc87914610d135761014d565b8063623195b01461073a578063691f3431146107c7578063773722131461086e5780638b95dd71146108f1578063a8fa5682146109c0578063ad5780af14610a7f5761014d565b806329cd62ea1161011557806329cd62ea14610461578063304e6ade146104a35780633b3b57de146105265780633e9ce794146105945780634cbf6ba4146105ee57806359d1d43c1461063e5761014d565b806301ffc9a7146101525780630af179d7146101b757806310f13a8c1461023a578063124a319c146103125780632203ab56146103a9575b600080fd5b61019d6004803603602081101561016857600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610d99565b604051808215151515815260200191505060405180910390f35b610238600480360360408110156101cd57600080fd5b8101908080359060200190929190803590602001906401000000008111156101f457600080fd5b82018360208201111561020657600080fd5b8035906020019184600183028401116401000000008311171561022857600080fd5b9091929391929390505050610dfa565b005b6103106004803603606081101561025057600080fd5b81019080803590602001909291908035906020019064010000000081111561027757600080fd5b82018360208201111561028957600080fd5b803590602001918460018302840111640100000000831117156102ab57600080fd5b9091929391929390803590602001906401000000008111156102cc57600080fd5b8201836020820111156102de57600080fd5b8035906020019184600183028401116401000000008311171561030057600080fd5b9091929391929390505050611073565b005b6103676004803603604081101561032857600080fd5b810190808035906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050611159565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103df600480360360408110156103bf57600080fd5b810190808035906020019092919080359060200190929190505050611656565b6040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561042557808201518184015260208101905061040a565b50505050905090810190601f1680156104525780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b6104a16004803603606081101561047757600080fd5b810190808035906020019092919080359060200190929190803590602001909291905050506117a5565b005b610524600480360360408110156104b957600080fd5b8101908080359060200190929190803590602001906401000000008111156104e057600080fd5b8201836020820111156104f257600080fd5b8035906020019184600183028401116401000000008311171561051457600080fd5b909192939192939050505061183d565b005b6105526004803603602081101561053c57600080fd5b81019080803590602001909291905050506118dd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105ec600480360360608110156105aa57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611914565b005b6106246004803603604081101561060457600080fd5b810190808035906020019092919080359060200190929190505050611a28565b604051808215151515815260200191505060405180910390f35b6106bf6004803603604081101561065457600080fd5b81019080803590602001909291908035906020019064010000000081111561067b57600080fd5b82018360208201111561068d57600080fd5b803590602001918460018302840111640100000000831117156106af57600080fd5b9091929391929390505050611a90565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106ff5780820151818401526020810190506106e4565b50505050905090810190601f16801561072c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107c56004803603606081101561075057600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561078157600080fd5b82018360208201111561079357600080fd5b803590602001918460018302840111640100000000831117156107b557600080fd5b9091929391929390505050611b6c565b005b6107f3600480360360208110156107dd57600080fd5b8101908080359060200190929190505050611bf9565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610833578082015181840152602081019050610818565b50505050905090810190601f1680156108605780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108ef6004803603604081101561088457600080fd5b8101908080359060200190929190803590602001906401000000008111156108ab57600080fd5b8201836020820111156108bd57600080fd5b803590602001918460018302840111640100000000831117156108df57600080fd5b9091929391929390505050611cae565b005b6109be6004803603606081101561090757600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561093857600080fd5b82018360208201111561094a57600080fd5b8035906020019184600183028401116401000000008311171561096c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611d4e565b005b610a04600480360360608110156109d657600080fd5b810190808035906020019092919080359060200190929190803561ffff169060200190929190505050611ebb565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a44578082015181840152602081019050610a29565b50505050905090810190601f168015610a715780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aab60048036036020811015610a9557600080fd5b8101908080359060200190929190505050611fc0565b005b610ad960048036036020811015610ac357600080fd5b8101908080359060200190929190505050612027565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b19578082015181840152602081019050610afe565b50505050905090810190601f168015610b465780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610b8060048036036020811015610b6a57600080fd5b81019080803590602001909291905050506120dc565b604051808381526020018281526020019250505060405180910390f35b610be960048036036040811015610bb357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612116565b005b610c6060048036036060811015610c0157600080fd5b810190808035906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612142565b005b610c9860048036036040811015610c7857600080fd5b810190808035906020019092919080359060200190929190505050612280565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610cd8578082015181840152602081019050610cbd565b50505050905090810190601f168015610d055780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610d7f60048036036060811015610d2957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612347565b604051808215151515815260200191505060405180910390f35b60006359d1d43c60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610df35750610df282612383565b5b9050919050565b82610e04816123e4565b610e0d57600080fd5b600080905060008090506060806000610e24613108565b610e7c60008a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061257090919063ffffffff16565b90505b610e888161259a565b6110005760008661ffff161415610f2f5780604001519550610ea9816125b0565b9350836040516020018082805190602001908083835b60208310610ee25780518252602082019150602081019050602083039250610ebf565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209150610f28816125e7565b9250610ff2565b6060610f3a826125b0565b9050816040015161ffff168761ffff16141580610f675750610f65818661261790919063ffffffff16565b155b15610ff057610fc98b86898d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8b88602001510360008b511461263e565b816040015196508160200151955080945084805190602001209250610fed826125e7565b93505b505b610ffb81612abf565b610e7f565b50600083511115611068576110678984878b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505088898e8e905003600089511461263e565b5b505050505050505050565b8461107d816123e4565b61108657600080fd5b8282600960008981526020019081526020016000208787604051808383808284378083019250505092505050908152602001604051809103902091906110cd929190613153565b5084846040518083838082843780830192505050925050506040518091039020867fd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a7550878760405180806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050935050505060405180910390a3505050505050565b600080600660008581526020019081526020016000206000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461121e5780915050611650565b6000611229856118dd565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561126b57600092505050611650565b600060608273ffffffffffffffffffffffffffffffffffffffff166301ffc9a760e01b60405160240180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019150506040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b6020831061138c5780518252602082019150602081019050602083039250611369565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d80600081146113ec576040519150601f19603f3d011682016040523d82523d6000602084013e6113f1565b606091505b5091509150811580611404575060208151105b8061144b5750600060f81b81601f8151811061141c57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b1561145d576000945050505050611650565b8273ffffffffffffffffffffffffffffffffffffffff168660405160240180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019150506040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106115735780518252602082019150602081019050602083039250611550565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d80600081146115d3576040519150601f19603f3d011682016040523d82523d6000602084013e6115d8565b606091505b5080925081935050508115806115ef575060208151105b806116365750600060f81b81601f8151811061160757fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b15611648576000945050505050611650565b829450505050505b92915050565b60006060600080600086815260200190815260200160002090506000600190505b848111611782576000858216141580156116b757506000826000838152602001908152602001600020805460018160011615610100020316600290049050115b156117765780826000838152602001908152602001600020808054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156117645780601f1061173957610100808354040283529160200191611764565b820191906000526020600020905b81548152906001019060200180831161174757829003601f168201915b5050505050905093509350505061179e565b600181901b9050611677565b5060006040518060200160405280600081525081915092509250505b9250929050565b826117af816123e4565b6117b857600080fd5b604051806040016040528084815260200183815250600860008681526020019081526020016000206000820151816000015560208201518160010155905050837f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e468484604051808381526020018281526020019250505060405180910390a250505050565b82611847816123e4565b61185057600080fd5b82826002600087815260200190815260200160002091906118729291906131d3565b50837fe379c1624ed7e714cc0937528a32359d69d5281337765313dba4e081b72d7578848460405180806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050935050505060405180910390a250505050565b600060606118ec83603c612280565b905060008151141561190257600091505061190f565b61190b81612bd3565b9150505b919050565b80600b600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16847fe1c5610a6e0cbe10764ecd182adcef1ec338dc4e199c99c32ce98f38e12791df84604051808215151515815260200191505060405180910390a4505050565b60008060056000858152602001908152602001600020600060036000878152602001908152602001600020548152602001908152602001600020600084815260200190815260200160002060009054906101000a900461ffff1661ffff161415905092915050565b606060096000858152602001908152602001600020838360405180838380828437808301925050509250505090815260200160405180910390208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b5e5780601f10611b3357610100808354040283529160200191611b5e565b820191906000526020600020905b815481529060010190602001808311611b4157829003601f168201915b505050505090509392505050565b83611b76816123e4565b611b7f57600080fd5b600084600186031614611b9157600080fd5b828260008088815260200190815260200160002060008781526020019081526020016000209190611bc39291906131d3565b5083857faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe360405160405180910390a35050505050565b6060600760008381526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611ca25780601f10611c7757610100808354040283529160200191611ca2565b820191906000526020600020905b815481529060010190602001808311611c8557829003601f168201915b50505050509050919050565b82611cb8816123e4565b611cc157600080fd5b8282600760008781526020019081526020016000209190611ce3929190613153565b50837fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f7848460405180806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050935050505060405180910390a250505050565b82611d58816123e4565b611d6157600080fd5b837f65412581168e88a1e60c6459d7f44ae83ad0832e670826c05a4e2476b57af75284846040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611dcb578082015181840152602081019050611db0565b50505050905090810190601f168015611df85780820380516001836020036101000a031916815260200191505b50935050505060405180910390a2603c831415611e7c57837f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd2611e3a84612bd3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a25b816001600086815260200190815260200160002060008581526020019081526020016000209080519060200190611eb4929190613253565b5050505050565b606060046000858152602001908152602001600020600060036000878152602001908152602001600020548152602001908152602001600020600084815260200190815260200160002060008361ffff1661ffff1681526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611fb25780601f10611f8757610100808354040283529160200191611fb2565b820191906000526020600020905b815481529060010190602001808311611f9557829003601f168201915b505050505090509392505050565b80611fca816123e4565b611fd357600080fd5b6003600083815260200190815260200160002060008154809291906001019190505550817fb757169b8492ca2f1c6619d9d76ce22803035c3b1d5f6930dffe7b127c1a198360405160405180910390a25050565b6060600260008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120d05780601f106120a5576101008083540402835291602001916120d0565b820191906000526020600020905b8154815290600101906020018083116120b357829003601f168201915b50505050509050919050565b6000806008600084815260200190815260200160002060000154600860008581526020019081526020016000206001015491509150915091565b81612120816123e4565b61212957600080fd5b61213d83603c61213885612bf6565b611d4e565b505050565b8261214c816123e4565b61215557600080fd5b81600660008681526020019081526020016000206000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916847f7c69f06bea0bdef565b709e93a147836b0063ba2dd89f02d0b7e8d931e6a6daa84604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a350505050565b60606001600084815260200190815260200160002060008381526020019081526020016000208054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561233a5780601f1061230f5761010080835404028352916020019161233a565b820191906000526020600020905b81548152906001019060200180831161231d57829003601f168201915b5050505050905092915050565b600b602052826000526040600020602052816000526040600020602052806000526040600020600092509250509054906101000a900460ff1681565b600063c869023360e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806123dd57506123dc82612c41565b5b9050919050565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561245a57600080fd5b505afa15801561246e573d6000803e3d6000fd5b505050506040513d602081101561248457600080fd5b810190808051906020019092919050505090503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806125685750600b600084815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b915050919050565b612578613108565b828160000181905250818160c001818152505061259481612abf565b92915050565b6000816000015151826020015110159050919050565b60606125e082602001516125cc84600001518560200151612ca2565b8460000151612cfd9092919063ffffffff16565b9050919050565b60606126108260a001518360a001518460c00151038460000151612cfd9092919063ffffffff16565b9050919050565b60008151835114801561263657506126358360008460008751612d70565b5b905092915050565b6000600360008981526020019081526020016000205490506000878051906020012090506060612679868689612cfd9092919063ffffffff16565b90508315612861576000600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff1681526020019081526020016000208054600181600116156101000203166002900490501461275557600560008b815260200190815260200160002060008481526020019081526020016000206000838152602001908152602001600020600081819054906101000a900461ffff16809291906001900391906101000a81548161ffff021916908361ffff160217905550505b600460008b81526020019081526020016000206000848152602001908152602001600020600083815260200190815260200160002060008961ffff1661ffff16815260200190815260200160002060006127af91906132d3565b897f03528ed0c2a3ebc993b12ce3c16bb382f9c7d88ef7d8a1bf290eaf35955a12078a8a60405180806020018361ffff1661ffff168152602001828103825284818151815260200191508051906020019080838360005b83811015612821578082015181840152602081019050612806565b50505050905090810190601f16801561284e5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a2612ab3565b6000600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff168152602001908152602001600020805460018160011615610100020316600290049050141561293557600560008b815260200190815260200160002060008481526020019081526020016000206000838152602001908152602001600020600081819054906101000a900461ffff168092919060010191906101000a81548161ffff021916908361ffff160217905550505b80600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff1681526020019081526020016000209080519060200190612997929190613253565b50897f52a608b3303a48862d07a73d82fa221318c0027fbbcfb1b2329bface3f19ff2b8a8a8460405180806020018461ffff1661ffff16815260200180602001838103835286818151815260200191508051906020019080838360005b83811015612a0f5780820151818401526020810190506129f4565b50505050905090810190601f168015612a3c5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015612a75578082015181840152602081019050612a5a565b50505050905090810190601f168015612aa25780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a25b50505050505050505050565b8060c00151816020018181525050806000015151816020015110612ae257612bd0565b6000612af682600001518360200151612ca2565b8260200151019050612b15818360000151612d9490919063ffffffff16565b826040019061ffff16908161ffff1681525050600281019050612b45818360000151612d9490919063ffffffff16565b826060019061ffff16908161ffff1681525050600281019050612b75818360000151612dba90919063ffffffff16565b826080019063ffffffff16908163ffffffff16815250506004810190506000612bab828460000151612d9490919063ffffffff16565b61ffff169050600282019150818360a00181815250508082018360c001818152505050505b50565b60006014825114612be357600080fd5b600c6101000a6020830151049050919050565b606060146040519080825280601f01601f191660200182016040528015612c2c5781602001600182028038833980820191505090505b509050600c6101000a82026020820152919050565b600063691f343160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612c9b5750612c9a82612de2565b5b9050919050565b6000808290505b600115612cf15783518110612cba57fe5b6000612ccf8286612e5490919063ffffffff16565b60ff16905060018101820191506000811415612ceb5750612cf1565b50612ca9565b82810391505092915050565b606083518284011115612d0f57600080fd5b6060826040519080825280601f01601f191660200182016040528015612d445781602001600182028038833980820191505090505b5090506000806020830191508560208801019050612d63828287612e78565b8293505050509392505050565b6000612d7d848484612ec1565b612d88878785612ec1565b14905095945050505050565b60008251600283011115612da757600080fd5b61ffff8260028501015116905092915050565b60008251600483011115612dcd57600080fd5b63ffffffff8260048501015116905092915050565b6000604051808061334160249139602401905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612e4d5750612e4c82612ee4565b5b9050919050565b6000828281518110612e6257fe5b602001015160f81c60f81b60f81c905092915050565b5b60208110612e9c5781518352602083019250602082019150602081039050612e79565b60006001826020036101000a0390508019835116818551168181178652505050505050565b600083518284011115612ed357600080fd5b818360208601012090509392505050565b600063a8fa568260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612f3e5750612f3d82612f45565b5b9050919050565b600063bc1c58d160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612f9f5750612f9e82612fa6565b5b9050919050565b6000633b3b57de60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061303f575063f1cb7e0660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061304f575061304e82613056565b5b9050919050565b6000632203ab5660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806130b057506130af826130b7565b5b9050919050565b60006301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061319457803560ff19168380011785556131c2565b828001600101855582156131c2579182015b828111156131c15782358255916020019190600101906131a6565b5b5090506131cf919061331b565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061321457803560ff1916838001178555613242565b82800160010185558215613242579182015b82811115613241578235825591602001919060010190613226565b5b50905061324f919061331b565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061329457805160ff19168380011785556132c2565b828001600101855582156132c2579182015b828111156132c15782518255916020019190600101906132a6565b5b5090506132cf919061331b565b5090565b50805460018160011615610100020316600290046000825580601f106132f95750613318565b601f016020900490600052602060002090810190613317919061331b565b5b50565b61333d91905b80821115613339576000816000905550600101613321565b5090565b9056fe696e74657266616365496d706c656d656e74657228627974657333322c62797465733429a265627a7a72315820e37e49339c407f277a18b1276335d80f06f86465250ddd0bb061d5fb5f0892b264736f6c6343000510003200000000000000000000000000000000000c2e074ec69a0dfb2997ba6c7d2e1e" +} diff --git a/deploy/.contracts/LegacyResolverV5.json b/deploy/.contracts/LegacyResolverV5.json new file mode 100644 index 000000000..7f76234b9 --- /dev/null +++ b/deploy/.contracts/LegacyResolverV5.json @@ -0,0 +1,397 @@ +{ + "abi": [ + { + "inputs": [{ "internalType": "contract ENS", "name": "_ens", "type": "address" }], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "indexed": true, "internalType": "uint256", "name": "contentType", "type": "uint256" } + ], + "name": "ABIChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "indexed": false, "internalType": "address", "name": "a", "type": "address" } + ], + "name": "AddrChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "indexed": false, "internalType": "uint256", "name": "coinType", "type": "uint256" }, + { "indexed": false, "internalType": "bytes", "name": "newAddress", "type": "bytes" } + ], + "name": "AddressChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, + { "indexed": true, "internalType": "address", "name": "target", "type": "address" }, + { "indexed": false, "internalType": "bool", "name": "isAuthorised", "type": "bool" } + ], + "name": "AuthorisationChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "indexed": false, "internalType": "bytes", "name": "hash", "type": "bytes" } + ], + "name": "ContenthashChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "indexed": false, "internalType": "bytes", "name": "name", "type": "bytes" }, + { "indexed": false, "internalType": "uint16", "name": "resource", "type": "uint16" }, + { "indexed": false, "internalType": "bytes", "name": "record", "type": "bytes" } + ], + "name": "DNSRecordChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "indexed": false, "internalType": "bytes", "name": "name", "type": "bytes" }, + { "indexed": false, "internalType": "uint16", "name": "resource", "type": "uint16" } + ], + "name": "DNSRecordDeleted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [{ "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }], + "name": "DNSZoneCleared", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "indexed": true, "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" }, + { "indexed": false, "internalType": "address", "name": "implementer", "type": "address" } + ], + "name": "InterfaceChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "indexed": false, "internalType": "string", "name": "name", "type": "string" } + ], + "name": "NameChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "indexed": false, "internalType": "bytes32", "name": "x", "type": "bytes32" }, + { "indexed": false, "internalType": "bytes32", "name": "y", "type": "bytes32" } + ], + "name": "PubkeyChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "indexed": true, "internalType": "string", "name": "indexedKey", "type": "string" }, + { "indexed": false, "internalType": "string", "name": "key", "type": "string" } + ], + "name": "TextChanged", + "type": "event" + }, + { + "constant": true, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "uint256", "name": "contentTypes", "type": "uint256" } + ], + "name": "ABI", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" }, + { "internalType": "bytes", "name": "", "type": "bytes" } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [{ "internalType": "bytes32", "name": "node", "type": "bytes32" }], + "name": "addr", + "outputs": [{ "internalType": "address payable", "name": "", "type": "address" }], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "uint256", "name": "coinType", "type": "uint256" } + ], + "name": "addr", + "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { "internalType": "bytes32", "name": "", "type": "bytes32" }, + { "internalType": "address", "name": "", "type": "address" }, + { "internalType": "address", "name": "", "type": "address" } + ], + "name": "authorisations", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [{ "internalType": "bytes32", "name": "node", "type": "bytes32" }], + "name": "clearDNSZone", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [{ "internalType": "bytes32", "name": "node", "type": "bytes32" }], + "name": "contenthash", + "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "bytes32", "name": "name", "type": "bytes32" }, + { "internalType": "uint16", "name": "resource", "type": "uint16" } + ], + "name": "dnsRecord", + "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "bytes32", "name": "name", "type": "bytes32" } + ], + "name": "hasDNSRecords", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" } + ], + "name": "interfaceImplementer", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [{ "internalType": "bytes32", "name": "node", "type": "bytes32" }], + "name": "name", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [{ "internalType": "bytes32", "name": "node", "type": "bytes32" }], + "name": "pubkey", + "outputs": [ + { "internalType": "bytes32", "name": "x", "type": "bytes32" }, + { "internalType": "bytes32", "name": "y", "type": "bytes32" } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "uint256", "name": "contentType", "type": "uint256" }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "name": "setABI", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "uint256", "name": "coinType", "type": "uint256" }, + { "internalType": "bytes", "name": "a", "type": "bytes" } + ], + "name": "setAddr", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "address", "name": "a", "type": "address" } + ], + "name": "setAddr", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "address", "name": "target", "type": "address" }, + { "internalType": "bool", "name": "isAuthorised", "type": "bool" } + ], + "name": "setAuthorisation", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "bytes", "name": "hash", "type": "bytes" } + ], + "name": "setContenthash", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "bytes", "name": "data", "type": "bytes" } + ], + "name": "setDNSRecords", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" }, + { "internalType": "address", "name": "implementer", "type": "address" } + ], + "name": "setInterface", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "string", "name": "name", "type": "string" } + ], + "name": "setName", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "bytes32", "name": "x", "type": "bytes32" }, + { "internalType": "bytes32", "name": "y", "type": "bytes32" } + ], + "name": "setPubkey", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "string", "name": "key", "type": "string" }, + { "internalType": "string", "name": "value", "type": "string" } + ], + "name": "setText", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [{ "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" }], + "name": "supportsInterface", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { "internalType": "bytes32", "name": "node", "type": "bytes32" }, + { "internalType": "string", "name": "key", "type": "string" } + ], + "name": "text", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b5060405161342e38038061342e8339818101604052602081101561003357600080fd5b810190808051906020019092919050505080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050613399806100956000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c8063623195b0116100c3578063bc1c58d11161007c578063bc1c58d114610aad578063c869023314610b54578063d5fa2b0014610b9d578063e59d895d14610beb578063f1cb7e0614610c62578063f86bc87914610d135761014d565b8063623195b01461073a578063691f3431146107c7578063773722131461086e5780638b95dd71146108f1578063a8fa5682146109c0578063ad5780af14610a7f5761014d565b806329cd62ea1161011557806329cd62ea14610461578063304e6ade146104a35780633b3b57de146105265780633e9ce794146105945780634cbf6ba4146105ee57806359d1d43c1461063e5761014d565b806301ffc9a7146101525780630af179d7146101b757806310f13a8c1461023a578063124a319c146103125780632203ab56146103a9575b600080fd5b61019d6004803603602081101561016857600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610d99565b604051808215151515815260200191505060405180910390f35b610238600480360360408110156101cd57600080fd5b8101908080359060200190929190803590602001906401000000008111156101f457600080fd5b82018360208201111561020657600080fd5b8035906020019184600183028401116401000000008311171561022857600080fd5b9091929391929390505050610dfa565b005b6103106004803603606081101561025057600080fd5b81019080803590602001909291908035906020019064010000000081111561027757600080fd5b82018360208201111561028957600080fd5b803590602001918460018302840111640100000000831117156102ab57600080fd5b9091929391929390803590602001906401000000008111156102cc57600080fd5b8201836020820111156102de57600080fd5b8035906020019184600183028401116401000000008311171561030057600080fd5b9091929391929390505050611073565b005b6103676004803603604081101561032857600080fd5b810190808035906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050611159565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103df600480360360408110156103bf57600080fd5b810190808035906020019092919080359060200190929190505050611656565b6040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561042557808201518184015260208101905061040a565b50505050905090810190601f1680156104525780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b6104a16004803603606081101561047757600080fd5b810190808035906020019092919080359060200190929190803590602001909291905050506117a5565b005b610524600480360360408110156104b957600080fd5b8101908080359060200190929190803590602001906401000000008111156104e057600080fd5b8201836020820111156104f257600080fd5b8035906020019184600183028401116401000000008311171561051457600080fd5b909192939192939050505061183d565b005b6105526004803603602081101561053c57600080fd5b81019080803590602001909291905050506118dd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105ec600480360360608110156105aa57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611914565b005b6106246004803603604081101561060457600080fd5b810190808035906020019092919080359060200190929190505050611a28565b604051808215151515815260200191505060405180910390f35b6106bf6004803603604081101561065457600080fd5b81019080803590602001909291908035906020019064010000000081111561067b57600080fd5b82018360208201111561068d57600080fd5b803590602001918460018302840111640100000000831117156106af57600080fd5b9091929391929390505050611a90565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106ff5780820151818401526020810190506106e4565b50505050905090810190601f16801561072c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107c56004803603606081101561075057600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561078157600080fd5b82018360208201111561079357600080fd5b803590602001918460018302840111640100000000831117156107b557600080fd5b9091929391929390505050611b6c565b005b6107f3600480360360208110156107dd57600080fd5b8101908080359060200190929190505050611bf9565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610833578082015181840152602081019050610818565b50505050905090810190601f1680156108605780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108ef6004803603604081101561088457600080fd5b8101908080359060200190929190803590602001906401000000008111156108ab57600080fd5b8201836020820111156108bd57600080fd5b803590602001918460018302840111640100000000831117156108df57600080fd5b9091929391929390505050611cae565b005b6109be6004803603606081101561090757600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561093857600080fd5b82018360208201111561094a57600080fd5b8035906020019184600183028401116401000000008311171561096c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611d4e565b005b610a04600480360360608110156109d657600080fd5b810190808035906020019092919080359060200190929190803561ffff169060200190929190505050611ebb565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a44578082015181840152602081019050610a29565b50505050905090810190601f168015610a715780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aab60048036036020811015610a9557600080fd5b8101908080359060200190929190505050611fc0565b005b610ad960048036036020811015610ac357600080fd5b8101908080359060200190929190505050612027565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b19578082015181840152602081019050610afe565b50505050905090810190601f168015610b465780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610b8060048036036020811015610b6a57600080fd5b81019080803590602001909291905050506120dc565b604051808381526020018281526020019250505060405180910390f35b610be960048036036040811015610bb357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612116565b005b610c6060048036036060811015610c0157600080fd5b810190808035906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612142565b005b610c9860048036036040811015610c7857600080fd5b810190808035906020019092919080359060200190929190505050612280565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610cd8578082015181840152602081019050610cbd565b50505050905090810190601f168015610d055780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610d7f60048036036060811015610d2957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612347565b604051808215151515815260200191505060405180910390f35b60006359d1d43c60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610df35750610df282612383565b5b9050919050565b82610e04816123e4565b610e0d57600080fd5b600080905060008090506060806000610e24613108565b610e7c60008a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061257090919063ffffffff16565b90505b610e888161259a565b6110005760008661ffff161415610f2f5780604001519550610ea9816125b0565b9350836040516020018082805190602001908083835b60208310610ee25780518252602082019150602081019050602083039250610ebf565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209150610f28816125e7565b9250610ff2565b6060610f3a826125b0565b9050816040015161ffff168761ffff16141580610f675750610f65818661261790919063ffffffff16565b155b15610ff057610fc98b86898d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8b88602001510360008b511461263e565b816040015196508160200151955080945084805190602001209250610fed826125e7565b93505b505b610ffb81612abf565b610e7f565b50600083511115611068576110678984878b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505088898e8e905003600089511461263e565b5b505050505050505050565b8461107d816123e4565b61108657600080fd5b8282600960008981526020019081526020016000208787604051808383808284378083019250505092505050908152602001604051809103902091906110cd929190613153565b5084846040518083838082843780830192505050925050506040518091039020867fd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a7550878760405180806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050935050505060405180910390a3505050505050565b600080600660008581526020019081526020016000206000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461121e5780915050611650565b6000611229856118dd565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561126b57600092505050611650565b600060608273ffffffffffffffffffffffffffffffffffffffff166301ffc9a760e01b60405160240180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019150506040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b6020831061138c5780518252602082019150602081019050602083039250611369565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d80600081146113ec576040519150601f19603f3d011682016040523d82523d6000602084013e6113f1565b606091505b5091509150811580611404575060208151105b8061144b5750600060f81b81601f8151811061141c57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b1561145d576000945050505050611650565b8273ffffffffffffffffffffffffffffffffffffffff168660405160240180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019150506040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106115735780518252602082019150602081019050602083039250611550565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d80600081146115d3576040519150601f19603f3d011682016040523d82523d6000602084013e6115d8565b606091505b5080925081935050508115806115ef575060208151105b806116365750600060f81b81601f8151811061160757fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b15611648576000945050505050611650565b829450505050505b92915050565b60006060600080600086815260200190815260200160002090506000600190505b848111611782576000858216141580156116b757506000826000838152602001908152602001600020805460018160011615610100020316600290049050115b156117765780826000838152602001908152602001600020808054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156117645780601f1061173957610100808354040283529160200191611764565b820191906000526020600020905b81548152906001019060200180831161174757829003601f168201915b5050505050905093509350505061179e565b600181901b9050611677565b5060006040518060200160405280600081525081915092509250505b9250929050565b826117af816123e4565b6117b857600080fd5b604051806040016040528084815260200183815250600860008681526020019081526020016000206000820151816000015560208201518160010155905050837f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e468484604051808381526020018281526020019250505060405180910390a250505050565b82611847816123e4565b61185057600080fd5b82826002600087815260200190815260200160002091906118729291906131d3565b50837fe379c1624ed7e714cc0937528a32359d69d5281337765313dba4e081b72d7578848460405180806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050935050505060405180910390a250505050565b600060606118ec83603c612280565b905060008151141561190257600091505061190f565b61190b81612bd3565b9150505b919050565b80600b600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16847fe1c5610a6e0cbe10764ecd182adcef1ec338dc4e199c99c32ce98f38e12791df84604051808215151515815260200191505060405180910390a4505050565b60008060056000858152602001908152602001600020600060036000878152602001908152602001600020548152602001908152602001600020600084815260200190815260200160002060009054906101000a900461ffff1661ffff161415905092915050565b606060096000858152602001908152602001600020838360405180838380828437808301925050509250505090815260200160405180910390208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b5e5780601f10611b3357610100808354040283529160200191611b5e565b820191906000526020600020905b815481529060010190602001808311611b4157829003601f168201915b505050505090509392505050565b83611b76816123e4565b611b7f57600080fd5b600084600186031614611b9157600080fd5b828260008088815260200190815260200160002060008781526020019081526020016000209190611bc39291906131d3565b5083857faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe360405160405180910390a35050505050565b6060600760008381526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611ca25780601f10611c7757610100808354040283529160200191611ca2565b820191906000526020600020905b815481529060010190602001808311611c8557829003601f168201915b50505050509050919050565b82611cb8816123e4565b611cc157600080fd5b8282600760008781526020019081526020016000209190611ce3929190613153565b50837fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f7848460405180806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050935050505060405180910390a250505050565b82611d58816123e4565b611d6157600080fd5b837f65412581168e88a1e60c6459d7f44ae83ad0832e670826c05a4e2476b57af75284846040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611dcb578082015181840152602081019050611db0565b50505050905090810190601f168015611df85780820380516001836020036101000a031916815260200191505b50935050505060405180910390a2603c831415611e7c57837f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd2611e3a84612bd3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a25b816001600086815260200190815260200160002060008581526020019081526020016000209080519060200190611eb4929190613253565b5050505050565b606060046000858152602001908152602001600020600060036000878152602001908152602001600020548152602001908152602001600020600084815260200190815260200160002060008361ffff1661ffff1681526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611fb25780601f10611f8757610100808354040283529160200191611fb2565b820191906000526020600020905b815481529060010190602001808311611f9557829003601f168201915b505050505090509392505050565b80611fca816123e4565b611fd357600080fd5b6003600083815260200190815260200160002060008154809291906001019190505550817fb757169b8492ca2f1c6619d9d76ce22803035c3b1d5f6930dffe7b127c1a198360405160405180910390a25050565b6060600260008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120d05780601f106120a5576101008083540402835291602001916120d0565b820191906000526020600020905b8154815290600101906020018083116120b357829003601f168201915b50505050509050919050565b6000806008600084815260200190815260200160002060000154600860008581526020019081526020016000206001015491509150915091565b81612120816123e4565b61212957600080fd5b61213d83603c61213885612bf6565b611d4e565b505050565b8261214c816123e4565b61215557600080fd5b81600660008681526020019081526020016000206000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916847f7c69f06bea0bdef565b709e93a147836b0063ba2dd89f02d0b7e8d931e6a6daa84604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a350505050565b60606001600084815260200190815260200160002060008381526020019081526020016000208054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561233a5780601f1061230f5761010080835404028352916020019161233a565b820191906000526020600020905b81548152906001019060200180831161231d57829003601f168201915b5050505050905092915050565b600b602052826000526040600020602052816000526040600020602052806000526040600020600092509250509054906101000a900460ff1681565b600063c869023360e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806123dd57506123dc82612c41565b5b9050919050565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561245a57600080fd5b505afa15801561246e573d6000803e3d6000fd5b505050506040513d602081101561248457600080fd5b810190808051906020019092919050505090503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806125685750600b600084815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b915050919050565b612578613108565b828160000181905250818160c001818152505061259481612abf565b92915050565b6000816000015151826020015110159050919050565b60606125e082602001516125cc84600001518560200151612ca2565b8460000151612cfd9092919063ffffffff16565b9050919050565b60606126108260a001518360a001518460c00151038460000151612cfd9092919063ffffffff16565b9050919050565b60008151835114801561263657506126358360008460008751612d70565b5b905092915050565b6000600360008981526020019081526020016000205490506000878051906020012090506060612679868689612cfd9092919063ffffffff16565b90508315612861576000600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff1681526020019081526020016000208054600181600116156101000203166002900490501461275557600560008b815260200190815260200160002060008481526020019081526020016000206000838152602001908152602001600020600081819054906101000a900461ffff16809291906001900391906101000a81548161ffff021916908361ffff160217905550505b600460008b81526020019081526020016000206000848152602001908152602001600020600083815260200190815260200160002060008961ffff1661ffff16815260200190815260200160002060006127af91906132d3565b897f03528ed0c2a3ebc993b12ce3c16bb382f9c7d88ef7d8a1bf290eaf35955a12078a8a60405180806020018361ffff1661ffff168152602001828103825284818151815260200191508051906020019080838360005b83811015612821578082015181840152602081019050612806565b50505050905090810190601f16801561284e5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a2612ab3565b6000600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff168152602001908152602001600020805460018160011615610100020316600290049050141561293557600560008b815260200190815260200160002060008481526020019081526020016000206000838152602001908152602001600020600081819054906101000a900461ffff168092919060010191906101000a81548161ffff021916908361ffff160217905550505b80600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff1681526020019081526020016000209080519060200190612997929190613253565b50897f52a608b3303a48862d07a73d82fa221318c0027fbbcfb1b2329bface3f19ff2b8a8a8460405180806020018461ffff1661ffff16815260200180602001838103835286818151815260200191508051906020019080838360005b83811015612a0f5780820151818401526020810190506129f4565b50505050905090810190601f168015612a3c5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015612a75578082015181840152602081019050612a5a565b50505050905090810190601f168015612aa25780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a25b50505050505050505050565b8060c00151816020018181525050806000015151816020015110612ae257612bd0565b6000612af682600001518360200151612ca2565b8260200151019050612b15818360000151612d9490919063ffffffff16565b826040019061ffff16908161ffff1681525050600281019050612b45818360000151612d9490919063ffffffff16565b826060019061ffff16908161ffff1681525050600281019050612b75818360000151612dba90919063ffffffff16565b826080019063ffffffff16908163ffffffff16815250506004810190506000612bab828460000151612d9490919063ffffffff16565b61ffff169050600282019150818360a00181815250508082018360c001818152505050505b50565b60006014825114612be357600080fd5b600c6101000a6020830151049050919050565b606060146040519080825280601f01601f191660200182016040528015612c2c5781602001600182028038833980820191505090505b509050600c6101000a82026020820152919050565b600063691f343160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612c9b5750612c9a82612de2565b5b9050919050565b6000808290505b600115612cf15783518110612cba57fe5b6000612ccf8286612e5490919063ffffffff16565b60ff16905060018101820191506000811415612ceb5750612cf1565b50612ca9565b82810391505092915050565b606083518284011115612d0f57600080fd5b6060826040519080825280601f01601f191660200182016040528015612d445781602001600182028038833980820191505090505b5090506000806020830191508560208801019050612d63828287612e78565b8293505050509392505050565b6000612d7d848484612ec1565b612d88878785612ec1565b14905095945050505050565b60008251600283011115612da757600080fd5b61ffff8260028501015116905092915050565b60008251600483011115612dcd57600080fd5b63ffffffff8260048501015116905092915050565b6000604051808061334160249139602401905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612e4d5750612e4c82612ee4565b5b9050919050565b6000828281518110612e6257fe5b602001015160f81c60f81b60f81c905092915050565b5b60208110612e9c5781518352602083019250602082019150602081039050612e79565b60006001826020036101000a0390508019835116818551168181178652505050505050565b600083518284011115612ed357600080fd5b818360208601012090509392505050565b600063a8fa568260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612f3e5750612f3d82612f45565b5b9050919050565b600063bc1c58d160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612f9f5750612f9e82612fa6565b5b9050919050565b6000633b3b57de60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061303f575063f1cb7e0660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061304f575061304e82613056565b5b9050919050565b6000632203ab5660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806130b057506130af826130b7565b5b9050919050565b60006301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061319457803560ff19168380011785556131c2565b828001600101855582156131c2579182015b828111156131c15782358255916020019190600101906131a6565b5b5090506131cf919061331b565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061321457803560ff1916838001178555613242565b82800160010185558215613242579182015b82811115613241578235825591602001919060010190613226565b5b50905061324f919061331b565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061329457805160ff19168380011785556132c2565b828001600101855582156132c2579182015b828111156132c15782518255916020019190600101906132a6565b5b5090506132cf919061331b565b5090565b50805460018160011615610100020316600290046000825580601f106132f95750613318565b601f016020900490600052602060002090810190613317919061331b565b5b50565b61333d91905b80821115613339576000816000905550600101613321565b5090565b9056fe696e74657266616365496d706c656d656e74657228627974657333322c62797465733429a265627a7a72315820e37e49339c407f277a18b1276335d80f06f86465250ddd0bb061d5fb5f0892b264736f6c6343000510003200000000000000000000000000000000000c2e074ec69a0dfb2997ba6c7d2e1e" +} diff --git a/deploy/00_deploy_legacy_resolvers.ts b/deploy/00_deploy_legacy_resolvers.ts index fc79d1da9..190cd3eda 100644 --- a/deploy/00_deploy_legacy_resolvers.ts +++ b/deploy/00_deploy_legacy_resolvers.ts @@ -4,43 +4,71 @@ import { ethers } from 'hardhat' import { DeployFunction } from 'hardhat-deploy/types' import { HardhatRuntimeEnvironment } from 'hardhat/types' import { resolve } from 'path' -import { namehash } from 'viem' const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { const { getNamedAccounts, deployments } = hre const allNamedAccts = await getNamedAccounts() + const { owner, deployer} = allNamedAccts - const registry = await ethers.getContract('ENSRegistry') + const registry = await ethers.getContract('ENSRegistry', owner) + const nameWrapper = await ethers.getContract('NameWrapper', owner) + const ethController = await ethers.getContract('ETHRegistrarController', owner) + const reverseRegistrar = await ethers.getContract('ReverseRegistrar', owner) - await deployments.deploy('NoMulticallResolver', { - from: allNamedAccts.deployer, + await deployments.deploy('LegacyResolverV1', { + from: deployer, contract: JSON.parse( - await fs.readFile(resolve(__dirname, './.contracts/NoMulticallResolver.json'), { + await fs.readFile(resolve(__dirname, './.contracts/LegacyResolverV1.json'), { encoding: 'utf8', }), ), args: [registry.address], }) - await deployments.deploy('OldResolver', { - from: allNamedAccts.deployer, + await deployments.deploy('LegacyResolverV2', { + from: deployer, contract: JSON.parse( - await fs.readFile(resolve(__dirname, './.contracts/OldResolver.json'), { + await fs.readFile(resolve(__dirname, './.contracts/LegacyResolverV2.json'), { encoding: 'utf8', }), ), args: [registry.address], }) - await deployments.deploy('NoTextResolver', { - from: allNamedAccts.deployer, + await deployments.deploy('LegacyResolverV3', { + from: deployer, contract: JSON.parse( - await fs.readFile(resolve(__dirname, './.contracts/NoTextResolver.json'), { + await fs.readFile(resolve(__dirname, './.contracts/LegacyResolverV3.json'), { encoding: 'utf8', }), ), args: [registry.address], }) + + await deployments.deploy('LegacyResolverV4', { + from: deployer, + contract: JSON.parse( + await fs.readFile(resolve(__dirname, './.contracts/LegacyResolverV4.json'), { + encoding: 'utf8', + }), + ), + args: [registry.address], + }) + + // console.log('Deploying CustomResolver...') + // console.log('>>', registry.address, nameWrapper.address, ethController.address, reverseRegistrar.address) + // await deployments.deploy('CustomResolver', { + // from: allNamedAccts.deployer, + // contract: JSON.parse( + // await fs.readFile(resolve(__dirname, './.contracts/CustomResolver1.json'), { + // encoding: 'utf8', + // }), + // ), + // args: [registry.address, nameWrapper.address, ethController.address, reverseRegistrar.address], + // gas: 5000000, + // }) + + console.log('Finished deploying legacy resolvers') // const resolver = await ethers.getContract('NoMulticallResolver') // for (const { namedOwner, name, addr } of names) { diff --git a/e2e/specs/stateless/profileEditor.spec.ts b/e2e/specs/stateless/profileEditor.spec.ts index c08f96b36..93f16f68f 100644 --- a/e2e/specs/stateless/profileEditor.spec.ts +++ b/e2e/specs/stateless/profileEditor.spec.ts @@ -16,6 +16,8 @@ dotenv.config({ path: '.env.local' }) const oldResolver = testClient.chain.contracts.legacyPublicResolver.address const newResolver = testClient.chain.contracts.publicResolver.address + +const contractAddresses = JSON.parse(process.env.NEXT_PUBLIC_DEPLOYMENT_ADDRESSES || '{}') const ownedResolverAddress = JSON.parse(process.env.NEXT_PUBLIC_DEPLOYMENT_ADDRESSES || '{}')?.OwnedResolver || '' const invalidResolverAddress = @@ -24,8 +26,12 @@ const noMulticallResolverAddress = JSON.parse(process.env.NEXT_PUBLIC_DEPLOYMENT_ADDRESSES || '{}')?.NoMulticallResolverAddress || '' const oldestResolverAddress = JSON.parse(process.env.NEXT_PUBLIC_DEPLOYMENT_ADDRESSES || '{}')?.OldesResolver || '' -const noTextResolverAddress = - JSON.parse(process.env.NEXT_PUBLIC_DEPLOYMENT_ADDRESSES || '{}')?.NoTextResolver || '' +const customResolver = + JSON.parse(process.env.NEXT_PUBLIC_DEPLOYMENT_ADDRESSES || '{}')?.CustomResolver || '' + +const resolverV4Address = contractAddresses.LegacyResolverV4 || '' +const resolverV5Address = contractAddresses.LegacyResolverV5 || '' +const outdatedResolverAddress = contractAddresses.LegacyResolverV4 || '' const dummyABI = { test: 'test', @@ -140,6 +146,107 @@ test.describe('profile', () => { }) }) +test.describe('legacy resolvers', () => { + test('should force a name with an outdated resolver to upgrade', async ({ + page, + login, + makeName, + makePageObject, + }) => { + const name = await makeName({ + label: 'outdated-resolver', + type: 'legacy', + owner: 'user', + resolver: outdatedResolverAddress, + }) + + const profilePage = makePageObject('ProfilePage') + const transactionModal = makePageObject('TransactionModal') + const morePage = makePageObject('MorePage') + + await profilePage.goto(name) + await login.connect() + + await profilePage.editProfileButton.click() + await page.pause() + await expect(profilePage.profileEditor.locator('text=No resolver set')).toBeVisible() + + await profilePage.profileEditor.getByTestId('warning-overlay-next-button').click() + await transactionModal.autoComplete() + + await morePage.goto(name) + + await morePage.resolver.click() + await expect(morePage.resolver.getByText(newResolver)).toBeVisible() + }) + + test('should be able to update records with resolver v4', async ({ + page, + login, + makeName, + makePageObject, + }) => { + test.slow() + const name = await makeName({ + label: 'unwrapped', + type: 'legacy', + resolver: resolverV4Address, + records: await makeRecords(), + }) + + const morePage = makePageObject('MorePage') + const profilePage = makePageObject('ProfilePage') + const recordsPage = makePageObject('RecordsPage') + const transactionModal = makePageObject('TransactionModal') + + await morePage.goto(name) + await login.connect() + + await page.pause() + await expect(morePage.resolver.getByText(resolverV4Address)).toBeVisible() + + await profilePage.goto(name) + await expect(profilePage.record('text', 'description')).toHaveText('Hello2') + await expect(profilePage.record('text', 'url')).toHaveText('twitter.com') + await expect(profilePage.record('address', 'eth')).toHaveText('0xf39...92266') + await expect(profilePage.record('address', 'btc')).toHaveText('bc1qj...pwa6n') + await expect(profilePage.record('address', 'etcLegacy')).toHaveText('etcLegacy0x3C4...293BC') + await expect(profilePage.record('text', 'email')).toHaveText('fakeemail@fake.com') + + await profilePage.editProfileButton.click() + + await profilePage.profileEditor.getByTestId('warning-overlay-skip-button').click() + + // Update records + await profilePage.profileEditorInput('eth').fill(createAccounts().getAddress('user2')) + await profilePage.profileEditorInput('description').fill('new name') + + // Add records + await profilePage.profileEditorAddInputs(['location', 'bnb']) + await profilePage.profileEditorInput('location').fill('L1 chain') + await profilePage.profileEditorInput('bnb').fill('bnb1g5p04snezgpky203fq6da9qyjsy2k9kzr5yuhl') + + await profilePage.profileEditor.getByTestId('profile-submit-button').click() + + await transactionModal.autoComplete() + + await morePage.goto(name) + await expect(morePage.resolver).toHaveText(oldResolver) + + await recordsPage.goto(name) + await expect(recordsPage.getRecordValue('text', 'location')).toHaveText('L1 chain') + await expect(recordsPage.getRecordValue('text', 'description')).toHaveText('new name') + await expect(recordsPage.getRecordValue('text', 'url')).toHaveText('https://twitter.com') + await expect(recordsPage.getRecordValue('address', 'eth')).toHaveText( + createAccounts().getAddress('user2'), + ) + await expect(recordsPage.getRecordValue('address', 'bnb')).toHaveText( + 'bnb1g5p04snezgpky203fq6da9qyjsy2k9kzr5yuhl', + ) + await expect(recordsPage.getRecordValue('text', 'email')).toHaveText('fakeemail@fake.com') + }) +}) + test.describe('migrations', () => { test('should force a name on the old registry to go to update registry', async ({ page, @@ -650,7 +757,7 @@ test.describe('migrations', () => { label: 'unwrapped', type: 'legacy', owner: 'user', - resolver: noTextResolverAddress, + resolver: customResolver, records: await makeRecords(), }) diff --git a/src/constants/resolverAddressData.ts b/src/constants/resolverAddressData.ts index be538289c..151f36e6b 100644 --- a/src/constants/resolverAddressData.ts +++ b/src/constants/resolverAddressData.ts @@ -212,49 +212,60 @@ export const KNOWN_RESOLVER_DATA: KnownResolverData = { ], ...(process.env.NEXT_PUBLIC_ETH_NODE === 'anvil' ? { - '1337': [], - // '1337': [ - // { - // address: deploymentAddresses.PublicResolver, - // deployer: 'ENS Labs', - // tag: 'latest', - // isNameWrapperAware: true, - // supportedInterfaces: [ - // RESOLVER_INTERFACE_IDS.AddressResolver, - // RESOLVER_INTERFACE_IDS.MultiCoinAddressResolver, - // RESOLVER_INTERFACE_IDS.NameResolver, - // RESOLVER_INTERFACE_IDS.AbiResolver, - // RESOLVER_INTERFACE_IDS.TextResolver, - // RESOLVER_INTERFACE_IDS.ContentHashResolver, - // RESOLVER_INTERFACE_IDS.DnsRecordResolver, - // RESOLVER_INTERFACE_IDS.InterfaceResolver, - // RESOLVER_INTERFACE_IDS.VersionableResolver, - // ], - // }, - // { - // address: '0xd7a4F6473f32aC2Af804B3686AE8F1932bC35750', - // deployer: 'dummy', - // tag: null, - // isNameWrapperAware: false, - // supportedInterfaces: [], - // }, - // { - // address: deploymentAddresses.LegacyPublicResolver, - // deployer: 'ENS Labs', - // tag: null, - // isNameWrapperAware: false, - // supportedInterfaces: [ - // RESOLVER_INTERFACE_IDS.AddressResolver, - // RESOLVER_INTERFACE_IDS.MultiCoinAddressResolver, - // RESOLVER_INTERFACE_IDS.NameResolver, - // RESOLVER_INTERFACE_IDS.AbiResolver, - // RESOLVER_INTERFACE_IDS.TextResolver, - // RESOLVER_INTERFACE_IDS.ContentHashResolver, - // RESOLVER_INTERFACE_IDS.DnsRecordResolver, - // RESOLVER_INTERFACE_IDS.InterfaceResolver, - // ], - // }, - // ], + '1337': [ + { + address: deploymentAddresses.PublicResolver, + deployer: 'ENS Labs', + tag: 'latest', + isNameWrapperAware: true, + supportedInterfaces: [ + RESOLVER_INTERFACE_IDS.AddressResolver, + RESOLVER_INTERFACE_IDS.MultiCoinAddressResolver, + RESOLVER_INTERFACE_IDS.NameResolver, + RESOLVER_INTERFACE_IDS.AbiResolver, + RESOLVER_INTERFACE_IDS.TextResolver, + RESOLVER_INTERFACE_IDS.ContentHashResolver, + RESOLVER_INTERFACE_IDS.DnsRecordResolver, + RESOLVER_INTERFACE_IDS.InterfaceResolver, + RESOLVER_INTERFACE_IDS.VersionableResolver, + ], + }, + { + address: '0xd7a4F6473f32aC2Af804B3686AE8F1932bC35750', + deployer: 'Custom ', + tag: null, + isNameWrapperAware: false, + supportedInterfaces: [], + }, + { + address: deploymentAddresses.LegacyPublicResolver, + deployer: 'ENS Labs', + tag: null, + isNameWrapperAware: false, + supportedInterfaces: [ + RESOLVER_INTERFACE_IDS.AddressResolver, + RESOLVER_INTERFACE_IDS.MultiCoinAddressResolver, + RESOLVER_INTERFACE_IDS.NameResolver, + RESOLVER_INTERFACE_IDS.AbiResolver, + RESOLVER_INTERFACE_IDS.TextResolver, + RESOLVER_INTERFACE_IDS.ContentHashResolver, + RESOLVER_INTERFACE_IDS.DnsRecordResolver, + RESOLVER_INTERFACE_IDS.InterfaceResolver, + ], + }, + { + address: deploymentAddresses.LegacyResolverV1, + deployer: 'ENS Labs', + tag: 'outdated', + isNameWrapperAware: false, + supportedInterfaces: [ + RESOLVER_INTERFACE_IDS.AddressResolver, + RESOLVER_INTERFACE_IDS.NameResolver, + RESOLVER_INTERFACE_IDS.AbiResolver, + RESOLVER_INTERFACE_IDS.InterfaceResolver, + ], + }, + ], } : {}), } @@ -265,5 +276,9 @@ export const getKnownResolverData = ({ }: { chainId: number resolverAddress: string -}): KnownResolverItem | undefined => - KNOWN_RESOLVER_DATA[chainId]?.find((data) => data.address === resolverAddress) +}): KnownResolverItem | undefined => { + console.log(KNOWN_RESOLVER_DATA[chainId]) + return KNOWN_RESOLVER_DATA[chainId]?.find( + (data) => data.address?.toLowerCase() === resolverAddress?.toLowerCase(), + ) +} diff --git a/src/hooks/resolver/useResolverStatus.ts b/src/hooks/resolver/useResolverStatus.ts index 8317c4d61..2942fc1d0 100644 --- a/src/hooks/resolver/useResolverStatus.ts +++ b/src/hooks/resolver/useResolverStatus.ts @@ -45,6 +45,8 @@ export const useResolverStatus = ({ enabled: enabled && !internalProfile.isLoading, }) + console.log('resolverType', resolverType) + const resolverIsAuthorised = useResolverIsAuthorised({ name, enabled: enabled && !resolverType.isLoading && resolverType.data?.type !== 'latest', @@ -82,6 +84,7 @@ export const useResolverStatus = ({ hasLatestResolver: false, hasValidResolver: false, isKnownResolver: false, + isOutdatedResolver: false, isAuthorized: false, isNameWrapperAware: false, hasProfile: false, @@ -95,6 +98,7 @@ export const useResolverStatus = ({ hasResolver: !!profileResolverAddress && profileResolverAddress !== emptyAddress, hasLatestResolver: resolverType.data?.type === 'latest', isKnownResolver: resolverType.data?.type !== 'custom', + isOutdatedResolver: resolverType.data?.type === 'outdated', isNameWrapperAware: profileResolverAddress ? getResolverWrapperAwareness({ resolverAddress: profileResolverAddress, chainId }) || resolverIsAuthorised.data?.isAuthorised diff --git a/src/hooks/resolver/useResolverType.ts b/src/hooks/resolver/useResolverType.ts index 65e2e112a..6ded3ccd3 100644 --- a/src/hooks/resolver/useResolverType.ts +++ b/src/hooks/resolver/useResolverType.ts @@ -58,6 +58,7 @@ export const useResolverType = ({ name, enabled: enabled_ = true }: UseResolverT const data = useMemo(() => { if (!enabled || isLoading) return + console.log('>>>>>', chainId, resolverAddress) const knownResolverData = getKnownResolverData({ chainId, resolverAddress }) if (!knownResolverData) { return { type: 'custom', isWildcard, tone: 'greySecondary' } as const diff --git a/src/transaction-flow/input/ProfileEditor/ProfileEditor-flow.tsx b/src/transaction-flow/input/ProfileEditor/ProfileEditor-flow.tsx index 71dcc5132..0fcc1e9e1 100644 --- a/src/transaction-flow/input/ProfileEditor/ProfileEditor-flow.tsx +++ b/src/transaction-flow/input/ProfileEditor/ProfileEditor-flow.tsx @@ -28,14 +28,27 @@ import { useIsWrapped } from '@app/hooks/useIsWrapped' import { useProfile } from '@app/hooks/useProfile' import { ProfileEditorForm, useProfileEditorForm } from '@app/hooks/useProfileEditorForm' import { useResolverHasInterfaces } from '@app/hooks/useResolverHasInterfaces' +import { makeIntroItem } from '@app/transaction-flow/intro' import { createTransactionItem, TransactionItem } from '@app/transaction-flow/transaction' import TransactionLoader from '@app/transaction-flow/TransactionLoader' import type { TransactionDialogPassthrough } from '@app/transaction-flow/types' import { useProfileEditorReducer } from './hooks/useProfileEditorReducer' +import type { View } from './hooks/useProfileEditorReducer' // import { getResolverWrapperAwareness } from '@app/utils/utils' import ResolverWarningOverlay from './ResolverWarningOverlay' +import { InvalidResolverView } from './views/InvalidResolverView' +import { MigrateProfileSelectorView } from './views/MigrateProfileSelectorView.tsx' +import { MigrateProfileWarningView } from './views/MigrateProfileWarningView' +import { MigrateRegistryView } from './views/MigrateRegistryView' +import { NoResolverView } from './views/NoResolverView' +import { ResetProfileView } from './views/ResetProfileView' +import { ResolverNotNameWrapperAwareView } from './views/ResolverNotNameWrapperAwareView' +import { ResolverOutOfDateView } from './views/ResolverOutOfDateView' +import { ResolverOutOfSyncView } from './views/ResolverOutOfSyncView' +import { TransferOrResetProfileView } from './views/TransferOrResetProfileView' +import { UpdateResolverOrResetProfileView } from './views/UpdateResolverOrResetProfileView' import { WrappedAvatarButton } from './WrappedAvatarButton' const AvatarWrapper = styled.div( @@ -73,6 +86,8 @@ export type Props = { onDismiss?: () => void } & TransactionDialogPassthrough +type SelectedProfile = 'latest' | 'current' | 'reset' + const SubmitButton = ({ control, previousRecords, @@ -246,6 +261,105 @@ const ProfileEditor = ({ data = {}, transactions = [], dispatch, onDismiss }: Pr setView('addRecord') } + const handleUpdateResolver = () => { + dispatch({ + name: 'setTransactions', + payload: [ + createTransactionItem('updateResolver', { + name, + contract: isWrapped ? 'nameWrapper' : 'registry', + resolverAddress, + }), + ], + }) + dispatch({ + name: 'setFlowStage', + payload: 'transaction', + }) + } + + const handleMigrateProfile = () => { + dispatch({ + name: 'startFlow', + key: `migrate-profile-${name}`, + payload: { + intro: { + title: ['input.profileEditor.intro.migrateProfile.title', { ns: 'transactionFlow' }], + content: makeIntroItem('GenericWithDescription', { + description: t('input.profileEditor.intro.migrateProfile.description', { + ns: 'transactionFlow', + }), + }), + }, + transactions: [ + createTransactionItem('migrateProfile', { + name, + }), + createTransactionItem('updateResolver', { + name, + contract: isWrapped ? 'nameWrapper' : 'registry', + resolverAddress, + }), + ], + }, + }) + } + + const handleResetProfile = () => { + dispatch({ + name: 'startFlow', + key: `reset-profile-${name}`, + payload: { + intro: { + title: ['input.profileEditor.intro.resetProfile.title', { ns: 'transactionFlow' }], + content: makeIntroItem('GenericWithDescription', { + description: t('input.profileEditor.intro.resetProfile.description'), + }), + }, + transactions: [ + createTransactionItem('resetProfile', { + name, + resolverAddress, + }), + createTransactionItem('updateResolver', { + name, + contract: isWrapped ? 'nameWrapper' : 'registry', + resolverAddress, + }), + ], + }, + }) + } + + const handleMigrateCurrentProfileToLatest = async () => { + dispatch({ + name: 'startFlow', + key: `migrate-profile-with-reset-${name}`, + payload: { + intro: { + title: [ + 'input.profileEditor.intro.migrateCurrentProfile.title', + { ns: 'transactionFlow' }, + ], + content: makeIntroItem('GenericWithDescription', { + description: t('input.profileEditor.intro.migrateCurrentProfile.description'), + }), + }, + transactions: [ + createTransactionItem('migrateProfileWithReset', { + name, + resolverAddress: profile?.resolverAddress!, + }), + createTransactionItem('updateResolver', { + name, + contract: isWrapped ? 'nameWrapper' : 'registry', + resolverAddress, + }), + ], + }, + }) + } + const canEditRecordsWhenWrapped = !!resolverStatus.data?.isAuthorized console.log('canEditRecordsWhenWrapped', canEditRecordsWhenWrapped) @@ -258,10 +372,12 @@ const ProfileEditor = ({ data = {}, transactions = [], dispatch, onDismiss }: Pr isWrapped, isLoading: isLoading_, }, - {}, + { + onDismiss, + }, ) - const view_ = editorState.flow[editorState.currentIndex] - console.log('editorState', editorState.flow[editorState.currentIndex]) + const view_ = editorState.stack[editorState.stack.length - 1] + console.log('editorState', view_) const shouldInitializeEditorState = !isLoading_ && view_ === 'loading' useEffect(() => { @@ -282,7 +398,8 @@ const ProfileEditor = ({ data = {}, transactions = [], dispatch, onDismiss }: Pr return ( <> - {match(view) + {match(view_) + .with('loading', () => ) .with('editor', () => ( <> @@ -447,6 +564,89 @@ const ProfileEditor = ({ data = {}, transactions = [], dispatch, onDismiss }: Pr }} /> )) + .with('migrateRegistry', () => ) + .with('invalidResolver', () => ( + {}} onCancel={onDismiss} /> + )) + .with('migrateProfileSelector', () => ( + {}} + onBack={() => {}} + onNext={() => {}} + /> + )) + .with('migrateProfileWarningView', () => ( + { + editorDispatch({ type: 'popView' }) + }} + onNext={() => {}} + /> + )) + .with('noResolver', () => ( + { + editorDispatch({ type: 'popView' }) + }} + onConfirm={() => {}} + /> + )) + .with('resetProfile', () => ( + { + editorDispatch({ type: 'popView' }) + }} + onNext={() => {}} + /> + )) + .with('resolverNotNameWrapperAware', () => ( + {}} + onCancel={onDismiss} + onNext={() => {}} + /> + )) + .with('resolverOutOfDate', () => ( + { + editorDispatch({ type: 'popView' }) + }} + onConfirm={() => { + if (resolverStatus.data?.hasProfile) + editorDispatch({ type: 'pushView', payload: 'transferOrResetProfile' }) + else handleUpdateResolver() + }} + /> + )) + .with('resolverOutOfSync', () => ( + {}} onCancel={onDismiss} onNext={() => {}} /> + )) + .with('transferOrResetProfile', () => ( + { + editorDispatch({ type: 'popView' }) + }} + onNext={(selectedProfile: SelectedProfile) => { + if (selectedProfile === 'reset') handleUpdateResolver() + else handleMigrateProfile() + }} + /> + )) + .with('updateResolverOrResetProfile', () => ( + {}} + onBack={() => {}} + onNext={() => {}} + /> + )) .exhaustive()} ) diff --git a/src/transaction-flow/input/ProfileEditor/hooks/useProfileEditorReducer.ts b/src/transaction-flow/input/ProfileEditor/hooks/useProfileEditorReducer.ts index fc1561835..577ba3ca4 100644 --- a/src/transaction-flow/input/ProfileEditor/hooks/useProfileEditorReducer.ts +++ b/src/transaction-flow/input/ProfileEditor/hooks/useProfileEditorReducer.ts @@ -1,10 +1,10 @@ import { useReducer } from 'react' -import { match, P } from 'ts-pattern' +import { match } from 'ts-pattern' import type { useResolverStatus } from '@app/hooks/resolver/useResolverStatus' import type { useProfile } from '@app/hooks/useProfile' -type View = +export type View = | 'loading' | 'migrateRegistry' | 'noResolver' @@ -13,10 +13,16 @@ type View = | 'upload' | 'nft' | 'addRecord' + | 'resolverOutOfDate' + | 'transferOrResetProfile' + | 'invalidResolver' type State = { - flow: View[] - currentIndex: number + stack: View[] +} + +type Dependencies = { + onDismiss?: () => void } type InitialData = { @@ -30,8 +36,7 @@ const initializer = (deps: any) => ({ profile, resolverStatus, isWrapped, isLoading }: InitialData): State => { const defaultState: State = { - flow: ['loading'], - currentIndex: 0, + stack: ['loading'] as const, } console.log('initializer', profile, resolverStatus, isLoading) @@ -47,15 +52,19 @@ const initializer = { profile: { isMigrated: false }, }, - () => ({ ...defaultState, flow: ['migrateRegistry'] }), + () => ({ ...defaultState, stack: ['migrateRegistry'] as View[] }), ) + .with({ resolverStatus: { isOutdatedResolver: true } }, () => ({ + ...defaultState, + stack: ['resolverOutOfDate'] as View[], + })) .with({ resolverStatus: { hasResolver: false } }, () => ({ ...defaultState, - flow: ['noResolver'], + stack: ['noResolver'] as View[], })) .with({ resolverStatus: { isNameWrapperAware: false }, isWrapped: true }, () => ({ ...defaultState, - flow: ['resolverNotNameWrapperAware'], + stack: ['resolverNotNameWrapperAware'] as View[], })) .with( { resolverStatus: { hasValidResolver: false } }, @@ -64,45 +73,44 @@ const initializer = }, () => ({ ...defaultState, - flow: ['invalidResolver'], + stack: ['invalidResolver'] as View[], }), ) .otherwise(() => ({ ...defaultState, - flow: ['editor'], + stack: ['editor'] as View[], })) } type BaseAction = { - type: 'init' | 'increment' | 'decrement' | 'appendViews' + type: 'init' | 'increment' | 'decrement' | 'pushView' | 'popView' payload?: unknown } type InitAction = BaseAction & { type: 'init'; payload: InitialData } -type IncrementAction = BaseAction & { type: 'increment'; payload: never } -type DecrementAction = BaseAction & { type: 'decrement'; payload: never } -type AppendViewsAction = BaseAction & { type: 'appendViews'; payload: View[] } +type IncrementAction = BaseAction & { type: 'pushView'; payload: View } +type DecrementAction = BaseAction & { type: 'popView'; payload?: never } -type Action = InitAction | IncrementAction | DecrementAction | AppendViewsAction +type Action = InitAction | IncrementAction | DecrementAction -const reducer = (deps: any) => (state: any, action: Action) => { +const reducer = (deps: Dependencies) => (state: any, action: Action) => { const { type, payload } = action switch (type) { case 'init': return initializer(deps)(payload) - case 'increment': - if (state.currentIndex >= state.flow.length - 1) return state - return { ...state, currentIndex: state.currentIndex + 1 } - case 'decrement': - if (state.currentIndex <= 0) return state - return { ...state, currentIndex: state.currentIndex - 1 } - case 'appendViews': - return { ...state, flow: [...state.flow, ...(payload as View[])] } + case 'pushView': + return { ...state, stack: [...state.stack, payload] } + case 'popView': { + const poopedStack = state.stack.slice(0, -1) + if (poopedStack.length > 0) return { ...state, stack: poopedStack } + deps.onDismiss?.() + return state + } default: return state } } -export const useProfileEditorReducer = (initialState: InitialData, deps: {}) => { +export const useProfileEditorReducer = (initialState: InitialData, deps: Dependencies) => { return useReducer(reducer(deps), initialState, initializer(deps)) } diff --git a/src/transaction-flow/input/ProfileEditor/views/ResolverOutOfDateView.tsx b/src/transaction-flow/input/ProfileEditor/views/ResolverOutOfDateView.tsx index 7a407f914..9f2491cba 100644 --- a/src/transaction-flow/input/ProfileEditor/views/ResolverOutOfDateView.tsx +++ b/src/transaction-flow/input/ProfileEditor/views/ResolverOutOfDateView.tsx @@ -28,12 +28,6 @@ export const ResolverOutOfDateView = ({ onConfirm, onCancel, onSkip }: Props) => {t('input.profileEditor.warningOverlay.action.learnMoreResolvers')} - void - onNext: () => void + onNext: (profile: SelectedProfile) => void onBack: () => void } -export const TransferOrResetProfileView = ({ - selected, - onChangeSelected, - onNext, - onBack, -}: Props) => { +export const TransferOrResetProfileView = ({ onNext, onBack }: Props) => { const { t } = useTranslation('transactionFlow') + const [selected, setSelected] = useState('latest') + return ( <> onChangeSelected(e.currentTarget.checked ? 'latest' : 'reset')} + onChange={(e) => setSelected(e.currentTarget.checked ? 'latest' : 'reset')} /> } trailing={ - }