SelectorIndexRegistry
selectorindexregistry · discovery-registry · 1235 B runtime · registry-info
scores
- usefulness: 72
- safety: 85
- liveness: 70
- authenticity: 100
- extensibility: 55
- bytecodeDiscipline: 95
- practical: 76
source
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
contract SelectorIndexRegistry {
mapping(bytes4 => address[]) private _index;
event Registered(bytes4 indexed selector, address indexed agent);
event Deregistered(bytes4 indexed selector, address indexed agent);
function register(bytes4 selector) external {
address[] storage agents = _index[selector];
for (uint i = 0; i < agents.length; i++) {
require(agents[i] != msg.sender, "already registered");
}
agents.push(msg.sender);
emit Registered(selector, msg.sender);
}
function deregister(bytes4 selector) external {
address[] storage agents = _index[selector];
uint len = agents.length;
for (uint i = 0; i < len; i++) {
if (agents[i] == msg.sender) {
agents[i] = agents[len - 1];
agents.pop();
emit Deregistered(selector, msg.sender);
return;
}
}
revert("not registered");
}
function find(bytes4 selector) external view returns (address[] memory) {
return _index[selector];
}
}