Contract 0xe57dad9c809c5ff0162b17d220917089d4cc7075 6

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x1bb77056c366ecdf10e5047f252247a1d4ef0c520b2efbee30a49dd5f4a940e8Daily Log(pending)2022-01-29 11:13:161 sec ago0xaef6960bf5300646f8017d7d0fcb68bca019a7f7 IN 0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC(Pending)
0x0eab8b5cce6bcb911b41b86e1ac335956c793cb96aca3f3f0905eb81658705bfDaily Log243014372022-01-29 11:13:0215 secs ago0xfa3b7ffb5e59f3657c4c886d342f76ce482a538f IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.000092929653 1.650000059
0x2f40a1dcf5b2b1cbd3a9c39b761c6985b5ae9bbdac34e8a4f98a78d411846260Daily Log243014372022-01-29 11:13:0215 secs ago0x495e5c1021ce12c2d5a959d43c544335b29412b3 IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.000092929653 1.650000063
0x8c940bb914dba8cc2d18d1ac490c92da01f8c4aeed7f1966e32f1d1b04345f33Daily Log243014372022-01-29 11:13:0215 secs ago0x2b3245b3a497e1ae56b801be2ee3e4e8c05b5565 IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.000092929653 1.650000064
0x32e952ad5bfa5f2e87386e30f7b8ccaf57f8eb89197b8841446aa7de63898cf9Daily Log243014362022-01-29 11:13:0017 secs ago0xb144f1b91b7e508f1f4f1a8ef6c9b32ac3c9e60e IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.0000929296531.650000058
0x1ad2b2d206e624bcbfb36f3a1bf1acc576806ea47543ef75e872da07331c8d5eDaily Log243014362022-01-29 11:13:0017 secs ago0x77ce31c78877bd8017248895a2f3b9c9e8655f6a IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.000092929653 1.650000058
0x05b06fa74764d55f38b434df0322425fb732d86b3640050e27dd8666a9410274Daily Log243014362022-01-29 11:13:0017 secs ago0xcfc222708cd6a191b11ec4526094d48bb0bd002c IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.000092929653 1.650000061
0x3452ce5ad5a26aef0004f4be58a64bc8d0653473f533e6939e57974e7b022a98Daily Log243014352022-01-29 11:12:5819 secs ago0xa4c3fc9b2414ef9f911cb01e2f7ddebf84782a95 IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.000092929653 1.650000059
0xf17ca926f831f058fd0ad855e95c2593ca742a656dfad5d1c3dcb38c2b08bd20Daily Log243014332022-01-29 11:12:5423 secs ago0x5d786900611f5293dc5fc0b1c393da25ce42104b IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.00015023627 2.667500062
0x3ad4a6a522b988cc4494a54edf438ddf96f1ba3a32afcb7baab7e9cd2e2660beDaily Log243014302022-01-29 11:12:4829 secs ago0x6d4213ea14d5a6019aacb05614dc3aeebee49d76 IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.000103378384 1.410000065
0xa827b508f7e64f54270090633eabfa59db970c4c9f1d8f8f1889696e34832fe3Daily Log243014302022-01-29 11:12:4829 secs ago0x0491c4f860d61aa77022607b10880fbf468a20ad IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.00010598486 1.881800054
0x9422a4219761409848fe1363d16db459906590218c6e9191ae154694524e9745Daily Log243014282022-01-29 11:12:4433 secs ago0xdd8771a6db7becf2f4e84f680bcb6e8d9061e50b IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.00015023627 2.667500062
0x5ed3508cf88f39adfd7df351099b8d5f6940a7564cb8f8d0401dd8c8d6ddc80dDaily Log243014252022-01-29 11:12:3839 secs ago0xed0a48b0931f4fe599500ab541f12383f0db278a IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.000092929653 1.650000068
0xb4e8747ba21c7a85eb120320d48917c5669af6ac97d30c6aa435fc6ccc2d96b7Daily Log243014242022-01-29 11:12:3641 secs ago0x2a7df37403a2557362707fe62332ac5f5247b2d3 IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.000092929653 1.650000061
0x083940650a4a200fdb9db25cfe840f78410f50faf702beed7364587622cc969fDaily Log243014242022-01-29 11:12:3641 secs ago0xcc32dc6c22ebe7d222a5c5f5118816b51199c91f IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.000911638661 33.116777888
0xc8e220e9eaf0a5bdcd917aec60a3ec53e65cc4c858bb846c50b79f3ff6583080Daily Log243014242022-01-29 11:12:3641 secs ago0xcc32dc6c22ebe7d222a5c5f5118816b51199c91f IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.000092929653 1.650000067
0x8d6cd84ec1b947628cbc74d9f6d8a05a2fb9f3f6acdfa66f4d94c417f534633aDaily Log243014232022-01-29 11:12:3443 secs ago0xcf3e8bf9d1823c7ce8814f45e4179de2e37eaf5c IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.000092929653 1.650000067
0x1d446318f1f2791153205cb9b6baeb9e56f65994867d02ac84bdcfd0e4270061Daily Log243014232022-01-29 11:12:3443 secs ago0x2d515c0cafe5e08296f82e3799050b41663fdfa7 IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.000092929653 1.65000007
0xe2b306ffcdaf033a3513a94a5ebd0cc160771ce8cd318c78cefeaf3c203b957aDaily Log243014222022-01-29 11:12:3245 secs ago0xb10f18998dd2cebe912673c71f1c410f22eb4058 IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.000092929653 1.650000067
0x5bb37950d7ae2310dfc78c96b945988ca425c1c69a7b223b8129a6cd4cc62dccDaily Log243014192022-01-29 11:12:2651 secs ago0xf6d8ed6c169cc8c27ea10853d94732b5a28d4891 IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.000092929654 1.650000083
0xe02ded6700f821cd197c24cb1b644dfe3c63b95ecd92c911997d338de836f01dDaily Log243014192022-01-29 11:12:2651 secs ago0xd385a2b3890c364282235ab824105b636096f48b IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.001857849564 32.986800035
0x438c182e9fd1283a835f4fe2dea63921007f21c52ca8dfff5b83b629d1887dbeDaily Log243014132022-01-29 11:12:141 min ago0x43c8f1c2fe65b7af2735157c45de32ad3cc5b69d IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.00189049381 33.566410582
0x277215b0b9afb729b0cb7ea16a13c0894fd6dffd25b54152b9fd1780d1008c76Daily Log243014122022-01-29 11:12:121 min ago0x1800adb30bc0e599ad92d0f1bd0761dab2494ee1 IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.0001548827542.750000088
0x59fe3899f8cdbd4c455c9d51ff70c78e0f2ee19845372b1db499b4dca0f8fd6aDaily Log243014112022-01-29 11:12:101 min ago0xcea8e64d2d11242ed2bb8e1aadb66396b55db960 IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.001838891917 32.650200051
0xa42e22d95bb5d7e2518b21efd5710daf920cdd836335cedb666c5e13631d242aDaily Log243014102022-01-29 11:12:081 min ago0xac469b4ddaa2ce5481ebaa682860b9033d5782b3 IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.000084481504 1.500000072
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
StarChestRewardsTracker

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 2000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2021-11-24
*/

// Sources flattened with hardhat v2.6.4 https://hardhat.org

// File @openzeppelin/contracts/utils/[email protected]

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


// File @openzeppelin/contracts/access/[email protected]

pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}


// File @openzeppelin/contracts/utils/[email protected]

pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor () internal {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}


// File @openzeppelin/contracts/math/[email protected]

pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) return (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) return 0;
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        return a - b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryDiv}.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a % b;
    }
}


// File contracts/metatx/EIP712Base.sol
pragma solidity >=0.7.6;

contract EIP712Base {
    struct EIP712Domain {
        string name;
        string version;
        address verifyingContract;
        bytes32 salt;
    }

    bytes32 internal constant EIP712_DOMAIN_TYPEHASH =
        keccak256(bytes("EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)"));

    bytes32 internal domainSeparator;

    constructor(string memory name, string memory version) {
        domainSeparator = keccak256(
            abi.encode(EIP712_DOMAIN_TYPEHASH, keccak256(bytes(name)), keccak256(bytes(version)), address(this), bytes32(getChainID()))
        );
    }

    function getChainID() internal pure returns (uint256 id) {
        assembly {
            id := chainid()
        }
    }

    function getDomainSeparator() private view returns (bytes32) {
        return domainSeparator;
    }

    /**
     * Accept message hash and returns hash message in EIP712 compatible form
     * So that it can be used to recover signer from signature signed using EIP712 formatted data
     * https://eips.ethereum.org/EIPS/eip-712
     * "\\x19" makes the encoding deterministic
     * "\\x01" is the version byte to make it compatible to EIP-191
     */
    function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) {
        return keccak256(abi.encodePacked("\x19\x01", getDomainSeparator(), messageHash));
    }
}


// File contracts/metatx/EIP712MetaTransaction.sol
pragma solidity >=0.7.6;

//import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v3.4.0/contracts/math/SafeMath.sol";

abstract contract EIP712MetaTransaction is EIP712Base {
    using SafeMath for uint256;
    bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(bytes("MetaTransaction(uint256 nonce,address from,bytes functionSignature)"));

    event MetaTransactionExecuted(address userAddress, address payable relayerAddress, bytes functionSignature);

    mapping(address => uint256) private nonces;

    /*
     * Meta transaction structure.
     * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas
     * He should call the desired function directly in that case.
     */
    struct MetaTransaction {
        uint256 nonce;
        address from;
        bytes functionSignature;
    }

    constructor(string memory name, string memory version) EIP712Base(name, version) {}

    function convertBytesToBytes4(bytes memory inBytes) internal pure returns (bytes4 outBytes4) {
        if (inBytes.length == 0) {
            return 0x0;
        }

        assembly {
            outBytes4 := mload(add(inBytes, 32))
        }
    }

    function executeMetaTransaction(
        address userAddress,
        bytes memory functionSignature,
        bytes32 sigR,
        bytes32 sigS,
        uint8 sigV
    ) external returns (bytes memory) {
        bytes4 destinationFunctionSig = convertBytesToBytes4(functionSignature);
        require(destinationFunctionSig != msg.sig, "functionSignature can not be of executeMetaTransaction method");
        MetaTransaction memory metaTx = MetaTransaction({nonce: nonces[userAddress], from: userAddress, functionSignature: functionSignature});
        require(verify(userAddress, metaTx, sigR, sigS, sigV), "Signer and signature do not match");
        nonces[userAddress] = nonces[userAddress].add(1);
        // Append userAddress at the end to extract it from calling context
        (bool success, bytes memory returnData) = address(this).call(abi.encodePacked(functionSignature, userAddress));

        require(success, "Function call not successful");
        emit MetaTransactionExecuted(userAddress, msg.sender, functionSignature);
        return returnData;
    }

    function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) {
        return keccak256(abi.encode(META_TRANSACTION_TYPEHASH, metaTx.nonce, metaTx.from, keccak256(metaTx.functionSignature)));
    }

    function getNonce(address user) external view returns (uint256 nonce) {
        nonce = nonces[user];
    }

    function verify(
        address user,
        MetaTransaction memory metaTx,
        bytes32 sigR,
        bytes32 sigS,
        uint8 sigV
    ) internal view returns (bool) {
        address signer = ecrecover(toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS);
        require(signer != address(0), "Invalid signature");
        return signer == user;
    }

    function msgSender() internal view returns (address sender) {
        if (msg.sender == address(this)) {
            bytes memory array = msg.data;
            uint256 index = msg.data.length;
            assembly {
                // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.
                sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)
            }
        } else {
            sender = msg.sender;
        }
        return sender;
    }
}


// File contracts/dailyRewards/StarChestRewardsTracker.sol

pragma solidity >=0.7.6 <=0.8.0;


//import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v3.4.0/contracts/access/Ownable.sol";
//import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v3.4.0/contracts/utils/Pausable.sol";

contract StarChestRewardsTracker is Ownable, Pausable, EIP712MetaTransaction {
    /**
     * Event emitted when user does daily check-in.
     * @param userAddress the address of the account which records check-in activity.
     * @param blockTimestamp the timestamp when transaction completed.
     * @param uniqueUuid the unique identifier for user for a day provided by the server.
     */
    event DailyTrackerCheckInDone(address userAddress, uint256 blockTimestamp, string uniqueUuid);

    /*
     * Mapping for tracking last timestamp when transaction for check-in was done
     *      Account Address => number of days for current block timestamp
     */
    mapping(address => uint256) public _dailyTrackerTimestampDays;

    /*
     * Mapping for tracking unique UUID of the user from server.
     * This could be used to validate txns from server.
     */
    mapping(string => address) public _dailyUserUuid;

    constructor(string memory _name, string memory _version) EIP712MetaTransaction(_name, _version) {}

    /*
     * @dev Function to get current number of days for a given block timestamp.
     * @return uint256 number of days for a given block timestamp.
     */
    function currentDaysTimestamp() internal view returns (uint256) {
        return block.timestamp / 60 / 60 / 24;
    }

    /*
     * Check if user has already checked-in today.
     * @return true if user has already checked-in today.
     */
    function checkDailyTimestampValidity() public view returns (bool) {
        return checkDailyTimestampValidity(_msgSender());
    }

    /*
     * Check if user can still check-in for daily rewards or not.
     * Set transaction block timestamp for use on next txn.
     * Check-in Transaction is validated only after 24 hrs
     *
     * @param userAddress the address of the account which records check-in activity.
     * @return true if user can check-in for daily rewards, false otherwise.
     */
    function checkDailyTimestampValidity(address userAddress) public view returns (bool) {
        uint256 lastTimestampDays = _dailyTrackerTimestampDays[userAddress];

        if (lastTimestampDays == 0 || lastTimestampDays < currentDaysTimestamp()) {
            return true;
        }
        return false;
    }

    /*
     * Check if user with uniqueUuid has already checked-in today.
     * @params uniqueUuid the unique identifier for user for a day provided by the server.
     * @returns true if user has already checked-in.
     */
    function checkDailyUuidValidity(string memory uniqueUuid) public view returns (bool) {
        if (_dailyUserUuid[uniqueUuid] != address(0)) {
            return false;
        }
        return true;
    }

    /*
     * Check-in method where user sends unique uuid from the server to log.
     * Stores timestamp of last checkin, so user could checkin only after 24 hrs.
     * also stores uuid generated from server for validating transaction originated from CDH.
     *
     * @param uniqueUuid the unique identifier for user for a day provided by the server.
     * @emi event DailyTrackerCheckInDone
     */
    function dailyLog(string calldata uniqueUuid) external whenNotPaused {
        require(checkDailyTimestampValidity(), "Checkin already done.");
        require(checkDailyUuidValidity(uniqueUuid), "Checkin Id already used.");

        address msgSender = _msgSender();
        _dailyTrackerTimestampDays[msgSender] = currentDaysTimestamp();
        _dailyUserUuid[uniqueUuid] = msgSender;

        emit DailyTrackerCheckInDone(msgSender, block.timestamp, uniqueUuid);
    }

    /*
     * @dev Get message sender's address signing transaction.
     */
    function _msgSender() internal view override returns (address payable) {
        return payable(msgSender());
    }

    /*
     * @dev Pause contract that is tracking daily check-in activity.
     */
    function pause() external onlyOwner {
        _pause();
    }

    /*
     * @dev Un-pause contract that is tracking daily check-in activity.
     */
    function unpause() external onlyOwner {
        _unpause();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_version","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"blockTimestamp","type":"uint256"},{"indexed":false,"internalType":"string","name":"uniqueUuid","type":"string"}],"name":"DailyTrackerCheckInDone","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"address payable","name":"relayerAddress","type":"address"},{"indexed":false,"internalType":"bytes","name":"functionSignature","type":"bytes"}],"name":"MetaTransactionExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_dailyTrackerTimestampDays","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"_dailyUserUuid","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"checkDailyTimestampValidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkDailyTimestampValidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"uniqueUuid","type":"string"}],"name":"checkDailyUuidValidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"uniqueUuid","type":"string"}],"name":"dailyLog","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"bytes","name":"functionSignature","type":"bytes"},{"internalType":"bytes32","name":"sigR","type":"bytes32"},{"internalType":"bytes32","name":"sigS","type":"bytes32"},{"internalType":"uint8","name":"sigV","type":"uint8"}],"name":"executeMetaTransaction","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getNonce","outputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040516200180d3803806200180d833981810160405260408110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b50604052505050818181816000620001b5620002ad60201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000805460ff60a01b191690556040805160808101909152604f808252620017be60208301398051906020012082805190602001208280519060200120306200024d620002bf60201b60201c565b60001b60405160200180868152602001858152602001848152602001836001600160a01b03168152602001828152602001955050505050506040516020818303038152906040528051906020012060018190555050505050505062000321565b6000620002b9620002c3565b90505b90565b4690565b6000333014156200031c57600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b03169150620002bc9050565b503390565b61148d80620003316000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638456cb591161008c578063bab6e81e11610066578063bab6e81e146103ac578063c003a94f1461041c578063d462e65214610424578063f2fde38b146104ca576100ea565b80638456cb59146103765780638da5cb5b1461037e578063b06030be14610386576100ea565b80633ca8a0d4116100c85780633ca8a0d4146103225780633f4ba83a1461035c5780635c975abb14610366578063715018a61461036e576100ea565b80630c53c51c146100ef57806312e13cca146102285780632d0335ab146102ea575b600080fd5b6101b3600480360360a081101561010557600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561013057600080fd5b82018360208201111561014257600080fd5b8035906020019184600183028401116401000000008311171561016457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550508235935050506020810135906040013560ff166104f0565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101ed5781810151838201526020016101d5565b50505050905090810190601f16801561021a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102ce6004803603602081101561023e57600080fd5b81019060208101813564010000000081111561025957600080fd5b82018360208201111561026b57600080fd5b8035906020019184600183028401116401000000008311171561028d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610868945050505050565b604080516001600160a01b039092168252519081900360200190f35b6103106004803603602081101561030057600080fd5b50356001600160a01b031661088e565b60408051918252519081900360200190f35b6103486004803603602081101561033857600080fd5b50356001600160a01b03166108a9565b604080519115158252519081900360200190f35b6103646108ef565b005b61034861096d565b61036461098f565b610364610a5a565b6102ce610ad6565b6103106004803603602081101561039c57600080fd5b50356001600160a01b0316610ae5565b610364600480360360208110156103c257600080fd5b8101906020810181356401000000008111156103dd57600080fd5b8201836020820111156103ef57600080fd5b8035906020019184600183028401116401000000008311171561041157600080fd5b509092509050610af7565b610348610d3b565b6103486004803603602081101561043a57600080fd5b81019060208101813564010000000081111561045557600080fd5b82018360208201111561046757600080fd5b8035906020019184600183028401116401000000008311171561048957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610d52945050505050565b610364600480360360208110156104e057600080fd5b50356001600160a01b0316610dff565b606060006104fd86610f20565b90506000357fffffffff0000000000000000000000000000000000000000000000000000000090811690821614156105665760405162461bcd60e51b815260040180806020018281038252603d8152602001806113fa603d913960400191505060405180910390fd5b604080516060810182526001600160a01b038916600081815260026020908152908490205483528201529081018790526105a38882888888610f3c565b6105de5760405162461bcd60e51b81526004018080602001828103825260218152602001806114376021913960400191505060405180910390fd5b6001600160a01b038816600090815260026020526040902054610602906001611032565b600260008a6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600080306001600160a01b0316898b6040516020018083805190602001908083835b6020831061066c5780518252601f19909201916020918201910161064d565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106106e25780518252601f1990920191602091820191016106c3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610744576040519150601f19603f3d011682016040523d82523d6000602084013e610749565b606091505b5091509150816107a0576040805162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000604482015290519081900360640190fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8a338b60405180846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561081f578181015183820152602001610807565b50505050905090810190601f16801561084c5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a19998505050505050505050565b80516020818301810180516004825292820191909301209152546001600160a01b031681565b6001600160a01b031660009081526002602052604090205490565b6001600160a01b0381166000908152600360205260408120548015806108d557506108d2611093565b81105b156108e45760019150506108ea565b60009150505b919050565b6108f76110b1565b6001600160a01b0316610908610ad6565b6001600160a01b031614610963576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61096b6110bb565b565b60005474010000000000000000000000000000000000000000900460ff165b90565b6109976110b1565b6001600160a01b03166109a8610ad6565b6001600160a01b031614610a03576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36000805473ffffffffffffffffffffffffffffffffffffffff19169055565b610a626110b1565b6001600160a01b0316610a73610ad6565b6001600160a01b031614610ace576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61096b611182565b6000546001600160a01b031690565b60036020526000908152604090205481565b610aff61096d565b15610b51576040805162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b610b59610d3b565b610baa576040805162461bcd60e51b815260206004820152601560248201527f436865636b696e20616c726561647920646f6e652e0000000000000000000000604482015290519081900360640190fd5b610be982828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610d5292505050565b610c3a576040805162461bcd60e51b815260206004820152601860248201527f436865636b696e20496420616c726561647920757365642e0000000000000000604482015290519081900360640190fd5b6000610c446110b1565b9050610c4e611093565b60036000836001600160a01b03166001600160a01b03168152602001908152602001600020819055508060048484604051808383808284379190910194855250506040805160209481900385018120805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0397881617905594861685524293850184905260609085018181529085018790527f2a5027905e5bec087df40ec0f819f8b617d6b6660dbc2e851c13ad783393b2879486949350889250879160808201848480828437600083820152604051601f909101601f191690920182900397509095505050505050a1505050565b6000610d4d610d486110b1565b6108a9565b905090565b6000806001600160a01b03166004836040518082805190602001908083835b60208310610d905780518252601f199092019160209182019101610d71565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790529201948552506040519384900301909220546001600160a01b0316929092149150610df79050575060006108ea565b506001919050565b610e076110b1565b6001600160a01b0316610e18610ad6565b6001600160a01b031614610e73576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116610eb85760405162461bcd60e51b81526004018080602001828103825260268152602001806113d46026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000815160001415610f34575060006108ea565b506020015190565b6000806001610f52610f4d88611244565b6112c7565b84878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610fa9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611011576040805162461bcd60e51b815260206004820152601160248201527f496e76616c6964207369676e6174757265000000000000000000000000000000604482015290519081900360640190fd5b866001600160a01b0316816001600160a01b03161491505095945050505050565b60008282018381101561108c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60006018603c804204816110a357fe5b04816110ab57fe5b04905090565b6000610d4d61132e565b6110c361096d565b611114576040805162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6111656110b1565b604080516001600160a01b039092168252519081900360200190a1565b61118a61096d565b156111dc576040805162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586111656110b1565b600060405180608001604052806043815260200161139160439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b60006112d161138a565b8260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60003330141561138557600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b0316915061098c9050565b503390565b6001549056fe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e6174757265294f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737366756e6374696f6e5369676e61747572652063616e206e6f74206265206f6620657865637574654d6574615472616e73616374696f6e206d6574686f645369676e657220616e64207369676e617475726520646f206e6f74206d61746368a2646970667358221220acb7d5f5d5ed0c549153b26d8aede293a933165d82f940251e3b4b6f597ca3d364736f6c63430007060033454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c6164647265737320766572696679696e67436f6e74726163742c627974657333322073616c742900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001753746172436865737452657761726473547261636b65720000000000000000000000000000000000000000000000000000000000000000000000000000000003312e300000000000000000000000000000000000000000000000000000000000

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

00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001753746172436865737452657761726473547261636b65720000000000000000000000000000000000000000000000000000000000000000000000000000000003312e300000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): StarChestRewardsTracker
Arg [1] : _version (string): 1.0

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000017
Arg [3] : 53746172436865737452657761726473547261636b6572000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [5] : 312e300000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

18691:4197:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15971:1093;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15971:1093:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15971:1093:0;;-1:-1:-1;;15971:1093:0;;;-1:-1:-1;;;15971:1093:0;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19583:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19583:48:0;;-1:-1:-1;19583:48:0;;-1:-1:-1;;;;;19583:48:0:i;:::-;;;;-1:-1:-1;;;;;19583:48:0;;;;;;;;;;;;;;17310:109;;;;;;;;;;;;;;;;-1:-1:-1;17310:109:0;-1:-1:-1;;;;;17310:109:0;;:::i;:::-;;;;;;;;;;;;;;;;20687:318;;;;;;;;;;;;;;;;-1:-1:-1;20687:318:0;-1:-1:-1;;;;;20687:318:0;;:::i;:::-;;;;;;;;;;;;;;;;;;22818:67;;;:::i;:::-;;4502:86;;;:::i;2857:148::-;;;:::i;22657:63::-;;;:::i;2206:87::-;;;:::i;19373:61::-;;;;;;;;;;;;;;;;-1:-1:-1;19373:61:0;-1:-1:-1;;;;;19373:61:0;;:::i;21876:481::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21876:481:0;;-1:-1:-1;21876:481:0;-1:-1:-1;21876:481:0;:::i;20168:133::-;;;:::i;21244:210::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21244:210:0;;-1:-1:-1;21244:210:0;;-1:-1:-1;;;;;21244:210:0:i;3160:244::-;;;;;;;;;;;;;;;;-1:-1:-1;3160:244:0;-1:-1:-1;;;;;3160:244:0;;:::i;15971:1093::-;16166:12;16191:29;16223:39;16244:17;16223:20;:39::i;:::-;16191:71;-1:-1:-1;16307:7:0;;;;;;16281:33;;;;;16273:107;;;;-1:-1:-1;;;16273:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16423:102;;;;;;;;-1:-1:-1;;;;;16447:19:0;;16391:29;16447:19;;;:6;:19;;;;;;;;;16423:102;;;;;;;;;;;16544:45;16454:11;16423:102;16572:4;16578;16584;16544:6;:45::i;:::-;16536:91;;;;-1:-1:-1;;;16536:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16660:19:0;;;;;;:6;:19;;;;;;:26;;16684:1;16660:23;:26::i;:::-;16638:6;:19;16645:11;-1:-1:-1;;;;;16638:19:0;-1:-1:-1;;;;;16638:19:0;;;;;;;;;;;;:48;;;;16775:12;16789:23;16824:4;-1:-1:-1;;;;;16816:18:0;16852:17;16871:11;16835:48;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16835:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16835:48:0;;;;;;;;;;;;;;;;;;;;;;;16816:68;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16816:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16774:110;;;;16905:7;16897:48;;;;;-1:-1:-1;;;16897:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16961:67;16985:11;16998:10;17010:17;16961:67;;;;-1:-1:-1;;;;;16961:67:0;;;;;;-1:-1:-1;;;;;16961:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17046:10;15971:1093;-1:-1:-1;;;;;;;;;15971:1093:0:o;19583:48::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19583:48:0;;:::o;17310:109::-;-1:-1:-1;;;;;17399:12:0;17365:13;17399:12;;;:6;:12;;;;;;;17310:109::o;20687:318::-;-1:-1:-1;;;;;20811:39:0;;20766:4;20811:39;;;:26;:39;;;;;;20867:22;;;:68;;;20913:22;:20;:22::i;:::-;20893:17;:42;20867:68;20863:112;;;20959:4;20952:11;;;;;20863:112;20992:5;20985:12;;;20687:318;;;;:::o;22818:67::-;2437:12;:10;:12::i;:::-;-1:-1:-1;;;;;2426:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2426:23:0;;2418:68;;;;;-1:-1:-1;;;2418:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22867:10:::1;:8;:10::i;:::-;22818:67::o:0;4502:86::-;4549:4;4573:7;;;;;;4502:86;;:::o;2857:148::-;2437:12;:10;:12::i;:::-;-1:-1:-1;;;;;2426:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2426:23:0;;2418:68;;;;;-1:-1:-1;;;2418:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2964:1:::1;2948:6:::0;;2927:40:::1;::::0;-1:-1:-1;;;;;2948:6:0;;::::1;::::0;2927:40:::1;::::0;2964:1;;2927:40:::1;2995:1;2978:19:::0;;-1:-1:-1;;2978:19:0::1;::::0;;2857:148::o;22657:63::-;2437:12;:10;:12::i;:::-;-1:-1:-1;;;;;2426:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2426:23:0;;2418:68;;;;;-1:-1:-1;;;2418:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22704:8:::1;:6;:8::i;2206:87::-:0;2252:7;2279:6;-1:-1:-1;;;;;2279:6:0;2206:87;:::o;19373:61::-;;;;;;;;;;;;;:::o;21876:481::-;4828:8;:6;:8::i;:::-;4827:9;4819:38;;;;;-1:-1:-1;;;4819:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21964:29:::1;:27;:29::i;:::-;21956:63;;;::::0;;-1:-1:-1;;;21956:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;22038:34;22061:10;;22038:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;22038:22:0::1;::::0;-1:-1:-1;;;22038:34:0:i:1;:::-;22030:71;;;::::0;;-1:-1:-1;;;22030:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;22114:17;22134:12;:10;:12::i;:::-;22114:32;;22197:22;:20;:22::i;:::-;22157:26;:37;22184:9;-1:-1:-1::0;;;;;22157:37:0::1;-1:-1:-1::0;;;;;22157:37:0::1;;;;;;;;;;;;:62;;;;22259:9;22230:14;22245:10;;22230:26;;;;;;;;;::::0;;;::::1;::::0;;;-1:-1:-1;;22230:26:0::1;::::0;;::::1;::::0;;;;;;;;:38;;-1:-1:-1;;22230:38:0::1;-1:-1:-1::0;;;;;22230:38:0;;::::1;;::::0;;22286:63;;::::1;::::0;;22321:15:::1;22286:63:::0;;::::1;::::0;;;;;;;;;;;;;;;;::::1;::::0;;;22321:15;-1:-1:-1;22338:10:0;;-1:-1:-1;22286:63:0;;;;;22338:10;22286:63;;22338:10;22286:63;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;22286:63:0::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;22286:63:0;;-1:-1:-1;;;;;;22286:63:0::1;4868:1;21876:481:::0;;:::o;20168:133::-;20228:4;20252:41;20280:12;:10;:12::i;:::-;20252:27;:41::i;:::-;20245:48;;20168:133;:::o;21244:210::-;21323:4;21382:1;-1:-1:-1;;;;;21344:40:0;:14;21359:10;21344:26;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21344:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21344:26:0;;;;;;;;;;;-1:-1:-1;;;;;21344:26:0;:40;;;;;-1:-1:-1;21340:85:0;;-1:-1:-1;21340:85:0;-1:-1:-1;21408:5:0;21401:12;;21340:85;-1:-1:-1;21442:4:0;21244:210;;;:::o;3160:244::-;2437:12;:10;:12::i;:::-;-1:-1:-1;;;;;2426:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2426:23:0;;2418:68;;;;;-1:-1:-1;;;2418:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3249:22:0;::::1;3241:73;;;;-1:-1:-1::0;;;3241:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3351:6;::::0;;3330:38:::1;::::0;-1:-1:-1;;;;;3330:38:0;;::::1;::::0;3351:6;::::1;::::0;3330:38:::1;::::0;::::1;3379:6;:17:::0;;-1:-1:-1;;3379:17:0::1;-1:-1:-1::0;;;;;3379:17:0;;;::::1;::::0;;;::::1;::::0;;3160:244::o;15707:256::-;15782:16;15815:7;:14;15833:1;15815:19;15811:62;;;-1:-1:-1;15858:3:0;15851:10;;15811:62;-1:-1:-1;15941:2:0;15928:16;15922:23;;15894:62::o;17427:387::-;17603:4;17620:14;17637:76;17647:47;17666:27;17686:6;17666:19;:27::i;:::-;17647:18;:47::i;:::-;17696:4;17702;17708;17637:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17637:76:0;;-1:-1:-1;;17637:76:0;;;-1:-1:-1;;;;;;;17732:20:0;;17724:50;;;;;-1:-1:-1;;;17724:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17802:4;-1:-1:-1;;;;;17792:14:0;:6;-1:-1:-1;;;;;17792:14:0;;17785:21;;;17427:387;;;;;;;:::o;8489:179::-;8547:7;8579:5;;;8603:6;;;;8595:46;;;;;-1:-1:-1;;;8595:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8659:1;8489:179;-1:-1:-1;;;8489:179:0:o;19912:120::-;19967:7;20022:2;20017;;19994:15;:20;:25;;;;;;:30;;;;;;19987:37;;19912:120;:::o;22445:117::-;22499:15;22542:11;:9;:11::i;5561:120::-;5105:8;:6;:8::i;:::-;5097:41;;;;;-1:-1:-1;;;5097:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5630:5:::1;5620:15:::0;;;::::1;::::0;;5651:22:::1;5660:12;:10;:12::i;:::-;5651:22;::::0;;-1:-1:-1;;;;;5651:22:0;;::::1;::::0;;;;;;;::::1;::::0;;::::1;5561:120::o:0;5302:118::-;4828:8;:6;:8::i;:::-;4827:9;4819:38;;;;;-1:-1:-1;;;4819:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5362:7:::1;:14:::0;;;::::1;::::0;::::1;::::0;;5392:20:::1;5399:12;:10;:12::i;17072:230::-:0;17155:7;15004:76;;;;;;;;;;;;;;;;;14994:87;;;;;;17230:6;:12;;;17244:6;:11;;;17267:6;:24;;;17257:35;;;;;;17192:101;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17192:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17182:112;;;;;;17175:119;;17072:230;;;:::o;14467:181::-;14539:7;14605:20;:18;:20::i;:::-;14627:11;14576:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14566:74;;;;;;14559:81;;14467:181;;;:::o;17822:540::-;17866:14;17897:10;17919:4;17897:27;17893:438;;;17941:18;17962:8;;17941:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;18001:8:0;18190:17;18184:24;-1:-1:-1;;;;;18180:73:0;;-1:-1:-1;18040:228:0;;-1:-1:-1;18040:228:0;;-1:-1:-1;18309:10:0;17822:540;:::o;13996:102::-;14075:15;;13996:102;:::o

Swarm Source

ipfs://acb7d5f5d5ed0c549153b26d8aede293a933165d82f940251e3b4b6f597ca3d3
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.