// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import "@openzeppelin/contracts/access/AccessControl.sol"; contract DBIS_RootRegistry is AccessControl { bytes32 public constant ROOT_ADMIN_ROLE = keccak256("ROOT_ADMIN"); mapping(bytes32 => address) private _components; string public railVersion; event ComponentUpdated(bytes32 indexed key, address indexed addr, string railVersion); constructor(address admin, string memory _railVersion) { _grantRole(DEFAULT_ADMIN_ROLE, admin); _grantRole(ROOT_ADMIN_ROLE, admin); railVersion = _railVersion; } function setComponent(bytes32 key, address addr) external onlyRole(ROOT_ADMIN_ROLE) { _components[key] = addr; emit ComponentUpdated(key, addr, railVersion); } function getComponent(bytes32 key) external view returns (address) { return _components[key]; } function setRailVersion(string calldata _version) external onlyRole(ROOT_ADMIN_ROLE) { railVersion = _version; } }