// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; contract BloomCapabilityRegistry { uint256 public bloom; event Registered(bytes32 indexed capabilityHash, uint8 bitOne, uint8 bitTwo); function register(bytes32 capabilityHash) external { uint8 bitOne = uint8(uint256(capabilityHash)); uint8 bitTwo = uint8(uint256(keccak256(abi.encodePacked(capabilityHash)))); uint256 mask = (uint256(1) << bitOne) | (uint256(1) << bitTwo); bloom |= mask; emit Registered(capabilityHash, bitOne, bitTwo); } function probe(bytes32 capabilityHash) external view returns (bool) { uint8 bitOne = uint8(uint256(capabilityHash)); uint8 bitTwo = uint8(uint256(keccak256(abi.encodePacked(capabilityHash)))); uint256 mask = (uint256(1) << bitOne) | (uint256(1) << bitTwo); return (bloom & mask) == mask; } }