Delegated Manifest Root

delegated-manifest-root · discovery-registry · 739 B runtime · registry-info

scores

source

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

contract DelegatedManifestRoot {
    struct Entry {
        bytes32 root;
        uint64 updatedAt;
        address manager;
    }

    mapping(address => Entry) private entries;

    event RootUpdated(address indexed agent, bytes32 root, uint64 updatedAt);
    event ManagerChanged(address indexed agent, address manager);

    function setRoot(address agent, bytes32 newRoot) external {
        Entry storage e = entries[agent];
        require(msg.sender == agent || msg.sender == e.manager, "unauthorized");
        e.root = newRoot;
        e.updatedAt = uint64(block.number);
        emit RootUpdated(agent, newRoot, e.updatedAt);
    }

    function setManager(address newManager) external {
        entries[msg.sender].manager = newManager;
        emit ManagerChanged(msg.sender, newManager);
    }

    function getInfo(address agent) external view returns (bytes32 root, uint64 updatedAt, address manager) {
        Entry storage e = entries[agent];
        return (e.root, e.updatedAt, e.manager);
    }
}