Controller

Description:

Smart contract deployed on Ethereum.

Blockchain: Ethereum

Source Code: View Code On The Blockchain

Solidity Source Code:

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

contract Controller {
    address public owner;
    address public token = 0x44709a920fCcF795fbC57BAA433cc3dd53C44DbE;

    string public manifest = "hunt.dappradar.com - Controller v1";
    string public hint = "---test---";

    mapping(bytes32 => address) private _engines;

    event EngineUpdated(bytes32 indexed name, address indexed previous, address indexed current, address setter);
    event TokenUpdated(address indexed previous, address indexed current, address setter);
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event ManifestUpdated(string previous, string current, address setter); 
    event HintUpdated(string previous, string current, address setter);     

    modifier onlyOwner() {
        require(msg.sender == owner, "not owner");
        _;
    }

    constructor() {
        owner = msg.sender;
        emit OwnershipTransferred(address(0), msg.sender);
    }

    function setEngine(bytes32 name, address engineAddr) external onlyOwner {
        _setEngine(name, engineAddr);
    }

    function _setEngine(bytes32 name, address engineAddr) internal {
        address prev = _engines[name];
        _engines[name] = engineAddr;
        emit EngineUpdated(name, prev, engineAddr, msg.sender);
    }

    function setEngineByString(string calldata name, address engineAddr) external onlyOwner {
        bytes32 k = _toBytes32(name);
        _setEngine(k, engineAddr); 
    }

    function engineOf(bytes32 name) public view returns (address) {
        return _engines[name];
    }

    function engineOfString(string calldata name) external view returns (address) {
        bytes32 k = _toBytes32(name);
        return engineOf(k);
    }

    function setToken(address newToken) external onlyOwner {
        address prev = token;
        token = newToken;
        emit TokenUpdated(prev, newToken, msg.sender);
    }

    function setManifest(string calldata newManifest) external onlyOwner {
        string memory prev = manifest;
        manifest = newManifest;
        emit ManifestUpdated(prev, newManifest, msg.sender);
    }

    function setHint(string calldata newHint) external onlyOwner {
        string memory prev = hint;
        hint = newHint;
        emit HintUpdated(prev, newHint, msg.sender);
    }

    function healthCheck(bytes32[] calldata engineNames)
        external
        view
        returns (address[] memory addrs, address tokenAddr, address ownerAddr, string memory currentManifest, string memory currentHint)
    {
        addrs = new address[](engineNames.length);
        for (uint i = 0; i < engineNames.length; i++) {
            addrs[i] = _engines[engineNames[i]];
        }
        tokenAddr = token;
        ownerAddr = owner;
        currentManifest = manifest;
        currentHint = hint;
    }

    function _toBytes32(string memory source) internal pure returns (bytes32 result) {
        bytes memory temp = bytes(source);
        if (temp.length == 0) {
            return bytes32(0);
        }
        assembly {
            result := mload(add(source, 32))
        }
    }
}

Tags:
addr:0x2bfe4b9c7a77571c5eaa0a2587697cb7b633123e|verified:true|block:23503730|tx:0x229aa32ab86b4b05c1a660c0476c2254857e216928553e69a2cc4bea080ca7c3|first_check:1759572903

Submitted on: 2025-10-04 12:15:03

Comments

Log in to comment.

No comments yet.