ETH Price: $3,318.03 (-1.24%)

Token

BandToken (BAND)
 

Overview

Max Total Supply

100,000,000 BAND

Holders

35,416 ( -0.037%)

Market

Price

$1.35 @ 0.000407 ETH (+0.91%)

Onchain Market Cap

$135,000,000.00

Circulating Supply Market Cap

$195,678,921.00

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Terra Virtua: TVK Token
Balance
186.8 BAND

Value
$252.18 ( ~0.0760029143067302 Eth) [0.0002%]
0xd084b83c305dafd76ae3e1b4e1f1fe2ecccb3988
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):$13,464,102.00
Market Capitalization:$195,678,921.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
Binance
BAND-USDT$1.36
0.0004088 Eth
$2,040,399.00
1,530,824.900 BAND
15.3281%
2
Nami.Exchange
BAND-USDT$1.35
0.0004064 Eth
$1,119,081.00
830,057.100 BAND
8.3113%
3
Nami.Exchange
BAND-VNST$1.36
0.0004085 Eth
$1,075,417.00
793,605.200 BAND
7.9463%
4
WEEX
BAND-USDT$1.35
0.0004060 Eth
$819,430.00
614,383.800 BAND
6.1518%
5
WhiteBIT
BAND-USDT$1.36
0.0004085 Eth
$809,938.00
597,444.410 BAND
5.9822%
6
Ourbit
BAND-USDT$1.36
0.0004097 Eth
$752,680.00
564,314.600 BAND
5.6505%
7
Trubit
BAND-USDT$1.36
0.0004086 Eth
$702,024.00
526,580.100 BAND
5.2726%
8
OKX
BAND-USDT$1.36
0.0004099 Eth
$563,430.00
422,024.141 BAND
4.2257%
9
Coinsbit
BAND-USDT$1.35
0.0004020 Eth
$549,278.00
408,295.782 BAND
4.0882%
10
Bitrue
BAND-USDT$1.35
0.0004080 Eth
$444,256.00
328,168.730 BAND
3.2859%
11
Hotcoin
BAND-USDT$1.35
0.0004083 Eth
$438,608.00
323,739.200 BAND
3.2416%
12
Biconomy.com
BAND-USDT$1.36
0.0004096 Eth
$435,445.00
326,407.547 BAND
3.2683%
13
BYDFi
BAND-USDT$1.36
0.0004096 Eth
$402,779.00
296,606.100 BAND
2.9699%
14
Icrypex
BAND-USDT$1.35
0.0004065 Eth
$335,762.00
248,938.664 BAND
2.4926%
15
Bitazza
BAND-USDT$1.35
0.0004074 Eth
$281,401.00
210,670.000 BAND
2.1094%
16
Coinbase Exchange
BAND-USD$1.36
0.0004097 Eth
$279,714.00
205,823.280 BAND
2.0609%
17
Bitunix
BAND-USDT$1.36
0.0004086 Eth
$264,552.00
195,286.900 BAND
1.9554%
18
XT.COM
BAND-USDT$1.36
0.0004095 Eth
$227,469.00
170,413.600 BAND
1.7063%
19
Toobit
BAND-USDT$1.35
0.0004082 Eth
$204,717.00
153,584.300 BAND
1.5378%
20
HTX
BAND-USDT$1.36
0.0004101 Eth
$201,445.00
150,888.944 BAND
1.5108%
21
FameEX
BAND-USDT$1.35
0.0004065 Eth
$172,840.00
129,623.018 BAND
1.2979%
22
AscendEX (BitMax)
BAND-USDT$1.36
0.0004093 Eth
$145,515.00
107,177.100 BAND
1.0732%
23
BVOX
BAND-USDT$1.35
0.0004082 Eth
$128,261.00
96,123.000 BAND
0.9625%
24
BitMart
BAND-USDT$1.36
0.0004089 Eth
$111,525.00
82,208.840 BAND
0.8232%
25
BTSE
BAND-USDT$1.36
0.0004088 Eth
$108,121.00
79,714.077 BAND
0.7982%
26
DigiFinex
BAND-USDT$1.36
0.0004098 Eth
$104,220.00
76,702.300 BAND
0.7680%
27
Bitget
BAND-USDT$1.36
0.0004102 Eth
$93,523.00
70,118.630 BAND
0.7021%
28
Bitvavo
BAND-EUR$1.35
0.0004079 Eth
$73,296.00
54,159.381 BAND
0.5423%
29
CoinTR
BAND-USDT$1.36
0.0004098 Eth
$71,207.00
53,324.050 BAND
0.5339%
30
Tokenize
BAND-SGD$1.35
0.0004082 Eth
$69,213.00
51,107.648 BAND
0.5117%
31
Tokenize
BAND-USD$1.35
0.0004066 Eth
$69,198.00
51,288.063 BAND
0.5135%
32
LATOKEN
BAND-USDT$1.36
0.0004089 Eth
$66,820.00
49,255.202 BAND
0.4932%
33
Dex-Trade
BAND-USDT$1.36
0.0004085 Eth
$65,467.00
48,301.200 BAND
0.4836%
34
BtcTurk | Kripto
BAND-TRY$1.35
0.0004071 Eth
$61,112.00
45,246.374 BAND
0.4530%
35
Phemex
BAND-USDT$1.35
0.0004080 Eth
$58,410.00
43,148.860 BAND
0.4320%
36
Bitkub
BAND-THB$1.34
0.0004028 Eth
$56,786.00
42,501.471 BAND
0.4256%
37
KuCoin
BAND-USDT$1.36
0.0004091 Eth
$56,213.00
41,417.972 BAND
0.4147%
38
Koinpark
BAND-USDT$1.35
0.0004074 Eth
$52,691.00
38,991.302 BAND
0.3904%
39
BingX
BAND-USDT$1.36
0.0004093 Eth
$50,213.00
37,617.542 BAND
0.3767%
40
P2B
BAND-USDT$1.35
0.0004079 Eth
$43,182.00
31,911.600 BAND
0.3195%
41
BloFin
BAND-USDT$1.36
0.0004088 Eth
$39,235.00
29,384.600 BAND
0.2942%
42
Bilaxy
BAND-USDT$1.36
0.0004097 Eth
$39,123.00
28,779.200 BAND
0.2882%
43
Binance
BAND-BTC$1.35
0.0004074 Eth
$34,722.00
26,046.600 BAND
0.2608%
44
Paribu
BAND-TRY$1.34
0.0004044 Eth
$26,238.00
19,560.460 BAND
0.1959%
45
Crypto.com Exchange
BAND-USD$1.36
0.0004085 Eth
$25,142.00
18,552.200 BAND
0.1858%
46
BtcTurk | Kripto
BAND-USDT$1.34
0.0004044 Eth
$19,409.88
14,466.687 BAND
0.1449%
47
LATOKEN
BAND-BTC$1.34
0.0004058 Eth
$16,141.76
12,003.936 BAND
0.1202%
48
Sushiswap
0XBA11D00C5F74255F56A5E366F4F77F5A186D7F55-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1.35
0.0004080 Eth
$15,688.89
11,613.696 0XBA11D00C5F74255F56A5E366F4F77F5A186D7F55
0.1163%
49
Gate.io
BAND-USDT$1.36
0.0004087 Eth
$15,487.43
11,617.550 BAND
0.1163%
50
Currency.com
BAND-USD$1.36
0.0004098 Eth
$15,228.51
11,203.200 BAND
0.1122%
51
CoinEx
BAND-USDT$1.36
0.0004101 Eth
$13,733.79
10,253.744 BAND
0.1027%
52
Kraken
BAND-USD$1.34
0.0004048 Eth
$13,623.40
10,144.004 BAND
0.1016%
53
Kraken
BAND-EUR$1.34
0.0004051 Eth
$13,604.32
10,122.562 BAND
0.1014%
54
Bit2Me
BAND-EUR$1.34
0.0004050 Eth
$13,141.03
9,920.111 BAND
0.0993%
55
Crypto.com Exchange
BAND-USDT$1.35
0.0004058 Eth
$8,824.41
6,554.400 BAND
0.0656%
56
Kanga
BAND-USDT$1.36
0.0004098 Eth
$8,823.84
0.000 BAND
0.0000%
57
P2B
BAND-USD$1.35
0.0004075 Eth
$7,426.54
5,493.000 BAND
0.0550%
58
Bitazza
BAND-THB$1.35
0.0004073 Eth
$7,074.97
5,273.000 BAND
0.0528%
59
DeGate
0XBA11D00C5F74255F56A5E366F4F77F5A186D7F55-0XA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48$1.36
0.0004091 Eth
$6,025.85
4,529.420 0XBA11D00C5F74255F56A5E366F4F77F5A186D7F55
0.0454%
60
Cryptology
BAND-USDT$1.36
0.0004092 Eth
$5,643.81
4,156.900 BAND
0.0416%
61
OKX
BAND-USDC$1.34
0.0004045 Eth
$4,125.95
3,065.947 BAND
0.0307%
62
Pionex
BAND-USDT$1.36
0.0004102 Eth
$3,937.45
2,951.080 BAND
0.0295%
63
Vindax
BAND-USDT$1.35
0.0004058 Eth
$3,744.20
2,781.400 BAND
0.0279%
64
Binance US
BAND-USDT$1.35
0.0004067 Eth
$3,296.69
2,442.812 BAND
0.0245%
65
CoinEx
BAND-BTC$1.35
0.0004084 Eth
$2,523.01
1,885.411 BAND
0.0189%
66
Indodax
BAND-IDR$1.38
0.0004157 Eth
$2,517.33
1,824.575 BAND
0.0183%
67
Uniswap V2 (Ethereum)
0XBA11D00C5F74255F56A5E366F4F77F5A186D7F55-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$1.32
0.0003979 Eth
$1,791.63
1,341.509 0XBA11D00C5F74255F56A5E366F4F77F5A186D7F55
0.0134%
68
Coinsbit
BAND-BTC$1.34
0.0004021 Eth
$1,171.69
871.368 BAND
0.0087%
69
Dex-Trade
BAND-BTC$1.34
0.0004048 Eth
$1,168.50
871.000 BAND
0.0087%
70
P2B
BAND-BTC$1.33
0.0004260 Eth
$1,026.93
772.800 BAND
0.0077%
71
Korbit
BAND-KRW$1.29
0.0003902 Eth
$1,015.44
775.762 BAND
0.0078%
72
Bitstamp
BAND-EUR$1.34
0.0004051 Eth
$1,006.02
748.550 BAND
0.0075%
73
CoinJar Exchange
BAND-USDC$1.28
0.0004073 Eth
$642.00
500.000 BAND
0.0050%
74
Mercado Bitcoin
BAND-BRL$1.24
0.0003736 Eth
$554.22
447.078 BAND
0.0045%
75
Mudrex
BAND-USDT$1.35
0.0004083 Eth
$475.48
350.990 BAND
0.0035%
76
KuCoin
BAND-BTC$1.34
0.0004035 Eth
$328.31
245.261 BAND
0.0025%
77
Bitstamp
BAND-USD$1.34
0.0004052 Eth
$247.47
184.130 BAND
0.0018%
78
Pionex
BAND-BTC$1.34
0.0004041 Eth
$224.02
168.000 BAND
0.0017%
79
TokoCrypto
BAND-USDT$1.35
0.0004084 Eth
$197.08
145.487 BAND
0.0015%
80
Nominex
BAND-USDT$1.34
0.0004276 Eth
$154.52
115.591 BAND
0.0012%
81
Gate.io
BAND-ETH$1.34
0.0004038 Eth
$124.74
94.315 BAND
0.0009%
82
CoinJar Exchange
BAND-USD$1.29
0.0004103 Eth
$51.52
40.000 BAND
0.0004%
83
CoinJar Exchange
BAND-AUD$1.28
0.0004090 Eth
$51.33
40.000 BAND
0.0004%
84
SpookySwap
0X46E7628E8B4350B2716AB470EE0BA1FA9E76C6C5-0X21BE370D5312F44CB42CE377BC9B8A0CEF1A4C83$0.4048
0.0001220 Eth
$49.02
119.315 0X46E7628E8B4350B2716AB470EE0BA1FA9E76C6C5
0.0012%
85
Orbix
BAND-THB$1.33
0.0004023 Eth
$45.62
34.180 BAND
0.0003%
86
Bittime
BAND-IDR$1.34
0.0004049 Eth
$34.24
24.270 BAND
0.0002%
87
Coinone
BAND-KRW$1.33
0.0003999 Eth
$30.92
23.310 BAND
0.0002%
88
CEX.IO
BAND-USDT$1.36
0.0004086 Eth
$26.87
19.962 BAND
0.0002%
89
CEX.IO
BAND-USD$1.36
0.0004084 Eth
$25.28
18.853 BAND
0.0002%
90
ProBit Global
BAND-USDT$1.028
0.0003100 Eth
$17.15
16.680 BAND
0.0002%
91
CEX.IO
BAND-EUR$1.36
0.0004091 Eth
$14.91
11.090 BAND
0.0001%
92
TokoCrypto
BAND-BTC$1.28
0.0004107 Eth
$12.47
9.733 BAND
0.0001%
93
ProBit Global
BAND-BTC$2.67
0.0008045 Eth
$11.35
4.251 BAND
0.0000%
94
BitBNS
BAND-INR$2.13
0.0006952 Eth
$5.31
2.490 BAND
0.0000%
95
Giottus
BAND-INR$1.32
0.0003946 Eth
$2.66
2.010 BAND
0.0000%
96
Poloniex
BAND-USDT$1.017
0.0003038 Eth
$1.017
1.000 BAND
0.0000%
97
Coinmetro
BAND-USDT$1.36
0.0004098 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.