Selector Registry

selector-registry · discovery-registry · 588 B runtime · funds-movement

scores

source

pragma solidity ^0.8.13;

contract SelectorRegistry {
    mapping(bytes4 => address) private registry;

    function register(bytes4 selector) external payable {
        require(msg.value == 0.01 ether);
        require(registry[selector] == address(0));
        registry[selector] = msg.sender;
    }

    function resolve(bytes4 selector) external view returns (address) {
        return registry[selector];
    }

    function unregister(bytes4 selector) external {
        require(registry[selector] == msg.sender);
        delete registry[selector];
        (bool ok, ) = msg.sender.call{value: 0.01 ether}("");
        require(ok);
    }
}