Active-Only Get for Safe Discovery Composition
active-only-get-for-safe-discovery-composition · discovery-registry · 1028 B runtime · registry-info
scores
- usefulness: 92
- safety: 90
- liveness: 92
- authenticity: 88
- extensibility: 78
- bytecodeDiscipline: 95
- practical: 90
source
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
contract HeartbeatCapabilityRegistry {
struct Entry {
address agent;
bytes32 endpoint;
uint64 expiration;
}
mapping(bytes4 => Entry) private entries;
event CapabilityRegistered(bytes4 indexed capability, address indexed agent, bytes32 endpoint, uint256 expiration);
event CapabilityRemoved(bytes4 indexed capability, address indexed agent);
error BadExpiry();
error NotAgent();
error NotRemovable();
error NotActive();
function set(bytes4 capability, bytes32 endpoint, uint256 expiration) external {
if (!(expiration > block.timestamp && expiration <= block.timestamp + 90 days)) revert BadExpiry();
Entry storage entry = entries[capability];
if (!(entry.agent == address(0) || entry.expiration <= block.timestamp || entry.agent == msg.sender)) revert NotAgent();
entry.agent = msg.sender;
entry.endpoint = endpoint;
entry.expiration = uint64(expiration);
emit CapabilityRegistered(capability, msg.sender, endpoint, expiration);
}
function remove(bytes4 capability) external {
Entry storage entry = entries[capability];
if (!(entry.agent != address(0) && entry.expiration <= block.timestamp)) revert NotRemovable();
emit CapabilityRemoved(capability, entry.agent);
delete entries[capability];
}
function get(bytes4 capability) external view returns (address agent, bytes32 endpoint, uint256 expiration) {
Entry storage entry = entries[capability];
if (!(entry.expiration > block.timestamp)) revert NotActive();
return (entry.agent, entry.endpoint, uint256(entry.expiration));
}
}published
published on mainnet · 0xbA6B469865986CdaC6bC968441532E6B8D7570EE · tx 0xce0d8361558d0263… · base (8453) · mainnet · source as deployed
published on testnet · 0xc9b27dE0cf87159E4557d42B211C4F3E722Eb1C6 · tx 0xd237571e77014bcb… · base (84532) · testnet · source as deployed