// File: @ensdomains/ens-contracts/contracts/registry/ENS.sol
pragma solidity >=0.8.4;
interface ENS {
// Logged when the owner of a node assigns a new owner to a subnode.
event NewOwner(bytes32 indexed node, bytes32 indexed label, address owner);
// Logged when the owner of a node transfers ownership to a new account.
event Transfer(bytes32 indexed node, address owner);
// Logged when the resolver for a node changes.
event NewResolver(bytes32 indexed node, address resolver);
// Logged when the TTL of a node changes
event NewTTL(bytes32 indexed node, uint64 ttl);
// Logged when an operator is added or removed.
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
function setRecord(bytes32 node, address owner, address resolver, uint64 ttl) external virtual;
function setSubnodeRecord(bytes32 node, bytes32 label, address owner, address resolver, uint64 ttl) external virtual;
function setSubnodeOwner(bytes32 node, bytes32 label, address owner) external virtual returns(bytes32);
function setResolver(bytes32 node, address resolver) external virtual;
function setOwner(bytes32 node, address owner) external virtual;
function setTTL(bytes32 node, uint64 ttl) external virtual;
function setApprovalForAll(address operator, bool approved) external virtual;
function owner(bytes32 node) external virtual view returns (address);
function resolver(bytes32 node) external virtual view returns (address);
function ttl(bytes32 node) external virtual view returns (uint64);
function recordExists(bytes32 node) external virtual view returns (bool);
function isApprovedForAll(address owner, address operator) external virtual view returns (bool);
}
// File: contracts/roles/DomainNotifier.sol
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.6;
/**
* DomainNotifier is used as a central point from which to
* determine which ENS domains (namespaces) have had their
* resolved data updated
*/
contract DomainNotifier {
event DomainUpdated(bytes32 indexed node);
ENS _ens;
constructor(ENS ens) {
_ens = ens;
}
/**
* Notifies of a domain/namespace's resolver data update.
* Only the resolver that is set for a given node should
* be able to trigger the notification
*/
function domainUpdated(bytes32 node) external {
address resolver = _ens.resolver(node);
require(resolver == msg.sender);
emit DomainUpdated(node);
}
}