Overview ERC-20
Price
$0.53 @ 0.595394 MATIC (-4.22%)
Fully Diluted Market Cap
Total Supply:
201,269,996.955406 SAND
Holders:
68,554 addresses
Contract:
Decimals:
18
Official Site:
[ Download CSV Export ]
[ Download CSV Export ]
Market
Volume (24H) | : | $118,633,356.00 |
Market Capitalization | : | $978,346,999.00 |
Circulating Supply | : | 1,853,581,926.00 SAND |
Market Data Source: Coinmarketcap |
Update? Click here to update the token ICO / general information
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|---|---|---|---|---|
1 | ![]() | SAND-USDT | $0.5257 0.0000195 Btc | $19,128,047.00 36,387,626.882 SAND | 17.7804% |
2 | ![]() | SAND-USDT | $0.5267 0.0000195 Btc | $19,052,466.00 36,172,043.108 SAND | 17.6750% |
3 | ![]() | SAND-USDT | $0.5261 0.0000195 Btc | $15,724,419.00 29,887,642.000 SAND | 14.6042% |
4 | ![]() | SAND-KRW | $0.5315 0.0000197 Btc | $12,395,548.00 23,322,458.918 SAND | 11.3962% |
5 | ![]() | SAND-USDT | $0.5252 0.0000195 Btc | $6,775,393.00 12,434,345.740 SAND | 6.0759% |
6 | ![]() | SAND-USDT | $0.5248 0.0000195 Btc | $3,624,378.00 6,905,690.607 SAND | 3.3744% |
7 | ![]() | SAND-USDT | $0.5263 0.0000195 Btc | $3,516,173.00 6,473,818.975 SAND | 3.1634% |
8 | ![]() | SAND-USDT | $0.5249 0.0000195 Btc | $2,273,692.00 4,187,832.300 SAND | 2.0463% |
9 | ![]() | SAND-KRW | $0.5309 0.0000197 Btc | $1,886,574.00 3,553,656.666 SAND | 1.7365% |
10 | ![]() | SAND-USDT | $0.5262 0.0000195 Btc | $1,734,737.00 3,296,729.590 SAND | 1.6109% |
11 | ![]() | SAND-USDT | $0.5252 0.0000195 Btc | $1,713,268.00 3,146,839.579 SAND | 1.5377% |
12 | ![]() | SAND-BTC | $0.5252 0.0000195 Btc | $1,480,732.00 2,819,158.364 SAND | 1.3775% |
13 | ![]() | SAND-BTC | $0.5262 0.0000195 Btc | $1,480,224.00 2,812,800.633 SAND | 1.3744% |
14 | ![]() | SAND-USDT | $0.5246 0.0000195 Btc | $1,323,258.00 2,522,511.000 SAND | 1.2326% |
15 | ![]() | SAND-USDT | $0.525 0.0000195 Btc | $1,320,373.00 2,515,178.000 SAND | 1.2290% |
16 | ![]() | SAND-BUSD | $0.5266 0.0000195 Btc | $1,230,387.00 2,336,487.915 SAND | 1.1417% |
17 | ![]() | SAND-USDT | $0.5251 0.0000195 Btc | $1,155,325.00 2,200,261.881 SAND | 1.0751% |
18 | ![]() | SAND-USDT | $0.5252 0.0000195 Btc | $951,988.00 1,749,775.000 SAND | 0.8550% |
19 | ![]() | SAND-USDT | $0.5261 0.0000195 Btc | $931,434.00 1,710,599.000 SAND | 0.8359% |
20 | ![]() | SAND-USD | $0.5284 0.0000196 Btc | $882,903.00 1,671,057.873 SAND | 0.8165% |
21 | ![]() | SAND-USDT | $0.5262 0.0000195 Btc | $874,448.00 1,611,260.888 SAND | 0.7873% |
22 | ![]() | SAND-USDT | $0.5257 0.0000195 Btc | $844,004.00 1,605,433.000 SAND | 0.7845% |
23 | ![]() | SAND-USD | $0.5268 0.0000196 Btc | $711,749.00 1,351,079.580 SAND | 0.6602% |
24 | ![]() | SAND-USDT | $0.5263 0.0000195 Btc | $554,828.00 1,018,377.955 SAND | 0.4976% |
25 | ![]() | SAND-BTC | $0.5261 0.0000195 Btc | $497,128.00 928,946.900 SAND | 0.4539% |
26 | ![]() | SAND-USDC | $0.5261 0.0000195 Btc | $484,968.00 921,874.807 SAND | 0.4505% |
27 | ![]() | SAND-USDT | $0.5252 0.0000195 Btc | $455,013.00 834,937.268 SAND | 0.4080% |
28 | ![]() | SAND-USDT | $0.5256 0.0000195 Btc | $451,690.00 830,734.000 SAND | 0.4059% |
29 | ![]() | SAND-USDT | $0.525 0.0000195 Btc | $358,632.00 683,105.860 SAND | 0.3338% |
30 | ![]() | SAND-USDT | $0.5263 0.0000195 Btc | $350,006.00 643,776.000 SAND | 0.3146% |
31 | ![]() | SAND-BNB | $0.5271 0.0000196 Btc | $296,719.00 562,884.718 SAND | 0.2750% |
32 | ![]() | SAND-USDT | $0.5243 0.0000195 Btc | $258,421.00 492,878.000 SAND | 0.2408% |
33 | ![]() | SAND-USDT | $0.5262 0.0000195 Btc | $236,796.00 639,960.808 SAND | 0.3127% |
34 | ![]() | SAND-USDT | $0.5254 0.0000195 Btc | $203,194.00 373,379.044 SAND | 0.1824% |
35 | ![]() | SAND-USDT | $0.5263 0.0000195 Btc | $190,171.00 348,660.920 SAND | 0.1704% |
36 | ![]() | 0XBBBA073C31BF03B8ACF7C28EF0738DECF3695683-0X0D500B1D8E8EF31E21C99D1DB9A6444D3ADF1270 | $0.5265 0.0000195 Btc | $189,351.00 352,104.071 0XBBBA073C31BF03B8ACF7C28EF0738DECF3695683 | 0.1721% |
37 | ![]() | SAND-USDT | $0.5246 0.0000195 Btc | $176,253.00 335,962.300 SAND | 0.1642% |
38 | ![]() | SAND-USDT | $0.5266 0.0000195 Btc | $155,908.00 286,313.540 SAND | 0.1399% |
39 | ![]() | SAND-USDT | $0.529 0.0000196 Btc | $128,902.00 243,656.000 SAND | 0.1191% |
40 | ![]() | SAND-USD | $0.5287 0.0000196 Btc | $122,217.00 231,166.051 SAND | 0.1130% |
41 | ![]() | SAND-BTC | $0.5264 0.0000195 Btc | $119,407.00 226,858.000 SAND | 0.1109% |
42 | ![]() | SAND-USDT | $0.5249 0.0000195 Btc | $109,886.00 209,334.350 SAND | 0.1023% |
43 | ![]() | SAND-THB | $0.5251 0.0000195 Btc | $105,247.00 200,413.231 SAND | 0.0979% |
44 | ![]() | SAND-USDT | $0.5249 0.0000195 Btc | $96,330.00 183,506.790 SAND | 0.0897% |
45 | ![]() | SAND-USDT | $0.5264 0.0000196 Btc | $88,561.00 162,724.000 SAND | 0.0795% |
46 | ![]() | SAND-EUR | $0.5289 0.0000197 Btc | $86,147.00 162,875.609 SAND | 0.0796% |
47 | ![]() | SAND-USDF | $0.5265 0.0000196 Btc | $82,930.00 152,443.000 SAND | 0.0745% |
48 | ![]() | SAND-USDC | $0.5247 0.0000195 Btc | $80,863.00 154,113.340 SAND | 0.0753% |
49 | ![]() | SAND-USD | $0.5251 0.0000195 Btc | $72,974.00 138,983.010 SAND | 0.0679% |
50 | ![]() | 0XBBBA073C31BF03B8ACF7C28EF0738DECF3695683-0X0D500B1D8E8EF31E21C99D1DB9A6444D3ADF1270 | $0.5275 0.0000196 Btc | $70,845.00 132,154.475 0XBBBA073C31BF03B8ACF7C28EF0738DECF3695683 | 0.0646% |
51 | ![]() | SAND-USDT | $0.5241 0.0000195 Btc | $68,493.00 130,681.800 SAND | 0.0639% |
52 | ![]() | SAND-USDC | $0.5266 0.0000195 Btc | $67,614.00 122,855.328 SAND | 0.0600% |
53 | ![]() | SAND-USDT | $0.5281 0.0000196 Btc | $57,747.00 109,347.130 SAND | 0.0534% |
54 | ![]() | SAND-USD | $0.5265 0.0000195 Btc | $52,920.00 97,167.246 SAND | 0.0475% |
55 | ![]() | SAND-ETH | $0.5284 0.0000196 Btc | $48,992.00 92,716.562 SAND | 0.0453% |
56 | ![]() | SAND-USDT | $0.5256 0.0000195 Btc | $45,964.00 87,449.243 SAND | 0.0427% |
57 | ![]() | SAND-JPY | $0.5261 0.0000195 Btc | $45,962.00 87,360.220 SAND | 0.0427% |
58 | ![]() | SAND-USDT | $0.5265 0.0000195 Btc | $43,048.00 81,759.070 SAND | 0.0400% |
59 | ![]() | SAND-USDT | $0.526 0.0000195 Btc | $41,853.00 79,574.300 SAND | 0.0389% |
60 | ![]() | SAND-USDC | $0.5294 0.0000196 Btc | $40,850.00 77,165.200 SAND | 0.0377% |
61 | ![]() | SAND-USDT | $0.5264 0.0000195 Btc | $40,528.00 76,988.780 SAND | 0.0376% |
62 | ![]() | SAND-USDT | $0.5243 0.0000194 Btc | $39,387.00 75,117.581 SAND | 0.0367% |
63 | ![]() | SAND-BTC | $0.5254 0.0000195 Btc | $36,859.00 68,882.000 SAND | 0.0337% |
64 | ![]() | SAND-USDT | $0.5218 0.0000194 Btc | $29,309.00 53,525.707 SAND | 0.0262% |
65 | ![]() | SAND-BNB | $0.5265 0.0000195 Btc | $28,428.00 53,991.000 SAND | 0.0264% |
66 | ![]() | SAND-USD | $0.5248 0.0000195 Btc | $24,889.00 47,425.900 SAND | 0.0232% |
67 | ![]() | SAND-USDT | $0.5282 0.0000196 Btc | $23,011.00 43,567.681 SAND | 0.0213% |
68 | ![]() | SAND-USDT | $0.5274 0.0000196 Btc | $22,132.00 40,599.310 SAND | 0.0198% |
69 | ![]() | SAND-BTC | $0.5255 0.0000195 Btc | $20,265.00 38,560.000 SAND | 0.0188% |
70 | ![]() | SAND-XT | $0.5258 0.0000195 Btc | $19,814.93 36,449.630 SAND | 0.0178% |
71 | ![]() | SAND-USDT | $0.5266 0.0000195 Btc | $19,617.49 37,254.669 SAND | 0.0182% |
72 | ![]() | SAND-USDT | $0.5253 0.0000195 Btc | $18,852.98 34,592.100 SAND | 0.0169% |
73 | ![]() | SAND-USD | $0.5255 0.0000195 Btc | $18,481.73 35,168.470 SAND | 0.0172% |
74 | ![]() | SAND-USD | $0.525 0.0000195 Btc | $18,219.53 34,703.871 SAND | 0.0170% |
75 | ![]() | SAND-USD | $0.528 0.0000196 Btc | $16,892.83 31,995.212 SAND | 0.0156% |
76 | ![]() | SAND-GBP | $0.5334 0.0000198 Btc | $15,040.95 28,196.223 SAND | 0.0138% |
77 | ![]() | SAND-USDT | $0.5236 0.0000194 Btc | $13,881.00 25,682.985 SAND | 0.0125% |
78 | ![]() | SAND-ETH | $0.527 0.0000196 Btc | $12,955.11 24,581.200 SAND | 0.0120% |
79 | ![]() | SAND-HT | $0.5271 0.0000196 Btc | $11,378.72 21,354.266 SAND | 0.0104% |
80 | ![]() | SAND-USDT | $0.5282 0.0000196 Btc | $9,978.32 18,890.000 SAND | 0.0092% |
81 | ![]() | SAND-BTC | $0.5295 0.0000197 Btc | $9,514.69 17,968.200 SAND | 0.0088% |
82 | ![]() | SAND-USDT | $0.5272 0.0000196 Btc | $9,062.39 0.000 SAND | 0.0000% |
83 | ![]() | SAND-USDT | $0.5254 0.0000195 Btc | $8,632.90 16,432.000 SAND | 0.0080% |
84 | ![]() | SAND-BRL | $0.5299 0.0000197 Btc | $8,042.31 15,177.047 SAND | 0.0074% |
85 | ![]() | SAND-IDR | $0.5263 0.0000195 Btc | $7,172.27 13,628.076 SAND | 0.0067% |
86 | ![]() | SAND-EUR | $0.5313 0.0000197 Btc | $5,849.85 11,009.868 SAND | 0.0054% |
87 | ![]() | SAND-USDC | $0.5271 0.0000196 Btc | $5,597.50 10,262.861 SAND | 0.0050% |
88 | ![]() | SAND-BTC | $0.5252 0.0000195 Btc | $5,571.47 10,408.796 SAND | 0.0051% |
89 | ![]() | 0X557B933A7C2C45672B610F8954A3DEB39A51A8CA-0X3845BADADE8E6DFF049820680D1F14BD3903A5D0 | $0.5289 0.0000196 Btc | $5,353.13 590,022.835 0X557B933A7C2C45672B610F8954A3DEB39A51A8CA | 0.2883% |
90 | ![]() | SAND-ETH | $0.5267 0.0000195 Btc | $5,315.35 9,881.088 SAND | 0.0048% |
91 | ![]() | SAND-THB | $0.5253 0.0000195 Btc | $3,586.63 6,606.000 SAND | 0.0032% |
92 | ![]() | SAND-USD | $0.5283 0.0000196 Btc | $3,558.96 6,736.378 SAND | 0.0033% |
93 | ![]() | 0XE53EC727DBDEB9E2D5456C3BE40CFF031AB40A55-0X3845BADADE8E6DFF049820680D1F14BD3903A5D0 | $0.5302 0.0000197 Btc | $2,020.82 13,912.342 0XE53EC727DBDEB9E2D5456C3BE40CFF031AB40A55 | 0.0068% |
94 | ![]() | SAND-BUSD | $0.526 0.0000195 Btc | $1,884.91 3,583.434 SAND | 0.0018% |
95 | ![]() | SAND-PHP | $0.5255 0.0000195 Btc | $1,311.37 2,432.168 SAND | 0.0012% |
96 | ![]() | 0XBBBA073C31BF03B8ACF7C28EF0738DECF3695683-0XDFCE1E99A31C4597A3F8A8945CBFA9037655E335 | $0.5275 0.0000196 Btc | $1,126.70 2,108.094 0XBBBA073C31BF03B8ACF7C28EF0738DECF3695683 | 0.0010% |
97 | ![]() | SAND-USDT | $0.5243 0.0000195 Btc | $53.03 97.651 SAND | 0.0000% |
98 | ![]() | SAND-USDT | $0.5253 0.0000195 Btc | $47.01 87.959 SAND | 0.0000% |
99 | ![]() | SAND-USD | $0.526 0.0000195 Btc | $0.00 0.000 SAND | 0.0000% |
100 | ![]() | SAND-EUR | $0.5259 0.0000195 Btc | $0.00 0.000 SAND | 0.0000% |
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 { string internal _name; string internal _symbol; address internal immutable _operator; uint256 internal _totalSupply; mapping(address => uint256) internal _balances; mapping(address => mapping(address => uint256)) internal _allowances; constructor( string memory tokenName, string memory tokenSymbol, address admin, address operator ) { _name = tokenName; _symbol = tokenSymbol; _admin = admin; _operator = operator; } /// @notice Transfer `amount` tokens to `to`. /// @param to The recipient address of the tokens being transfered. /// @param amount The number of tokens being transfered. /// @return success Whether or not the transfer succeeded. function transfer(address to, uint256 amount) external override returns (bool success) { _transfer(_msgSender(), to, amount); return true; } /// @notice Transfer `amount` tokens from `from` to `to`. /// @param from The origin address of the tokens being transferred. /// @param to The recipient address of the tokensbeing transfered. /// @param amount The number of tokens transfered. /// @return success Whether or not the transfer succeeded. function transferFrom( address from, address to, uint256 amount ) external override returns (bool success) { if (_msgSender() != from && !_superOperators[_msgSender()] && _msgSender() != _operator) { uint256 currentAllowance = _allowances[from][_msgSender()]; if (currentAllowance != ~uint256(0)) { // save gas when allowance is maximal by not reducing it (see https://github.com/ethereum/EIPs/issues/717) require(currentAllowance >= amount, "NOT_AUTHORIZED_ALLOWANCE"); _allowances[from][_msgSender()] = currentAllowance - amount; } } _transfer(from, to, amount); return true; } /// @notice Burn `amount` tokens. /// @param amount The number of tokens to burn. function burn(uint256 amount) external override { _burn(_msgSender(), amount); } /// @notice Burn `amount` tokens from `owner`. /// @param from The address whose token to burn. /// @param amount The number of tokens to burn. function burnFor(address from, uint256 amount) external override { _burn(from, amount); } /// @notice Approve `spender` to transfer `amount` tokens. /// @param spender The address to be given rights to transfer. /// @param amount The number of tokens allowed. /// @return success Whether or not the call succeeded. function approve(address spender, uint256 amount) external override returns (bool success) { _approveFor(_msgSender(), spender, amount); return true; } /// @notice Get the name of the token collection. /// @return The name of the token collection. function name() external view virtual returns (string memory) { //added virtual return _name; } /// @notice Get the symbol for the token collection. /// @return The symbol of the token collection. function symbol() external view virtual returns (string memory) { //added virtual return _symbol; } /// @notice Get the total number of tokens in existence. /// @return The total number of tokens in existence. function totalSupply() external view override returns (uint256) { return _totalSupply; } /// @notice Get the balance of `owner`. /// @param owner The address to query the balance of. /// @return The amount owned by `owner`. function balanceOf(address owner) external view override returns (uint256) { return _balances[owner]; } /// @notice Get the allowance of `spender` for `owner`'s tokens. /// @param owner The address whose token is allowed. /// @param spender The address allowed to transfer. /// @return remaining The amount of token `spender` is allowed to transfer on behalf of `owner`. function allowance(address owner, address spender) external view override returns (uint256 remaining) { return _allowances[owner][spender]; } /// @notice Get the number of decimals for the token collection. /// @return The number of decimals. function decimals() external pure virtual returns (uint8) { return uint8(18); } /// @notice Approve `spender` to transfer `amount` tokens from `owner`. /// @param owner The address whose token is allowed. /// @param spender The address to be given rights to transfer. /// @param amount The number of tokens allowed. /// @return success Whether or not the call succeeded. function approveFor( address owner, address spender, uint256 amount ) public override returns (bool success) { require(_msgSender() == owner || _superOperators[_msgSender()] || _msgSender() == _operator, "NOT_AUTHORIZED"); _approveFor(owner, spender, amount); return true; } /// @notice Increase the allowance for the spender if needed /// @param owner The address of the owner of the tokens /// @param spender The address wanting to spend tokens /// @param amountNeeded The amount requested to spend /// @return success Whether or not the call succeeded. function addAllowanceIfNeeded( address owner, address spender, uint256 amountNeeded ) public returns (bool success) { require(_msgSender() == owner || _superOperators[_msgSender()] || _msgSender() == _operator, "INVALID_SENDER"); _addAllowanceIfNeeded(owner, spender, amountNeeded); return true; } /// @dev See addAllowanceIfNeeded. function _addAllowanceIfNeeded( address owner, address spender, uint256 amountNeeded /*(ERC20Internal, ERC20ExecuteExtension, ERC20BasicApproveExtension)*/ ) internal virtual override { if (amountNeeded > 0 && !isSuperOperator(spender) && spender != _operator) { uint256 currentAllowance = _allowances[owner][spender]; if (currentAllowance < amountNeeded) { _approveFor(owner, spender, amountNeeded); } } } /// @dev See approveFor. function _approveFor( address owner, address spender, uint256 amount /*(ERC20BasicApproveExtension, ERC20Internal)*/ ) internal virtual override { require(owner != address(0) && spender != address(0), "INVALID_OWNER_||_SPENDER"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /// @dev See transfer. function _transfer( address from, address to, uint256 amount /*(ERC20Internal, ERC20ExecuteExtension)*/ ) internal virtual override { require(to != address(0), "NOT_TO_ZEROADDRESS"); require(to != address(this), "NOT_TO_THIS"); uint256 currentBalance = _balances[from]; require(currentBalance >= amount, "INSUFFICIENT_FUNDS"); _balances[from] = currentBalance - amount; _balances[to] += amount; emit Transfer(from, to, amount); } /// @dev Mint tokens for a recipient. /// @param to The recipient address. /// @param amount The number of token to mint. function _mint(address to, uint256 amount) internal { require(to != address(0), "NOT_TO_ZEROADDRESS"); require(amount > 0, "MINT_O_TOKENS"); uint256 currentTotalSupply = _totalSupply; uint256 newTotalSupply = currentTotalSupply + amount; require(newTotalSupply > currentTotalSupply, "OVERFLOW"); _totalSupply = newTotalSupply; _balances[to] += amount; emit Transfer(address(0), to, amount); } /// @dev Burn tokens from an address. /// @param from The address whose tokens to burn. /// @param amount The number of token to burn. function _burn(address from, uint256 amount) internal { require(amount > 0, "BURN_O_TOKENS"); if (_msgSender() != from && !_superOperators[_msgSender()] && _msgSender() != _operator) { uint256 currentAllowance = _allowances[from][_msgSender()]; if (currentAllowance != ~uint256(0)) { // save gas when allowance is maximal by not reducing it (see https://github.com/ethereum/EIPs/issues/717) require(currentAllowance >= amount, "INSUFFICIENT_ALLOWANCE"); _allowances[from][_msgSender()] = currentAllowance - amount; } } uint256 currentBalance = _balances[from]; require(currentBalance >= amount, "INSUFFICIENT_FUNDS"); _balances[from] = currentBalance - amount; _totalSupply -= amount; emit Transfer(from, address(0), amount); } }
//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 { uint256 private constant DATA_MIN_LENGTH = 68; /// @dev Check if the data == _address. /// @param data The bytes passed to the function. /// @param _address The address to compare to. /// @return Whether the first param == _address. function doFirstParamEqualsAddress(bytes memory data, address _address) internal pure returns (bool) { if (data.length < DATA_MIN_LENGTH) { return false; } uint256 value; // solhint-disable-next-line no-inline-assembly assembly { value := mload(add(data, 36)) } return value == uint256(uint160(_address)); } }
// 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", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_childChainManagerProxy","type":"address"},{"internalType":"address","name":"trustedForwarder","type":"address"},{"internalType":"address","name":"sandAdmin","type":"address"},{"internalType":"address","name":"executionAdmin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"superOperator","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SuperOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amountNeeded","type":"uint256"}],"name":"addAllowanceIfNeeded","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"remaining","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approveFor","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"childChainManagerProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bytes","name":"depositData","type":"bytes"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTrustedForwarder","outputs":[{"internalType":"address","name":"trustedForwarder","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"isSuperOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"forwarder","type":"address"}],"name":"isTrustedForwarder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"paidCall","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"superOperator","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSuperOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"trustedForwarder","type":"address"}],"name":"setTrustedForwarder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newChildChainManagerProxy","type":"address"}],"name":"updateChildChainManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040523480156200001157600080fd5b506040516200234b3803806200234b83398101604081905262000034916200049b565b81816000806040518060400160405280600481526020016314d0539160e21b8152506040518060400160405280600481526020016314d0539160e21b815250858583600290805190602001906200008d929190620003dd565b508251620000a3906003906020860190620003dd565b506000805460609290921b6001600160601b0319166080526001600160a01b03199182166001600160a01b039384161790911688831617905584161591506200010e9050576000620000fe82670de0b6b3a764000062000512565b90506200010c838262000225565b505b505050506000620001246200037e60201b60201c565b600780546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b038416620001d95760405162461bcd60e51b815260206004820152602260248201527f426164204368696c64436861696e4d616e6167657250726f7879206164647265604482015261737360f01b60648201526084015b60405180910390fd5b600980546001600160a01b0319166001600160a01b0386161790556200021b83600880546001600160a01b0319166001600160a01b0392909216919091179055565b5050505062000587565b6001600160a01b038216620002725760405162461bcd60e51b81526020600482015260126024820152714e4f545f544f5f5a45524f4144445245535360701b6044820152606401620001d0565b60008111620002b45760405162461bcd60e51b815260206004820152600d60248201526c4d494e545f4f5f544f4b454e5360981b6044820152606401620001d0565b6004546000620002c58383620004f7565b9050818111620003035760405162461bcd60e51b81526020600482015260086024820152674f564552464c4f5760c01b6044820152606401620001d0565b60048190556001600160a01b0384166000908152600560205260408120805485929062000332908490620004f7565b90915550506040518381526001600160a01b038516906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b6000620003956200039b60201b6200123c1760201c565b90505b90565b6000620003a833620003c6565b15620003be575060131936013560601c62000398565b503362000398565b6008546001600160a01b038281169116145b919050565b828054620003eb9062000534565b90600052602060002090601f0160209004810192826200040f57600085556200045a565b82601f106200042a57805160ff19168380011785556200045a565b828001600101855582156200045a579182015b828111156200045a5782518255916020019190600101906200043d565b50620004689291506200046c565b5090565b5b808211156200046857600081556001016200046d565b80516001600160a01b0381168114620003d857600080fd5b60008060008060808587031215620004b1578384fd5b620004bc8562000483565b9350620004cc6020860162000483565b9250620004dc6040860162000483565b9150620004ec6060860162000483565b905092959194509250565b600082198211156200050d576200050d62000571565b500190565b60008160001904831182151516156200052f576200052f62000571565b500290565b6002810460018216806200054957607f821691505b602082108114156200056b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60805160601c611d89620005c2600039600081816106af0152818161083e0152818161093a0152818161140501526117ec0152611d896000f3fe6080604052600436106101c25760003560e01c80636e9960c3116100f7578063ac9fe42111610095578063cf2c52cb11610064578063cf2c52cb146104f0578063da74222814610510578063dd62ed3e14610530578063f2fde38b14610576576101c2565b8063ac9fe4211461048c578063bb1e23cb146104ac578063cae9ca51146104bf578063ce1b815f146104d2576101c2565b80638da5cb5b116100d15780638da5cb5b146104195780638f2839701461043757806395d89b4114610457578063a9059cbb1461046c576101c2565b80636e9960c3146103b057806370a08231146103ce578063715018a614610404576101c2565b8063313ce56711610164578063445a67971161013e578063445a6797146102ff578063572b6c051461031f57806362f629e71461033f578063654b748a14610377576101c2565b8063313ce567146102c35780633b7b5a16146102df57806342966c68146102a3576101c2565b80631dd319cb116101a05780631dd319cb1461024157806323b872dd146102635780632b991746146102835780632e1a7d4d146102a3576101c2565b806306fdde03146101c7578063095ea7b3146101f257806318160ddd14610222575b600080fd5b3480156101d357600080fd5b506101dc610596565b6040516101e99190611c8e565b60405180910390f35b3480156101fe57600080fd5b5061021261020d366004611b7c565b610629565b60405190151581526020016101e9565b34801561022e57600080fd5b506004545b6040519081526020016101e9565b34801561024d57600080fd5b5061026161025c366004611b7c565b610647565b005b34801561026f57600080fd5b5061021261027e366004611ab6565b610655565b34801561028f57600080fd5b5061021261029e366004611ab6565b6107e8565b3480156102af57600080fd5b506102616102be366004611bfd565b6108d0565b3480156102cf57600080fd5b50604051601281526020016101e9565b3480156102eb57600080fd5b506102126102fa366004611ab6565b6108e4565b34801561030b57600080fd5b5061026161031a366004611a63565b6109cc565b34801561032b57600080fd5b5061021261033a366004611a63565b610af0565b34801561034b57600080fd5b5060095461035f906001600160a01b031681565b6040516001600160a01b0390911681526020016101e9565b34801561038357600080fd5b50610212610392366004611a63565b6001600160a01b031660009081526001602052604090205460ff1690565b3480156103bc57600080fd5b506000546001600160a01b031661035f565b3480156103da57600080fd5b506102336103e9366004611a63565b6001600160a01b031660009081526005602052604090205490565b34801561041057600080fd5b50610261610b07565b34801561042557600080fd5b506007546001600160a01b031661035f565b34801561044357600080fd5b50610261610452366004611a63565b610bd7565b34801561046357600080fd5b506101dc610ca7565b34801561047857600080fd5b50610212610487366004611b7c565b610cb6565b34801561049857600080fd5b506102616104a7366004611af1565b610cca565b6101dc6104ba366004611ba5565b610dcb565b6101dc6104cd366004611ba5565b610f09565b3480156104de57600080fd5b506008546001600160a01b031661035f565b3480156104fc57600080fd5b5061026161050b366004611b2b565b610fac565b34801561051c57600080fd5b5061026161052b366004611a63565b611036565b34801561053c57600080fd5b5061023361054b366004611a84565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561058257600080fd5b50610261610591366004611a63565b6110de565b6060600280546105a590611cd0565b80601f01602080910402602001604051908101604052809291908181526020018280546105d190611cd0565b801561061e5780601f106105f35761010080835404028352916020019161061e565b820191906000526020600020905b81548152906001019060200180831161060157829003601f168201915b505050505090505b90565b600061063d610636611280565b848461128f565b5060015b92915050565b610651828261135d565b5050565b6000836001600160a01b0316610669611280565b6001600160a01b0316141580156106a6575060016000610687611280565b6001600160a01b0316815260208101919091526040016000205460ff16155b80156106eb57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166106df611280565b6001600160a01b031614155b156107d3576001600160a01b038416600090815260066020526040812081610711611280565b6001600160a01b03168152602081019190915260400160002054905060001981146107d1578281101561078b5760405162461bcd60e51b815260206004820152601860248201527f4e4f545f415554484f52495a45445f414c4c4f57414e4345000000000000000060448201526064015b60405180910390fd5b6107958382611cb9565b6001600160a01b0386166000908152600660205260408120906107b6611280565b6001600160a01b031681526020810191909152604001600020555b505b6107de848484611608565b5060019392505050565b6000836001600160a01b03166107fc611280565b6001600160a01b03161480610836575060016000610818611280565b6001600160a01b0316815260208101919091526040016000205460ff165b8061087957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661086e611280565b6001600160a01b0316145b6108c55760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610782565b6107de84848461128f565b6108e16108db611280565b8261135d565b50565b6000836001600160a01b03166108f8611280565b6001600160a01b03161480610932575060016000610914611280565b6001600160a01b0316815260208101919091526040016000205460ff165b8061097557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661096a611280565b6001600160a01b0316145b6109c15760405162461bcd60e51b815260206004820152600e60248201527f494e56414c49445f53454e4445520000000000000000000000000000000000006044820152606401610782565b6107de8484846117ba565b6109d4611280565b6001600160a01b03166109ef6007546001600160a01b031690565b6001600160a01b031614610a455760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610782565b6001600160a01b038116610ac15760405162461bcd60e51b815260206004820152602260248201527f426164204368696c64436861696e4d616e6167657250726f787920616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610782565b6009805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6008546001600160a01b038281169116145b919050565b610b0f611280565b6001600160a01b0316610b2a6007546001600160a01b031690565b6001600160a01b031614610b805760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610782565b6007546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36007805473ffffffffffffffffffffffffffffffffffffffff19169055565b6000546001600160a01b03163314610c315760405162461bcd60e51b815260206004820152601360248201527f41444d494e5f4143434553535f44454e494544000000000000000000000000006044820152606401610782565b600054604080516001600160a01b03928316815291831660208301527f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a16000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6060600380546105a590611cd0565b600061063d610cc3611280565b8484611608565b6000546001600160a01b03163314610d4a5760405162461bcd60e51b815260206004820152602c60248201527f6f6e6c792061646d696e20697320616c6c6f77656420746f206164642073757060448201527f6572206f70657261746f727300000000000000000000000000000000000000006064820152608401610782565b6001600160a01b03821660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168515159081179091558251938452908301527f44f92d27abdf4cfb6a7d712c3af68f3be086d4ca747ab802c36f67d6790060d8910160405180910390a15050565b6060610e1583838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e109250611280915050565b611864565b610e615760405162461bcd60e51b815260206004820152601660248201527f46495253545f504152414d5f4e4f545f53454e444552000000000000000000006044820152606401610782565b8315610e7957610e79610e72611280565b86866117ba565b600080866001600160a01b0316348686604051610e97929190611c7e565b60006040518083038185875af1925050503d8060008114610ed4576040519150601f19603f3d011682016040523d82523d6000602084013e610ed9565b606091505b5091509150818190610efe5760405162461bcd60e51b81526004016107829190611c8e565b509695505050505050565b6060610f4e83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e109250611280915050565b610f9a5760405162461bcd60e51b815260206004820152601660248201527f46495253545f504152414d5f4e4f545f53454e444552000000000000000000006044820152606401610782565b610e79610fa5611280565b868661128f565b6009546001600160a01b0316610fc0611280565b6001600160a01b0316146110165760405162461bcd60e51b815260206004820152601d60248201527f596f75277265206e6f7420616c6c6f77656420746f206465706f7369740000006044820152606401610782565b600061102482840184611bfd565b9050611030848261188f565b50505050565b61103e611280565b6001600160a01b03166110596007546001600160a01b031690565b6001600160a01b0316146110af5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610782565b6008805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6110e6611280565b6001600160a01b03166111016007546001600160a01b031690565b6001600160a01b0316146111575760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610782565b6001600160a01b0381166111d35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610782565b6007546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36007805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600061124733610af0565b1561127957507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c610626565b5033610626565b600061128a61123c565b905090565b6001600160a01b038316158015906112af57506001600160a01b03821615155b6112fb5760405162461bcd60e51b815260206004820152601860248201527f494e56414c49445f4f574e45525f7c7c5f5350454e44455200000000000000006044820152606401610782565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600081116113ad5760405162461bcd60e51b815260206004820152600d60248201527f4255524e5f4f5f544f4b454e53000000000000000000000000000000000000006044820152606401610782565b816001600160a01b03166113bf611280565b6001600160a01b0316141580156113fc5750600160006113dd611280565b6001600160a01b0316815260208101919091526040016000205460ff16155b801561144157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611435611280565b6001600160a01b031614155b15611524576001600160a01b038216600090815260066020526040812081611467611280565b6001600160a01b031681526020810191909152604001600020549050600019811461152257818110156114dc5760405162461bcd60e51b815260206004820152601660248201527f494e53554646494349454e545f414c4c4f57414e4345000000000000000000006044820152606401610782565b6114e68282611cb9565b6001600160a01b038416600090815260066020526040812090611507611280565b6001600160a01b031681526020810191909152604001600020555b505b6001600160a01b0382166000908152600560205260409020548181101561158d5760405162461bcd60e51b815260206004820152601260248201527f494e53554646494349454e545f46554e445300000000000000000000000000006044820152606401610782565b6115978282611cb9565b6001600160a01b038416600090815260056020526040812091909155600480548492906115c5908490611cb9565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611350565b6001600160a01b03821661165e5760405162461bcd60e51b815260206004820152601260248201527f4e4f545f544f5f5a45524f4144445245535300000000000000000000000000006044820152606401610782565b6001600160a01b0382163014156116b75760405162461bcd60e51b815260206004820152600b60248201527f4e4f545f544f5f544849530000000000000000000000000000000000000000006044820152606401610782565b6001600160a01b038316600090815260056020526040902054818110156117205760405162461bcd60e51b815260206004820152601260248201527f494e53554646494349454e545f46554e445300000000000000000000000000006044820152606401610782565b61172a8282611cb9565b6001600160a01b038086166000908152600560205260408082209390935590851681529081208054849290611760908490611ca1565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117ac91815260200190565b60405180910390a350505050565b6000811180156117e357506001600160a01b03821660009081526001602052604090205460ff16155b801561182157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b1561185f576001600160a01b03808416600090815260066020908152604080832093861683529290522054818110156110305761103084848461128f565b505050565b600060448351101561187857506000610641565b5060248201516001600160a01b0382161492915050565b6001600160a01b0382166118e55760405162461bcd60e51b815260206004820152601260248201527f4e4f545f544f5f5a45524f4144445245535300000000000000000000000000006044820152606401610782565b600081116119355760405162461bcd60e51b815260206004820152600d60248201527f4d494e545f4f5f544f4b454e53000000000000000000000000000000000000006044820152606401610782565b60045460006119448383611ca1565b90508181116119955760405162461bcd60e51b815260206004820152600860248201527f4f564552464c4f570000000000000000000000000000000000000000000000006044820152606401610782565b60048190556001600160a01b038416600090815260056020526040812080548592906119c2908490611ca1565b90915550506040518381526001600160a01b038516906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016117ac565b80356001600160a01b0381168114610b0257600080fd5b60008083601f840112611a2d578182fd5b50813567ffffffffffffffff811115611a44578182fd5b602083019150836020828501011115611a5c57600080fd5b9250929050565b600060208284031215611a74578081fd5b611a7d82611a05565b9392505050565b60008060408385031215611a96578081fd5b611a9f83611a05565b9150611aad60208401611a05565b90509250929050565b600080600060608486031215611aca578081fd5b611ad384611a05565b9250611ae160208501611a05565b9150604084013590509250925092565b60008060408385031215611b03578182fd5b611b0c83611a05565b915060208301358015158114611b20578182fd5b809150509250929050565b600080600060408486031215611b3f578283fd5b611b4884611a05565b9250602084013567ffffffffffffffff811115611b63578283fd5b611b6f86828701611a1c565b9497909650939450505050565b60008060408385031215611b8e578182fd5b611b9783611a05565b946020939093013593505050565b60008060008060608587031215611bba578081fd5b611bc385611a05565b935060208501359250604085013567ffffffffffffffff811115611be5578182fd5b611bf187828801611a1c565b95989497509550505050565b600060208284031215611c0e578081fd5b5035919050565b60008151808452815b81811015611c3a57602081850181015186830182015201611c1e565b81811115611c4b5782602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000828483379101908152919050565b600060208252611a7d6020830184611c15565b60008219821115611cb457611cb4611d24565b500190565b600082821015611ccb57611ccb611d24565b500390565b600281046001821680611ce457607f821691505b60208210811415611d1e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122062a887365b69f1c5fb4fb5b0be071e4c0dc583555fa546d72053d18702a5dfe064736f6c63430008020033000000000000000000000000a6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa00000000000000000000000086c80a8aa58e0a4fa09a69624c31ab2a6cad56b8000000000000000000000000e75ce341c98400a45f579e32c95ff49681fc93fa000000000000000000000000e75ce341c98400a45f579e32c95ff49681fc93fa
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa00000000000000000000000086c80a8aa58e0a4fa09a69624c31ab2a6cad56b8000000000000000000000000e75ce341c98400a45f579e32c95ff49681fc93fa000000000000000000000000e75ce341c98400a45f579e32c95ff49681fc93fa
-----Decoded View---------------
Arg [0] : _childChainManagerProxy (address): 0xa6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa
Arg [1] : trustedForwarder (address): 0x86c80a8aa58e0a4fa09a69624c31ab2a6cad56b8
Arg [2] : sandAdmin (address): 0xe75ce341c98400a45f579e32c95ff49681fc93fa
Arg [3] : executionAdmin (address): 0xe75ce341c98400a45f579e32c95ff49681fc93fa
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000a6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa
Arg [1] : 00000000000000000000000086c80a8aa58e0a4fa09a69624c31ab2a6cad56b8
Arg [2] : 000000000000000000000000e75ce341c98400a45f579e32c95ff49681fc93fa
Arg [3] : 000000000000000000000000e75ce341c98400a45f579e32c95ff49681fc93fa