More Info
Private Name Tags
ContractCreator:
Latest 25 from a total of 513 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 26180160 | 739 days ago | IN | 1 MATIC | 0.0006335 | ||||
Transfer | 15788899 | 1016 days ago | IN | 106.6499889 MATIC | 0.000021 | ||||
Finalize | 15746903 | 1017 days ago | IN | 0 MATIC | 0.00002381 | ||||
Finalize | 15746092 | 1017 days ago | IN | 0 MATIC | 0.00002381 | ||||
Finalize | 15746084 | 1017 days ago | IN | 0 MATIC | 0.00004742 | ||||
Transfer | 15727603 | 1018 days ago | IN | 300 MATIC | 0.0025444 | ||||
Transfer | 15727447 | 1018 days ago | IN | 300 MATIC | 0.00025444 | ||||
Transfer | 15727232 | 1018 days ago | IN | 300 MATIC | 0.00076332 | ||||
Transfer | 15727125 | 1018 days ago | IN | 499 MATIC | 0.076332 | ||||
Transfer | 15727089 | 1018 days ago | IN | 499 MATIC | 0.12722 | ||||
Transfer | 15726954 | 1018 days ago | IN | 500 MATIC | 0.00025444 | ||||
Transfer | 15726892 | 1018 days ago | IN | 499 MATIC | 0.00042 | ||||
Transfer | 15726807 | 1018 days ago | IN | 500 MATIC | 0.00042 | ||||
Transfer | 15726738 | 1018 days ago | IN | 100 MATIC | 0.00042 | ||||
Transfer | 15721550 | 1018 days ago | IN | 50 MATIC | 0.0007196 | ||||
Transfer | 15716830 | 1018 days ago | IN | 18 MATIC | 0.00042 | ||||
Transfer | 15716624 | 1018 days ago | IN | 10 MATIC | 0.00042 | ||||
Transfer | 15716594 | 1018 days ago | IN | 15 MATIC | 0.00042 | ||||
Transfer | 15716316 | 1018 days ago | IN | 15 MATIC | 0.00042 | ||||
Transfer | 15716049 | 1018 days ago | IN | 499.9 MATIC | 0.00008912 | ||||
Transfer | 15715964 | 1018 days ago | IN | 499.9 MATIC | 0.00008912 | ||||
Transfer | 15715886 | 1018 days ago | IN | 200 MATIC | 0.00008906 | ||||
Transfer | 15715858 | 1018 days ago | IN | 50 MATIC | 0.00008906 | ||||
Transfer | 15715781 | 1018 days ago | IN | 300 MATIC | 0.00008906 | ||||
Transfer | 15715688 | 1018 days ago | IN | 499.9 MATIC | 0.00008912 |
Latest 25 internal transactions (View All)
Parent Txn Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
15721550 | 1018 days ago | 50 MATIC | ||||
15716049 | 1018 days ago | 499.9 MATIC | ||||
15715964 | 1018 days ago | 499.9 MATIC | ||||
15715886 | 1018 days ago | 200 MATIC | ||||
15715858 | 1018 days ago | 50 MATIC | ||||
15715781 | 1018 days ago | 300 MATIC | ||||
15715688 | 1018 days ago | 499.9 MATIC | ||||
15715606 | 1018 days ago | 400 MATIC | ||||
15715516 | 1018 days ago | 100 MATIC | ||||
15715487 | 1018 days ago | 499.9 MATIC | ||||
15715316 | 1018 days ago | 425 MATIC | ||||
15714812 | 1018 days ago | 325 MATIC | ||||
15714690 | 1018 days ago | 351 MATIC | ||||
15714554 | 1018 days ago | 499.9 MATIC | ||||
15714408 | 1018 days ago | 499.9 MATIC | ||||
15714360 | 1018 days ago | 499 MATIC | ||||
15714247 | 1018 days ago | 499.9 MATIC | ||||
15714094 | 1018 days ago | 499.91 MATIC | ||||
15714006 | 1018 days ago | 499.9 MATIC | ||||
15713875 | 1018 days ago | 499.9 MATIC | ||||
15713768 | 1018 days ago | 499.9 MATIC | ||||
15713561 | 1018 days ago | 499.9 MATIC | ||||
15713065 | 1018 days ago | 499.9 MATIC | ||||
15712351 | 1018 days ago | 330 MATIC | ||||
15712279 | 1018 days ago | 499.9 MATIC |
Loading...
Loading
Contract Name:
TemplateCrowdsale
Compiler Version
v0.4.24+commit.e67f0147
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-06-13 */ /* * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ pragma solidity ^0.4.23; /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { // Gas optimization: this is cheaper than asserting '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; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } /** * @title Crowdsale * @dev Crowdsale is a base contract for managing a token crowdsale, * allowing investors to purchase tokens with ether. This contract implements * such functionality in its most fundamental form and can be extended to provide additional * functionality and/or custom behavior. * The external interface represents the basic interface for purchasing tokens, and conform * the base architecture for crowdsales. They are *not* intended to be modified / overriden. * The internal interface conforms the extensible and modifiable surface of crowdsales. Override * the methods to add functionality. Consider using 'super' where appropiate to concatenate * behavior. */ contract Crowdsale { using SafeMath for uint256; // The token being sold ERC20 public token; // Address where funds are collected address public wallet; // How many token units a buyer gets per wei. // The rate is the conversion between wei and the smallest and indivisible token unit. // So, if you are using a rate of 1 with a DetailedERC20 token with 3 decimals called TOK // 1 wei will give you 1 unit, or 0.001 TOK. uint256 public rate; // Amount of wei raised uint256 public weiRaised; /** * Event for token purchase logging * @param purchaser who paid for the tokens * @param beneficiary who got the tokens * @param value weis paid for purchase * @param amount amount of tokens purchased */ event TokenPurchase( address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount ); /** * @param _rate Number of token units a buyer gets per wei * @param _wallet Address where collected funds will be forwarded to * @param _token Address of the token being sold */ constructor(uint256 _rate, address _wallet, ERC20 _token) public { require(_rate > 0); require(_wallet != address(0)); require(_token != address(0)); rate = _rate; wallet = _wallet; token = _token; } // ----------------------------------------- // Crowdsale external interface // ----------------------------------------- /** * @dev fallback function ***DO NOT OVERRIDE*** */ function () external payable { buyTokens(msg.sender); } /** * @dev low level token purchase ***DO NOT OVERRIDE*** * @param _beneficiary Address performing the token purchase */ function buyTokens(address _beneficiary) public payable { uint256 weiAmount = msg.value; _preValidatePurchase(_beneficiary, weiAmount); // calculate token amount to be created uint256 tokens = _getTokenAmount(weiAmount); // update state weiRaised = weiRaised.add(weiAmount); _processPurchase(_beneficiary, tokens); emit TokenPurchase( msg.sender, _beneficiary, weiAmount, tokens ); _updatePurchasingState(_beneficiary, weiAmount); _forwardFunds(); _postValidatePurchase(_beneficiary, weiAmount); } // ----------------------------------------- // Internal interface (extensible) // ----------------------------------------- /** * @dev Validation of an incoming purchase. Use require statements to revert state when conditions are not met. Use super to concatenate validations. * @param _beneficiary Address performing the token purchase * @param _weiAmount Value in wei involved in the purchase */ function _preValidatePurchase( address _beneficiary, uint256 _weiAmount ) internal { require(_beneficiary != address(0)); require(_weiAmount != 0); } /** * @dev Validation of an executed purchase. Observe state and use revert statements to undo rollback when valid conditions are not met. * @param _beneficiary Address performing the token purchase * @param _weiAmount Value in wei involved in the purchase */ function _postValidatePurchase( address _beneficiary, uint256 _weiAmount ) internal { // optional override } /** * @dev Source of tokens. Override this method to modify the way in which the crowdsale ultimately gets and sends its tokens. * @param _beneficiary Address performing the token purchase * @param _tokenAmount Number of tokens to be emitted */ function _deliverTokens( address _beneficiary, uint256 _tokenAmount ) internal { token.transfer(_beneficiary, _tokenAmount); } /** * @dev Executed when a purchase has been validated and is ready to be executed. Not necessarily emits/sends tokens. * @param _beneficiary Address receiving the tokens * @param _tokenAmount Number of tokens to be purchased */ function _processPurchase( address _beneficiary, uint256 _tokenAmount ) internal { _deliverTokens(_beneficiary, _tokenAmount); } /** * @dev Override for extensions that require an internal state to check for validity (current user contributions, etc.) * @param _beneficiary Address receiving the tokens * @param _weiAmount Value in wei involved in the purchase */ function _updatePurchasingState( address _beneficiary, uint256 _weiAmount ) internal { // optional override } /** * @dev Override to extend the way in which ether is converted to tokens. * @param _weiAmount Value in wei to be converted into tokens * @return Number of tokens that can be purchased with the specified _weiAmount */ function _getTokenAmount(uint256 _weiAmount) internal view returns (uint256) { return _weiAmount.mul(rate); } /** * @dev Determines how ETH is stored/forwarded on purchases. */ function _forwardFunds() internal { wallet.transfer(msg.value); } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to relinquish control of the contract. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } /** * @title TimedCrowdsale * @dev Crowdsale accepting contributions only within a time frame. */ contract TimedCrowdsale is Crowdsale { using SafeMath for uint256; uint256 public openingTime; uint256 public closingTime; /** * @dev Reverts if not in crowdsale time range. */ modifier onlyWhileOpen { // solium-disable-next-line security/no-block-members require(block.timestamp >= openingTime && block.timestamp <= closingTime); _; } /** * @dev Constructor, takes crowdsale opening and closing times. * @param _openingTime Crowdsale opening time * @param _closingTime Crowdsale closing time */ constructor(uint256 _openingTime, uint256 _closingTime) public { // solium-disable-next-line security/no-block-members require(_openingTime >= block.timestamp); require(_closingTime >= _openingTime); openingTime = _openingTime; closingTime = _closingTime; } /** * @dev Checks whether the period in which the crowdsale is open has already elapsed. * @return Whether crowdsale period has elapsed */ function hasClosed() public view returns (bool) { // solium-disable-next-line security/no-block-members return block.timestamp > closingTime; } /** * @dev Extend parent behavior requiring to be within contributing period * @param _beneficiary Token purchaser * @param _weiAmount Amount of wei contributed */ function _preValidatePurchase( address _beneficiary, uint256 _weiAmount ) internal onlyWhileOpen { super._preValidatePurchase(_beneficiary, _weiAmount); } } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; /** * @dev total number of tokens in existence */ function totalSupply() public view returns (uint256) { return totalSupply_; } /** * @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) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the 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]; } } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @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) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _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) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * @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 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 * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval( address _spender, uint _addedValue ) public returns (bool) { 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 * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval( address _spender, uint _subtractedValue ) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } /** * @title Mintable token * @dev Simple ERC20 Token example, with mintable token creation * @dev Issue: * https://github.com/OpenZeppelin/openzeppelin-solidity/issues/120 * Based on code by TokenMarketNet: https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol */ contract MintableToken is StandardToken, Ownable { event Mint(address indexed to, uint256 amount); event MintFinished(); bool public mintingFinished = false; modifier canMint() { require(!mintingFinished); _; } modifier hasMintPermission() { require(msg.sender == owner); _; } /** * @dev Function to mint tokens * @param _to The address that will receive the minted tokens. * @param _amount The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint( address _to, uint256 _amount ) hasMintPermission canMint public returns (bool) { totalSupply_ = totalSupply_.add(_amount); balances[_to] = balances[_to].add(_amount); emit Mint(_to, _amount); emit Transfer(address(0), _to, _amount); return true; } /** * @dev Function to stop minting new tokens. * @return True if the operation was successful. */ function finishMinting() onlyOwner canMint public returns (bool) { mintingFinished = true; emit MintFinished(); return true; } } contract FreezableToken is StandardToken { // freezing chains mapping (bytes32 => uint64) internal chains; // freezing amounts for each chain mapping (bytes32 => uint) internal freezings; // total freezing balance per address mapping (address => uint) internal freezingBalance; event Freezed(address indexed to, uint64 release, uint amount); event Released(address indexed owner, uint amount); /** * @dev Gets the balance of the specified address include freezing tokens. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256 balance) { return super.balanceOf(_owner) + freezingBalance[_owner]; } /** * @dev Gets the balance of the specified address without freezing tokens. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function actualBalanceOf(address _owner) public view returns (uint256 balance) { return super.balanceOf(_owner); } function freezingBalanceOf(address _owner) public view returns (uint256 balance) { return freezingBalance[_owner]; } /** * @dev gets freezing count * @param _addr Address of freeze tokens owner. */ function freezingCount(address _addr) public view returns (uint count) { uint64 release = chains[toKey(_addr, 0)]; while (release != 0) { count++; release = chains[toKey(_addr, release)]; } } /** * @dev gets freezing end date and freezing balance for the freezing portion specified by index. * @param _addr Address of freeze tokens owner. * @param _index Freezing portion index. It ordered by release date descending. */ function getFreezing(address _addr, uint _index) public view returns (uint64 _release, uint _balance) { for (uint i = 0; i < _index + 1; i++) { _release = chains[toKey(_addr, _release)]; if (_release == 0) { return; } } _balance = freezings[toKey(_addr, _release)]; } /** * @dev freeze your tokens to the specified address. * Be careful, gas usage is not deterministic, * and depends on how many freezes _to address already has. * @param _to Address to which token will be freeze. * @param _amount Amount of token to freeze. * @param _until Release date, must be in future. */ function freezeTo(address _to, uint _amount, uint64 _until) public { require(_to != address(0)); require(_amount <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_amount); bytes32 currentKey = toKey(_to, _until); freezings[currentKey] = freezings[currentKey].add(_amount); freezingBalance[_to] = freezingBalance[_to].add(_amount); freeze(_to, _until); emit Transfer(msg.sender, _to, _amount); emit Freezed(_to, _until, _amount); } /** * @dev release first available freezing tokens. */ function releaseOnce() public { bytes32 headKey = toKey(msg.sender, 0); uint64 head = chains[headKey]; require(head != 0); require(uint64(block.timestamp) > head); bytes32 currentKey = toKey(msg.sender, head); uint64 next = chains[currentKey]; uint amount = freezings[currentKey]; delete freezings[currentKey]; balances[msg.sender] = balances[msg.sender].add(amount); freezingBalance[msg.sender] = freezingBalance[msg.sender].sub(amount); if (next == 0) { delete chains[headKey]; } else { chains[headKey] = next; delete chains[currentKey]; } emit Released(msg.sender, amount); } /** * @dev release all available for release freezing tokens. Gas usage is not deterministic! * @return how many tokens was released */ function releaseAll() public returns (uint tokens) { uint release; uint balance; (release, balance) = getFreezing(msg.sender, 0); while (release != 0 && block.timestamp > release) { releaseOnce(); tokens += balance; (release, balance) = getFreezing(msg.sender, 0); } } function toKey(address _addr, uint _release) internal pure returns (bytes32 result) { // WISH masc to increase entropy result = 0x5749534800000000000000000000000000000000000000000000000000000000; assembly { result := or(result, mul(_addr, 0x10000000000000000)) result := or(result, and(_release, 0xffffffffffffffff)) } } function freeze(address _to, uint64 _until) internal { require(_until > block.timestamp); bytes32 key = toKey(_to, _until); bytes32 parentKey = toKey(_to, uint64(0)); uint64 next = chains[parentKey]; if (next == 0) { chains[parentKey] = _until; return; } bytes32 nextKey = toKey(_to, next); uint parent; while (next != 0 && _until > next) { parent = next; parentKey = nextKey; next = chains[nextKey]; nextKey = toKey(_to, next); } if (_until == next) { return; } if (next != 0) { chains[key] = next; } chains[parentKey] = _until; } } /** * @title Burnable Token * @dev Token that can be irreversibly burned (destroyed). */ contract BurnableToken is BasicToken { event Burn(address indexed burner, uint256 value); /** * @dev Burns a specific amount of tokens. * @param _value The amount of token to be burned. */ function burn(uint256 _value) public { _burn(msg.sender, _value); } function _burn(address _who, uint256 _value) internal { require(_value <= balances[_who]); // no need to require value <= totalSupply, since that would imply the // sender's balance is greater than the totalSupply, which *should* be an assertion failure balances[_who] = balances[_who].sub(_value); totalSupply_ = totalSupply_.sub(_value); emit Burn(_who, _value); emit Transfer(_who, address(0), _value); } } /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() onlyOwner whenNotPaused public { paused = true; emit Pause(); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() onlyOwner whenPaused public { paused = false; emit Unpause(); } } contract FreezableMintableToken is FreezableToken, MintableToken { /** * @dev Mint the specified amount of token to the specified address and freeze it until the specified date. * Be careful, gas usage is not deterministic, * and depends on how many freezes _to address already has. * @param _to Address to which token will be freeze. * @param _amount Amount of token to mint and freeze. * @param _until Release date, must be in future. * @return A boolean that indicates if the operation was successful. */ function mintAndFreeze(address _to, uint _amount, uint64 _until) public onlyOwner canMint returns (bool) { totalSupply_ = totalSupply_.add(_amount); bytes32 currentKey = toKey(_to, _until); freezings[currentKey] = freezings[currentKey].add(_amount); freezingBalance[_to] = freezingBalance[_to].add(_amount); freeze(_to, _until); emit Mint(_to, _amount); emit Freezed(_to, _until, _amount); emit Transfer(msg.sender, _to, _amount); return true; } } contract Consts { uint public constant TOKEN_DECIMALS = 8; uint8 public constant TOKEN_DECIMALS_UINT8 = 8; uint public constant TOKEN_DECIMAL_MULTIPLIER = 10 ** TOKEN_DECIMALS; string public constant TOKEN_NAME = "Kommunitas"; string public constant TOKEN_SYMBOL = "KOM"; bool public constant PAUSED = false; address public constant TARGET_USER = 0xD0e76724838924eeB3E8E3b9c6D49ef9c2e38DbE; uint public constant START_TIME = 1622370600; bool public constant CONTINUE_MINTING = true; } /** * @title FinalizableCrowdsale * @dev Extension of Crowdsale where an owner can do extra work * after finishing. */ contract FinalizableCrowdsale is TimedCrowdsale, Ownable { using SafeMath for uint256; bool public isFinalized = false; event Finalized(); /** * @dev Must be called after crowdsale ends, to do some extra finalization * work. Calls the contract's finalization function. */ function finalize() onlyOwner public { require(!isFinalized); require(hasClosed()); finalization(); emit Finalized(); isFinalized = true; } /** * @dev Can be overridden to add finalization logic. The overriding function * should call super.finalization() to ensure the chain of finalization is * executed entirely. */ function finalization() internal { } } /** * @title CappedCrowdsale * @dev Crowdsale with a limit for total contributions. */ contract CappedCrowdsale is Crowdsale { using SafeMath for uint256; uint256 public cap; /** * @dev Constructor, takes maximum amount of wei accepted in the crowdsale. * @param _cap Max amount of wei to be contributed */ constructor(uint256 _cap) public { require(_cap > 0); cap = _cap; } /** * @dev Checks whether the cap has been reached. * @return Whether the cap was reached */ function capReached() public view returns (bool) { return weiRaised >= cap; } /** * @dev Extend parent behavior requiring purchase to respect the funding cap. * @param _beneficiary Token purchaser * @param _weiAmount Amount of wei contributed */ function _preValidatePurchase( address _beneficiary, uint256 _weiAmount ) internal { super._preValidatePurchase(_beneficiary, _weiAmount); require(weiRaised.add(_weiAmount) <= cap); } } /** * @title MintedCrowdsale * @dev Extension of Crowdsale contract whose tokens are minted in each purchase. * Token ownership should be transferred to MintedCrowdsale for minting. */ contract MintedCrowdsale is Crowdsale { /** * @dev Overrides delivery by minting tokens upon purchase. * @param _beneficiary Token purchaser * @param _tokenAmount Number of tokens to be minted */ function _deliverTokens( address _beneficiary, uint256 _tokenAmount ) internal { require(MintableToken(token).mint(_beneficiary, _tokenAmount)); } } contract MainToken is Consts, FreezableMintableToken, BurnableToken, Pausable { function name() public pure returns (string _name) { return TOKEN_NAME; } function symbol() public pure returns (string _symbol) { return TOKEN_SYMBOL; } function decimals() public pure returns (uint8 _decimals) { return TOKEN_DECIMALS_UINT8; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool _success) { require(!paused); return super.transferFrom(_from, _to, _value); } function transfer(address _to, uint256 _value) public returns (bool _success) { require(!paused); return super.transfer(_to, _value); } } contract MainCrowdsale is Consts, FinalizableCrowdsale, MintedCrowdsale, CappedCrowdsale { function hasStarted() public view returns (bool) { return now >= openingTime; } function startTime() public view returns (uint256) { return openingTime; } function endTime() public view returns (uint256) { return closingTime; } function hasClosed() public view returns (bool) { return super.hasClosed() || capReached(); } function hasEnded() public view returns (bool) { return hasClosed(); } function finalization() internal { super.finalization(); if (PAUSED) { MainToken(token).unpause(); } if (!CONTINUE_MINTING) { require(MintableToken(token).finishMinting()); } Ownable(token).transferOwnership(TARGET_USER); } /** * @dev Override to extend the way in which ether is converted to tokens. * @param _weiAmount Value in wei to be converted into tokens * @return Number of tokens that can be purchased with the specified _weiAmount */ function _getTokenAmount(uint256 _weiAmount) internal view returns (uint256) { return _weiAmount.mul(rate).div(1 ether); } } contract BonusableCrowdsale is Consts, Crowdsale { /** * @dev Override to extend the way in which ether is converted to tokens. * @param _weiAmount Value in wei to be converted into tokens * @return Number of tokens that can be purchased with the specified _weiAmount */ function _getTokenAmount(uint256 _weiAmount) internal view returns (uint256) { uint256 bonusRate = getBonusRate(_weiAmount); return _weiAmount.mul(bonusRate).div(1 ether); } function getBonusRate(uint256 _weiAmount) internal view returns (uint256) { uint256 bonusRate = rate; // apply amount uint[2] memory weiAmountBounds = [uint(500000000000000000000),uint(499000000000000000000)]; uint[2] memory weiAmountRates = [uint(0),uint(50)]; for (uint j = 0; j < 2; j++) { if (_weiAmount >= weiAmountBounds[j]) { bonusRate += bonusRate * weiAmountRates[j] / 1000; break; } } return bonusRate; } } contract TemplateCrowdsale is Consts, MainCrowdsale , BonusableCrowdsale { event Initialized(); event TimesChanged(uint startTime, uint endTime, uint oldStartTime, uint oldEndTime); bool public initialized = false; constructor(MintableToken _token) public Crowdsale(2000 * TOKEN_DECIMAL_MULTIPLIER, 0xD97B5393432597636E3F5b4c7C6C832fF97d58C7, _token) TimedCrowdsale(START_TIME > now ? START_TIME : now, 1623715200) CappedCrowdsale(1000000000000000000000000) { } function init() public onlyOwner { require(!initialized); initialized = true; if (PAUSED) { MainToken(token).pause(); } transferOwnership(TARGET_USER); emit Initialized(); } /** * @dev override hasClosed to add minimal value logic * @return true if remained to achieve less than minimal */ function hasClosed() public view returns (bool) { bool remainValue = cap.sub(weiRaised) < 50000000000000000000; return super.hasClosed() || remainValue; } function setStartTime(uint _startTime) public onlyOwner { // only if CS was not started require(now < openingTime); // only move time to future require(_startTime > openingTime); require(_startTime < closingTime); emit TimesChanged(_startTime, closingTime, openingTime, closingTime); openingTime = _startTime; } function setEndTime(uint _endTime) public onlyOwner { // only if CS was not ended require(now < closingTime); // only if new end time in future require(now < _endTime); require(_endTime > openingTime); emit TimesChanged(openingTime, _endTime, openingTime, closingTime); closingTime = _endTime; } function setTimes(uint _startTime, uint _endTime) public onlyOwner { require(_endTime > _startTime); uint oldStartTime = openingTime; uint oldEndTime = closingTime; bool changed = false; if (_startTime != oldStartTime) { require(_startTime > now); // only if CS was not started require(now < oldStartTime); // only move time to future require(_startTime > oldStartTime); openingTime = _startTime; changed = true; } if (_endTime != oldEndTime) { // only if CS was not ended require(now < oldEndTime); // end time in future require(now < _endTime); closingTime = _endTime; changed = true; } if (changed) { emit TimesChanged(openingTime, _endTime, openingTime, closingTime); } } /** * @dev override purchase validation to add extra value logic. * @return true if sended more than minimal value */ function _preValidatePurchase( address _beneficiary, uint256 _weiAmount ) internal { require(msg.value >= 50000000000000000000); require(msg.value <= 500000000000000000000); super._preValidatePurchase(_beneficiary, _weiAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"CONTINUE_MINTING","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"hasClosed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"initialized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_NAME","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_startTime","type":"uint256"},{"name":"_endTime","type":"uint256"}],"name":"setTimes","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_SYMBOL","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"endTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_startTime","type":"uint256"}],"name":"setStartTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"weiRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"hasStarted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"closingTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finalize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"capReached","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"wallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_DECIMAL_MULTIPLIER","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_DECIMALS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TARGET_USER","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"startTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isFinalized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PAUSED","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"openingTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_endTime","type":"uint256"}],"name":"setEndTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_DECIMALS_UINT8","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"START_TIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"init","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"buyTokens","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"hasEnded","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_token","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"startTime","type":"uint256"},{"indexed":false,"name":"endTime","type":"uint256"},{"indexed":false,"name":"oldStartTime","type":"uint256"},{"indexed":false,"name":"oldEndTime","type":"uint256"}],"name":"TimesChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"Finalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TokenPurchase","type":"event"}]
Contract Creation Code
60806040526006805460a060020a60ff02191690556008805460ff1916905534801561002a57600080fd5b506040516020806110d2833981016040525169d3c21bcecceda1000000426360b3692811610058574261005e565b6360b369285b6360c7ed80642e90edd00073d97b5393432597636e3f5b4c7c6c832ff97d58c785600160a060020a038116151561009457600080fd5b60029290925560018054600160a060020a03928316600160a060020a03199182161790915560008054929093169116179055428210156100d357600080fd5b818110156100e057600080fd5b60049190915560055560068054600160a060020a031916331790556000811161010857600080fd5b60075550610fb78061011b6000396000f30060806040526004361061019f5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416623fd35a81146101aa5780631515bc2b146101d3578063158ef93e146101e857806318821400146101fd57806322434836146102875780632a905318146102a25780632c4e722e146102b75780633197cbb6146102de578063355274ea146102f35780633e0a322d146103085780634042b66f1461032057806344691f7e146103355780634b6753bc1461034a5780634bb278f31461035f5780634f93594514610374578063521eb2731461038957806356780085146103ba5780635b7f415c146103cf578063715018a6146103e4578063726a431a146103f957806378e979251461040e5780638d4e4083146104235780638da5cb5b14610438578063a9aad58c1461044d578063b7a8807c14610462578063ccb98ffc14610477578063cf3b19671461048f578063ddaa26ad146104ba578063e1c7392a146104cf578063ec8ac4d8146104e4578063ecb70fb7146104f8578063f2fde38b1461050d578063fc0c546a1461052e575b6101a833610543565b005b3480156101b657600080fd5b506101bf6105e5565b604080519115158252519081900360200190f35b3480156101df57600080fd5b506101bf6105ea565b3480156101f457600080fd5b506101bf610627565b34801561020957600080fd5b50610212610630565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024c578181015183820152602001610234565b50505050905090810190601f1680156102795780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561029357600080fd5b506101a8600435602435610667565b3480156102ae57600080fd5b50610212610756565b3480156102c357600080fd5b506102cc61078d565b60408051918252519081900360200190f35b3480156102ea57600080fd5b506102cc610793565b3480156102ff57600080fd5b506102cc610799565b34801561031457600080fd5b506101a860043561079f565b34801561032c57600080fd5b506102cc610834565b34801561034157600080fd5b506101bf61083a565b34801561035657600080fd5b506102cc610843565b34801561036b57600080fd5b506101a8610849565b34801561038057600080fd5b506101bf610903565b34801561039557600080fd5b5061039e61090e565b60408051600160a060020a039092168252519081900360200190f35b3480156103c657600080fd5b506102cc61091d565b3480156103db57600080fd5b506102cc610925565b3480156103f057600080fd5b506101a861092a565b34801561040557600080fd5b5061039e610998565b34801561041a57600080fd5b506102cc6109b0565b34801561042f57600080fd5b506101bf6109b6565b34801561044457600080fd5b5061039e6109d7565b34801561045957600080fd5b506101bf6109e6565b34801561046e57600080fd5b506102cc6109eb565b34801561048357600080fd5b506101a86004356109f1565b34801561049b57600080fd5b506104a4610925565b6040805160ff9092168252519081900360200190f35b3480156104c657600080fd5b506102cc610a83565b3480156104db57600080fd5b506101a8610a8b565b6101a8600160a060020a0360043516610543565b34801561050457600080fd5b506101bf610b07565b34801561051957600080fd5b506101a8600160a060020a0360043516610b16565b34801561053a57600080fd5b5061039e610b39565b3460006105508383610b48565b61055982610b82565b60035490915061056f908363ffffffff610bbf16565b60035561057c8382610bd2565b60408051838152602081018390528151600160a060020a0386169233927f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18929081900390910190a36105ce8383610b7e565b6105d6610bdc565b6105e08383610b7e565b505050565b600181565b6000806802b5e3af16b188000061060e600354600754610c1590919063ffffffff16565b109050610619610c27565b806106215750805b91505090565b60085460ff1681565b60408051808201909152600a81527f4b6f6d6d756e6974617300000000000000000000000000000000000000000000602082015281565b60065460009081908190600160a060020a0316331461068557600080fd5b84841161069157600080fd5b505060045460055490915060008483146106d2574285116106b157600080fd5b4283116106bd57600080fd5b8285116106c957600080fd5b50600484905560015b8382146106fa574282116106e557600080fd5b4284116106f157600080fd5b50600583905560015b801561074f576004546005546040805183815260208101889052808201939093526060830191909152517ff6b7151023ee87a6a0cc1f6cea30e02351728911b7b848aa8abde4d1f09172b79181900360800190a15b5050505050565b60408051808201909152600381527f4b4f4d0000000000000000000000000000000000000000000000000000000000602082015281565b60025481565b60055490565b60075481565b600654600160a060020a031633146107b657600080fd5b60045442106107c457600080fd5b60045481116107d257600080fd5b60055481106107e057600080fd5b600554600454604080518481526020810184905280820192909252606082019290925290517ff6b7151023ee87a6a0cc1f6cea30e02351728911b7b848aa8abde4d1f09172b79181900360800190a1600455565b60035481565b60045442101590565b60055481565b600654600160a060020a0316331461086057600080fd5b60065474010000000000000000000000000000000000000000900460ff161561088857600080fd5b6108906105ea565b151561089b57600080fd5b6108a3610c3f565b6040517f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768190600090a16006805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055565b600754600354101590565b600154600160a060020a031681565b6305f5e10081565b600881565b600654600160a060020a0316331461094157600080fd5b600654604051600160a060020a03909116907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a26006805473ffffffffffffffffffffffffffffffffffffffff19169055565b73d0e76724838924eeb3e8e3b9c6d49ef9c2e38dbe81565b60045490565b60065474010000000000000000000000000000000000000000900460ff1681565b600654600160a060020a031681565b600081565b60045481565b600654600160a060020a03163314610a0857600080fd5b6005544210610a1657600080fd5b428111610a2257600080fd5b6004548111610a3057600080fd5b6004546005546040805183815260208101859052808201939093526060830191909152517ff6b7151023ee87a6a0cc1f6cea30e02351728911b7b848aa8abde4d1f09172b79181900360800190a1600555565b6360b3692881565b600654600160a060020a03163314610aa257600080fd5b60085460ff1615610ab257600080fd5b6008805460ff19166001179055610adc73d0e76724838924eeb3e8e3b9c6d49ef9c2e38dbe610b16565b6040517f5daa87a0e9463431830481fd4b6e3403442dfb9a12b9c07597e9f61d50b633c890600090a1565b6000610b116105ea565b905090565b600654600160a060020a03163314610b2d57600080fd5b610b3681610cd5565b50565b600054600160a060020a031681565b6802b5e3af16b1880000341015610b5e57600080fd5b681b1ae4d6e2ef500000341115610b7457600080fd5b610b7e8282610d53565b5050565b600080610b8e83610d7e565b9050610bb8670de0b6b3a7640000610bac858463ffffffff610e3a16565b9063ffffffff610e6316565b9392505050565b81810182811015610bcc57fe5b92915050565b610b7e8282610e78565b600154604051600160a060020a03909116903480156108fc02916000818181858888f19350505050158015610b36573d6000803e3d6000fd5b600082821115610c2157fe5b50900390565b6000610c31610f21565b80610b115750610b11610903565b610c47610f29565b60008054604080517ff2fde38b00000000000000000000000000000000000000000000000000000000815273d0e76724838924eeb3e8e3b9c6d49ef9c2e38dbe60048201529051600160a060020a039092169263f2fde38b9260248084019382900301818387803b158015610cbb57600080fd5b505af1158015610ccf573d6000803e3d6000fd5b50505050565b600160a060020a0381161515610cea57600080fd5b600654604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b610d5d8282610f2b565b600754600354610d73908363ffffffff610bbf16565b1115610b7e57600080fd5b600080610d89610f70565b610d91610f70565b600060025493506040805190810160405280681b1ae4d6e2ef5000008152602001681b0d04202f47ec0000815250925060408051908101604052806000815260200160328152509150600090505b6002811015610e3057828160028110610df457fe5b60200201518610610e28576103e8828260028110610e0e57fe5b60200201518502811515610e1e57fe5b0484019350610e30565b600101610ddf565b5091949350505050565b6000821515610e4b57506000610bcc565b50818102818382811515610e5b57fe5b0414610bcc57fe5b60008183811515610e7057fe5b049392505050565b60008054604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483015260248201869052915191909216926340c10f1992604480820193602093909283900390910190829087803b158015610eea57600080fd5b505af1158015610efe573d6000803e3d6000fd5b505050506040513d6020811015610f1457600080fd5b50511515610b7e57600080fd5b600554421190565b565b6004544210158015610f3f57506005544211155b1515610f4a57600080fd5b610b7e8282600160a060020a0382161515610f6457600080fd5b801515610b7e57600080fd5b604080518082018252906002908290803883395091929150505600a165627a7a7230582038f75dd5118810722e36c31d2266dfd269e7a806ad3af291c5cab1aef42648870029000000000000000000000000c004e2318722ea2b15499d6375905d75ee5390b8
Deployed Bytecode
0x60806040526004361061019f5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416623fd35a81146101aa5780631515bc2b146101d3578063158ef93e146101e857806318821400146101fd57806322434836146102875780632a905318146102a25780632c4e722e146102b75780633197cbb6146102de578063355274ea146102f35780633e0a322d146103085780634042b66f1461032057806344691f7e146103355780634b6753bc1461034a5780634bb278f31461035f5780634f93594514610374578063521eb2731461038957806356780085146103ba5780635b7f415c146103cf578063715018a6146103e4578063726a431a146103f957806378e979251461040e5780638d4e4083146104235780638da5cb5b14610438578063a9aad58c1461044d578063b7a8807c14610462578063ccb98ffc14610477578063cf3b19671461048f578063ddaa26ad146104ba578063e1c7392a146104cf578063ec8ac4d8146104e4578063ecb70fb7146104f8578063f2fde38b1461050d578063fc0c546a1461052e575b6101a833610543565b005b3480156101b657600080fd5b506101bf6105e5565b604080519115158252519081900360200190f35b3480156101df57600080fd5b506101bf6105ea565b3480156101f457600080fd5b506101bf610627565b34801561020957600080fd5b50610212610630565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024c578181015183820152602001610234565b50505050905090810190601f1680156102795780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561029357600080fd5b506101a8600435602435610667565b3480156102ae57600080fd5b50610212610756565b3480156102c357600080fd5b506102cc61078d565b60408051918252519081900360200190f35b3480156102ea57600080fd5b506102cc610793565b3480156102ff57600080fd5b506102cc610799565b34801561031457600080fd5b506101a860043561079f565b34801561032c57600080fd5b506102cc610834565b34801561034157600080fd5b506101bf61083a565b34801561035657600080fd5b506102cc610843565b34801561036b57600080fd5b506101a8610849565b34801561038057600080fd5b506101bf610903565b34801561039557600080fd5b5061039e61090e565b60408051600160a060020a039092168252519081900360200190f35b3480156103c657600080fd5b506102cc61091d565b3480156103db57600080fd5b506102cc610925565b3480156103f057600080fd5b506101a861092a565b34801561040557600080fd5b5061039e610998565b34801561041a57600080fd5b506102cc6109b0565b34801561042f57600080fd5b506101bf6109b6565b34801561044457600080fd5b5061039e6109d7565b34801561045957600080fd5b506101bf6109e6565b34801561046e57600080fd5b506102cc6109eb565b34801561048357600080fd5b506101a86004356109f1565b34801561049b57600080fd5b506104a4610925565b6040805160ff9092168252519081900360200190f35b3480156104c657600080fd5b506102cc610a83565b3480156104db57600080fd5b506101a8610a8b565b6101a8600160a060020a0360043516610543565b34801561050457600080fd5b506101bf610b07565b34801561051957600080fd5b506101a8600160a060020a0360043516610b16565b34801561053a57600080fd5b5061039e610b39565b3460006105508383610b48565b61055982610b82565b60035490915061056f908363ffffffff610bbf16565b60035561057c8382610bd2565b60408051838152602081018390528151600160a060020a0386169233927f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18929081900390910190a36105ce8383610b7e565b6105d6610bdc565b6105e08383610b7e565b505050565b600181565b6000806802b5e3af16b188000061060e600354600754610c1590919063ffffffff16565b109050610619610c27565b806106215750805b91505090565b60085460ff1681565b60408051808201909152600a81527f4b6f6d6d756e6974617300000000000000000000000000000000000000000000602082015281565b60065460009081908190600160a060020a0316331461068557600080fd5b84841161069157600080fd5b505060045460055490915060008483146106d2574285116106b157600080fd5b4283116106bd57600080fd5b8285116106c957600080fd5b50600484905560015b8382146106fa574282116106e557600080fd5b4284116106f157600080fd5b50600583905560015b801561074f576004546005546040805183815260208101889052808201939093526060830191909152517ff6b7151023ee87a6a0cc1f6cea30e02351728911b7b848aa8abde4d1f09172b79181900360800190a15b5050505050565b60408051808201909152600381527f4b4f4d0000000000000000000000000000000000000000000000000000000000602082015281565b60025481565b60055490565b60075481565b600654600160a060020a031633146107b657600080fd5b60045442106107c457600080fd5b60045481116107d257600080fd5b60055481106107e057600080fd5b600554600454604080518481526020810184905280820192909252606082019290925290517ff6b7151023ee87a6a0cc1f6cea30e02351728911b7b848aa8abde4d1f09172b79181900360800190a1600455565b60035481565b60045442101590565b60055481565b600654600160a060020a0316331461086057600080fd5b60065474010000000000000000000000000000000000000000900460ff161561088857600080fd5b6108906105ea565b151561089b57600080fd5b6108a3610c3f565b6040517f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768190600090a16006805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055565b600754600354101590565b600154600160a060020a031681565b6305f5e10081565b600881565b600654600160a060020a0316331461094157600080fd5b600654604051600160a060020a03909116907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a26006805473ffffffffffffffffffffffffffffffffffffffff19169055565b73d0e76724838924eeb3e8e3b9c6d49ef9c2e38dbe81565b60045490565b60065474010000000000000000000000000000000000000000900460ff1681565b600654600160a060020a031681565b600081565b60045481565b600654600160a060020a03163314610a0857600080fd5b6005544210610a1657600080fd5b428111610a2257600080fd5b6004548111610a3057600080fd5b6004546005546040805183815260208101859052808201939093526060830191909152517ff6b7151023ee87a6a0cc1f6cea30e02351728911b7b848aa8abde4d1f09172b79181900360800190a1600555565b6360b3692881565b600654600160a060020a03163314610aa257600080fd5b60085460ff1615610ab257600080fd5b6008805460ff19166001179055610adc73d0e76724838924eeb3e8e3b9c6d49ef9c2e38dbe610b16565b6040517f5daa87a0e9463431830481fd4b6e3403442dfb9a12b9c07597e9f61d50b633c890600090a1565b6000610b116105ea565b905090565b600654600160a060020a03163314610b2d57600080fd5b610b3681610cd5565b50565b600054600160a060020a031681565b6802b5e3af16b1880000341015610b5e57600080fd5b681b1ae4d6e2ef500000341115610b7457600080fd5b610b7e8282610d53565b5050565b600080610b8e83610d7e565b9050610bb8670de0b6b3a7640000610bac858463ffffffff610e3a16565b9063ffffffff610e6316565b9392505050565b81810182811015610bcc57fe5b92915050565b610b7e8282610e78565b600154604051600160a060020a03909116903480156108fc02916000818181858888f19350505050158015610b36573d6000803e3d6000fd5b600082821115610c2157fe5b50900390565b6000610c31610f21565b80610b115750610b11610903565b610c47610f29565b60008054604080517ff2fde38b00000000000000000000000000000000000000000000000000000000815273d0e76724838924eeb3e8e3b9c6d49ef9c2e38dbe60048201529051600160a060020a039092169263f2fde38b9260248084019382900301818387803b158015610cbb57600080fd5b505af1158015610ccf573d6000803e3d6000fd5b50505050565b600160a060020a0381161515610cea57600080fd5b600654604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b610d5d8282610f2b565b600754600354610d73908363ffffffff610bbf16565b1115610b7e57600080fd5b600080610d89610f70565b610d91610f70565b600060025493506040805190810160405280681b1ae4d6e2ef5000008152602001681b0d04202f47ec0000815250925060408051908101604052806000815260200160328152509150600090505b6002811015610e3057828160028110610df457fe5b60200201518610610e28576103e8828260028110610e0e57fe5b60200201518502811515610e1e57fe5b0484019350610e30565b600101610ddf565b5091949350505050565b6000821515610e4b57506000610bcc565b50818102818382811515610e5b57fe5b0414610bcc57fe5b60008183811515610e7057fe5b049392505050565b60008054604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483015260248201869052915191909216926340c10f1992604480820193602093909283900390910190829087803b158015610eea57600080fd5b505af1158015610efe573d6000803e3d6000fd5b505050506040513d6020811015610f1457600080fd5b50511515610b7e57600080fd5b600554421190565b565b6004544210158015610f3f57506005544211155b1515610f4a57600080fd5b610b7e8282600160a060020a0382161515610f6457600080fd5b801515610b7e57600080fd5b604080518082018252906002908290803883395091929150505600a165627a7a7230582038f75dd5118810722e36c31d2266dfd269e7a806ad3af291c5cab1aef42648870029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c004e2318722ea2b15499d6375905d75ee5390b8
-----Decoded View---------------
Arg [0] : _token (address): 0xC004e2318722EA2b15499D6375905d75Ee5390B8
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000c004e2318722ea2b15499d6375905d75ee5390b8
Deployed Bytecode Sourcemap
33910:3443:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5308:21;5318:10;5308:9;:21::i;:::-;33910:3443;28130:44;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28130:44:0;;;;;;;;;;;;;;;;;;;;;;34900:177;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34900:177:0;;;;34143:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34143:31:0;;;;27833:48;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27833:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;27833:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35879:958;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;35879:958:0;;;;;;;27888:43;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27888:43:0;;;;4179:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4179:19:0;;;;;;;;;;;;;;;;;;;;31761:86;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31761:86:0;;;;29215:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29215:18:0;;;;35097:379;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;35097:379:0;;;;;4232:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4232:24:0;;;;31564:93;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31564:93:0;;;;10647:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10647:26:0;;;;28621:171;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28621:171:0;;;;29581:85;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29581:85:0;;;;3871:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3871:21:0;;;;;;;;-1:-1:-1;;;;;3871:21:0;;;;;;;;;;;;;;27756:68;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27756:68:0;;;;27657:39;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27657:39:0;;;;9724:114;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9724:114:0;;;;27980:80;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27980:80:0;;;;31665:88;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31665:88:0;;;;28411:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28411:31:0;;;;9106:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9106:20:0;;;;27938:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27938:35:0;;;;10616:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10616:26:0;;;;35496:363;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;35496:363:0;;;;;27703:46;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27703:46:0;;;;;;;;;;;;;;;;;;;;;;;28073:44;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28073:44:0;;;;34484:263;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34484:263:0;;;;5477:600;;-1:-1:-1;;;;;5477:600:0;;;;;31970:84;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31970:84:0;;;;10006:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10006:105:0;-1:-1:-1;;;;;10006:105:0;;;;;3806:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3806:18:0;;;;5477:600;5562:9;5542:17;5578:45;5599:12;5562:9;5578:20;:45::i;:::-;5694:26;5710:9;5694:15;:26::i;:::-;5762:9;;5677:43;;-1:-1:-1;5762:24:0;;5776:9;5762:24;:13;:24;:::i;:::-;5750:9;:36;5795:38;5812:12;5826:6;5795:16;:38::i;:::-;5845:93;;;;;;;;;;;;;;-1:-1:-1;;;;;5845:93:0;;;5867:10;;5845:93;;;;;;;;;;;5947:47;5970:12;5984:9;5947:22;:47::i;:::-;6003:15;:13;:15::i;:::-;6025:46;6047:12;6061:9;6025:21;:46::i;:::-;5477:600;;;:::o;28130:44::-;28170:4;28130:44;:::o;34900:177::-;34942:4;34959:16;34999:20;34978:18;34986:9;;34978:3;;:7;;:18;;;;:::i;:::-;:41;34959:60;;35037:17;:15;:17::i;:::-;:32;;;;35058:11;35037:32;35030:39;;34900:177;;:::o;34143:31::-;;;;;;:::o;27833:48::-;;;;;;;;;;;;;;;;;;;:::o;35879:958::-;9609:5;;35998:17;;;;;;-1:-1:-1;;;;;9609:5:0;9595:10;:19;9587:28;;;;;;35965:21;;;35957:30;;;;;;-1:-1:-1;;36018:11:0;;36058;;36018;;-1:-1:-1;36095:5:0;36115:26;;;36111:329;;36179:3;36166:16;;36158:25;;;;;;36249:3;:18;-1:-1:-1;36241:27:0;;;;;;36332:25;;;36324:34;;;;;;-1:-1:-1;36375:11:0;:24;;;36424:4;36111:329;36454:22;;;36450:262;;36542:3;:16;-1:-1:-1;36534:25:0;;;;;;36617:3;:14;-1:-1:-1;36609:23:0;;;;;;-1:-1:-1;36649:11:0;:22;;;36696:4;36450:262;36728:7;36724:106;;;36770:11;;36806;;36757:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36724:106;35879:958;;;;;:::o;27888:43::-;;;;;;;;;;;;;;;;;;;:::o;4179:19::-;;;;:::o;31761:86::-;31828:11;;31761:86;:::o;29215:18::-;;;;:::o;35097:379::-;9609:5;;-1:-1:-1;;;;;9609:5:0;9595:10;:19;9587:28;;;;;;35217:11;;35211:3;:17;35203:26;;;;;;35298:11;;35285:24;;35277:33;;;;;;35342:11;;35329:24;;35321:33;;;;;;35395:11;;35408;;35370:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35444:11;:24;35097:379::o;4232:24::-;;;;:::o;31564:93::-;31638:11;;31631:3;:18;;31564:93;:::o;10647:26::-;;;;:::o;28621:171::-;9609:5;;-1:-1:-1;;;;;9609:5:0;9595:10;:19;9587:28;;;;;;28674:11;;;;;;;28673:12;28665:21;;;;;;28701:11;:9;:11::i;:::-;28693:20;;;;;;;;28722:14;:12;:14::i;:::-;28748:11;;;;;;;28768;:18;;-1:-1:-1;;28768:18:0;;;;;28621:171::o;29581:85::-;29657:3;;29644:9;;:16;;29581:85;:::o;3871:21::-;;;-1:-1:-1;;;;;3871:21:0;;:::o;27756:68::-;27804:20;27756:68;:::o;27657:39::-;27695:1;27657:39;:::o;9724:114::-;9609:5;;-1:-1:-1;;;;;9609:5:0;9595:10;:19;9587:28;;;;;;9801:5;;9782:25;;-1:-1:-1;;;;;9801:5:0;;;;9782:25;;9801:5;;9782:25;9814:5;:18;;-1:-1:-1;;9814:18:0;;;9724:114::o;27980:80::-;28018:42;27980:80;:::o;31665:88::-;31734:11;;31665:88;:::o;28411:31::-;;;;;;;;;:::o;9106:20::-;;;-1:-1:-1;;;;;9106:20:0;;:::o;27938:35::-;27968:5;27938:35;:::o;10616:26::-;;;;:::o;35496:363::-;9609:5;;-1:-1:-1;;;;;9609:5:0;9595:10;:19;9587:28;;;;;;35610:11;;35604:3;:17;35596:26;;;;;;35684:3;:14;-1:-1:-1;35676:23:0;;;;;;35729:11;;35718:22;;35710:31;;;;;;35770:11;;35806;;35757:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35829:11;:22;35496:363::o;28073:44::-;28107:10;28073:44;:::o;34484:263::-;9609:5;;-1:-1:-1;;;;;9609:5:0;9595:10;:19;9587:28;;;;;;34537:11;;;;34536:12;34528:21;;;;;;34560:11;:18;;-1:-1:-1;;34560:18:0;34574:4;34560:18;;;34678:30;28018:42;34678:17;:30::i;:::-;34726:13;;;;;;;34484:263::o;31970:84::-;32011:4;32035:11;:9;:11::i;:::-;32028:18;;31970:84;:::o;10006:105::-;9609:5;;-1:-1:-1;;;;;9609:5:0;9595:10;:19;9587:28;;;;;;10076:29;10095:9;10076:18;:29::i;:::-;10006:105;:::o;3806:18::-;;;-1:-1:-1;;;;;3806:18:0;;:::o;37006:338::-;37168:20;37155:9;:33;;37147:42;;;;;;37241:21;37228:9;:34;;37220:43;;;;;;37284:52;37311:12;37325:10;37284:26;:52::i;:::-;37006:338;;:::o;33097:210::-;33174:7;33199:17;33219:24;33232:10;33219:12;:24::i;:::-;33199:44;-1:-1:-1;33261:38:0;33291:7;33261:25;:10;33199:44;33261:25;:14;:25;:::i;:::-;:29;:38;:29;:38;:::i;:::-;33254:45;33097:210;-1:-1:-1;;;33097:210:0:o;2878:127::-;2958:5;;;2977:6;;;;2970:14;;;;2878:127;;;;:::o;7796:157::-;7905:42;7920:12;7934;7905:14;:42::i;8805:73::-;8846:6;;:26;;-1:-1:-1;;;;;8846:6:0;;;;8862:9;8846:26;;;;;:6;:26;:6;:26;8862:9;8846:6;:26;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;2698:113:0;2756:7;2779:6;;;;2772:14;;;;-1:-1:-1;2800:5:0;;;2698:113::o;31855:107::-;31897:4;31921:17;:15;:17::i;:::-;:33;;;;31942:12;:10;:12::i;32062:314::-;32106:20;:18;:20::i;:::-;32331:5;;;32323:45;;;;;;28018:42;32323:45;;;;;;-1:-1:-1;;;;;32331:5:0;;;;32323:32;;:45;;;;;;;;;;32331:5;;32323:45;;;5:2:-1;;;;30:1;27;20:12;5:2;32323:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32323:45:0;;;;32062:314::o;10252:175::-;-1:-1:-1;;;;;10323:23:0;;;;10315:32;;;;;;10380:5;;10359:38;;-1:-1:-1;;;;;10359:38:0;;;;10380:5;;10359:38;;10380:5;;10359:38;10404:5;:17;;-1:-1:-1;;10404:17:0;-1:-1:-1;;;;;10404:17:0;;;;;;;;;;10252:175::o;29859:217::-;29970:52;29997:12;30011:10;29970:26;:52::i;:::-;30066:3;;30037:9;;:25;;30051:10;30037:25;:13;:25;:::i;:::-;:32;;30029:41;;;;;33315:580;33380:7;33400:17;33484:30;;:::i;:::-;33585:29;;:::i;:::-;33653:6;33420:4;;33400:24;;33484:90;;;;;;;;;33523:21;33484:90;;;;33551:21;33484:90;;;;;33585:50;;;;;;;;;33623:1;33585:50;;;;33631:2;33585:50;;;;;33662:1;33653:10;;33648:201;33669:1;33665;:5;33648:201;;;33710:15;33726:1;33710:18;;;;;;;;;;;33696:32;;33692:146;;33794:4;33774:14;33789:1;33774:17;;;;;;;;;;;33762:9;:29;:36;;;;;;;;33749:49;;;;33817:5;;33692:146;33672:3;;33648:201;;;-1:-1:-1;33878:9:0;;33315:580;-1:-1:-1;;;;33315:580:0:o;1833:384::-;1891:9;2121:6;;2117:37;;;-1:-1:-1;2145:1:0;2138:8;;2117:37;-1:-1:-1;2166:5:0;;;2170:1;2166;:5;2185;;;;;;;;:10;2178:18;;;2304:277;2362:7;2574:1;2570;:5;;;;;;;;;2304:277;-1:-1:-1;;;2304:277:0:o;30501:175::-;30630:5;;;30616:53;;;;;;-1:-1:-1;;;;;30616:53:0;;;;;;;;;;;;;;;30630:5;;;;;30616:25;;:53;;;;;;;;;;;;;;;;;;30630:5;30616:53;;;5:2:-1;;;;30:1;27;20:12;5:2;30616:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30616:53:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30616:53:0;30608:62;;;;;;;11553:156;11692:11;;11674:15;:29;11553:156;:::o;28995:39::-;:::o;11898:188::-;10861:11;;10842:15;:30;;:64;;;;;10895:11;;10876:15;:30;;10842:64;10834:73;;;;;;;;12028:52;12055:12;12069:10;-1:-1:-1;;;;;6631:26:0;;;;6623:35;;;;;;6673:15;;;6665:24;;;;;33910:3443;;;;;;;;;;;;;;;105:10:-1;33910:3443:0;88:34:-1;-1:-1;33910:3443:0;;;-1:-1:-1;;33910:3443:0:o
Swarm Source
bzzr://38f75dd5118810722e36c31d2266dfd269e7a806ad3af291c5cab1aef4264887
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.