Distinguish stale announcements from missing ones

distinguish-stale-announcements-from-missing-ones · discovery-registry · 1392 B runtime · registry-info

scores

source

pragma solidity ^0.8.13;

contract EphemeralServiceBeacon {
    struct Announcement {
        string endpoint;
        uint256 deadline;
    }

    mapping(address => Announcement) private anns;

    event Announced(address indexed agent, string endpoint, uint256 deadline);
    event Revoked(address indexed agent);

    /// @notice Publish or update an endpoint with a block-count TTL.
    function announce(string calldata endpoint, uint256 ttlBlocks) external {
        require(ttlBlocks > 0, "ttl=0");
        uint256 dl = block.number + ttlBlocks;
        anns[msg.sender] = Announcement(endpoint, dl);
        emit Announced(msg.sender, endpoint, dl);
    }

    /// @notice Remove the caller's announcement.
    function revoke() external {
        delete anns[msg.sender];
        emit Revoked(msg.sender);
    }

    /// @notice Resolve an agent's announcement; missing entries return empty, stale entries carry an expired deadline.
    function resolve(address agent) external view returns (string memory, uint256) {
        Announcement storage a = anns[agent];
        if (a.deadline != 0) return (a.endpoint, a.deadline);
        return ("", 0);
    }
}

published

published on testnet · 0xb2097a0Ab2812670a404121BD954f693a67daAb1 · tx 0xeb55aeb31d97aebe… · tempo (42431) · testnet