// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; contract MessageBox { address public immutable owner; string public message; event MessageSet(string oldMessage, string newMessage, uint changedAt); modifier onlyOwner() { require(msg.sender == owner, "Only the owner can do that."); _; } constructor(string memory _initialMessage) { owner = msg.sender; message = _initialMessage; } function getMessage() external view returns (string memory) { return message; } function setMessage(string calldata _newMessage) external onlyOwner { message = _newMessage; } }