Token Matic Token
Overview ERC-20
Price
$0.90 @ 0.999956 MATIC (+0.19%)
Fully Diluted Market Cap
Total Supply:
10,000,000,000 MATIC
Holders:
81,711 addresses
Transfers:
-
Contract:
Decimals:
18
Official Site:
[ Download CSV Export ]
[ Download CSV Export ]
OVERVIEW
Polygon is a protocol and a framework for building and connecting Ethereum-compatible blockchain networks. Aggregating scalable solutions on Ethereum supporting a multi-chain Ethereum ecosystem.Market
Volume (24H) | : | $123,963,001.00 |
Market Capitalization | : | $8,384,432,001.00 |
Circulating Supply | : | 9,279,469,069.00 MATIC |
Market Data Source: Coinmarketcap |
Update? Click here to update the token ICO / general information
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|---|---|---|---|---|
1 | ![]() | MATIC-USDT | $0.9015 0.0000331 Btc | $18,518,526.00 20,542,529.623 MATIC | 24.7592% |
2 | ![]() | MATIC-USDT | $0.9012 0.0000330 Btc | $5,056,610.00 5,607,199.843 MATIC | 6.7582% |
3 | ![]() | MATIC-USD | $0.9019 0.0000330 Btc | $3,666,549.00 4,065,361.400 MATIC | 4.8998% |
4 | ![]() | MATIC-USDT | $0.9029 0.0000331 Btc | $3,290,581.00 3,644,579.200 MATIC | 4.3927% |
5 | ![]() | MATIC-BUSD | $0.9033 0.0000331 Btc | $3,123,976.00 3,458,295.542 MATIC | 4.1682% |
6 | ![]() | MATIC-USDT | $0.9007 0.0000330 Btc | $2,583,901.00 2,868,710.145 MATIC | 3.4576% |
7 | ![]() | MATIC-USDT | $0.9016 0.0000330 Btc | $2,427,569.00 2,692,052.200 MATIC | 3.2446% |
8 | ![]() | MATIC-USDT | $0.9011 0.0000330 Btc | $2,290,656.00 2,540,474.790 MATIC | 3.0619% |
9 | ![]() | MATIC-USD | $0.9021 0.0000330 Btc | $2,065,394.00 2,289,539.597 MATIC | 2.7595% |
10 | ![]() | MATIC-BTC | $0.9014 0.0000330 Btc | $1,845,549.00 2,047,386.976 MATIC | 2.4676% |
11 | ![]() | MATIC-USDT | $0.9017 0.0000330 Btc | $1,823,655.00 2,022,529.798 MATIC | 2.4377% |
12 | ![]() | MATIC-USDT | $0.9015 0.0000330 Btc | $1,815,606.00 2,006,046.269 MATIC | 2.4178% |
13 | ![]() | MATIC-KRW | $0.9111 0.0000334 Btc | $1,799,609.00 1,975,312.482 MATIC | 2.3808% |
14 | ![]() | MATIC-USDT | $0.9014 0.0000330 Btc | $1,788,469.00 1,983,544.700 MATIC | 2.3907% |
15 | ![]() | MATIC-BTC | $0.9037 0.0000331 Btc | $1,750,052.00 1,936,436.349 MATIC | 2.3339% |
16 | ![]() | MATIC-USDT | $0.9011 0.0000330 Btc | $1,439,467.00 1,595,370.400 MATIC | 1.9228% |
17 | ![]() | 0X7D1AFA7B718FB893DB30A3ABC0CFC608AACFEBB0-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2 | $0.8995 0.0000329 Btc | $1,420,100.00 1,585,762.940 0X7D1AFA7B718FB893DB30A3ABC0CFC608AACFEBB0 | 1.9113% |
18 | ![]() | MATIC-USDT | $0.9016 0.0000330 Btc | $1,324,870.00 1,469,435.370 MATIC | 1.7711% |
19 | ![]() | MATIC-USDT | $0.9017 0.0000330 Btc | $1,295,164.00 1,436,435.080 MATIC | 1.7313% |
20 | ![]() | MATIC-USDT | $0.9028 0.0000331 Btc | $1,165,153.00 1,290,783.957 MATIC | 1.5557% |
21 | ![]() | MATIC-USDT | $0.9008 0.0000330 Btc | $1,014,237.00 1,124,292.450 MATIC | 1.3551% |
22 | ![]() | MATIC-USD | $0.9015 0.0000330 Btc | $1,011,974.00 1,122,507.108 MATIC | 1.3529% |
23 | ![]() | MATIC-BUSD | $0.9017 0.0000330 Btc | $952,809.00 1,056,733.144 MATIC | 1.2736% |
24 | ![]() | MATIC-USDT | $0.9013 0.0000330 Btc | $940,404.00 1,043,363.700 MATIC | 1.2575% |
25 | ![]() | MATIC-USDT | $0.9014 0.0000330 Btc | $909,829.00 1,009,330.227 MATIC | 1.2165% |
26 | ![]() | MATIC-USDT | $0.9017 0.0000330 Btc | $801,251.00 888,617.100 MATIC | 1.0710% |
27 | ![]() | MATIC-USD | $0.9018 0.0000330 Btc | $714,063.00 791,819.592 MATIC | 0.9544% |
28 | ![]() | MATIC-USDT | $0.9016 0.0000330 Btc | $686,751.00 761,550.118 MATIC | 0.9179% |
29 | ![]() | MATIC-USDT | $0.9012 0.0000330 Btc | $621,863.00 690,023.130 MATIC | 0.8317% |
30 | ![]() | MATIC-USD | $0.9025 0.0000331 Btc | $485,095.00 537,501.395 MATIC | 0.6478% |
31 | ![]() | MATIC-USDT | $0.9014 0.0000330 Btc | $471,619.00 522,894.125 MATIC | 0.6302% |
32 | ![]() | MATIC-USDT | $0.8939 0.0000328 Btc | $406,296.00 454,533.778 MATIC | 0.5478% |
33 | ![]() | MATIC-USDT | $0.9019 0.0000330 Btc | $403,671.00 447,434.465 MATIC | 0.5393% |
34 | ![]() | MATIC-USDT | $0.9011 0.0000330 Btc | $370,338.00 410,976.000 MATIC | 0.4953% |
35 | ![]() | MATIC-USDT | $0.9016 0.0000330 Btc | $328,212.00 363,973.003 MATIC | 0.4387% |
36 | ![]() | MATIC-EUR | $0.9014 0.0000330 Btc | $252,245.00 279,846.934 MATIC | 0.3373% |
37 | ![]() | MATIC-ETH | $0.9024 0.0000330 Btc | $248,374.00 275,230.704 MATIC | 0.3317% |
38 | ![]() | MATIC-KRW | $0.9088 0.0000333 Btc | $241,446.00 265,688.914 MATIC | 0.3202% |
39 | ![]() | MATIC-TRY | $0.9051 0.0000331 Btc | $233,306.00 257,765.304 MATIC | 0.3107% |
40 | ![]() | MATIC-USDC | $0.9015 0.0000330 Btc | $193,801.00 214,304.865 MATIC | 0.2583% |
41 | ![]() | MATIC-EUR | $0.9021 0.0000330 Btc | $187,163.00 207,469.676 MATIC | 0.2501% |
42 | ![]() | MATIC-USD | $0.9024 0.0000331 Btc | $180,412.00 199,936.100 MATIC | 0.2410% |
43 | ![]() | MATIC-USDT | $0.9015 0.0000330 Btc | $173,840.00 192,783.350 MATIC | 0.2324% |
44 | ![]() | MATIC-BTC | $0.9025 0.0000331 Btc | $161,574.00 179,020.931 MATIC | 0.2158% |
45 | ![]() | MATIC-EUR | $0.9048 0.0000331 Btc | $160,105.00 176,954.247 MATIC | 0.2133% |
46 | ![]() | MATIC-USDT | $0.9012 0.0000330 Btc | $148,215.00 164,466.590 MATIC | 0.1982% |
47 | ![]() | MATIC-USDT | $0.9012 0.0000330 Btc | $135,174.00 149,806.020 MATIC | 0.1806% |
48 | ![]() | MATIC-USDT | $0.9016 0.0000330 Btc | $128,285.00 142,292.300 MATIC | 0.1715% |
49 | ![]() | MATIC-ETH | $0.9021 0.0000330 Btc | $120,918.00 134,037.421 MATIC | 0.1616% |
50 | ![]() | MATIC-BRL | $0.9124 0.0000334 Btc | $106,259.00 116,461.170 MATIC | 0.1404% |
51 | ![]() | MATIC-BTC | $0.9018 0.0000330 Btc | $98,835.00 109,098.000 MATIC | 0.1315% |
52 | ![]() | MATIC-USDC | $0.9027 0.0000331 Btc | $96,720.00 107,140.530 MATIC | 0.1291% |
53 | ![]() | MATIC-USD | $0.9019 0.0000330 Btc | $95,147.00 105,498.257 MATIC | 0.1272% |
54 | ![]() | MATIC-BTC | $0.9022 0.0000330 Btc | $94,222.00 104,440.000 MATIC | 0.1259% |
55 | ![]() | MATIC-USDT | $0.9011 0.0000330 Btc | $88,939.00 98,700.754 MATIC | 0.1190% |
56 | ![]() | MATIC-EUR | $0.9021 0.0000331 Btc | $86,601.00 95,997.600 MATIC | 0.1157% |
57 | ![]() | MATIC-USD | $0.9016 0.0000330 Btc | $85,625.00 94,966.519 MATIC | 0.1145% |
58 | ![]() | MATIC-USDT | $0.9025 0.0000331 Btc | $85,495.00 94,733.787 MATIC | 0.1142% |
59 | ![]() | MATIC-USDT | $0.9004 0.0000330 Btc | $66,862.00 74,257.200 MATIC | 0.0895% |
60 | ![]() | 0X3A58A54C066FDC0F2D55FC9C89F0415C92EBF3C4-MATIC | $0.9035 0.0000331 Btc | $63,421.00 65,398.822 0X3A58A54C066FDC0F2D55FC9C89F0415C92EBF3C4 | 0.0788% |
61 | ![]() | MATIC-BUSD | $0.9017 0.0000330 Btc | $52,609.00 58,343.900 MATIC | 0.0703% |
62 | ![]() | MATIC-USDC | $0.901 0.0000330 Btc | $51,771.00 57,458.896 MATIC | 0.0693% |
63 | ![]() | MATIC-USD | $0.9016 0.0000330 Btc | $48,560.00 53,862.849 MATIC | 0.0649% |
64 | ![]() | MATIC-USDT | $0.9013 0.0000330 Btc | $46,941.00 52,026.659 MATIC | 0.0627% |
65 | ![]() | MATIC-JPY | $0.9019 0.0000330 Btc | $44,520.00 49,361.317 MATIC | 0.0595% |
66 | ![]() | MATIC-THB | $0.896 0.0000328 Btc | $44,340.00 49,487.621 MATIC | 0.0596% |
67 | ![]() | 0X2791BCA1F2DE4661ED88A30C99A7A9449AA84174-MATIC | $0.9035 0.0000331 Btc | $35,412.00 35,423.168 0X2791BCA1F2DE4661ED88A30C99A7A9449AA84174 | 0.0427% |
68 | ![]() | MATIC-USDT | $0.9008 0.0000330 Btc | $33,028.00 0.000 MATIC | 0.0000% |
69 | ![]() | MATIC-IDR | $0.9038 0.0000331 Btc | $32,977.00 36,485.593 MATIC | 0.0440% |
70 | ![]() | MATIC-BTC | $0.9018 0.0000330 Btc | $30,974.00 34,347.700 MATIC | 0.0414% |
71 | ![]() | MATIC-BTC | $0.9023 0.0000331 Btc | $27,876.00 30,894.930 MATIC | 0.0372% |
72 | ![]() | MATIC-BUSD | $0.9017 0.0000330 Btc | $27,628.00 30,623.886 MATIC | 0.0369% |
73 | ![]() | MATIC-USDT | $0.9013 0.0000330 Btc | $24,193.00 26,842.640 MATIC | 0.0324% |
74 | ![]() | MATIC-GBP | $0.9015 0.0000330 Btc | $24,107.00 26,740.700 MATIC | 0.0322% |
75 | ![]() | 0X7D1AFA7B718FB893DB30A3ABC0CFC608AACFEBB0-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2 | $0.9009 0.0000330 Btc | $21,631.00 24,051.396 0X7D1AFA7B718FB893DB30A3ABC0CFC608AACFEBB0 | 0.0290% |
76 | ![]() | MATIC-GBP | $0.9031 0.0000331 Btc | $20,975.00 23,224.851 MATIC | 0.0280% |
77 | ![]() | MATIC-TUSD | $0.9014 0.0000330 Btc | $18,682.10 20,725.870 MATIC | 0.0250% |
78 | ![]() | MATIC-KRW | $0.9103 0.0000333 Btc | $15,403.88 16,922.051 MATIC | 0.0204% |
79 | ![]() | MATIC-USDT | $0.9013 0.0000330 Btc | $14,801.90 16,438.200 MATIC | 0.0198% |
80 | ![]() | MATIC-BIDR | $0.9035 0.0000331 Btc | $13,325.21 14,749.171 MATIC | 0.0178% |
81 | ![]() | MATIC-EUR | $0.9045 0.0000331 Btc | $12,505.29 13,825.051 MATIC | 0.0167% |
82 | ![]() | MATIC-BTC | $0.9053 0.0000332 Btc | $11,780.04 13,012.000 MATIC | 0.0157% |
83 | ![]() | MATIC-ETH | $0.9017 0.0000330 Btc | $11,532.38 12,752.913 MATIC | 0.0154% |
84 | ![]() | MATIC-ETH | $0.903 0.0000331 Btc | $10,960.35 12,120.600 MATIC | 0.0146% |
85 | ![]() | MATIC-BRL | $0.9119 0.0000334 Btc | $9,518.62 10,438.268 MATIC | 0.0126% |
86 | ![]() | MATIC-BTC | $0.9015 0.0000330 Btc | $8,626.45 9,525.710 MATIC | 0.0115% |
87 | ![]() | MATIC-USDT | $0.9009 0.0000330 Btc | $8,562.44 9,504.561 MATIC | 0.0115% |
88 | ![]() | 0XCC42724C6683B7E57334C4E856F4C9965ED682BD-0XBB4CDB9CBD36B01BD1CBAEBF2DE08D9173BC095C | $0.9022 0.0000331 Btc | $7,889.98 8,735.033 0XCC42724C6683B7E57334C4E856F4C9965ED682BD | 0.0105% |
89 | ![]() | MATIC-TRY | $0.9033 0.0000331 Btc | $6,379.90 7,066.142 MATIC | 0.0085% |
90 | ![]() | 0X9A71012B13CA4D3D0CDC72A177DF3EF03B0E76A3-MATIC | $0.9035 0.0000331 Btc | $5,302.43 1,004.272 0X9A71012B13CA4D3D0CDC72A177DF3EF03B0E76A3 | 0.0012% |
91 | ![]() | MATIC-USD | $0.9035 0.0000331 Btc | $4,808.18 5,321.723 MATIC | 0.0064% |
92 | ![]() | MATIC-USD | $0.9012 0.0000330 Btc | $4,017.43 4,457.870 MATIC | 0.0054% |
93 | ![]() | MATIC-PLN | $0.907 0.0000332 Btc | $3,831.12 0.000 MATIC | 0.0000% |
94 | ![]() | MATIC-USD | $0.9041 0.0000331 Btc | $3,699.37 4,099.460 MATIC | 0.0049% |
95 | ![]() | 0X7CEB23FD6BC0ADD59E62AC25578270CFF1B9F619-MATIC | $0.9035 0.0000331 Btc | $3,616.61 1.905 0X7CEB23FD6BC0ADD59E62AC25578270CFF1B9F619 | 0.0000% |
96 | ![]() | MATIC-NZD | $0.9017 0.0000330 Btc | $1,973.16 2,188.306 MATIC | 0.0026% |
97 | ![]() | MATIC-USD | $0.9017 0.0000330 Btc | $1,973.09 2,188.306 MATIC | 0.0026% |
98 | ![]() | MATIC-AUD | $0.9015 0.0000330 Btc | $1,972.80 2,188.306 MATIC | 0.0026% |
99 | ![]() | MATIC-SGD | $0.9015 0.0000330 Btc | $1,972.79 2,188.306 MATIC | 0.0026% |
100 | ![]() | MATIC-PLN | $0.9139 0.0000335 Btc | $1,055.70 1,155.177 MATIC | 0.0014% |
Contract Name:
MRC20
Compiler Version
v0.5.11+commit.c082d0b4
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-16 */ // File: openzeppelin-solidity/contracts/math/SafeMath.sol pragma solidity ^0.5.2; /** * @title SafeMath * @dev Unsigned math operations with safety checks that revert on error */ library SafeMath { /** * @dev Multiplies two unsigned integers, reverts on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b); return c; } /** * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); uint256 c = a - b; return c; } /** * @dev Adds two unsigned integers, reverts on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a); return c; } /** * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0); return a % b; } } // File: openzeppelin-solidity/contracts/ownership/Ownable.sol pragma solidity ^0.5.2; /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor () internal { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } /** * @return the address of the owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner()); _; } /** * @return true if `msg.sender` is the owner of the contract. */ function isOwner() public view returns (bool) { return msg.sender == _owner; } /** * @dev Allows the current owner to relinquish control of the contract. * It will not be possible to call the functions with the `onlyOwner` * modifier anymore. * @notice Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0)); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: contracts/common/mixin/ChainIdMixin.sol pragma solidity ^0.5.2; contract ChainIdMixin { bytes constant public networkId = hex"89"; uint256 constant public CHAINID = 137; } // File: contracts/child/misc/EIP712.sol pragma solidity ^0.5.2; contract LibEIP712Domain is ChainIdMixin { string internal constant EIP712_DOMAIN_SCHEMA = "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"; bytes32 public constant EIP712_DOMAIN_SCHEMA_HASH = keccak256( abi.encodePacked(EIP712_DOMAIN_SCHEMA) ); string internal constant EIP712_DOMAIN_NAME = "Matic Network"; string internal constant EIP712_DOMAIN_VERSION = "1"; uint256 internal constant EIP712_DOMAIN_CHAINID = CHAINID; bytes32 public EIP712_DOMAIN_HASH; constructor() public { EIP712_DOMAIN_HASH = keccak256( abi.encode( EIP712_DOMAIN_SCHEMA_HASH, keccak256(bytes(EIP712_DOMAIN_NAME)), keccak256(bytes(EIP712_DOMAIN_VERSION)), EIP712_DOMAIN_CHAINID, address(this) ) ); } function hashEIP712Message(bytes32 hashStruct) internal view returns (bytes32 result) { bytes32 domainHash = EIP712_DOMAIN_HASH; // Assembly for more efficient computing: // keccak256(abi.encode( // EIP191_HEADER, // domainHash, // hashStruct // )); assembly { // Load free memory pointer let memPtr := mload(64) mstore( memPtr, 0x1901000000000000000000000000000000000000000000000000000000000000 ) // EIP191 header mstore(add(memPtr, 2), domainHash) // EIP712 domain hash mstore(add(memPtr, 34), hashStruct) // Hash of struct // Compute hash result := keccak256(memPtr, 66) } return result; } } // File: contracts/child/misc/LibTokenTransferOrder.sol pragma solidity ^0.5.2; contract LibTokenTransferOrder is LibEIP712Domain { string internal constant EIP712_TOKEN_TRANSFER_ORDER_SCHEMA = "TokenTransferOrder(address spender,uint256 tokenIdOrAmount,bytes32 data,uint256 expiration)"; bytes32 public constant EIP712_TOKEN_TRANSFER_ORDER_SCHEMA_HASH = keccak256( abi.encodePacked(EIP712_TOKEN_TRANSFER_ORDER_SCHEMA) ); struct TokenTransferOrder { address spender; uint256 tokenIdOrAmount; bytes32 data; uint256 expiration; } function getTokenTransferOrderHash( address spender, uint256 tokenIdOrAmount, bytes32 data, uint256 expiration ) public view returns (bytes32 orderHash) { orderHash = hashEIP712Message( hashTokenTransferOrder(spender, tokenIdOrAmount, data, expiration) ); } function hashTokenTransferOrder( address spender, uint256 tokenIdOrAmount, bytes32 data, uint256 expiration ) internal pure returns (bytes32 result) { bytes32 schemaHash = EIP712_TOKEN_TRANSFER_ORDER_SCHEMA_HASH; // Assembly for more efficiently computing: // return keccak256(abi.encode( // schemaHash, // spender, // tokenIdOrAmount, // data, // expiration // )); assembly { // Load free memory pointer let memPtr := mload(64) mstore(memPtr, schemaHash) // hash of schema mstore( add(memPtr, 32), and(spender, 0xffffffffffffffffffffffffffffffffffffffff) ) // spender mstore(add(memPtr, 64), tokenIdOrAmount) // tokenIdOrAmount mstore(add(memPtr, 96), data) // hash of data mstore(add(memPtr, 128), expiration) // expiration // Compute hash result := keccak256(memPtr, 160) } return result; } } // File: contracts/child/ChildToken.sol pragma solidity ^0.5.2; contract ChildToken is Ownable, LibTokenTransferOrder { using SafeMath for uint256; // ERC721/ERC20 contract token address on root chain address public token; address public parent; address public parentOwner; mapping(bytes32 => bool) public disabledHashes; modifier isParentOwner() { require(msg.sender == parentOwner); _; } function deposit(address user, uint256 amountOrTokenId) public; function withdraw(uint256 amountOrTokenId) public payable; function setParent(address _parent) public; event LogFeeTransfer( address indexed token, address indexed from, address indexed to, uint256 amount, uint256 input1, uint256 input2, uint256 output1, uint256 output2 ); function ecrecovery(bytes32 hash, bytes memory sig) public pure returns (address result) { bytes32 r; bytes32 s; uint8 v; if (sig.length != 65) { return address(0x0); } assembly { r := mload(add(sig, 32)) s := mload(add(sig, 64)) v := and(mload(add(sig, 65)), 255) } // https://github.com/ethereum/go-ethereum/issues/2053 if (v < 27) { v += 27; } if (v != 27 && v != 28) { return address(0x0); } // get address out of hash and signature result = ecrecover(hash, v, r, s); // ecrecover returns zero on error require(result != address(0x0), "Error in ecrecover"); } } // File: contracts/child/BaseERC20Fix.sol pragma solidity ^0.5.2; contract BaseERC20 is ChildToken { event Deposit( address indexed token, address indexed from, uint256 amount, uint256 input1, uint256 output1 ); event Withdraw( address indexed token, address indexed from, uint256 amount, uint256 input1, uint256 output1 ); event LogTransfer( address indexed token, address indexed from, address indexed to, uint256 amount, uint256 input1, uint256 input2, uint256 output1, uint256 output2 ); constructor() public {} function transferWithSig( bytes calldata sig, uint256 amount, bytes32 data, uint256 expiration, address to ) external returns (address from) { revert("Disabled feature"); } function balanceOf(address account) external view returns (uint256); function _transfer(address sender, address recipient, uint256 amount) internal; /// @param from Address from where tokens are withdrawn. /// @param to Address to where tokens are sent. /// @param value Number of tokens to transfer. /// @return Returns success of function call. function _transferFrom(address from, address to, uint256 value) internal returns (bool) { uint256 input1 = this.balanceOf(from); uint256 input2 = this.balanceOf(to); _transfer(from, to, value); emit LogTransfer( token, from, to, value, input1, input2, this.balanceOf(from), this.balanceOf(to) ); return true; } } // File: contracts/child/MRC20.sol pragma solidity ^0.5.11; /** * @title Matic token contract * @notice This contract is an ECR20 like wrapper over native ether (matic token) transfers on the matic chain * @dev ERC20 methods have been made payable while keeping their method signature same as other ChildERC20s on Matic */ contract MRC20 is BaseERC20 { event Transfer(address indexed from, address indexed to, uint256 value); uint256 public currentSupply = 0; uint8 private constant DECIMALS = 18; bool isInitialized; constructor() public {} function initialize(address _childChain, address _token) public { // Todo: once BorValidator(@0x1000) contract added uncomment me // require(msg.sender == address(0x1000)); require(!isInitialized, "The contract is already initialized"); isInitialized = true; token = _token; _transferOwnership(_childChain); } function setParent(address) public { revert("Disabled feature"); } function deposit(address user, uint256 amount) public onlyOwner { // check for amount and user require( amount > 0 && user != address(0x0), "Insufficient amount or invalid user" ); // input balance uint256 input1 = balanceOf(user); // transfer amount to user address payable _user = address(uint160(user)); _user.transfer(amount); currentSupply = currentSupply.add(amount); // deposit events emit Deposit(token, user, amount, input1, balanceOf(user)); } function withdraw(uint256 amount) public payable { address user = msg.sender; // input balance uint256 input = balanceOf(user); currentSupply = currentSupply.sub(amount); // check for amount require( amount > 0 && msg.value == amount, "Insufficient amount" ); // withdraw event emit Withdraw(token, user, amount, input, balanceOf(user)); } function name() public pure returns (string memory) { return "Matic Token"; } function symbol() public pure returns (string memory) { return "MATIC"; } function decimals() public pure returns (uint8) { return DECIMALS; } function totalSupply() public view returns (uint256) { return 10000000000 * 10**uint256(DECIMALS); } function balanceOf(address account) public view returns (uint256) { return account.balance; } /// @dev Function that is called when a user or another contract wants to transfer funds. /// @param to Address of token receiver. /// @param value Number of tokens to transfer. /// @return Returns success of function call. function transfer(address to, uint256 value) public payable returns (bool) { if (msg.value != value) { return false; } return _transferFrom(msg.sender, to, value); } /** * @dev _transfer is invoked by _transferFrom method that is inherited from BaseERC20. * This enables us to transfer MaticEth between users while keeping the interface same as that of an ERC20 Token. */ function _transfer(address sender, address recipient, uint256 amount) internal { require(recipient != address(this), "can't send to MRC20"); address(uint160(recipient)).transfer(amount); emit Transfer(sender, recipient, amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"setParent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes","name":"sig","type":"bytes"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32","name":"data","type":"bytes32"},{"internalType":"uint256","name":"expiration","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"transferWithSig","outputs":[{"internalType":"address","name":"from","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_childChain","type":"address"},{"internalType":"address","name":"_token","type":"address"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"parent","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"parentOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"currentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"ecrecovery","outputs":[{"internalType":"address","name":"result","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"networkId","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"EIP712_TOKEN_TRANSFER_ORDER_SCHEMA_HASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"disabledHashes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokenIdOrAmount","type":"uint256"},{"internalType":"bytes32","name":"data","type":"bytes32"},{"internalType":"uint256","name":"expiration","type":"uint256"}],"name":"getTokenTransferOrderHash","outputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CHAINID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"EIP712_DOMAIN_HASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"EIP712_DOMAIN_SCHEMA_HASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"input1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"output1","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"input1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"output1","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"input1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"input2","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"output1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"output2","type":"uint256"}],"name":"LogTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"input1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"input2","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"output1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"output2","type":"uint256"}],"name":"LogFeeTransfer","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"}]
Contract Creation Code
60806040526004361061019c5760003560e01c806377d32e94116100ec578063acd06cb31161008a578063e306f77911610064578063e306f77914610a7b578063e614d0d614610aa6578063f2fde38b14610ad1578063fc0c546a14610b225761019c565b8063acd06cb31461097a578063b789543c146109cd578063cc79f97b14610a505761019c565b80639025e64c116100c65780639025e64c146107c957806395d89b4114610859578063a9059cbb146108e9578063abceeba21461094f5761019c565b806377d32e94146106315780638da5cb5b146107435780638f32d59b1461079a5761019c565b806347e7ef24116101595780637019d41a116101335780637019d41a1461053357806370a082311461058a578063715018a6146105ef578063771282f6146106065761019c565b806347e7ef2414610410578063485cc9551461046b57806360f96a8f146104dc5761019c565b806306fdde03146101a15780631499c5921461023157806318160ddd1461028257806319d27d9c146102ad5780632e1a7d4d146103b1578063313ce567146103df575b600080fd5b3480156101ad57600080fd5b506101b6610b79565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101f65780820151818401526020810190506101db565b50505050905090810190601f1680156102235780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561023d57600080fd5b506102806004803603602081101561025457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bb6565b005b34801561028e57600080fd5b50610297610c24565b6040518082815260200191505060405180910390f35b3480156102b957600080fd5b5061036f600480360360a08110156102d057600080fd5b81019080803590602001906401000000008111156102ed57600080fd5b8201836020820111156102ff57600080fd5b8035906020019184600183028401116401000000008311171561032157600080fd5b9091929391929390803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c3a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103dd600480360360208110156103c757600080fd5b8101908080359060200190929190505050610caa565b005b3480156103eb57600080fd5b506103f4610dfc565b604051808260ff1660ff16815260200191505060405180910390f35b34801561041c57600080fd5b506104696004803603604081101561043357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e05565b005b34801561047757600080fd5b506104da6004803603604081101561048e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fc1565b005b3480156104e857600080fd5b506104f1611090565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561053f57600080fd5b506105486110b6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561059657600080fd5b506105d9600480360360208110156105ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110dc565b6040518082815260200191505060405180910390f35b3480156105fb57600080fd5b506106046110fd565b005b34801561061257600080fd5b5061061b6111cd565b6040518082815260200191505060405180910390f35b34801561063d57600080fd5b506107016004803603604081101561065457600080fd5b81019080803590602001909291908035906020019064010000000081111561067b57600080fd5b82018360208201111561068d57600080fd5b803590602001918460018302840111640100000000831117156106af57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506111d3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561074f57600080fd5b50610758611358565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107a657600080fd5b506107af611381565b604051808215151515815260200191505060405180910390f35b3480156107d557600080fd5b506107de6113d8565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561081e578082015181840152602081019050610803565b50505050905090810190601f16801561084b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561086557600080fd5b5061086e611411565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108ae578082015181840152602081019050610893565b50505050905090810190601f1680156108db5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610935600480360360408110156108ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061144e565b604051808215151515815260200191505060405180910390f35b34801561095b57600080fd5b50610964611474565b6040518082815260200191505060405180910390f35b34801561098657600080fd5b506109b36004803603602081101561099d57600080fd5b8101908080359060200190929190505050611501565b604051808215151515815260200191505060405180910390f35b3480156109d957600080fd5b50610a3a600480360360808110156109f057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050611521565b6040518082815260200191505060405180910390f35b348015610a5c57600080fd5b50610a65611541565b6040518082815260200191505060405180910390f35b348015610a8757600080fd5b50610a90611546565b6040518082815260200191505060405180910390f35b348015610ab257600080fd5b50610abb61154c565b6040518082815260200191505060405180910390f35b348015610add57600080fd5b50610b2060048036036020811015610af457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115d9565b005b348015610b2e57600080fd5b50610b376115f6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60606040518060400160405280600b81526020017f4d6174696320546f6b656e000000000000000000000000000000000000000000815250905090565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f44697361626c656420666561747572650000000000000000000000000000000081525060200191505060405180910390fd5b6000601260ff16600a0a6402540be40002905090565b60006040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f44697361626c656420666561747572650000000000000000000000000000000081525060200191505060405180910390fd5b60003390506000610cba826110dc565b9050610cd18360065461161c90919063ffffffff16565b600681905550600083118015610ce657508234145b610d58576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496e73756666696369656e7420616d6f756e740000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f8584610dd4876110dc565b60405180848152602001838152602001828152602001935050505060405180910390a3505050565b60006012905090565b610e0d611381565b610e1657600080fd5b600081118015610e535750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b610ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180611da76023913960400191505060405180910390fd5b6000610eb3836110dc565b905060008390508073ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015610f00573d6000803e3d6000fd5b50610f168360065461163c90919063ffffffff16565b6006819055508373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f68585610f98896110dc565b60405180848152602001838152602001828152602001935050505060405180910390a350505050565b600760009054906101000a900460ff1615611027576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180611d846023913960400191505060405180910390fd5b6001600760006101000a81548160ff02191690831515021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061108c8261165b565b5050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff16319050919050565b611105611381565b61110e57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60065481565b60008060008060418551146111ee5760009350505050611352565b602085015192506040850151915060ff6041860151169050601b8160ff16101561121957601b810190505b601b8160ff16141580156112315750601c8160ff1614155b156112425760009350505050611352565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561129f573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561134e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4572726f7220696e2065637265636f766572000000000000000000000000000081525060200191505060405180910390fd5b5050505b92915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6040518060400160405280600181526020017f890000000000000000000000000000000000000000000000000000000000000081525081565b60606040518060400160405280600581526020017f4d41544943000000000000000000000000000000000000000000000000000000815250905090565b6000813414611460576000905061146e565b61146b338484611753565b90505b92915050565b6040518060800160405280605b8152602001611e1c605b91396040516020018082805190602001908083835b602083106114c357805182526020820191506020810190506020830392506114a0565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012081565b60056020528060005260406000206000915054906101000a900460ff1681565b600061153761153286868686611b10565b611be6565b9050949350505050565b608981565b60015481565b604051806080016040528060528152602001611dca605291396040516020018082805190602001908083835b6020831061159b5780518252602082019150602081019050602083039250611578565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012081565b6115e1611381565b6115ea57600080fd5b6115f38161165b565b50565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008282111561162b57600080fd5b600082840390508091505092915050565b60008082840190508381101561165157600080fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561169557600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000803073ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156117d357600080fd5b505afa1580156117e7573d6000803e3d6000fd5b505050506040513d60208110156117fd57600080fd5b8101908080519060200190929190505050905060003073ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561188f57600080fd5b505afa1580156118a3573d6000803e3d6000fd5b505050506040513d60208110156118b957600080fd5b810190808051906020019092919050505090506118d7868686611c30565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c48786863073ffffffffffffffffffffffffffffffffffffffff166370a082318e6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156119df57600080fd5b505afa1580156119f3573d6000803e3d6000fd5b505050506040513d6020811015611a0957600080fd5b81019080805190602001909291905050503073ffffffffffffffffffffffffffffffffffffffff166370a082318e6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a9757600080fd5b505afa158015611aab573d6000803e3d6000fd5b505050506040513d6020811015611ac157600080fd5b8101908080519060200190929190505050604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a46001925050509392505050565b6000806040518060800160405280605b8152602001611e1c605b91396040516020018082805190602001908083835b60208310611b625780518252602082019150602081019050602083039250611b3f565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120905060405181815273ffffffffffffffffffffffffffffffffffffffff8716602082015285604082015284606082015283608082015260a0812092505081915050949350505050565b60008060015490506040517f190100000000000000000000000000000000000000000000000000000000000081528160028201528360228201526042812092505081915050919050565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cd2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f63616e27742073656e6420746f204d524332300000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611d18573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350505056fe54686520636f6e747261637420697320616c726561647920696e697469616c697a6564496e73756666696369656e7420616d6f756e74206f7220696e76616c69642075736572454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429546f6b656e5472616e736665724f726465722861646472657373207370656e6465722c75696e7432353620746f6b656e49644f72416d6f756e742c6279746573333220646174612c75696e743235362065787069726174696f6e29a265627a7a723158205ff74cd4d898758f6d43b95bc9f10cf904d7079970f86fa1a0390ca0599c0dbb64736f6c634300050b0032