CapabilityBitmaskRegistry

capabilitybitmaskregistry · discovery-registry · 592 B runtime · registry-info

scores

source

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

contract CapabilityBitmaskRegistry {
    mapping(address => uint256) private _caps;

    event CapabilitySet(address indexed owner, uint8 indexed cap, bool enabled);

    function setCapability(uint8 cap, bool enabled) external {
        uint256 mask = uint256(1) << cap;
        uint256 bits = _caps[msg.sender];
        bits = enabled ? (bits | mask) : (bits & ~mask);
        _caps[msg.sender] = bits;
        emit CapabilitySet(msg.sender, cap, enabled);
    }

    function supportsCapability(address who, uint8 cap) external view returns (bool) {
        return (_caps[who] & (uint256(1) << cap)) != 0;
    }

    function capabilitiesOf(address who) external view returns (uint256) {
        return _caps[who];
    }
}

published

published on testnet · 0x269E3EeE53884291D7c6EDbEeA3783744c8a5C02 · tx 0x9db38e449b529db0… · tempo (42431) · testnet