Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been partially verified via Sourcify.
View contract in Sourcify repository
- Contract name:
- FIFSResolvingRegistrar
- Optimization enabled
- true
- Compiler version
- v0.4.24+commit.e67f0147
- Optimization runs
- 10000
- EVM Version
- byzantium
- Verified at
- 2026-03-24T20:58:03.941468Z
Constructor Arguments
000000000000000000000000314159265dd8dbb310642f98f50c066173c1259b0000000000000000000000001da022710df5002339274aadee8d58218e9d6ab57e74a86b6e146964fb965db04dc2590516da77f720bb6759337bf5632415fd86
Arg [0] (address) : 0x314159265dd8dbb310642f98f50c066173c1259b
Arg [1] (address) : 0x1da022710df5002339274aadee8d58218e9d6ab5
Arg [2] (bytes32) : 7e74a86b6e146964fb965db04dc2590516da77f720bb6759337bf5632415fd86
FIFSResolvingRegistrar.sol
pragma solidity 0.4.24;
// File: @aragon/os/contracts/lib/ens/AbstractENS.sol
interface AbstractENS {
function owner(bytes32 _node) public constant returns (address);
function resolver(bytes32 _node) public constant returns (address);
function ttl(bytes32 _node) public constant returns (uint64);
function setOwner(bytes32 _node, address _owner) public;
function setSubnodeOwner(bytes32 _node, bytes32 label, address _owner) public;
function setResolver(bytes32 _node, address _resolver) public;
function setTTL(bytes32 _node, uint64 _ttl) public;
// 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);
}
// File: contracts/ens/IPublicResolver.sol
interface IPublicResolver {
function supportsInterface(bytes4 interfaceID) constant returns (bool);
function addr(bytes32 node) constant returns (address ret);
function setAddr(bytes32 node, address addr);
function hash(bytes32 node) constant returns (bytes32 ret);
function setHash(bytes32 node, bytes32 hash);
}
// File: contracts/IFIFSResolvingRegistrar.sol
interface IFIFSResolvingRegistrar {
function register(bytes32 _subnode, address _owner) external;
function registerWithResolver(bytes32 _subnode, address _owner, IPublicResolver _resolver) public;
}
// File: contracts/FIFSResolvingRegistrar.sol
/**
* A registrar that allocates subdomains and sets resolvers to the first person to claim them.
*
* Adapted from ENS' FIFSRegistrar:
* https://github.com/ethereum/ens/blob/master/contracts/FIFSRegistrar.sol
*/
contract FIFSResolvingRegistrar is IFIFSResolvingRegistrar {
bytes32 public rootNode;
AbstractENS internal ens;
IPublicResolver internal defaultResolver;
bytes4 private constant ADDR_INTERFACE_ID = 0x3b3b57de;
event ClaimSubdomain(bytes32 indexed subnode, address indexed owner, address indexed resolver);
/**
* Constructor.
* @param _ensAddr The address of the ENS registry.
* @param _defaultResolver The address of the default resolver to use for subdomains.
* @param _node The node that this registrar administers.
*/
constructor(AbstractENS _ensAddr, IPublicResolver _defaultResolver, bytes32 _node)
public
{
ens = _ensAddr;
defaultResolver = _defaultResolver;
rootNode = _node;
}
/**
* Register a subdomain with the default resolver if it hasn't been claimed yet.
* @param _subnode The hash of the label to register.
* @param _owner The address of the new owner.
*/
function register(bytes32 _subnode, address _owner) external {
registerWithResolver(_subnode, _owner, defaultResolver);
}
/**
* Register a subdomain if it hasn't been claimed yet.
* @param _subnode The hash of the label to register.
* @param _owner The address of the new owner.
* @param _resolver The address of the resolver.
* If the resolver supports the address interface, the subdomain's address will
* be set to the new owner.
*/
function registerWithResolver(bytes32 _subnode, address _owner, IPublicResolver _resolver) public {
bytes32 node = keccak256(rootNode, _subnode);
address currentOwner = ens.owner(node);
require(currentOwner == address(0));
ens.setSubnodeOwner(rootNode, _subnode, address(this));
ens.setResolver(node, _resolver);
if (_resolver.supportsInterface(ADDR_INTERFACE_ID)) {
_resolver.setAddr(node, _owner);
}
// Give ownership to the claimer
ens.setOwner(node, _owner);
emit ClaimSubdomain(_subnode, _owner, address(_resolver));
}
}
Compiler Settings
{"remappings":[],"optimizer":{"runs":10000,"enabled":true},"libraries":{},"evmVersion":"byzantium","compilationTarget":{"FIFSResolvingRegistrar.sol":"FIFSResolvingRegistrar"}}
Contract ABI
[{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"register","inputs":[{"type":"bytes32","name":"_subnode"},{"type":"address","name":"_owner"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"registerWithResolver","inputs":[{"type":"bytes32","name":"_subnode"},{"type":"address","name":"_owner"},{"type":"address","name":"_resolver"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bytes32","name":""}],"name":"rootNode","inputs":[],"constant":true},{"type":"constructor","stateMutability":"nonpayable","payable":false,"inputs":[{"type":"address","name":"_ensAddr"},{"type":"address","name":"_defaultResolver"},{"type":"bytes32","name":"_node"}]},{"type":"event","name":"ClaimSubdomain","inputs":[{"type":"bytes32","name":"subnode","indexed":true},{"type":"address","name":"owner","indexed":true},{"type":"address","name":"resolver","indexed":true}],"anonymous":false}]
Contract Creation Code
0x608060405234801561001057600080fd5b506040516060806105ef83398101604090815281516020830151919092015160018054600160a060020a03948516600160a060020a0319918216179091556002805494909316931692909217905560005561057f806100706000396000f3006080604052600436106100565763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663d22057a9811461005b578063f858fc0b1461008e578063faff50a8146100c5575b600080fd5b34801561006757600080fd5b5061008c60043573ffffffffffffffffffffffffffffffffffffffff602435166100ec565b005b34801561009a57600080fd5b5061008c60043573ffffffffffffffffffffffffffffffffffffffff60243581169060443516610116565b3480156100d157600080fd5b506100da61054d565b60408051918252519081900360200190f35b600254610112908390839073ffffffffffffffffffffffffffffffffffffffff16610116565b5050565b60008054604080519182526020808301879052815192839003820183206001547f02571be300000000000000000000000000000000000000000000000000000000855260048501829052925190949373ffffffffffffffffffffffffffffffffffffffff909316926302571be392602480830193919282900301818787803b1580156101a157600080fd5b505af11580156101b5573d6000803e3d6000fd5b505050506040513d60208110156101cb57600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff8116156101f057600080fd5b60015460008054604080517f06ab59230000000000000000000000000000000000000000000000000000000081526004810192909252602482018990523060448301525173ffffffffffffffffffffffffffffffffffffffff909316926306ab59239260648084019391929182900301818387803b15801561027157600080fd5b505af1158015610285573d6000803e3d6000fd5b5050600154604080517f1896f70a0000000000000000000000000000000000000000000000000000000081526004810187905273ffffffffffffffffffffffffffffffffffffffff88811660248301529151919092169350631896f70a9250604480830192600092919082900301818387803b15801561030457600080fd5b505af1158015610318573d6000803e3d6000fd5b5050604080517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f3b3b57de000000000000000000000000000000000000000000000000000000006004820152905173ffffffffffffffffffffffffffffffffffffffff871693506301ffc9a7925060248083019260209291908290030181600087803b1580156103aa57600080fd5b505af11580156103be573d6000803e3d6000fd5b505050506040513d60208110156103d457600080fd5b50511561046c57604080517fd5fa2b000000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff868116602483015291519185169163d5fa2b009160448082019260009290919082900301818387803b15801561045357600080fd5b505af1158015610467573d6000803e3d6000fd5b505050505b600154604080517f5b0fc9c30000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff878116602483015291519190921691635b0fc9c391604480830192600092919082900301818387803b1580156104e757600080fd5b505af11580156104fb573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff80871693508716915087907fe27a5a369e0d2c5056ccfcbd5f83f145f43350142d42aaf46ff9a9e461d543df90600090a45050505050565b600054815600a165627a7a72305820da3d38c402030065d00aa15705c0a8d49a9d9f81cf46eea2624885aac4a19b3e0029000000000000000000000000314159265dd8dbb310642f98f50c066173c1259b0000000000000000000000001da022710df5002339274aadee8d58218e9d6ab57e74a86b6e146964fb965db04dc2590516da77f720bb6759337bf5632415fd86
Deployed ByteCode
0x6080604052600436106100565763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663d22057a9811461005b578063f858fc0b1461008e578063faff50a8146100c5575b600080fd5b34801561006757600080fd5b5061008c60043573ffffffffffffffffffffffffffffffffffffffff602435166100ec565b005b34801561009a57600080fd5b5061008c60043573ffffffffffffffffffffffffffffffffffffffff60243581169060443516610116565b3480156100d157600080fd5b506100da61054d565b60408051918252519081900360200190f35b600254610112908390839073ffffffffffffffffffffffffffffffffffffffff16610116565b5050565b60008054604080519182526020808301879052815192839003820183206001547f02571be300000000000000000000000000000000000000000000000000000000855260048501829052925190949373ffffffffffffffffffffffffffffffffffffffff909316926302571be392602480830193919282900301818787803b1580156101a157600080fd5b505af11580156101b5573d6000803e3d6000fd5b505050506040513d60208110156101cb57600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff8116156101f057600080fd5b60015460008054604080517f06ab59230000000000000000000000000000000000000000000000000000000081526004810192909252602482018990523060448301525173ffffffffffffffffffffffffffffffffffffffff909316926306ab59239260648084019391929182900301818387803b15801561027157600080fd5b505af1158015610285573d6000803e3d6000fd5b5050600154604080517f1896f70a0000000000000000000000000000000000000000000000000000000081526004810187905273ffffffffffffffffffffffffffffffffffffffff88811660248301529151919092169350631896f70a9250604480830192600092919082900301818387803b15801561030457600080fd5b505af1158015610318573d6000803e3d6000fd5b5050604080517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f3b3b57de000000000000000000000000000000000000000000000000000000006004820152905173ffffffffffffffffffffffffffffffffffffffff871693506301ffc9a7925060248083019260209291908290030181600087803b1580156103aa57600080fd5b505af11580156103be573d6000803e3d6000fd5b505050506040513d60208110156103d457600080fd5b50511561046c57604080517fd5fa2b000000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff868116602483015291519185169163d5fa2b009160448082019260009290919082900301818387803b15801561045357600080fd5b505af1158015610467573d6000803e3d6000fd5b505050505b600154604080517f5b0fc9c30000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff878116602483015291519190921691635b0fc9c391604480830192600092919082900301818387803b1580156104e757600080fd5b505af11580156104fb573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff80871693508716915087907fe27a5a369e0d2c5056ccfcbd5f83f145f43350142d42aaf46ff9a9e461d543df90600090a45050505050565b600054815600a165627a7a72305820da3d38c402030065d00aa15705c0a8d49a9d9f81cf46eea2624885aac4a19b3e0029