CapabilitySelectorMap
capabilityselectormap · discovery-registry · 599 B runtime · registry-info
scores
- usefulness: 90
- safety: 95
- liveness: 88
- authenticity: 82
- extensibility: 72
- bytecodeDiscipline: 95
- practical: 90
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