Overview
ETH Balance
0 ETH
Eth Value
$0.00View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
ReverseRecords
Compiler Version
v0.7.4+commit.3f05b770
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity ^0.7.4;pragma experimental ABIEncoderV2;
import "./Namehash.sol";
import '@ensdomains/ens/contracts/ENS.sol';
import '@ensdomains/ens/contracts/ReverseRegistrar.sol';
import '@ensdomains/resolver/contracts/Resolver.sol';
contract ReverseRecords {
ENS ens;
ReverseRegistrar registrar;
bytes32 private constant ADDR_REVERSE_NODE = 0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2;
/**
* The `constructor` takes ENS registry address
*/
constructor(ENS _ens) {
ens = _ens;
registrar = ReverseRegistrar(ens.owner(ADDR_REVERSE_NODE));
}
/**
* Read only function to return ens name only if both forward and reverse resolution are set *
*/
function getNames(address[] calldata addresses) external view returns (string[] memory r) {
r = new string[](addresses.length);
for(uint i = 0; i < addresses.length; i++) {
bytes32 node = node(addresses[i]);
address resolverAddress = ens.resolver(node);
if(resolverAddress != address(0x0)){
Resolver resolver = Resolver(resolverAddress);
string memory name = resolver.name(node);
if(bytes(name).length == 0 ){
continue;
}
bytes32 namehash = Namehash.namehash(name);
address forwardResolverAddress = ens.resolver(namehash);
if(forwardResolverAddress != address(0x0)){
Resolver forwardResolver = Resolver(forwardResolverAddress);
address forwardAddress = forwardResolver.addr(namehash);
if(forwardAddress == addresses[i]){
r[i] = name;
}
}
}
}
return r;
}
function node(address addr) private pure returns (bytes32) {
return keccak256(abi.encodePacked(ADDR_REVERSE_NODE, sha3HexAddress(addr)));
}
function sha3HexAddress(address addr) private pure returns (bytes32 ret) {
addr;
ret; // Stop warning us about unused variables
assembly {
let lookup := 0x3031323334353637383961626364656600000000000000000000000000000000
for { let i := 40 } gt(i, 0) { } {
i := sub(i, 1)
mstore8(i, byte(and(addr, 0xf), lookup))
addr := div(addr, 0x10)
i := sub(i, 1)
mstore8(i, byte(and(addr, 0xf), lookup))
addr := div(addr, 0x10)
}
ret := keccak256(0, 40)
}
}
}pragma solidity ^0.7.0;
library Strings {
struct slice {
uint _len;
uint _ptr;
}
/*
* @dev Returns a slice containing the entire string.
* @param self The string to make a slice from.
* @return A newly allocated slice containing the entire string.
*/
function toSlice(string memory self) internal pure returns (slice memory) {
uint ptr;
assembly {
ptr := add(self, 0x20)
}
return slice(bytes(self).length, ptr);
}
/*
* @dev Returns the keccak-256 hash of the slice.
* @param self The slice to hash.
* @return The hash of the slice.
*/
function keccak(slice memory self) internal pure returns (bytes32 ret) {
assembly {
ret := keccak256(mload(add(self, 32)), mload(self))
}
}
/*
* @dev Returns true if the slice is empty (has a length of 0).
* @param self The slice to operate on.
* @return True if the slice is empty, False otherwise.
*/
function empty(slice memory self) internal pure returns (bool) {
return self._len == 0;
}
// Returns the memory address of the first byte after the last occurrence of
// `needle` in `self`, or the address of `self` if not found.
function rfindPtr(uint selflen, uint selfptr, uint needlelen, uint needleptr) private pure returns (uint) {
uint ptr;
if (needlelen <= selflen) {
if (needlelen <= 32) {
bytes32 mask = bytes32(~(2 ** (8 * (32 - needlelen)) - 1));
bytes32 needledata;
assembly { needledata := and(mload(needleptr), mask) }
ptr = selfptr + selflen - needlelen;
bytes32 ptrdata;
assembly { ptrdata := and(mload(ptr), mask) }
while (ptrdata != needledata) {
if (ptr <= selfptr)
return selfptr;
ptr--;
assembly { ptrdata := and(mload(ptr), mask) }
}
return ptr + needlelen;
} else {
// For long needles, use hashing
bytes32 hash;
assembly { hash := keccak256(needleptr, needlelen) }
ptr = selfptr + (selflen - needlelen);
while (ptr >= selfptr) {
bytes32 testHash;
assembly { testHash := keccak256(ptr, needlelen) }
if (hash == testHash)
return ptr + needlelen;
ptr -= 1;
}
}
}
return selfptr;
}
/*
* @dev Splits the slice, setting `self` to everything before the last
* occurrence of `needle`, and `token` to everything after it. If
* `needle` does not occur in `self`, `self` is set to the empty slice,
* and `token` is set to the entirety of `self`.
* @param self The slice to split.
* @param needle The text to search for in `self`.
* @param token An output parameter to which the first token is written.
* @return `token`.
*/
function rsplit(slice memory self, slice memory needle, slice memory token) internal pure returns (slice memory) {
uint ptr = rfindPtr(self._len, self._ptr, needle._len, needle._ptr);
token._ptr = ptr;
token._len = self._len - (ptr - self._ptr);
if (ptr == self._ptr) {
// Not found
self._len = 0;
} else {
self._len -= token._len + needle._len;
}
return token;
}
}
library Namehash {
using Strings for *;
function namehash(string memory name) pure internal returns(bytes32 hash) {
hash = bytes32(0);
Strings.slice memory nameslice = name.toSlice();
Strings.slice memory delim = ".".toSlice();
Strings.slice memory token;
for(nameslice.rsplit(delim, token); !token.empty(); nameslice.rsplit(delim, token)) {
hash = keccak256(abi.encodePacked(hash, token.keccak()));
}
return hash;
}
}pragma solidity ^0.7.0;
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);
}pragma solidity ^0.7.0;
import "./ENS.sol";
abstract contract NameResolver {
function setName(bytes32 node, string memory name) public virtual;
}
contract ReverseRegistrar {
// namehash('addr.reverse')
bytes32 public constant ADDR_REVERSE_NODE = 0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2;
ENS public ens;
NameResolver public defaultResolver;
/**
* @dev Constructor
* @param ensAddr The address of the ENS registry.
* @param resolverAddr The address of the default reverse resolver.
*/
constructor(ENS ensAddr, NameResolver resolverAddr) public {
ens = ensAddr;
defaultResolver = resolverAddr;
// Assign ownership of the reverse record to our deployer
ReverseRegistrar oldRegistrar = ReverseRegistrar(ens.owner(ADDR_REVERSE_NODE));
if (address(oldRegistrar) != address(0x0)) {
oldRegistrar.claim(msg.sender);
}
}
/**
* @dev Transfers ownership of the reverse ENS record associated with the
* calling account.
* @param owner The address to set as the owner of the reverse record in ENS.
* @return The ENS node hash of the reverse record.
*/
function claim(address owner) public returns (bytes32) {
return claimWithResolver(owner, address(0x0));
}
/**
* @dev Transfers ownership of the reverse ENS record associated with the
* calling account.
* @param owner The address to set as the owner of the reverse record in ENS.
* @param resolver The address of the resolver to set; 0 to leave unchanged.
* @return The ENS node hash of the reverse record.
*/
function claimWithResolver(address owner, address resolver) public returns (bytes32) {
bytes32 label = sha3HexAddress(msg.sender);
bytes32 node = keccak256(abi.encodePacked(ADDR_REVERSE_NODE, label));
address currentOwner = ens.owner(node);
// Update the resolver if required
if (resolver != address(0x0) && resolver != ens.resolver(node)) {
// Transfer the name to us first if it's not already
if (currentOwner != address(this)) {
ens.setSubnodeOwner(ADDR_REVERSE_NODE, label, address(this));
currentOwner = address(this);
}
ens.setResolver(node, resolver);
}
// Update the owner if required
if (currentOwner != owner) {
ens.setSubnodeOwner(ADDR_REVERSE_NODE, label, owner);
}
return node;
}
/**
* @dev Sets the `name()` record for the reverse ENS record associated with
* the calling account. First updates the resolver to the default reverse
* resolver if necessary.
* @param name The name to set for this address.
* @return The ENS node hash of the reverse record.
*/
function setName(string memory name) public returns (bytes32) {
bytes32 node = claimWithResolver(address(this), address(defaultResolver));
defaultResolver.setName(node, name);
return node;
}
/**
* @dev Returns the node hash for a given account's reverse records.
* @param addr The address to hash
* @return The ENS node hash.
*/
function node(address addr) public pure returns (bytes32) {
return keccak256(abi.encodePacked(ADDR_REVERSE_NODE, sha3HexAddress(addr)));
}
/**
* @dev An optimised function to compute the sha3 of the lower-case
* hexadecimal representation of an Ethereum address.
* @param addr The address to hash
* @return ret The SHA3 hash of the lower-case hexadecimal encoding of the
* input address.
*/
function sha3HexAddress(address addr) private pure returns (bytes32 ret) {
addr;
ret; // Stop warning us about unused variables
assembly {
let lookup := 0x3031323334353637383961626364656600000000000000000000000000000000
for { let i := 40 } gt(i, 0) { } {
i := sub(i, 1)
mstore8(i, byte(and(addr, 0xf), lookup))
addr := div(addr, 0x10)
i := sub(i, 1)
mstore8(i, byte(and(addr, 0xf), lookup))
addr := div(addr, 0x10)
}
ret := keccak256(0, 40)
}
}
}pragma solidity >=0.4.25;
pragma experimental ABIEncoderV2;
/**
* A generic resolver interface which includes all the functions including the ones deprecated
*/
interface Resolver{
event AddrChanged(bytes32 indexed node, address a);
event AddressChanged(bytes32 indexed node, uint coinType, bytes newAddress);
event NameChanged(bytes32 indexed node, string name);
event ABIChanged(bytes32 indexed node, uint256 indexed contentType);
event PubkeyChanged(bytes32 indexed node, bytes32 x, bytes32 y);
event TextChanged(bytes32 indexed node, string indexed indexedKey, string key);
event ContenthashChanged(bytes32 indexed node, bytes hash);
/* Deprecated events */
event ContentChanged(bytes32 indexed node, bytes32 hash);
function ABI(bytes32 node, uint256 contentTypes) external view returns (uint256, bytes memory);
function addr(bytes32 node) external view returns (address);
function addr(bytes32 node, uint coinType) external view returns(bytes memory);
function contenthash(bytes32 node) external view returns (bytes memory);
function dnsrr(bytes32 node) external view returns (bytes memory);
function name(bytes32 node) external view returns (string memory);
function pubkey(bytes32 node) external view returns (bytes32 x, bytes32 y);
function text(bytes32 node, string calldata key) external view returns (string memory);
function interfaceImplementer(bytes32 node, bytes4 interfaceID) external view returns (address);
function setABI(bytes32 node, uint256 contentType, bytes calldata data) external;
function setAddr(bytes32 node, address addr) external;
function setAddr(bytes32 node, uint coinType, bytes calldata a) external;
function setContenthash(bytes32 node, bytes calldata hash) external;
function setDnsrr(bytes32 node, bytes calldata data) external;
function setName(bytes32 node, string calldata _name) external;
function setPubkey(bytes32 node, bytes32 x, bytes32 y) external;
function setText(bytes32 node, string calldata key, string calldata value) external;
function setInterface(bytes32 node, bytes4 interfaceID, address implementer) external;
function supportsInterface(bytes4 interfaceID) external pure returns (bool);
function multicall(bytes[] calldata data) external returns(bytes[] memory results);
/* Deprecated functions */
function content(bytes32 node) external view returns (bytes32);
function multihash(bytes32 node) external view returns (bytes memory);
function setContent(bytes32 node, bytes32 hash) external;
function setMultihash(bytes32 node, bytes calldata hash) external;
}{
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract ENS","name":"_ens","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"getNames","outputs":[{"internalType":"string[]","name":"r","type":"string[]"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b5060405162000f4e38038062000f4e8339818101604052810190620000379190620001ea565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be37f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b6040518263ffffffff1660e01b8152600401620000f5919062000227565b60206040518083038186803b1580156200010e57600080fd5b505afa15801562000123573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001499190620001be565b600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050620002ca565b600081519050620001a18162000296565b92915050565b600081519050620001b881620002b0565b92915050565b600060208284031215620001d157600080fd5b6000620001e18482850162000190565b91505092915050565b600060208284031215620001fd57600080fd5b60006200020d84828501620001a7565b91505092915050565b620002218162000258565b82525050565b60006020820190506200023e600083018462000216565b92915050565b6000620002518262000276565b9050919050565b6000819050919050565b60006200026f8262000244565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b620002a18162000244565b8114620002ad57600080fd5b50565b620002bb8162000262565b8114620002c757600080fd5b50565b610c7480620002da6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063cbf8b66c14610030575b600080fd5b61004a6004803603810190610045919061090e565b610060565b6040516100579190610aa8565b60405180910390f35b60608282905067ffffffffffffffff8111801561007c57600080fd5b506040519080825280602002602001820160405280156100b057816020015b606081526020019060019003908161009b5790505b50905060005b838390508110156104805760006100ec8585848181106100d257fe5b90506020020160208101906100e791906108bc565b610487565b905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630178b8bf836040518263ffffffff1660e01b815260040161014a9190610aca565b60206040518083038186803b15801561016257600080fd5b505afa158015610176573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019a91906108e5565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461047057600081905060608173ffffffffffffffffffffffffffffffffffffffff1663691f3431856040518263ffffffff1660e01b81526004016102109190610aca565b60006040518083038186803b15801561022857600080fd5b505afa15801561023c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906102659190610953565b905060008151141561027a5750505050610473565b6000610285826104e4565b905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630178b8bf836040518263ffffffff1660e01b81526004016102e39190610aca565b60206040518083038186803b1580156102fb57600080fd5b505afa15801561030f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033391906108e5565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461046b57600081905060008173ffffffffffffffffffffffffffffffffffffffff16633b3b57de856040518263ffffffff1660e01b81526004016103a99190610aca565b60206040518083038186803b1580156103c157600080fd5b505afa1580156103d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f991906108e5565b90508b8b8a81811061040757fe5b905060200201602081019061041c91906108bc565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561046857848a8a8151811061045c57fe5b60200260200101819052505b50505b505050505b50505b80806001019150506100b6565b5092915050565b60007f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b6104b6836105cf565b6040516020016104c7929190610a7c565b604051602081830303815290604052805190602001209050919050565b60008060001b90506104f46107da565b6104fd83610639565b90506105076107da565b6105456040518060400160405280600181526020017f2e00000000000000000000000000000000000000000000000000000000000000815250610639565b905061054f6107da565b6105648282856106679092919063ffffffff16565b505b61056f816106f1565b6105c7578361057d82610701565b60405160200180838152602001828152602001925050506040516020818303038152906040528051906020012093506105c18282856106679092919063ffffffff16565b50610566565b505050919050565b60007f303132333435363738396162636465660000000000000000000000000000000060285b600081111561062b5760018103905081600f85161a815360108404935060018103905081600f85161a81536010840493506105f5565b506028600020915050919050565b6106416107da565b600060208301905060405180604001604052808451815260200182815250915050919050565b61066f6107da565b600061068d8560000151866020015186600001518760200151610712565b9050808360200181815250508460200151810385600001510383600001818152505084602001518114156106cb5760008560000181815250506106e6565b83600001518360000151018560000181815103915081815250505b829150509392505050565b6000808260000151149050919050565b600081516020830151209050919050565b6000808584116107cd576020841161078d57600060018560200360080260020a031960001b905060008185511690508588880103925060008284511690505b81811461077f5787841161076b57879450505050506107d2565b838060019003945050828451169050610751565b8684019450505050506107d2565b60008484209050848703860191505b8582106107cb5760008583209050808214156107bf5785830193505050506107d2565b6001830392505061079c565b505b849150505b949350505050565b604051806040016040528060008152602001600081525090565b60008135905061080381610c27565b92915050565b60008151905061081881610c27565b92915050565b60008083601f84011261083057600080fd5b8235905067ffffffffffffffff81111561084957600080fd5b60208301915083602082028301111561086157600080fd5b9250929050565b600082601f83011261087957600080fd5b815161088c61088782610b16565b610ae5565b915080825260208301602083018583830111156108a857600080fd5b6108b3838284610bd7565b50505092915050565b6000602082840312156108ce57600080fd5b60006108dc848285016107f4565b91505092915050565b6000602082840312156108f757600080fd5b600061090584828501610809565b91505092915050565b6000806020838503121561092157600080fd5b600083013567ffffffffffffffff81111561093b57600080fd5b6109478582860161081e565b92509250509250929050565b60006020828403121561096557600080fd5b600082015167ffffffffffffffff81111561097f57600080fd5b61098b84828501610868565b91505092915050565b60006109a08383610a43565b905092915050565b60006109b382610b56565b6109bd8185610b79565b9350836020820285016109cf85610b46565b8060005b85811015610a0b57848403895281516109ec8582610994565b94506109f783610b6c565b925060208a019950506001810190506109d3565b50829750879550505050505092915050565b610a2681610bad565b82525050565b610a3d610a3882610bad565b610c0a565b82525050565b6000610a4e82610b61565b610a588185610b8a565b9350610a68818560208601610bd7565b610a7181610c16565b840191505092915050565b6000610a888285610a2c565b602082019150610a988284610a2c565b6020820191508190509392505050565b60006020820190508181036000830152610ac281846109a8565b905092915050565b6000602082019050610adf6000830184610a1d565b92915050565b6000604051905081810181811067ffffffffffffffff82111715610b0c57610b0b610c14565b5b8060405250919050565b600067ffffffffffffffff821115610b3157610b30610c14565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000610ba682610bb7565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b83811015610bf5578082015181840152602081019050610bda565b83811115610c04576000848401525b50505050565b6000819050919050565bfe5b6000601f19601f8301169050919050565b610c3081610b9b565b8114610c3b57600080fd5b5056fea2646970667358221220ddd50dc3d4f372ab2392b85edf01f0241c9fadb6f7926a5890e40fd6b0ed1dcf64736f6c6343000704003300000000000000000000000000000000000c2e074ec69a0dfb2997ba6c7d2e1e
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063cbf8b66c14610030575b600080fd5b61004a6004803603810190610045919061090e565b610060565b6040516100579190610aa8565b60405180910390f35b60608282905067ffffffffffffffff8111801561007c57600080fd5b506040519080825280602002602001820160405280156100b057816020015b606081526020019060019003908161009b5790505b50905060005b838390508110156104805760006100ec8585848181106100d257fe5b90506020020160208101906100e791906108bc565b610487565b905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630178b8bf836040518263ffffffff1660e01b815260040161014a9190610aca565b60206040518083038186803b15801561016257600080fd5b505afa158015610176573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019a91906108e5565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461047057600081905060608173ffffffffffffffffffffffffffffffffffffffff1663691f3431856040518263ffffffff1660e01b81526004016102109190610aca565b60006040518083038186803b15801561022857600080fd5b505afa15801561023c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906102659190610953565b905060008151141561027a5750505050610473565b6000610285826104e4565b905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630178b8bf836040518263ffffffff1660e01b81526004016102e39190610aca565b60206040518083038186803b1580156102fb57600080fd5b505afa15801561030f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033391906108e5565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461046b57600081905060008173ffffffffffffffffffffffffffffffffffffffff16633b3b57de856040518263ffffffff1660e01b81526004016103a99190610aca565b60206040518083038186803b1580156103c157600080fd5b505afa1580156103d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f991906108e5565b90508b8b8a81811061040757fe5b905060200201602081019061041c91906108bc565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561046857848a8a8151811061045c57fe5b60200260200101819052505b50505b505050505b50505b80806001019150506100b6565b5092915050565b60007f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b6104b6836105cf565b6040516020016104c7929190610a7c565b604051602081830303815290604052805190602001209050919050565b60008060001b90506104f46107da565b6104fd83610639565b90506105076107da565b6105456040518060400160405280600181526020017f2e00000000000000000000000000000000000000000000000000000000000000815250610639565b905061054f6107da565b6105648282856106679092919063ffffffff16565b505b61056f816106f1565b6105c7578361057d82610701565b60405160200180838152602001828152602001925050506040516020818303038152906040528051906020012093506105c18282856106679092919063ffffffff16565b50610566565b505050919050565b60007f303132333435363738396162636465660000000000000000000000000000000060285b600081111561062b5760018103905081600f85161a815360108404935060018103905081600f85161a81536010840493506105f5565b506028600020915050919050565b6106416107da565b600060208301905060405180604001604052808451815260200182815250915050919050565b61066f6107da565b600061068d8560000151866020015186600001518760200151610712565b9050808360200181815250508460200151810385600001510383600001818152505084602001518114156106cb5760008560000181815250506106e6565b83600001518360000151018560000181815103915081815250505b829150509392505050565b6000808260000151149050919050565b600081516020830151209050919050565b6000808584116107cd576020841161078d57600060018560200360080260020a031960001b905060008185511690508588880103925060008284511690505b81811461077f5787841161076b57879450505050506107d2565b838060019003945050828451169050610751565b8684019450505050506107d2565b60008484209050848703860191505b8582106107cb5760008583209050808214156107bf5785830193505050506107d2565b6001830392505061079c565b505b849150505b949350505050565b604051806040016040528060008152602001600081525090565b60008135905061080381610c27565b92915050565b60008151905061081881610c27565b92915050565b60008083601f84011261083057600080fd5b8235905067ffffffffffffffff81111561084957600080fd5b60208301915083602082028301111561086157600080fd5b9250929050565b600082601f83011261087957600080fd5b815161088c61088782610b16565b610ae5565b915080825260208301602083018583830111156108a857600080fd5b6108b3838284610bd7565b50505092915050565b6000602082840312156108ce57600080fd5b60006108dc848285016107f4565b91505092915050565b6000602082840312156108f757600080fd5b600061090584828501610809565b91505092915050565b6000806020838503121561092157600080fd5b600083013567ffffffffffffffff81111561093b57600080fd5b6109478582860161081e565b92509250509250929050565b60006020828403121561096557600080fd5b600082015167ffffffffffffffff81111561097f57600080fd5b61098b84828501610868565b91505092915050565b60006109a08383610a43565b905092915050565b60006109b382610b56565b6109bd8185610b79565b9350836020820285016109cf85610b46565b8060005b85811015610a0b57848403895281516109ec8582610994565b94506109f783610b6c565b925060208a019950506001810190506109d3565b50829750879550505050505092915050565b610a2681610bad565b82525050565b610a3d610a3882610bad565b610c0a565b82525050565b6000610a4e82610b61565b610a588185610b8a565b9350610a68818560208601610bd7565b610a7181610c16565b840191505092915050565b6000610a888285610a2c565b602082019150610a988284610a2c565b6020820191508190509392505050565b60006020820190508181036000830152610ac281846109a8565b905092915050565b6000602082019050610adf6000830184610a1d565b92915050565b6000604051905081810181811067ffffffffffffffff82111715610b0c57610b0b610c14565b5b8060405250919050565b600067ffffffffffffffff821115610b3157610b30610c14565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000610ba682610bb7565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b83811015610bf5578082015181840152602081019050610bda565b83811115610c04576000848401525b50505050565b6000819050919050565bfe5b6000601f19601f8301169050919050565b610c3081610b9b565b8114610c3b57600080fd5b5056fea2646970667358221220ddd50dc3d4f372ab2392b85edf01f0241c9fadb6f7926a5890e40fd6b0ed1dcf64736f6c63430007040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000c2e074ec69a0dfb2997ba6c7d2e1e
-----Decoded View---------------
Arg [0] : _ens (address): 0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000c2e074ec69a0dfb2997ba6c7d2e1e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.