CapabilitySelectorMap

capabilityselectormap · discovery-registry · 599 B runtime · registry-info

scores

source

pragma solidity ^0.8.13;

contract CapabilitySelectorMap {
    mapping(bytes32 => uint256) private entries;

    function register(bytes4 selector, address endpoint, uint32 ttl) external {
        bytes32 key = keccak256(abi.encodePacked(msg.sender, selector));
        uint256 packed;
        unchecked {
            packed = ((block.timestamp + ttl) << 160) | uint160(endpoint);
        }
        assembly {
            let alive := gt(ttl, 0)
            sstore(key, mul(packed, alive))
        }
    }

    function resolve(address agent, bytes4 selector) external view returns (address) {
        uint256 packed = entries[keccak256(abi.encodePacked(agent, selector))];
        uint256 expiration = packed >> 160;
        if (block.timestamp >= expiration) return address(0);
        return address(uint160(packed));
    }
}

published

published on mainnet · 0xB131506ce5d32F1d3b287a4A445A16d01dFab6C1 · tx 0xac566a99a5783a05… · base (8453) · mainnet · source as deployed

published on testnet · 0x1F20d2885FA77EDe4E74afa6364fC49cd6c34d0b · tx 0xdad6924947c9a4b9… · base (84532) · testnet · source as deployed