UNPKG

@ensnode/datasources

Version:

Catalog of ENSNode-related datasources including chain, contract addresses, start blocks, and event filters.

1,045 lines (1,043 loc) • 3.48 MB
import * as viem_experimental from 'viem/experimental'; import * as viem_chains from 'viem/chains'; import * as viem from 'viem'; import { Chain, Abi, Address } from 'viem'; /** * ENSNamespaceIds encodes the set of identifiers for well-known ENS namespaces. * * Each ENS namespace is a single, unified set of ENS names with a distinct onchain root * Registry (the ensroot Datasource) and the capability of spanning from that root Registry across * other `Datasource`s that may be distributed across multiple chains and offchain resources. * * For example, as of 9-Feb-2025 the canonical ENS namespace on mainnet includes: * - A root Registry on mainnet. * - An onchain Registrar for direct subnames of 'eth' on mainnet. * - An onchain Registry and Registrar for direct subnames of 'base.eth' on Base. * - An onchain Registry and Registrar subregistry for direct subnames of 'linea.eth' on Linea. * - An offchain subregistry for subnames of '.cb.id'. * - An offchain subregistry for subnames of '.uni.eth'. * - Etc.. * * Each ENS namespace is logically independent of & isolated from the others, and not exclusively * correlated with a specific L1 chain. For example, the Sepolia and Holesky testnet ENS namepaces * are independent of the canonical ENS namespace on mainnet, and there could be an additional * deployment of the ENS protocol to mainnet, configured with different Datasources, resulting in a * logically isolated set of ENS names. * * 'ens-test-env' represents an ENS namespace running on a local Anvil chain for testing * protocol changes, running deterministic test suites, and local development. * https://github.com/ensdomains/ens-test-env */ declare const ENSNamespaceIds: { readonly Mainnet: "mainnet"; readonly Sepolia: "sepolia"; readonly Holesky: "holesky"; readonly EnsTestEnv: "ens-test-env"; }; /** * ENSNamespaceId is the derived string union of possible ENS namespace identifiers. */ type ENSNamespaceId = (typeof ENSNamespaceIds)[keyof typeof ENSNamespaceIds]; /** * A Datasource describes a set of contracts on a given chain that interact with the ENS protocol. */ interface Datasource { chain: Chain; contracts: Record<string, ContractConfig>; } /** * DatasourceNames encodes a unique id for each known Datasource. */ declare const DatasourceNames: { readonly ENSRoot: "ensroot"; readonly Basenames: "basenames"; readonly Lineanames: "lineanames"; readonly ThreeDNSOptimism: "threedns-optimism"; readonly ThreeDNSBase: "threedns-base"; }; type DatasourceName = (typeof DatasourceNames)[keyof typeof DatasourceNames]; /** * EventFilter specifies a given event's name and arguments to filter that event by. * This type is intentionally a subset of Ponder's `ContractConfig['filter']`. */ interface EventFilter { event: string; args: Record<string, unknown>; } /** * Defines the abi, address, filter, and startBlock of a contract relevant to a Datasource. * A contract is located onchain either by a static `address` or the event signatures (`filter`) * one should filter the chain for. This type is intentionally a subset of Ponder's ContractConfig. * * @param abi - the ABI of the contract * @param address - (optional) address of the contract * @param filter - (optional) array of event signatures to filter the log by * @param startBlock - block number the contract was deployed in */ type ContractConfig = { readonly abi: Abi; readonly address: Address; readonly filter?: never; readonly startBlock: number; } | { readonly abi: Abi; readonly address?: never; readonly filter: EventFilter[]; readonly startBlock: number; }; /** * ENSNamespace encodes a set of known Datasources associated with the same ENS namespace. * * The ENSRoot Datasource is required (this formally defines an ENS namespace). All other Datasources * within the ENSNamespace are optional. */ type ENSNamespace = { [DatasourceNames.ENSRoot]: Datasource; } & Partial<Record<Exclude<DatasourceName, "ensroot">, Datasource>>; declare const ENSNamespacesById: { readonly mainnet: { ensroot: { chain: { blockExplorers: { readonly default: { readonly name: "Etherscan"; readonly url: "https://etherscan.io"; readonly apiUrl: "https://api.etherscan.io/api"; }; }; contracts: { readonly ensRegistry: { readonly address: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"; }; readonly ensUniversalResolver: { readonly address: "0xce01f8eee7E479C928F8919abD53E553a36CeF67"; readonly blockCreated: 19258213; }; readonly multicall3: { readonly address: "0xca11bde05977b3631167028862be2a173976ca11"; readonly blockCreated: 14353601; }; }; id: 1; name: "Ethereum"; nativeCurrency: { readonly name: "Ether"; readonly symbol: "ETH"; readonly decimals: 18; }; rpcUrls: { readonly default: { readonly http: readonly ["https://eth.merkle.io"]; }; }; sourceId?: number | undefined; testnet?: boolean | undefined; custom?: Record<string, unknown> | undefined; fees?: viem.ChainFees<undefined> | undefined; formatters?: undefined; serializers?: viem.ChainSerializers<undefined, viem.TransactionSerializable> | undefined; }; contracts: { RegistryOld: { abi: readonly [{ readonly inputs: readonly [{ readonly internalType: "contract ENS"; readonly name: "_old"; readonly type: "address"; }]; readonly payable: false; readonly stateMutability: "nonpayable"; readonly type: "constructor"; }, { readonly anonymous: false; readonly inputs: readonly [{ readonly indexed: true; readonly internalType: "address"; readonly name: "owner"; readonly type: "address"; }, { readonly indexed: true; readonly internalType: "address"; readonly name: "operator"; readonly type: "address"; }, { readonly indexed: false; readonly internalType: "bool"; readonly name: "approved"; readonly type: "bool"; }]; readonly name: "ApprovalForAll"; readonly type: "event"; }, { readonly anonymous: false; readonly inputs: readonly [{ readonly indexed: true; readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly indexed: true; readonly internalType: "bytes32"; readonly name: "label"; readonly type: "bytes32"; }, { readonly indexed: false; readonly internalType: "address"; readonly name: "owner"; readonly type: "address"; }]; readonly name: "NewOwner"; readonly type: "event"; }, { readonly anonymous: false; readonly inputs: readonly [{ readonly indexed: true; readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly indexed: false; readonly internalType: "address"; readonly name: "resolver"; readonly type: "address"; }]; readonly name: "NewResolver"; readonly type: "event"; }, { readonly anonymous: false; readonly inputs: readonly [{ readonly indexed: true; readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly indexed: false; readonly internalType: "uint64"; readonly name: "ttl"; readonly type: "uint64"; }]; readonly name: "NewTTL"; readonly type: "event"; }, { readonly anonymous: false; readonly inputs: readonly [{ readonly indexed: true; readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly indexed: false; readonly internalType: "address"; readonly name: "owner"; readonly type: "address"; }]; readonly name: "Transfer"; readonly type: "event"; }, { readonly constant: true; readonly inputs: readonly [{ readonly internalType: "address"; readonly name: "owner"; readonly type: "address"; }, { readonly internalType: "address"; readonly name: "operator"; readonly type: "address"; }]; readonly name: "isApprovedForAll"; readonly outputs: readonly [{ readonly internalType: "bool"; readonly name: ""; readonly type: "bool"; }]; readonly payable: false; readonly stateMutability: "view"; readonly type: "function"; }, { readonly constant: true; readonly inputs: readonly []; readonly name: "old"; readonly outputs: readonly [{ readonly internalType: "contract ENS"; readonly name: ""; readonly type: "address"; }]; readonly payable: false; readonly stateMutability: "view"; readonly type: "function"; }, { readonly constant: true; readonly inputs: readonly [{ readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }]; readonly name: "owner"; readonly outputs: readonly [{ readonly internalType: "address"; readonly name: ""; readonly type: "address"; }]; readonly payable: false; readonly stateMutability: "view"; readonly type: "function"; }, { readonly constant: true; readonly inputs: readonly [{ readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }]; readonly name: "recordExists"; readonly outputs: readonly [{ readonly internalType: "bool"; readonly name: ""; readonly type: "bool"; }]; readonly payable: false; readonly stateMutability: "view"; readonly type: "function"; }, { readonly constant: true; readonly inputs: readonly [{ readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }]; readonly name: "resolver"; readonly outputs: readonly [{ readonly internalType: "address"; readonly name: ""; readonly type: "address"; }]; readonly payable: false; readonly stateMutability: "view"; readonly type: "function"; }, { readonly constant: false; readonly inputs: readonly [{ readonly internalType: "address"; readonly name: "operator"; readonly type: "address"; }, { readonly internalType: "bool"; readonly name: "approved"; readonly type: "bool"; }]; readonly name: "setApprovalForAll"; readonly outputs: readonly []; readonly payable: false; readonly stateMutability: "nonpayable"; readonly type: "function"; }, { readonly constant: false; readonly inputs: readonly [{ readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly internalType: "address"; readonly name: "owner"; readonly type: "address"; }]; readonly name: "setOwner"; readonly outputs: readonly []; readonly payable: false; readonly stateMutability: "nonpayable"; readonly type: "function"; }, { readonly constant: false; readonly inputs: readonly [{ readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly internalType: "address"; readonly name: "owner"; readonly type: "address"; }, { readonly internalType: "address"; readonly name: "resolver"; readonly type: "address"; }, { readonly internalType: "uint64"; readonly name: "ttl"; readonly type: "uint64"; }]; readonly name: "setRecord"; readonly outputs: readonly []; readonly payable: false; readonly stateMutability: "nonpayable"; readonly type: "function"; }, { readonly constant: false; readonly inputs: readonly [{ readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly internalType: "address"; readonly name: "resolver"; readonly type: "address"; }]; readonly name: "setResolver"; readonly outputs: readonly []; readonly payable: false; readonly stateMutability: "nonpayable"; readonly type: "function"; }, { readonly constant: false; readonly inputs: readonly [{ readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly internalType: "bytes32"; readonly name: "label"; readonly type: "bytes32"; }, { readonly internalType: "address"; readonly name: "owner"; readonly type: "address"; }]; readonly name: "setSubnodeOwner"; readonly outputs: readonly [{ readonly internalType: "bytes32"; readonly name: ""; readonly type: "bytes32"; }]; readonly payable: false; readonly stateMutability: "nonpayable"; readonly type: "function"; }, { readonly constant: false; readonly inputs: readonly [{ readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly internalType: "bytes32"; readonly name: "label"; readonly type: "bytes32"; }, { readonly internalType: "address"; readonly name: "owner"; readonly type: "address"; }, { readonly internalType: "address"; readonly name: "resolver"; readonly type: "address"; }, { readonly internalType: "uint64"; readonly name: "ttl"; readonly type: "uint64"; }]; readonly name: "setSubnodeRecord"; readonly outputs: readonly []; readonly payable: false; readonly stateMutability: "nonpayable"; readonly type: "function"; }, { readonly constant: false; readonly inputs: readonly [{ readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly internalType: "uint64"; readonly name: "ttl"; readonly type: "uint64"; }]; readonly name: "setTTL"; readonly outputs: readonly []; readonly payable: false; readonly stateMutability: "nonpayable"; readonly type: "function"; }, { readonly constant: true; readonly inputs: readonly [{ readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }]; readonly name: "ttl"; readonly outputs: readonly [{ readonly internalType: "uint64"; readonly name: ""; readonly type: "uint64"; }]; readonly payable: false; readonly stateMutability: "view"; readonly type: "function"; }]; address: "0x314159265dd8dbb310642f98f50c066173c1259b"; startBlock: number; }; Registry: { abi: readonly [{ readonly inputs: readonly [{ readonly internalType: "contract ENS"; readonly name: "_old"; readonly type: "address"; }]; readonly payable: false; readonly stateMutability: "nonpayable"; readonly type: "constructor"; }, { readonly anonymous: false; readonly inputs: readonly [{ readonly indexed: true; readonly internalType: "address"; readonly name: "owner"; readonly type: "address"; }, { readonly indexed: true; readonly internalType: "address"; readonly name: "operator"; readonly type: "address"; }, { readonly indexed: false; readonly internalType: "bool"; readonly name: "approved"; readonly type: "bool"; }]; readonly name: "ApprovalForAll"; readonly type: "event"; }, { readonly anonymous: false; readonly inputs: readonly [{ readonly indexed: true; readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly indexed: true; readonly internalType: "bytes32"; readonly name: "label"; readonly type: "bytes32"; }, { readonly indexed: false; readonly internalType: "address"; readonly name: "owner"; readonly type: "address"; }]; readonly name: "NewOwner"; readonly type: "event"; }, { readonly anonymous: false; readonly inputs: readonly [{ readonly indexed: true; readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly indexed: false; readonly internalType: "address"; readonly name: "resolver"; readonly type: "address"; }]; readonly name: "NewResolver"; readonly type: "event"; }, { readonly anonymous: false; readonly inputs: readonly [{ readonly indexed: true; readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly indexed: false; readonly internalType: "uint64"; readonly name: "ttl"; readonly type: "uint64"; }]; readonly name: "NewTTL"; readonly type: "event"; }, { readonly anonymous: false; readonly inputs: readonly [{ readonly indexed: true; readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly indexed: false; readonly internalType: "address"; readonly name: "owner"; readonly type: "address"; }]; readonly name: "Transfer"; readonly type: "event"; }, { readonly constant: true; readonly inputs: readonly [{ readonly internalType: "address"; readonly name: "owner"; readonly type: "address"; }, { readonly internalType: "address"; readonly name: "operator"; readonly type: "address"; }]; readonly name: "isApprovedForAll"; readonly outputs: readonly [{ readonly internalType: "bool"; readonly name: ""; readonly type: "bool"; }]; readonly payable: false; readonly stateMutability: "view"; readonly type: "function"; }, { readonly constant: true; readonly inputs: readonly []; readonly name: "old"; readonly outputs: readonly [{ readonly internalType: "contract ENS"; readonly name: ""; readonly type: "address"; }]; readonly payable: false; readonly stateMutability: "view"; readonly type: "function"; }, { readonly constant: true; readonly inputs: readonly [{ readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }]; readonly name: "owner"; readonly outputs: readonly [{ readonly internalType: "address"; readonly name: ""; readonly type: "address"; }]; readonly payable: false; readonly stateMutability: "view"; readonly type: "function"; }, { readonly constant: true; readonly inputs: readonly [{ readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }]; readonly name: "recordExists"; readonly outputs: readonly [{ readonly internalType: "bool"; readonly name: ""; readonly type: "bool"; }]; readonly payable: false; readonly stateMutability: "view"; readonly type: "function"; }, { readonly constant: true; readonly inputs: readonly [{ readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }]; readonly name: "resolver"; readonly outputs: readonly [{ readonly internalType: "address"; readonly name: ""; readonly type: "address"; }]; readonly payable: false; readonly stateMutability: "view"; readonly type: "function"; }, { readonly constant: false; readonly inputs: readonly [{ readonly internalType: "address"; readonly name: "operator"; readonly type: "address"; }, { readonly internalType: "bool"; readonly name: "approved"; readonly type: "bool"; }]; readonly name: "setApprovalForAll"; readonly outputs: readonly []; readonly payable: false; readonly stateMutability: "nonpayable"; readonly type: "function"; }, { readonly constant: false; readonly inputs: readonly [{ readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly internalType: "address"; readonly name: "owner"; readonly type: "address"; }]; readonly name: "setOwner"; readonly outputs: readonly []; readonly payable: false; readonly stateMutability: "nonpayable"; readonly type: "function"; }, { readonly constant: false; readonly inputs: readonly [{ readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly internalType: "address"; readonly name: "owner"; readonly type: "address"; }, { readonly internalType: "address"; readonly name: "resolver"; readonly type: "address"; }, { readonly internalType: "uint64"; readonly name: "ttl"; readonly type: "uint64"; }]; readonly name: "setRecord"; readonly outputs: readonly []; readonly payable: false; readonly stateMutability: "nonpayable"; readonly type: "function"; }, { readonly constant: false; readonly inputs: readonly [{ readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly internalType: "address"; readonly name: "resolver"; readonly type: "address"; }]; readonly name: "setResolver"; readonly outputs: readonly []; readonly payable: false; readonly stateMutability: "nonpayable"; readonly type: "function"; }, { readonly constant: false; readonly inputs: readonly [{ readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly internalType: "bytes32"; readonly name: "label"; readonly type: "bytes32"; }, { readonly internalType: "address"; readonly name: "owner"; readonly type: "address"; }]; readonly name: "setSubnodeOwner"; readonly outputs: readonly [{ readonly internalType: "bytes32"; readonly name: ""; readonly type: "bytes32"; }]; readonly payable: false; readonly stateMutability: "nonpayable"; readonly type: "function"; }, { readonly constant: false; readonly inputs: readonly [{ readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly internalType: "bytes32"; readonly name: "label"; readonly type: "bytes32"; }, { readonly internalType: "address"; readonly name: "owner"; readonly type: "address"; }, { readonly internalType: "address"; readonly name: "resolver"; readonly type: "address"; }, { readonly internalType: "uint64"; readonly name: "ttl"; readonly type: "uint64"; }]; readonly name: "setSubnodeRecord"; readonly outputs: readonly []; readonly payable: false; readonly stateMutability: "nonpayable"; readonly type: "function"; }, { readonly constant: false; readonly inputs: readonly [{ readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly internalType: "uint64"; readonly name: "ttl"; readonly type: "uint64"; }]; readonly name: "setTTL"; readonly outputs: readonly []; readonly payable: false; readonly stateMutability: "nonpayable"; readonly type: "function"; }, { readonly constant: true; readonly inputs: readonly [{ readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }]; readonly name: "ttl"; readonly outputs: readonly [{ readonly internalType: "uint64"; readonly name: ""; readonly type: "uint64"; }]; readonly payable: false; readonly stateMutability: "view"; readonly type: "function"; }]; address: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"; startBlock: number; }; Resolver: { startBlock: number; abi: readonly [{ readonly anonymous: false; readonly inputs: readonly [{ readonly indexed: true; readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly indexed: true; readonly internalType: "uint256"; readonly name: "contentType"; readonly type: "uint256"; }]; readonly name: "ABIChanged"; readonly type: "event"; }, { readonly anonymous: false; readonly inputs: readonly [{ readonly indexed: true; readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly indexed: false; readonly internalType: "address"; readonly name: "a"; readonly type: "address"; }]; readonly name: "AddrChanged"; readonly type: "event"; }, { readonly anonymous: false; readonly inputs: readonly [{ readonly indexed: true; readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly indexed: false; readonly internalType: "uint256"; readonly name: "coinType"; readonly type: "uint256"; }, { readonly indexed: false; readonly internalType: "bytes"; readonly name: "newAddress"; readonly type: "bytes"; }]; readonly name: "AddressChanged"; readonly type: "event"; }, { readonly anonymous: false; readonly inputs: readonly [{ readonly indexed: true; readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly indexed: true; readonly internalType: "address"; readonly name: "owner"; readonly type: "address"; }, { readonly indexed: true; readonly internalType: "address"; readonly name: "target"; readonly type: "address"; }, { readonly indexed: false; readonly internalType: "bool"; readonly name: "isAuthorised"; readonly type: "bool"; }]; readonly name: "AuthorisationChanged"; readonly type: "event"; }, { readonly anonymous: false; readonly inputs: readonly [{ readonly indexed: true; readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly indexed: false; readonly internalType: "bytes"; readonly name: "hash"; readonly type: "bytes"; }]; readonly name: "ContenthashChanged"; readonly type: "event"; }, { readonly anonymous: false; readonly inputs: readonly [{ readonly indexed: true; readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly indexed: false; readonly internalType: "bytes"; readonly name: "name"; readonly type: "bytes"; }, { readonly indexed: false; readonly internalType: "uint16"; readonly name: "resource"; readonly type: "uint16"; }, { readonly indexed: false; readonly internalType: "bytes"; readonly name: "record"; readonly type: "bytes"; }]; readonly name: "DNSRecordChanged"; readonly type: "event"; }, { readonly anonymous: false; readonly inputs: readonly [{ readonly indexed: true; readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly indexed: false; readonly internalType: "bytes"; readonly name: "name"; readonly type: "bytes"; }, { readonly indexed: false; readonly internalType: "uint16"; readonly name: "resource"; readonly type: "uint16"; }]; readonly name: "DNSRecordDeleted"; readonly type: "event"; }, { readonly anonymous: false; readonly inputs: readonly [{ readonly indexed: true; readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }]; readonly name: "DNSZoneCleared"; readonly type: "event"; }, { readonly anonymous: false; readonly inputs: readonly [{ readonly indexed: true; readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly indexed: true; readonly internalType: "bytes4"; readonly name: "interfaceID"; readonly type: "bytes4"; }, { readonly indexed: false; readonly internalType: "address"; readonly name: "implementer"; readonly type: "address"; }]; readonly name: "InterfaceChanged"; readonly type: "event"; }, { readonly anonymous: false; readonly inputs: readonly [{ readonly indexed: true; readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly indexed: false; readonly internalType: "string"; readonly name: "name"; readonly type: "string"; }]; readonly name: "NameChanged"; readonly type: "event"; }, { readonly anonymous: false; readonly inputs: readonly [{ readonly indexed: true; readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly indexed: false; readonly internalType: "bytes32"; readonly name: "x"; readonly type: "bytes32"; }, { readonly indexed: false; readonly internalType: "bytes32"; readonly name: "y"; readonly type: "bytes32"; }]; readonly name: "PubkeyChanged"; readonly type: "event"; }, { readonly anonymous: false; readonly inputs: readonly [{ readonly indexed: true; readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly indexed: true; readonly internalType: "string"; readonly name: "indexedKey"; readonly type: "string"; }, { readonly indexed: false; readonly internalType: "string"; readonly name: "key"; readonly type: "string"; }]; readonly name: "TextChanged"; readonly type: "event"; }, { readonly constant: true; readonly inputs: readonly [{ readonly internalType: "bytes32"; readonly name: "node"; readonly type: "bytes32"; }, { readonly internalType: "uint256"; readonly name: "contentTypes"; readonly type: "uint256"; }]