ETH Price: $2,428.06 (-1.92%)
 

Overview

Max Total Supply

100,000,000 BAND

Holders

35,448 (0.00%)

Market

Price

$1.00 @ 0.000411 ETH (-0.02%)

Onchain Market Cap

$99,796,400.00

Circulating Supply Market Cap

$144,592,437.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
14.48794504 BAND

Value
$14.46 ( ~0.00595536902375763 Eth) [0.0000%]
0xedb9d11e7a98dc691e1a5649888483ddaa30127d
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

A data governance framework for Web3.0 applications operating as an open-source standard for the decentralized management of data. Band Protocol connects smart contracts with trusted off-chain information, provided through community-curated oracle data providers.

Market

Volume (24H):$7,190,262.00
Market Capitalization:$144,592,437.00
Circulating Supply:144,890,607.00 BAND
Market Data Source: Coinmarketcap

IEO Information

IEO Start Date :Sep 17, 2019  
IEO End Date :Sep 17, 2019  
IEO Launchpad :https://launchpad.binance.com/en/lottery/1543a76b69754de4b916c9a4d767f24d  
Hard Cap :$5850000  
Raised :$5850000  
IEO Price  :$0.473  

# Exchange Pair Price  24H Volume % Volume
1
WhiteBIT
BAND-USDT$0.9973
0.0004109 Eth
$1,098,789.00
1,101,813.600 BAND
14.9923%
2
Trubit
BAND-USDT$0.9964
0.0004106 Eth
$849,761.00
862,057.600 BAND
11.7300%
3
Binance
BAND-USDT$0.9954
0.0004098 Eth
$661,770.00
672,006.700 BAND
9.1440%
4
Nami.Exchange
BAND-VNST$1.001
0.0004127 Eth
$591,878.00
591,047.500 BAND
8.0424%
5
Nami.Exchange
BAND-USDT$0.9972
0.0004109 Eth
$583,702.00
585,319.200 BAND
7.9644%
6
Biconomy.com
BAND-USDT$0.9953
0.0004101 Eth
$283,748.00
287,713.116 BAND
3.9149%
7
Bitazza
BAND-USDT$0.9932
0.0004092 Eth
$283,324.00
286,888.200 BAND
3.9037%
8
Ourbit
BAND-USDT$0.9984
0.0004114 Eth
$273,224.00
277,467.200 BAND
3.7755%
9
Coinsbit
BAND-USDT$0.9972
0.0004109 Eth
$201,100.00
201,658.717 BAND
2.7440%
10
Hotcoin
BAND-USDT$0.9962
0.0004106 Eth
$197,164.00
197,921.800 BAND
2.6931%
11
Icrypex
BAND-USDT$0.9903
0.0004080 Eth
$187,874.00
189,722.350 BAND
2.5815%
12
WEEX
BAND-USDT$0.9962
0.0004105 Eth
$173,919.00
176,370.600 BAND
2.3999%
13
AscendEX (BitMax)
BAND-USDT$0.9929
0.0004091 Eth
$150,021.00
151,100.300 BAND
2.0560%
14
HTX
BAND-USDT$0.9961
0.0004104 Eth
$145,016.00
147,134.116 BAND
2.0020%
15
Bitrue
BAND-USDT$0.9973
0.0004109 Eth
$142,699.00
143,089.530 BAND
1.9470%
16
Icrypex
BAND-TRY$1.18
0.0004435 Eth
$133,500.00
113,161.140 BAND
1.5398%
17
BYDFi
BAND-USDT$0.9974
0.0004110 Eth
$132,810.00
133,161.600 BAND
1.8119%
18
FameEX
BAND-USDT$0.9953
0.0004102 Eth
$93,494.00
94,797.518 BAND
1.2899%
19
OKX
BAND-USDT$0.9943
0.0004097 Eth
$90,956.00
93,141.713 BAND
1.2674%
20
Toobit
BAND-USDT$0.9952
0.0004102 Eth
$80,113.00
81,315.900 BAND
1.1065%
21
Bitget
BAND-USDT$0.9963
0.0004105 Eth
$78,690.00
79,776.011 BAND
1.0855%
22
Bitunix
BAND-USDT$0.9962
0.0004105 Eth
$64,134.00
64,312.200 BAND
0.8751%
23
CoinTR
BAND-USDT$0.9957
0.0004103 Eth
$62,791.00
63,575.297 BAND
0.8651%
24
BitMart
BAND-USDT$0.9974
0.0004110 Eth
$61,883.00
62,047.140 BAND
0.8443%
25
Crypto.com Exchange
BAND-USD$0.9965
0.0004106 Eth
$55,395.00
55,589.900 BAND
0.7564%
26
BTSE
BAND-USDT$0.9972
0.0004109 Eth
$55,270.00
55,423.767 BAND
0.7541%
27
Tokenize
BAND-SGD$0.9979
0.0004110 Eth
$43,433.00
43,523.703 BAND
0.5922%
28
Tokenize
BAND-USD$0.996
0.0004104 Eth
$43,276.00
43,449.518 BAND
0.5912%
29
BloFin
BAND-USDT$0.9972
0.0004110 Eth
$39,534.00
40,039.800 BAND
0.5448%
30
XT.COM
BAND-USDT$0.9943
0.0004097 Eth
$37,077.00
37,964.400 BAND
0.5166%
31
BtcTurk | Kripto
BAND-TRY$0.9971
0.0004108 Eth
$35,046.00
35,147.459 BAND
0.4783%
32
BingX
BAND-USDT$0.9973
0.0004109 Eth
$32,899.00
33,344.359 BAND
0.4537%
33
Currency.com
BAND-USD$0.997
0.0004108 Eth
$30,190.00
30,282.000 BAND
0.4120%
34
Bitkub
BAND-THB$1.021
0.0004209 Eth
$28,985.00
28,377.207 BAND
0.3861%
35
Crypto.com Exchange
BAND-USDT$0.9934
0.0004093 Eth
$28,953.00
29,146.900 BAND
0.3966%
36
DigiFinex
BAND-USDT$0.9947
0.0004099 Eth
$27,861.00
28,007.900 BAND
0.3811%
37
LATOKEN
BAND-USDT$0.997
0.0004109 Eth
$26,712.00
26,792.927 BAND
0.3646%
38
Coinbase Exchange
BAND-USD$0.998
0.0004112 Eth
$26,415.00
26,468.070 BAND
0.3602%
39
Dex-Trade
BAND-USDT$0.9983
0.0004114 Eth
$22,863.00
22,902.100 BAND
0.3116%
40
Phemex
BAND-USDT$0.9965
0.0004103 Eth
$20,056.00
20,126.210 BAND
0.2739%
41
Koinpark
BAND-USDT$0.9944
0.0004102 Eth
$16,884.48
16,979.961 BAND
0.2310%
42
P2B
BAND-USDT$0.9963
0.0004105 Eth
$16,199.61
16,260.200 BAND
0.2213%
43
Paribu
BAND-TRY$0.9904
0.0004081 Eth
$14,652.39
14,794.130 BAND
0.2013%
44
KuCoin
BAND-USDT$0.9992
0.0004117 Eth
$14,106.97
14,117.906 BAND
0.1921%
45
Binance
BAND-BTC$0.9991
0.0004117 Eth
$11,938.69
12,060.400 BAND
0.1641%
46
Coinone
BAND-KRW$0.9866
0.0004065 Eth
$11,769.57
11,929.978 BAND
0.1623%
47
Bilaxy
BAND-USDT$1.001
0.0004125 Eth
$11,006.36
10,992.900 BAND
0.1496%
48
LATOKEN
BAND-BTC$1.00
0.0004120 Eth
$10,919.94
10,917.715 BAND
0.1486%
49
BtcTurk | Kripto
BAND-USDT$0.9893
0.0004076 Eth
$6,125.76
6,192.149 BAND
0.0843%
50
Kraken
BAND-USD$0.99
0.0004080 Eth
$5,530.42
5,586.280 BAND
0.0760%
51
Kraken
BAND-EUR$0.9867
0.0004066 Eth
$4,957.82
5,024.428 BAND
0.0684%
52
Bit2Me
BAND-EUR$0.9867
0.0004066 Eth
$4,839.91
4,923.939 BAND
0.0670%
53
Cryptology
BAND-USDT$0.9943
0.0004097 Eth
$4,112.42
4,136.100 BAND
0.0563%
54
DeGate
0XBA11D00C5F74255F56A5E366F4F77F5A186D7F55-0XA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48$0.9944
0.0004099 Eth
$3,987.61
4,046.834 0XBA11D00C5F74255F56A5E366F4F77F5A186D7F55
0.0551%
55
Gate.io
BAND-USDT$0.9946
0.0004098 Eth
$3,608.27
3,674.310 BAND
0.0500%
56
Kanga
BAND-USDT$0.9943
0.0004097 Eth
$3,492.94
0.000 BAND
0.0000%
57
CoinEx
BAND-BTC$0.9924
0.0004089 Eth
$3,354.80
3,378.909 BAND
0.0460%
58
Nominex
BAND-USDT$0.9963
0.0004105 Eth
$3,301.75
3,314.165 BAND
0.0451%
59
CoinEx
BAND-USDT$0.9938
0.0004095 Eth
$2,697.80
2,743.778 BAND
0.0373%
60
Sushiswap
0XBA11D00C5F74255F56A5E366F4F77F5A186D7F55-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$0.9882
0.0004072 Eth
$2,267.95
2,313.842 0XBA11D00C5F74255F56A5E366F4F77F5A186D7F55
0.0315%
61
P2B
BAND-USD$0.997
0.0004108 Eth
$2,265.08
2,271.900 BAND
0.0309%
62
Bitazza
BAND-THB$1.006
0.0004144 Eth
$2,166.75
2,190.800 BAND
0.0298%
63
Vindax
BAND-USDT$0.9914
0.0004082 Eth
$1,978.71
1,995.900 BAND
0.0272%
64
Bitvavo
BAND-EUR$0.997
0.0004108 Eth
$1,236.65
1,240.333 BAND
0.0169%
65
Pionex
BAND-USDT$0.9972
0.0004109 Eth
$1,012.51
1,028.130 BAND
0.0140%
66
CoinJar Exchange
BAND-AUD$1.033
0.0004181 Eth
$764.18
740.000 BAND
0.0101%
67
CoinJar Exchange
BAND-USDC$1.025
0.0004149 Eth
$758.19
740.000 BAND
0.0101%
68
Coinsbit
BAND-BTC$0.9991
0.0004115 Eth
$757.68
758.357 BAND
0.0103%
69
Mercado Bitcoin
BAND-BRL$0.953
0.0003927 Eth
$692.46
726.587 BAND
0.0099%
70
Dex-Trade
BAND-BTC$1.003
0.0004131 Eth
$378.99
378.000 BAND
0.0051%
71
Mudrex
BAND-USDT$0.9963
0.0004105 Eth
$248.07
249.007 BAND
0.0034%
72
Bitstamp
BAND-USD$1.17
0.0004381 Eth
$228.34
196.000 BAND
0.0027%
73
Binance US
BAND-USDT$0.9834
0.0004053 Eth
$193.16
196.420 BAND
0.0027%
74
P2B
BAND-BTC$0.9751
0.0004017 Eth
$162.16
166.300 BAND
0.0023%
75
Uniswap V2 (Ethereum)
0XBA11D00C5F74255F56A5E366F4F77F5A186D7F55-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$0.9962
0.0004100 Eth
$152.37
152.952 0XBA11D00C5F74255F56A5E366F4F77F5A186D7F55
0.0021%
76
TokoCrypto
BAND-BTC$0.9995
0.0004119 Eth
$142.20
142.268 BAND
0.0019%
77
ProBit Global
BAND-USDT$1.052
0.0004338 Eth
$119.38
113.532 BAND
0.0015%
78
TokoCrypto
BAND-USDT$0.9963
0.0004106 Eth
$97.62
97.989 BAND
0.0013%
79
KuCoin
BAND-BTC$0.9999
0.0004120 Eth
$93.54
93.553 BAND
0.0013%
80
Pionex
BAND-BTC$0.9943
0.0004095 Eth
$93.42
94.000 BAND
0.0013%
81
Korbit
BAND-KRW$0.9749
0.0004017 Eth
$74.89
74.954 BAND
0.0010%
82
SakeSwap
0XBA11D00C5F74255F56A5E366F4F77F5A186D7F55-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1.025
0.0004161 Eth
$54.94
53.578 0XBA11D00C5F74255F56A5E366F4F77F5A186D7F55
0.0007%
83
Bittime
BAND-IDR$1.001
0.0004126 Eth
$23.25
22.020 BAND
0.0003%
84
BitBNS
BAND-INR$0.9985
0.0004114 Eth
$20.40
20.430 BAND
0.0003%
85
CEX.IO
BAND-USD$0.999
0.0004116 Eth
$18.68
19.054 BAND
0.0003%
86
Bitstamp
BAND-EUR$1.29
0.0004858 Eth
$18.01
13.920 BAND
0.0002%
87
CEX.IO
BAND-EUR$1.003
0.0004133 Eth
$14.96
14.971 BAND
0.0002%
88
CEX.IO
BAND-USDT$0.9984
0.0004114 Eth
$14.73
14.971 BAND
0.0002%
89
Nominex
BAND-BTC$0.9998
0.0004120 Eth
$13.00
13.001 BAND
0.0002%
90
Gate.io
BAND-ETH$0.9844
0.0004056 Eth
$10.24
10.402 BAND
0.0001%
91
OKX
BAND-USDC$1.004
0.0004199 Eth
$9.35
9.313 BAND
0.0001%
92
Indodax
BAND-IDR$1.11
0.0004576 Eth
$9.02
8.134 BAND
0.0001%
93
Poloniex
BAND-USDT$0.8895
0.0003704 Eth
$4.31
4.846 BAND
0.0001%
94
SpookySwap
0X46E7628E8B4350B2716AB470EE0BA1FA9E76C6C5-0X21BE370D5312F44CB42CE377BC9B8A0CEF1A4C83$0.2931
0.0001198 Eth
$0.996
3.390 0X46E7628E8B4350B2716AB470EE0BA1FA9E76C6C5
0.0000%
95
HitBTC
BAND-USDT$0.9994
0.0004119 Eth
$0.001
0.001 BAND
0.0000%
96
HitBTC
BAND-BTC$0.9895
0.0004079 Eth
$0.001
0.001 BAND
0.0000%
97
Coinmetro
BAND-USD$0.9941
0.0004100 Eth
$0.00
0.000 BAND
0.0000%
98
Coinmetro
BAND-EUR$0.996
0.0004105 Eth
$0.00
0.000 BAND
0.0000%

Contract Source Code Verified (Exact Match)

Contract Name:
BandToken

Compiler Version
v0.5.9+commit.e560f70d

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-09-09
*/

// File: openzeppelin-solidity/contracts/token/ERC20/IERC20.sol

pragma solidity ^0.5.0;

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
interface IERC20 {
    function transfer(address to, uint256 value) external returns (bool);

    function approve(address spender, uint256 value) external returns (bool);

    function transferFrom(address from, address to, uint256 value) external returns (bool);

    function totalSupply() external view returns (uint256);

    function balanceOf(address who) external view returns (uint256);

    function allowance(address owner, address spender) external view returns (uint256);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: openzeppelin-solidity/contracts/math/SafeMath.sol

pragma solidity ^0.5.0;

/**
 * @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/token/ERC20/ERC20.sol

pragma solidity ^0.5.0;



/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the basic standard token.
 * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md
 * Originally based on code by FirstBlood:
 * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
 *
 * This implementation emits additional Approval events, allowing applications to reconstruct the allowance status for
 * all accounts just by listening to said events. Note that this isn't required by the specification, and other
 * compliant implementations may not do it.
 */
contract ERC20 is IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowed;

    uint256 private _totalSupply;

    /**
    * @dev Total number of tokens in existence
    */
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    /**
    * @dev Gets the balance of the specified address.
    * @param owner The address to query the balance of.
    * @return An uint256 representing the amount owned by the passed address.
    */
    function balanceOf(address owner) public view returns (uint256) {
        return _balances[owner];
    }

    /**
     * @dev Function to check the amount of tokens that an owner allowed to a spender.
     * @param owner address The address which owns the funds.
     * @param spender address The address which will spend the funds.
     * @return A uint256 specifying the amount of tokens still available for the spender.
     */
    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowed[owner][spender];
    }

    /**
    * @dev Transfer token for a specified address
    * @param to The address to transfer to.
    * @param value The amount to be transferred.
    */
    function transfer(address to, uint256 value) public returns (bool) {
        _transfer(msg.sender, to, value);
        return true;
    }

    /**
     * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
     * 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
     * @param spender The address which will spend the funds.
     * @param value The amount of tokens to be spent.
     */
    function approve(address spender, uint256 value) public returns (bool) {
        require(spender != address(0));

        _allowed[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    /**
     * @dev Transfer tokens from one address to another.
     * Note that while this function emits an Approval event, this is not required as per the specification,
     * and other compliant implementations may not emit the event.
     * @param from address The address which you want to send tokens from
     * @param to address The address which you want to transfer to
     * @param value uint256 the amount of tokens to be transferred
     */
    function transferFrom(address from, address to, uint256 value) public returns (bool) {
        _allowed[from][msg.sender] = _allowed[from][msg.sender].sub(value);
        _transfer(from, to, value);
        emit Approval(from, msg.sender, _allowed[from][msg.sender]);
        return true;
    }

    /**
     * @dev Increase the amount of tokens that an owner allowed to a spender.
     * approve should be called when allowed_[_spender] == 0. To increment
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From MonolithDAO Token.sol
     * Emits an Approval event.
     * @param spender The address which will spend the funds.
     * @param addedValue The amount of tokens to increase the allowance by.
     */
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        require(spender != address(0));

        _allowed[msg.sender][spender] = _allowed[msg.sender][spender].add(addedValue);
        emit Approval(msg.sender, spender, _allowed[msg.sender][spender]);
        return true;
    }

    /**
     * @dev Decrease the amount of tokens that an owner allowed to a spender.
     * approve should be called when allowed_[_spender] == 0. To decrement
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From MonolithDAO Token.sol
     * Emits an Approval event.
     * @param spender The address which will spend the funds.
     * @param subtractedValue The amount of tokens to decrease the allowance by.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        require(spender != address(0));

        _allowed[msg.sender][spender] = _allowed[msg.sender][spender].sub(subtractedValue);
        emit Approval(msg.sender, spender, _allowed[msg.sender][spender]);
        return true;
    }

    /**
    * @dev Transfer token for a specified addresses
    * @param from The address to transfer from.
    * @param to The address to transfer to.
    * @param value The amount to be transferred.
    */
    function _transfer(address from, address to, uint256 value) internal {
        require(to != address(0));

        _balances[from] = _balances[from].sub(value);
        _balances[to] = _balances[to].add(value);
        emit Transfer(from, to, value);
    }

    /**
     * @dev Internal function that mints an amount of the token and assigns it to
     * an account. This encapsulates the modification of balances such that the
     * proper events are emitted.
     * @param account The account that will receive the created tokens.
     * @param value The amount that will be created.
     */
    function _mint(address account, uint256 value) internal {
        require(account != address(0));

        _totalSupply = _totalSupply.add(value);
        _balances[account] = _balances[account].add(value);
        emit Transfer(address(0), account, value);
    }

    /**
     * @dev Internal function that burns an amount of the token of a given
     * account.
     * @param account The account whose tokens will be burnt.
     * @param value The amount that will be burnt.
     */
    function _burn(address account, uint256 value) internal {
        require(account != address(0));

        _totalSupply = _totalSupply.sub(value);
        _balances[account] = _balances[account].sub(value);
        emit Transfer(account, address(0), value);
    }

    /**
     * @dev Internal function that burns an amount of the token of a given
     * account, deducting from the sender's allowance for said account. Uses the
     * internal burn function.
     * Emits an Approval event (reflecting the reduced allowance).
     * @param account The account whose tokens will be burnt.
     * @param value The amount that will be burnt.
     */
    function _burnFrom(address account, uint256 value) internal {
        _allowed[account][msg.sender] = _allowed[account][msg.sender].sub(value);
        _burn(account, value);
        emit Approval(account, msg.sender, _allowed[account][msg.sender]);
    }
}

// File: openzeppelin-solidity/contracts/access/Roles.sol

pragma solidity ^0.5.0;

/**
 * @title Roles
 * @dev Library for managing addresses assigned to a Role.
 */
library Roles {
    struct Role {
        mapping (address => bool) bearer;
    }

    /**
     * @dev give an account access to this role
     */
    function add(Role storage role, address account) internal {
        require(account != address(0));
        require(!has(role, account));

        role.bearer[account] = true;
    }

    /**
     * @dev remove an account's access to this role
     */
    function remove(Role storage role, address account) internal {
        require(account != address(0));
        require(has(role, account));

        role.bearer[account] = false;
    }

    /**
     * @dev check if an account has this role
     * @return bool
     */
    function has(Role storage role, address account) internal view returns (bool) {
        require(account != address(0));
        return role.bearer[account];
    }
}

// File: openzeppelin-solidity/contracts/access/roles/MinterRole.sol

pragma solidity ^0.5.0;


contract MinterRole {
    using Roles for Roles.Role;

    event MinterAdded(address indexed account);
    event MinterRemoved(address indexed account);

    Roles.Role private _minters;

    constructor () internal {
        _addMinter(msg.sender);
    }

    modifier onlyMinter() {
        require(isMinter(msg.sender));
        _;
    }

    function isMinter(address account) public view returns (bool) {
        return _minters.has(account);
    }

    function addMinter(address account) public onlyMinter {
        _addMinter(account);
    }

    function renounceMinter() public {
        _removeMinter(msg.sender);
    }

    function _addMinter(address account) internal {
        _minters.add(account);
        emit MinterAdded(account);
    }

    function _removeMinter(address account) internal {
        _minters.remove(account);
        emit MinterRemoved(account);
    }
}

// File: contracts/token/ERC20Interface.sol

pragma solidity 0.5.9;


interface ERC20Interface {
  // Standard ERC-20 interface.
  function transfer(address to, uint256 value) external returns (bool);
  function approve(address spender, uint256 value) external returns (bool);
  function transferFrom(address from, address to, uint256 value) external returns (bool);
  function totalSupply() external view returns (uint256);
  function balanceOf(address who) external view returns (uint256);
  function allowance(address owner, address spender) external view returns (uint256);
  // Extension of ERC-20 interface to support supply adjustment.
  function mint(address to, uint256 value) external returns (bool);
  function burn(address from, uint256 value) external returns (bool);
}

// File: contracts/token/ERC20Base.sol

pragma solidity 0.5.9;





/// "ERC20Base" is the standard ERC-20 implementation that allows its minter to mint tokens. Both BandToken and
/// CommunityToken extend from ERC20Base. In addition to the standard functions, the class provides `transferAndCall`
/// function, which performs a transfer and invokes the given function using the provided data. If the destination
/// contract uses "ERC20Acceptor" interface, it can verify that the caller properly sends appropriate amount of tokens.
contract ERC20Base is ERC20Interface, ERC20, MinterRole {
  string public name;
  string public symbol;
  uint8 public decimals = 18;

  constructor(string memory _name, string memory _symbol) public {
    name = _name;
    symbol = _symbol;
  }

  function transferAndCall(address to, uint256 value, bytes4 sig, bytes memory data) public returns (bool) {
    require(to != address(this));
    _transfer(msg.sender, to, value);
    (bool success,) = to.call(abi.encodePacked(sig, uint256(msg.sender), value, data));
    require(success);
    return true;
  }

  function mint(address to, uint256 value) public onlyMinter returns (bool) {
    _mint(to, value);
    return true;
  }

  function burn(address from, uint256 value) public onlyMinter returns (bool) {
    _burn(from, value);
    return true;
  }
}

// File: contracts/token/SnapshotToken.sol

pragma solidity 0.5.9;




contract SnapshotToken is ERC20Base {
  using SafeMath for uint256;

  /// IMPORTANT: votingPowers are kept as a linked list of ALL historical changes.
  /// - This allows the contract to figure out voting power of the address at any nonce `n`, by
  /// searching for the node that has the biggest nonce that is not greater than `n`.
  /// - For efficiency, nonce and power are packed into one uint256 integer, with the top 64 bits
  /// representing nonce, and the bottom 192 bits representing voting power.
  mapping (address => mapping(uint256 => uint256)) _votingPower;
  mapping (address => uint256) public votingPowerChangeCount;
  uint256 public votingPowerChangeNonce = 0;

  /// Returns user voting power at the given index, that is, as of the user's index^th voting power change
  function historicalVotingPowerAtIndex(address owner, uint256 index) public view returns (uint256) {
    require(index <= votingPowerChangeCount[owner]);
    return _votingPower[owner][index] & ((1 << 192) - 1);  // Lower 192 bits
  }

  /// Returns user voting power at the given time. Under the hood, this performs binary search
  /// to look for the largest index at which the nonce is not greater than 'nonce'.
  /// The voting power at that index is the returning value.
  function historicalVotingPowerAtNonce(address owner, uint256 nonce) public view returns (uint256) {
    require(nonce <= votingPowerChangeNonce && nonce < (1 << 64));
    uint256 start = 0;
    uint256 end = votingPowerChangeCount[owner];
    while (start < end) {
      uint256 mid = start.add(end).add(1).div(2); /// Use (start+end+1)/2 to prevent infinite loop.
      if ((_votingPower[owner][mid] >> 192) > nonce) {  /// Upper 64-bit nonce
        /// If midTime > nonce, this mid can't possibly be the answer.
        end = mid.sub(1);
      } else {
        /// Otherwise, search on the greater side, but still keep mid as a possible option.
        start = mid;
      }
    }
    return historicalVotingPowerAtIndex(owner, start);
  }

  function _transfer(address from, address to, uint256 value) internal {
    super._transfer(from, to, value);
    votingPowerChangeNonce = votingPowerChangeNonce.add(1);
    _changeVotingPower(from);
    _changeVotingPower(to);
  }

  function _mint(address account, uint256 amount) internal {
    super._mint(account, amount);
    votingPowerChangeNonce = votingPowerChangeNonce.add(1);
    _changeVotingPower(account);
  }

  function _burn(address account, uint256 amount) internal {
    super._burn(account, amount);
    votingPowerChangeNonce = votingPowerChangeNonce.add(1);
    _changeVotingPower(account);
  }

  function _changeVotingPower(address account) internal {
    uint256 currentIndex = votingPowerChangeCount[account];
    uint256 newPower = balanceOf(account);
    require(newPower < (1 << 192));
    require(votingPowerChangeNonce < (1 << 64));
    currentIndex = currentIndex.add(1);
    votingPowerChangeCount[account] = currentIndex;
    _votingPower[account][currentIndex] = (votingPowerChangeNonce << 192) | newPower;
  }
}

// File: contracts/BandToken.sol

pragma solidity 0.5.9;




/// "BandToken" is the native ERC-20 token of Band Protocol.
contract BandToken is ERC20Base("BandToken", "BAND"), SnapshotToken {}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"},{"name":"sig","type":"bytes4"},{"name":"data","type":"bytes"}],"name":"transferAndCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"mint","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"votingPowerChangeNonce","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"votingPowerChangeCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"value","type":"uint256"}],"name":"burn","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isMinter","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"nonce","type":"uint256"}],"name":"historicalVotingPowerAtNonce","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"index","type":"uint256"}],"name":"historicalVotingPowerAtIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"MinterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]

6006805460ff191660121790556000600990815560809081527f42616e64546f6b656e000000000000000000000000000000000000000000000060a052610100604052600460c09081527f42414e440000000000000000000000000000000000000000000000000000000060e05262000081336001600160e01b03620000b516565b81516200009690600490602085019062000196565b508051620000ac90600590602084019062000196565b5050506200023b565b620000d08160036200010760201b62000fab1790919060201c565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b6001600160a01b0381166200011b57600080fd5b6200013082826001600160e01b036200016016565b156200013b57600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006001600160a01b0382166200017657600080fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001d957805160ff191683800117855562000209565b8280016001018555821562000209579182015b8281111562000209578251825591602001919060010190620001ec565b50620002179291506200021b565b5090565b6200023891905b8082111562000217576000815560010162000222565b90565b61111b806200024b6000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d714610443578063a9059cbb1461046f578063aa271e1a1461049b578063cce28096146104c1578063d6487031146104ed578063dd62ed3e1461051957610137565b806370a08231146103b957806395d89b41146103df578063983b2d56146103e7578063986502751461040f5780639dc29fac1461041757610137565b806339509351116100ff57806339509351146102675780633c4461be1461029357806340c10f191461035f57806344b6fd811461038b5780634a7b27e91461039357610137565b806306fdde031461013c578063095ea7b3146101b957806318160ddd146101f957806323b872dd14610213578063313ce56714610249575b600080fd5b610144610547565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561017e578181015183820152602001610166565b50505050905090810190601f1680156101ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101e5600480360360408110156101cf57600080fd5b506001600160a01b0381351690602001356105d5565b604080519115158252519081900360200190f35b610201610651565b60408051918252519081900360200190f35b6101e56004803603606081101561022957600080fd5b506001600160a01b03813581169160208101359091169060400135610657565b610251610720565b6040805160ff9092168252519081900360200190f35b6101e56004803603604081101561027d57600080fd5b506001600160a01b038135169060200135610729565b6101e5600480360360808110156102a957600080fd5b6001600160a01b03823516916020810135916001600160e01b031960408301351691908101906080810160608201356401000000008111156102ea57600080fd5b8201836020820111156102fc57600080fd5b8035906020019184600183028401116401000000008311171561031e57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506107d7945050505050565b6101e56004803603604081101561037557600080fd5b506001600160a01b038135169060200135610952565b610201610979565b610201600480360360208110156103a957600080fd5b50356001600160a01b031661097f565b610201600480360360208110156103cf57600080fd5b50356001600160a01b0316610991565b6101446109ac565b61040d600480360360208110156103fd57600080fd5b50356001600160a01b0316610a07565b005b61040d610a25565b6101e56004803603604081101561042d57600080fd5b506001600160a01b038135169060200135610a30565b6101e56004803603604081101561045957600080fd5b506001600160a01b038135169060200135610a4e565b6101e56004803603604081101561048557600080fd5b506001600160a01b038135169060200135610a97565b6101e5600480360360208110156104b157600080fd5b50356001600160a01b0316610aa4565b610201600480360360408110156104d757600080fd5b506001600160a01b038135169060200135610abd565b6102016004803603604081101561050357600080fd5b506001600160a01b038135169060200135610b99565b6102016004803603604081101561052f57600080fd5b506001600160a01b0381358116916020013516610bf0565b6004805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105cd5780601f106105a2576101008083540402835291602001916105cd565b820191906000526020600020905b8154815290600101906020018083116105b057829003601f168201915b505050505081565b60006001600160a01b0383166105ea57600080fd5b3360008181526001602090815260408083206001600160a01b03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b60025490565b6001600160a01b038316600090815260016020908152604080832033845290915281205461068b908363ffffffff610c1b16565b6001600160a01b03851660009081526001602090815260408083203384529091529020556106ba848484610c30565b6001600160a01b0384166000818152600160209081526040808320338085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b60065460ff1681565b60006001600160a01b03831661073e57600080fd5b3360009081526001602090815260408083206001600160a01b0387168452909152902054610772908363ffffffff610c6916565b3360008181526001602090815260408083206001600160a01b0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b60006001600160a01b0385163014156107ef57600080fd5b6107fa338686610c30565b6000856001600160a01b031684336001600160a01b0316878660405160200180856001600160e01b0319166001600160e01b031916815260040184815260200183815260200182805190602001908083835b6020831061086b5780518252601f19909201916020918201910161084c565b6001836020036101000a0380198251168184511680821785525050505050509050019450505050506040516020818303038152906040526040518082805190602001908083835b602083106108d15780518252601f1990920191602091820191016108b2565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610933576040519150601f19603f3d011682016040523d82523d6000602084013e610938565b606091505b505090508061094657600080fd5b50600195945050505050565b600061095d33610aa4565b61096657600080fd5b6109708383610c82565b50600192915050565b60095481565b60086020526000908152604090205481565b6001600160a01b031660009081526020819052604090205490565b6005805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105cd5780601f106105a2576101008083540402835291602001916105cd565b610a1033610aa4565b610a1957600080fd5b610a2281610cb0565b50565b610a2e33610cf8565b565b6000610a3b33610aa4565b610a4457600080fd5b6109708383610d40565b60006001600160a01b038316610a6357600080fd5b3360009081526001602090815260408083206001600160a01b0387168452909152902054610772908363ffffffff610c1b16565b6000610970338484610c30565b6000610ab760038363ffffffff610d4a16565b92915050565b60006009548211158015610ad45750600160401b82105b610add57600080fd5b6001600160a01b0383166000908152600860205260408120545b80821015610b86576000610b336002610b276001610b1b878763ffffffff610c6916565b9063ffffffff610c6916565b9063ffffffff610d7f16565b6001600160a01b038716600090815260076020908152604080832084845290915290205490915060c01c851015610b7c57610b7581600163ffffffff610c1b16565b9150610b80565b8092505b50610af7565b610b908583610b99565b95945050505050565b6001600160a01b038216600090815260086020526040812054821115610bbe57600080fd5b506001600160a01b0391909116600090815260076020908152604080832093835292905220546001600160c01b031690565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600082821115610c2a57600080fd5b50900390565b610c3b838383610da1565b600954610c4f90600163ffffffff610c6916565b600955610c5b83610e6c565b610c6482610e6c565b505050565b600082820183811015610c7b57600080fd5b9392505050565b610c8c8282610f03565b600954610ca090600163ffffffff610c6916565b600955610cac82610e6c565b5050565b610cc160038263ffffffff610fab16565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b610d0960038263ffffffff610ff716565b6040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b610c8c828261103f565b60006001600160a01b038216610d5f57600080fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b6000808211610d8d57600080fd5b6000828481610d9857fe5b04949350505050565b6001600160a01b038216610db457600080fd5b6001600160a01b038316600090815260208190526040902054610ddd908263ffffffff610c1b16565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610e12908263ffffffff610c6916565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6001600160a01b03811660009081526008602052604081205490610e8f83610991565b9050600160c01b8110610ea157600080fd5b600160401b60095410610eb357600080fd5b610ec482600163ffffffff610c6916565b6001600160a01b0390931660009081526008602090815260408083208690556009546007835281842096845295909152902060c09390931b1790915550565b6001600160a01b038216610f1657600080fd5b600254610f29908263ffffffff610c6916565b6002556001600160a01b038216600090815260208190526040902054610f55908263ffffffff610c6916565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038116610fbe57600080fd5b610fc88282610d4a565b15610fd257600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6001600160a01b03811661100a57600080fd5b6110148282610d4a565b61101d57600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b03821661105257600080fd5b600254611065908263ffffffff610c1b16565b6002556001600160a01b038216600090815260208190526040902054611091908263ffffffff610c1b16565b6001600160a01b038316600081815260208181526040808320949094558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a3505056fea265627a7a723058208c832d942f5f6d66aecf620c67bda2dccbe3e9b07502f05bcf01391244f43e6e64736f6c63430005090032

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d714610443578063a9059cbb1461046f578063aa271e1a1461049b578063cce28096146104c1578063d6487031146104ed578063dd62ed3e1461051957610137565b806370a08231146103b957806395d89b41146103df578063983b2d56146103e7578063986502751461040f5780639dc29fac1461041757610137565b806339509351116100ff57806339509351146102675780633c4461be1461029357806340c10f191461035f57806344b6fd811461038b5780634a7b27e91461039357610137565b806306fdde031461013c578063095ea7b3146101b957806318160ddd146101f957806323b872dd14610213578063313ce56714610249575b600080fd5b610144610547565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561017e578181015183820152602001610166565b50505050905090810190601f1680156101ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101e5600480360360408110156101cf57600080fd5b506001600160a01b0381351690602001356105d5565b604080519115158252519081900360200190f35b610201610651565b60408051918252519081900360200190f35b6101e56004803603606081101561022957600080fd5b506001600160a01b03813581169160208101359091169060400135610657565b610251610720565b6040805160ff9092168252519081900360200190f35b6101e56004803603604081101561027d57600080fd5b506001600160a01b038135169060200135610729565b6101e5600480360360808110156102a957600080fd5b6001600160a01b03823516916020810135916001600160e01b031960408301351691908101906080810160608201356401000000008111156102ea57600080fd5b8201836020820111156102fc57600080fd5b8035906020019184600183028401116401000000008311171561031e57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506107d7945050505050565b6101e56004803603604081101561037557600080fd5b506001600160a01b038135169060200135610952565b610201610979565b610201600480360360208110156103a957600080fd5b50356001600160a01b031661097f565b610201600480360360208110156103cf57600080fd5b50356001600160a01b0316610991565b6101446109ac565b61040d600480360360208110156103fd57600080fd5b50356001600160a01b0316610a07565b005b61040d610a25565b6101e56004803603604081101561042d57600080fd5b506001600160a01b038135169060200135610a30565b6101e56004803603604081101561045957600080fd5b506001600160a01b038135169060200135610a4e565b6101e56004803603604081101561048557600080fd5b506001600160a01b038135169060200135610a97565b6101e5600480360360208110156104b157600080fd5b50356001600160a01b0316610aa4565b610201600480360360408110156104d757600080fd5b506001600160a01b038135169060200135610abd565b6102016004803603604081101561050357600080fd5b506001600160a01b038135169060200135610b99565b6102016004803603604081101561052f57600080fd5b506001600160a01b0381358116916020013516610bf0565b6004805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105cd5780601f106105a2576101008083540402835291602001916105cd565b820191906000526020600020905b8154815290600101906020018083116105b057829003601f168201915b505050505081565b60006001600160a01b0383166105ea57600080fd5b3360008181526001602090815260408083206001600160a01b03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b60025490565b6001600160a01b038316600090815260016020908152604080832033845290915281205461068b908363ffffffff610c1b16565b6001600160a01b03851660009081526001602090815260408083203384529091529020556106ba848484610c30565b6001600160a01b0384166000818152600160209081526040808320338085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b60065460ff1681565b60006001600160a01b03831661073e57600080fd5b3360009081526001602090815260408083206001600160a01b0387168452909152902054610772908363ffffffff610c6916565b3360008181526001602090815260408083206001600160a01b0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b60006001600160a01b0385163014156107ef57600080fd5b6107fa338686610c30565b6000856001600160a01b031684336001600160a01b0316878660405160200180856001600160e01b0319166001600160e01b031916815260040184815260200183815260200182805190602001908083835b6020831061086b5780518252601f19909201916020918201910161084c565b6001836020036101000a0380198251168184511680821785525050505050509050019450505050506040516020818303038152906040526040518082805190602001908083835b602083106108d15780518252601f1990920191602091820191016108b2565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610933576040519150601f19603f3d011682016040523d82523d6000602084013e610938565b606091505b505090508061094657600080fd5b50600195945050505050565b600061095d33610aa4565b61096657600080fd5b6109708383610c82565b50600192915050565b60095481565b60086020526000908152604090205481565b6001600160a01b031660009081526020819052604090205490565b6005805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105cd5780601f106105a2576101008083540402835291602001916105cd565b610a1033610aa4565b610a1957600080fd5b610a2281610cb0565b50565b610a2e33610cf8565b565b6000610a3b33610aa4565b610a4457600080fd5b6109708383610d40565b60006001600160a01b038316610a6357600080fd5b3360009081526001602090815260408083206001600160a01b0387168452909152902054610772908363ffffffff610c1b16565b6000610970338484610c30565b6000610ab760038363ffffffff610d4a16565b92915050565b60006009548211158015610ad45750600160401b82105b610add57600080fd5b6001600160a01b0383166000908152600860205260408120545b80821015610b86576000610b336002610b276001610b1b878763ffffffff610c6916565b9063ffffffff610c6916565b9063ffffffff610d7f16565b6001600160a01b038716600090815260076020908152604080832084845290915290205490915060c01c851015610b7c57610b7581600163ffffffff610c1b16565b9150610b80565b8092505b50610af7565b610b908583610b99565b95945050505050565b6001600160a01b038216600090815260086020526040812054821115610bbe57600080fd5b506001600160a01b0391909116600090815260076020908152604080832093835292905220546001600160c01b031690565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600082821115610c2a57600080fd5b50900390565b610c3b838383610da1565b600954610c4f90600163ffffffff610c6916565b600955610c5b83610e6c565b610c6482610e6c565b505050565b600082820183811015610c7b57600080fd5b9392505050565b610c8c8282610f03565b600954610ca090600163ffffffff610c6916565b600955610cac82610e6c565b5050565b610cc160038263ffffffff610fab16565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b610d0960038263ffffffff610ff716565b6040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b610c8c828261103f565b60006001600160a01b038216610d5f57600080fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b6000808211610d8d57600080fd5b6000828481610d9857fe5b04949350505050565b6001600160a01b038216610db457600080fd5b6001600160a01b038316600090815260208190526040902054610ddd908263ffffffff610c1b16565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610e12908263ffffffff610c6916565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6001600160a01b03811660009081526008602052604081205490610e8f83610991565b9050600160c01b8110610ea157600080fd5b600160401b60095410610eb357600080fd5b610ec482600163ffffffff610c6916565b6001600160a01b0390931660009081526008602090815260408083208690556009546007835281842096845295909152902060c09390931b1790915550565b6001600160a01b038216610f1657600080fd5b600254610f29908263ffffffff610c6916565b6002556001600160a01b038216600090815260208190526040902054610f55908263ffffffff610c6916565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038116610fbe57600080fd5b610fc88282610d4a565b15610fd257600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6001600160a01b03811661100a57600080fd5b6110148282610d4a565b61101d57600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b03821661105257600080fd5b600254611065908263ffffffff610c1b16565b6002556001600160a01b038216600090815260208190526040902054611091908263ffffffff610c1b16565b6001600160a01b038316600081815260208181526040808320949094558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a3505056fea265627a7a723058208c832d942f5f6d66aecf620c67bda2dccbe3e9b07502f05bcf01391244f43e6e64736f6c63430005090032

Deployed Bytecode Sourcemap

18242:70:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18242:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14126:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;14126:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5651:244;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;5651:244:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3810:91;;;:::i;:::-;;;;;;;;;;;;;;;;6368:299;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;6368:299:0;;;;;;;;;;;;;;;;;:::i;14174:26::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7182:323;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7182:323:0;;;;;;;;:::i;14324:315::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;14324:315:0;;;;;;;;;-1:-1:-1;;;;;;14324:315:0;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;14324:315:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;14324:315:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;14324:315:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;14324:315:0;;-1:-1:-1;14324:315:0;;-1:-1:-1;;;;;14324:315:0:i;14645:121::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14645:121:0;;;;;;;;:::i;15630:41::-;;;:::i;15567:58::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15567:58:0;-1:-1:-1;;;;;15567:58:0;;:::i;4117:106::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4117:106:0;-1:-1:-1;;;;;4117:106:0;;:::i;14149:20::-;;;:::i;12266:92::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12266:92:0;-1:-1:-1;;;;;12266:92:0;;:::i;:::-;;12366:77;;;:::i;14772:125::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14772:125:0;;;;;;;;:::i;8025:333::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;8025:333:0;;;;;;;;:::i;4864:140::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;4864:140:0;;;;;;;;:::i;12149:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12149:109:0;-1:-1:-1;;;;;12149:109:0;;:::i;16271:756::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;16271:756:0;;;;;;;;:::i;15786:236::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;15786:236:0;;;;;;;;:::i;4562:131::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;4562:131:0;;;;;;;;;;:::i;14126:18::-;;;;;;;;;;;;;;;-1:-1:-1;;14126:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5651:244::-;5716:4;-1:-1:-1;;;;;5741:21:0;;5733:30;;;;;;5785:10;5776:20;;;;:8;:20;;;;;;;;-1:-1:-1;;;;;5776:29:0;;;;;;;;;;;;:37;;;5829:36;;;;;;;5776:29;;5785:10;5829:36;;;;;;;;;;;-1:-1:-1;5883:4:0;5651:244;;;;:::o;3810:91::-;3881:12;;3810:91;:::o;6368:299::-;-1:-1:-1;;;;;6493:14:0;;6447:4;6493:14;;;:8;:14;;;;;;;;6508:10;6493:26;;;;;;;;:37;;6524:5;6493:37;:30;:37;:::i;:::-;-1:-1:-1;;;;;6464:14:0;;;;;;:8;:14;;;;;;;;6479:10;6464:26;;;;;;;:66;6541:26;6473:4;6557:2;6561:5;6541:9;:26::i;:::-;-1:-1:-1;;;;;6583:54:0;;6610:14;;;;:8;:14;;;;;;;;6598:10;6610:26;;;;;;;;;;;6583:54;;;;;;;6598:10;;6583:54;;;;;;;;;;;;-1:-1:-1;6655:4:0;6368:299;;;;;:::o;14174:26::-;;;;;;:::o;7182:323::-;7262:4;-1:-1:-1;;;;;7287:21:0;;7279:30;;;;;;7363:10;7354:20;;;;:8;:20;;;;;;;;-1:-1:-1;;;;;7354:29:0;;;;;;;;;;:45;;7388:10;7354:45;:33;:45;:::i;:::-;7331:10;7322:20;;;;:8;:20;;;;;;;;-1:-1:-1;;;;;7322:29:0;;;;;;;;;;;;:77;;;7415:60;;;;;;7322:29;;7415:60;;;;;;;;;;;-1:-1:-1;7493:4:0;7182:323;;;;:::o;14324:315::-;14423:4;-1:-1:-1;;;;;14444:19:0;;14458:4;14444:19;;14436:28;;;;;;14471:32;14481:10;14493:2;14497:5;14471:9;:32::i;:::-;14511:12;14528:2;-1:-1:-1;;;;;14528:7:0;14553:3;14566:10;-1:-1:-1;;;;;14558:19:0;14579:5;14586:4;14536:55;;;;;;-1:-1:-1;;;;;14536:55:0;;-1:-1:-1;;;;;14536:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;14536:55:0;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14536:55:0;;;14528:64;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;14528:64:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;14510:82:0;;;14607:7;14599:16;;;;;;-1:-1:-1;14629:4:0;;14324:315;-1:-1:-1;;;;;14324:315:0:o;14645:121::-;14713:4;12100:20;12109:10;12100:8;:20::i;:::-;12092:29;;;;;;14726:16;14732:2;14736:5;14726;:16::i;:::-;-1:-1:-1;14756:4:0;14645:121;;;;:::o;15630:41::-;;;;:::o;15567:58::-;;;;;;;;;;;;;:::o;4117:106::-;-1:-1:-1;;;;;4199:16:0;4172:7;4199:16;;;;;;;;;;;;4117:106::o;14149:20::-;;;;;;;;;;;;;;;-1:-1:-1;;14149:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12266:92;12100:20;12109:10;12100:8;:20::i;:::-;12092:29;;;;;;12331:19;12342:7;12331:10;:19::i;:::-;12266:92;:::o;12366:77::-;12410:25;12424:10;12410:13;:25::i;:::-;12366:77::o;14772:125::-;14842:4;12100:20;12109:10;12100:8;:20::i;:::-;12092:29;;;;;;14855:18;14861:4;14867:5;14855;:18::i;8025:333::-;8110:4;-1:-1:-1;;;;;8135:21:0;;8127:30;;;;;;8211:10;8202:20;;;;:8;:20;;;;;;;;-1:-1:-1;;;;;8202:29:0;;;;;;;;;;:50;;8236:15;8202:50;:33;:50;:::i;4864:140::-;4925:4;4942:32;4952:10;4964:2;4968:5;4942:9;:32::i;12149:109::-;12205:4;12229:21;:8;12242:7;12229:21;:12;:21;:::i;:::-;12222:28;12149:109;-1:-1:-1;;12149:109:0:o;16271:756::-;16360:7;16393:22;;16384:5;:31;;:52;;;;;-1:-1:-1;;;16419:5:0;:17;16384:52;16376:61;;;;;;-1:-1:-1;;;;;16482:29:0;;16444:13;16482:29;;;:22;:29;;;;;;16518:448;16533:3;16525:5;:11;16518:448;;;16547:11;16561:28;16587:1;16561:21;16580:1;16561:14;:5;16571:3;16561:14;:9;:14;:::i;:::-;:18;:21;:18;:21;:::i;:::-;:25;:28;:25;:28;:::i;:::-;-1:-1:-1;;;;;16653:19:0;;;;;;:12;:19;;;;;;;;:24;;;;;;;;;16547:42;;-1:-1:-1;16681:3:0;16653:31;16652:41;-1:-1:-1;16648:311:0;;;16808:10;:3;16816:1;16808:10;:7;:10;:::i;:::-;16802:16;;16648:311;;;16946:3;16938:11;;16648:311;16518:448;;;;16979:42;17008:5;17015;16979:28;:42::i;:::-;16972:49;16271:756;-1:-1:-1;;;;;16271:756:0:o;15786:236::-;-1:-1:-1;;;;;15908:29:0;;15875:7;15908:29;;;:22;:29;;;;;;15899:38;;;15891:47;;;;;;-1:-1:-1;;;;;;15952:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;-1:-1:-1;;;;;15952:45:0;;15786:236::o;4562:131::-;-1:-1:-1;;;;;4661:15:0;;;4634:7;4661:15;;;:8;:15;;;;;;;;:24;;;;;;;;;;;;;4562:131::o;2161:150::-;2219:7;2252:1;2247;:6;;2239:15;;;;;;-1:-1:-1;2277:5:0;;;2161:150::o;17033:235::-;17109:32;17125:4;17131:2;17135:5;17109:15;:32::i;:::-;17173:22;;:29;;17200:1;17173:29;:26;:29;:::i;:::-;17148:22;:54;17209:24;17228:4;17209:18;:24::i;:::-;17240:22;17259:2;17240:18;:22::i;:::-;17033:235;;;:::o;2397:150::-;2455:7;2487:5;;;2511:6;;;;2503:15;;;;;;2538:1;2397:150;-1:-1:-1;;;2397:150:0:o;17274:193::-;17338:28;17350:7;17359:6;17338:11;:28::i;:::-;17398:22;;:29;;17425:1;17398:29;:26;:29;:::i;:::-;17373:22;:54;17434:27;17453:7;17434:18;:27::i;:::-;17274:193;;:::o;12451:122::-;12508:21;:8;12521:7;12508:21;:12;:21;:::i;:::-;12545:20;;-1:-1:-1;;;;;12545:20:0;;;;;;;;12451:122;:::o;12581:130::-;12641:24;:8;12657:7;12641:24;:15;:24;:::i;:::-;12681:22;;-1:-1:-1;;;;;12681:22:0;;;;;;;;12581:130;:::o;17473:193::-;17537:28;17549:7;17558:6;17537:11;:28::i;11513:165::-;11585:4;-1:-1:-1;;;;;11610:21:0;;11602:30;;;;;;-1:-1:-1;;;;;;11650:20:0;:11;:20;;;;;;;;;;;;;;;11513:165::o;1722:303::-;1780:7;1879:1;1875;:5;1867:14;;;;;;1892:9;1908:1;1904;:5;;;;;;;1722:303;-1:-1:-1;;;;1722:303:0:o;8580:262::-;-1:-1:-1;;;;;8668:16:0;;8660:25;;;;;;-1:-1:-1;;;;;8716:15:0;;:9;:15;;;;;;;;;;;:26;;8736:5;8716:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;8698:15:0;;;:9;:15;;;;;;;;;;;:44;;;;8769:13;;;;;;;:24;;8787:5;8769:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;8753:13:0;;;:9;:13;;;;;;;;;;;;:40;;;;8809:25;;;;;;;8753:13;;8809:25;;;;;;;;;;;;;8580:262;;;:::o;17672:433::-;-1:-1:-1;;;;;17756:31:0;;17733:20;17756:31;;;:22;:31;;;;;;;17813:18;17779:7;17813:9;:18::i;:::-;17794:37;;-1:-1:-1;;;17846:8:0;:21;17838:30;;;;;;-1:-1:-1;;;17883:22:0;;:34;17875:43;;;;;;17940:19;:12;17957:1;17940:19;:16;:19;:::i;:::-;-1:-1:-1;;;;;17966:31:0;;;;;;;:22;:31;;;;;;;;:46;;;18058:22;;18019:12;:21;;;;;:35;;;;;;;;;18084:3;18058:29;;;;18057:42;18019:80;;;-1:-1:-1;17672:433:0:o;9194:269::-;-1:-1:-1;;;;;9269:21:0;;9261:30;;;;;;9319:12;;:23;;9336:5;9319:23;:16;:23;:::i;:::-;9304:12;:38;-1:-1:-1;;;;;9374:18:0;;:9;:18;;;;;;;;;;;:29;;9397:5;9374:29;:22;:29;:::i;:::-;-1:-1:-1;;;;;9353:18:0;;:9;:18;;;;;;;;;;;:50;;;;9419:36;;;;;;;9353:18;;:9;;9419:36;;;;;;;;;;9194:269;;:::o;10965:186::-;-1:-1:-1;;;;;11042:21:0;;11034:30;;;;;;11084:18;11088:4;11094:7;11084:3;:18::i;:::-;11083:19;11075:28;;;;;;-1:-1:-1;;;;;11116:20:0;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;11116:27:0;11139:4;11116:27;;;10965:186::o;11230:189::-;-1:-1:-1;;;;;11310:21:0;;11302:30;;;;;;11351:18;11355:4;11361:7;11351:3;:18::i;:::-;11343:27;;;;;;-1:-1:-1;;;;;11383:20:0;11406:5;11383:20;;;;;;;;;;;:28;;-1:-1:-1;;11383:28:0;;;11230:189::o;9697:269::-;-1:-1:-1;;;;;9772:21:0;;9764:30;;;;;;9822:12;;:23;;9839:5;9822:23;:16;:23;:::i;:::-;9807:12;:38;-1:-1:-1;;;;;9877:18:0;;:9;:18;;;;;;;;;;;:29;;9900:5;9877:29;:22;:29;:::i;:::-;-1:-1:-1;;;;;9856:18:0;;:9;:18;;;;;;;;;;;:50;;;;9922:36;;;;;;;9856:9;;9922:36;;;;;;;;;;;9697:269;;:::o

Swarm Source

bzzr://8c832d942f5f6d66aecf620c67bda2dccbe3e9b07502f05bcf01391244f43e6e
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.