use new ens contractname + safety check in register + update auth

This commit is contained in:
Ricardo Guilherme Schmidt 2018-05-01 11:58:05 -03:00 committed by Barry Gitarts
parent c0e34300ed
commit eca2ecefca
1 changed files with 26 additions and 24 deletions

View File

@ -2,8 +2,8 @@ pragma solidity ^0.4.23;
import "../common/Controlled.sol"; import "../common/Controlled.sol";
import "../token/ERC20Token.sol"; import "../token/ERC20Token.sol";
import "../ens/AbstractENS.sol"; import "../ens/ENS.sol";
import "../ens/PublicResolverInterface.sol"; import "../ens/ResolverInterface.sol";
contract SubdomainRegistry is Controlled { contract SubdomainRegistry is Controlled {
@ -18,8 +18,8 @@ contract SubdomainRegistry is Controlled {
mapping (bytes32 => address) public taken; mapping (bytes32 => address) public taken;
ERC20Token public token; ERC20Token public token;
AbstractENS public ENSroot; ENS public ens;
PublicResolverInterface public resolver; ResolverInterface public resolver;
event Registered(bytes32 indexed _subDomainHash, address _identity); event Registered(bytes32 indexed _subDomainHash, address _identity);
@ -32,8 +32,8 @@ contract SubdomainRegistry is Controlled {
{ {
initialize( initialize(
ERC20Token(_token), ERC20Token(_token),
AbstractENS(_ens), ENS(_ens),
PublicResolverInterface(_resolver), ResolverInterface(_resolver),
address(msg.sender) address(msg.sender)
); );
} }
@ -48,6 +48,17 @@ contract SubdomainRegistry is Controlled {
Domain memory domain = domains[_domainHash]; Domain memory domain = domains[_domainHash];
require(domain.active); require(domain.active);
subdomainHash = keccak256(_userHash, _domainHash);
require(taken[subdomainHash] == address(0));
taken[subdomainHash] = address(msg.sender);
address currentOwner = ens.owner(subdomainHash);
require(currentOwner == 0 || currentOwner == msg.sender);
ens.setSubnodeOwner(_domainHash, _userHash, address(this));
ens.setResolver(subdomainHash, resolver);
resolver.setAddr(subdomainHash, address(msg.sender));
require( require(
token.transferFrom( token.transferFrom(
@ -57,14 +68,6 @@ contract SubdomainRegistry is Controlled {
) )
); );
subdomainHash = keccak256(_userHash, _domainHash);
require(taken[subdomainHash] == address(0));
taken[subdomainHash] = address(msg.sender);
ENSroot.setSubnodeOwner(_domainHash, _userHash, address(this));
ENSroot.setResolver(subdomainHash, resolver);
resolver.setAddr(subdomainHash, address(msg.sender));
emit Registered(subdomainHash, address(msg.sender)); emit Registered(subdomainHash, address(msg.sender));
} }
@ -78,8 +81,7 @@ contract SubdomainRegistry is Controlled {
msg.sender == taken[_subdomainHash] || msg.sender == taken[_subdomainHash] ||
msg.sender == controller msg.sender == controller
); );
require(PublicResolverInterface(resolver).addr(_subdomainHash) == msg.sender); ResolverInterface(resolver).setAddr(_subdomainHash, _newContract);
PublicResolverInterface(resolver).setAddr(_subdomainHash, _newContract);
} }
function addDomain( function addDomain(
@ -90,7 +92,7 @@ contract SubdomainRegistry is Controlled {
onlyController onlyController
{ {
require(!domains[_domain].active); require(!domains[_domain].active);
require(ENSroot.owner(_domain) == address(this)); require(ens.owner(_domain) == address(this));
domains[_domain] = Domain(true, _price); domains[_domain] = Domain(true, _price);
} }
@ -101,8 +103,8 @@ contract SubdomainRegistry is Controlled {
external external
onlyController onlyController
{ {
require(ENSroot.owner(_domain) == address(this)); require(ens.owner(_domain) == address(this));
ENSroot.setOwner(_domain, _newOwner); ens.setOwner(_domain, _newOwner);
delete domains[_domain]; delete domains[_domain];
} }
@ -112,7 +114,7 @@ contract SubdomainRegistry is Controlled {
external external
onlyController onlyController
{ {
resolver = PublicResolverInterface(_resolver); resolver = ResolverInterface(_resolver);
} }
function setDomainPrice( function setDomainPrice(
@ -129,19 +131,19 @@ contract SubdomainRegistry is Controlled {
function initialize( function initialize(
ERC20Token _token, ERC20Token _token,
AbstractENS _ens, ENS _ens,
PublicResolverInterface _resolver, ResolverInterface _resolver,
address _controller address _controller
) )
public public
{ {
require(controller == 0x0); require(controller == 0x0);
require(address(ENSroot) == 0x0); require(address(ens) == 0x0);
require(address(token) == 0x0); require(address(token) == 0x0);
require(address(resolver) == 0x0); require(address(resolver) == 0x0);
controller = _controller; controller = _controller;
token = _token; token = _token;
ENSroot = _ens; ens = _ens;
resolver = _resolver; resolver = _resolver;
} }