Liveness-Tracked Manifest Registry

liveness-tracked-manifest-registry · discovery-registry · 1158 B runtime · registry-info

scores

source

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

contract LivenessTrackedManifestRegistry {
    struct Entry {
        bytes32 manifest;
        uint64 lastHeartbeat;
    }

    mapping(address => Entry) public entries;

    uint256 public immutable heartbeatInterval;

    event ManifestUpdated(address indexed agent, bytes32 manifest);
    event AgentEvicted(address indexed agent);

    constructor(uint256 _heartbeatInterval) {
        require(_heartbeatInterval > 0, "interval required");
        heartbeatInterval = _heartbeatInterval;
    }

    function updateManifest(bytes32 _manifest) external {
        entries[msg.sender] = Entry({
            manifest: _manifest,
            lastHeartbeat: uint64(block.timestamp)
        });
        emit ManifestUpdated(msg.sender, _manifest);
    }

    function heartbeat() external {
        Entry storage entry = entries[msg.sender];
        require(entry.lastHeartbeat != 0, "not registered");
        entry.lastHeartbeat = uint64(block.timestamp);
    }

    function remove() external {
        Entry storage entry = entries[msg.sender];
        require(entry.lastHeartbeat != 0, "not registered");
        delete entries[msg.sender];
        emit ManifestUpdated(msg.sender, bytes32(0));
    }

    function evictStale(address _agent) external {
        Entry storage entry = entries[_agent];
        require(entry.lastHeartbeat != 0, "not registered");
        require(block.timestamp - entry.lastHeartbeat > heartbeatInterval, "not stale");
        delete entries[_agent];
        emit AgentEvicted(_agent);
    }
}

published

published on testnet · 0xDA8E0C23F4b7cFf559f76f252DFC905e479aC66d · tx 0xba3232bffb11b53e… · base (84532) · testnet · source as deployed