Contract 0x10736ffaCe687658F88a46D042631d182C7757f7 1

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x721328c8036467e57e8d346ff5c2f75164186eae97e09c8f53fbf059b64bce020x6080604058564072022-02-11 13:25:54104 days 1 hr ago0xb5af4138f0f33be0d6414eb25271b9c2dc245fb5 IN  Create: MerkleSnapshot0 ETH0.003965253875 ETH
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x03fba1ece33dde26dce6b84558d259844785a19f6184b9a10580aad9e1216c37129861652022-05-26 10:42:444 hrs 32 mins ago 0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085 0x10736fface687658f88a46d042631d182c7757f70 ETH
0x110ab475155ced2e056fc7f47cfecbd5df7f8eb8f87a9373fa786510c46f54dd128778462022-05-24 18:57:251 day 20 hrs ago 0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085 0x10736fface687658f88a46d042631d182c7757f70 ETH
0x03cc00bad1cf83540e4b97c80e91517a9980293f5d5717b5b3d3fa0c23fb3bf0128631112022-05-24 14:06:552 days 1 hr ago 0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085 0x10736fface687658f88a46d042631d182c7757f70 ETH
0x135f46fb6351d159986b2d13723f9341f2c6e5e7dc539100f7233404438864df128339622022-05-24 5:47:312 days 9 hrs ago 0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085 0x10736fface687658f88a46d042631d182c7757f70 ETH
0xc5333752916afac447c35c509b83b73fda8dc5733ef2d09e1ea8387dfb88b3d3128102762022-05-23 20:51:352 days 18 hrs ago 0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085 0x10736fface687658f88a46d042631d182c7757f70 ETH
0xa93de52013605f037eef28e894992ce4bbf37be742aea43f3de0530f6c1a2b46127347622022-05-22 21:55:053 days 17 hrs ago 0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085 0x10736fface687658f88a46d042631d182c7757f70 ETH
0x9cc6c60da845df82d4644cae332dcd62b8459cfdaf29bc49121777b1cff35203127321872022-05-22 20:37:373 days 18 hrs ago 0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085 0x10736fface687658f88a46d042631d182c7757f70 ETH
0xff14ef88f56983c592728ba717fe40afa0c71bc7ff9726d32bd9162b3ef4da4a126550012022-05-21 17:46:254 days 21 hrs ago 0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085 0x10736fface687658f88a46d042631d182c7757f70 ETH
0xdad907816239864e5409dae6280d77d8f5901757aa00bf93bcff23357a0600ad126221982022-05-21 8:58:255 days 6 hrs ago 0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085 0x10736fface687658f88a46d042631d182c7757f70 ETH
0x5433d02fc68a29fa28357c3b972d49e36b3cdc0452a0429b94f5e38704c9dd61125792692022-05-20 17:38:125 days 21 hrs ago 0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085 0x10736fface687658f88a46d042631d182c7757f70 ETH
0x8e4b062310c68201a696b68324ae5ebd5097be6f715066fbc1c0fa7a2092bf35125097052022-05-19 20:43:136 days 18 hrs ago 0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085 0x10736fface687658f88a46d042631d182c7757f70 ETH
0xeacb31da5a651841c728d741166ab3f4fc84ad15ac7f31384518f561a76dd8f4124014702022-05-18 13:22:058 days 1 hr ago 0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085 0x10736fface687658f88a46d042631d182c7757f70 ETH
0xbc95e640ed7e0de7dcdcf21d41483ea1bc2d5aa3a4db18e7068bac2bfa05bd94123418342022-05-17 19:48:578 days 19 hrs ago 0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085 0x10736fface687658f88a46d042631d182c7757f70 ETH
0x526ce9a6aa91625e8f3f735ec96ba6a33cbf0daf071bb4a86cddd2d7e595f77e123369672022-05-17 18:22:518 days 20 hrs ago 0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085 0x10736fface687658f88a46d042631d182c7757f70 ETH
0x75be440f3400f89e688df8122210f1729175acb9b113634f1d41f9b921d4d942121526912022-05-15 18:00:4510 days 21 hrs ago 0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085 0x10736fface687658f88a46d042631d182c7757f70 ETH
0x0209b627ce2bf27552941488cc25138d43061f26bb45f4b20d066a05a4e27f53121199492022-05-15 9:24:4611 days 5 hrs ago 0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085 0x10736fface687658f88a46d042631d182c7757f70 ETH
0x490fe3202896c2a62a3a3558c6ca3b162143cb2ce7743e34a5fe1568afebfd42121063852022-05-15 6:03:0111 days 9 hrs ago 0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085 0x10736fface687658f88a46d042631d182c7757f70 ETH
0xd0bfb757a7393c158bb840bb3ea349414b711426e97bceeb35b2294bd62344c8120847282022-05-14 22:37:1011 days 16 hrs ago 0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085 0x10736fface687658f88a46d042631d182c7757f70 ETH
0x2e9db21df705b739c36851691bd885e08c714447bd13731eba3b98d645e9c75c120813592022-05-14 21:08:3111 days 18 hrs ago 0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085 0x10736fface687658f88a46d042631d182c7757f70 ETH
0x341f0ab818e51d93f18378444b6f90b126a78e1fe32b36d553796c6307482c6f120804412022-05-14 20:43:1911 days 18 hrs ago 0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085 0x10736fface687658f88a46d042631d182c7757f70 ETH
0xbbe8f1f8dab49d1141b6034af06799f463a04add39288998c14cbd655c4b405b120011342022-05-13 19:57:1212 days 19 hrs ago 0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085 0x10736fface687658f88a46d042631d182c7757f70 ETH
0x8363f224a45df46a0b7abe778a3ab4b4ad3c1c59a1b24e2a0e6110f03d4e6e85118749622022-05-12 6:16:0114 days 8 hrs ago 0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085 0x10736fface687658f88a46d042631d182c7757f70 ETH
0x2f2f05d6c8bfe7079dbe14ae1eee81084a94cefcade41aab9bdfd70e4aaf86c2116706272022-05-10 5:30:5116 days 9 hrs ago 0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085 0x10736fface687658f88a46d042631d182c7757f70 ETH
0xabfa266e0d1218b9f40efeff37223f98a73df1ebfc7f8ac1475294dafc1acd18116322632022-05-09 19:42:0616 days 19 hrs ago 0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085 0x10736fface687658f88a46d042631d182c7757f70 ETH
0xdb1c804bd13975b74515662bd380f3cf583f355c6385e307d5a6076fddc26621116236232022-05-09 17:48:2216 days 21 hrs ago 0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085 0x10736fface687658f88a46d042631d182c7757f70 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MerkleSnapshot

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 7 : IController.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

import "./zeppelin/Pausable.sol";

abstract contract IController is Pausable {
    event SetContractInfo(bytes32 id, address contractAddress, bytes20 gitCommitHash);

    function setContractInfo(
        bytes32 _id,
        address _contractAddress,
        bytes20 _gitCommitHash
    ) external virtual;

    function updateController(bytes32 _id, address _controller) external virtual;

    function getContract(bytes32 _id) public view virtual returns (address);
}

File 2 of 7 : IManager.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

interface IManager {
    event SetController(address controller);
    event ParameterUpdate(string param);

    function setController(address _controller) external;
}

File 3 of 7 : Manager.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

import "./IManager.sol";
import "./IController.sol";

contract Manager is IManager {
    // Controller that contract is registered with
    IController public controller;

    // Check if sender is controller
    modifier onlyController() {
        _onlyController();
        _;
    }

    // Check if sender is controller owner
    modifier onlyControllerOwner() {
        _onlyControllerOwner();
        _;
    }

    // Check if controller is not paused
    modifier whenSystemNotPaused() {
        _whenSystemNotPaused();
        _;
    }

    // Check if controller is paused
    modifier whenSystemPaused() {
        _whenSystemPaused();
        _;
    }

    constructor(address _controller) {
        controller = IController(_controller);
    }

    /**
     * @notice Set controller. Only callable by current controller
     * @param _controller Controller contract address
     */
    function setController(address _controller) external onlyController {
        controller = IController(_controller);

        emit SetController(_controller);
    }

    function _onlyController() private view {
        require(msg.sender == address(controller), "caller must be Controller");
    }

    function _onlyControllerOwner() private view {
        require(msg.sender == controller.owner(), "caller must be Controller owner");
    }

    function _whenSystemNotPaused() private view {
        require(!controller.paused(), "system is paused");
    }

    function _whenSystemPaused() private view {
        require(controller.paused(), "system is not paused");
    }
}

File 4 of 7 : MerkleSnapshot.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

import "../zeppelin/MerkleProof.sol";
import "../Manager.sol";

contract MerkleSnapshot is Manager {
    mapping(bytes32 => bytes32) public snapshot;

    constructor(address _controller) Manager(_controller) {}

    function setSnapshot(bytes32 _id, bytes32 _root) external onlyControllerOwner {
        snapshot[_id] = _root;
    }

    function verify(
        bytes32 _id,
        bytes32[] calldata _proof,
        bytes32 _leaf
    ) external view returns (bool) {
        return MerkleProof.verify(_proof, snapshot[_id], _leaf);
    }
}

File 5 of 7 : MerkleProof.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

/**
 * @dev These functions deal with verification of Merkle trees (hash trees),
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        bytes32 computedHash = leaf;

        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];

            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }
        }

        // Check if the computed hash (root) is equal to the provided root
        return computedHash == root;
    }
}

File 6 of 7 : Ownable.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
    address public owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev The Ownable constructor sets the original `owner` of the contract to the sender
     * account.
     */
    constructor() {
        owner = msg.sender;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    /**
     * @dev Allows the current owner to transfer control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0));
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }
}

File 7 of 7 : Pausable.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

import "./Ownable.sol";

/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is Ownable {
    event Pause();
    event Unpause();

    bool public paused;

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     */
    modifier whenNotPaused() {
        require(!paused);
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     */
    modifier whenPaused() {
        require(paused);
        _;
    }

    /**
     * @dev called by the owner to pause, triggers stopped state
     */
    function pause() public onlyOwner whenNotPaused {
        paused = true;
        emit Pause();
    }

    /**
     * @dev called by the owner to unpause, returns to normal state
     */
    function unpause() public onlyOwner whenPaused {
        paused = false;
        emit Unpause();
    }
}

Settings
{
  "evmVersion": "london",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_controller","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"param","type":"string"}],"name":"ParameterUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"controller","type":"address"}],"name":"SetController","type":"event"},{"inputs":[],"name":"controller","outputs":[{"internalType":"contract IController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_controller","type":"address"}],"name":"setController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"},{"internalType":"bytes32","name":"_root","type":"bytes32"}],"name":"setSnapshot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"snapshot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"},{"internalType":"bytes32","name":"_leaf","type":"bytes32"}],"name":"verify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b506040516105e63803806105e683398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b610553806100936000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630a02831c1461005c5780631ac79c41146100845780635824adf4146100b257806392eefe9b146100c7578063f77c4791146100da575b600080fd5b61006f61006a3660046103c5565b610105565b60405190151581526020015b60405180910390f35b6100a461009236600461044a565b60016020526000908152604090205481565b60405190815260200161007b565b6100c56100c0366004610463565b61015b565b005b6100c56100d536600461049d565b610175565b6000546100ed906001600160a01b031681565b6040516001600160a01b03909116815260200161007b565b600061015284848080602002602001604051908101604052809392919081815260200183836020028082843760009201829052508a81526001602052604090205492508691506101d19050565b95945050505050565b610163610280565b60009182526001602052604090912055565b61017d61036b565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f709060200160405180910390a150565b600081815b85518110156102755760008682815181106101f3576101f36104c1565b60200260200101519050808311610235576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250610262565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b508061026d816104d7565b9150506101d6565b509092149392505050565b60008054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156102cc57600080fd5b505afa1580156102e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103049190610500565b6001600160a01b0316336001600160a01b0316146103695760405162461bcd60e51b815260206004820152601f60248201527f63616c6c6572206d75737420626520436f6e74726f6c6c6572206f776e65720060448201526064015b60405180910390fd5b565b6000546001600160a01b031633146103695760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206d75737420626520436f6e74726f6c6c6572000000000000006044820152606401610360565b600080600080606085870312156103db57600080fd5b84359350602085013567ffffffffffffffff808211156103fa57600080fd5b818701915087601f83011261040e57600080fd5b81358181111561041d57600080fd5b8860208260051b850101111561043257600080fd5b95986020929092019750949560400135945092505050565b60006020828403121561045c57600080fd5b5035919050565b6000806040838503121561047657600080fd5b50508035926020909101359150565b6001600160a01b038116811461049a57600080fd5b50565b6000602082840312156104af57600080fd5b81356104ba81610485565b9392505050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156104f957634e487b7160e01b600052601160045260246000fd5b5060010190565b60006020828403121561051257600080fd5b81516104ba8161048556fea26469706673582212202da4c90c63220e0d052d25f4ca91345e2094ec9200198586debdb9e16f6a666a64736f6c63430008090033000000000000000000000000d8e8328501e9645d16cf49539efc04f734606ee4

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000d8e8328501e9645d16cf49539efc04f734606ee4

-----Decoded View---------------
Arg [0] : _controller (address): 0xd8e8328501e9645d16cf49539efc04f734606ee4

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000d8e8328501e9645d16cf49539efc04f734606ee4


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.