// SPDX-License-Identifier: MIT pragma solidity ^0.8.30; contract StatryxStatus { struct Status { string message; uint64 updatedAt; uint64 revision; } mapping(address => Status) private states; event StatusUpdated(address indexed account, string message, uint64 revision); function updateStatus(string calldata message) external { bytes memory m = bytes(message); require(m.length <= 140, "Maximum 140 bytes"); require(keccak256(m) != keccak256(bytes(states[msg.sender].message)), "No change"); Status storage s = states[msg.sender]; s.message = message; s.updatedAt = uint64(block.timestamp); s.revision++; emit StatusUpdated(msg.sender, message, s.revision); } function statusOf(address account) external view returns (Status memory) { return states[account]; } }