Contract 0x9C04d75924fd2e06c5d8fa986e4DE1bd11342735

 
 
Txn Hash
Method
Block
From
To
Value
0x1624e74d1689805ba5021ca3f8ef7425cf2b0a64396f013a9b70906ea0278ed7Grant Role156227592022-09-27 5:58:4764 days 2 hrs agoENS Name collarquest.eth IN  0x9c04d75924fd2e06c5d8fa986e4de1bd113427350 Ether0.00039169 7.60902957
0x72c48c26dd5e7e23c39d995d947778564361cd883eda09b3474fdc07b8024c1cGrant Role156227452022-09-27 5:55:5964 days 2 hrs agoENS Name collarquest.eth IN  0x9c04d75924fd2e06c5d8fa986e4de1bd113427350 Ether0.00038488 7.47683391
0x47ad2ea790647ab217ffdc723204eb4c08999f6cc8b0cc3d450484fae5cf30a90x60806040154891062022-09-07 7:45:3784 days 20 mins agoENS Name collarquest.eth IN  Create: Battle0 Ether0.02187755 11.6120691
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Battle

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-07
*/

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

interface IAccessControl {
    /**
     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
     *
     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
     * {RoleAdminChanged} not being emitted signaling this.
     *
     * _Available since v3.1._
     */
    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);

    /**
     * @dev Emitted when `account` is granted `role`.
     *
     * `sender` is the account that originated the contract call, an admin role
     * bearer except when using {AccessControl-_setupRole}.
     */
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Emitted when `account` is revoked `role`.
     *
     * `sender` is the account that originated the contract call:
     *   - if using `revokeRole`, it is the admin role bearer
     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)
     */
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) external view returns (bool);

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {AccessControl-_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) external view returns (bytes32);

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function grantRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function revokeRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been granted `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `account`.
     */
    function renounceRole(bytes32 role, address account) external;
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
    
    function mint( address account, uint256 amount) external;

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC721 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

abstract contract AccessControl is Context, IAccessControl {
    struct RoleData {
        mapping(address => bool) members;
        bytes32 adminRole;
    }

    mapping(bytes32 => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    /**
     * @dev Modifier that checks that an account has a specific role. Reverts
     * with a standardized message including the required role.
     *
     * The format of the revert reason is given by the following regular expression:
     *
     *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
     *
     * _Available since v4.1._
     */
    modifier onlyRole(bytes32 role) {
        _checkRole(role, _msgSender());
        _;
    }

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) public view override returns (bool) {
        return _roles[role].members[account];
    }

    /**
     * @dev Revert with a standard message if `account` is missing `role`.
     *
     * The format of the revert reason is given by the following regular expression:
     *
     *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
     */
    function _checkRole(bytes32 role, address account) internal view {
        if (!hasRole(role, account)) {
            revert(
                string(
                    abi.encodePacked(
                        "AccessControl: account ",
                        Strings.toHexString(uint160(account), 20),
                        " is missing role ",
                        Strings.toHexString(uint256(role), 32)
                    )
                )
            );
        }
    }

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) public view override returns (bytes32) {
        return _roles[role].adminRole;
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(DEFAULT_ADMIN_ROLE)) {
        _grantRole(role, account);
    }

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(DEFAULT_ADMIN_ROLE)) {
        _revokeRole(role, account);
    }

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been granted `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `account`.
     */
    function renounceRole(bytes32 role, address account) public virtual override {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");

        _revokeRole(role, account);
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event. Note that unlike {grantRole}, this function doesn't perform any
     * checks on the calling account.
     *
     * [WARNING]
     * ====
     * This function should only be called from the constructor when setting
     * up the initial roles for the system.
     *
     * Using this function in any other way is effectively circumventing the admin
     * system imposed by {AccessControl}.
     * ====
     */
    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    /**
     * @dev Sets `adminRole` as ``role``'s admin role.
     *
     * Emits a {RoleAdminChanged} event.
     */
    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        bytes32 previousAdminRole = getRoleAdmin(role);
        _roles[role].adminRole = adminRole;
        emit RoleAdminChanged(role, previousAdminRole, adminRole);
    }

    function _grantRole(bytes32 role, address account) private {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }

    function _revokeRole(bytes32 role, address account) private {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

abstract contract Validator {
    using ECDSA for bytes32;
    
    bytes32 public constant SIGNATURE_PERMIT_TYPEHASH = keccak256("validateSig(address _owner, uint _amount, uint _nonce, uint _deadline, bytes memory signature)");
    uint public chainId;
    
    struct ValidatorInfo {
        uint nonce;
        mapping(bytes => bool) signature;
    }
    
    mapping(address => ValidatorInfo) validateInfo;
    
    constructor() {
        uint _chainId;
        assembly {
            _chainId := chainid()
        }
        
        chainId = _chainId;
    }
    
    function validateSig(address _owner, uint _amount, uint _nonce, uint _deadline, bytes memory signature) public view returns (address){
      // This recreates the message hash that was signed on the client.
      bytes32 hash = keccak256(abi.encodePacked(SIGNATURE_PERMIT_TYPEHASH, _owner, _amount, _nonce, chainId, _deadline));
      bytes32 messageHash = hash.toSignedMessageHash();
    
      // Verify that the message's signer is the owner of the order
      return messageHash.recover(signature);
    }
}

library ECDSA {

  /**
   * @dev Recover signer address from a message by using their signature
   * @param hash bytes32 message, the hash is the signed message. What is recovered is the signer address.
   * @param signature bytes signature, the signature is generated using web3.eth.sign()
   */
  function recover(bytes32 hash, bytes memory signature)
    internal
    pure
    returns (address)
  {
    bytes32 r;
    bytes32 s;
    uint8 v;

    // Check the signature length
    if (signature.length != 65) {
      return (address(0));
    }

    // Divide the signature in r, s and v variables with inline assembly.
    assembly {
      r := mload(add(signature, 0x20))
      s := mload(add(signature, 0x40))
      v := byte(0, mload(add(signature, 0x60)))
    }

    // Version of signature should be 27 or 28, but 0 and 1 are also possible versions
    if (v < 27) {
      v += 27;
    }

    // If the version is correct return the signer address
    if (v != 27 && v != 28) {
      return (address(0));
    } else {
      // solium-disable-next-line arg-overflow
      return ecrecover(hash, v, r, s);
    }
  }

  /**
    * toEthSignedMessageHash
    * @dev prefix a bytes32 value with "\x19Ethereum Signed Message:"
    * and hash the result
    */
  function toSignedMessageHash(bytes32 hash)
    internal
    pure
    returns (bytes32)
  {
    return keccak256(
      abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)
    );
  }
}

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

contract Battle is AccessControl, Validator {
    event BattleReward( address indexed _winner, uint _amount);
    event Claim( address indexed _account, uint _amount);
    
    IERC721 public SPARCE;
    IERC20 public GeM;
    
    bytes32 public constant ADMIN_ROLE = keccak256("ADMIN_ROLE");
    bytes32 public constant BATTLE_MANAGER_ONE = keccak256("BATTLE_MANAGER_ONE");
    bytes32 public constant BATTLE_MANAGER_TWO = keccak256("BATTLE_MANAGER_TWO");
    bytes32 public constant BLACKLIST = keccak256("BLACKLIST");
    
    address[2] public managers;
    uint maxClaimLimit;
    uint public claimTimeStamp = 2 weeks;
    
    struct UserInfo {
        uint reward;
        uint totalReward;
        uint lastClaim;
    }
    
    mapping(address => UserInfo) public userInfo;
    
    constructor( IERC721 sparce, IERC20 gem, address battleManagerOne, address battleManagerTwo) {
        _setRoleAdmin(DEFAULT_ADMIN_ROLE, ADMIN_ROLE);
        _setupRole(ADMIN_ROLE,_msgSender());
        _setupRole(BATTLE_MANAGER_ONE, battleManagerOne);
        _setupRole(BATTLE_MANAGER_TWO, battleManagerTwo);
        
        SPARCE = sparce;
        GeM = gem;
        
        managers[0] = battleManagerOne;
        managers[1] = battleManagerTwo;
        
        validateInfo[battleManagerOne].nonce = 10e18*(10**3)/100e18;
        validateInfo[battleManagerTwo].nonce = 10e18*(10**5)/100e18;
    }

    function setSPARCE( IERC721 sparce)  external onlyRole(getRoleAdmin(DEFAULT_ADMIN_ROLE)) {
        SPARCE = sparce;
    }
    
    function setGeM( IERC20 gem)  external onlyRole(getRoleAdmin(DEFAULT_ADMIN_ROLE)) {
        GeM = gem;
    }

    function setMaxClaimLimit( uint _maxClaimLimit) external onlyRole(getRoleAdmin(DEFAULT_ADMIN_ROLE)) {
        require(_maxClaimLimit > 0, "setMaxClaimLimit : _maxClaimLimit should not be zero");
        maxClaimLimit = _maxClaimLimit;
    }
    
    function setClaimTimeStamp( uint _claimTimeStamp) external onlyRole(getRoleAdmin(DEFAULT_ADMIN_ROLE)) {
        require(_claimTimeStamp > 0, "setClaimTimeStamp : _claimTimeStamp should not be zero");
        claimTimeStamp = _claimTimeStamp;
    }
    
    function battleReward( uint _reward, uint _deadline,  bytes[2] memory _signature) external {
        require(SPARCE.balanceOf(_msgSender()) > 0, "battleReward : no balance of sparce");
        require(_reward > 0, "battleReward : _reward should not be zero");
        require(!this.isSigned(managers[0],_signature[0]), "battleReward : manager one signature already signature");
        require(!this.isSigned(managers[1],_signature[1]), "battleReward : manager two signature already signature");
        require(hasRole(BATTLE_MANAGER_ONE,validateSig( _msgSender(), _reward, ++validateInfo[managers[0]].nonce, _deadline, _signature[0])), "battleReward : manager one signature validation failed");
        require(hasRole(BATTLE_MANAGER_TWO,validateSig( _msgSender(), _reward, ++validateInfo[managers[1]].nonce, _deadline, _signature[1])), "battleReward : manager one signature validation failed");
        
        validateInfo[managers[0]].signature[_signature[0]] = true;
        validateInfo[managers[1]].signature[_signature[1]] = true;
        
        userInfo[_msgSender()].reward += _reward;
        userInfo[_msgSender()].totalReward += _reward;
        
        if(userInfo[_msgSender()].lastClaim == 0) userInfo[_msgSender()].lastClaim = block.timestamp;
        
        emit BattleReward( _msgSender(), _reward);
    }
    
    function claim( uint _amount) external {
        require(!hasRole(BLACKLIST, _msgSender()), "claim : claimer listed on the blacklist");
        require((_amount > 0) && (_amount <= userInfo[_msgSender()].reward), "claim : _amount should not be zero or _amount may exceed claimable amount");
        require((_amount <= maxClaimLimit) || (maxClaimLimit == 0), "claim : exceed maxClaimLimit limit");
        require((userInfo[_msgSender()].lastClaim + claimTimeStamp) <= block.timestamp, "claim : has to wait till claim period");
        
        userInfo[_msgSender()].lastClaim = block.timestamp;
        userInfo[_msgSender()].reward -= _amount;
        
        GeM.mint(_msgSender(), _amount);
        emit Claim( _msgSender(), _amount);
    }
    
    function getNonce( address _manager) external view returns (uint _nonce) {
        require((hasRole(BATTLE_MANAGER_ONE, _msgSender())) || (hasRole(BATTLE_MANAGER_TWO, _msgSender())) || (hasRole(ADMIN_ROLE, _msgSender())), "getNonce : caller should managers or owner");
        return validateInfo[_manager].nonce;
    }
    
    function isSigned( address _manager, bytes memory _signature) external view returns (bool) {
        require((hasRole(BATTLE_MANAGER_ONE, _msgSender())) || (hasRole(BATTLE_MANAGER_TWO, _msgSender())) || (hasRole(ADMIN_ROLE, _msgSender())), "getNonce : caller should managers or owner");
        return validateInfo[_manager].signature[_signature];
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IERC721","name":"sparce","type":"address"},{"internalType":"contract IERC20","name":"gem","type":"address"},{"internalType":"address","name":"battleManagerOne","type":"address"},{"internalType":"address","name":"battleManagerTwo","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_winner","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"BattleReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_account","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[],"name":"ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BATTLE_MANAGER_ONE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BATTLE_MANAGER_TWO","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLACKLIST","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GeM","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SIGNATURE_PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SPARCE","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reward","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"},{"internalType":"bytes[2]","name":"_signature","type":"bytes[2]"}],"name":"battleReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"chainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimTimeStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_manager","type":"address"}],"name":"getNonce","outputs":[{"internalType":"uint256","name":"_nonce","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_manager","type":"address"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"isSigned","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"managers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_claimTimeStamp","type":"uint256"}],"name":"setClaimTimeStamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"gem","type":"address"}],"name":"setGeM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxClaimLimit","type":"uint256"}],"name":"setMaxClaimLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC721","name":"sparce","type":"address"}],"name":"setSPARCE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"totalReward","type":"uint256"},{"internalType":"uint256","name":"lastClaim","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_nonce","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"validateSig","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

6080604052621275006008553480156200001857600080fd5b5060405162001ed038038062001ed08339810160408190526200003b9162000238565b466001556200005b600060008051602062001eb08339815191526200013d565b6200007660008051602062001eb08339815191523362000188565b620000a27f6f9589e674461c337e6607c2f6464eba876f1772814289022c3819923a02e0758362000188565b620000ce7f99491e553e2a3f048ce8b29d9deb45e33e75c32fa0f37fa2245f9ff774d431ad8262000188565b600380546001600160a01b03199081166001600160a01b03968716179091556004805482169486169490941790935560058054928516928416831790556006805491909416921682179092556000918252600260205260408083206064905590825290206127109055620002b8565b600082815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b62000194828262000198565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000194576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620001f43390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600080600080608085870312156200024e578384fd5b84516200025b816200029f565b60208601519094506200026e816200029f565b604086015190935062000281816200029f565b606086015190925062000294816200029f565b939692955090935050565b6001600160a01b0381168114620002b557600080fd5b50565b611be880620002c86000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80639169886e116100de578063ba97f4ab11610097578063d4009ad511610071578063d4009ad5146103c6578063d547741f146103ed578063dadf55b914610400578063f55fe00e1461041357600080fd5b8063ba97f4ab14610377578063bed773c01461038c578063c8b0cf681461039f57600080fd5b80639169886e1461031857806391d148541461032b5780639a8a05921461033e578063a08cd0d614610347578063a217fddf1461035c578063ada0397e1461036457600080fd5b806336568abe1161014b578063406d4b7511610125578063406d4b75146102c25780634d6694a6146102d557806375b238fc146102de57806383b02d161461030557600080fd5b806336568abe14610271578063379607f5146102845780633d39c2601461029757600080fd5b80630a0fa82e146101935780631959a002146101a8578063248a9ca3146101f75780632d0335ab146102285780632f2ff15d1461023b578063331e59f31461024e575b600080fd5b6101a66101a1366004611671565b610426565b005b6101d76101b6366004611671565b60096020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060015b60405180910390f35b61021a610205366004611766565b60009081526020819052604090206001015490565b6040519081526020016101ee565b61021a610236366004611671565b61046b565b6101a661024936600461177e565b610514565b61026161025c36600461168d565b610545565b60405190151581526020016101ee565b6101a661027f36600461177e565b61061b565b6101a6610292366004611766565b610699565b6102aa6102a5366004611766565b6109ac565b6040516001600160a01b0390911681526020016101ee565b6004546102aa906001600160a01b031681565b61021a60085481565b61021a7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b6101a66103133660046117c5565b6109cc565b6101a6610326366004611766565b610f36565b61026161033936600461177e565b610fcd565b61021a60015481565b61021a600080516020611b5383398151915281565b61021a600081565b6102aa6103723660046116db565b610ff6565b61021a600080516020611b7383398151915281565b6003546102aa906001600160a01b031681565b61021a7fc88ef414e1d5ad1d458fdfa42b508737177470135860c2a2ce45583ce28f207c81565b61021a7f60fefd53d88bcf526ea021d4846c665bfd5e051cb83f39291e062d292492760481565b6101a66103fb36600461177e565b6110d7565b6101a661040e366004611671565b611103565b6101a6610421366004611766565b611148565b6000808052602052600080516020611b938339815191525461044881336111dd565b50600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000610485600080516020611b7383398151915233610fcd565b806104a357506104a3600080516020611b5383398151915233610fcd565b806104d357506104d37fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610fcd565b6104f85760405162461bcd60e51b81526004016104ef906119c6565b60405180910390fd5b506001600160a01b031660009081526002602052604090205490565b6000808052602052600080516020611b938339815191525461053681336111dd565b6105408383611241565b505050565b600061055f600080516020611b7383398151915233610fcd565b8061057d575061057d600080516020611b5383398151915233610fcd565b806105ad57506105ad7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177533610fcd565b6105c95760405162461bcd60e51b81526004016104ef906119c6565b60026000846001600160a01b03166001600160a01b03168152602001908152602001600020600101826040516105ff91906118a0565b9081526040519081900360200190205460ff1690505b92915050565b6001600160a01b038116331461068b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016104ef565b61069582826112c5565b5050565b6106c37fc88ef414e1d5ad1d458fdfa42b508737177470135860c2a2ce45583ce28f207c33610fcd565b156107205760405162461bcd60e51b815260206004820152602760248201527f636c61696d203a20636c61696d6572206c6973746564206f6e2074686520626c6044820152661858dadb1a5cdd60ca1b60648201526084016104ef565b60008111801561073f5750336000908152600960205260409020548111155b6107c35760405162461bcd60e51b815260206004820152604960248201527f636c61696d203a205f616d6f756e742073686f756c64206e6f74206265207a6560448201527f726f206f72205f616d6f756e74206d61792065786365656420636c61696d61626064820152681b1948185b5bdd5b9d60ba1b608482015260a4016104ef565b600754811115806107d45750600754155b61082b5760405162461bcd60e51b815260206004820152602260248201527f636c61696d203a20657863656564206d6178436c61696d4c696d6974206c696d6044820152611a5d60f21b60648201526084016104ef565b426008546009600061083a3390565b6001600160a01b03166001600160a01b03168152602001908152602001600020600201546108689190611a39565b11156108c45760405162461bcd60e51b815260206004820152602560248201527f636c61696d203a2068617320746f20776169742074696c6c20636c61696d2070604482015264195c9a5bd960da1b60648201526084016104ef565b33600090815260096020526040812042600282015580548392906108e9908490611a95565b90915550506004546001600160a01b03166340c10f19336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401600060405180830381600087803b15801561094857600080fd5b505af115801561095c573d6000803e3d6000fd5b505050506109673390565b6001600160a01b03167f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4826040516109a191815260200190565b60405180910390a250565b600581600281106109bc57600080fd5b01546001600160a01b0316905081565b6003546000906001600160a01b03166370a08231336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015610a2057600080fd5b505afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5891906117ad565b11610ab15760405162461bcd60e51b815260206004820152602360248201527f626174746c65526577617264203a206e6f2062616c616e6365206f662073706160448201526272636560e81b60648201526084016104ef565b60008311610b135760405162461bcd60e51b815260206004820152602960248201527f626174746c65526577617264203a205f7265776172642073686f756c64206e6f60448201526874206265207a65726f60b81b60648201526084016104ef565b600554815160405163331e59f360e01b8152309263331e59f392610b45926001600160a01b0390921691600401611931565b60206040518083038186803b158015610b5d57600080fd5b505afa158015610b71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b959190611746565b15610c015760405162461bcd60e51b815260206004820152603660248201527f626174746c65526577617264203a206d616e61676572206f6e65207369676e616044820152757475726520616c7265616479207369676e617475726560501b60648201526084016104ef565b600654602082015160405163331e59f360e01b8152309263331e59f392610c36926001600160a01b0390921691600401611931565b60206040518083038186803b158015610c4e57600080fd5b505afa158015610c62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c869190611746565b15610cf25760405162461bcd60e51b815260206004820152603660248201527f626174746c65526577617264203a206d616e616765722074776f207369676e616044820152757475726520616c7265616479207369676e617475726560501b60648201526084016104ef565b610d44600080516020611b73833981519152610339336005546001600160a01b031660009081526002602052604081208054899290610d3090611af3565b9182905550878760005b6020020151610ff6565b610d605760405162461bcd60e51b81526004016104ef90611970565b610dac600080516020611b53833981519152610339336006546001600160a01b031660009081526002602052604081208054899290610d9e90611af3565b918290555087876001610d3a565b610dc85760405162461bcd60e51b81526004016104ef90611970565b6005546001600160a01b0316600090815260026020526040908190208251915160019291830191610df8916118a0565b9081526040805160209281900383018120805460ff1916941515949094179093556006546001600160a01b0316600090815260028352209083015160019291830191610e4491906118a0565b908152604051908190036020019020805491151560ff199092169190911790558260096000610e703390565b6001600160a01b03166001600160a01b031681526020019081526020016000206000016000828254610ea29190611a39565b90915550503360009081526009602052604081206001018054859290610ec9908490611a39565b909155505033600090815260096020526040902060020154610efc57336000908152600960205260409020426002909101555b60405183815233907f666798a3a48cce18cd9dd8fc28cddca3fb67b6c2fa0106e540a6652864c9047a9060200160405180910390a2505050565b6000808052602052600080516020611b9383398151915254610f5881336111dd565b60008211610fc75760405162461bcd60e51b815260206004820152603660248201527f736574436c61696d54696d655374616d70203a205f636c61696d54696d655374604482015275616d702073686f756c64206e6f74206265207a65726f60501b60648201526084016104ef565b50600855565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b600154604080517f60fefd53d88bcf526ea021d4846c665bfd5e051cb83f39291e062d2924927604602080830191909152606089901b6bffffffffffffffffffffffff1916828401526054820188905260748201879052609482019390935260b48082018690528251808303909101815260d4820183528051908401207f19457468657265756d205369676e6564204d6573736167653a0a33320000000060f4830152610110808301829052835180840390910181526101309092019092528051920191909120600091906110cb818561132a565b98975050505050505050565b6000808052602052600080516020611b93833981519152546110f981336111dd565b61054083836112c5565b6000808052602052600080516020611b938339815191525461112581336111dd565b50600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000808052602052600080516020611b938339815191525461116a81336111dd565b600082116111d75760405162461bcd60e51b815260206004820152603460248201527f7365744d6178436c61696d4c696d6974203a205f6d6178436c61696d4c696d69604482015273742073686f756c64206e6f74206265207a65726f60601b60648201526084016104ef565b50600755565b6111e78282610fcd565b610695576111ff816001600160a01b03166014611401565b61120a836020611401565b60405160200161121b9291906118bc565b60408051601f198184030181529082905262461bcd60e51b82526104ef9160040161195d565b61124b8282610fcd565b610695576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556112813390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6112cf8282610fcd565b15610695576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008060008084516041146113455760009350505050610615565b50505060208201516040830151606084015160001a601b8110156113715761136e601b82611a51565b90505b8060ff16601b1415801561138957508060ff16601c14155b1561139a5760009350505050610615565b60408051600081526020810180835288905260ff831691810191909152606081018490526080810183905260019060a0016020604051602081039080840390855afa1580156113ed573d6000803e3d6000fd5b505050602060405103519350505050610615565b60606000611410836002611a76565b61141b906002611a39565b67ffffffffffffffff81111561144157634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561146b576020820181803683370190505b509050600360fc1b8160008151811061149457634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106114d157634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060006114f5846002611a76565b611500906001611a39565b90505b6001811115611594576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061154257634e487b7160e01b600052603260045260246000fd5b1a60f81b82828151811061156657634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c9361158d81611adc565b9050611503565b5083156115e35760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016104ef565b9392505050565b600082601f8301126115fa578081fd5b813567ffffffffffffffff8082111561161557611615611b24565b604051601f8301601f19908116603f0116810190828211818310171561163d5761163d611b24565b81604052838152866020858801011115611655578485fd5b8360208701602083013792830160200193909352509392505050565b600060208284031215611682578081fd5b81356115e381611b3a565b6000806040838503121561169f578081fd5b82356116aa81611b3a565b9150602083013567ffffffffffffffff8111156116c5578182fd5b6116d1858286016115ea565b9150509250929050565b600080600080600060a086880312156116f2578081fd5b85356116fd81611b3a565b9450602086013593506040860135925060608601359150608086013567ffffffffffffffff81111561172d578182fd5b611739888289016115ea565b9150509295509295909350565b600060208284031215611757578081fd5b815180151581146115e3578182fd5b600060208284031215611777578081fd5b5035919050565b60008060408385031215611790578182fd5b8235915060208301356117a281611b3a565b809150509250929050565b6000602082840312156117be578081fd5b5051919050565b6000806000606084860312156117d9578283fd5b833592506020808501359250604085013567ffffffffffffffff808211156117ff578384fd5b818701915087601f830112611812578384fd5b61181a611a10565b80838a60408601111561182b578687fd5b865b600281101561186357813585811115611844578889fd5b6118508d8289016115ea565b855250928601929086019060010161182d565b505080955050505050509250925092565b6000815180845261188c816020860160208601611aac565b601f01601f19169290920160200192915050565b600082516118b2818460208701611aac565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516118f4816017850160208801611aac565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611925816028840160208801611aac565b01602801949350505050565b6001600160a01b038316815260406020820181905260009061195590830184611874565b949350505050565b6020815260006115e36020830184611874565b60208082526036908201527f626174746c65526577617264203a206d616e61676572206f6e65207369676e616040820152751d1d5c99481d985b1a59185d1a5bdb8819985a5b195960521b606082015260800190565b6020808252602a908201527f6765744e6f6e6365203a2063616c6c65722073686f756c64206d616e61676572604082015269399037b91037bbb732b960b11b606082015260800190565b6040805190810167ffffffffffffffff81118282101715611a3357611a33611b24565b60405290565b60008219821115611a4c57611a4c611b0e565b500190565b600060ff821660ff84168060ff03821115611a6e57611a6e611b0e565b019392505050565b6000816000190483118215151615611a9057611a90611b0e565b500290565b600082821015611aa757611aa7611b0e565b500390565b60005b83811015611ac7578181015183820152602001611aaf565b83811115611ad6576000848401525b50505050565b600081611aeb57611aeb611b0e565b506000190190565b6000600019821415611b0757611b07611b0e565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611b4f57600080fd5b5056fe99491e553e2a3f048ce8b29d9deb45e33e75c32fa0f37fa2245f9ff774d431ad6f9589e674461c337e6607c2f6464eba876f1772814289022c3819923a02e075ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb6a2646970667358221220bc65d68847cbb232c4f9d3615a94c792084d5c3dacc23170a9445a6b48cf438a64736f6c63430008040033a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775000000000000000000000000674900b8fd8ee1b487d162d04c59300222d90466000000000000000000000000ebc27d9bd8ac268934784dcdf1eaa10dfaf97a9f000000000000000000000000a9a72dbad705221d084b2eeae34cd210d3f3324a00000000000000000000000019aca28963b1216153ffcd9b91068608b4fb8531

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

000000000000000000000000674900b8fd8ee1b487d162d04c59300222d90466000000000000000000000000ebc27d9bd8ac268934784dcdf1eaa10dfaf97a9f000000000000000000000000a9a72dbad705221d084b2eeae34cd210d3f3324a00000000000000000000000019aca28963b1216153ffcd9b91068608b4fb8531

-----Decoded View---------------
Arg [0] : sparce (address): 0x674900B8fD8EE1B487d162d04C59300222D90466
Arg [1] : gem (address): 0xeBC27d9Bd8AC268934784Dcdf1eaA10dFaF97A9F
Arg [2] : battleManagerOne (address): 0xA9a72dBad705221d084B2eEaE34Cd210d3f3324A
Arg [3] : battleManagerTwo (address): 0x19ACA28963b1216153fFcD9b91068608b4fB8531

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000674900b8fd8ee1b487d162d04c59300222d90466
Arg [1] : 000000000000000000000000ebc27d9bd8ac268934784dcdf1eaa10dfaf97a9f
Arg [2] : 000000000000000000000000a9a72dbad705221d084b2eeae34cd210d3f3324a
Arg [3] : 00000000000000000000000019aca28963b1216153ffcd9b91068608b4fb8531


Deployed ByteCode Sourcemap

20252:5036:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21831:110;;;;;;:::i;:::-;;:::i;:::-;;21012:44;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15791:25:1;;;15847:2;15832:18;;15825:34;;;;15875:18;;;15868:34;15779:2;15764:18;21012:44:0;;;;;;;;12435:123;;;;;;:::i;:::-;12501:7;12528:12;;;;;;;;;;:22;;;;12435:123;;;;8485:25:1;;;8473:2;8458:18;12435:123:0;8440:76:1;24595:322:0;;;;;;:::i;:::-;;:::i;12820:161::-;;;;;;:::i;:::-;;:::i;24929:356::-;;;;;;:::i;:::-;;:::i;:::-;;;8312:14:1;;8305:22;8287:41;;8275:2;8260:18;24929:356:0;8242:92:1;13896:218:0;;;;;;:::i;:::-;;:::i;23826:757::-;;;;;;:::i;:::-;;:::i;20795:26::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7505:32:1;;;7487:51;;7475:2;7460:18;20795:26:0;7442:102:1;20461:17:0;;;;;-1:-1:-1;;;;;20461:17:0;;;20853:36;;;;;;20491:60;;20528:23;20491:60;;22466:1348;;;;;;:::i;:::-;;:::i;22204:250::-;;;;;;:::i;:::-;;:::i;11320:139::-;;;;;;:::i;:::-;;:::i;15911:19::-;;;;;;20641:76;;-1:-1:-1;;;;;;;;;;;20641:76:0;;10687:49;;10732:4;10687:49;;16270:515;;;;;;:::i;:::-;;:::i;20558:76::-;;-1:-1:-1;;;;;;;;;;;20558:76:0;;20433:21;;;;;-1:-1:-1;;;;;20433:21:0;;;20724:58;;20760:22;20724:58;;15745:159;;15797:107;15745:159;;13226:163;;;;;;:::i;:::-;;:::i;21696:123::-;;;;;;:::i;:::-;;:::i;21949:243::-;;;;;;:::i;:::-;;:::i;21831:110::-;10732:4;12528:12;;;;;-1:-1:-1;;;;;;;;;;;12528:22:0;11178:30;11189:4;10332:10;11178;:30::i;:::-;-1:-1:-1;21924:3:0::1;:9:::0;;-1:-1:-1;;;;;;21924:9:0::1;-1:-1:-1::0;;;;;21924:9:0;;;::::1;::::0;;;::::1;::::0;;21831:110::o;24595:322::-;24655:11;24688:41;-1:-1:-1;;;;;;;;;;;10332:10:0;11320:139;:::i;24688:41::-;24687:90;;;-1:-1:-1;24735:41:0;-1:-1:-1;;;;;;;;;;;10332:10:0;11320:139;:::i;24735:41::-;24687:129;;;-1:-1:-1;24782:33:0;20528:23;10332:10;11320:139;:::i;24782:33::-;24679:184;;;;-1:-1:-1;;;24679:184:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;;24881:22:0;;;;;:12;:22;;;;;:28;;24595:322::o;12820:161::-;10732:4;12528:12;;;;;-1:-1:-1;;;;;;;;;;;12528:22:0;11178:30;11189:4;10332:10;11178;:30::i;:::-;12948:25:::1;12959:4;12965:7;12948:10;:25::i;:::-;12820:161:::0;;;:::o;24929:356::-;25014:4;25040:41;-1:-1:-1;;;;;;;;;;;10332:10:0;11320:139;:::i;25040:41::-;25039:90;;;-1:-1:-1;25087:41:0;-1:-1:-1;;;;;;;;;;;10332:10:0;11320:139;:::i;25087:41::-;25039:129;;;-1:-1:-1;25134:33:0;20528:23;10332:10;11320:139;:::i;25134:33::-;25031:184;;;;-1:-1:-1;;;25031:184:0;;;;;;;:::i;:::-;25233:12;:22;25246:8;-1:-1:-1;;;;;25233:22:0;-1:-1:-1;;;;;25233:22:0;;;;;;;;;;;;:32;;25266:10;25233:44;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;24929:356:0;;;;;:::o;13896:218::-;-1:-1:-1;;;;;13992:23:0;;10332:10;13992:23;13984:83;;;;-1:-1:-1;;;13984:83:0;;15193:2:1;13984:83:0;;;15175:21:1;15232:2;15212:18;;;15205:30;15271:34;15251:18;;;15244:62;-1:-1:-1;;;15322:18:1;;;15315:45;15377:19;;13984:83:0;15165:237:1;13984:83:0;14080:26;14092:4;14098:7;14080:11;:26::i;:::-;13896:218;;:::o;23826:757::-;23885:32;20760:22;10332:10;11320:139;:::i;23885:32::-;23884:33;23876:85;;;;-1:-1:-1;;;23876:85:0;;11000:2:1;23876:85:0;;;10982:21:1;11039:2;11019:18;;;11012:30;11078:34;11058:18;;;11051:62;-1:-1:-1;;;11129:18:1;;;11122:37;11176:19;;23876:85:0;10972:229:1;23876:85:0;23991:1;23981:7;:11;23980:59;;;;-1:-1:-1;10332:10:0;24009:22;;;;:8;:22;;;;;:29;23998:40;;;23980:59;23972:145;;;;-1:-1:-1;;;23972:145:0;;11408:2:1;23972:145:0;;;11390:21:1;11447:2;11427:18;;;11420:30;11486:34;11466:18;;;11459:62;11557:34;11537:18;;;11530:62;-1:-1:-1;;;11608:19:1;;;11601:40;11658:19;;23972:145:0;11380:303:1;23972:145:0;24148:13;;24137:7;:24;;24136:50;;;-1:-1:-1;24167:13:0;;:18;24136:50;24128:97;;;;-1:-1:-1;;;24128:97:0;;13961:2:1;24128:97:0;;;13943:21:1;14000:2;13980:18;;;13973:30;14039:34;14019:18;;;14012:62;-1:-1:-1;;;14090:18:1;;;14083:32;14132:19;;24128:97:0;13933:224:1;24128:97:0;24299:15;24280:14;;24245:8;:22;24254:12;10332:10;;10252:98;24254:12;-1:-1:-1;;;;;24245:22:0;-1:-1:-1;;;;;24245:22:0;;;;;;;;;;;;:32;;;:49;;;;:::i;:::-;24244:70;;24236:120;;;;-1:-1:-1;;;24236:120:0;;14364:2:1;24236:120:0;;;14346:21:1;14403:2;14383:18;;;14376:30;14442:34;14422:18;;;14415:62;-1:-1:-1;;;14493:18:1;;;14486:35;14538:19;;24236:120:0;14336:227:1;24236:120:0;10332:10;24377:22;;;;:8;:22;;;;;24412:15;24377:32;;;:50;24438:40;;24471:7;;24377:22;24438:40;;24471:7;;24438:40;:::i;:::-;;;;-1:-1:-1;;24499:3:0;;-1:-1:-1;;;;;24499:3:0;:8;10332:10;24499:31;;-1:-1:-1;;;;;;24499:31:0;;;;;;;-1:-1:-1;;;;;8060:32:1;;;24499:31:0;;;8042:51:1;8109:18;;;8102:34;;;8015:18;;24499:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24553:12;10332:10;;10252:98;24553:12;-1:-1:-1;;;;;24546:29:0;;24567:7;24546:29;;;;8485:25:1;;8473:2;8458:18;;8440:76;24546:29:0;;;;;;;;23826:757;:::o;20795:26::-;;;;;;;;;;;;;;-1:-1:-1;;;;;20795:26:0;;-1:-1:-1;20795:26:0;:::o;22466:1348::-;22576:6;;22609:1;;-1:-1:-1;;;;;22576:6:0;:16;10332:10;22576:30;;-1:-1:-1;;;;;;22576:30:0;;;;;;;-1:-1:-1;;;;;7505:32:1;;;22576:30:0;;;7487:51:1;7460:18;;22576:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;22568:82;;;;-1:-1:-1;;;22568:82:0;;13146:2:1;22568:82:0;;;13128:21:1;13185:2;13165:18;;;13158:30;13224:34;13204:18;;;13197:62;-1:-1:-1;;;13275:18:1;;;13268:33;13318:19;;22568:82:0;13118:225:1;22568:82:0;22679:1;22669:7;:11;22661:65;;;;-1:-1:-1;;;22661:65:0;;12736:2:1;22661:65:0;;;12718:21:1;12775:2;12755:18;;;12748:30;12814:34;12794:18;;;12787:62;-1:-1:-1;;;12865:18:1;;;12858:39;12914:19;;22661:65:0;12708:231:1;22661:65:0;22760:8;:11;22772:13;;22746:40;;-1:-1:-1;;;22746:40:0;;:4;;:13;;:40;;-1:-1:-1;;;;;22760:11:0;;;;22746:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22745:41;22737:108;;;;-1:-1:-1;;;22737:108:0;;11890:2:1;22737:108:0;;;11872:21:1;11929:2;11909:18;;;11902:30;11968:34;11948:18;;;11941:62;-1:-1:-1;;;12019:18:1;;;12012:52;12081:19;;22737:108:0;11862:244:1;22737:108:0;22879:11;;22891:13;;;;22865:40;;-1:-1:-1;;;22865:40:0;;:4;;:13;;:40;;-1:-1:-1;;;;;22879:11:0;;;;22865:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22864:41;22856:108;;;;-1:-1:-1;;;22856:108:0;;14770:2:1;22856:108:0;;;14752:21:1;14809:2;14789:18;;;14782:30;14848:34;14828:18;;;14821:62;-1:-1:-1;;;14899:18:1;;;14892:52;14961:19;;22856:108:0;14742:244:1;22856:108:0;22983:124;-1:-1:-1;;;;;;;;;;;23010:96:0;10332:10;23061:8;:11;-1:-1:-1;;;;;23061:11:0;23048:25;;;;:12;:25;;;;;23046:33;;23037:7;;23048:25;23046:33;;;:::i;:::-;;;;;-1:-1:-1;23081:9:0;23092:10;23103:1;23092:13;;;;;23010:11;:96::i;22983:124::-;22975:191;;;;-1:-1:-1;;;22975:191:0;;;;;;;:::i;:::-;23185:124;-1:-1:-1;;;;;;;;;;;23212:96:0;10332:10;23263:11;;-1:-1:-1;;;;;23263:11:0;23250:25;;;;:12;:25;;;;;23248:33;;23239:7;;23250:25;23248:33;;;:::i;:::-;;;;;-1:-1:-1;23283:9:0;23294:10;23305:1;23294:13;;23185:124;23177:191;;;;-1:-1:-1;;;23177:191:0;;;;;;;:::i;:::-;23402:8;:11;-1:-1:-1;;;;;23402:11:0;23389:25;;;;:12;:25;;;;;;;23425:13;;23389:50;;23442:4;;23389:35;;;;:50;;;:::i;:::-;;;;;;;;;;;;;;;;:57;;-1:-1:-1;;23389:57:0;;;;;;;;;;;23470:11;;-1:-1:-1;;;;;23470:11:0;-1:-1:-1;23457:25:0;;;:12;:25;;;23493:13;;;;-1:-1:-1;;23457:35:0;;;;:50;;23493:13;23457:50;:::i;:::-;;;;;;;;;;;;;;:57;;;;;-1:-1:-1;;23457:57:0;;;;;;;;;23568:7;23535:8;23457:50;23544:12;10332:10;;10252:98;23544:12;-1:-1:-1;;;;;23535:22:0;-1:-1:-1;;;;;23535:22:0;;;;;;;;;;;;:29;;;:40;;;;;;;:::i;:::-;;;;-1:-1:-1;;10332:10:0;23586:22;;;;:8;:22;;;;;:34;;:45;;23624:7;;23586:22;:45;;23624:7;;23586:45;:::i;:::-;;;;-1:-1:-1;;10332:10:0;23655:22;;;;:8;:22;;;;;:32;;;23652:92;;10332:10;23694:22;;;;:8;:22;;;;;23729:15;23694:32;;;;:50;23652:92;23770:36;;8485:25:1;;;10332:10:0;;23770:36;;8473:2:1;8458:18;23770:36:0;;;;;;;22466:1348;;;:::o;22204:250::-;10732:4;12528:12;;;;;-1:-1:-1;;;;;;;;;;;12528:22:0;11178:30;11189:4;10332:10;11178;:30::i;:::-;22343:1:::1;22325:15;:19;22317:86;;;::::0;-1:-1:-1;;;22317:86:0;;9795:2:1;22317:86:0::1;::::0;::::1;9777:21:1::0;9834:2;9814:18;;;9807:30;9873:34;9853:18;;;9846:62;-1:-1:-1;;;9924:18:1;;;9917:52;9986:19;;22317:86:0::1;9767:244:1::0;22317:86:0::1;-1:-1:-1::0;22414:14:0::1;:32:::0;22204:250::o;11320:139::-;11398:4;11422:12;;;;;;;;;;;-1:-1:-1;;;;;11422:29:0;;;;;;;;;;;;;;;11320:139::o;16270:515::-;16579:7;;16510:88;;;15797:107;16510:88;;;;5593:19:1;;;;5650:2;5646:15;;;-1:-1:-1;;5642:53:1;5628:12;;;5621:75;5712:12;;;5705:28;;;5749:12;;;5742:28;;;5786:13;;;5779:29;;;;5824:13;;;;5817:29;;;16510:88:0;;;;;;;;;;5862:13:1;;;16510:88:0;;16500:99;;;;;;6407:66:1;18227:58:0;;;6395:79:1;6490:12;;;;6483:28;;;18227:58:0;;;;;;;;;;6527:12:1;;;;18227:58:0;;;18209:83;;;;;;;;-1:-1:-1;;16500:99:0;16747:30;16608:48;16767:9;16747:19;:30::i;:::-;16740:37;16270:515;-1:-1:-1;;;;;;;;16270:515:0:o;13226:163::-;10732:4;12528:12;;;;;-1:-1:-1;;;;;;;;;;;12528:22:0;11178:30;11189:4;10332:10;11178;:30::i;:::-;13355:26:::1;13367:4;13373:7;13355:11;:26::i;21696:123::-:0;10732:4;12528:12;;;;;-1:-1:-1;;;;;;;;;;;12528:22:0;11178:30;11189:4;10332:10;11178;:30::i;:::-;-1:-1:-1;21796:6:0::1;:15:::0;;-1:-1:-1;;;;;;21796:15:0::1;-1:-1:-1::0;;;;;21796:15:0;;;::::1;::::0;;;::::1;::::0;;21696:123::o;21949:243::-;10732:4;12528:12;;;;;-1:-1:-1;;;;;;;;;;;12528:22:0;11178:30;11189:4;10332:10;11178;:30::i;:::-;22085:1:::1;22068:14;:18;22060:83;;;::::0;-1:-1:-1;;;22060:83:0;;10579:2:1;22060:83:0::1;::::0;::::1;10561:21:1::0;10618:2;10598:18;;;10591:30;10657:34;10637:18;;;10630:62;-1:-1:-1;;;10708:18:1;;;10701:50;10768:19;;22060:83:0::1;10551:242:1::0;22060:83:0::1;-1:-1:-1::0;22154:13:0::1;:30:::0;21949:243::o;11749:497::-;11830:22;11838:4;11844:7;11830;:22::i;:::-;11825:414;;12018:41;12046:7;-1:-1:-1;;;;;12018:41:0;12056:2;12018:19;:41::i;:::-;12132:38;12160:4;12167:2;12132:19;:38::i;:::-;11923:270;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;11923:270:0;;;;;;;;;;-1:-1:-1;;;11869:358:0;;;;;;;:::i;15200:229::-;15275:22;15283:4;15289:7;15275;:22::i;:::-;15270:152;;15314:6;:12;;;;;;;;;;;-1:-1:-1;;;;;15314:29:0;;;;;;;;;:36;;-1:-1:-1;;15314:36:0;15346:4;15314:36;;;15397:12;10332:10;;10252:98;15397:12;-1:-1:-1;;;;;15370:40:0;15388:7;-1:-1:-1;;;;;15370:40:0;15382:4;15370:40;;;;;;;;;;15200:229;;:::o;15437:230::-;15512:22;15520:4;15526:7;15512;:22::i;:::-;15508:152;;;15583:5;15551:12;;;;;;;;;;;-1:-1:-1;;;;;15551:29:0;;;;;;;;;;:37;;-1:-1:-1;;15551:37:0;;;15608:40;10332:10;;15551:12;;15608:40;;15583:5;15608:40;15437:230;;:::o;17098:855::-;17191:7;17210:9;17226;17242:7;17297:9;:16;17317:2;17297:22;17293:64;;17346:1;17330:19;;;;;;;17293:64;-1:-1:-1;;;17484:4:0;17469:20;;17463:27;17524:4;17509:20;;17503:27;17572:4;17557:20;;17551:27;17548:1;17543:36;17690:2;17686:6;;17682:36;;;17703:7;17708:2;17703:7;;:::i;:::-;;;17682:36;17790:1;:7;;17795:2;17790:7;;:18;;;;;17801:1;:7;;17806:2;17801:7;;17790:18;17786:162;;;17835:1;17819:19;;;;;;;17786:162;17916:24;;;;;;;;;;;;8748:25:1;;;8821:4;8809:17;;8789:18;;;8782:45;;;;8843:18;;;8836:34;;;8886:18;;;8879:34;;;17916:24:0;;8720:19:1;;17916:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17909:31;;;;;;;19794:451;19869:13;19895:19;19927:10;19931:6;19927:1;:10;:::i;:::-;:14;;19940:1;19927:14;:::i;:::-;19917:25;;;;;;-1:-1:-1;;;19917:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19917:25:0;;19895:47;;-1:-1:-1;;;19953:6:0;19960:1;19953:9;;;;;;-1:-1:-1;;;19953:9:0;;;;;;;;;;;;:15;-1:-1:-1;;;;;19953:15:0;;;;;;;;;-1:-1:-1;;;19979:6:0;19986:1;19979:9;;;;;;-1:-1:-1;;;19979:9:0;;;;;;;;;;;;:15;-1:-1:-1;;;;;19979:15:0;;;;;;;;-1:-1:-1;20010:9:0;20022:10;20026:6;20022:1;:10;:::i;:::-;:14;;20035:1;20022:14;:::i;:::-;20010:26;;20005:135;20042:1;20038;:5;20005:135;;;-1:-1:-1;;;20090:5:0;20098:3;20090:11;20077:25;;;;;-1:-1:-1;;;20077:25:0;;;;;;;;;;;;20065:6;20072:1;20065:9;;;;;;-1:-1:-1;;;20065:9:0;;;;;;;;;;;;:37;-1:-1:-1;;;;;20065:37:0;;;;;;;;-1:-1:-1;20127:1:0;20117:11;;;;;20045:3;;;:::i;:::-;;;20005:135;;;-1:-1:-1;20158:10:0;;20150:55;;;;-1:-1:-1;;;20150:55:0;;10218:2:1;20150:55:0;;;10200:21:1;;;10237:18;;;10230:30;10296:34;10276:18;;;10269:62;10348:18;;20150:55:0;10190:182:1;20150:55:0;20230:6;19794:451;-1:-1:-1;;;19794:451:0:o;14:738:1:-;56:5;109:3;102:4;94:6;90:17;86:27;76:2;;131:5;124;117:20;76:2;171:6;158:20;197:18;234:2;230;227:10;224:2;;;240:18;;:::i;:::-;315:2;309:9;283:2;369:13;;-1:-1:-1;;365:22:1;;;389:2;361:31;357:40;345:53;;;413:18;;;433:22;;;410:46;407:2;;;459:18;;:::i;:::-;499:10;495:2;488:22;534:2;526:6;519:18;580:3;573:4;568:2;560:6;556:15;552:26;549:35;546:2;;;601:5;594;587:20;546:2;669;662:4;654:6;650:17;643:4;635:6;631:17;618:54;692:15;;;709:4;688:26;681:41;;;;-1:-1:-1;696:6:1;66:686;-1:-1:-1;;;66:686:1:o;757:257::-;816:6;869:2;857:9;848:7;844:23;840:32;837:2;;;890:6;882;875:22;837:2;934:9;921:23;953:31;978:5;953:31;:::i;1019:475::-;1096:6;1104;1157:2;1145:9;1136:7;1132:23;1128:32;1125:2;;;1178:6;1170;1163:22;1125:2;1222:9;1209:23;1241:31;1266:5;1241:31;:::i;:::-;1291:5;-1:-1:-1;1347:2:1;1332:18;;1319:32;1374:18;1363:30;;1360:2;;;1411:6;1403;1396:22;1360:2;1439:49;1480:7;1471:6;1460:9;1456:22;1439:49;:::i;:::-;1429:59;;;1115:379;;;;;:::o;1499:681::-;1603:6;1611;1619;1627;1635;1688:3;1676:9;1667:7;1663:23;1659:33;1656:2;;;1710:6;1702;1695:22;1656:2;1754:9;1741:23;1773:31;1798:5;1773:31;:::i;:::-;1823:5;-1:-1:-1;1875:2:1;1860:18;;1847:32;;-1:-1:-1;1926:2:1;1911:18;;1898:32;;-1:-1:-1;1977:2:1;1962:18;;1949:32;;-1:-1:-1;2032:3:1;2017:19;;2004:33;2060:18;2049:30;;2046:2;;;2097:6;2089;2082:22;2046:2;2125:49;2166:7;2157:6;2146:9;2142:22;2125:49;:::i;:::-;2115:59;;;1646:534;;;;;;;;:::o;2185:297::-;2252:6;2305:2;2293:9;2284:7;2280:23;2276:32;2273:2;;;2326:6;2318;2311:22;2273:2;2363:9;2357:16;2416:5;2409:13;2402:21;2395:5;2392:32;2382:2;;2443:6;2435;2428:22;2487:190;2546:6;2599:2;2587:9;2578:7;2574:23;2570:32;2567:2;;;2620:6;2612;2605:22;2567:2;-1:-1:-1;2648:23:1;;2557:120;-1:-1:-1;2557:120:1:o;2682:325::-;2750:6;2758;2811:2;2799:9;2790:7;2786:23;2782:32;2779:2;;;2832:6;2824;2817:22;2779:2;2873:9;2860:23;2850:33;;2933:2;2922:9;2918:18;2905:32;2946:31;2971:5;2946:31;:::i;:::-;2996:5;2986:15;;;2769:238;;;;;:::o;3760:194::-;3830:6;3883:2;3871:9;3862:7;3858:23;3854:32;3851:2;;;3904:6;3896;3889:22;3851:2;-1:-1:-1;3932:16:1;;3841:113;-1:-1:-1;3841:113:1:o;3959:1098::-;4068:6;4076;4084;4137:2;4125:9;4116:7;4112:23;4108:32;4105:2;;;4158:6;4150;4143:22;4105:2;4199:9;4186:23;4176:33;;4228:2;4277;4266:9;4262:18;4249:32;4239:42;;4332:2;4321:9;4317:18;4304:32;4355:18;4396:2;4388:6;4385:14;4382:2;;;4417:6;4409;4402:22;4382:2;4460:6;4449:9;4445:22;4435:32;;4505:7;4498:4;4494:2;4490:13;4486:27;4476:2;;4532:6;4524;4517:22;4476:2;4561:17;;:::i;:::-;4600:3;4623:2;4653:7;4648:2;4644;4640:11;4637:24;4634:2;;;4679:6;4671;4664:22;4634:2;4706:6;4721:306;4735:4;4732:1;4729:11;4721:306;;;4814:3;4801:17;4850:2;4837:11;4834:19;4831:2;;;4871:6;4863;4856:22;4831:2;4905:47;4944:7;4930:11;4926:2;4922:20;4905:47;:::i;:::-;4893:60;;-1:-1:-1;4973:12:1;;;;5005;;;;4755:1;4748:9;4721:306;;;4725:3;;5046:5;5036:15;;;;;;;4095:962;;;;;:::o;5062:257::-;5103:3;5141:5;5135:12;5168:6;5163:3;5156:19;5184:63;5240:6;5233:4;5228:3;5224:14;5217:4;5210:5;5206:16;5184:63;:::i;:::-;5301:2;5280:15;-1:-1:-1;;5276:29:1;5267:39;;;;5308:4;5263:50;;5111:208;-1:-1:-1;;5111:208:1:o;5886:274::-;6015:3;6053:6;6047:13;6069:53;6115:6;6110:3;6103:4;6095:6;6091:17;6069:53;:::i;:::-;6138:16;;;;;6023:137;-1:-1:-1;;6023:137:1:o;6550:786::-;6961:25;6956:3;6949:38;6931:3;7016:6;7010:13;7032:62;7087:6;7082:2;7077:3;7073:12;7066:4;7058:6;7054:17;7032:62;:::i;:::-;-1:-1:-1;;;7153:2:1;7113:16;;;7145:11;;;7138:40;7203:13;;7225:63;7203:13;7274:2;7266:11;;7259:4;7247:17;;7225:63;:::i;:::-;7308:17;7327:2;7304:26;;6939:397;-1:-1:-1;;;;6939:397:1:o;7549:314::-;-1:-1:-1;;;;;7724:32:1;;7706:51;;7793:2;7788;7773:18;;7766:30;;;-1:-1:-1;;7813:44:1;;7838:18;;7830:6;7813:44;:::i;:::-;7805:52;7696:167;-1:-1:-1;;;;7696:167:1:o;9369:219::-;9518:2;9507:9;9500:21;9481:4;9538:44;9578:2;9567:9;9563:18;9555:6;9538:44;:::i;12111:418::-;12313:2;12295:21;;;12352:2;12332:18;;;12325:30;12391:34;12386:2;12371:18;;12364:62;-1:-1:-1;;;12457:2:1;12442:18;;12435:52;12519:3;12504:19;;12285:244::o;13348:406::-;13550:2;13532:21;;;13589:2;13569:18;;;13562:30;13628:34;13623:2;13608:18;;13601:62;-1:-1:-1;;;13694:2:1;13679:18;;13672:40;13744:3;13729:19;;13522:232::o;15913:246::-;15980:2;15974:9;;;16010:15;;16055:18;16040:34;;16076:22;;;16037:62;16034:2;;;16102:18;;:::i;:::-;16138:2;16131:22;15954:205;:::o;16164:128::-;16204:3;16235:1;16231:6;16228:1;16225:13;16222:2;;;16241:18;;:::i;:::-;-1:-1:-1;16277:9:1;;16212:80::o;16297:204::-;16335:3;16371:4;16368:1;16364:12;16403:4;16400:1;16396:12;16438:3;16432:4;16428:14;16423:3;16420:23;16417:2;;;16446:18;;:::i;:::-;16482:13;;16343:158;-1:-1:-1;;;16343:158:1:o;16506:168::-;16546:7;16612:1;16608;16604:6;16600:14;16597:1;16594:21;16589:1;16582:9;16575:17;16571:45;16568:2;;;16619:18;;:::i;:::-;-1:-1:-1;16659:9:1;;16558:116::o;16679:125::-;16719:4;16747:1;16744;16741:8;16738:2;;;16752:18;;:::i;:::-;-1:-1:-1;16789:9:1;;16728:76::o;16809:258::-;16881:1;16891:113;16905:6;16902:1;16899:13;16891:113;;;16981:11;;;16975:18;16962:11;;;16955:39;16927:2;16920:10;16891:113;;;17022:6;17019:1;17016:13;17013:2;;;17057:1;17048:6;17043:3;17039:16;17032:27;17013:2;;16862:205;;;:::o;17072:136::-;17111:3;17139:5;17129:2;;17148:18;;:::i;:::-;-1:-1:-1;;;17184:18:1;;17119:89::o;17213:135::-;17252:3;-1:-1:-1;;17273:17:1;;17270:2;;;17293:18;;:::i;:::-;-1:-1:-1;17340:1:1;17329:13;;17260:88::o;17353:127::-;17414:10;17409:3;17405:20;17402:1;17395:31;17445:4;17442:1;17435:15;17469:4;17466:1;17459:15;17485:127;17546:10;17541:3;17537:20;17534:1;17527:31;17577:4;17574:1;17567:15;17601:4;17598:1;17591:15;17617:131;-1:-1:-1;;;;;17692:31:1;;17682:42;;17672:2;;17738:1;17735;17728:12;17672:2;17662:86;:::o

Swarm Source

ipfs://bc65d68847cbb232c4f9d3615a94c792084d5c3dacc23170a9445a6b48cf438a
Block Transaction Difficulty Gas Used Reward
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.

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.