Token SAND
Overview ERC-20
Total Supply:
4,029,888,648,165,481.266539 SAND
Holders:
1,606 addresses
Profile Summary
Contract:
Decimals:
18
Balance
15.611858313018475643 SAND
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
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)
//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(); } }
// 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; } }
// 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; } } }
// 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); } } }
// 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; } }
//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; } }
//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); } }
//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; }
//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)); } }
// 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); }
//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]; } }
// 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); }
//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; } }
{ "optimizer": { "enabled": true, "runs": 2000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
[{"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"}]
Contract Creation Code
60e06040523480156200001157600080fd5b506040516200241038038062002410833981016040819052620000349162000521565b81816000806040518060400160405280600481526020016314d0539160e21b8152506040518060400160405280600481526020016314d0539160e21b81525085856000845111620000cc5760405162461bcd60e51b815260206004820152601560248201527f494e56414c49445f4e414d455f5245515549524544000000000000000000000060448201526064015b60405180910390fd5b602084511115620001205760405162461bcd60e51b815260206004820152601560248201527f494e56414c49445f4e414d455f544f4f5f4c4f4e4700000000000000000000006044820152606401620000c3565b60208401516080528251620001785760405162461bcd60e51b815260206004820152601760248201527f494e56414c49445f53594d424f4c5f52455155495245440000000000000000006044820152606401620000c3565b602083511115620001cc5760405162461bcd60e51b815260206004820152601760248201527f494e56414c49445f53594d424f4c5f544f4f5f4c4f4e470000000000000000006044820152606401620000c3565b602083015160a0526000805460609290921b6001600160601b03191660c0526001600160a01b03199182166001600160a01b039384161790911688831617905584161591506200023e90505760006200022e82670de0b6b3a764000062000598565b90506200023c838262000351565b505b50505050600062000254620004aa60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b038416620003055760405162461bcd60e51b815260206004820152602260248201527f426164204368696c64436861696e4d616e6167657250726f7879206164647265604482015261737360f01b6064820152608401620000c3565b600780546001600160a01b0319166001600160a01b0386161790556200034783600680546001600160a01b0319166001600160a01b0392909216919091179055565b50505050620005d0565b6001600160a01b0382166200039e5760405162461bcd60e51b81526020600482015260126024820152714e4f545f544f5f5a45524f4144445245535360701b6044820152606401620000c3565b60008111620003e05760405162461bcd60e51b815260206004820152600d60248201526c4d494e545f4f5f544f4b454e5360981b6044820152606401620000c3565b6002546000620003f183836200057d565b90508181116200042f5760405162461bcd60e51b81526020600482015260086024820152674f564552464c4f5760c01b6044820152606401620000c3565b60028190556001600160a01b038416600090815260036020526040812080548592906200045e9084906200057d565b90915550506040518381526001600160a01b038516906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b6000620004c1620004c760201b6200123d1760201c565b90505b90565b6000620004d433620004f2565b15620004ea575060131936013560601c620004c4565b5033620004c4565b6006546001600160a01b038281169116145b919050565b80516001600160a01b03811681146200050457600080fd5b6000806000806080858703121562000537578384fd5b620005428562000509565b9350620005526020860162000509565b9250620005626040860162000509565b9150620005726060860162000509565b905092959194509250565b60008219821115620005935762000593620005ba565b500190565b6000816000190483118215151615620005b557620005b5620005ba565b500290565b634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160601c611df16200061f6000396000818161068c0152818161081b015281816109170152818161140601526117ed01526000610c8a015260006105c80152611df16000f3fe6080604052600436106101cc5760003560e01c80636e9960c3116100f7578063ac9fe42111610095578063cf2c52cb11610064578063cf2c52cb1461051c578063da7422281461053c578063dd62ed3e1461055c578063f2fde38b146105a2576101cc565b8063ac9fe421146104b8578063bb1e23cb146104d8578063cae9ca51146104eb578063ce1b815f146104fe576101cc565b80638da5cb5b116100d15780638da5cb5b146104455780638f2839701461046357806395d89b4114610483578063a9059cbb14610498576101cc565b80636e9960c3146103dc57806370a08231146103fa578063715018a614610430576101cc565b80632e1a7d4d1161016f578063445a67971161013e578063445a67971461032b578063572b6c051461034b57806362f629e71461036b578063654b748a146103a3576101cc565b80632e1a7d4d146102cf578063313ce567146102ef5780633b7b5a161461030b57806342966c68146102cf576101cc565b806318160ddd116101ab57806318160ddd146102585780631dd319cb1461026d57806323b872dd1461028f5780632b991746146102af576101cc565b80629ad300146101d157806306fdde0314610206578063095ea7b314610228575b600080fd5b3480156101dd57600080fd5b506101f36101ec366004611bfe565b6020015190565b6040519081526020015b60405180910390f35b34801561021257600080fd5b5061021b6105c2565b6040516101fd9190611d1b565b34801561023457600080fd5b50610248610243366004611b7d565b610606565b60405190151581526020016101fd565b34801561026457600080fd5b506002546101f3565b34801561027957600080fd5b5061028d610288366004611b7d565b610624565b005b34801561029b57600080fd5b506102486102aa366004611ab7565b610632565b3480156102bb57600080fd5b506102486102ca366004611ab7565b6107c5565b3480156102db57600080fd5b5061028d6102ea366004611ca8565b6108ad565b3480156102fb57600080fd5b50604051601281526020016101fd565b34801561031757600080fd5b50610248610326366004611ab7565b6108c1565b34801561033757600080fd5b5061028d610346366004611a64565b6109a9565b34801561035757600080fd5b50610248610366366004611a64565b610acd565b34801561037757600080fd5b5060075461038b906001600160a01b031681565b6040516001600160a01b0390911681526020016101fd565b3480156103af57600080fd5b506102486103be366004611a64565b6001600160a01b031660009081526001602052604090205460ff1690565b3480156103e857600080fd5b506000546001600160a01b031661038b565b34801561040657600080fd5b506101f3610415366004611a64565b6001600160a01b031660009081526003602052604090205490565b34801561043c57600080fd5b5061028d610ae4565b34801561045157600080fd5b506005546001600160a01b031661038b565b34801561046f57600080fd5b5061028d61047e366004611a64565b610bb4565b34801561048f57600080fd5b5061021b610c84565b3480156104a457600080fd5b506102486104b3366004611b7d565b610cb7565b3480156104c457600080fd5b5061028d6104d3366004611af2565b610ccb565b61021b6104e6366004611ba6565b610dcc565b61021b6104f9366004611ba6565b610f0a565b34801561050a57600080fd5b506006546001600160a01b031661038b565b34801561052857600080fd5b5061028d610537366004611b2c565b610fad565b34801561054857600080fd5b5061028d610557366004611a64565b611037565b34801561056857600080fd5b506101f3610577366004611a85565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156105ae57600080fd5b5061028d6105bd366004611a64565b6110df565b604080517f00000000000000000000000000000000000000000000000000000000000000006020820152606091015b60405160208183030381529060405290505b90565b600061061a610613611281565b8484611290565b5060015b92915050565b61062e828261135e565b5050565b6000836001600160a01b0316610646611281565b6001600160a01b031614158015610683575060016000610664611281565b6001600160a01b0316815260208101919091526040016000205460ff16155b80156106c857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166106bc611281565b6001600160a01b031614155b156107b0576001600160a01b0384166000908152600460205260408120816106ee611281565b6001600160a01b03168152602081019190915260400160002054905060001981146107ae57828110156107685760405162461bcd60e51b815260206004820152601860248201527f4e4f545f415554484f52495a45445f414c4c4f57414e4345000000000000000060448201526064015b60405180910390fd5b6107728382611d46565b6001600160a01b038616600090815260046020526040812090610793611281565b6001600160a01b031681526020810191909152604001600020555b505b6107bb848484611609565b5060019392505050565b6000836001600160a01b03166107d9611281565b6001600160a01b031614806108135750600160006107f5611281565b6001600160a01b0316815260208101919091526040016000205460ff165b8061085657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661084b611281565b6001600160a01b0316145b6108a25760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a4544000000000000000000000000000000000000604482015260640161075f565b6107bb848484611290565b6108be6108b8611281565b8261135e565b50565b6000836001600160a01b03166108d5611281565b6001600160a01b0316148061090f5750600160006108f1611281565b6001600160a01b0316815260208101919091526040016000205460ff165b8061095257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610947611281565b6001600160a01b0316145b61099e5760405162461bcd60e51b815260206004820152600e60248201527f494e56414c49445f53454e444552000000000000000000000000000000000000604482015260640161075f565b6107bb8484846117bb565b6109b1611281565b6001600160a01b03166109cc6005546001600160a01b031690565b6001600160a01b031614610a225760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161075f565b6001600160a01b038116610a9e5760405162461bcd60e51b815260206004820152602260248201527f426164204368696c64436861696e4d616e6167657250726f787920616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161075f565b6007805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6006546001600160a01b038281169116145b919050565b610aec611281565b6001600160a01b0316610b076005546001600160a01b031690565b6001600160a01b031614610b5d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161075f565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36005805473ffffffffffffffffffffffffffffffffffffffff19169055565b6000546001600160a01b03163314610c0e5760405162461bcd60e51b815260206004820152601360248201527f41444d494e5f4143434553535f44454e49454400000000000000000000000000604482015260640161075f565b600054604080516001600160a01b03928316815291831660208301527f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a16000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b604080517f00000000000000000000000000000000000000000000000000000000000000006020820152606091016105f1565b600061061a610cc4611281565b8484611609565b6000546001600160a01b03163314610d4b5760405162461bcd60e51b815260206004820152602c60248201527f6f6e6c792061646d696e20697320616c6c6f77656420746f206164642073757060448201527f6572206f70657261746f72730000000000000000000000000000000000000000606482015260840161075f565b6001600160a01b03821660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168515159081179091558251938452908301527f44f92d27abdf4cfb6a7d712c3af68f3be086d4ca747ab802c36f67d6790060d8910160405180910390a15050565b6060610e1683838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e119250611281915050565b611865565b610e625760405162461bcd60e51b815260206004820152601660248201527f46495253545f504152414d5f4e4f545f53454e44455200000000000000000000604482015260640161075f565b8315610e7a57610e7a610e73611281565b86866117bb565b600080866001600160a01b0316348686604051610e98929190611d0b565b60006040518083038185875af1925050503d8060008114610ed5576040519150601f19603f3d011682016040523d82523d6000602084013e610eda565b606091505b5091509150818190610eff5760405162461bcd60e51b815260040161075f9190611d1b565b509695505050505050565b6060610f4f83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e119250611281915050565b610f9b5760405162461bcd60e51b815260206004820152601660248201527f46495253545f504152414d5f4e4f545f53454e44455200000000000000000000604482015260640161075f565b610e7a610fa6611281565b8686611290565b6007546001600160a01b0316610fc1611281565b6001600160a01b0316146110175760405162461bcd60e51b815260206004820152601d60248201527f596f75277265206e6f7420616c6c6f77656420746f206465706f736974000000604482015260640161075f565b600061102582840184611ca8565b90506110318482611890565b50505050565b61103f611281565b6001600160a01b031661105a6005546001600160a01b031690565b6001600160a01b0316146110b05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161075f565b6006805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6110e7611281565b6001600160a01b03166111026005546001600160a01b031690565b6001600160a01b0316146111585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161075f565b6001600160a01b0381166111d45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161075f565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600061124833610acd565b1561127a57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c610603565b5033610603565b600061128b61123d565b905090565b6001600160a01b038316158015906112b057506001600160a01b03821615155b6112fc5760405162461bcd60e51b815260206004820152601860248201527f494e56414c49445f4f574e45525f7c7c5f5350454e4445520000000000000000604482015260640161075f565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600081116113ae5760405162461bcd60e51b815260206004820152600d60248201527f4255524e5f4f5f544f4b454e5300000000000000000000000000000000000000604482015260640161075f565b816001600160a01b03166113c0611281565b6001600160a01b0316141580156113fd5750600160006113de611281565b6001600160a01b0316815260208101919091526040016000205460ff16155b801561144257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611436611281565b6001600160a01b031614155b15611525576001600160a01b038216600090815260046020526040812081611468611281565b6001600160a01b031681526020810191909152604001600020549050600019811461152357818110156114dd5760405162461bcd60e51b815260206004820152601660248201527f494e53554646494349454e545f414c4c4f57414e434500000000000000000000604482015260640161075f565b6114e78282611d46565b6001600160a01b038416600090815260046020526040812090611508611281565b6001600160a01b031681526020810191909152604001600020555b505b6001600160a01b0382166000908152600360205260409020548181101561158e5760405162461bcd60e51b815260206004820152601260248201527f494e53554646494349454e545f46554e44530000000000000000000000000000604482015260640161075f565b6115988282611d46565b6001600160a01b038416600090815260036020526040812091909155600280548492906115c6908490611d46565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611351565b6001600160a01b03821661165f5760405162461bcd60e51b815260206004820152601260248201527f4e4f545f544f5f5a45524f414444524553530000000000000000000000000000604482015260640161075f565b6001600160a01b0382163014156116b85760405162461bcd60e51b815260206004820152600b60248201527f4e4f545f544f5f54484953000000000000000000000000000000000000000000604482015260640161075f565b6001600160a01b038316600090815260036020526040902054818110156117215760405162461bcd60e51b815260206004820152601260248201527f494e53554646494349454e545f46554e44530000000000000000000000000000604482015260640161075f565b61172b8282611d46565b6001600160a01b038086166000908152600360205260408082209390935590851681529081208054849290611761908490611d2e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117ad91815260200190565b60405180910390a350505050565b6000811180156117e457506001600160a01b03821660009081526001602052604090205460ff16155b801561182257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15611860576001600160a01b038084166000908152600460209081526040808320938616835292905220548181101561103157611031848484611290565b505050565b60006044835110156118795750600061061e565b5060248201516001600160a01b0382161492915050565b6001600160a01b0382166118e65760405162461bcd60e51b815260206004820152601260248201527f4e4f545f544f5f5a45524f414444524553530000000000000000000000000000604482015260640161075f565b600081116119365760405162461bcd60e51b815260206004820152600d60248201527f4d494e545f4f5f544f4b454e5300000000000000000000000000000000000000604482015260640161075f565b60025460006119458383611d2e565b90508181116119965760405162461bcd60e51b815260206004820152600860248201527f4f564552464c4f57000000000000000000000000000000000000000000000000604482015260640161075f565b60028190556001600160a01b038416600090815260036020526040812080548592906119c3908490611d2e565b90915550506040518381526001600160a01b038516906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016117ad565b80356001600160a01b0381168114610adf57600080fd5b60008083601f840112611a2e578081fd5b50813567ffffffffffffffff811115611a45578182fd5b602083019150836020828501011115611a5d57600080fd5b9250929050565b600060208284031215611a75578081fd5b611a7e82611a06565b9392505050565b60008060408385031215611a97578081fd5b611aa083611a06565b9150611aae60208401611a06565b90509250929050565b600080600060608486031215611acb578081fd5b611ad484611a06565b9250611ae260208501611a06565b9150604084013590509250925092565b60008060408385031215611b04578182fd5b611b0d83611a06565b915060208301358015158114611b21578182fd5b809150509250929050565b600080600060408486031215611b40578283fd5b611b4984611a06565b9250602084013567ffffffffffffffff811115611b64578283fd5b611b7086828701611a1d565b9497909650939450505050565b60008060408385031215611b8f578182fd5b611b9883611a06565b946020939093013593505050565b60008060008060608587031215611bbb578081fd5b611bc485611a06565b935060208501359250604085013567ffffffffffffffff811115611be6578182fd5b611bf287828801611a1d565b95989497509550505050565b600060208284031215611c0f578081fd5b813567ffffffffffffffff80821115611c26578283fd5b818401915084601f830112611c39578283fd5b813581811115611c4b57611c4b611d8c565b604051601f8201601f19908116603f01168101908382118183101715611c7357611c73611d8c565b81604052828152876020848701011115611c8b578586fd5b826020860160208301379182016020019490945295945050505050565b600060208284031215611cb9578081fd5b5035919050565b60008151808452815b81811015611ce557602081850181015186830182015201611cc9565b81811115611cf65782602083870101525b50601f01601f19169290920160200192915050565b6000828483379101908152919050565b600060208252611a7e6020830184611cc0565b60008219821115611d4157611d41611d5d565b500190565b600082821015611d5857611d58611d5d565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea2646970667358221220c39f687cba8396b0a8e2e672b33b2e675e43e2c92c9e43302886f47e823a161a64736f6c63430008020033000000000000000000000000b5505a6d998549090530911180f38ac5130101c60000000000000000000000009399bb24dbb5c4b782c70c2969f58716ebbd6a3b00000000000000000000000049c4d4c94829b9c44052c5f5cb164fc61218116500000000000000000000000049c4d4c94829b9c44052c5f5cb164fc612181165
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