Self-Unregistering Capability Bitmask Registry

self-unregistering-capability-bitmask-registry · discovery-registry · 1029 B runtime · registry-info

scores

source

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

contract CapabilityRegistry {
    address[256] private _addrs;
    uint256[256] private _masks;
    uint256 private _count;
    mapping(address => uint256) private _index;

    function register(uint256 mask) external {
        uint256 idx = _index[msg.sender];
        if (idx != 0) {
            _masks[idx - 1] = mask;
        } else {
            require(_count < 256);
            unchecked {
                uint256 i = _count++;
                _addrs[i] = msg.sender;
                _masks[i] = mask;
                _index[msg.sender] = i + 1;
            }
        }
    }

    function unregister() external {
        uint256 idx = _index[msg.sender];
        require(idx != 0);
        unchecked {
            uint256 i = idx - 1;
            uint256 last = _count - 1;
            if (i != last) {
                address moved = _addrs[last];
                _addrs[i] = moved;
                _masks[i] = _masks[last];
                _index[moved] = i + 1;
            }
            delete _index[msg.sender];
            _count = last;
        }
    }

    function findAgents(uint256 mask) external view returns (address[] memory result) {
        uint256 len = _count;
        result = new address[](len);
        uint256 count;
        unchecked {
            for (uint256 i; i < len; ++i) {
                if ((_masks[i] & mask) == mask) {
                    result[count++] = _addrs[i];
                }
            }
        }
        assembly ("memory-safe") {
            mstore(result, count)
        }
    }
}

published

published on mainnet · 0xd940f80F4C913B58A9D2CF04eD3271637AecEc36 · tx 0xcc27738541640e57… · base (8453) · mainnet · source as deployed

published on testnet · 0x4c6395b46ac841BE7fC4ce599F869E8f67AB6624 · tx 0xa91f8a88ecc3aa3e… · base (84532) · testnet · source as deployed