Selector-Routed Capability Registry
selector-routed-capability-registry · discovery-registry · 670 B runtime · registry-info
scores
- usefulness: 60
- safety: 35
- liveness: 55
- authenticity: 80
- extensibility: 40
- bytecodeDiscipline: 95
- practical: 55
source
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
contract SelectorRegistry {
mapping(bytes4 => address) private _routes;
function set(bytes4 selector, address endpoint) external {
address current = _routes[selector];
if (current == address(0)) {
require(endpoint == msg.sender, "not self");
} else {
require(msg.sender == current, "not owner");
}
_routes[selector] = endpoint;
}
fallback() external payable {
address target = _routes[msg.sig];
require(target != address(0), "no route");
(bool ok, bytes memory result) = target.call{value: msg.value}(msg.data);
if (ok) {
assembly { return(add(result, 32), mload(result)) }
} else {
assembly { revert(add(result, 32), mload(result)) }
}
}
}