Contract 0xe57dad9c809c5ff0162b17d220917089d4cc7075 8

 
 
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0xf9510a38f7270e09f74d2d47a7862468dc0c798a7eafb80943c680ae61c68e71Daily Log407906402023-03-26 13:02:404 mins ago0x53b69fdce131c5c887abfc24e8d5684a65a72db7 IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.019544504609 347.019843573
0x6201f48b4f8bd630a37d3afac128eb164caf917922d48aff34d0741cf1c6013cDaily Log407905572023-03-26 12:58:388 mins ago0xe77a194e113435a2c08efb6d4d49b62602f0583a IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.014215315069 252.398129817
0x6bda2238f16abe2fcd2f4cb5837eb65c73a2080f94905893f33f43342bbb6babDaily Log407905282023-03-26 12:57:389 mins ago0x7cff3e90c4332d581f5692e8a0a9b5b5396b2535 IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.018040736603 320.319891401
0x8502fada99d0b8ba06ce6d91bbcc2f662a5ef864396276baa7095f74be2728b9Daily Log407905202023-03-26 12:57:209 mins ago0x30d97bd441e064a18a0bf6e93a5a84e4eda97e39 IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.019327913496 343.174188965
0x086aedb5e63ee9643b8f985a9c07face218b38e9d1a5f0629ce2a5084a9c0a22Daily Log407905112023-03-26 12:57:0010 mins ago0x97c3b121c6d27ae48e45787a495939a9215be42d IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.021355029682 379.166379901
0xfb639db9aa7c86711473f3da4bc94c4d9cc7b2cf9584812047626c7697088501Daily Log407905002023-03-26 12:55:5411 mins ago0x6a0513491df6ad8e7ddf72d835c5cfeba6428637 IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.014424896469 256.119324407
0x84caf719b197ae9dc848d85cd762e839516831e9640d150e617fd6b14ee680a2Daily Log407904872023-03-26 12:55:0611 mins ago0x1c8f6919a9af4114230a46c8438cb3a9e005dfb8 IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.014089678498 250.167406445
0x628542c2b93713c3ca5518f795fabf6459d057e47019b508ab31bdebb254c808Daily Log407904752023-03-26 12:54:3212 mins ago0xf06480888416c09531560bcc61578a2426f71900 IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.01316318412 233.717159152
0x4b6bf3ccfdcd7347d6ccafd518ec56868537424980d113f3795ec4322ff10382Daily Log407904542023-03-26 12:53:2413 mins ago0xdcc2b50a452303a1f9018cba26a3be055edd28c7 IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.009826253892 174.468739769
0xffb913bc874899ac34a3610bda7626bb5bfe12a29ad4163e9cde868fc9f32e07Daily Log407904362023-03-26 12:52:4614 mins ago0xfe33115db718ef63ed5bdb220ce8f6afbb053e5b IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.01328483412 235.877099498
0x3f80194c126465a66029df011def7dea0c1ff49ec6e003be46f826a622bf864cDaily Log407904252023-03-26 12:52:2214 mins ago0xa72345f47dbc59b88aa4570654e7d3a044b98e4d IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.013848006298 245.876427949
0x443b732a9ba900209bfac7014b74b022742a0b24f54adf59c3280b2ef20536f7Daily Log407904112023-03-26 12:51:5215 mins ago0x6b884becb350103647a05ee0b59ce7468bcd05be IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.014847168314 263.616915792
0xf7e39aeba14b75982a39909d111cda825ff62a83b0bf281b6d55d28610d5e67dDaily Log407904102023-03-26 12:51:5015 mins ago0x1b69e59b88c8d6389e36cb8a56d4be5215b000fd IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.015191246332 269.726147137
0x534fe241d9d4502c51e32b2faf43bc6e9f702a5051931a9286528fa806f874efDaily Log407903832023-03-26 12:50:5216 mins ago foxbit77.nft  IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.017561929559 311.818496816
0x59d6a9fa87342e4d2e4f7ac54657edaf4749045e4aa0479d26a452e0799bbe78Daily Log407903822023-03-26 12:50:4616 mins ago0x757d7c30b0435bc5588e1b466f442c3f3d1c8c2b IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.017515004032 310.985316885
0xb91b044c23dbc02192aeef0d74d989452560b1cb95667a761669e4728c4c5574Daily Log407903732023-03-26 12:49:5217 mins ago0x57e1457bf9b03b32b36363676a26da35d694bb76 IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.011908563545 211.440910956
0x39f2c1b91bfb0804223699213d11bc8e53a8030024f0638f74ee6a58a6f2c37fDaily Log407903712023-03-26 12:49:4017 mins ago0x747e625e3b6c9648da33479b74cadb411b5f613e IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.010747023918 190.817349105
0x549d8cf75d7e11a66975f6c7f095badb48f0912a23d4d4a89e5237135d347505Daily Log407903242023-03-26 12:47:4419 mins ago0x48a043fd64a6902bcff2cddf64595810a08360b4 IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.010211583149 181.310401964
0xc03670d09a4d5417fd45943c45befaf95c17d4b5b378213004e2ca7bf912cc29Daily Log407903132023-03-26 12:47:2019 mins ago0x485a33aca16d619cc41dc0564c52df2d5f0f47a5 IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.009997015564 177.500675842
0xec70e85bb988ae3d421c8dafafd867cc3dcdcab0f5ae9787093aa7e5321122b6Daily Log407902892023-03-26 12:46:3020 mins ago0xe0c47abea945481026992f11b21c953eb558e640 IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.014038613296 249.260725062
0xc8d201ce1ba0e691904d68d7f03bbab11798b192632e028deb49067f7789f68eDaily Log407902562023-03-26 12:45:2021 mins ago0x1e10e58f3e409b5c8862e7e55aee78e71dd6902a IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.020076821311 356.471321739
0x88156580763fe57cb367bb40586948a8cfcc3604e5c55033bc3f419b2f5845bfDaily Log407902482023-03-26 12:44:3422 mins ago0x31a283e02c7460783ed1328d72973633063bb8d8 IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.013098905197 232.575863307
0xbfa029fe6a3da82321ae9851def1e75ca3c24ee34e99192b964e3990f7de47f7Daily Log407902102023-03-26 12:42:3824 mins ago0x583fa7573e11426c6f040915bf2333e47173d9f9 IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.011735600348 208.369885981
0x8a704200797e115817e368534a7647c8953ea4d5e908da490fab3d03944ef96bDaily Log407901872023-03-26 12:41:4825 mins ago0x0d13e14512b9728dd545832cdd748c4289ec0cbf IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.014898214164 264.523253572
0xe26d778c6bf7879d50685c2611a17050db0cf858e8b763675066957cb22c245bDaily Log407901762023-03-26 12:41:2625 mins ago0x52c26b3e0d22a8162d009d0646e14b076b5e492b IN  0xe57dad9c809c5ff0162b17d220917089d4cc70750 MATIC0.015748045277 279.6123165
[ 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.