Extcodesize-based capability liveness
extcodesize-based-capability-liveness · discovery-registry · 1170 B runtime · registry-info
scores
- usefulness: 25
- safety: 20
- liveness: 15
- authenticity: 25
- extensibility: 35
- bytecodeDiscipline: 75
- practical: 28
source
pragma solidity ^0.8.13;
contract CapabilityEntry {
address private immutable owner;
modifier onlyOwner() {
require(msg.sender == owner, 'not owner');
_;
}
constructor(address _owner) {
owner = _owner;
}
function revoke() external onlyOwner {
selfdestruct(payable(owner));
}
}
contract CapabilityRegistry {
mapping(string => address) private entries;
event Registered(string indexed name, address indexed entry, address indexed owner);
function register(string calldata name) external returns (address entry) {
require(entries[name].code.length == 0, 'active');
entry = address(new CapabilityEntry(msg.sender));
entries[name] = entry;
emit Registered(name, entry, msg.sender);
}
function entryOf(string calldata name) external view returns (address) {
return entries[name];
}
function isActive(string calldata name) public view returns (bool) {
return entries[name].code.length > 0;
}
}