Contract 0xbbba073c31bf03b8acf7c28ef0738decf3695683 1

 

Contract Overview

The Sandbox: SAND Token
Balance:
0 MATIC

MATIC Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x365d147344ae1003f92ddea21e4a1a96356e39a1afd8f05e9bd99f3d061b0ce0Approve240801422022-01-23 21:33:1438 mins ago0x9f30c0bae9dfac83384627b48e32198f31502e9f IN  The Sandbox: SAND Token0 MATIC0.002903610103 59.38095839
0x73e9b748a7d5a433aa024527b473f84aa6c76b8ad76eef6467166506703ee474Approve240797552022-01-23 21:19:5652 mins ago0x89374f59a5639872276f75f6d115cbeb5d5a8fa5 IN  The Sandbox: SAND Token0 MATIC0.002438858765 49.876452309
0x8d7622f4caec8e8e8eee61cf555c832c09a4df1e00532697e615f1ef305e80e4Approve240797462022-01-23 21:19:3852 mins ago0xa9b3931241675fbee852f61f2543b352edd3165d IN  The Sandbox: SAND Token0 MATIC0.001804192474 36.897060706
0x9e6ba7ccdfc6e3e8aeee16a95e7633ed15317cfcc9e8f841d33d70dd9fcb9cf9Approve240797142022-01-23 21:18:3053 mins ago0x4c6f9f8c0803335c44787b20898724732165d9ee IN  The Sandbox: SAND Token0 MATIC0.001975630506 40.403094324
0xf2fa6c82a269f73827c26bdffd0f0e7921ff24a72dfaf8c29d4f5e75f8810083Approve240783622022-01-23 20:31:591 hr 40 mins ago0x077994c74c1bcb5f1149353d0a958fa2065ea9c7 IN  The Sandbox: SAND Token0 MATIC0.004475026897 91.517585534
0x3a914e5a24f1ce8674f60c16a42d0a688efcf7428c20a967c574e40e7e234d4dApprove240780352022-01-23 20:20:441 hr 51 mins ago0xd4cd9b6527433056fd55aa162cb2c2cde4f9704f IN  The Sandbox: SAND Token0 MATIC0.003279200495 67.062057654
0x46d42c9fee48af66f19cb2b90df8a828b7ed4fe71172b87d4e1c5d13292063a9Approve240780322022-01-23 20:20:381 hr 51 mins ago0x5a267648184fc3aa949a85ba489d490dc039f2d6 IN  The Sandbox: SAND Token0 MATIC0.003271961997 66.914025066
0xfba552b017103ee9aec84bf66062bc003f8700a8e6552eff943362e0d4cff5e2Approve240775282022-01-23 20:03:182 hrs 8 mins ago0x1b46d855c5b9a92d244b269452f076c3c98f6918 IN  The Sandbox: SAND Token0 MATIC0.002284184686 46.713253846
0x96719d5de0a4ddc83e93b106cc3cff7d4d57f4be3ffc6327cfe0b1d33bcd6d92Approve240775042022-01-23 20:02:302 hrs 9 mins ago0x82f5cc996c1cdfe2a0f7681b2b7951856c0a5356 IN  The Sandbox: SAND Token0 MATIC0.002213628228 45.270322468
0x49cd805a4f8d44f0f7d1e1114329f5786f1f5d3d6a9db657a7a35252dbad0604Approve240774022022-01-23 19:58:562 hrs 13 mins ago0xc0c3a547231ea6aebc543826bc55895b015467b3 IN  The Sandbox: SAND Token0 MATIC0.002098498202 42.915828911
0x89b7dde2af7ad4757cb5ba73fda0c1263624279ffabd361fef472e1bcc1a8ae9Approve240769502022-01-23 19:43:242 hrs 28 mins ago0x7cba011b37540db6c976c370b0dffe0775d1d400 IN  The Sandbox: SAND Token0 MATIC0.004211788153 86.134159955
0xdf2b683684cb11e6920d2a6cfcb0c9db8791da7c8b6c0455902ae79bced7dccfApprove240767882022-01-23 19:37:482 hrs 34 mins ago0xc028a62f697b93fd3bdb02905384af4415d9f6f9 IN  The Sandbox: SAND Token0 MATIC0.002924313315 59.804354269
0xfcd32c17199e1780bc4011a5012d598e696663d100c77a8f042b24851d970f90Approve240760332022-01-23 19:11:333 hrs ago0xf626e9a2fddbf55b0b1a87c56128a7ba6723a85a IN  The Sandbox: SAND Token0 MATIC0.004100455942 84.354164627
0xc29e342e8c058dcdf146e431317ee3b761e7d5302bd0b13aac478d7ae5b44f9bApprove240752332022-01-23 18:43:273 hrs 28 mins ago0x86d74a87a09c3b7a1e2b9b125ca82bbab3f44c3a IN  The Sandbox: SAND Token0 MATIC0.003499007345 71.55726912
0xcb9e9462961ad1af9f1e295da83e6b70f8254ae8fa01169b6c9cf647c54a064dApprove240750992022-01-23 18:38:513 hrs 33 mins ago0xaf6b24a5e469cb204e61e1bcffcea05a976ac950 IN  The Sandbox: SAND Token0 MATIC0.003460171834 70.763054412
0x664c9061bf92994681f1296317b2e4e240291eab128a8986e26f509d09da68e8Transfer240749662022-01-23 18:34:173 hrs 37 mins ago0x1f5361fc327cec05e485a85ad8c309e70bcf2ea9 IN  The Sandbox: SAND Token0 MATIC0.01321873245
0x000417b2112f1e843bcec17307bf1f32825670197c6502abd3d172312d4c4981Approve240748452022-01-23 18:30:073 hrs 41 mins ago0x28451a38e251f05a5c6c616d1bb637c431fcc21d IN  The Sandbox: SAND Token0 MATIC0.002684285238 54.895603877
0xda75f8efa5df8c816192d212699a9e2dfc69143db8ae09775ef7df15dc04d383Transfer240746202022-01-23 18:22:213 hrs 49 mins ago0xeb2ecd707d0e02e917638ba492edab2ff9991f95 IN  The Sandbox: SAND Token0 MATIC0.002777340146 51.487526359
0xa0c174da1fe5b6f089b586e86202b99b08b5e1ce966b8aee5fa0fc48ebdcc8f3Approve240746062022-01-23 18:21:533 hrs 50 mins ago0xaf197f357880f3d2513ac91d209665735754edd2 IN  The Sandbox: SAND Token0 MATIC0.002630815965 53.802117984
0x5df0c5dcff85d023b83293f5c3bf12314744b754ecd5928bd48adebe81cd3b00Approve240743002022-01-23 18:11:214 hrs ago0x248b04e1fb529e38b401b5a79c1808cef6bd8236 IN  The Sandbox: SAND Token0 MATIC0.003302343807 67.535355389
0xd2408b97358249618ab9990e8054a069eca8c46eab31fcb56d6beb64d35dad07Approve240741732022-01-23 18:06:594 hrs 5 mins ago0x5409430ad920fbafcf84f42d92f28393459a0825 IN  The Sandbox: SAND Token0 MATIC0.002830265302 57.881003369
0x3310a100ee7f7a7fdab799ddb8671900e9b28c3a1e5366667f851e5fc8b96e69Approve240736982022-01-23 17:50:414 hrs 21 mins ago0xf4a226e7ab23e6c88e7e215ad3ea8c6e9a2fdb81 IN  The Sandbox: SAND Token0 MATIC0.002993603336 61.221386072
0xd43f531690cf43a419d5eff74ca115658e10241cabbb046a91556d80628ef2a7Approve240736732022-01-23 17:49:514 hrs 22 mins ago0xd272efce258f5871b4e24165edc6319e767aedb4 IN  The Sandbox: SAND Token0 MATIC0.00285866586158.461815645
0xee1b9e9fe0e45c8a844937c2647d5e124503e4f5d40b1b857d5a7686d7fb5c52Approve240730202022-01-23 17:25:134 hrs 46 mins ago0xaa64b3cb49513f9db9146b43c9bcf8adfc69b8c9 IN  The Sandbox: SAND Token0 MATIC0.003221660895 65.885330601
0x21a9e04bd708c1eb4d16226c779425198f2d5ff677caa0664afdabea397b6321Approve240724372022-01-23 17:05:105 hrs 6 mins ago0xeeb292850edc85e08ebc3f4d82348d95f947502c IN  The Sandbox: SAND Token0 MATIC0.00494083344 101.043671332
[ Download CSV Export 

OVERVIEW

The Sandbox is a virtual world where players can build, own, and monetize their gaming experiences in the Ethereum blockchain using SAND, the platform’s utility token.

Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PolygonSand

Compiler Version
v0.8.2+commit.661d1103

Optimization Enabled:
Yes with 2000 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 13 : PolygonSand.sol
//SPDX-License-Identifier: MIT
// solhint-disable-next-line compiler-version
pragma solidity 0.8.2;

import "@openzeppelin/contracts-0.8/access/Ownable.sol";
import "../../../common/BaseWithStorage/ERC2771Handler.sol";
import "../../../Sand/SandBaseToken.sol";

contract PolygonSand is SandBaseToken, Ownable, ERC2771Handler {
    address public childChainManagerProxy;

    constructor(
        address _childChainManagerProxy,
        address trustedForwarder,
        address sandAdmin,
        address executionAdmin
    ) SandBaseToken(sandAdmin, executionAdmin, address(0), 0) {
        require(_childChainManagerProxy != address(0), "Bad ChildChainManagerProxy address");
        childChainManagerProxy = _childChainManagerProxy;
        __ERC2771Handler_initialize(trustedForwarder);
    }

    /// @notice update the ChildChainManager Proxy address
    /// @param newChildChainManagerProxy address of the new childChainManagerProxy
    function updateChildChainManager(address newChildChainManagerProxy) external onlyOwner {
        require(newChildChainManagerProxy != address(0), "Bad ChildChainManagerProxy address");
        childChainManagerProxy = newChildChainManagerProxy;
    }

    /// @notice called when tokens are deposited on root chain
    /// @param user user address for whom deposit is being done
    /// @param depositData abi encoded amount
    function deposit(address user, bytes calldata depositData) external {
        require(_msgSender() == childChainManagerProxy, "You're not allowed to deposit");
        uint256 amount = abi.decode(depositData, (uint256));
        _mint(user, amount);
    }

    /// @notice called when user wants to withdraw tokens back to root chain
    /// @dev Should burn user's tokens. This transaction will be verified when exiting on root chain
    /// @param amount amount to withdraw
    function withdraw(uint256 amount) external {
        _burn(_msgSender(), amount);
    }

    function setTrustedForwarder(address trustedForwarder) external onlyOwner {
        _trustedForwarder = trustedForwarder;
    }

    function _msgSender() internal view override(Context, ERC2771Handler) returns (address sender) {
        return ERC2771Handler._msgSender();
    }

    function _msgData() internal view override(Context, ERC2771Handler) returns (bytes calldata) {
        return ERC2771Handler._msgData();
    }
}

File 2 of 13 : Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../utils/Context.sol";
/**
 * @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 () {
        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 3 of 13 : ERC2771Handler.sol
// SPDX-License-Identifier: MIT
// solhint-disable-next-line compiler-version
pragma solidity ^0.8.0;

/// @dev minimal ERC2771 handler to keep bytecode-size down.
/// based on: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/metatx/ERC2771Context.sol

contract ERC2771Handler {
    address internal _trustedForwarder;

    function __ERC2771Handler_initialize(address forwarder) internal {
        _trustedForwarder = forwarder;
    }

    function isTrustedForwarder(address forwarder) public view returns (bool) {
        return forwarder == _trustedForwarder;
    }

    function getTrustedForwarder() external view returns (address trustedForwarder) {
        return _trustedForwarder;
    }

    function _msgSender() internal view virtual returns (address sender) {
        if (isTrustedForwarder(msg.sender)) {
            // The assembly code is more direct than the Solidity version using `abi.decode`.
            // solhint-disable-next-line no-inline-assembly
            assembly {
                sender := shr(96, calldataload(sub(calldatasize(), 20)))
            }
        } else {
            return msg.sender;
        }
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        if (isTrustedForwarder(msg.sender)) {
            return msg.data[:msg.data.length - 20];
        } else {
            return msg.data;
        }
    }
}

File 4 of 13 : SandBaseToken.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.2;

import "../common/BaseWithStorage/ERC20/extensions/ERC20BasicApproveExtension.sol";
import "../common/BaseWithStorage/ERC20/ERC20BaseToken.sol";

contract SandBaseToken is ERC20BaseToken, ERC20BasicApproveExtension {
    constructor(
        address sandAdmin,
        address executionAdmin,
        address beneficiary,
        uint256 amount
    ) ERC20BaseToken("SAND", "SAND", sandAdmin, executionAdmin) {
        _admin = sandAdmin;
        if (beneficiary != address(0)) {
            uint256 initialSupply = amount * (1 ether);
            _mint(beneficiary, initialSupply);
        }
    }
}

File 5 of 13 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^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 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) {
        return msg.sender;
    }

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

File 6 of 13 : ERC20BasicApproveExtension.sol
//SPDX-License-Identifier: MIT

pragma solidity 0.8.2;

import "@openzeppelin/contracts-0.8/utils/Context.sol";
import "./ERC20Internal.sol";
import "../../../Libraries/BytesUtil.sol";

abstract contract ERC20BasicApproveExtension is ERC20Internal, Context {
    /// @notice Approve `target` to spend `amount` and call it with data.
    /// @param target The address to be given rights to transfer and destination of the call.
    /// @param amount The number of tokens allowed.
    /// @param data The bytes for the call.
    /// @return The data of the call.
    function approveAndCall(
        address target,
        uint256 amount,
        bytes calldata data
    ) external payable returns (bytes memory) {
        require(BytesUtil.doFirstParamEqualsAddress(data, _msgSender()), "FIRST_PARAM_NOT_SENDER");

        _approveFor(_msgSender(), target, amount);

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returnData) = target.call{value: msg.value}(data);
        require(success, string(returnData));
        return returnData;
    }

    /// @notice Temporarily approve `target` to spend `amount` and call it with data.
    /// Previous approvals remains unchanged.
    /// @param target The destination of the call, allowed to spend the amount specified
    /// @param amount The number of tokens allowed to spend.
    /// @param data The bytes for the call.
    /// @return The data of the call.
    function paidCall(
        address target,
        uint256 amount,
        bytes calldata data
    ) external payable returns (bytes memory) {
        require(BytesUtil.doFirstParamEqualsAddress(data, _msgSender()), "FIRST_PARAM_NOT_SENDER");

        if (amount > 0) {
            _addAllowanceIfNeeded(_msgSender(), target, amount);
        }

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returnData) = target.call{value: msg.value}(data);
        require(success, string(returnData));

        return returnData;
    }
}

File 7 of 13 : ERC20BaseToken.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.2;

import "@openzeppelin/contracts-0.8/utils/Context.sol";
import "./extensions/ERC20Internal.sol";
import "../../interfaces/IERC20Extended.sol";
import "../WithSuperOperators.sol";

abstract contract ERC20BaseToken is WithSuperOperators, IERC20, IERC20Extended, ERC20Internal, Context {
    string internal _name;
    string internal _symbol;
    address internal immutable _operator;
    uint256 internal _totalSupply;
    mapping(address => uint256) internal _balances;
    mapping(address => mapping(address => uint256)) internal _allowances;

    constructor(
        string memory tokenName,
        string memory tokenSymbol,
        address admin,
        address operator
    ) {
        _name = tokenName;
        _symbol = tokenSymbol;
        _admin = admin;
        _operator = operator;
    }

    /// @notice Transfer `amount` tokens to `to`.
    /// @param to The recipient address of the tokens being transfered.
    /// @param amount The number of tokens being transfered.
    /// @return success Whether or not the transfer succeeded.
    function transfer(address to, uint256 amount) external override returns (bool success) {
        _transfer(_msgSender(), to, amount);
        return true;
    }

    /// @notice Transfer `amount` tokens from `from` to `to`.
    /// @param from The origin address  of the tokens being transferred.
    /// @param to The recipient address of the tokensbeing  transfered.
    /// @param amount The number of tokens transfered.
    /// @return success Whether or not the transfer succeeded.
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external override returns (bool success) {
        if (_msgSender() != from && !_superOperators[_msgSender()] && _msgSender() != _operator) {
            uint256 currentAllowance = _allowances[from][_msgSender()];
            if (currentAllowance != ~uint256(0)) {
                // save gas when allowance is maximal by not reducing it (see https://github.com/ethereum/EIPs/issues/717)
                require(currentAllowance >= amount, "NOT_AUTHORIZED_ALLOWANCE");
                _allowances[from][_msgSender()] = currentAllowance - amount;
            }
        }
        _transfer(from, to, amount);
        return true;
    }

    /// @notice Burn `amount` tokens.
    /// @param amount The number of tokens to burn.
    function burn(uint256 amount) external override {
        _burn(_msgSender(), amount);
    }

    /// @notice Burn `amount` tokens from `owner`.
    /// @param from The address whose token to burn.
    /// @param amount The number of tokens to burn.
    function burnFor(address from, uint256 amount) external override {
        _burn(from, amount);
    }

    /// @notice Approve `spender` to transfer `amount` tokens.
    /// @param spender The address to be given rights to transfer.
    /// @param amount The number of tokens allowed.
    /// @return success Whether or not the call succeeded.
    function approve(address spender, uint256 amount) external override returns (bool success) {
        _approveFor(_msgSender(), spender, amount);
        return true;
    }

    /// @notice Get the name of the token collection.
    /// @return The name of the token collection.
    function name() external view virtual returns (string memory) {
        //added virtual
        return _name;
    }

    /// @notice Get the symbol for the token collection.
    /// @return The symbol of the token collection.
    function symbol() external view virtual returns (string memory) {
        //added virtual
        return _symbol;
    }

    /// @notice Get the total number of tokens in existence.
    /// @return The total number of tokens in existence.
    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }

    /// @notice Get the balance of `owner`.
    /// @param owner The address to query the balance of.
    /// @return The amount owned by `owner`.
    function balanceOf(address owner) external view override returns (uint256) {
        return _balances[owner];
    }

    /// @notice Get the allowance of `spender` for `owner`'s tokens.
    /// @param owner The address whose token is allowed.
    /// @param spender The address allowed to transfer.
    /// @return remaining The amount of token `spender` is allowed to transfer on behalf of `owner`.
    function allowance(address owner, address spender) external view override returns (uint256 remaining) {
        return _allowances[owner][spender];
    }

    /// @notice Get the number of decimals for the token collection.
    /// @return The number of decimals.
    function decimals() external pure virtual returns (uint8) {
        return uint8(18);
    }

    /// @notice Approve `spender` to transfer `amount` tokens from `owner`.
    /// @param owner The address whose token is allowed.
    /// @param spender The address to be given rights to transfer.
    /// @param amount The number of tokens allowed.
    /// @return success Whether or not the call succeeded.
    function approveFor(
        address owner,
        address spender,
        uint256 amount
    ) public override returns (bool success) {
        require(_msgSender() == owner || _superOperators[_msgSender()] || _msgSender() == _operator, "NOT_AUTHORIZED");
        _approveFor(owner, spender, amount);
        return true;
    }

    /// @notice Increase the allowance for the spender if needed
    /// @param owner The address of the owner of the tokens
    /// @param spender The address wanting to spend tokens
    /// @param amountNeeded The amount requested to spend
    /// @return success Whether or not the call succeeded.
    function addAllowanceIfNeeded(
        address owner,
        address spender,
        uint256 amountNeeded
    ) public returns (bool success) {
        require(_msgSender() == owner || _superOperators[_msgSender()] || _msgSender() == _operator, "INVALID_SENDER");
        _addAllowanceIfNeeded(owner, spender, amountNeeded);
        return true;
    }

    /// @dev See addAllowanceIfNeeded.
    function _addAllowanceIfNeeded(
        address owner,
        address spender,
        uint256 amountNeeded /*(ERC20Internal, ERC20ExecuteExtension, ERC20BasicApproveExtension)*/
    ) internal virtual override {
        if (amountNeeded > 0 && !isSuperOperator(spender) && spender != _operator) {
            uint256 currentAllowance = _allowances[owner][spender];
            if (currentAllowance < amountNeeded) {
                _approveFor(owner, spender, amountNeeded);
            }
        }
    }

    /// @dev See approveFor.
    function _approveFor(
        address owner,
        address spender,
        uint256 amount /*(ERC20BasicApproveExtension, ERC20Internal)*/
    ) internal virtual override {
        require(owner != address(0) && spender != address(0), "INVALID_OWNER_||_SPENDER");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /// @dev See transfer.
    function _transfer(
        address from,
        address to,
        uint256 amount /*(ERC20Internal, ERC20ExecuteExtension)*/
    ) internal virtual override {
        require(to != address(0), "NOT_TO_ZEROADDRESS");
        require(to != address(this), "NOT_TO_THIS");
        uint256 currentBalance = _balances[from];
        require(currentBalance >= amount, "INSUFFICIENT_FUNDS");
        _balances[from] = currentBalance - amount;
        _balances[to] += amount;
        emit Transfer(from, to, amount);
    }

    /// @dev Mint tokens for a recipient.
    /// @param to The recipient address.
    /// @param amount The number of token to mint.
    function _mint(address to, uint256 amount) internal {
        require(to != address(0), "NOT_TO_ZEROADDRESS");
        require(amount > 0, "MINT_O_TOKENS");
        uint256 currentTotalSupply = _totalSupply;
        uint256 newTotalSupply = currentTotalSupply + amount;
        require(newTotalSupply > currentTotalSupply, "OVERFLOW");
        _totalSupply = newTotalSupply;
        _balances[to] += amount;
        emit Transfer(address(0), to, amount);
    }

    /// @dev Burn tokens from an address.
    /// @param from The address whose tokens to burn.
    /// @param amount The number of token to burn.
    function _burn(address from, uint256 amount) internal {
        require(amount > 0, "BURN_O_TOKENS");
        if (_msgSender() != from && !_superOperators[_msgSender()] && _msgSender() != _operator) {
            uint256 currentAllowance = _allowances[from][_msgSender()];
            if (currentAllowance != ~uint256(0)) {
                // save gas when allowance is maximal by not reducing it (see https://github.com/ethereum/EIPs/issues/717)
                require(currentAllowance >= amount, "INSUFFICIENT_ALLOWANCE");
                _allowances[from][_msgSender()] = currentAllowance - amount;
            }
        }

        uint256 currentBalance = _balances[from];
        require(currentBalance >= amount, "INSUFFICIENT_FUNDS");
        _balances[from] = currentBalance - amount;
        _totalSupply -= amount;
        emit Transfer(from, address(0), amount);
    }
}

File 8 of 13 : ERC20Internal.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.2;

abstract contract ERC20Internal {
    function _approveFor(
        address owner,
        address target,
        uint256 amount
    ) internal virtual;

    function _addAllowanceIfNeeded(
        address owner,
        address spender,
        uint256 amountNeeded
    ) internal virtual;

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual;
}

File 9 of 13 : BytesUtil.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.2;

library BytesUtil {
    uint256 private constant DATA_MIN_LENGTH = 68;

    /// @dev Check if the data == _address.
    /// @param data The bytes passed to the function.
    /// @param _address The address to compare to.
    /// @return Whether the first param == _address.
    function doFirstParamEqualsAddress(bytes memory data, address _address) internal pure returns (bool) {
        if (data.length < DATA_MIN_LENGTH) {
            return false;
        }
        uint256 value;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            value := mload(add(data, 36))
        }
        return value == uint256(uint160(_address));
    }
}

File 10 of 13 : IERC20Extended.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.2;

import "./IERC20.sol";

interface IERC20Extended is IERC20 {
    function burnFor(address from, uint256 amount) external;

    function burn(uint256 amount) external;

    function approveFor(
        address owner,
        address spender,
        uint256 amount
    ) external returns (bool success);
}

File 11 of 13 : WithSuperOperators.sol
//SPDX-License-Identifier: MIT
// solhint-disable-next-line compiler-version
pragma solidity 0.8.2;

import "./WithAdmin.sol";

contract WithSuperOperators is WithAdmin {
    mapping(address => bool) internal _superOperators;

    event SuperOperator(address superOperator, bool enabled);

    /// @notice Enable or disable the ability of `superOperator` to transfer tokens of all (superOperator rights).
    /// @param superOperator address that will be given/removed superOperator right.
    /// @param enabled set whether the superOperator is enabled or disabled.
    function setSuperOperator(address superOperator, bool enabled) external {
        require(msg.sender == _admin, "only admin is allowed to add super operators");
        _superOperators[superOperator] = enabled;
        emit SuperOperator(superOperator, enabled);
    }

    /// @notice check whether address `who` is given superOperator rights.
    /// @param who The address to query.
    /// @return whether the address has superOperator rights.
    function isSuperOperator(address who) public view returns (bool) {
        return _superOperators[who];
    }
}

File 12 of 13 : IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.2;

/// @dev see https://eips.ethereum.org/EIPS/eip-20
interface IERC20 {
    /// @notice emitted when tokens are transfered from one address to another.
    /// @param from address from which the token are transfered from (zero means tokens are minted).
    /// @param to destination address which the token are transfered to (zero means tokens are burnt).
    /// @param value amount of tokens transferred.
    event Transfer(address indexed from, address indexed to, uint256 value);

    /// @notice emitted when owner grant transfer rights to another address
    /// @param owner address allowing its token to be transferred.
    /// @param spender address allowed to spend on behalf of `owner`
    /// @param value amount of tokens allowed.
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /// @notice return the current total amount of tokens owned by all holders.
    /// @return supply total number of tokens held.
    function totalSupply() external view returns (uint256 supply);

    /// @notice return the number of tokens held by a particular address.
    /// @param who address being queried.
    /// @return balance number of token held by that address.
    function balanceOf(address who) external view returns (uint256 balance);

    /// @notice transfer tokens to a specific address.
    /// @param to destination address receiving the tokens.
    /// @param value number of tokens to transfer.
    /// @return success whether the transfer succeeded.
    function transfer(address to, uint256 value) external returns (bool success);

    /// @notice transfer tokens from one address to another.
    /// @param from address tokens will be sent from.
    /// @param to destination address receiving the tokens.
    /// @param value number of tokens to transfer.
    /// @return success whether the transfer succeeded.
    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool success);

    /// @notice approve an address to spend on your behalf.
    /// @param spender address entitled to transfer on your behalf.
    /// @param value amount allowed to be transfered.
    /// @param success whether the approval succeeded.
    function approve(address spender, uint256 value) external returns (bool success);

    /// @notice return the current allowance for a particular owner/spender pair.
    /// @param owner address allowing spender.
    /// @param spender address allowed to spend.
    /// @return amount number of tokens `spender` can spend on behalf of `owner`.
    function allowance(address owner, address spender) external view returns (uint256 amount);
}

File 13 of 13 : WithAdmin.sol
//SPDX-License-Identifier: MIT
// solhint-disable-next-line compiler-version
pragma solidity 0.8.2;

contract WithAdmin {
    address internal _admin;

    /// @dev Emits when the contract administrator is changed.
    /// @param oldAdmin The address of the previous administrator.
    /// @param newAdmin The address of the new administrator.
    event AdminChanged(address oldAdmin, address newAdmin);

    modifier onlyAdmin() {
        require(msg.sender == _admin, "ADMIN_ONLY");
        _;
    }

    /// @dev Get the current administrator of this contract.
    /// @return The current administrator of this contract.
    function getAdmin() external view returns (address) {
        return _admin;
    }

    /// @dev Change the administrator to be `newAdmin`.
    /// @param newAdmin The address of the new administrator.
    function changeAdmin(address newAdmin) external {
        require(msg.sender == _admin, "ADMIN_ACCESS_DENIED");
        emit AdminChanged(_admin, newAdmin);
        _admin = newAdmin;
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 2000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_childChainManagerProxy","type":"address"},{"internalType":"address","name":"trustedForwarder","type":"address"},{"internalType":"address","name":"sandAdmin","type":"address"},{"internalType":"address","name":"executionAdmin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","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":"superOperator","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SuperOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amountNeeded","type":"uint256"}],"name":"addAllowanceIfNeeded","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"remaining","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approveFor","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"childChainManagerProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bytes","name":"depositData","type":"bytes"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTrustedForwarder","outputs":[{"internalType":"address","name":"trustedForwarder","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"isSuperOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"forwarder","type":"address"}],"name":"isTrustedForwarder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"paidCall","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"superOperator","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSuperOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"trustedForwarder","type":"address"}],"name":"setTrustedForwarder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newChildChainManagerProxy","type":"address"}],"name":"updateChildChainManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a06040523480156200001157600080fd5b506040516200234b3803806200234b83398101604081905262000034916200049b565b81816000806040518060400160405280600481526020016314d0539160e21b8152506040518060400160405280600481526020016314d0539160e21b815250858583600290805190602001906200008d929190620003dd565b508251620000a3906003906020860190620003dd565b506000805460609290921b6001600160601b0319166080526001600160a01b03199182166001600160a01b039384161790911688831617905584161591506200010e9050576000620000fe82670de0b6b3a764000062000512565b90506200010c838262000225565b505b505050506000620001246200037e60201b60201c565b600780546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b038416620001d95760405162461bcd60e51b815260206004820152602260248201527f426164204368696c64436861696e4d616e6167657250726f7879206164647265604482015261737360f01b60648201526084015b60405180910390fd5b600980546001600160a01b0319166001600160a01b0386161790556200021b83600880546001600160a01b0319166001600160a01b0392909216919091179055565b5050505062000587565b6001600160a01b038216620002725760405162461bcd60e51b81526020600482015260126024820152714e4f545f544f5f5a45524f4144445245535360701b6044820152606401620001d0565b60008111620002b45760405162461bcd60e51b815260206004820152600d60248201526c4d494e545f4f5f544f4b454e5360981b6044820152606401620001d0565b6004546000620002c58383620004f7565b9050818111620003035760405162461bcd60e51b81526020600482015260086024820152674f564552464c4f5760c01b6044820152606401620001d0565b60048190556001600160a01b0384166000908152600560205260408120805485929062000332908490620004f7565b90915550506040518381526001600160a01b038516906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b6000620003956200039b60201b6200123c1760201c565b90505b90565b6000620003a833620003c6565b15620003be575060131936013560601c62000398565b503362000398565b6008546001600160a01b038281169116145b919050565b828054620003eb9062000534565b90600052602060002090601f0160209004810192826200040f57600085556200045a565b82601f106200042a57805160ff19168380011785556200045a565b828001600101855582156200045a579182015b828111156200045a5782518255916020019190600101906200043d565b50620004689291506200046c565b5090565b5b808211156200046857600081556001016200046d565b80516001600160a01b0381168114620003d857600080fd5b60008060008060808587031215620004b1578384fd5b620004bc8562000483565b9350620004cc6020860162000483565b9250620004dc6040860162000483565b9150620004ec6060860162000483565b905092959194509250565b600082198211156200050d576200050d62000571565b500190565b60008160001904831182151516156200052f576200052f62000571565b500290565b6002810460018216806200054957607f821691505b602082108114156200056b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60805160601c611d89620005c2600039600081816106af0152818161083e0152818161093a0152818161140501526117ec0152611d896000f3fe6080604052600436106101c25760003560e01c80636e9960c3116100f7578063ac9fe42111610095578063cf2c52cb11610064578063cf2c52cb146104f0578063da74222814610510578063dd62ed3e14610530578063f2fde38b14610576576101c2565b8063ac9fe4211461048c578063bb1e23cb146104ac578063cae9ca51146104bf578063ce1b815f146104d2576101c2565b80638da5cb5b116100d15780638da5cb5b146104195780638f2839701461043757806395d89b4114610457578063a9059cbb1461046c576101c2565b80636e9960c3146103b057806370a08231146103ce578063715018a614610404576101c2565b8063313ce56711610164578063445a67971161013e578063445a6797146102ff578063572b6c051461031f57806362f629e71461033f578063654b748a14610377576101c2565b8063313ce567146102c35780633b7b5a16146102df57806342966c68146102a3576101c2565b80631dd319cb116101a05780631dd319cb1461024157806323b872dd146102635780632b991746146102835780632e1a7d4d146102a3576101c2565b806306fdde03146101c7578063095ea7b3146101f257806318160ddd14610222575b600080fd5b3480156101d357600080fd5b506101dc610596565b6040516101e99190611c8e565b60405180910390f35b3480156101fe57600080fd5b5061021261020d366004611b7c565b610629565b60405190151581526020016101e9565b34801561022e57600080fd5b506004545b6040519081526020016101e9565b34801561024d57600080fd5b5061026161025c366004611b7c565b610647565b005b34801561026f57600080fd5b5061021261027e366004611ab6565b610655565b34801561028f57600080fd5b5061021261029e366004611ab6565b6107e8565b3480156102af57600080fd5b506102616102be366004611bfd565b6108d0565b3480156102cf57600080fd5b50604051601281526020016101e9565b3480156102eb57600080fd5b506102126102fa366004611ab6565b6108e4565b34801561030b57600080fd5b5061026161031a366004611a63565b6109cc565b34801561032b57600080fd5b5061021261033a366004611a63565b610af0565b34801561034b57600080fd5b5060095461035f906001600160a01b031681565b6040516001600160a01b0390911681526020016101e9565b34801561038357600080fd5b50610212610392366004611a63565b6001600160a01b031660009081526001602052604090205460ff1690565b3480156103bc57600080fd5b506000546001600160a01b031661035f565b3480156103da57600080fd5b506102336103e9366004611a63565b6001600160a01b031660009081526005602052604090205490565b34801561041057600080fd5b50610261610b07565b34801561042557600080fd5b506007546001600160a01b031661035f565b34801561044357600080fd5b50610261610452366004611a63565b610bd7565b34801561046357600080fd5b506101dc610ca7565b34801561047857600080fd5b50610212610487366004611b7c565b610cb6565b34801561049857600080fd5b506102616104a7366004611af1565b610cca565b6101dc6104ba366004611ba5565b610dcb565b6101dc6104cd366004611ba5565b610f09565b3480156104de57600080fd5b506008546001600160a01b031661035f565b3480156104fc57600080fd5b5061026161050b366004611b2b565b610fac565b34801561051c57600080fd5b5061026161052b366004611a63565b611036565b34801561053c57600080fd5b5061023361054b366004611a84565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561058257600080fd5b50610261610591366004611a63565b6110de565b6060600280546105a590611cd0565b80601f01602080910402602001604051908101604052809291908181526020018280546105d190611cd0565b801561061e5780601f106105f35761010080835404028352916020019161061e565b820191906000526020600020905b81548152906001019060200180831161060157829003601f168201915b505050505090505b90565b600061063d610636611280565b848461128f565b5060015b92915050565b610651828261135d565b5050565b6000836001600160a01b0316610669611280565b6001600160a01b0316141580156106a6575060016000610687611280565b6001600160a01b0316815260208101919091526040016000205460ff16155b80156106eb57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166106df611280565b6001600160a01b031614155b156107d3576001600160a01b038416600090815260066020526040812081610711611280565b6001600160a01b03168152602081019190915260400160002054905060001981146107d1578281101561078b5760405162461bcd60e51b815260206004820152601860248201527f4e4f545f415554484f52495a45445f414c4c4f57414e4345000000000000000060448201526064015b60405180910390fd5b6107958382611cb9565b6001600160a01b0386166000908152600660205260408120906107b6611280565b6001600160a01b031681526020810191909152604001600020555b505b6107de848484611608565b5060019392505050565b6000836001600160a01b03166107fc611280565b6001600160a01b03161480610836575060016000610818611280565b6001600160a01b0316815260208101919091526040016000205460ff165b8061087957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661086e611280565b6001600160a01b0316145b6108c55760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610782565b6107de84848461128f565b6108e16108db611280565b8261135d565b50565b6000836001600160a01b03166108f8611280565b6001600160a01b03161480610932575060016000610914611280565b6001600160a01b0316815260208101919091526040016000205460ff165b8061097557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661096a611280565b6001600160a01b0316145b6109c15760405162461bcd60e51b815260206004820152600e60248201527f494e56414c49445f53454e4445520000000000000000000000000000000000006044820152606401610782565b6107de8484846117ba565b6109d4611280565b6001600160a01b03166109ef6007546001600160a01b031690565b6001600160a01b031614610a455760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610782565b6001600160a01b038116610ac15760405162461bcd60e51b815260206004820152602260248201527f426164204368696c64436861696e4d616e6167657250726f787920616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610782565b6009805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6008546001600160a01b038281169116145b919050565b610b0f611280565b6001600160a01b0316610b2a6007546001600160a01b031690565b6001600160a01b031614610b805760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610782565b6007546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36007805473ffffffffffffffffffffffffffffffffffffffff19169055565b6000546001600160a01b03163314610c315760405162461bcd60e51b815260206004820152601360248201527f41444d494e5f4143434553535f44454e494544000000000000000000000000006044820152606401610782565b600054604080516001600160a01b03928316815291831660208301527f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a16000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6060600380546105a590611cd0565b600061063d610cc3611280565b8484611608565b6000546001600160a01b03163314610d4a5760405162461bcd60e51b815260206004820152602c60248201527f6f6e6c792061646d696e20697320616c6c6f77656420746f206164642073757060448201527f6572206f70657261746f727300000000000000000000000000000000000000006064820152608401610782565b6001600160a01b03821660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168515159081179091558251938452908301527f44f92d27abdf4cfb6a7d712c3af68f3be086d4ca747ab802c36f67d6790060d8910160405180910390a15050565b6060610e1583838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e109250611280915050565b611864565b610e615760405162461bcd60e51b815260206004820152601660248201527f46495253545f504152414d5f4e4f545f53454e444552000000000000000000006044820152606401610782565b8315610e7957610e79610e72611280565b86866117ba565b600080866001600160a01b0316348686604051610e97929190611c7e565b60006040518083038185875af1925050503d8060008114610ed4576040519150601f19603f3d011682016040523d82523d6000602084013e610ed9565b606091505b5091509150818190610efe5760405162461bcd60e51b81526004016107829190611c8e565b509695505050505050565b6060610f4e83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e109250611280915050565b610f9a5760405162461bcd60e51b815260206004820152601660248201527f46495253545f504152414d5f4e4f545f53454e444552000000000000000000006044820152606401610782565b610e79610fa5611280565b868661128f565b6009546001600160a01b0316610fc0611280565b6001600160a01b0316146110165760405162461bcd60e51b815260206004820152601d60248201527f596f75277265206e6f7420616c6c6f77656420746f206465706f7369740000006044820152606401610782565b600061102482840184611bfd565b9050611030848261188f565b50505050565b61103e611280565b6001600160a01b03166110596007546001600160a01b031690565b6001600160a01b0316146110af5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610782565b6008805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6110e6611280565b6001600160a01b03166111016007546001600160a01b031690565b6001600160a01b0316146111575760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610782565b6001600160a01b0381166111d35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610782565b6007546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36007805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600061124733610af0565b1561127957507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c610626565b5033610626565b600061128a61123c565b905090565b6001600160a01b038316158015906112af57506001600160a01b03821615155b6112fb5760405162461bcd60e51b815260206004820152601860248201527f494e56414c49445f4f574e45525f7c7c5f5350454e44455200000000000000006044820152606401610782565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600081116113ad5760405162461bcd60e51b815260206004820152600d60248201527f4255524e5f4f5f544f4b454e53000000000000000000000000000000000000006044820152606401610782565b816001600160a01b03166113bf611280565b6001600160a01b0316141580156113fc5750600160006113dd611280565b6001600160a01b0316815260208101919091526040016000205460ff16155b801561144157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611435611280565b6001600160a01b031614155b15611524576001600160a01b038216600090815260066020526040812081611467611280565b6001600160a01b031681526020810191909152604001600020549050600019811461152257818110156114dc5760405162461bcd60e51b815260206004820152601660248201527f494e53554646494349454e545f414c4c4f57414e4345000000000000000000006044820152606401610782565b6114e68282611cb9565b6001600160a01b038416600090815260066020526040812090611507611280565b6001600160a01b031681526020810191909152604001600020555b505b6001600160a01b0382166000908152600560205260409020548181101561158d5760405162461bcd60e51b815260206004820152601260248201527f494e53554646494349454e545f46554e445300000000000000000000000000006044820152606401610782565b6115978282611cb9565b6001600160a01b038416600090815260056020526040812091909155600480548492906115c5908490611cb9565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611350565b6001600160a01b03821661165e5760405162461bcd60e51b815260206004820152601260248201527f4e4f545f544f5f5a45524f4144445245535300000000000000000000000000006044820152606401610782565b6001600160a01b0382163014156116b75760405162461bcd60e51b815260206004820152600b60248201527f4e4f545f544f5f544849530000000000000000000000000000000000000000006044820152606401610782565b6001600160a01b038316600090815260056020526040902054818110156117205760405162461bcd60e51b815260206004820152601260248201527f494e53554646494349454e545f46554e445300000000000000000000000000006044820152606401610782565b61172a8282611cb9565b6001600160a01b038086166000908152600560205260408082209390935590851681529081208054849290611760908490611ca1565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117ac91815260200190565b60405180910390a350505050565b6000811180156117e357506001600160a01b03821660009081526001602052604090205460ff16155b801561182157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b1561185f576001600160a01b03808416600090815260066020908152604080832093861683529290522054818110156110305761103084848461128f565b505050565b600060448351101561187857506000610641565b5060248201516001600160a01b0382161492915050565b6001600160a01b0382166118e55760405162461bcd60e51b815260206004820152601260248201527f4e4f545f544f5f5a45524f4144445245535300000000000000000000000000006044820152606401610782565b600081116119355760405162461bcd60e51b815260206004820152600d60248201527f4d494e545f4f5f544f4b454e53000000000000000000000000000000000000006044820152606401610782565b60045460006119448383611ca1565b90508181116119955760405162461bcd60e51b815260206004820152600860248201527f4f564552464c4f570000000000000000000000000000000000000000000000006044820152606401610782565b60048190556001600160a01b038416600090815260056020526040812080548592906119c2908490611ca1565b90915550506040518381526001600160a01b038516906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016117ac565b80356001600160a01b0381168114610b0257600080fd5b60008083601f840112611a2d578182fd5b50813567ffffffffffffffff811115611a44578182fd5b602083019150836020828501011115611a5c57600080fd5b9250929050565b600060208284031215611a74578081fd5b611a7d82611a05565b9392505050565b60008060408385031215611a96578081fd5b611a9f83611a05565b9150611aad60208401611a05565b90509250929050565b600080600060608486031215611aca578081fd5b611ad384611a05565b9250611ae160208501611a05565b9150604084013590509250925092565b60008060408385031215611b03578182fd5b611b0c83611a05565b915060208301358015158114611b20578182fd5b809150509250929050565b600080600060408486031215611b3f578283fd5b611b4884611a05565b9250602084013567ffffffffffffffff811115611b63578283fd5b611b6f86828701611a1c565b9497909650939450505050565b60008060408385031215611b8e578182fd5b611b9783611a05565b946020939093013593505050565b60008060008060608587031215611bba578081fd5b611bc385611a05565b935060208501359250604085013567ffffffffffffffff811115611be5578182fd5b611bf187828801611a1c565b95989497509550505050565b600060208284031215611c0e578081fd5b5035919050565b60008151808452815b81811015611c3a57602081850181015186830182015201611c1e565b81811115611c4b5782602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000828483379101908152919050565b600060208252611a7d6020830184611c15565b60008219821115611cb457611cb4611d24565b500190565b600082821015611ccb57611ccb611d24565b500390565b600281046001821680611ce457607f821691505b60208210811415611d1e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122062a887365b69f1c5fb4fb5b0be071e4c0dc583555fa546d72053d18702a5dfe064736f6c63430008020033000000000000000000000000a6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa00000000000000000000000086c80a8aa58e0a4fa09a69624c31ab2a6cad56b8000000000000000000000000e75ce341c98400a45f579e32c95ff49681fc93fa000000000000000000000000e75ce341c98400a45f579e32c95ff49681fc93fa

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

000000000000000000000000a6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa00000000000000000000000086c80a8aa58e0a4fa09a69624c31ab2a6cad56b8000000000000000000000000e75ce341c98400a45f579e32c95ff49681fc93fa000000000000000000000000e75ce341c98400a45f579e32c95ff49681fc93fa

-----Decoded View---------------
Arg [0] : _childChainManagerProxy (address): 0xa6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa
Arg [1] : trustedForwarder (address): 0x86c80a8aa58e0a4fa09a69624c31ab2a6cad56b8
Arg [2] : sandAdmin (address): 0xe75ce341c98400a45f579e32c95ff49681fc93fa
Arg [3] : executionAdmin (address): 0xe75ce341c98400a45f579e32c95ff49681fc93fa

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000a6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa
Arg [1] : 00000000000000000000000086c80a8aa58e0a4fa09a69624c31ab2a6cad56b8
Arg [2] : 000000000000000000000000e75ce341c98400a45f579e32c95ff49681fc93fa
Arg [3] : 000000000000000000000000e75ce341c98400a45f579e32c95ff49681fc93fa


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.