ERC-20
Data
Overview
Max Total Supply
10,800,262,823.918213436822328009 GRT
Holders
166,945 ( 0.017%)
Market
Price
$0.21 @ 0.000063 ETH (+1.70%)
Onchain Market Cap
$2,312,066,264.03
Circulating Supply Market Cap
$2,040,253,574.00
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000001878235434977 GRTValue
$0.00 ( ~0 Eth) [0.0000%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|---|---|---|---|---|
1 | Binance | GRT-USDT | $0.2146 0.0000632 Eth | $7,792,865.00 37,126,422.000 GRT | 17.5162% |
2 | WhiteBIT | GRT-USDT | $0.2148 0.0000632 Eth | $4,982,960.00 23,192,937.463 GRT | 10.9424% |
3 | Coinbase Exchange | GRT-USD | $0.214 0.0000630 Eth | $2,719,887.00 12,709,752.400 GRT | 5.9965% |
4 | Bybit | GRT-USDT | $0.2142 0.0000630 Eth | $1,665,543.00 7,940,763.060 GRT | 3.7465% |
5 | HTX | GRT-USDT | $0.2154 0.0000634 Eth | $1,663,796.00 7,940,231.843 GRT | 3.7462% |
6 | OrangeX | GRT-USDT | $0.2147 0.0000632 Eth | $1,566,573.00 7,476,257.000 GRT | 3.5273% |
7 | Bitci TR | GRT-USDT | $0.2143 0.0000631 Eth | $1,545,010.00 7,380,652.000 GRT | 3.4822% |
8 | Bitget | GRT-USDT | $0.2149 0.0000633 Eth | $1,385,270.00 6,602,695.130 GRT | 3.1152% |
9 | CoinW | GRT-USDT | $0.2139 0.0000630 Eth | $1,281,712.00 5,990,813.900 GRT | 2.8265% |
10 | BTSE | GRT-USDT | $0.2142 0.0000631 Eth | $1,162,088.00 5,425,520.202 GRT | 2.5598% |
11 | Ourbit | GRT-USDT | $0.2137 0.0000630 Eth | $1,134,032.00 5,403,768.070 GRT | 2.5495% |
12 | XT.COM | GRT-USDT | $0.2143 0.0000631 Eth | $1,124,732.00 5,356,823.000 GRT | 2.5273% |
13 | Hotcoin | GRT-USDT | $0.2149 0.0000633 Eth | $1,045,646.00 4,864,662.000 GRT | 2.2951% |
14 | OKX | GRT-USDT | $0.215 0.0000633 Eth | $911,810.00 4,347,212.985 GRT | 2.0510% |
15 | LBank | GRT-USDT | $0.2124 0.0000628 Eth | $896,286.00 4,219,332.170 GRT | 1.9907% |
16 | Trubit | GRT-USDT | $0.2141 0.0000630 Eth | $884,656.00 4,213,147.000 GRT | 1.9878% |
17 | Azbit | GRT-USDT | $0.2148 0.0000635 Eth | $736,370.00 3,511,310.428 GRT | 1.6566% |
18 | KuCoin | GRT-USDT | $0.2146 0.0000632 Eth | $597,104.00 2,781,865.200 GRT | 1.3125% |
19 | Bitunix | GRT-USDT | $0.2141 0.0000631 Eth | $575,488.00 2,686,879.000 GRT | 1.2677% |
20 | DigiFinex | GRT-USDT | $0.2147 0.0000632 Eth | $568,923.00 2,649,380.000 GRT | 1.2500% |
21 | Phemex | GRT-USDT | $0.2121 0.0000627 Eth | $532,439.00 2,510,023.000 GRT | 1.1842% |
22 | Binance | GRT-TRY | $0.2125 0.0000628 Eth | $507,187.00 2,405,374.000 GRT | 1.1349% |
23 | CoinEx | GRT-USDT | $0.2139 0.0000630 Eth | $467,248.00 2,233,876.906 GRT | 1.0539% |
24 | FMFW.io | GRT-USDT | $0.2142 0.0000631 Eth | $420,940.00 1,964,996.080 GRT | 0.9271% |
25 | Gate.io | GRT-USDT | $0.2146 0.0000631 Eth | $413,140.00 1,969,408.140 GRT | 0.9292% |
26 | HitBTC | GRT-USDT | $0.2141 0.0000631 Eth | $411,364.00 1,964,996.080 GRT | 0.9271% |
27 | Bullish | GRT-USDC | $0.2139 0.0000630 Eth | $403,742.00 1,931,268.105 GRT | 0.9112% |
28 | BYDFi | GRT-USDT | $0.2129 0.0000629 Eth | $374,473.00 1,758,714.000 GRT | 0.8298% |
29 | MEXC | GRT-USDT | $0.2142 0.0000631 Eth | $355,399.00 1,659,208.630 GRT | 0.7828% |
30 | FameEX | GRT-USDT | $0.2144 0.0000631 Eth | $333,884.00 1,590,594.341 GRT | 0.7504% |
31 | QMall | GRT-USDT | $0.2145 0.0000631 Eth | $319,977.00 1,524,307.876 GRT | 0.7192% |
32 | Tothemoon | GRT-USDT | $0.2131 0.0000628 Eth | $318,651.00 1,495,611.000 GRT | 0.7056% |
33 | Coinbase Exchange | GRT-EUR | $0.2139 0.0000630 Eth | $299,714.00 1,401,389.840 GRT | 0.6612% |
34 | Bitazza | GRT-USDT | $0.2148 0.0000633 Eth | $269,651.00 1,288,644.000 GRT | 0.6080% |
35 | Kraken | GRT-USD | $0.2148 0.0000632 Eth | $268,317.00 1,248,971.477 GRT | 0.5893% |
36 | Niza Global | GRT-USD | $0.2142 0.0000630 Eth | $262,837.00 1,248,875.984 GRT | 0.5892% |
37 | Coinstore | GRT-USDT | $0.2135 0.0000629 Eth | $231,707.00 1,104,549.970 GRT | 0.5211% |
38 | Icrypex | GRT-USDT | $0.2144 0.0000631 Eth | $216,737.00 1,010,983.945 GRT | 0.4770% |
39 | Binance | GRT-BTC | $0.2141 0.0000630 Eth | $207,535.00 973,196.000 GRT | 0.4592% |
40 | Dex-Trade | GRT-USDT | $0.2146 0.0000632 Eth | $199,783.00 930,745.000 GRT | 0.4391% |
41 | Bitvavo | GRT-EUR | $0.2133 0.0000629 Eth | $197,393.00 925,492.850 GRT | 0.4366% |
42 | KickEX | GRT-USDT | $0.2138 0.0000630 Eth | $195,356.00 913,946.060 GRT | 0.4312% |
43 | Uniswap V3 (Arbitrum One) | 0X9623063377AD1B27544C965CCD7342F7EA7E88C7-0X82AF49447D8A07E3BD95BD0D56F35241523FBAB1 | $0.2143 0.0000631 Eth | $189,958.00 894,960.200 0X9623063377AD1B27544C965CCD7342F7EA7E88C7 | 0.4222% |
44 | Azbit | GRT-BTC | $0.2139 0.0000630 Eth | $165,533.00 785,838.050 GRT | 0.3708% |
45 | Coinbase Exchange | GRT-GBP | $0.2142 0.0000631 Eth | $161,845.00 755,743.540 GRT | 0.3566% |
46 | Toobit | GRT-USDT | $0.214 0.0000630 Eth | $161,108.00 767,778.000 GRT | 0.3622% |
47 | Kraken | GRT-EUR | $0.2142 0.0000630 Eth | $154,170.00 719,772.315 GRT | 0.3396% |
48 | BingX | GRT-USDT | $0.2146 0.0000632 Eth | $151,801.00 723,934.570 GRT | 0.3416% |
49 | Niza Global | GRT-EUR | $0.214 0.0000630 Eth | $150,825.00 719,536.905 GRT | 0.3395% |
50 | Bit2Me | GRT-EUR | $0.2142 0.0000631 Eth | $149,830.00 705,376.868 GRT | 0.3328% |
51 | Bitrue | GRT-USDC | $0.214 0.0000631 Eth | $149,802.00 699,858.000 GRT | 0.3302% |
52 | AscendEX (BitMax) | GRT-USDT | $0.2148 0.0000632 Eth | $147,025.00 684,321.600 GRT | 0.3229% |
53 | PointPay | GRT-USDT | $0.2132 0.0000628 Eth | $128,195.00 610,660.472 GRT | 0.2881% |
54 | Tokenize | GRT-SGD | $0.2145 0.0000631 Eth | $100,482.00 468,473.637 GRT | 0.2210% |
55 | DeGate | 0XC944E90C64B2C07662A292BE6244BDF05CDA44A7-0XA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48 | $0.2142 0.0000631 Eth | $92,766.00 441,848.520 0XC944E90C64B2C07662A292BE6244BDF05CDA44A7 | 0.2085% |
56 | Tapbit | GRT-USDT | $0.2131 0.0000628 Eth | $92,053.00 439,716.000 GRT | 0.2075% |
57 | Crypto.com Exchange | GRT-USD | $0.2144 0.0000631 Eth | $89,433.00 417,111.000 GRT | 0.1968% |
58 | BitMart | GRT-USDT | $0.2141 0.0000630 Eth | $89,023.00 415,707.200 GRT | 0.1961% |
59 | Bitbank | GRT-JPY | $0.2149 0.0000632 Eth | $84,333.00 392,430.776 GRT | 0.1851% |
60 | Coinbase Exchange | GRT-BTC | $0.2139 0.0000630 Eth | $83,683.00 391,214.000 GRT | 0.1846% |
61 | Binance | GRT-EUR | $0.2126 0.0000628 Eth | $79,790.00 380,041.000 GRT | 0.1793% |
62 | BitDelta | GRT-USDT | $0.2139 0.0000630 Eth | $78,765.00 376,299.000 GRT | 0.1775% |
63 | Gemini | GRT-USD | $0.2118 0.0000623 Eth | $77,385.00 365,369.612 GRT | 0.1724% |
64 | Hibt | GRT-USDT | $0.214 0.0000630 Eth | $72,421.00 345,262.646 GRT | 0.1629% |
65 | WhiteBIT | GRT-BTC | $0.2132 0.0000628 Eth | $68,298.00 320,415.000 GRT | 0.1512% |
66 | Crypto.com Exchange | GRT-USDT | $0.2146 0.0000632 Eth | $54,610.00 254,438.000 GRT | 0.1200% |
67 | LATOKEN | GRT-USDT | $0.212 0.0000627 Eth | $52,881.00 249,387.337 GRT | 0.1177% |
68 | LATOKEN | GRT-BTC | $0.214 0.0000630 Eth | $46,255.00 216,118.066 GRT | 0.1020% |
69 | Azbit | GRT-ETH | $0.2134 0.0000629 Eth | $40,797.00 192,758.560 GRT | 0.0909% |
70 | Binance | GRT-ETH | $0.2135 0.0000628 Eth | $40,001.00 188,191.000 GRT | 0.0888% |
71 | LocalTrade | GRT-USDT | $0.2141 0.0000631 Eth | $39,631.00 185,099.755 GRT | 0.0873% |
72 | BloFin | GRT-USDT | $0.2151 0.0000633 Eth | $38,215.00 182,596.000 GRT | 0.0861% |
73 | Binance | GRT-FDUSD | $0.2121 0.0000625 Eth | $37,103.00 177,041.000 GRT | 0.0835% |
74 | BVOX | GRT-USDT | $0.2142 0.0000631 Eth | $36,998.00 176,661.720 GRT | 0.0833% |
75 | LATOKEN | GRT-ETH | $0.2127 0.0000627 Eth | $32,699.00 153,765.264 GRT | 0.0725% |
76 | Kraken | GRT-XBT | $0.2141 0.0000630 Eth | $31,482.00 147,028.272 GRT | 0.0694% |
77 | Niza Global | GRT-BTC | $0.2128 0.0000627 Eth | $30,674.00 146,500.297 GRT | 0.0691% |
78 | Coinone | GRT-KRW | $0.217 0.0000639 Eth | $29,341.00 135,215.045 GRT | 0.0638% |
79 | Bitfinex | GRT-USD | $0.2132 0.0000628 Eth | $24,150.00 113,259.257 GRT | 0.0534% |
80 | Bitkub | GRT-THB | $0.2139 0.0000632 Eth | $21,073.00 98,530.727 GRT | 0.0465% |
81 | Uniswap V3 (Polygon) | 0X5FE2B58C013D7601147DCDD68C143A77499F5531-0X7CEB23FD6BC0ADD59E62AC25578270CFF1B9F619 | $0.2147 0.0000632 Eth | $16,816.42 80,027.020 0X5FE2B58C013D7601147DCDD68C143A77499F5531 | 0.0378% |
82 | Uniswap V3 (Polygon) | 0X5FE2B58C013D7601147DCDD68C143A77499F5531-0X0D500B1D8E8EF31E21C99D1DB9A6444D3ADF1270 | $0.214 0.0000630 Eth | $15,923.51 74,245.091 0X5FE2B58C013D7601147DCDD68C143A77499F5531 | 0.0350% |
83 | Pionex | GRT-USDT | $0.2148 0.0000632 Eth | $15,157.13 72,196.177 GRT | 0.0341% |
84 | EXMO | GRT-USDC | $0.2145 0.0000631 Eth | $14,889.19 69,420.991 GRT | 0.0328% |
85 | TokoCrypto | GRT-USDT | $0.2145 0.0000631 Eth | $13,593.42 63,378.022 GRT | 0.0299% |
86 | Globe | GRT-USDT | $0.2137 0.0000629 Eth | $11,128.60 53,086.803 GRT | 0.0250% |
87 | Bitso | GRT-USD | $0.2125 0.0000626 Eth | $10,530.35 49,552.957 GRT | 0.0234% |
88 | OKX | GRT-USDC | $0.2149 0.0000632 Eth | $8,373.09 39,760.232 GRT | 0.0188% |
89 | Bit2Me | GRT-USDC | $0.214 0.0000630 Eth | $8,185.46 38,867.674 GRT | 0.0183% |
90 | Biconomy.com | GRT-USDT | $0.2147 0.0000632 Eth | $6,687.04 31,856.500 GRT | 0.0150% |
91 | Uniswap V3 (Arbitrum One) | 0X60BF4E7CF16FF34513514B968483B54BEFF42A81-0X9623063377AD1B27544C965CCD7342F7EA7E88C7 | $0.2143 0.0000631 Eth | $5,290.55 237.245 0X60BF4E7CF16FF34513514B968483B54BEFF42A81 | 0.0001% |
92 | Kraken | GRT-GBP | $0.2141 0.0000630 Eth | $3,540.01 16,535.075 GRT | 0.0078% |
93 | Niza Global | GRT-GBP | $0.2141 0.0000630 Eth | $3,445.48 16,535.075 GRT | 0.0078% |
94 | Bitfinex | GRT-USDT | $0.2154 0.0000634 Eth | $3,077.05 14,287.764 GRT | 0.0067% |
95 | WOO X | GRT-USDT | $0.2124 0.0000628 Eth | $1,936.56 9,118.750 GRT | 0.0043% |
96 | WEEX | GRT-USDT | $0.2134 0.0000629 Eth | $1,581.09 7,538.000 GRT | 0.0036% |
97 | CEX.IO | GRT-USDT | $0.2124 0.0000628 Eth | $624.55 2,924.808 GRT | 0.0014% |
98 | Uniswap V3 (Polygon) | 0X5FE2B58C013D7601147DCDD68C143A77499F5531-0XB33EAAD8D922B1083446DC23F610C2567FB5180F | $0.2148 0.0000633 Eth | $122.49 561.494 0X5FE2B58C013D7601147DCDD68C143A77499F5531 | 0.0003% |
99 | CEX.IO | GRT-USD | $0.2141 0.0000631 Eth | $44.53 208.352 GRT | 0.0001% |
100 | Coinmetro | GRT-USDT | $0.2143 0.0000631 Eth | $0.00 0.000 GRT | 0.0000% |
Contract Name:
GraphToken
Compiler Version
v0.7.4+commit.3f05b770
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-12-14 */ // Sources flattened with hardhat v2.0.2 https://hardhat.org // File @openzeppelin/contracts/GSN/[email protected] // SPDX-License-Identifier: MIT pragma solidity ^0.7.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 GSN 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 payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File @openzeppelin/contracts/token/ERC20/[email protected] pragma solidity ^0.7.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File @openzeppelin/contracts/math/[email protected] pragma solidity ^0.7.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot 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-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File @openzeppelin/contracts/token/ERC20/[email protected] pragma solidity ^0.7.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20 { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } } // File @openzeppelin/contracts/token/ERC20/[email protected] pragma solidity ^0.7.0; /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { using SafeMath for uint256; /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { uint256 decreasedAllowance = allowance(account, _msgSender()).sub(amount, "ERC20: burn amount exceeds allowance"); _approve(account, _msgSender(), decreasedAllowance); _burn(account, amount); } } // File @openzeppelin/contracts/cryptography/[email protected] pragma solidity ^0.7.0; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { // Check the signature length if (signature.length != 65) { revert("ECDSA: invalid signature length"); } // Divide the signature in r, s and v variables bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. // solhint-disable-next-line no-inline-assembly assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. require(uint256(s) <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0, "ECDSA: invalid signature 's' value"); require(v == 27 || v == 28, "ECDSA: invalid signature 'v' value"); // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); require(signer != address(0), "ECDSA: invalid signature"); return signer; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * replicates the behavior of the * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`] * JSON-RPC method. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } } // File contracts/governance/Governed.sol pragma solidity ^0.7.3; /** * @title Graph Governance contract * @dev All contracts that will be owned by a Governor entity should extend this contract. */ contract Governed { // -- State -- address public governor; address public pendingGovernor; // -- Events -- event NewPendingOwnership(address indexed from, address indexed to); event NewOwnership(address indexed from, address indexed to); /** * @dev Check if the caller is the governor. */ modifier onlyGovernor { require(msg.sender == governor, "Only Governor can call"); _; } /** * @dev Initialize the governor to the contract caller. */ function _initialize(address _initGovernor) internal { governor = _initGovernor; } /** * @dev Admin function to begin change of governor. The `_newGovernor` must call * `acceptOwnership` to finalize the transfer. * @param _newGovernor Address of new `governor` */ function transferOwnership(address _newGovernor) external onlyGovernor { require(_newGovernor != address(0), "Governor must be set"); address oldPendingGovernor = pendingGovernor; pendingGovernor = _newGovernor; emit NewPendingOwnership(oldPendingGovernor, pendingGovernor); } /** * @dev Admin function for pending governor to accept role and update governor. * This function must called by the pending governor. */ function acceptOwnership() external { require( pendingGovernor != address(0) && msg.sender == pendingGovernor, "Caller must be pending governor" ); address oldGovernor = governor; address oldPendingGovernor = pendingGovernor; governor = pendingGovernor; pendingGovernor = address(0); emit NewOwnership(oldGovernor, governor); emit NewPendingOwnership(oldPendingGovernor, pendingGovernor); } } // File contracts/token/GraphToken.sol pragma solidity ^0.7.3; /** * @title GraphToken contract * @dev This is the implementation of the ERC20 Graph Token. * The implementation exposes a Permit() function to allow for a spender to send a signed message * and approve funds to a spender following EIP2612 to make integration with other contracts easier. * * The token is initially owned by the deployer address that can mint tokens to create the initial * distribution. For convenience, an initial supply can be passed in the constructor that will be * assigned to the deployer. * * The governor can add the RewardsManager contract to mint indexing rewards. * */ contract GraphToken is Governed, ERC20, ERC20Burnable { using SafeMath for uint256; // -- EIP712 -- // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md#definition-of-domainseparator bytes32 private constant DOMAIN_TYPE_HASH = keccak256( "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract,bytes32 salt)" ); bytes32 private constant DOMAIN_NAME_HASH = keccak256("Graph Token"); bytes32 private constant DOMAIN_VERSION_HASH = keccak256("0"); bytes32 private constant DOMAIN_SALT = 0x51f3d585afe6dfeb2af01bba0889a36c1db03beec88c6a4d0c53817069026afa; // Randomly generated salt bytes32 private constant PERMIT_TYPEHASH = keccak256( "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" ); // -- State -- bytes32 private DOMAIN_SEPARATOR; mapping(address => bool) private _minters; mapping(address => uint256) public nonces; // -- Events -- event MinterAdded(address indexed account); event MinterRemoved(address indexed account); modifier onlyMinter() { require(isMinter(msg.sender), "Only minter can call"); _; } /** * @dev Graph Token Contract Constructor. * @param _initialSupply Initial supply of GRT */ constructor(uint256 _initialSupply) ERC20("Graph Token", "GRT") { Governed._initialize(msg.sender); // The Governor has the initial supply of tokens _mint(msg.sender, _initialSupply); // The Governor is the default minter _addMinter(msg.sender); // EIP-712 domain separator DOMAIN_SEPARATOR = keccak256( abi.encode( DOMAIN_TYPE_HASH, DOMAIN_NAME_HASH, DOMAIN_VERSION_HASH, _getChainID(), address(this), DOMAIN_SALT ) ); } /** * @dev Approve token allowance by validating a message signed by the holder. * @param _owner Address of the token holder * @param _spender Address of the approved spender * @param _value Amount of tokens to approve the spender * @param _deadline Expiration time of the signed permit * @param _v Signature version * @param _r Signature r value * @param _s Signature s value */ function permit( address _owner, address _spender, uint256 _value, uint256 _deadline, uint8 _v, bytes32 _r, bytes32 _s ) external { bytes32 digest = keccak256( abi.encodePacked( "\x19\x01", DOMAIN_SEPARATOR, keccak256( abi.encode( PERMIT_TYPEHASH, _owner, _spender, _value, nonces[_owner], _deadline ) ) ) ); nonces[_owner] = nonces[_owner].add(1); address recoveredAddress = ECDSA.recover(digest, abi.encodePacked(_r, _s, _v)); require(_owner == recoveredAddress, "GRT: invalid permit"); require(_deadline == 0 || block.timestamp <= _deadline, "GRT: expired permit"); _approve(_owner, _spender, _value); } /** * @dev Add a new minter. * @param _account Address of the minter */ function addMinter(address _account) external onlyGovernor { _addMinter(_account); } /** * @dev Remove a minter. * @param _account Address of the minter */ function removeMinter(address _account) external onlyGovernor { _removeMinter(_account); } /** * @dev Renounce to be a minter. */ function renounceMinter() external { _removeMinter(msg.sender); } /** * @dev Mint new tokens. * @param _to Address to send the newly minted tokens * @param _amount Amount of tokens to mint */ function mint(address _to, uint256 _amount) external onlyMinter { _mint(_to, _amount); } /** * @dev Return if the `_account` is a minter or not. * @param _account Address to check * @return True if the `_account` is minter */ function isMinter(address _account) public view returns (bool) { return _minters[_account]; } /** * @dev Add a new minter. * @param _account Address of the minter */ function _addMinter(address _account) private { _minters[_account] = true; emit MinterAdded(_account); } /** * @dev Remove a minter. * @param _account Address of the minter */ function _removeMinter(address _account) private { _minters[_account] = false; emit MinterRemoved(_account); } /** * @dev Get the running network chain ID. * @return The chain ID */ function _getChainID() private pure returns (uint256) { uint256 id; assembly { id := chainid() } return id; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"_initialSupply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"account","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"MinterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"NewOwnership","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"NewPendingOwnership","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":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"addMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","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":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","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":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"governor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingGovernor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"removeMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceMinter","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newGovernor","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162001c2538038062001c25833981810160405260208110156200003757600080fd5b5051604080518082018252600b81526a23b930b834102a37b5b2b760a91b60208281019182528351808501909452600384526211d49560ea1b9084015281519192916200008791600591620003a7565b5080516200009d906006906020840190620003a7565b505060078054601260ff1990911617905550620000c633620001bb602090811b62000dcd17901c565b620000d23382620001dd565b620000dd33620002f0565b7fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac564727fefcec85968da792893fa503eb21730083fc6c50ed5461e56163b28335b2a5f967f044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d6200014a6200033c565b6040805160208082019690965280820194909452606084019290925260808301523060a08301527f51f3d585afe6dfeb2af01bba0889a36c1db03beec88c6a4d0c53817069026afa60c0808401919091528151808403909101815260e0909201905280519101206008555062000453565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03821662000239576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b620002476000838362000340565b62000263816004546200034560201b62000def1790919060201c565b6004556001600160a01b0382166000908152600260209081526040909120546200029891839062000def62000345821b17901c565b6001600160a01b03831660008181526002602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038116600081815260096020526040808220805460ff19166001179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b4690565b505050565b600082820183811015620003a0576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620003df57600085556200042a565b82601f10620003fa57805160ff19168380011785556200042a565b828001600101855582156200042a579182015b828111156200042a5782518255916020019190600101906200040d565b50620004389291506200043c565b5090565b5b808211156200043857600081556001016200043d565b6117c280620004636000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c806379cc6790116100c3578063a9059cbb1161007c578063a9059cbb1461042b578063aa271e1a14610457578063d505accf1461047d578063dd62ed3e146104ce578063e3056a34146104fc578063f2fde38b1461050457610158565b806379cc6790146103775780637ecebe00146103a357806395d89b41146103c9578063983b2d56146103d157806398650275146103f7578063a457c2d7146103ff57610158565b8063313ce56711610115578063313ce567146102b657806339509351146102d457806340c10f191461030057806342966c681461032c57806370a082311461034957806379ba50971461036f57610158565b806306fdde031461015d578063095ea7b3146101da5780630c340a241461021a57806318160ddd1461023e57806323b872dd146102585780633092afd51461028e575b600080fd5b61016561052a565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561019f578181015183820152602001610187565b50505050905090810190601f1680156101cc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610206600480360360408110156101f057600080fd5b506001600160a01b0381351690602001356105c0565b604080519115158252519081900360200190f35b6102226105dd565b604080516001600160a01b039092168252519081900360200190f35b6102466105ec565b60408051918252519081900360200190f35b6102066004803603606081101561026e57600080fd5b506001600160a01b038135811691602081013590911690604001356105f2565b6102b4600480360360208110156102a457600080fd5b50356001600160a01b0316610679565b005b6102be6106dd565b6040805160ff9092168252519081900360200190f35b610206600480360360408110156102ea57600080fd5b506001600160a01b0381351690602001356106e6565b6102b46004803603604081101561031657600080fd5b506001600160a01b038135169060200135610734565b6102b46004803603602081101561034257600080fd5b5035610793565b6102466004803603602081101561035f57600080fd5b50356001600160a01b03166107a4565b6102b46107bf565b6102b46004803603604081101561038d57600080fd5b506001600160a01b0381351690602001356108ce565b610246600480360360208110156103b957600080fd5b50356001600160a01b0316610928565b61016561093a565b6102b4600480360360208110156103e757600080fd5b50356001600160a01b031661099b565b6102b46109fc565b6102066004803603604081101561041557600080fd5b506001600160a01b038135169060200135610a07565b6102066004803603604081101561044157600080fd5b506001600160a01b038135169060200135610a6f565b6102066004803603602081101561046d57600080fd5b50356001600160a01b0316610a83565b6102b4600480360360e081101561049357600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610aa1565b610246600480360360408110156104e457600080fd5b506001600160a01b0381358116916020013516610c95565b610222610cc0565b6102b46004803603602081101561051a57600080fd5b50356001600160a01b0316610ccf565b60058054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105b65780601f1061058b576101008083540402835291602001916105b6565b820191906000526020600020905b81548152906001019060200180831161059957829003601f168201915b5050505050905090565b60006105d46105cd610e50565b8484610e54565b50600192915050565b6000546001600160a01b031681565b60045490565b60006105ff848484610f40565b61066f8461060b610e50565b61066a856040518060600160405280602881526020016116b2602891396001600160a01b038a16600090815260036020526040812090610649610e50565b6001600160a01b03168152602081019190915260400160002054919061109d565b610e54565b5060019392505050565b6000546001600160a01b031633146106d1576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6106da81611134565b50565b60075460ff1690565b60006105d46106f3610e50565b8461066a8560036000610704610e50565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490610def565b61073d33610a83565b610785576040805162461bcd60e51b815260206004820152601460248201527313db9b1e481b5a5b9d195c8818d85b8818d85b1b60621b604482015290519081900360640190fd5b61078f828261117d565b5050565b6106da61079e610e50565b8261126f565b6001600160a01b031660009081526002602052604090205490565b6001546001600160a01b0316158015906107e357506001546001600160a01b031633145b610834576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b60008054600180546001600160a01b038082166001600160a01b03198086168217808855931690935560405193811694929391169184917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f9190a36001546040516001600160a01b03918216918316907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000610905826040518060600160405280602481526020016116da602491396108fe866108f9610e50565b610c95565b919061109d565b905061091983610913610e50565b83610e54565b610923838361126f565b505050565b600a6020526000908152604090205481565b60068054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105b65780601f1061058b576101008083540402835291602001916105b6565b6000546001600160a01b031633146109f3576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6106da8161136b565b610a0533611134565b565b60006105d4610a14610e50565b8461066a856040518060600160405280602581526020016117686025913960036000610a3e610e50565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061109d565b60006105d4610a7c610e50565b8484610f40565b6001600160a01b031660009081526009602052604090205460ff1690565b6008546001600160a01b038089166000818152600a602081815260408084205481517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981850152808301879052968e166060880152608087018d905260a0870181905260c08088018d90528251808903909101815260e08801835280519084012061190160f01b6101008901526101028801989098526101228088019890985281518088039098018852610142909601905285519581019590952092909152909252610b6e906001610def565b6001600160a01b0389166000908152600a602090815260408083209390935582519081018690528083018590526001600160f81b031960f888901b16606082015282516041818303018152606190910190925290610bcd9083906113b7565b9050806001600160a01b0316896001600160a01b031614610c2b576040805162461bcd60e51b815260206004820152601360248201527211d4950e881a5b9d985b1a59081c195c9b5a5d606a1b604482015290519081900360640190fd5b851580610c385750854211155b610c7f576040805162461bcd60e51b815260206004820152601360248201527211d4950e88195e1c1a5c9959081c195c9b5a5d606a1b604482015290519081900360640190fd5b610c8a898989610e54565b505050505050505050565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6001546001600160a01b031681565b6000546001600160a01b03163314610d27576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610d79576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600082820183811015610e49576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b6001600160a01b038316610e995760405162461bcd60e51b81526004018080602001828103825260248152602001806117446024913960400191505060405180910390fd5b6001600160a01b038216610ede5760405162461bcd60e51b81526004018080602001828103825260228152602001806116266022913960400191505060405180910390fd5b6001600160a01b03808416600081815260036020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610f855760405162461bcd60e51b815260040180806020018281038252602581526020018061171f6025913960400191505060405180910390fd5b6001600160a01b038216610fca5760405162461bcd60e51b81526004018080602001828103825260238152602001806115e16023913960400191505060405180910390fd5b610fd5838383610923565b61101281604051806060016040528060268152602001611648602691396001600160a01b038616600090815260026020526040902054919061109d565b6001600160a01b0380851660009081526002602052604080822093909355908416815220546110419082610def565b6001600160a01b0380841660008181526002602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561112c5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156110f15781810151838201526020016110d9565b50505050905090810190601f16801561111e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038116600081815260096020526040808220805460ff19169055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a250565b6001600160a01b0382166111d8576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6111e460008383610923565b6004546111f19082610def565b6004556001600160a01b0382166000908152600260205260409020546112179082610def565b6001600160a01b03831660008181526002602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b0382166112b45760405162461bcd60e51b81526004018080602001828103825260218152602001806116fe6021913960400191505060405180910390fd5b6112c082600083610923565b6112fd81604051806060016040528060228152602001611604602291396001600160a01b038516600090815260026020526040902054919061109d565b6001600160a01b038316600090815260026020526040902055600454611323908261159e565b6004556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b038116600081815260096020526040808220805460ff19166001179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b6000815160411461140f576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156114805760405162461bcd60e51b815260040180806020018281038252602281526020018061166e6022913960400191505060405180910390fd5b8060ff16601b148061149557508060ff16601c145b6114d05760405162461bcd60e51b81526004018080602001828103825260228152602001806116906022913960400191505060405180910390fd5b600060018783868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561152c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611594576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b9695505050505050565b6000610e4983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061109d56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c756545434453413a20696e76616c6964207369676e6174757265202776272076616c756545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122028978c229b51c3a9489101e8096301e85866fa63b6ccbd95d247e376d1f5407664736f6c634300070400330000000000000000000000000000000000000000204fce5e3e25026110000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101585760003560e01c806379cc6790116100c3578063a9059cbb1161007c578063a9059cbb1461042b578063aa271e1a14610457578063d505accf1461047d578063dd62ed3e146104ce578063e3056a34146104fc578063f2fde38b1461050457610158565b806379cc6790146103775780637ecebe00146103a357806395d89b41146103c9578063983b2d56146103d157806398650275146103f7578063a457c2d7146103ff57610158565b8063313ce56711610115578063313ce567146102b657806339509351146102d457806340c10f191461030057806342966c681461032c57806370a082311461034957806379ba50971461036f57610158565b806306fdde031461015d578063095ea7b3146101da5780630c340a241461021a57806318160ddd1461023e57806323b872dd146102585780633092afd51461028e575b600080fd5b61016561052a565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561019f578181015183820152602001610187565b50505050905090810190601f1680156101cc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610206600480360360408110156101f057600080fd5b506001600160a01b0381351690602001356105c0565b604080519115158252519081900360200190f35b6102226105dd565b604080516001600160a01b039092168252519081900360200190f35b6102466105ec565b60408051918252519081900360200190f35b6102066004803603606081101561026e57600080fd5b506001600160a01b038135811691602081013590911690604001356105f2565b6102b4600480360360208110156102a457600080fd5b50356001600160a01b0316610679565b005b6102be6106dd565b6040805160ff9092168252519081900360200190f35b610206600480360360408110156102ea57600080fd5b506001600160a01b0381351690602001356106e6565b6102b46004803603604081101561031657600080fd5b506001600160a01b038135169060200135610734565b6102b46004803603602081101561034257600080fd5b5035610793565b6102466004803603602081101561035f57600080fd5b50356001600160a01b03166107a4565b6102b46107bf565b6102b46004803603604081101561038d57600080fd5b506001600160a01b0381351690602001356108ce565b610246600480360360208110156103b957600080fd5b50356001600160a01b0316610928565b61016561093a565b6102b4600480360360208110156103e757600080fd5b50356001600160a01b031661099b565b6102b46109fc565b6102066004803603604081101561041557600080fd5b506001600160a01b038135169060200135610a07565b6102066004803603604081101561044157600080fd5b506001600160a01b038135169060200135610a6f565b6102066004803603602081101561046d57600080fd5b50356001600160a01b0316610a83565b6102b4600480360360e081101561049357600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610aa1565b610246600480360360408110156104e457600080fd5b506001600160a01b0381358116916020013516610c95565b610222610cc0565b6102b46004803603602081101561051a57600080fd5b50356001600160a01b0316610ccf565b60058054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105b65780601f1061058b576101008083540402835291602001916105b6565b820191906000526020600020905b81548152906001019060200180831161059957829003601f168201915b5050505050905090565b60006105d46105cd610e50565b8484610e54565b50600192915050565b6000546001600160a01b031681565b60045490565b60006105ff848484610f40565b61066f8461060b610e50565b61066a856040518060600160405280602881526020016116b2602891396001600160a01b038a16600090815260036020526040812090610649610e50565b6001600160a01b03168152602081019190915260400160002054919061109d565b610e54565b5060019392505050565b6000546001600160a01b031633146106d1576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6106da81611134565b50565b60075460ff1690565b60006105d46106f3610e50565b8461066a8560036000610704610e50565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490610def565b61073d33610a83565b610785576040805162461bcd60e51b815260206004820152601460248201527313db9b1e481b5a5b9d195c8818d85b8818d85b1b60621b604482015290519081900360640190fd5b61078f828261117d565b5050565b6106da61079e610e50565b8261126f565b6001600160a01b031660009081526002602052604090205490565b6001546001600160a01b0316158015906107e357506001546001600160a01b031633145b610834576040805162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206d7573742062652070656e64696e6720676f7665726e6f7200604482015290519081900360640190fd5b60008054600180546001600160a01b038082166001600160a01b03198086168217808855931690935560405193811694929391169184917f0ac6deed30eef60090c749850e10f2fa469e3e25fec1d1bef2853003f6e6f18f9190a36001546040516001600160a01b03918216918316907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b6000610905826040518060600160405280602481526020016116da602491396108fe866108f9610e50565b610c95565b919061109d565b905061091983610913610e50565b83610e54565b610923838361126f565b505050565b600a6020526000908152604090205481565b60068054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105b65780601f1061058b576101008083540402835291602001916105b6565b6000546001600160a01b031633146109f3576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6106da8161136b565b610a0533611134565b565b60006105d4610a14610e50565b8461066a856040518060600160405280602581526020016117686025913960036000610a3e610e50565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061109d565b60006105d4610a7c610e50565b8484610f40565b6001600160a01b031660009081526009602052604090205460ff1690565b6008546001600160a01b038089166000818152600a602081815260408084205481517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981850152808301879052968e166060880152608087018d905260a0870181905260c08088018d90528251808903909101815260e08801835280519084012061190160f01b6101008901526101028801989098526101228088019890985281518088039098018852610142909601905285519581019590952092909152909252610b6e906001610def565b6001600160a01b0389166000908152600a602090815260408083209390935582519081018690528083018590526001600160f81b031960f888901b16606082015282516041818303018152606190910190925290610bcd9083906113b7565b9050806001600160a01b0316896001600160a01b031614610c2b576040805162461bcd60e51b815260206004820152601360248201527211d4950e881a5b9d985b1a59081c195c9b5a5d606a1b604482015290519081900360640190fd5b851580610c385750854211155b610c7f576040805162461bcd60e51b815260206004820152601360248201527211d4950e88195e1c1a5c9959081c195c9b5a5d606a1b604482015290519081900360640190fd5b610c8a898989610e54565b505050505050505050565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6001546001600160a01b031681565b6000546001600160a01b03163314610d27576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4811dbdd995c9b9bdc8818d85b8818d85b1b60521b604482015290519081900360640190fd5b6001600160a01b038116610d79576040805162461bcd60e51b815260206004820152601460248201527311dbdd995c9b9bdc881b5d5cdd081899481cd95d60621b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f76563ad561b7036ae716b9b25cb521b21463240f104c97e12f25877f2235f33d90600090a35050565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600082820183811015610e49576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b6001600160a01b038316610e995760405162461bcd60e51b81526004018080602001828103825260248152602001806117446024913960400191505060405180910390fd5b6001600160a01b038216610ede5760405162461bcd60e51b81526004018080602001828103825260228152602001806116266022913960400191505060405180910390fd5b6001600160a01b03808416600081815260036020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610f855760405162461bcd60e51b815260040180806020018281038252602581526020018061171f6025913960400191505060405180910390fd5b6001600160a01b038216610fca5760405162461bcd60e51b81526004018080602001828103825260238152602001806115e16023913960400191505060405180910390fd5b610fd5838383610923565b61101281604051806060016040528060268152602001611648602691396001600160a01b038616600090815260026020526040902054919061109d565b6001600160a01b0380851660009081526002602052604080822093909355908416815220546110419082610def565b6001600160a01b0380841660008181526002602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561112c5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156110f15781810151838201526020016110d9565b50505050905090810190601f16801561111e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038116600081815260096020526040808220805460ff19169055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a250565b6001600160a01b0382166111d8576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6111e460008383610923565b6004546111f19082610def565b6004556001600160a01b0382166000908152600260205260409020546112179082610def565b6001600160a01b03831660008181526002602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b0382166112b45760405162461bcd60e51b81526004018080602001828103825260218152602001806116fe6021913960400191505060405180910390fd5b6112c082600083610923565b6112fd81604051806060016040528060228152602001611604602291396001600160a01b038516600090815260026020526040902054919061109d565b6001600160a01b038316600090815260026020526040902055600454611323908261159e565b6004556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b038116600081815260096020526040808220805460ff19166001179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b6000815160411461140f576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156114805760405162461bcd60e51b815260040180806020018281038252602281526020018061166e6022913960400191505060405180910390fd5b8060ff16601b148061149557508060ff16601c145b6114d05760405162461bcd60e51b81526004018080602001828103825260228152602001806116906022913960400191505060405180910390fd5b600060018783868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561152c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611594576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b9695505050505050565b6000610e4983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061109d56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c756545434453413a20696e76616c6964207369676e6174757265202776272076616c756545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122028978c229b51c3a9489101e8096301e85866fa63b6ccbd95d247e376d1f5407664736f6c63430007040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000204fce5e3e25026110000000
-----Decoded View---------------
Arg [0] : _initialSupply (uint256): 10000000000000000000000000000
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000204fce5e3e25026110000000
Deployed Bytecode Sourcemap
28034:5302:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11468:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13574:169;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13574:169:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;25522:23;;;:::i;:::-;;;;-1:-1:-1;;;;;25522:23:0;;;;;;;;;;;;;;12543:100;;;:::i;:::-;;;;;;;;;;;;;;;;14225:321;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14225:321:0;;;;;;;;;;;;;;;;;:::i;31810:104::-;;;;;;;;;;;;;;;;-1:-1:-1;31810:104:0;-1:-1:-1;;;;;31810:104:0;;:::i;:::-;;12395:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14955:218;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14955:218:0;;;;;;;;:::i;32220:102::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32220:102:0;;;;;;;;:::i;20819:91::-;;;;;;;;;;;;;;;;-1:-1:-1;20819:91:0;;:::i;12706:119::-;;;;;;;;;;;;;;;;-1:-1:-1;12706:119:0;-1:-1:-1;;;;;12706:119:0;;:::i;26827:499::-;;;:::i;21229:295::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21229:295:0;;;;;;;;:::i;28990:41::-;;;;;;;;;;;;;;;;-1:-1:-1;28990:41:0;-1:-1:-1;;;;;28990:41:0;;:::i;11670:87::-;;;:::i;31610:98::-;;;;;;;;;;;;;;;;-1:-1:-1;31610:98:0;-1:-1:-1;;;;;31610:98:0;;:::i;31978:79::-;;;:::i;15676:269::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15676:269:0;;;;;;;;:::i;13038:175::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13038:175:0;;;;;;;;:::i;32496:107::-;;;;;;;;;;;;;;;;-1:-1:-1;32496:107:0;-1:-1:-1;;;;;32496:107:0;;:::i;30475:1032::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30475:1032:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13276:151::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13276:151:0;;;;;;;;;;:::i;25552:30::-;;;:::i;26336:321::-;;;;;;;;;;;;;;;;-1:-1:-1;26336:321:0;-1:-1:-1;;;;;26336:321:0;;:::i;11468:83::-;11538:5;11531:12;;;;;;;;-1:-1:-1;;11531:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11505:13;;11531:12;;11538:5;;11531:12;;11538:5;11531:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11468:83;:::o;13574:169::-;13657:4;13674:39;13683:12;:10;:12::i;:::-;13697:7;13706:6;13674:8;:39::i;:::-;-1:-1:-1;13731:4:0;13574:169;;;;:::o;25522:23::-;;;-1:-1:-1;;;;;25522:23:0;;:::o;12543:100::-;12623:12;;12543:100;:::o;14225:321::-;14331:4;14348:36;14358:6;14366:9;14377:6;14348:9;:36::i;:::-;14395:121;14404:6;14412:12;:10;:12::i;:::-;14426:89;14464:6;14426:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14426:19:0;;;;;;:11;:19;;;;;;14446:12;:10;:12::i;:::-;-1:-1:-1;;;;;14426:33:0;;;;;;;;;;;;-1:-1:-1;14426:33:0;;;:89;:37;:89::i;:::-;14395:8;:121::i;:::-;-1:-1:-1;14534:4:0;14225:321;;;;;:::o;31810:104::-;25880:8;;-1:-1:-1;;;;;25880:8:0;25866:10;:22;25858:57;;;;;-1:-1:-1;;;25858:57:0;;;;;;;;;;;;-1:-1:-1;;;25858:57:0;;;;;;;;;;;;;;;31883:23:::1;31897:8;31883:13;:23::i;:::-;31810:104:::0;:::o;12395:83::-;12461:9;;;;12395:83;:::o;14955:218::-;15043:4;15060:83;15069:12;:10;:12::i;:::-;15083:7;15092:50;15131:10;15092:11;:25;15104:12;:10;:12::i;:::-;-1:-1:-1;;;;;15092:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;15092:25:0;;;:34;;;;;;;;;;;:38;:50::i;32220:102::-;29206:20;29215:10;29206:8;:20::i;:::-;29198:53;;;;;-1:-1:-1;;;29198:53:0;;;;;;;;;;;;-1:-1:-1;;;29198:53:0;;;;;;;;;;;;;;;32295:19:::1;32301:3;32306:7;32295:5;:19::i;:::-;32220:102:::0;;:::o;20819:91::-;20875:27;20881:12;:10;:12::i;:::-;20895:6;20875:5;:27::i;12706:119::-;-1:-1:-1;;;;;12799:18:0;12772:7;12799:18;;;:9;:18;;;;;;;12706:119::o;26827:499::-;26896:15;;-1:-1:-1;;;;;26896:15:0;:29;;;;:62;;-1:-1:-1;26943:15:0;;-1:-1:-1;;;;;26943:15:0;26929:10;:29;26896:62;26874:143;;;;;-1:-1:-1;;;26874:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;27030:19;27052:8;;;27100:15;;-1:-1:-1;;;;;27100:15:0;;;-1:-1:-1;;;;;;27128:26:0;;;;;;;;27165:28;;;;;27211:35;;27052:8;;;;27100:15;;27237:8;;;27052;;27211:35;;27030:19;27211:35;27302:15;;27262:56;;-1:-1:-1;;;;;27302:15:0;;;;27262:56;;;;;27302:15;;27262:56;26827:499;;:::o;21229:295::-;21306:26;21335:84;21372:6;21335:84;;;;;;;;;;;;;;;;;:32;21345:7;21354:12;:10;:12::i;:::-;21335:9;:32::i;:::-;:36;:84;:36;:84::i;:::-;21306:113;;21432:51;21441:7;21450:12;:10;:12::i;:::-;21464:18;21432:8;:51::i;:::-;21494:22;21500:7;21509:6;21494:5;:22::i;:::-;21229:295;;;:::o;28990:41::-;;;;;;;;;;;;;:::o;11670:87::-;11742:7;11735:14;;;;;;;;-1:-1:-1;;11735:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11709:13;;11735:14;;11742:7;;11735:14;;11742:7;11735:14;;;;;;;;;;;;;;;;;;;;;;;;31610:98;25880:8;;-1:-1:-1;;;;;25880:8:0;25866:10;:22;25858:57;;;;;-1:-1:-1;;;25858:57:0;;;;;;;;;;;;-1:-1:-1;;;25858:57:0;;;;;;;;;;;;;;;31680:20:::1;31691:8;31680:10;:20::i;31978:79::-:0;32024:25;32038:10;32024:13;:25::i;:::-;31978:79::o;15676:269::-;15769:4;15786:129;15795:12;:10;:12::i;:::-;15809:7;15818:96;15857:15;15818:96;;;;;;;;;;;;;;;;;:11;:25;15830:12;:10;:12::i;:::-;-1:-1:-1;;;;;15818:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;15818:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;13038:175::-;13124:4;13141:42;13151:12;:10;:12::i;:::-;13165:9;13176:6;13141:9;:42::i;32496:107::-;-1:-1:-1;;;;;32577:18:0;32553:4;32577:18;;;:8;:18;;;;;;;;;32496:107::o;30475:1032::-;30789:16;;-1:-1:-1;;;;;31036:14:0;;;30684;31036;;;:6;:14;;;;;;;;;30856:253;;28761:111;30856:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30824:304;;;;;;-1:-1:-1;;;30725:418:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30701:453;;;;;;;;;31182:14;;;;;;;:21;;31201:1;31182:18;:21::i;:::-;-1:-1:-1;;;;;31165:14:0;;;;;;:6;:14;;;;;;;;:38;;;;31265:28;;;;;;;;;;;;;;-1:-1:-1;;;;;;31265:28:0;;;;;;;;;;;;;;;;;;;;;;;;;31165:14;31243:51;;31257:6;;31243:13;:51::i;:::-;31216:78;;31323:16;-1:-1:-1;;;;;31313:26:0;:6;-1:-1:-1;;;;;31313:26:0;;31305:58;;;;;-1:-1:-1;;;31305:58:0;;;;;;;;;;;;-1:-1:-1;;;31305:58:0;;;;;;;;;;;;;;;31382:14;;;:46;;;31419:9;31400:15;:28;;31382:46;31374:78;;;;;-1:-1:-1;;;31374:78:0;;;;;;;;;;;;-1:-1:-1;;;31374:78:0;;;;;;;;;;;;;;;31465:34;31474:6;31482:8;31492:6;31465:8;:34::i;:::-;30475:1032;;;;;;;;;:::o;13276:151::-;-1:-1:-1;;;;;13392:18:0;;;13365:7;13392:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;13276:151::o;25552:30::-;;;-1:-1:-1;;;;;25552:30:0;;:::o;26336:321::-;25880:8;;-1:-1:-1;;;;;25880:8:0;25866:10;:22;25858:57;;;;;-1:-1:-1;;;25858:57:0;;;;;;;;;;;;-1:-1:-1;;;25858:57:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26426:26:0;::::1;26418:59;;;::::0;;-1:-1:-1;;;26418:59:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26418:59:0;;;;;;;;;;;;;::::1;;26519:15;::::0;;-1:-1:-1;;;;;26545:30:0;;::::1;-1:-1:-1::0;;;;;;26545:30:0;::::1;;::::0;;;;26593:56:::1;::::0;26519:15;;::::1;::::0;26633::::1;::::0;26519;;26593:56:::1;::::0;26490:26:::1;::::0;26593:56:::1;25926:1;26336:321:::0;:::o;26022:96::-;26086:8;:24;;-1:-1:-1;;;;;;26086:24:0;-1:-1:-1;;;;;26086:24:0;;;;;;;;;;26022:96::o;4844:181::-;4902:7;4934:5;;;4958:6;;;;4950:46;;;;;-1:-1:-1;;;4950:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5016:1;4844:181;-1:-1:-1;;;4844:181:0:o;736:106::-;824:10;736:106;:::o;18823:346::-;-1:-1:-1;;;;;18925:19:0;;18917:68;;;;-1:-1:-1;;;18917:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19004:21:0;;18996:68;;;;-1:-1:-1;;;18996:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19077:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19129:32;;;;;;;;;;;;;;;;;18823:346;;;:::o;16435:539::-;-1:-1:-1;;;;;16541:20:0;;16533:70;;;;-1:-1:-1;;;16533:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16622:23:0;;16614:71;;;;-1:-1:-1;;;16614:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16698:47;16719:6;16727:9;16738:6;16698:20;:47::i;:::-;16778:71;16800:6;16778:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16778:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;16758:17:0;;;;;;;:9;:17;;;;;;:91;;;;16883:20;;;;;;;:32;;16908:6;16883:24;:32::i;:::-;-1:-1:-1;;;;;16860:20:0;;;;;;;:9;:20;;;;;;;;;:55;;;;16931:35;;;;;;;16860:20;;16931:35;;;;;;;;;;;;;16435:539;;;:::o;5747:192::-;5833:7;5869:12;5861:6;;;;5853:29;;;;-1:-1:-1;;;5853:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5905:5:0;;;5747:192::o;32935:133::-;-1:-1:-1;;;;;32995:18:0;;33016:5;32995:18;;;:8;:18;;;;;;:26;;-1:-1:-1;;32995:26:0;;;33037:23;;;33016:5;33037:23;32935:133;:::o;17256:378::-;-1:-1:-1;;;;;17340:21:0;;17332:65;;;;;-1:-1:-1;;;17332:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17410:49;17439:1;17443:7;17452:6;17410:20;:49::i;:::-;17487:12;;:24;;17504:6;17487:16;:24::i;:::-;17472:12;:39;-1:-1:-1;;;;;17543:18:0;;;;;;:9;:18;;;;;;:30;;17566:6;17543:22;:30::i;:::-;-1:-1:-1;;;;;17522:18:0;;;;;;:9;:18;;;;;;;;:51;;;;17589:37;;;;;;;17522:18;;;;17589:37;;;;;;;;;;17256:378;;:::o;17967:418::-;-1:-1:-1;;;;;18051:21:0;;18043:67;;;;-1:-1:-1;;;18043:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18123:49;18144:7;18161:1;18165:6;18123:20;:49::i;:::-;18206:68;18229:6;18206:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18206:18:0;;;;;;:9;:18;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;18185:18:0;;;;;;:9;:18;;;;;:89;18300:12;;:24;;18317:6;18300:16;:24::i;:::-;18285:12;:39;18340:37;;;;;;;;18366:1;;-1:-1:-1;;;;;18340:37:0;;;;;;;;;;;;17967:418;;:::o;32706:127::-;-1:-1:-1;;;;;32763:18:0;;;;;;:8;:18;;;;;;:25;;-1:-1:-1;;32763:25:0;32784:4;32763:25;;;32804:21;;;32763:18;32804:21;32706:127;:::o;22661:2051::-;22739:7;22802:9;:16;22822:2;22802:22;22798:96;;22841:41;;;-1:-1:-1;;;22841:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;22798:96;23255:4;23240:20;;23234:27;23301:4;23286:20;;23280:27;23355:4;23340:20;;23334:27;22963:9;23326:36;24290:66;24276:80;;;24268:127;;;;-1:-1:-1;;;24268:127:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24414:1;:7;;24419:2;24414:7;:18;;;;24425:1;:7;;24430:2;24425:7;24414:18;24406:65;;;;-1:-1:-1;;;24406:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24569:14;24586:24;24596:4;24602:1;24605;24608;24586:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24586:24:0;;-1:-1:-1;;24586:24:0;;;-1:-1:-1;;;;;;;24629:20:0;;24621:57;;;;;-1:-1:-1;;;24621:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24698:6;22661:2051;-1:-1:-1;;;;;;22661:2051:0:o;5308:136::-;5366:7;5393:43;5397:1;5400;5393:43;;;;;;;;;;;;;;;;;:3;:43::i
Swarm Source
ipfs://28978c229b51c3a9489101e8096301e85866fa63b6ccbd95d247e376d1f54076
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.