false
true
0

Contract Address Details

0x32e034124b043B573bf473cd8488dF10ef89DC75

Contract Name
Announcements
Creator
0xc8cd89–9f6aa6 at 0x7c23cd–5209ae
Balance
0 tPLS
Tokens
Fetching tokens...
Transactions
Fetching transactions...
Transfers
Fetching transfers...
Gas Used
Fetching gas used...
Last Balance Update
25428075
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
Announcements




Optimization enabled
false
Compiler version
v0.8.28+commit.7893614a




EVM Version




Verified at
2026-09-18T22:50:54.622680Z

Constructor Arguments


              

Announcements.sol

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

/// @title  Announcements — what the town's owner has to say, kept on chain.
/// @notice The one contract the owner has any say over, and the only say it gives them: posting an
///         announcement, and pinning one. Every player's own client reads the newest and shows it in
///         chat, with the pinned one, if there is one, above it; the Hall of Records reads the whole
///         list. Nothing is ever edited or removed -- a later announcement is how anything gets
///         corrected. Pinning only picks which one stays up.
/// @dev    The owner is whoever deploys it, fixed for good: no transfer, no admin, nothing else to
///         own. Announcements are plain text, up to a few paragraphs.
contract Announcements {
    address public immutable owner;

    struct Announcement {
        string text;
        uint64 at;     // block timestamp
    }

    Announcement[] private announcements;

    /// The pinned announcement's index plus one; 0 when nothing is pinned.
    uint256 private pinnedPlusOne;

    uint256 public constant MAX_LENGTH = 2000;

    event Announced(uint256 indexed index, string text, uint64 at);
    event Pinned(uint256 indexed index);
    event Unpinned(uint256 indexed index);

    constructor() {
        owner = msg.sender;
    }

    /// @notice Posts an announcement. The owner's alone.
    function announce(string calldata text) external {
        require(msg.sender == owner, "only the owner makes announcements");
        uint256 length = bytes(text).length;
        require(length > 0 && length <= MAX_LENGTH, "an announcement is 1 to 2000 bytes");
        announcements.push(Announcement({ text: text, at: uint64(block.timestamp) }));
        emit Announced(announcements.length - 1, text, uint64(block.timestamp));
    }

    /// @notice Keeps one announcement up above the newest, until another is pinned or it is unpinned.
    function pin(uint256 index) external {
        require(msg.sender == owner, "only the owner pins announcements");
        require(index < announcements.length, "there is no such announcement");
        pinnedPlusOne = index + 1;
        emit Pinned(index);
    }

    /// @notice Takes the pinned announcement down. It stays in the list like every other.
    function unpin() external {
        require(msg.sender == owner, "only the owner pins announcements");
        require(pinnedPlusOne != 0, "nothing is pinned");
        uint256 index = pinnedPlusOne - 1;
        pinnedPlusOne = 0;
        emit Unpinned(index);
    }

    /// @notice Whether one is pinned, and which.
    function pinned() external view returns (bool isPinned, uint256 index) {
        if (pinnedPlusOne == 0) return (false, 0);
        return (true, pinnedPlusOne - 1);
    }

    /// @notice How many there have ever been.
    function count() external view returns (uint256) {
        return announcements.length;
    }

    /// @notice One of them, oldest first from 0: its text and when it was posted.
    function announcement(uint256 index) external view returns (string memory text, uint64 at) {
        Announcement storage a = announcements[index];
        return (a.text, a.at);
    }
}
        

Compiler Settings

{"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","metadata"]}},"optimizer":{"runs":200,"enabled":true},"evmVersion":"shanghai"}
              

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"Announced","inputs":[{"type":"uint256","name":"index","internalType":"uint256","indexed":true},{"type":"string","name":"text","internalType":"string","indexed":false},{"type":"uint64","name":"at","internalType":"uint64","indexed":false}],"anonymous":false},{"type":"event","name":"Pinned","inputs":[{"type":"uint256","name":"index","internalType":"uint256","indexed":true}],"anonymous":false},{"type":"event","name":"Unpinned","inputs":[{"type":"uint256","name":"index","internalType":"uint256","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"MAX_LENGTH","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"announce","inputs":[{"type":"string","name":"text","internalType":"string"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"text","internalType":"string"},{"type":"uint64","name":"at","internalType":"uint64"}],"name":"announcement","inputs":[{"type":"uint256","name":"index","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"count","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"pin","inputs":[{"type":"uint256","name":"index","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"isPinned","internalType":"bool"},{"type":"uint256","name":"index","internalType":"uint256"}],"name":"pinned","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"unpin","inputs":[]}]
              

Contract Creation Code

0x60a0604052348015600e575f5ffd5b503360805260805161091461003f5f395f818160c5015281816102350152818161033c015261050e01526109145ff3fe608060405234801561000f575f5ffd5b5060043610610085575f3560e01c8063b2e8ef1a11610058578063b2e8ef1a14610108578063c3543eb41461011d578063ea0a52371461013c578063fbd5b4e11461014f575f5ffd5b806306661abd14610089578063355d080c1461009f5780638da5cb5b146100c0578063a6f9885c146100ff575b5f5ffd5b5f545b6040519081526020015b60405180910390f35b6100b26100ad3660046105d4565b610157565b6040516100969291906105eb565b6100e77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610096565b61008c6107d081565b61011b6101163660046105d4565b61022a565b005b610125610306565b604080519215158352602083019190915201610096565b61011b61014a366004610647565b610331565b61011b610503565b60605f5f5f848154811061016d5761016d6106b5565b905f5260205f2090600202019050805f01816001015f9054906101000a900467ffffffffffffffff168180546101a2906106c9565b80601f01602080910402602001604051908101604052809291908181526020018280546101ce906106c9565b80156102195780601f106101f057610100808354040283529160200191610219565b820191905f5260205f20905b8154815290600101906020018083116101fc57829003601f168201915b505050505091509250925050915091565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461027b5760405162461bcd60e51b815260040161027290610701565b60405180910390fd5b5f5481106102cb5760405162461bcd60e51b815260206004820152601d60248201527f7468657265206973206e6f207375636820616e6e6f756e63656d656e740000006044820152606401610272565b6102d6816001610756565b60015560405181907fb64903528ebf1f4a978fdf1e1c9143752717fd769d1d8a3d4a7480662ca17ae6905f90a250565b5f5f6001545f0361031957505f91829150565b600180600154610329919061076f565b915091509091565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103b45760405162461bcd60e51b815260206004820152602260248201527f6f6e6c7920746865206f776e6572206d616b657320616e6e6f756e63656d656e604482015261747360f01b6064820152608401610272565b8080158015906103c657506107d08111155b61041d5760405162461bcd60e51b815260206004820152602260248201527f616e20616e6e6f756e63656d656e74206973203120746f203230303020627974604482015261657360f01b6064820152608401610272565b6040805160606020601f8601819004028201810183529181018481525f9282919087908790819085018382808284375f92018290525093855250505067ffffffffffffffff4216602092830152835460018101855593815220815191926002020190819061048b90826107e2565b50602091909101516001918201805467ffffffffffffffff191667ffffffffffffffff9092169190911790555f546104c3919061076f565b7f09860f29a8a5c8cd29d072ef35deb766af5abf3ad5af5defc29641f77e9a9ae08484426040516104f69392919061089d565b60405180910390a2505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461054b5760405162461bcd60e51b815260040161027290610701565b6001545f036105905760405162461bcd60e51b81526020600482015260116024820152701b9bdd1a1a5b99c81a5cc81c1a5b9b9959607a1b6044820152606401610272565b5f6001805461059f919061076f565b5f600181905560405191925082917fb85c52b0f39b83725c131bc80760a8947aa15414a0675577938193cc482b24019190a250565b5f602082840312156105e4575f5ffd5b5035919050565b604081525f83518060408401525f5b8181101561061757602081870181015160608684010152016105fa565b505f606082850101526060601f19601f83011684010191505067ffffffffffffffff831660208301529392505050565b5f5f60208385031215610658575f5ffd5b823567ffffffffffffffff81111561066e575f5ffd5b8301601f8101851361067e575f5ffd5b803567ffffffffffffffff811115610694575f5ffd5b8560208284010111156106a5575f5ffd5b6020919091019590945092505050565b634e487b7160e01b5f52603260045260245ffd5b600181811c908216806106dd57607f821691505b6020821081036106fb57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526021908201527f6f6e6c7920746865206f776e65722070696e7320616e6e6f756e63656d656e746040820152607360f81b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561076957610769610742565b92915050565b8181038181111561076957610769610742565b634e487b7160e01b5f52604160045260245ffd5b601f8211156107dd57805f5260205f20601f840160051c810160208510156107bb5750805b601f840160051c820191505b818110156107da575f81556001016107c7565b50505b505050565b815167ffffffffffffffff8111156107fc576107fc610782565b6108108161080a84546106c9565b84610796565b6020601f821160018114610842575f831561082b5750848201515b5f19600385901b1c1916600184901b1784556107da565b5f84815260208120601f198516915b828110156108715787850151825560209485019460019092019101610851565b508482101561088e57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b60408152826040820152828460608301375f606084830101525f6060601f19601f860116830101905067ffffffffffffffff8316602083015294935050505056fea264697066735822122093186dc82d26937d0c7096f8570609ce523a8345ac39054902ae2555dbaa1d2d64736f6c634300081c0033

Deployed ByteCode

0x608060405234801561000f575f5ffd5b5060043610610085575f3560e01c8063b2e8ef1a11610058578063b2e8ef1a14610108578063c3543eb41461011d578063ea0a52371461013c578063fbd5b4e11461014f575f5ffd5b806306661abd14610089578063355d080c1461009f5780638da5cb5b146100c0578063a6f9885c146100ff575b5f5ffd5b5f545b6040519081526020015b60405180910390f35b6100b26100ad3660046105d4565b610157565b6040516100969291906105eb565b6100e77f000000000000000000000000c8cd89650f12b8b565ba89307e072c10579f6aa681565b6040516001600160a01b039091168152602001610096565b61008c6107d081565b61011b6101163660046105d4565b61022a565b005b610125610306565b604080519215158352602083019190915201610096565b61011b61014a366004610647565b610331565b61011b610503565b60605f5f5f848154811061016d5761016d6106b5565b905f5260205f2090600202019050805f01816001015f9054906101000a900467ffffffffffffffff168180546101a2906106c9565b80601f01602080910402602001604051908101604052809291908181526020018280546101ce906106c9565b80156102195780601f106101f057610100808354040283529160200191610219565b820191905f5260205f20905b8154815290600101906020018083116101fc57829003601f168201915b505050505091509250925050915091565b336001600160a01b037f000000000000000000000000c8cd89650f12b8b565ba89307e072c10579f6aa6161461027b5760405162461bcd60e51b815260040161027290610701565b60405180910390fd5b5f5481106102cb5760405162461bcd60e51b815260206004820152601d60248201527f7468657265206973206e6f207375636820616e6e6f756e63656d656e740000006044820152606401610272565b6102d6816001610756565b60015560405181907fb64903528ebf1f4a978fdf1e1c9143752717fd769d1d8a3d4a7480662ca17ae6905f90a250565b5f5f6001545f0361031957505f91829150565b600180600154610329919061076f565b915091509091565b336001600160a01b037f000000000000000000000000c8cd89650f12b8b565ba89307e072c10579f6aa616146103b45760405162461bcd60e51b815260206004820152602260248201527f6f6e6c7920746865206f776e6572206d616b657320616e6e6f756e63656d656e604482015261747360f01b6064820152608401610272565b8080158015906103c657506107d08111155b61041d5760405162461bcd60e51b815260206004820152602260248201527f616e20616e6e6f756e63656d656e74206973203120746f203230303020627974604482015261657360f01b6064820152608401610272565b6040805160606020601f8601819004028201810183529181018481525f9282919087908790819085018382808284375f92018290525093855250505067ffffffffffffffff4216602092830152835460018101855593815220815191926002020190819061048b90826107e2565b50602091909101516001918201805467ffffffffffffffff191667ffffffffffffffff9092169190911790555f546104c3919061076f565b7f09860f29a8a5c8cd29d072ef35deb766af5abf3ad5af5defc29641f77e9a9ae08484426040516104f69392919061089d565b60405180910390a2505050565b336001600160a01b037f000000000000000000000000c8cd89650f12b8b565ba89307e072c10579f6aa6161461054b5760405162461bcd60e51b815260040161027290610701565b6001545f036105905760405162461bcd60e51b81526020600482015260116024820152701b9bdd1a1a5b99c81a5cc81c1a5b9b9959607a1b6044820152606401610272565b5f6001805461059f919061076f565b5f600181905560405191925082917fb85c52b0f39b83725c131bc80760a8947aa15414a0675577938193cc482b24019190a250565b5f602082840312156105e4575f5ffd5b5035919050565b604081525f83518060408401525f5b8181101561061757602081870181015160608684010152016105fa565b505f606082850101526060601f19601f83011684010191505067ffffffffffffffff831660208301529392505050565b5f5f60208385031215610658575f5ffd5b823567ffffffffffffffff81111561066e575f5ffd5b8301601f8101851361067e575f5ffd5b803567ffffffffffffffff811115610694575f5ffd5b8560208284010111156106a5575f5ffd5b6020919091019590945092505050565b634e487b7160e01b5f52603260045260245ffd5b600181811c908216806106dd57607f821691505b6020821081036106fb57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526021908201527f6f6e6c7920746865206f776e65722070696e7320616e6e6f756e63656d656e746040820152607360f81b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561076957610769610742565b92915050565b8181038181111561076957610769610742565b634e487b7160e01b5f52604160045260245ffd5b601f8211156107dd57805f5260205f20601f840160051c810160208510156107bb5750805b601f840160051c820191505b818110156107da575f81556001016107c7565b50505b505050565b815167ffffffffffffffff8111156107fc576107fc610782565b6108108161080a84546106c9565b84610796565b6020601f821160018114610842575f831561082b5750848201515b5f19600385901b1c1916600184901b1784556107da565b5f84815260208120601f198516915b828110156108715787850151825560209485019460019092019101610851565b508482101561088e57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b60408152826040820152828460608301375f606084830101525f6060601f19601f860116830101905067ffffffffffffffff8316602083015294935050505056fea264697066735822122093186dc82d26937d0c7096f8570609ce523a8345ac39054902ae2555dbaa1d2d64736f6c634300081c0033