Mumbai Testnet

Contract

0xE03489D4E90b22c59c5e23d45DFd59Fc0dB8a025
Transaction Hash
Method
Block
From
To
Value
Approve475766382024-03-28 8:49:2976 days ago1711615769IN
0xE03489D4...c0dB8a025
0 MATIC0.000078291.60050001
Approve475424962024-03-27 11:48:4677 days ago1711540126IN
0xE03489D4...c0dB8a025
0 MATIC0.000072891.50000001
Transfer475420502024-03-27 11:32:5877 days ago1711539178IN
0xE03489D4...c0dB8a025
0 MATIC0.000156932.91000001
Approve475419342024-03-27 11:28:5077 days ago1711538930IN
0xE03489D4...c0dB8a025
0 MATIC0.000197524.06468802
Approve475417292024-03-27 11:21:3677 days ago1711538496IN
0xE03489D4...c0dB8a025
0 MATIC0.000432668.90335438
Approve475411262024-03-27 11:00:1477 days ago1711537214IN
0xE03489D4...c0dB8a025
0 MATIC0.000190533.9208432
Transfer475407672024-03-27 10:47:3077 days ago1711536450IN
0xE03489D4...c0dB8a025
0 MATIC0.000221374.10481143
Approve475407362024-03-27 10:46:2677 days ago1711536386IN
0xE03489D4...c0dB8a025
0 MATIC0.000171373.5264703
Transfer473396972024-03-22 7:13:1482 days ago1711091594IN
0xE03489D4...c0dB8a025
0 MATIC0.000277685.14787004
Approve473100992024-03-21 12:30:1583 days ago1711024215IN
0xE03489D4...c0dB8a025
0 MATIC0.0007319614.99190258
Approve473096932024-03-21 12:14:1583 days ago1711023255IN
0xE03489D4...c0dB8a025
0 MATIC0.000097642.00000001
Approve472860472024-03-20 21:55:0083 days ago1710971700IN
0xE03489D4...c0dB8a025
0 MATIC0.000063442.00000001
Approve472860212024-03-20 21:54:0683 days ago1710971646IN
0xE03489D4...c0dB8a025
0 MATIC0.000097642.00000001
Approve467785312024-03-07 19:09:2896 days ago1709838568IN
0xE03489D4...c0dB8a025
0 MATIC0.002031470
Approve467783952024-03-07 19:04:3796 days ago1709838277IN
0xE03489D4...c0dB8a025
0 MATIC0.002031470
Approve467783302024-03-07 19:02:1996 days ago1709838139IN
0xE03489D4...c0dB8a025
0 MATIC0.002031470
Approve467782132024-03-07 18:58:1196 days ago1709837891IN
0xE03489D4...c0dB8a025
0 MATIC0.002031470
Approve467781762024-03-07 18:56:5396 days ago1709837813IN
0xE03489D4...c0dB8a025
0 MATIC0.002031470
Approve467781642024-03-07 18:56:2796 days ago1709837787IN
0xE03489D4...c0dB8a025
0 MATIC0.002031470
Approve467781312024-03-07 18:55:1796 days ago1709837717IN
0xE03489D4...c0dB8a025
0 MATIC0.002031470
Approve467781032024-03-07 18:54:1796 days ago1709837657IN
0xE03489D4...c0dB8a025
0 MATIC0.002031470
Approve467780852024-03-07 18:53:3996 days ago1709837619IN
0xE03489D4...c0dB8a025
0 MATIC0.002031470
Approve467780732024-03-07 18:53:1396 days ago1709837593IN
0xE03489D4...c0dB8a025
0 MATIC0.002031470
Approve467780012024-03-07 18:50:4196 days ago1709837441IN
0xE03489D4...c0dB8a025
0 MATIC0.002031470
Approve467779882024-03-07 18:50:1396 days ago1709837413IN
0xE03489D4...c0dB8a025
0 MATIC0.002031470
View all transactions

Parent Transaction Hash Block From To Value
View All Internal Transactions
Loading...
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 2 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 2 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 2 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 2 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 2 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 {
    bytes32 internal immutable _name; // works only for string that can fit into 32 bytes
    bytes32 internal immutable _symbol; // works only for string that can fit into 32 bytes
    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
    ) {
        require(bytes(tokenName).length > 0, "INVALID_NAME_REQUIRED");
        require(bytes(tokenName).length <= 32, "INVALID_NAME_TOO_LONG");
        _name = _firstBytes32(bytes(tokenName));
        require(bytes(tokenSymbol).length > 0, "INVALID_SYMBOL_REQUIRED");
        require(bytes(tokenSymbol).length <= 32, "INVALID_SYMBOL_TOO_LONG");
        _symbol = _firstBytes32(bytes(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 string(abi.encodePacked(_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 string(abi.encodePacked(_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;
    }

    /// @notice Get the first 32 bytes of input `src`.
    /// @param src The input data
    /// @return output The first 32 bytes of `src`.
    function _firstBytes32(bytes memory src) public pure returns (bytes32 output) {
        // solhint-disable-next-line no-inline-assembly
        assembly {
            output := mload(add(src, 32))
        }
    }

    /// @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 2 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 2 of 13 : BytesUtil.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.2;

library BytesUtil {
    /// @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 < (36 + 32)) {
            return false;
        }
        uint256 value;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            value := mload(add(data, 36))
        }
        return value == uint256(uint160(_address));
    }
}

File 2 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 2 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 2 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 2 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",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  },
  "libraries": {}
}

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":"bytes","name":"src","type":"bytes"}],"name":"_firstBytes32","outputs":[{"internalType":"bytes32","name":"output","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"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"}]

60e06040523480156200001157600080fd5b506040516200241038038062002410833981016040819052620000349162000521565b81816000806040518060400160405280600481526020016314d0539160e21b8152506040518060400160405280600481526020016314d0539160e21b81525085856000845111620000cc5760405162461bcd60e51b815260206004820152601560248201527f494e56414c49445f4e414d455f5245515549524544000000000000000000000060448201526064015b60405180910390fd5b602084511115620001205760405162461bcd60e51b815260206004820152601560248201527f494e56414c49445f4e414d455f544f4f5f4c4f4e4700000000000000000000006044820152606401620000c3565b60208401516080528251620001785760405162461bcd60e51b815260206004820152601760248201527f494e56414c49445f53594d424f4c5f52455155495245440000000000000000006044820152606401620000c3565b602083511115620001cc5760405162461bcd60e51b815260206004820152601760248201527f494e56414c49445f53594d424f4c5f544f4f5f4c4f4e470000000000000000006044820152606401620000c3565b602083015160a0526000805460609290921b6001600160601b03191660c0526001600160a01b03199182166001600160a01b039384161790911688831617905584161591506200023e90505760006200022e82670de0b6b3a764000062000598565b90506200023c838262000351565b505b50505050600062000254620004aa60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b038416620003055760405162461bcd60e51b815260206004820152602260248201527f426164204368696c64436861696e4d616e6167657250726f7879206164647265604482015261737360f01b6064820152608401620000c3565b600780546001600160a01b0319166001600160a01b0386161790556200034783600680546001600160a01b0319166001600160a01b0392909216919091179055565b50505050620005d0565b6001600160a01b0382166200039e5760405162461bcd60e51b81526020600482015260126024820152714e4f545f544f5f5a45524f4144445245535360701b6044820152606401620000c3565b60008111620003e05760405162461bcd60e51b815260206004820152600d60248201526c4d494e545f4f5f544f4b454e5360981b6044820152606401620000c3565b6002546000620003f183836200057d565b90508181116200042f5760405162461bcd60e51b81526020600482015260086024820152674f564552464c4f5760c01b6044820152606401620000c3565b60028190556001600160a01b038416600090815260036020526040812080548592906200045e9084906200057d565b90915550506040518381526001600160a01b038516906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b6000620004c1620004c760201b6200123d1760201c565b90505b90565b6000620004d433620004f2565b15620004ea575060131936013560601c620004c4565b5033620004c4565b6006546001600160a01b038281169116145b919050565b80516001600160a01b03811681146200050457600080fd5b6000806000806080858703121562000537578384fd5b620005428562000509565b9350620005526020860162000509565b9250620005626040860162000509565b9150620005726060860162000509565b905092959194509250565b60008219821115620005935762000593620005ba565b500190565b6000816000190483118215151615620005b557620005b5620005ba565b500290565b634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160601c611df16200061f6000396000818161068c0152818161081b015281816109170152818161140601526117ed01526000610c8a015260006105c80152611df16000f3fe6080604052600436106101cc5760003560e01c80636e9960c3116100f7578063ac9fe42111610095578063cf2c52cb11610064578063cf2c52cb1461051c578063da7422281461053c578063dd62ed3e1461055c578063f2fde38b146105a2576101cc565b8063ac9fe421146104b8578063bb1e23cb146104d8578063cae9ca51146104eb578063ce1b815f146104fe576101cc565b80638da5cb5b116100d15780638da5cb5b146104455780638f2839701461046357806395d89b4114610483578063a9059cbb14610498576101cc565b80636e9960c3146103dc57806370a08231146103fa578063715018a614610430576101cc565b80632e1a7d4d1161016f578063445a67971161013e578063445a67971461032b578063572b6c051461034b57806362f629e71461036b578063654b748a146103a3576101cc565b80632e1a7d4d146102cf578063313ce567146102ef5780633b7b5a161461030b57806342966c68146102cf576101cc565b806318160ddd116101ab57806318160ddd146102585780631dd319cb1461026d57806323b872dd1461028f5780632b991746146102af576101cc565b80629ad300146101d157806306fdde0314610206578063095ea7b314610228575b600080fd5b3480156101dd57600080fd5b506101f36101ec366004611bfe565b6020015190565b6040519081526020015b60405180910390f35b34801561021257600080fd5b5061021b6105c2565b6040516101fd9190611d1b565b34801561023457600080fd5b50610248610243366004611b7d565b610606565b60405190151581526020016101fd565b34801561026457600080fd5b506002546101f3565b34801561027957600080fd5b5061028d610288366004611b7d565b610624565b005b34801561029b57600080fd5b506102486102aa366004611ab7565b610632565b3480156102bb57600080fd5b506102486102ca366004611ab7565b6107c5565b3480156102db57600080fd5b5061028d6102ea366004611ca8565b6108ad565b3480156102fb57600080fd5b50604051601281526020016101fd565b34801561031757600080fd5b50610248610326366004611ab7565b6108c1565b34801561033757600080fd5b5061028d610346366004611a64565b6109a9565b34801561035757600080fd5b50610248610366366004611a64565b610acd565b34801561037757600080fd5b5060075461038b906001600160a01b031681565b6040516001600160a01b0390911681526020016101fd565b3480156103af57600080fd5b506102486103be366004611a64565b6001600160a01b031660009081526001602052604090205460ff1690565b3480156103e857600080fd5b506000546001600160a01b031661038b565b34801561040657600080fd5b506101f3610415366004611a64565b6001600160a01b031660009081526003602052604090205490565b34801561043c57600080fd5b5061028d610ae4565b34801561045157600080fd5b506005546001600160a01b031661038b565b34801561046f57600080fd5b5061028d61047e366004611a64565b610bb4565b34801561048f57600080fd5b5061021b610c84565b3480156104a457600080fd5b506102486104b3366004611b7d565b610cb7565b3480156104c457600080fd5b5061028d6104d3366004611af2565b610ccb565b61021b6104e6366004611ba6565b610dcc565b61021b6104f9366004611ba6565b610f0a565b34801561050a57600080fd5b506006546001600160a01b031661038b565b34801561052857600080fd5b5061028d610537366004611b2c565b610fad565b34801561054857600080fd5b5061028d610557366004611a64565b611037565b34801561056857600080fd5b506101f3610577366004611a85565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156105ae57600080fd5b5061028d6105bd366004611a64565b6110df565b604080517f00000000000000000000000000000000000000000000000000000000000000006020820152606091015b60405160208183030381529060405290505b90565b600061061a610613611281565b8484611290565b5060015b92915050565b61062e828261135e565b5050565b6000836001600160a01b0316610646611281565b6001600160a01b031614158015610683575060016000610664611281565b6001600160a01b0316815260208101919091526040016000205460ff16155b80156106c857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166106bc611281565b6001600160a01b031614155b156107b0576001600160a01b0384166000908152600460205260408120816106ee611281565b6001600160a01b03168152602081019190915260400160002054905060001981146107ae57828110156107685760405162461bcd60e51b815260206004820152601860248201527f4e4f545f415554484f52495a45445f414c4c4f57414e4345000000000000000060448201526064015b60405180910390fd5b6107728382611d46565b6001600160a01b038616600090815260046020526040812090610793611281565b6001600160a01b031681526020810191909152604001600020555b505b6107bb848484611609565b5060019392505050565b6000836001600160a01b03166107d9611281565b6001600160a01b031614806108135750600160006107f5611281565b6001600160a01b0316815260208101919091526040016000205460ff165b8061085657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661084b611281565b6001600160a01b0316145b6108a25760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a4544000000000000000000000000000000000000604482015260640161075f565b6107bb848484611290565b6108be6108b8611281565b8261135e565b50565b6000836001600160a01b03166108d5611281565b6001600160a01b0316148061090f5750600160006108f1611281565b6001600160a01b0316815260208101919091526040016000205460ff165b8061095257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610947611281565b6001600160a01b0316145b61099e5760405162461bcd60e51b815260206004820152600e60248201527f494e56414c49445f53454e444552000000000000000000000000000000000000604482015260640161075f565b6107bb8484846117bb565b6109b1611281565b6001600160a01b03166109cc6005546001600160a01b031690565b6001600160a01b031614610a225760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161075f565b6001600160a01b038116610a9e5760405162461bcd60e51b815260206004820152602260248201527f426164204368696c64436861696e4d616e6167657250726f787920616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161075f565b6007805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6006546001600160a01b038281169116145b919050565b610aec611281565b6001600160a01b0316610b076005546001600160a01b031690565b6001600160a01b031614610b5d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161075f565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36005805473ffffffffffffffffffffffffffffffffffffffff19169055565b6000546001600160a01b03163314610c0e5760405162461bcd60e51b815260206004820152601360248201527f41444d494e5f4143434553535f44454e49454400000000000000000000000000604482015260640161075f565b600054604080516001600160a01b03928316815291831660208301527f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a16000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b604080517f00000000000000000000000000000000000000000000000000000000000000006020820152606091016105f1565b600061061a610cc4611281565b8484611609565b6000546001600160a01b03163314610d4b5760405162461bcd60e51b815260206004820152602c60248201527f6f6e6c792061646d696e20697320616c6c6f77656420746f206164642073757060448201527f6572206f70657261746f72730000000000000000000000000000000000000000606482015260840161075f565b6001600160a01b03821660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168515159081179091558251938452908301527f44f92d27abdf4cfb6a7d712c3af68f3be086d4ca747ab802c36f67d6790060d8910160405180910390a15050565b6060610e1683838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e119250611281915050565b611865565b610e625760405162461bcd60e51b815260206004820152601660248201527f46495253545f504152414d5f4e4f545f53454e44455200000000000000000000604482015260640161075f565b8315610e7a57610e7a610e73611281565b86866117bb565b600080866001600160a01b0316348686604051610e98929190611d0b565b60006040518083038185875af1925050503d8060008114610ed5576040519150601f19603f3d011682016040523d82523d6000602084013e610eda565b606091505b5091509150818190610eff5760405162461bcd60e51b815260040161075f9190611d1b565b509695505050505050565b6060610f4f83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e119250611281915050565b610f9b5760405162461bcd60e51b815260206004820152601660248201527f46495253545f504152414d5f4e4f545f53454e44455200000000000000000000604482015260640161075f565b610e7a610fa6611281565b8686611290565b6007546001600160a01b0316610fc1611281565b6001600160a01b0316146110175760405162461bcd60e51b815260206004820152601d60248201527f596f75277265206e6f7420616c6c6f77656420746f206465706f736974000000604482015260640161075f565b600061102582840184611ca8565b90506110318482611890565b50505050565b61103f611281565b6001600160a01b031661105a6005546001600160a01b031690565b6001600160a01b0316146110b05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161075f565b6006805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6110e7611281565b6001600160a01b03166111026005546001600160a01b031690565b6001600160a01b0316146111585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161075f565b6001600160a01b0381166111d45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161075f565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600061124833610acd565b1561127a57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c610603565b5033610603565b600061128b61123d565b905090565b6001600160a01b038316158015906112b057506001600160a01b03821615155b6112fc5760405162461bcd60e51b815260206004820152601860248201527f494e56414c49445f4f574e45525f7c7c5f5350454e4445520000000000000000604482015260640161075f565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600081116113ae5760405162461bcd60e51b815260206004820152600d60248201527f4255524e5f4f5f544f4b454e5300000000000000000000000000000000000000604482015260640161075f565b816001600160a01b03166113c0611281565b6001600160a01b0316141580156113fd5750600160006113de611281565b6001600160a01b0316815260208101919091526040016000205460ff16155b801561144257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611436611281565b6001600160a01b031614155b15611525576001600160a01b038216600090815260046020526040812081611468611281565b6001600160a01b031681526020810191909152604001600020549050600019811461152357818110156114dd5760405162461bcd60e51b815260206004820152601660248201527f494e53554646494349454e545f414c4c4f57414e434500000000000000000000604482015260640161075f565b6114e78282611d46565b6001600160a01b038416600090815260046020526040812090611508611281565b6001600160a01b031681526020810191909152604001600020555b505b6001600160a01b0382166000908152600360205260409020548181101561158e5760405162461bcd60e51b815260206004820152601260248201527f494e53554646494349454e545f46554e44530000000000000000000000000000604482015260640161075f565b6115988282611d46565b6001600160a01b038416600090815260036020526040812091909155600280548492906115c6908490611d46565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611351565b6001600160a01b03821661165f5760405162461bcd60e51b815260206004820152601260248201527f4e4f545f544f5f5a45524f414444524553530000000000000000000000000000604482015260640161075f565b6001600160a01b0382163014156116b85760405162461bcd60e51b815260206004820152600b60248201527f4e4f545f544f5f54484953000000000000000000000000000000000000000000604482015260640161075f565b6001600160a01b038316600090815260036020526040902054818110156117215760405162461bcd60e51b815260206004820152601260248201527f494e53554646494349454e545f46554e44530000000000000000000000000000604482015260640161075f565b61172b8282611d46565b6001600160a01b038086166000908152600360205260408082209390935590851681529081208054849290611761908490611d2e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117ad91815260200190565b60405180910390a350505050565b6000811180156117e457506001600160a01b03821660009081526001602052604090205460ff16155b801561182257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15611860576001600160a01b038084166000908152600460209081526040808320938616835292905220548181101561103157611031848484611290565b505050565b60006044835110156118795750600061061e565b5060248201516001600160a01b0382161492915050565b6001600160a01b0382166118e65760405162461bcd60e51b815260206004820152601260248201527f4e4f545f544f5f5a45524f414444524553530000000000000000000000000000604482015260640161075f565b600081116119365760405162461bcd60e51b815260206004820152600d60248201527f4d494e545f4f5f544f4b454e5300000000000000000000000000000000000000604482015260640161075f565b60025460006119458383611d2e565b90508181116119965760405162461bcd60e51b815260206004820152600860248201527f4f564552464c4f57000000000000000000000000000000000000000000000000604482015260640161075f565b60028190556001600160a01b038416600090815260036020526040812080548592906119c3908490611d2e565b90915550506040518381526001600160a01b038516906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016117ad565b80356001600160a01b0381168114610adf57600080fd5b60008083601f840112611a2e578081fd5b50813567ffffffffffffffff811115611a45578182fd5b602083019150836020828501011115611a5d57600080fd5b9250929050565b600060208284031215611a75578081fd5b611a7e82611a06565b9392505050565b60008060408385031215611a97578081fd5b611aa083611a06565b9150611aae60208401611a06565b90509250929050565b600080600060608486031215611acb578081fd5b611ad484611a06565b9250611ae260208501611a06565b9150604084013590509250925092565b60008060408385031215611b04578182fd5b611b0d83611a06565b915060208301358015158114611b21578182fd5b809150509250929050565b600080600060408486031215611b40578283fd5b611b4984611a06565b9250602084013567ffffffffffffffff811115611b64578283fd5b611b7086828701611a1d565b9497909650939450505050565b60008060408385031215611b8f578182fd5b611b9883611a06565b946020939093013593505050565b60008060008060608587031215611bbb578081fd5b611bc485611a06565b935060208501359250604085013567ffffffffffffffff811115611be6578182fd5b611bf287828801611a1d565b95989497509550505050565b600060208284031215611c0f578081fd5b813567ffffffffffffffff80821115611c26578283fd5b818401915084601f830112611c39578283fd5b813581811115611c4b57611c4b611d8c565b604051601f8201601f19908116603f01168101908382118183101715611c7357611c73611d8c565b81604052828152876020848701011115611c8b578586fd5b826020860160208301379182016020019490945295945050505050565b600060208284031215611cb9578081fd5b5035919050565b60008151808452815b81811015611ce557602081850181015186830182015201611cc9565b81811115611cf65782602083870101525b50601f01601f19169290920160200192915050565b6000828483379101908152919050565b600060208252611a7e6020830184611cc0565b60008219821115611d4157611d41611d5d565b500190565b600082821015611d5857611d58611d5d565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea2646970667358221220c39f687cba8396b0a8e2e672b33b2e675e43e2c92c9e43302886f47e823a161a64736f6c63430008020033000000000000000000000000b5505a6d998549090530911180f38ac5130101c60000000000000000000000009399bb24dbb5c4b782c70c2969f58716ebbd6a3b00000000000000000000000049c4d4c94829b9c44052c5f5cb164fc61218116500000000000000000000000049c4d4c94829b9c44052c5f5cb164fc612181165

Deployed Bytecode

0x6080604052600436106101cc5760003560e01c80636e9960c3116100f7578063ac9fe42111610095578063cf2c52cb11610064578063cf2c52cb1461051c578063da7422281461053c578063dd62ed3e1461055c578063f2fde38b146105a2576101cc565b8063ac9fe421146104b8578063bb1e23cb146104d8578063cae9ca51146104eb578063ce1b815f146104fe576101cc565b80638da5cb5b116100d15780638da5cb5b146104455780638f2839701461046357806395d89b4114610483578063a9059cbb14610498576101cc565b80636e9960c3146103dc57806370a08231146103fa578063715018a614610430576101cc565b80632e1a7d4d1161016f578063445a67971161013e578063445a67971461032b578063572b6c051461034b57806362f629e71461036b578063654b748a146103a3576101cc565b80632e1a7d4d146102cf578063313ce567146102ef5780633b7b5a161461030b57806342966c68146102cf576101cc565b806318160ddd116101ab57806318160ddd146102585780631dd319cb1461026d57806323b872dd1461028f5780632b991746146102af576101cc565b80629ad300146101d157806306fdde0314610206578063095ea7b314610228575b600080fd5b3480156101dd57600080fd5b506101f36101ec366004611bfe565b6020015190565b6040519081526020015b60405180910390f35b34801561021257600080fd5b5061021b6105c2565b6040516101fd9190611d1b565b34801561023457600080fd5b50610248610243366004611b7d565b610606565b60405190151581526020016101fd565b34801561026457600080fd5b506002546101f3565b34801561027957600080fd5b5061028d610288366004611b7d565b610624565b005b34801561029b57600080fd5b506102486102aa366004611ab7565b610632565b3480156102bb57600080fd5b506102486102ca366004611ab7565b6107c5565b3480156102db57600080fd5b5061028d6102ea366004611ca8565b6108ad565b3480156102fb57600080fd5b50604051601281526020016101fd565b34801561031757600080fd5b50610248610326366004611ab7565b6108c1565b34801561033757600080fd5b5061028d610346366004611a64565b6109a9565b34801561035757600080fd5b50610248610366366004611a64565b610acd565b34801561037757600080fd5b5060075461038b906001600160a01b031681565b6040516001600160a01b0390911681526020016101fd565b3480156103af57600080fd5b506102486103be366004611a64565b6001600160a01b031660009081526001602052604090205460ff1690565b3480156103e857600080fd5b506000546001600160a01b031661038b565b34801561040657600080fd5b506101f3610415366004611a64565b6001600160a01b031660009081526003602052604090205490565b34801561043c57600080fd5b5061028d610ae4565b34801561045157600080fd5b506005546001600160a01b031661038b565b34801561046f57600080fd5b5061028d61047e366004611a64565b610bb4565b34801561048f57600080fd5b5061021b610c84565b3480156104a457600080fd5b506102486104b3366004611b7d565b610cb7565b3480156104c457600080fd5b5061028d6104d3366004611af2565b610ccb565b61021b6104e6366004611ba6565b610dcc565b61021b6104f9366004611ba6565b610f0a565b34801561050a57600080fd5b506006546001600160a01b031661038b565b34801561052857600080fd5b5061028d610537366004611b2c565b610fad565b34801561054857600080fd5b5061028d610557366004611a64565b611037565b34801561056857600080fd5b506101f3610577366004611a85565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156105ae57600080fd5b5061028d6105bd366004611a64565b6110df565b604080517f53414e44000000000000000000000000000000000000000000000000000000006020820152606091015b60405160208183030381529060405290505b90565b600061061a610613611281565b8484611290565b5060015b92915050565b61062e828261135e565b5050565b6000836001600160a01b0316610646611281565b6001600160a01b031614158015610683575060016000610664611281565b6001600160a01b0316815260208101919091526040016000205460ff16155b80156106c857507f00000000000000000000000049c4d4c94829b9c44052c5f5cb164fc6121811656001600160a01b03166106bc611281565b6001600160a01b031614155b156107b0576001600160a01b0384166000908152600460205260408120816106ee611281565b6001600160a01b03168152602081019190915260400160002054905060001981146107ae57828110156107685760405162461bcd60e51b815260206004820152601860248201527f4e4f545f415554484f52495a45445f414c4c4f57414e4345000000000000000060448201526064015b60405180910390fd5b6107728382611d46565b6001600160a01b038616600090815260046020526040812090610793611281565b6001600160a01b031681526020810191909152604001600020555b505b6107bb848484611609565b5060019392505050565b6000836001600160a01b03166107d9611281565b6001600160a01b031614806108135750600160006107f5611281565b6001600160a01b0316815260208101919091526040016000205460ff165b8061085657507f00000000000000000000000049c4d4c94829b9c44052c5f5cb164fc6121811656001600160a01b031661084b611281565b6001600160a01b0316145b6108a25760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a4544000000000000000000000000000000000000604482015260640161075f565b6107bb848484611290565b6108be6108b8611281565b8261135e565b50565b6000836001600160a01b03166108d5611281565b6001600160a01b0316148061090f5750600160006108f1611281565b6001600160a01b0316815260208101919091526040016000205460ff165b8061095257507f00000000000000000000000049c4d4c94829b9c44052c5f5cb164fc6121811656001600160a01b0316610947611281565b6001600160a01b0316145b61099e5760405162461bcd60e51b815260206004820152600e60248201527f494e56414c49445f53454e444552000000000000000000000000000000000000604482015260640161075f565b6107bb8484846117bb565b6109b1611281565b6001600160a01b03166109cc6005546001600160a01b031690565b6001600160a01b031614610a225760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161075f565b6001600160a01b038116610a9e5760405162461bcd60e51b815260206004820152602260248201527f426164204368696c64436861696e4d616e6167657250726f787920616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161075f565b6007805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6006546001600160a01b038281169116145b919050565b610aec611281565b6001600160a01b0316610b076005546001600160a01b031690565b6001600160a01b031614610b5d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161075f565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36005805473ffffffffffffffffffffffffffffffffffffffff19169055565b6000546001600160a01b03163314610c0e5760405162461bcd60e51b815260206004820152601360248201527f41444d494e5f4143434553535f44454e49454400000000000000000000000000604482015260640161075f565b600054604080516001600160a01b03928316815291831660208301527f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a16000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b604080517f53414e44000000000000000000000000000000000000000000000000000000006020820152606091016105f1565b600061061a610cc4611281565b8484611609565b6000546001600160a01b03163314610d4b5760405162461bcd60e51b815260206004820152602c60248201527f6f6e6c792061646d696e20697320616c6c6f77656420746f206164642073757060448201527f6572206f70657261746f72730000000000000000000000000000000000000000606482015260840161075f565b6001600160a01b03821660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168515159081179091558251938452908301527f44f92d27abdf4cfb6a7d712c3af68f3be086d4ca747ab802c36f67d6790060d8910160405180910390a15050565b6060610e1683838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e119250611281915050565b611865565b610e625760405162461bcd60e51b815260206004820152601660248201527f46495253545f504152414d5f4e4f545f53454e44455200000000000000000000604482015260640161075f565b8315610e7a57610e7a610e73611281565b86866117bb565b600080866001600160a01b0316348686604051610e98929190611d0b565b60006040518083038185875af1925050503d8060008114610ed5576040519150601f19603f3d011682016040523d82523d6000602084013e610eda565b606091505b5091509150818190610eff5760405162461bcd60e51b815260040161075f9190611d1b565b509695505050505050565b6060610f4f83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e119250611281915050565b610f9b5760405162461bcd60e51b815260206004820152601660248201527f46495253545f504152414d5f4e4f545f53454e44455200000000000000000000604482015260640161075f565b610e7a610fa6611281565b8686611290565b6007546001600160a01b0316610fc1611281565b6001600160a01b0316146110175760405162461bcd60e51b815260206004820152601d60248201527f596f75277265206e6f7420616c6c6f77656420746f206465706f736974000000604482015260640161075f565b600061102582840184611ca8565b90506110318482611890565b50505050565b61103f611281565b6001600160a01b031661105a6005546001600160a01b031690565b6001600160a01b0316146110b05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161075f565b6006805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6110e7611281565b6001600160a01b03166111026005546001600160a01b031690565b6001600160a01b0316146111585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161075f565b6001600160a01b0381166111d45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161075f565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600061124833610acd565b1561127a57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c610603565b5033610603565b600061128b61123d565b905090565b6001600160a01b038316158015906112b057506001600160a01b03821615155b6112fc5760405162461bcd60e51b815260206004820152601860248201527f494e56414c49445f4f574e45525f7c7c5f5350454e4445520000000000000000604482015260640161075f565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600081116113ae5760405162461bcd60e51b815260206004820152600d60248201527f4255524e5f4f5f544f4b454e5300000000000000000000000000000000000000604482015260640161075f565b816001600160a01b03166113c0611281565b6001600160a01b0316141580156113fd5750600160006113de611281565b6001600160a01b0316815260208101919091526040016000205460ff16155b801561144257507f00000000000000000000000049c4d4c94829b9c44052c5f5cb164fc6121811656001600160a01b0316611436611281565b6001600160a01b031614155b15611525576001600160a01b038216600090815260046020526040812081611468611281565b6001600160a01b031681526020810191909152604001600020549050600019811461152357818110156114dd5760405162461bcd60e51b815260206004820152601660248201527f494e53554646494349454e545f414c4c4f57414e434500000000000000000000604482015260640161075f565b6114e78282611d46565b6001600160a01b038416600090815260046020526040812090611508611281565b6001600160a01b031681526020810191909152604001600020555b505b6001600160a01b0382166000908152600360205260409020548181101561158e5760405162461bcd60e51b815260206004820152601260248201527f494e53554646494349454e545f46554e44530000000000000000000000000000604482015260640161075f565b6115988282611d46565b6001600160a01b038416600090815260036020526040812091909155600280548492906115c6908490611d46565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611351565b6001600160a01b03821661165f5760405162461bcd60e51b815260206004820152601260248201527f4e4f545f544f5f5a45524f414444524553530000000000000000000000000000604482015260640161075f565b6001600160a01b0382163014156116b85760405162461bcd60e51b815260206004820152600b60248201527f4e4f545f544f5f54484953000000000000000000000000000000000000000000604482015260640161075f565b6001600160a01b038316600090815260036020526040902054818110156117215760405162461bcd60e51b815260206004820152601260248201527f494e53554646494349454e545f46554e44530000000000000000000000000000604482015260640161075f565b61172b8282611d46565b6001600160a01b038086166000908152600360205260408082209390935590851681529081208054849290611761908490611d2e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117ad91815260200190565b60405180910390a350505050565b6000811180156117e457506001600160a01b03821660009081526001602052604090205460ff16155b801561182257507f00000000000000000000000049c4d4c94829b9c44052c5f5cb164fc6121811656001600160a01b0316826001600160a01b031614155b15611860576001600160a01b038084166000908152600460209081526040808320938616835292905220548181101561103157611031848484611290565b505050565b60006044835110156118795750600061061e565b5060248201516001600160a01b0382161492915050565b6001600160a01b0382166118e65760405162461bcd60e51b815260206004820152601260248201527f4e4f545f544f5f5a45524f414444524553530000000000000000000000000000604482015260640161075f565b600081116119365760405162461bcd60e51b815260206004820152600d60248201527f4d494e545f4f5f544f4b454e5300000000000000000000000000000000000000604482015260640161075f565b60025460006119458383611d2e565b90508181116119965760405162461bcd60e51b815260206004820152600860248201527f4f564552464c4f57000000000000000000000000000000000000000000000000604482015260640161075f565b60028190556001600160a01b038416600090815260036020526040812080548592906119c3908490611d2e565b90915550506040518381526001600160a01b038516906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016117ad565b80356001600160a01b0381168114610adf57600080fd5b60008083601f840112611a2e578081fd5b50813567ffffffffffffffff811115611a45578182fd5b602083019150836020828501011115611a5d57600080fd5b9250929050565b600060208284031215611a75578081fd5b611a7e82611a06565b9392505050565b60008060408385031215611a97578081fd5b611aa083611a06565b9150611aae60208401611a06565b90509250929050565b600080600060608486031215611acb578081fd5b611ad484611a06565b9250611ae260208501611a06565b9150604084013590509250925092565b60008060408385031215611b04578182fd5b611b0d83611a06565b915060208301358015158114611b21578182fd5b809150509250929050565b600080600060408486031215611b40578283fd5b611b4984611a06565b9250602084013567ffffffffffffffff811115611b64578283fd5b611b7086828701611a1d565b9497909650939450505050565b60008060408385031215611b8f578182fd5b611b9883611a06565b946020939093013593505050565b60008060008060608587031215611bbb578081fd5b611bc485611a06565b935060208501359250604085013567ffffffffffffffff811115611be6578182fd5b611bf287828801611a1d565b95989497509550505050565b600060208284031215611c0f578081fd5b813567ffffffffffffffff80821115611c26578283fd5b818401915084601f830112611c39578283fd5b813581811115611c4b57611c4b611d8c565b604051601f8201601f19908116603f01168101908382118183101715611c7357611c73611d8c565b81604052828152876020848701011115611c8b578586fd5b826020860160208301379182016020019490945295945050505050565b600060208284031215611cb9578081fd5b5035919050565b60008151808452815b81811015611ce557602081850181015186830182015201611cc9565b81811115611cf65782602083870101525b50601f01601f19169290920160200192915050565b6000828483379101908152919050565b600060208252611a7e6020830184611cc0565b60008219821115611d4157611d41611d5d565b500190565b600082821015611d5857611d58611d5d565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea2646970667358221220c39f687cba8396b0a8e2e672b33b2e675e43e2c92c9e43302886f47e823a161a64736f6c63430008020033

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

000000000000000000000000b5505a6d998549090530911180f38ac5130101c60000000000000000000000009399bb24dbb5c4b782c70c2969f58716ebbd6a3b00000000000000000000000049c4d4c94829b9c44052c5f5cb164fc61218116500000000000000000000000049c4d4c94829b9c44052c5f5cb164fc612181165

-----Decoded View---------------
Arg [0] : _childChainManagerProxy (address): 0xb5505a6d998549090530911180f38aC5130101c6
Arg [1] : trustedForwarder (address): 0x9399BB24DBB5C4b782C70c2969F58716Ebbd6a3b
Arg [2] : sandAdmin (address): 0x49c4D4C94829B9c44052C5f5Cb164Fc612181165
Arg [3] : executionAdmin (address): 0x49c4D4C94829B9c44052C5f5Cb164Fc612181165

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000b5505a6d998549090530911180f38ac5130101c6
Arg [1] : 0000000000000000000000009399bb24dbb5c4b782c70c2969f58716ebbd6a3b
Arg [2] : 00000000000000000000000049c4d4c94829b9c44052c5f5cb164fc612181165
Arg [3] : 00000000000000000000000049c4d4c94829b9c44052c5f5cb164fc612181165


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]

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.