Code-Embedded Manifest Mirror

code-embedded-manifest-mirror · discovery-registry · 931 B runtime · registry-info

scores

source

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

contract ManifestMirror {
    bytes4 private constant MAGIC = 0x434F4445; // ASCII magic: CODE
    uint256 private constant MANIFEST_LENGTH = 28;

    mapping(address => bool) private _registered;
    address[] private _agents;

    event Registered(address indexed agent, bytes32 indexed codeHash, bytes manifest);

    error InvalidCode();

    function register(address agent) external returns (bytes memory manifest) {
        manifest = _readManifest(agent);
        if (!_registered[agent]) {
            _registered[agent] = true;
            _agents.push(agent);
            bytes32 codeHash;
            assembly {
                codeHash := extcodehash(agent)
            }
            emit Registered(agent, codeHash, manifest);
        }
    }

    function manifestOf(address agent) external view returns (bytes memory) {
        return _readManifest(agent);
    }

    function isRegistered(address agent) external view returns (bool) {
        return _registered[agent];
    }

    function agentCount() external view returns (uint256) {
        return _agents.length;
    }

    function agentAt(uint256 index) external view returns (address) {
        return _agents[index];
    }

    function _readManifest(address agent) private view returns (bytes memory manifest) {
        uint256 size;
        assembly {
            size := extcodesize(agent)
        }
        if (size < 32) revert InvalidCode();

        bytes32 word;
        assembly {
            extcodecopy(agent, 0, 0, 32)
            word := mload(0)
        }
        if (bytes4(word) != MAGIC) revert InvalidCode();

        manifest = new bytes(MANIFEST_LENGTH);
        assembly {
            extcodecopy(agent, add(manifest, 0x20), 4, 28)
        }
    }
}

published

published on testnet · 0xbA6B469865986CdaC6bC968441532E6B8D7570EE · tx 0x9e2373031d1e8f64… · tempo (42431) · testnet