cyberia/research/events/ethereum/contracts/ReverseRegistrar.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;

interface IENS {
    function setSubnodeOwner(bytes32 node, bytes32 label, address owner) external returns(bytes32);
    function owner(bytes32 node) external view returns (address);
}

interface IResolver {
    function setName(bytes32 node, string calldata name) external;
}

contract ReverseRegistrar {
    IENS public ens;
    IResolver public defaultResolver;
    bytes32 public constant ADDR_REVERSE_NODE = 0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2;
    
    constructor(IENS _ens, IResolver _resolver) {
        ens = _ens;
        defaultResolver = _resolver;
    }
    
    function setName(string calldata) external returns (bytes32) {
        bytes32 label = sha3HexAddress(msg.sender);
        bytes32 node = keccak256(abi.encodePacked(ADDR_REVERSE_NODE, label));
        
        // Claim the node for the caller
        IENS(ens).setSubnodeOwner(ADDR_REVERSE_NODE, label, msg.sender);
        
        return node;
    }
    
    function sha3HexAddress(address addr) private pure returns (bytes32 ret) {
        addr;
        ret;
        assembly {
            let lookup := 0x3031323334353637383961626364656600000000000000000000000000000000
            let i := 40
            
            for { } 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)
        }
    }
}

Homonyms

cyberia/research/events/backend/ethereum_artifacts/contracts/ReverseRegistrar.sol
ReverseRegistrar.sol

Graph