Transaction Hash:
Block:
7863933 at May-30-2019 11:53:41 PM +UTC
Transaction Fee:
0.000030385 ETH
$0.09
Gas Used:
30,385 Gas / 1 Gwei
Emitted Events:
34 |
Root.OwnershipTransferred( previousOwner=[Sender] 0x0904dac3347ea47d208f3fd67402d039a3b99859, newOwner=0x911143d9...5fEf4D667 )
|
Account State Difference:
Address | Before | After | State Difference | ||
---|---|---|---|---|---|
0x0904Dac3...9a3b99859 | (ENS: Wallet) |
4.767200773306366185 Eth
Nonce: 309
|
4.767170388306366185 Eth
Nonce: 310
| 0.000030385 | |
0x285088c7...408E5284a | |||||
0xEA674fdD...16B898ec8
Miner
| (Ethermine) | 604.712091168487536727 Eth | 604.712121553487536727 Eth | 0.000030385 |
Execution Trace
Root.transferOwnership( newOwner=0x911143d946bA5d467BfC476491fdb235fEf4D667 )
transferOwnership[Ownable (ln:49)]
OwnershipTransferred[Ownable (ln:50)]
// File: @ensdomains/ens/contracts/ENS.sol pragma solidity >=0.4.24; 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); function setSubnodeOwner(bytes32 node, bytes32 label, address owner) external; function setResolver(bytes32 node, address resolver) external; function setOwner(bytes32 node, address owner) external; function setTTL(bytes32 node, uint64 ttl) external; function owner(bytes32 node) external view returns (address); function resolver(bytes32 node) external view returns (address); function ttl(bytes32 node) external view returns (uint64); } // File: contracts/Ownable.sol pragma solidity ^0.5.0; contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); modifier onlyOwner { require(isOwner(msg.sender)); _; } constructor() public { owner = msg.sender; } function transferOwnership(address newOwner) public onlyOwner { emit OwnershipTransferred(owner, newOwner); owner = newOwner; } function isOwner(address addr) public view returns (bool) { return owner == addr; } } // File: contracts/Controllable.sol pragma solidity ^0.5.0; contract Controllable is Ownable { mapping(address=>bool) public controllers; event ControllerChanged(address indexed controller, bool enabled); modifier onlyController { require(controllers[msg.sender]); _; } function setController(address controller, bool enabled) public onlyOwner { controllers[controller] = enabled; emit ControllerChanged(controller, enabled); } } // File: contracts/Root.sol pragma solidity ^0.5.0; contract Root is Ownable, Controllable { bytes32 constant private ROOT_NODE = bytes32(0); bytes4 constant private INTERFACE_META_ID = bytes4(keccak256("supportsInterface(bytes4)")); event TLDLocked(bytes32 indexed label); ENS public ens; mapping(bytes32=>bool) public locked; constructor(ENS _ens) public { ens = _ens; } function setSubnodeOwner(bytes32 label, address owner) external onlyController { require(!locked[label]); ens.setSubnodeOwner(ROOT_NODE, label, owner); } function setResolver(address resolver) external onlyOwner { ens.setResolver(ROOT_NODE, resolver); } function lock(bytes32 label) external onlyOwner { emit TLDLocked(label); locked[label] = true; } function supportsInterface(bytes4 interfaceID) external pure returns (bool) { return interfaceID == INTERFACE_META_ID; } }