false
false
0
- We're indexing this chain right now. Some of the counts may be inaccurate.

Contract Address Details

0x2a862FC0E768f19b4c409ff4903126F2e8727428

Contract Name
PopAnchor
Creator
0x4b6fc8–4556f1 at 0x74fdea–b4ca56
Balance
0 Zero Chill Units
Tokens
Fetching tokens...
Transactions
Fetching transactions...
Transfers
Fetching transfers...
Gas Used
Fetching gas used...
Last Balance Update
53468
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
PopAnchor




Optimization enabled
true
Compiler version
v0.8.26+commit.8a97fa7a




Optimization runs
200
EVM Version
paris




Verified at
2026-10-27T22:12:45.901255Z

Constructor Arguments

0x00000000000000000000000074197aeedf843ba4a72fc9cc0111905645b2ebe3

 Arg [0] (<b>address</b>) : <a href="{#{address_path(@conn, :show, @address)}}">0x74197aeedf843ba4a72fc9cc0111905645b2ebe3</a>
              

PopAnchor.sol

// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;

/// @title PopAnchor — Merkle-root anchor for Zero Chill game runs and Proof of Play results.
/// @notice Holds no funds, has no upgrade path. Only `poster` can post roots; only `owner`
///         can rotate the poster or hand over ownership.
contract PopAnchor {
    address public owner;
    address public poster;
    uint256 public seq;
    mapping(uint8 => bytes32) private _latestRoot;

    event RootPosted(
        uint256 indexed seq,
        bytes32 indexed root,
        uint8 indexed kind,
        uint64 windowStart,
        uint64 windowEnd,
        uint32 leafCount,
        bytes32 prevRoot
    );
    event PosterChanged(address indexed previousPoster, address indexed newPoster);
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    error NotOwner();
    error NotPoster();
    error ZeroAddress();
    error BadKind();
    error BadWindow();
    error EmptyRoot();
    error PrevRootMismatch(bytes32 expected, bytes32 given);

    constructor(address initialPoster) {
        if (initialPoster == address(0)) revert ZeroAddress();
        owner = msg.sender;
        poster = initialPoster;
        emit OwnershipTransferred(address(0), msg.sender);
        emit PosterChanged(address(0), initialPoster);
    }

    /// @param kind 1 = game runs, 2 = PoP results, 3 = backfill
    function postRoot(
        bytes32 root,
        uint64 windowStart,
        uint64 windowEnd,
        uint32 leafCount,
        uint8 kind,
        bytes32 prevRoot
    ) external {
        if (msg.sender != poster) revert NotPoster();
        if (kind < 1 || kind > 3) revert BadKind();
        if (root == bytes32(0) || leafCount == 0) revert EmptyRoot();
        if (windowEnd < windowStart) revert BadWindow();
        bytes32 last = _latestRoot[kind];
        if (prevRoot != last) revert PrevRootMismatch(last, prevRoot);
        _latestRoot[kind] = root;
        unchecked { seq += 1; }
        emit RootPosted(seq, root, kind, windowStart, windowEnd, leafCount, prevRoot);
    }

    function latestRoot(uint8 kind) external view returns (bytes32) {
        return _latestRoot[kind];
    }

    function setPoster(address newPoster) external {
        if (msg.sender != owner) revert NotOwner();
        if (newPoster == address(0)) revert ZeroAddress();
        emit PosterChanged(poster, newPoster);
        poster = newPoster;
    }

    function transferOwnership(address newOwner) external {
        if (msg.sender != owner) revert NotOwner();
        if (newOwner == address(0)) revert ZeroAddress();
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }
}
        

Compiler Settings

{"outputSelection":{"*":{"*":["*"],"":["*"]}},"optimizer":{"runs":200,"enabled":true},"metadata":{"bytecodeHash":"ipfs"},"libraries":{},"evmVersion":"paris"}
              

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"initialPoster","internalType":"address"}]},{"type":"error","name":"BadKind","inputs":[]},{"type":"error","name":"BadWindow","inputs":[]},{"type":"error","name":"EmptyRoot","inputs":[]},{"type":"error","name":"NotOwner","inputs":[]},{"type":"error","name":"NotPoster","inputs":[]},{"type":"error","name":"PrevRootMismatch","inputs":[{"type":"bytes32","name":"expected","internalType":"bytes32"},{"type":"bytes32","name":"given","internalType":"bytes32"}]},{"type":"error","name":"ZeroAddress","inputs":[]},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"PosterChanged","inputs":[{"type":"address","name":"previousPoster","internalType":"address","indexed":true},{"type":"address","name":"newPoster","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"RootPosted","inputs":[{"type":"uint256","name":"seq","internalType":"uint256","indexed":true},{"type":"bytes32","name":"root","internalType":"bytes32","indexed":true},{"type":"uint8","name":"kind","internalType":"uint8","indexed":true},{"type":"uint64","name":"windowStart","internalType":"uint64","indexed":false},{"type":"uint64","name":"windowEnd","internalType":"uint64","indexed":false},{"type":"uint32","name":"leafCount","internalType":"uint32","indexed":false},{"type":"bytes32","name":"prevRoot","internalType":"bytes32","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"latestRoot","inputs":[{"type":"uint8","name":"kind","internalType":"uint8"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"postRoot","inputs":[{"type":"bytes32","name":"root","internalType":"bytes32"},{"type":"uint64","name":"windowStart","internalType":"uint64"},{"type":"uint64","name":"windowEnd","internalType":"uint64"},{"type":"uint32","name":"leafCount","internalType":"uint32"},{"type":"uint8","name":"kind","internalType":"uint8"},{"type":"bytes32","name":"prevRoot","internalType":"bytes32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"poster","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"seq","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPoster","inputs":[{"type":"address","name":"newPoster","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]}]
              

Contract Creation Code

0x608060405234801561001057600080fd5b5060405161066838038061066883398101604081905261002f916100e7565b6001600160a01b0381166100565760405163d92e233d60e01b815260040160405180910390fd5b60008054336001600160a01b031991821681178355600180549092166001600160a01b038516179091556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36040516001600160a01b038216906000907f32487a31d5a41d672510a2a1aa50e214e52d5d25fd9a9e94dfa66f4349f8840f908290a350610117565b6000602082840312156100f957600080fd5b81516001600160a01b038116811461011057600080fd5b9392505050565b610542806101266000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063809597211161005b57806380959721146100c65780638da5cb5b146100f1578063ed4685ac14610104578063f2fde38b1461012757600080fd5b80634cbdaca0146100825780636857ab401461009757806373bbb71c146100b3575b600080fd5b61009561009036600461044e565b61013a565b005b6100a060025481565b6040519081526020015b60405180910390f35b6100956100c13660046104c1565b6102c5565b6001546100d9906001600160a01b031681565b6040516001600160a01b0390911681526020016100aa565b6000546100d9906001600160a01b031681565b6100a06101123660046104f1565b60ff1660009081526003602052604090205490565b6100956101353660046104c1565b610373565b6001546001600160a01b0316331461016557604051630edd024760e11b815260040160405180910390fd5b60018260ff16108061017a575060038260ff16115b156101985760405163015a1a6160e51b815260040160405180910390fd5b8515806101a9575063ffffffff8316155b156101c7576040516329e7276760e11b815260040160405180910390fd5b8467ffffffffffffffff168467ffffffffffffffff1610156101fc57604051632a0c9bb560e11b815260040160405180910390fd5b60ff821660009081526003602052604090205481811461023d57604051632a533a6d60e21b8152600481018290526024810183905260440160405180910390fd5b60ff83166000818152600360209081526040918290208a90556002805460010190819055825167ffffffffffffffff8b811682528a169281019290925263ffffffff8816828401526060820186905291518a92917f0a5ef99accb113919ce56c54260590c5e6b1da3393520d3634a9b87c3757c02f919081900360800190a450505050505050565b6000546001600160a01b031633146102f0576040516330cd747160e01b815260040160405180910390fd5b6001600160a01b0381166103175760405163d92e233d60e01b815260040160405180910390fd5b6001546040516001600160a01b038084169216907f32487a31d5a41d672510a2a1aa50e214e52d5d25fd9a9e94dfa66f4349f8840f90600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461039e576040516330cd747160e01b815260040160405180910390fd5b6001600160a01b0381166103c55760405163d92e233d60e01b815260040160405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b803567ffffffffffffffff8116811461043857600080fd5b919050565b803560ff8116811461043857600080fd5b60008060008060008060c0878903121561046757600080fd5b8635955061047760208801610420565b945061048560408801610420565b9350606087013563ffffffff8116811461049e57600080fd5b92506104ac6080880161043d565b9598949750929591949360a090920135925050565b6000602082840312156104d357600080fd5b81356001600160a01b03811681146104ea57600080fd5b9392505050565b60006020828403121561050357600080fd5b6104ea8261043d56fea264697066735822122052a94d87552d561907998bb245ad6112883a497df7fd5867bbbef284a15f8b9c64736f6c634300081a003300000000000000000000000074197aeedf843ba4a72fc9cc0111905645b2ebe3

Deployed ByteCode

0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063809597211161005b57806380959721146100c65780638da5cb5b146100f1578063ed4685ac14610104578063f2fde38b1461012757600080fd5b80634cbdaca0146100825780636857ab401461009757806373bbb71c146100b3575b600080fd5b61009561009036600461044e565b61013a565b005b6100a060025481565b6040519081526020015b60405180910390f35b6100956100c13660046104c1565b6102c5565b6001546100d9906001600160a01b031681565b6040516001600160a01b0390911681526020016100aa565b6000546100d9906001600160a01b031681565b6100a06101123660046104f1565b60ff1660009081526003602052604090205490565b6100956101353660046104c1565b610373565b6001546001600160a01b0316331461016557604051630edd024760e11b815260040160405180910390fd5b60018260ff16108061017a575060038260ff16115b156101985760405163015a1a6160e51b815260040160405180910390fd5b8515806101a9575063ffffffff8316155b156101c7576040516329e7276760e11b815260040160405180910390fd5b8467ffffffffffffffff168467ffffffffffffffff1610156101fc57604051632a0c9bb560e11b815260040160405180910390fd5b60ff821660009081526003602052604090205481811461023d57604051632a533a6d60e21b8152600481018290526024810183905260440160405180910390fd5b60ff83166000818152600360209081526040918290208a90556002805460010190819055825167ffffffffffffffff8b811682528a169281019290925263ffffffff8816828401526060820186905291518a92917f0a5ef99accb113919ce56c54260590c5e6b1da3393520d3634a9b87c3757c02f919081900360800190a450505050505050565b6000546001600160a01b031633146102f0576040516330cd747160e01b815260040160405180910390fd5b6001600160a01b0381166103175760405163d92e233d60e01b815260040160405180910390fd5b6001546040516001600160a01b038084169216907f32487a31d5a41d672510a2a1aa50e214e52d5d25fd9a9e94dfa66f4349f8840f90600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461039e576040516330cd747160e01b815260040160405180910390fd5b6001600160a01b0381166103c55760405163d92e233d60e01b815260040160405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b803567ffffffffffffffff8116811461043857600080fd5b919050565b803560ff8116811461043857600080fd5b60008060008060008060c0878903121561046757600080fd5b8635955061047760208801610420565b945061048560408801610420565b9350606087013563ffffffff8116811461049e57600080fd5b92506104ac6080880161043d565b9598949750929591949360a090920135925050565b6000602082840312156104d357600080fd5b81356001600160a01b03811681146104ea57600080fd5b9392505050565b60006020828403121561050357600080fd5b6104ea8261043d56fea264697066735822122052a94d87552d561907998bb245ad6112883a497df7fd5867bbbef284a15f8b9c64736f6c634300081a0033
<script src="{@file}"> </script>