ETH Price: $3,010.45 (+1.50%)
Gas: 5 Gwei

Contract

0x314159265dD8dbb310642f98f50C066173C1259b
 

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Set Resolver166436662023-02-16 20:25:47441 days ago1676579147IN
ENS: Eth Name Service
0 ETH0.0029125458.25086444
Set Resolver166436602023-02-16 20:24:35441 days ago1676579075IN
ENS: Eth Name Service
0 ETH0.0030063560.12709613
Set Subnode Owne...166404072023-02-16 9:30:35441 days ago1676539835IN
ENS: Eth Name Service
0 ETH0.0053321926.66098609
Set Resolver152466032022-07-30 22:53:37641 days ago1659221617IN
ENS: Eth Name Service
0 ETH0.000141523
Set Resolver152422742022-07-30 6:45:29642 days ago1659163529IN
ENS: Eth Name Service
0 ETH0.000141523
Set Owner140257912022-01-17 22:36:34835 days ago1642458994IN
ENS: Eth Name Service
0 ETH0.00314172131.84468706
Set Owner140257842022-01-17 22:34:52835 days ago1642458892IN
ENS: Eth Name Service
0 ETH0.00318305133.5790103
Set Owner140257752022-01-17 22:33:03835 days ago1642458783IN
ENS: Eth Name Service
0 ETH0.00288462121.05532726
Transfer From134966572021-10-27 2:12:57918 days ago1635300777IN
ENS: Eth Name Service
0 ETH0.00465697116.4243214
Set Resolver126181752021-06-12 6:47:531055 days ago1623480473IN
ENS: Eth Name Service
0 ETH0.000193054
Set Subnode Owne...126181752021-06-12 6:47:531055 days ago1623480473IN
ENS: Eth Name Service
0 ETH0.0024568550
Set Resolver126181752021-06-12 6:47:531055 days ago1623480473IN
ENS: Eth Name Service
0 ETH0.000113454
Set Subnode Owne...126181752021-06-12 6:47:531055 days ago1623480473IN
ENS: Eth Name Service
0 ETH0.000116944
Set Subnode Owne...126181752021-06-12 6:47:531055 days ago1623480473IN
ENS: Eth Name Service
0 ETH0.000116944
Set Resolver126181752021-06-12 6:47:531055 days ago1623480473IN
ENS: Eth Name Service
0 ETH0.000193054
Set Subnode Owne...126181752021-06-12 6:47:531055 days ago1623480473IN
ENS: Eth Name Service
0 ETH0.000196544
Set Resolver118499402021-02-13 18:36:371174 days ago1613241397IN
ENS: Eth Name Service
0 ETH0.0014812100
Set Subnode Owne...112134842020-11-08 0:20:571271 days ago1604794857IN
ENS: Eth Name Service
0 ETH0.00086919
Set Subnode Owne...111915632020-11-04 15:48:301275 days ago1604504910IN
ENS: Eth Name Service
0 ETH0.0027442260
Set Subnode Owne...111915632020-11-04 15:48:301275 days ago1604504910IN
ENS: Eth Name Service
0 ETH0.0025155355
Set Subnode Owne...111915632020-11-04 15:48:301275 days ago1604504910IN
ENS: Eth Name Service
0 ETH0.0026413157.75000153
Set Subnode Owne...111915632020-11-04 15:48:301275 days ago1604504910IN
ENS: Eth Name Service
0 ETH0.0024697954.00000145
Set Subnode Owne...111915622020-11-04 15:48:231275 days ago1604504903IN
ENS: Eth Name Service
0 ETH0.0042826293.636
Set Subnode Owne...111915622020-11-04 15:48:231275 days ago1604504903IN
ENS: Eth Name Service
0 ETH0.0035674878
Set Subnode Owne...111915622020-11-04 15:48:231275 days ago1604504903IN
ENS: Eth Name Service
0 ETH0.0037504382.00000145
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ENS

Compiler Version
v0.4.4+commit.4633f3de

Optimization Enabled:
No with 0 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2019-10-31
*/

;;; --------------------------------------------------------------------------- 
;;; @title The Ethereum Name Service registry. 
;;; @author Daniel Ellison <[email protected]> 
 
(seq 
 
  ;; -------------------------------------------------------------------------- 
  ;; Constant definitions. 
 
  ;; Memory layout. 
  (def 'node-bytes  0x00) 
  (def 'label-bytes 0x20) 
  (def 'call-result 0x40) 
 
  ;; Struct: Record 
  (def 'resolver 0x00) ; address 
  (def 'owner    0x20) ; address 
  (def 'ttl      0x40) ; uint64 
 
  ;; Precomputed function IDs. 
  (def 'get-node-owner    0x02571be3) ; owner(bytes32) 
  (def 'get-node-resolver 0x0178b8bf) ; resolver(bytes32) 
  (def 'get-node-ttl      0x16a25cbd) ; ttl(bytes32) 
  (def 'set-node-owner    0x5b0fc9c3) ; setOwner(bytes32,address) 
  (def 'set-subnode-owner 0x06ab5923) ; setSubnodeOwner(bytes32,bytes32,address) 
  (def 'set-node-resolver 0x1896f70a) ; setResolver(bytes32,address) 
  (def 'set-node-ttl      0x14ab9038) ; setTTL(bytes32,uint64) 
 
  ;; Jumping here causes an EVM error. 
  (def 'invalid-location 0x02) 
 
  ;; -------------------------------------------------------------------------- 
  ;; @notice Shifts the leftmost 4 bytes of a 32-byte number right by 28 bytes. 
  ;; @param input A 32-byte number. 
 
  (def 'shift-right (input) 
    (div input (exp 2 224))) 
 
  ;; -------------------------------------------------------------------------- 
  ;; @notice Determines whether the supplied function ID matches a known 
  ;;         function hash and executes <code-body> if so. 
  ;; @dev The function ID is in the leftmost four bytes of the call data. 
  ;; @param function-hash The four-byte hash of a known function signature. 
  ;; @param code-body The code to run in the case of a match. 
 
  (def 'function (function-hash code-body) 
    (when (= (shift-right (calldataload 0x00)) function-hash) 
      code-body)) 
 
  ;; -------------------------------------------------------------------------- 
  ;; @notice Calculates record location for the node and label passed in. 
  ;; @param node The parent node. 
  ;; @param label The hash of the subnode label. 
 
  (def 'get-record (node label) 
    (seq 
      (mstore node-bytes node) 
      (mstore label-bytes label) 
      (sha3 node-bytes 64))) 
 
  ;; -------------------------------------------------------------------------- 
  ;; @notice Retrieves owner from node record. 
  ;; @param node Get owner of this node. 
 
  (def 'get-owner (node) 
    (sload (+ node owner))) 
 
  ;; -------------------------------------------------------------------------- 
  ;; @notice Stores new owner in node record. 
  ;; @param node Set owner of this node. 
  ;; @param new-owner New owner of this node. 
 
  (def 'set-owner (node new-owner) 
    (sstore (+ node owner) new-owner)) 
 
  ;; -------------------------------------------------------------------------- 
  ;; @notice Stores new subnode owner in node record. 
  ;; @param node Set owner of this node. 
  ;; @param label The hash of the label specifying the subnode. 
  ;; @param new-owner New owner of the subnode. 
 
  (def 'set-subowner (node label new-owner) 
    (sstore (+ (get-record node label) owner) new-owner)) 
 
  ;; -------------------------------------------------------------------------- 
  ;; @notice Retrieves resolver from node record. 
  ;; @param node Get resolver of this node. 
 
  (def 'get-resolver (node) 
    (sload node)) 
 
  ;; -------------------------------------------------------------------------- 
  ;; @notice Stores new resolver in node record. 
  ;; @param node Set resolver of this node. 
  ;; @param new-resolver New resolver for this node. 
 
  (def 'set-resolver (node new-resolver) 
    (sstore node new-resolver)) 
 
  ;; -------------------------------------------------------------------------- 
  ;; @notice Retrieves TTL From node record. 
  ;; @param node Get TTL of this node. 
 
  (def 'get-ttl (node) 
    (sload (+ node ttl))) 
 
  ;; -------------------------------------------------------------------------- 
  ;; @notice Stores new TTL in node record. 
  ;; @param node Set TTL of this node. 
  ;; @param new-resolver New TTL for this node. 
 
  (def 'set-ttl (node new-ttl) 
    (sstore (+ node ttl) new-ttl)) 
 
  ;; -------------------------------------------------------------------------- 
  ;; @notice Checks that the caller is the node owner. 
  ;; @param node Check owner of this node. 
 
  (def 'only-node-owner (node) 
    (when (!= (caller) (get-owner node)) 
      (jump invalid-location))) 
 
  ;; -------------------------------------------------------------------------- 
  ;; INIT 
 
  ;; Set the owner of the root node (0x00) to the deploying account. 
  (set-owner 0x00 (caller)) 
 
  ;; -------------------------------------------------------------------------- 
  ;; CODE 
 
  (returnlll 
    (seq 
 
      ;; ---------------------------------------------------------------------- 
      ;; @notice Returns the address of the resolver for the specified node. 
      ;; @dev Signature: resolver(bytes32) 
      ;; @param node Return this node's resolver. 
      ;; @return The associated resolver. 
 
      (def 'node (calldataload 0x04)) 
 
      (function get-node-resolver 
        (seq 
 
          ;; Get the node's resolver and save it. 
          (mstore call-result (get-resolver node)) 
 
          ;; Return result. 
          (return call-result 32))) 
 
      ;; ---------------------------------------------------------------------- 
      ;; @notice Returns the address that owns the specified node. 
      ;; @dev Signature: owner(bytes32) 
      ;; @param node Return this node's owner. 
      ;; @return The associated address. 
 
      (def 'node (calldataload 0x04)) 
 
      (function get-node-owner 
        (seq 
 
          ;; Get the node's owner and save it. 
          (mstore call-result (get-owner node)) 
 
          ;; Return result. 
          (return call-result 32))) 
 
      ;; ---------------------------------------------------------------------- 
      ;; @notice Returns the TTL of a node and any records associated with it. 
      ;; @dev Signature: ttl(bytes32) 
      ;; @param node Return this node's TTL. 
      ;; @return The node's TTL. 
 
      (def 'node (calldataload 0x04)) 
 
      (function get-node-ttl 
        (seq 
 
          ;; Get the node's TTL and save it. 
          (mstore call-result (get-ttl node)) 
 
          ;; Return result. 
          (return call-result 32))) 
 
      ;; ---------------------------------------------------------------------- 
      ;; @notice Transfers ownership of a node to a new address. May only be 
      ;;         called by the current owner of the node. 
      ;; @dev Signature: setOwner(bytes32,address) 
      ;; @param node The node to transfer ownership of. 
      ;; @param new-owner The address of the new owner. 
 
      (def 'node (calldataload 0x04)) 
      (def 'new-owner (calldataload 0x24)) 
 
      (function set-node-owner 
        (seq (only-node-owner node) 
 
          ;; Transfer ownership by storing passed-in address. 
          (set-owner node new-owner) 
 
          ;; Emit an event about the transfer. 
          ;; Transfer(bytes32 indexed node, address owner); 
          (mstore call-result new-owner) 
          (log2 call-result 32 
              (sha3 0x00 (lit 0x00 "Transfer(bytes32,address)")) node) 
 
          ;; Nothing to return. 
          (stop))) 
 
      ;; ---------------------------------------------------------------------- 
      ;; @notice Transfers ownership of a subnode to a new address. May only be 
      ;;         called by the owner of the parent node. 
      ;; @dev Signature: setSubnodeOwner(bytes32,bytes32,address) 
      ;; @param node The parent node. 
      ;; @param label The hash of the label specifying the subnode. 
      ;; @param new-owner The address of the new owner. 
 
      (def 'node (calldataload 0x04)) 
      (def 'label (calldataload 0x24)) 
      (def 'new-owner (calldataload 0x44)) 
 
      (function set-subnode-owner 
        (seq (only-node-owner node) 
 
          ;; Transfer ownership by storing passed-in address. 
          (set-subowner node label new-owner) 
 
          ;; Emit an event about the transfer. 
          ;; NewOwner(bytes32 indexed node, bytes32 indexed label, address owner); 
          (mstore call-result new-owner) 
          (log3 call-result 32 
              (sha3 0x00 (lit 0x00 "NewOwner(bytes32,bytes32,address)")) 
              node label) 
 
          ;; Nothing to return. 
          (stop))) 
 
      ;; ---------------------------------------------------------------------- 
      ;; @notice Sets the resolver address for the specified node. 
      ;; @dev Signature: setResolver(bytes32,address) 
      ;; @param node The node to update. 
      ;; @param new-resolver The address of the resolver. 
 
      (def 'node (calldataload 0x04)) 
      (def 'new-resolver (calldataload 0x24)) 
 
      (function set-node-resolver 
        (seq (only-node-owner node) 
 
          ;; Transfer ownership by storing passed-in address. 
          (set-resolver node new-resolver) 
 
          ;; Emit an event about the change of resolver. 
          ;; NewResolver(bytes32 indexed node, address resolver); 
          (mstore call-result new-resolver) 
          (log2 call-result 32 
              (sha3 0x00 (lit 0x00 "NewResolver(bytes32,address)")) node) 
 
          ;; Nothing to return. 
          (stop))) 
 
      ;; ---------------------------------------------------------------------- 
      ;; @notice Sets the TTL for the specified node. 
      ;; @dev Signature: setTTL(bytes32,uint64) 
      ;; @param node The node to update. 
      ;; @param ttl The TTL in seconds. 
 
      (def 'node (calldataload 0x04)) 
      (def 'new-ttl (calldataload 0x24)) 
 
      (function set-node-ttl 
        (seq (only-node-owner node) 
 
          ;; Set new TTL by storing passed-in time. 
          (set-ttl node new-ttl) 
 
          ;; Emit an event about the change of TTL. 
          ;; NewTTL(bytes32 indexed node, uint64 ttl); 
          (mstore call-result new-ttl) 
          (log2 call-result 32 
              (sha3 0x00 (lit 0x00 "NewTTL(bytes32,uint64)")) node) 
 
          ;; Nothing to return. 
          (stop))) 
 
      ;; ---------------------------------------------------------------------- 
      ;; @notice Fallback: No functions matched the function ID provided. 
 
      (jump invalid-location))) 
 
)

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"node","type":"bytes32"}],"name":"resolver","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"node","type":"bytes32"}],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"label","type":"bytes32"},{"name":"owner","type":"address"}],"name":"setSubnodeOwner","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"ttl","type":"uint64"}],"name":"setTTL","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"node","type":"bytes32"}],"name":"ttl","outputs":[{"name":"","type":"uint64"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"resolver","type":"address"}],"name":"setResolver","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"owner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":false,"name":"owner","type":"address"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":true,"name":"label","type":"bytes32"},{"indexed":false,"name":"owner","type":"address"}],"name":"NewOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":false,"name":"resolver","type":"address"}],"name":"NewResolver","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"node","type":"bytes32"},{"indexed":false,"name":"ttl","type":"uint64"}],"name":"NewTTL","type":"event"}]

3360206000015561021a806100146000396000f3630178b8bf60e060020a600035041415610020576004355460405260206040f35b6302571be360e060020a600035041415610044576020600435015460405260206040f35b6316a25cbd60e060020a600035041415610068576040600435015460405260206040f35b635b0fc9c360e060020a6000350414156100b557602060043501543314151561008f576002565b6024356020600435015560243560405260043560198061020160003960002060206040a2005b6306ab592360e060020a6000350414156101135760206004350154331415156100dc576002565b6044356020600435600052602435602052604060002001556044356040526024356004356021806101e060003960002060206040a3005b631896f70a60e060020a60003504141561015d57602060043501543314151561013a576002565b60243560043555602435604052600435601c806101c460003960002060206040a2005b6314ab903860e060020a6000350414156101aa576020600435015433141515610184576002565b602435604060043501556024356040526004356016806101ae60003960002060206040a2005b6002564e657754544c28627974657333322c75696e743634294e65775265736f6c76657228627974657333322c61646472657373294e65774f776e657228627974657333322c627974657333322c61646472657373295472616e7366657228627974657333322c6164647265737329

Deployed Bytecode

0x630178b8bf60e060020a600035041415610020576004355460405260206040f35b6302571be360e060020a600035041415610044576020600435015460405260206040f35b6316a25cbd60e060020a600035041415610068576040600435015460405260206040f35b635b0fc9c360e060020a6000350414156100b557602060043501543314151561008f576002565b6024356020600435015560243560405260043560198061020160003960002060206040a2005b6306ab592360e060020a6000350414156101135760206004350154331415156100dc576002565b6044356020600435600052602435602052604060002001556044356040526024356004356021806101e060003960002060206040a3005b631896f70a60e060020a60003504141561015d57602060043501543314151561013a576002565b60243560043555602435604052600435601c806101c460003960002060206040a2005b6314ab903860e060020a6000350414156101aa576020600435015433141515610184576002565b602435604060043501556024356040526004356016806101ae60003960002060206040a2005b6002564e657754544c28627974657333322c75696e743634294e65775265736f6c76657228627974657333322c61646472657373294e65774f776e657228627974657333322c627974657333322c61646472657373295472616e7366657228627974657333322c6164647265737329

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.