Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 13 from a total of 13 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Additional B... | 5985800 | 2426 days ago | IN | 0 ETH | 0.00021252 | ||||
Set Ether Usd Ra... | 5985797 | 2426 days ago | IN | 0 ETH | 0.00016468 | ||||
Transfer | 5985755 | 2426 days ago | IN | 0.19743642 ETH | 0.00266557 | ||||
Transfer | 5985656 | 2426 days ago | IN | 0.8437083 ETH | 0.00328057 | ||||
Transfer | 5985529 | 2426 days ago | IN | 0.2 ETH | 0.00328057 | ||||
Transfer | 5985464 | 2426 days ago | IN | 0.12 ETH | 0.00032507 | ||||
Transfer | 5984714 | 2426 days ago | IN | 0.12 ETH | 0.00048008 | ||||
Send Tokens To B... | 5983018 | 2426 days ago | IN | 0 ETH | 0.00054393 | ||||
Transfer | 5979979 | 2427 days ago | IN | 0.1 ETH | 0.00240028 | ||||
Add Bonus Batch | 5979092 | 2427 days ago | IN | 0 ETH | 0.00037636 | ||||
Send Tokens To B... | 5979090 | 2427 days ago | IN | 0 ETH | 0.0002034 | ||||
Send Tokens To | 5979075 | 2427 days ago | IN | 0 ETH | 0.000283 | ||||
Change Times | 5979066 | 2427 days ago | IN | 0 ETH | 0.00013855 |
Latest 6 internal transactions
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
OpiriaCrowdsale
Compiler Version
v0.4.24+commit.e67f0147
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-07-17 */ pragma solidity ^0.4.21; // ----------------- //begin SafeMath.sol /** * @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; } } //end SafeMath.sol // ----------------- //begin Ownable.sol /** * @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. * @notice Renouncing to ownership will leave the contract without an owner. * It will not be possible to call the functions with the `onlyOwner` * modifier anymore. */ 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; } } //end Ownable.sol // ----------------- //begin ERC20Basic.sol /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * 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); } //end ERC20Basic.sol // ----------------- //begin Pausable.sol /** * @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(); } } //end Pausable.sol // ----------------- //begin ERC20.sol /** * @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 ); } //end ERC20.sol // ----------------- //begin BasicToken.sol /** * @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]; } } //end BasicToken.sol // ----------------- //begin StandardToken.sol /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * https://github.com/ethereum/EIPs/issues/20 * 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, uint256 _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, uint256 _subtractedValue ) public returns (bool) { uint256 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; } } //end StandardToken.sol // ----------------- //begin SafeERC20.sol /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { function safeTransfer(ERC20Basic token, address to, uint256 value) internal { require(token.transfer(to, value)); } function safeTransferFrom( ERC20 token, address from, address to, uint256 value ) internal { require(token.transferFrom(from, to, value)); } function safeApprove(ERC20 token, address spender, uint256 value) internal { require(token.approve(spender, value)); } } //end SafeERC20.sol // ----------------- //begin PausableToken.sol /** * @title Pausable token * @dev StandardToken modified with pausable transfers. **/ contract PausableToken is StandardToken, Pausable { function transfer( address _to, uint256 _value ) public whenNotPaused returns (bool) { return super.transfer(_to, _value); } function transferFrom( address _from, address _to, uint256 _value ) public whenNotPaused returns (bool) { return super.transferFrom(_from, _to, _value); } function approve( address _spender, uint256 _value ) public whenNotPaused returns (bool) { return super.approve(_spender, _value); } function increaseApproval( address _spender, uint _addedValue ) public whenNotPaused returns (bool success) { return super.increaseApproval(_spender, _addedValue); } function decreaseApproval( address _spender, uint _subtractedValue ) public whenNotPaused returns (bool success) { return super.decreaseApproval(_spender, _subtractedValue); } } //end PausableToken.sol // ----------------- //begin Crowdsale.sol /** * @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; using SafeERC20 for ERC20; // 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.safeTransfer(_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); } } //end Crowdsale.sol // ----------------- //begin MintableToken.sol /** * @title Mintable token * @dev Simple ERC20 Token example, with mintable token creation * 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; } } //end MintableToken.sol // ----------------- //begin MintedCrowdsale.sol /** * @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)); } } //end MintedCrowdsale.sol // ----------------- //begin TimedCrowdsale.sol /** * @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); } } //end TimedCrowdsale.sol // ----------------- //begin FinalizableCrowdsale.sol /** * @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 { } } //end FinalizableCrowdsale.sol // ----------------- //begin TimedPresaleCrowdsale.sol contract TimedPresaleCrowdsale is FinalizableCrowdsale { using SafeMath for uint256; uint256 public presaleOpeningTime; uint256 public presaleClosingTime; uint256 public bonusUnlockTime; event CrowdsaleTimesChanged(uint256 presaleOpeningTime, uint256 presaleClosingTime, uint256 openingTime, uint256 closingTime); /** * @dev Reverts if not in crowdsale time range. */ modifier onlyWhileOpen { require(isPresale() || isSale()); _; } constructor(uint256 _presaleOpeningTime, uint256 _presaleClosingTime, uint256 _openingTime, uint256 _closingTime) public TimedCrowdsale(_openingTime, _closingTime) { changeTimes(_presaleOpeningTime, _presaleClosingTime, _openingTime, _closingTime); } function changeTimes(uint256 _presaleOpeningTime, uint256 _presaleClosingTime, uint256 _openingTime, uint256 _closingTime) public onlyOwner { require(!isFinalized); require(_presaleClosingTime >= _presaleOpeningTime); require(_openingTime >= _presaleClosingTime); require(_closingTime >= _openingTime); presaleOpeningTime = _presaleOpeningTime; presaleClosingTime = _presaleClosingTime; openingTime = _openingTime; closingTime = _closingTime; emit CrowdsaleTimesChanged(_presaleOpeningTime, _presaleClosingTime, _openingTime, _closingTime); } function isPresale() public view returns (bool) { return now >= presaleOpeningTime && now <= presaleClosingTime; } function isSale() public view returns (bool) { return now >= openingTime && now <= closingTime; } } //end TimedPresaleCrowdsale.sol // ----------------- //begin TokenCappedCrowdsale.sol contract TokenCappedCrowdsale is FinalizableCrowdsale { using SafeMath for uint256; uint256 public cap; uint256 public totalTokens; uint256 public soldTokens = 0; bool public capIncreased = false; event CapIncreased(); constructor() public { cap = 400 * 1000 * 1000 * 1 ether; totalTokens = 750 * 1000 * 1000 * 1 ether; } function notExceedingSaleCap(uint256 amount) internal view returns (bool) { return cap >= amount.add(soldTokens); } /** * Finalization logic. We take the expected sale cap * ether and find the difference from the actual minted tokens. * The remaining balance and the reserved amount for the team are minted * to the team wallet. */ function finalization() internal { super.finalization(); } } //end TokenCappedCrowdsale.sol // ----------------- //begin OpiriaCrowdsale.sol contract OpiriaCrowdsale is TimedPresaleCrowdsale, MintedCrowdsale, TokenCappedCrowdsale { using SafeMath for uint256; uint256 public presaleWeiLimit; address public tokensWallet; uint256 public totalBonus = 0; bool public hiddenCapTriggered; uint16 public additionalBonusPercent = 0; mapping(address => uint256) public bonusOf; // Crowdsale(uint256 _rate, address _wallet, ERC20 _token) constructor(ERC20 _token, uint16 _initialEtherUsdRate, address _wallet, address _tokensWallet, uint256 _presaleOpeningTime, uint256 _presaleClosingTime, uint256 _openingTime, uint256 _closingTime ) public TimedPresaleCrowdsale(_presaleOpeningTime, _presaleClosingTime, _openingTime, _closingTime) Crowdsale(_initialEtherUsdRate, _wallet, _token) { setEtherUsdRate(_initialEtherUsdRate); tokensWallet = _tokensWallet; require(PausableToken(token).paused()); } //overridden function _getTokenAmount(uint256 _weiAmount) internal view returns (uint256) { // 1 ether * etherUsdRate * 10 return _weiAmount.mul(rate).mul(10); } function _getBonusAmount(uint256 tokens) internal view returns (uint256) { uint16 bonusPercent = _getBonusPercent(); uint256 bonusAmount = tokens.mul(bonusPercent).div(100); return bonusAmount; } function _getBonusPercent() internal view returns (uint16) { if (isPresale()) { return 20; } uint256 daysPassed = (now - openingTime) / 1 days; uint16 calcPercent = 0; if (daysPassed < 15) { // daysPassed will be less than 15 so no worries about overflow here calcPercent = (15 - uint8(daysPassed)); } calcPercent = additionalBonusPercent + calcPercent; return calcPercent; } //overridden function _processPurchase(address _beneficiary, uint256 _tokenAmount) internal { _saveBonus(_beneficiary, _tokenAmount); _deliverTokens(_beneficiary, _tokenAmount); soldTokens = soldTokens.add(_tokenAmount); } function _saveBonus(address _beneficiary, uint256 tokens) internal { uint256 bonusAmount = _getBonusAmount(tokens); if (bonusAmount > 0) { totalBonus = totalBonus.add(bonusAmount); soldTokens = soldTokens.add(bonusAmount); bonusOf[_beneficiary] = bonusOf[_beneficiary].add(bonusAmount); } } //overridden function _preValidatePurchase(address _beneficiary, uint256 _weiAmount) internal { super._preValidatePurchase(_beneficiary, _weiAmount); if (isPresale()) { require(_weiAmount >= presaleWeiLimit); } uint256 tokens = _getTokenAmount(_weiAmount); uint256 bonusTokens = _getBonusAmount(tokens); require(notExceedingSaleCap(tokens.add(bonusTokens))); } function setEtherUsdRate(uint16 _etherUsdRate) public onlyOwner { rate = _etherUsdRate; // the presaleWeiLimit must be $5000 in eth at the defined 'etherUsdRate' // presaleWeiLimit = 1 ether / etherUsdRate * 5000 presaleWeiLimit = uint256(1 ether).mul(2500).div(rate); } function setAdditionalBonusPercent(uint8 _additionalBonusPercent) public onlyOwner { additionalBonusPercent = _additionalBonusPercent; } /** * Send tokens by the owner directly to an address. */ function sendTokensTo(uint256 amount, address to) public onlyOwner { require(!isFinalized); require(notExceedingSaleCap(amount)); require(MintableToken(token).mint(to, amount)); soldTokens = soldTokens.add(amount); emit TokenPurchase(msg.sender, to, 0, amount); } function sendTokensToBatch(uint256[] amounts, address[] recipients) public onlyOwner { require(amounts.length == recipients.length); for (uint i = 0; i < recipients.length; i++) { sendTokensTo(amounts[i], recipients[i]); } } function addBonusBatch(uint256[] amounts, address[] recipients) public onlyOwner { for (uint i = 0; i < recipients.length; i++) { require(PausableToken(token).balanceOf(recipients[i]) > 0); require(notExceedingSaleCap(amounts[i])); totalBonus = totalBonus.add(amounts[i]); soldTokens = soldTokens.add(amounts[i]); bonusOf[recipients[i]] = bonusOf[recipients[i]].add(amounts[i]); } } function unlockTokenTransfers() public onlyOwner { require(isFinalized); require(now > closingTime + 30 days); require(PausableToken(token).paused()); bonusUnlockTime = now + 30 days; PausableToken(token).unpause(); } function distributeBonus(address[] addresses) public onlyOwner { require(now > bonusUnlockTime); for (uint i = 0; i < addresses.length; i++) { if (bonusOf[addresses[i]] > 0) { uint256 bonusAmount = bonusOf[addresses[i]]; _deliverTokens(addresses[i], bonusAmount); totalBonus = totalBonus.sub(bonusAmount); bonusOf[addresses[i]] = 0; } } if (totalBonus == 0 && reservedTokensClaimStage == 3) { MintableToken(token).finishMinting(); } } function withdrawBonus() public { require(now > bonusUnlockTime); require(bonusOf[msg.sender] > 0); _deliverTokens(msg.sender, bonusOf[msg.sender]); totalBonus = totalBonus.sub(bonusOf[msg.sender]); bonusOf[msg.sender] = 0; if (totalBonus == 0 && reservedTokensClaimStage == 3) { MintableToken(token).finishMinting(); } } function finalization() internal { super.finalization(); // mint 25% of total Tokens (13% for development, 5% for company/team, 6% for advisors, 2% bounty) into team wallet uint256 toMintNow = totalTokens.mul(25).div(100); if (!capIncreased) { // if the cap didn't increase (according to whitepaper) mint the 50MM tokens to the team wallet too toMintNow = toMintNow.add(50 * 1000 * 1000); } _deliverTokens(tokensWallet, toMintNow); } uint8 public reservedTokensClaimStage = 0; function claimReservedTokens() public onlyOwner { uint256 toMintNow = totalTokens.mul(5).div(100); if (reservedTokensClaimStage == 0) { require(now > closingTime + 6 * 30 days); reservedTokensClaimStage = 1; _deliverTokens(tokensWallet, toMintNow); } else if (reservedTokensClaimStage == 1) { require(now > closingTime + 12 * 30 days); reservedTokensClaimStage = 2; _deliverTokens(tokensWallet, toMintNow); } else if (reservedTokensClaimStage == 2) { require(now > closingTime + 24 * 30 days); reservedTokensClaimStage = 3; _deliverTokens(tokensWallet, toMintNow); if (totalBonus == 0) { MintableToken(token).finishMinting(); MintableToken(token).transferOwnership(owner); } } else { revert(); } } function increaseCap() public onlyOwner { require(!capIncreased); require(!isFinalized); require(now < openingTime + 5 days); capIncreased = true; cap = cap.add(50 * 1000 * 1000); emit CapIncreased(); } function triggerHiddenCap() public onlyOwner { require(!hiddenCapTriggered); require(now > presaleOpeningTime); require(now < presaleClosingTime); presaleClosingTime = now; openingTime = now + 24 hours; hiddenCapTriggered = true; } } //end OpiriaCrowdsale.sol
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[],"name":"tokensWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amounts","type":"uint256[]"},{"name":"recipients","type":"address[]"}],"name":"sendTokensToBatch","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"presaleOpeningTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"presaleWeiLimit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"bonusOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"},{"name":"to","type":"address"}],"name":"sendTokensTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"hasClosed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bonusUnlockTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"additionalBonusPercent","outputs":[{"name":"","type":"uint16"}],"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":"cap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amounts","type":"uint256[]"},{"name":"recipients","type":"address[]"}],"name":"addBonusBatch","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"weiRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_additionalBonusPercent","type":"uint8"}],"name":"setAdditionalBonusPercent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addresses","type":"address[]"}],"name":"distributeBonus","outputs":[],"payable":false,"stateMutability":"nonpayable","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":"wallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"soldTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawBonus","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"presaleClosingTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claimReservedTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unlockTokenTransfers","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_presaleOpeningTime","type":"uint256"},{"name":"_presaleClosingTime","type":"uint256"},{"name":"_openingTime","type":"uint256"},{"name":"_closingTime","type":"uint256"}],"name":"changeTimes","outputs":[],"payable":false,"stateMutability":"nonpayable","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":false,"inputs":[],"name":"increaseCap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isPresale","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_etherUsdRate","type":"uint16"}],"name":"setEtherUsdRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalBonus","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"capIncreased","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"hiddenCapTriggered","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"triggerHiddenCap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"openingTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"reservedTokensClaimStage","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"buyTokens","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isSale","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_token","type":"address"},{"name":"_initialEtherUsdRate","type":"uint16"},{"name":"_wallet","type":"address"},{"name":"_tokensWallet","type":"address"},{"name":"_presaleOpeningTime","type":"uint256"},{"name":"_presaleClosingTime","type":"uint256"},{"name":"_openingTime","type":"uint256"},{"name":"_closingTime","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[],"name":"CapIncreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"presaleOpeningTime","type":"uint256"},{"indexed":false,"name":"presaleClosingTime","type":"uint256"},{"indexed":false,"name":"openingTime","type":"uint256"},{"indexed":false,"name":"closingTime","type":"uint256"}],"name":"CrowdsaleTimesChanged","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
60806040526006805460a060020a60ff02191690556000600c819055600d805460ff199081169091556010919091556011805462ffff00191690556013805490911690553480156200005057600080fd5b506040516101008062001ec383398101604090815281516020830151918301516060840151608085015160a086015160c087015160e090970151949693949293919290919083838383818161ffff8d168c8f60008311620000b057600080fd5b600160a060020a0382161515620000c657600080fd5b600160a060020a0381161515620000dc57600080fd5b60029290925560018054600160a060020a03928316600160a060020a03199182161790915560008054929093169116179055428210156200011c57600080fd5b818110156200012a57600080fd5b60049190915560055560068054600160a060020a031916331790556200015c848484846401000000006200026f810204565b50506b014adf4b7320334b90000000600a5550506b026c62ad77dc602dae000000600b5562000194876401000000006200033b810204565b84600f60006101000a815481600160a060020a030219169083600160a060020a031602179055506000809054906101000a9004600160a060020a0316600160a060020a0316635c975abb6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156200022757600080fd5b505af11580156200023c573d6000803e3d6000fd5b505050506040513d60208110156200025357600080fd5b505115156200026157600080fd5b5050505050505050620003ea565b600654600160a060020a031633146200028757600080fd5b60065474010000000000000000000000000000000000000000900460ff1615620002b057600080fd5b83831015620002be57600080fd5b82821015620002cc57600080fd5b81811015620002da57600080fd5b600784905560088390556004829055600581905560408051858152602081018590528082018490526060810183905290517feb34737ea4f73c1645bdeaa9af7197d2c4391aa3acb8c5d54f971bd80f2f95b49181900360800190a150505050565b600654600160a060020a031633146200035357600080fd5b61ffff811660028190556200039b9062000386670de0b6b3a76400006109c46401000000006200187f620003a182021704565b90640100000000620018a8620003d482021704565b600e5550565b6000821515620003b457506000620003ce565b50818102818382811515620003c557fe5b0414620003ce57fe5b92915050565b60008183811515620003e257fe5b049392505050565b611ac980620003fa6000396000f3006080604052600436106101df5763ffffffff60e060020a60003504166302d8146e81146101ea57806307630eac1461021b57806307f79d38146102a95780630d99edbf146102d05780631283e328146102e55780631292de0b146103065780631515bc2b1461032a5780631d3f90c614610353578063261aa1c5146103685780632c4e722e14610394578063355274ea146103a957806336c8c0e9146103be5780634042b66f1461044c57806347241a27146104615780634a1b504f1461047c5780634b6753bc146104d15780634bb278f3146104e6578063521eb273146104fb5780635ed9ebfc1461051057806366de84ec14610525578063715018a61461053a57806372cfea691461054f57806377248e3d146105645780637b830854146105795780637e1c0c091461058e578063892ad596146105a35780638d4e4083146105c45780638da5cb5b146105d95780638eb717fc146105ee57806395364a84146106035780639d9ab2d814610618578063a8dd07dc14610634578063b41762f914610649578063b50ff2b81461065e578063b5cf852d14610673578063b7a8807c14610688578063df1a5aab1461069d578063ec8ac4d8146106c8578063f2fde38b146106dc578063f8c1c186146106fd578063fc0c546a14610712575b6101e833610727565b005b3480156101f657600080fd5b506101ff6107c9565b60408051600160a060020a039092168252519081900360200190f35b34801561022757600080fd5b50604080516020600480358082013583810280860185019096528085526101e895369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506107d89650505050505050565b3480156102b557600080fd5b506102be61084d565b60408051918252519081900360200190f35b3480156102dc57600080fd5b506102be610853565b3480156102f157600080fd5b506102be600160a060020a0360043516610859565b34801561031257600080fd5b506101e8600435600160a060020a036024351661086b565b34801561033657600080fd5b5061033f6109b9565b604080519115158252519081900360200190f35b34801561035f57600080fd5b506102be6109c1565b34801561037457600080fd5b5061037d6109c7565b6040805161ffff9092168252519081900360200190f35b3480156103a057600080fd5b506102be6109d6565b3480156103b557600080fd5b506102be6109dc565b3480156103ca57600080fd5b50604080516020600480358082013583810280860185019096528085526101e895369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506109e29650505050505050565b34801561045857600080fd5b506102be610bd8565b34801561046d57600080fd5b506101e860ff60043516610bde565b34801561048857600080fd5b50604080516020600480358082013583810280860185019096528085526101e895369593946024949385019291829185019084908082843750949750610c119650505050505050565b3480156104dd57600080fd5b506102be610de7565b3480156104f257600080fd5b506101e8610ded565b34801561050757600080fd5b506101ff610e85565b34801561051c57600080fd5b506102be610e94565b34801561053157600080fd5b506101e8610e9a565b34801561054657600080fd5b506101e8610fac565b34801561055b57600080fd5b506102be61101a565b34801561057057600080fd5b506101e8611020565b34801561058557600080fd5b506101e8611248565b34801561059a57600080fd5b506102be611390565b3480156105af57600080fd5b506101e8600435602435604435606435611396565b3480156105d057600080fd5b5061033f61144c565b3480156105e557600080fd5b506101ff61145c565b3480156105fa57600080fd5b506101e861146b565b34801561060f57600080fd5b5061033f61150e565b34801561062457600080fd5b506101e861ffff60043516611529565b34801561064057600080fd5b506102be61156e565b34801561065557600080fd5b5061033f611574565b34801561066a57600080fd5b5061033f61157d565b34801561067f57600080fd5b506101e8611586565b34801561069457600080fd5b506102be6115e6565b3480156106a957600080fd5b506106b26115ec565b6040805160ff9092168252519081900360200190f35b6101e8600160a060020a0360043516610727565b3480156106e857600080fd5b506101e8600160a060020a03600435166115f5565b34801561070957600080fd5b5061033f611615565b34801561071e57600080fd5b506101ff61162e565b346000610734838361163d565b61073d8261169f565b600354909150610753908363ffffffff6116cd16565b60035561076083826116da565b60408051838152602081018390528151600160a060020a0386169233927f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18929081900390910190a36107b28383610fa7565b6107ba611708565b6107c48383610fa7565b505050565b600f54600160a060020a031681565b600654600090600160a060020a031633146107f257600080fd5b815183511461080057600080fd5b5060005b81518110156107c457610845838281518110151561081e57fe5b90602001906020020151838381518110151561083657fe5b9060200190602002015161086b565b600101610804565b60075481565b600e5481565b60126020526000908152604090205481565b600654600160a060020a0316331461088257600080fd5b60065460a060020a900460ff161561089957600080fd5b6108a282611741565b15156108ad57600080fd5b60008054604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a03858116600483015260248201879052915191909216926340c10f1992604480820193602093909283900390910190829087803b15801561091f57600080fd5b505af1158015610933573d6000803e3d6000fd5b505050506040513d602081101561094957600080fd5b5051151561095657600080fd5b600c54610969908363ffffffff6116cd16565b600c556040805160008152602081018490528151600160a060020a0384169233927f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18929081900390910190a35050565b600554421190565b60095481565b601154610100900461ffff1681565b60025481565b600a5481565b600654600090600160a060020a031633146109fc57600080fd5b5060005b81518110156107c457600080548351600160a060020a03909116906370a0823190859085908110610a2d57fe5b906020019060200201516040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015610a8257600080fd5b505af1158015610a96573d6000803e3d6000fd5b505050506040513d6020811015610aac57600080fd5b505111610ab857600080fd5b610ad88382815181101515610ac957fe5b90602001906020020151611741565b1515610ae357600080fd5b610b0d8382815181101515610af457fe5b602090810290910101516010549063ffffffff6116cd16565b6010558251610b3b90849083908110610b2257fe5b60209081029091010151600c549063ffffffff6116cd16565b600c558251610b9b90849083908110610b5057fe5b90602001906020020151601260008585815181101515610b6c57fe5b6020908102909101810151600160a060020a03168252810191909152604001600020549063ffffffff6116cd16565b601260008484815181101515610bad57fe5b6020908102909101810151600160a060020a0316825281019190915260400160002055600101610a00565b60035481565b600654600160a060020a03163314610bf557600080fd5b6011805462ffff00191660ff9290921661010002919091179055565b6006546000908190600160a060020a03163314610c2d57600080fd5b6009544211610c3b57600080fd5b600091505b8251821015610d4a576000601260008585815181101515610c5d57fe5b90602001906020020151600160a060020a0316600160a060020a03168152602001908152602001600020541115610d3f57601260008484815181101515610ca057fe5b90602001906020020151600160a060020a0316600160a060020a03168152602001908152602001600020549050610cee8383815181101515610cde57fe5b9060200190602002015182611763565b601054610d01908263ffffffff61180c16565b6010819055506000601260008585815181101515610d1b57fe5b6020908102909101810151600160a060020a03168252810191909152604001600020555b600190910190610c40565b601054158015610d5f575060135460ff166003145b156107c4576000809054906101000a9004600160a060020a0316600160a060020a0316637d64bcb46040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610db657600080fd5b505af1158015610dca573d6000803e3d6000fd5b505050506040513d6020811015610de057600080fd5b5050505050565b60055481565b600654600160a060020a03163314610e0457600080fd5b60065460a060020a900460ff1615610e1b57600080fd5b610e236109b9565b1515610e2e57600080fd5b610e3661181e565b6040517f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768190600090a16006805474ff0000000000000000000000000000000000000000191660a060020a179055565b600154600160a060020a031681565b600c5481565b6009544211610ea857600080fd5b3360009081526012602052604081205411610ec257600080fd5b33600081815260126020526040902054610edc9190611763565b33600090815260126020526040902054601054610efe9163ffffffff61180c16565b60109081553360009081526012602052604081205554158015610f26575060135460ff166003145b15610faa576000809054906101000a9004600160a060020a0316600160a060020a0316637d64bcb46040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610f7d57600080fd5b505af1158015610f91573d6000803e3d6000fd5b505050506040513d6020811015610fa757600080fd5b50505b565b600654600160a060020a03163314610fc357600080fd5b600654604051600160a060020a03909116907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a26006805473ffffffffffffffffffffffffffffffffffffffff19169055565b60085481565b600654600090600160a060020a0316331461103a57600080fd5b61106160646110556005600b5461187f90919063ffffffff16565b9063ffffffff6118a816565b60135490915060ff1615156110ab5760055462ed4e0001421161108357600080fd5b6013805460ff19166001179055600f546110a690600160a060020a031682611763565b611245565b60135460ff16600114156110f0576005546301da9c000142116110cd57600080fd5b6013805460ff19166002179055600f546110a690600160a060020a031682611763565b60135460ff1660021415611240576005546303b5380001421161111257600080fd5b6013805460ff19166003179055600f5461113590600160a060020a031682611763565b60105415156110a6576000809054906101000a9004600160a060020a0316600160a060020a0316637d64bcb46040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561119057600080fd5b505af11580156111a4573d6000803e3d6000fd5b505050506040513d60208110156111ba57600080fd5b505060008054600654604080517ff2fde38b000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201529051919092169263f2fde38b926024808201939182900301818387803b15801561122357600080fd5b505af1158015611237573d6000803e3d6000fd5b50505050611245565b600080fd5b50565b600654600160a060020a0316331461125f57600080fd5b60065460a060020a900460ff16151561127757600080fd5b60055462278d0001421161128a57600080fd5b6000809054906101000a9004600160a060020a0316600160a060020a0316635c975abb6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156112dc57600080fd5b505af11580156112f0573d6000803e3d6000fd5b505050506040513d602081101561130657600080fd5b5051151561131357600080fd5b62278d00420160095560008054604080517f3f4ba83a0000000000000000000000000000000000000000000000000000000081529051600160a060020a0390921692633f4ba83a9260048084019382900301818387803b15801561137657600080fd5b505af115801561138a573d6000803e3d6000fd5b50505050565b600b5481565b600654600160a060020a031633146113ad57600080fd5b60065460a060020a900460ff16156113c457600080fd5b838310156113d157600080fd5b828210156113de57600080fd5b818110156113eb57600080fd5b600784905560088390556004829055600581905560408051858152602081018590528082018490526060810183905290517feb34737ea4f73c1645bdeaa9af7197d2c4391aa3acb8c5d54f971bd80f2f95b49181900360800190a150505050565b60065460a060020a900460ff1681565b600654600160a060020a031681565b600654600160a060020a0316331461148257600080fd5b600d5460ff161561149257600080fd5b60065460a060020a900460ff16156114a957600080fd5b600454620697800142106114bc57600080fd5b600d805460ff19166001179055600a546114e0906302faf08063ffffffff6116cd16565b600a556040517f2bd5b8e88194e07ffe78e7daea77cbc4591bd16a4cdb793e45c8ff5b3f03668c90600090a1565b6000600754421015801561152457506008544211155b905090565b600654600160a060020a0316331461154057600080fd5b61ffff8116600281905561156890611055670de0b6b3a76400006109c463ffffffff61187f16565b600e5550565b60105481565b600d5460ff1681565b60115460ff1681565b600654600160a060020a0316331461159d57600080fd5b60115460ff16156115ad57600080fd5b60075442116115bb57600080fd5b60085442106115c957600080fd5b42600881905562015180016004556011805460ff19166001179055565b60045481565b60135460ff1681565b600654600160a060020a0316331461160c57600080fd5b611245816118bd565b6000600454421015801561152457505060055442111590565b600054600160a060020a031681565b60008061164a848461193b565b61165261150e565b1561166657600e5483101561166657600080fd5b61166f8361169f565b915061167a82611966565b905061169461168f838363ffffffff6116cd16565b611741565b151561138a57600080fd5b60006116c7600a6116bb6002548561187f90919063ffffffff16565b9063ffffffff61187f16565b92915050565b818101828110156116c757fe5b6116e48282611996565b6116ee8282611763565b600c54611701908263ffffffff6116cd16565b600c555050565b600154604051600160a060020a03909116903480156108fc02916000818181858888f19350505050158015611245573d6000803e3d6000fd5b6000611758600c54836116cd90919063ffffffff16565b600a54101592915050565b60008054604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483015260248201869052915191909216926340c10f1992604480820193602093909283900390910190829087803b1580156117d557600080fd5b505af11580156117e9573d6000803e3d6000fd5b505050506040513d60208110156117ff57600080fd5b50511515610fa757600080fd5b60008282111561181857fe5b50900390565b6000611828611a1f565b61184360646110556019600b5461187f90919063ffffffff16565b600d5490915060ff16151561186957611866816302faf08063ffffffff6116cd16565b90505b600f5461124590600160a060020a031682611763565b6000821515611890575060006116c7565b508181028183828115156118a057fe5b04146116c757fe5b600081838115156118b557fe5b049392505050565b600160a060020a03811615156118d257600080fd5b600654604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b61194361150e565b806119515750611951611615565b151561195c57600080fd5b610fa78282611a27565b6000806000611973611a48565b915061198e60646110558661ffff861663ffffffff61187f16565b949350505050565b60006119a182611966565b905060008111156107c4576010546119bf908263ffffffff6116cd16565b601055600c546119d5908263ffffffff6116cd16565b600c55600160a060020a038316600090815260126020526040902054611a01908263ffffffff6116cd16565b600160a060020a038416600090815260126020526040902055505050565b610faa610faa565b600160a060020a0382161515611a3c57600080fd5b801515610fa757600080fd5b6000806000611a5561150e565b15611a635760149250611a98565b6004546201518090420304915060009050600f821015611a875781600f0360ff1690505b601154610100900461ffff16019150815b5050905600a165627a7a723058200760f28c9d2329e271905b867d5ffa027c4f442684371c435643020b572046bb002900000000000000000000000019ebe53e7032833fa2ee880fb743a8a5df43724400000000000000000000000000000000000000000000000000000000000001c200000000000000000000000090e12b3066b55bc69c92c2373cc229ae93d835ac0000000000000000000000004afa677075d7260dc810bc3bf9c032c3f20331a8000000000000000000000000000000000000000000000000000000005b38a620000000000000000000000000000000000000000000000000000000005b38a621000000000000000000000000000000000000000000000000000000005b4d89ed000000000000000000000000000000000000000000000000000000005b530420
Deployed Bytecode
0x6080604052600436106101df5763ffffffff60e060020a60003504166302d8146e81146101ea57806307630eac1461021b57806307f79d38146102a95780630d99edbf146102d05780631283e328146102e55780631292de0b146103065780631515bc2b1461032a5780631d3f90c614610353578063261aa1c5146103685780632c4e722e14610394578063355274ea146103a957806336c8c0e9146103be5780634042b66f1461044c57806347241a27146104615780634a1b504f1461047c5780634b6753bc146104d15780634bb278f3146104e6578063521eb273146104fb5780635ed9ebfc1461051057806366de84ec14610525578063715018a61461053a57806372cfea691461054f57806377248e3d146105645780637b830854146105795780637e1c0c091461058e578063892ad596146105a35780638d4e4083146105c45780638da5cb5b146105d95780638eb717fc146105ee57806395364a84146106035780639d9ab2d814610618578063a8dd07dc14610634578063b41762f914610649578063b50ff2b81461065e578063b5cf852d14610673578063b7a8807c14610688578063df1a5aab1461069d578063ec8ac4d8146106c8578063f2fde38b146106dc578063f8c1c186146106fd578063fc0c546a14610712575b6101e833610727565b005b3480156101f657600080fd5b506101ff6107c9565b60408051600160a060020a039092168252519081900360200190f35b34801561022757600080fd5b50604080516020600480358082013583810280860185019096528085526101e895369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506107d89650505050505050565b3480156102b557600080fd5b506102be61084d565b60408051918252519081900360200190f35b3480156102dc57600080fd5b506102be610853565b3480156102f157600080fd5b506102be600160a060020a0360043516610859565b34801561031257600080fd5b506101e8600435600160a060020a036024351661086b565b34801561033657600080fd5b5061033f6109b9565b604080519115158252519081900360200190f35b34801561035f57600080fd5b506102be6109c1565b34801561037457600080fd5b5061037d6109c7565b6040805161ffff9092168252519081900360200190f35b3480156103a057600080fd5b506102be6109d6565b3480156103b557600080fd5b506102be6109dc565b3480156103ca57600080fd5b50604080516020600480358082013583810280860185019096528085526101e895369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506109e29650505050505050565b34801561045857600080fd5b506102be610bd8565b34801561046d57600080fd5b506101e860ff60043516610bde565b34801561048857600080fd5b50604080516020600480358082013583810280860185019096528085526101e895369593946024949385019291829185019084908082843750949750610c119650505050505050565b3480156104dd57600080fd5b506102be610de7565b3480156104f257600080fd5b506101e8610ded565b34801561050757600080fd5b506101ff610e85565b34801561051c57600080fd5b506102be610e94565b34801561053157600080fd5b506101e8610e9a565b34801561054657600080fd5b506101e8610fac565b34801561055b57600080fd5b506102be61101a565b34801561057057600080fd5b506101e8611020565b34801561058557600080fd5b506101e8611248565b34801561059a57600080fd5b506102be611390565b3480156105af57600080fd5b506101e8600435602435604435606435611396565b3480156105d057600080fd5b5061033f61144c565b3480156105e557600080fd5b506101ff61145c565b3480156105fa57600080fd5b506101e861146b565b34801561060f57600080fd5b5061033f61150e565b34801561062457600080fd5b506101e861ffff60043516611529565b34801561064057600080fd5b506102be61156e565b34801561065557600080fd5b5061033f611574565b34801561066a57600080fd5b5061033f61157d565b34801561067f57600080fd5b506101e8611586565b34801561069457600080fd5b506102be6115e6565b3480156106a957600080fd5b506106b26115ec565b6040805160ff9092168252519081900360200190f35b6101e8600160a060020a0360043516610727565b3480156106e857600080fd5b506101e8600160a060020a03600435166115f5565b34801561070957600080fd5b5061033f611615565b34801561071e57600080fd5b506101ff61162e565b346000610734838361163d565b61073d8261169f565b600354909150610753908363ffffffff6116cd16565b60035561076083826116da565b60408051838152602081018390528151600160a060020a0386169233927f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18929081900390910190a36107b28383610fa7565b6107ba611708565b6107c48383610fa7565b505050565b600f54600160a060020a031681565b600654600090600160a060020a031633146107f257600080fd5b815183511461080057600080fd5b5060005b81518110156107c457610845838281518110151561081e57fe5b90602001906020020151838381518110151561083657fe5b9060200190602002015161086b565b600101610804565b60075481565b600e5481565b60126020526000908152604090205481565b600654600160a060020a0316331461088257600080fd5b60065460a060020a900460ff161561089957600080fd5b6108a282611741565b15156108ad57600080fd5b60008054604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a03858116600483015260248201879052915191909216926340c10f1992604480820193602093909283900390910190829087803b15801561091f57600080fd5b505af1158015610933573d6000803e3d6000fd5b505050506040513d602081101561094957600080fd5b5051151561095657600080fd5b600c54610969908363ffffffff6116cd16565b600c556040805160008152602081018490528151600160a060020a0384169233927f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18929081900390910190a35050565b600554421190565b60095481565b601154610100900461ffff1681565b60025481565b600a5481565b600654600090600160a060020a031633146109fc57600080fd5b5060005b81518110156107c457600080548351600160a060020a03909116906370a0823190859085908110610a2d57fe5b906020019060200201516040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015610a8257600080fd5b505af1158015610a96573d6000803e3d6000fd5b505050506040513d6020811015610aac57600080fd5b505111610ab857600080fd5b610ad88382815181101515610ac957fe5b90602001906020020151611741565b1515610ae357600080fd5b610b0d8382815181101515610af457fe5b602090810290910101516010549063ffffffff6116cd16565b6010558251610b3b90849083908110610b2257fe5b60209081029091010151600c549063ffffffff6116cd16565b600c558251610b9b90849083908110610b5057fe5b90602001906020020151601260008585815181101515610b6c57fe5b6020908102909101810151600160a060020a03168252810191909152604001600020549063ffffffff6116cd16565b601260008484815181101515610bad57fe5b6020908102909101810151600160a060020a0316825281019190915260400160002055600101610a00565b60035481565b600654600160a060020a03163314610bf557600080fd5b6011805462ffff00191660ff9290921661010002919091179055565b6006546000908190600160a060020a03163314610c2d57600080fd5b6009544211610c3b57600080fd5b600091505b8251821015610d4a576000601260008585815181101515610c5d57fe5b90602001906020020151600160a060020a0316600160a060020a03168152602001908152602001600020541115610d3f57601260008484815181101515610ca057fe5b90602001906020020151600160a060020a0316600160a060020a03168152602001908152602001600020549050610cee8383815181101515610cde57fe5b9060200190602002015182611763565b601054610d01908263ffffffff61180c16565b6010819055506000601260008585815181101515610d1b57fe5b6020908102909101810151600160a060020a03168252810191909152604001600020555b600190910190610c40565b601054158015610d5f575060135460ff166003145b156107c4576000809054906101000a9004600160a060020a0316600160a060020a0316637d64bcb46040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610db657600080fd5b505af1158015610dca573d6000803e3d6000fd5b505050506040513d6020811015610de057600080fd5b5050505050565b60055481565b600654600160a060020a03163314610e0457600080fd5b60065460a060020a900460ff1615610e1b57600080fd5b610e236109b9565b1515610e2e57600080fd5b610e3661181e565b6040517f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768190600090a16006805474ff0000000000000000000000000000000000000000191660a060020a179055565b600154600160a060020a031681565b600c5481565b6009544211610ea857600080fd5b3360009081526012602052604081205411610ec257600080fd5b33600081815260126020526040902054610edc9190611763565b33600090815260126020526040902054601054610efe9163ffffffff61180c16565b60109081553360009081526012602052604081205554158015610f26575060135460ff166003145b15610faa576000809054906101000a9004600160a060020a0316600160a060020a0316637d64bcb46040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610f7d57600080fd5b505af1158015610f91573d6000803e3d6000fd5b505050506040513d6020811015610fa757600080fd5b50505b565b600654600160a060020a03163314610fc357600080fd5b600654604051600160a060020a03909116907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a26006805473ffffffffffffffffffffffffffffffffffffffff19169055565b60085481565b600654600090600160a060020a0316331461103a57600080fd5b61106160646110556005600b5461187f90919063ffffffff16565b9063ffffffff6118a816565b60135490915060ff1615156110ab5760055462ed4e0001421161108357600080fd5b6013805460ff19166001179055600f546110a690600160a060020a031682611763565b611245565b60135460ff16600114156110f0576005546301da9c000142116110cd57600080fd5b6013805460ff19166002179055600f546110a690600160a060020a031682611763565b60135460ff1660021415611240576005546303b5380001421161111257600080fd5b6013805460ff19166003179055600f5461113590600160a060020a031682611763565b60105415156110a6576000809054906101000a9004600160a060020a0316600160a060020a0316637d64bcb46040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561119057600080fd5b505af11580156111a4573d6000803e3d6000fd5b505050506040513d60208110156111ba57600080fd5b505060008054600654604080517ff2fde38b000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201529051919092169263f2fde38b926024808201939182900301818387803b15801561122357600080fd5b505af1158015611237573d6000803e3d6000fd5b50505050611245565b600080fd5b50565b600654600160a060020a0316331461125f57600080fd5b60065460a060020a900460ff16151561127757600080fd5b60055462278d0001421161128a57600080fd5b6000809054906101000a9004600160a060020a0316600160a060020a0316635c975abb6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156112dc57600080fd5b505af11580156112f0573d6000803e3d6000fd5b505050506040513d602081101561130657600080fd5b5051151561131357600080fd5b62278d00420160095560008054604080517f3f4ba83a0000000000000000000000000000000000000000000000000000000081529051600160a060020a0390921692633f4ba83a9260048084019382900301818387803b15801561137657600080fd5b505af115801561138a573d6000803e3d6000fd5b50505050565b600b5481565b600654600160a060020a031633146113ad57600080fd5b60065460a060020a900460ff16156113c457600080fd5b838310156113d157600080fd5b828210156113de57600080fd5b818110156113eb57600080fd5b600784905560088390556004829055600581905560408051858152602081018590528082018490526060810183905290517feb34737ea4f73c1645bdeaa9af7197d2c4391aa3acb8c5d54f971bd80f2f95b49181900360800190a150505050565b60065460a060020a900460ff1681565b600654600160a060020a031681565b600654600160a060020a0316331461148257600080fd5b600d5460ff161561149257600080fd5b60065460a060020a900460ff16156114a957600080fd5b600454620697800142106114bc57600080fd5b600d805460ff19166001179055600a546114e0906302faf08063ffffffff6116cd16565b600a556040517f2bd5b8e88194e07ffe78e7daea77cbc4591bd16a4cdb793e45c8ff5b3f03668c90600090a1565b6000600754421015801561152457506008544211155b905090565b600654600160a060020a0316331461154057600080fd5b61ffff8116600281905561156890611055670de0b6b3a76400006109c463ffffffff61187f16565b600e5550565b60105481565b600d5460ff1681565b60115460ff1681565b600654600160a060020a0316331461159d57600080fd5b60115460ff16156115ad57600080fd5b60075442116115bb57600080fd5b60085442106115c957600080fd5b42600881905562015180016004556011805460ff19166001179055565b60045481565b60135460ff1681565b600654600160a060020a0316331461160c57600080fd5b611245816118bd565b6000600454421015801561152457505060055442111590565b600054600160a060020a031681565b60008061164a848461193b565b61165261150e565b1561166657600e5483101561166657600080fd5b61166f8361169f565b915061167a82611966565b905061169461168f838363ffffffff6116cd16565b611741565b151561138a57600080fd5b60006116c7600a6116bb6002548561187f90919063ffffffff16565b9063ffffffff61187f16565b92915050565b818101828110156116c757fe5b6116e48282611996565b6116ee8282611763565b600c54611701908263ffffffff6116cd16565b600c555050565b600154604051600160a060020a03909116903480156108fc02916000818181858888f19350505050158015611245573d6000803e3d6000fd5b6000611758600c54836116cd90919063ffffffff16565b600a54101592915050565b60008054604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483015260248201869052915191909216926340c10f1992604480820193602093909283900390910190829087803b1580156117d557600080fd5b505af11580156117e9573d6000803e3d6000fd5b505050506040513d60208110156117ff57600080fd5b50511515610fa757600080fd5b60008282111561181857fe5b50900390565b6000611828611a1f565b61184360646110556019600b5461187f90919063ffffffff16565b600d5490915060ff16151561186957611866816302faf08063ffffffff6116cd16565b90505b600f5461124590600160a060020a031682611763565b6000821515611890575060006116c7565b508181028183828115156118a057fe5b04146116c757fe5b600081838115156118b557fe5b049392505050565b600160a060020a03811615156118d257600080fd5b600654604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b61194361150e565b806119515750611951611615565b151561195c57600080fd5b610fa78282611a27565b6000806000611973611a48565b915061198e60646110558661ffff861663ffffffff61187f16565b949350505050565b60006119a182611966565b905060008111156107c4576010546119bf908263ffffffff6116cd16565b601055600c546119d5908263ffffffff6116cd16565b600c55600160a060020a038316600090815260126020526040902054611a01908263ffffffff6116cd16565b600160a060020a038416600090815260126020526040902055505050565b610faa610faa565b600160a060020a0382161515611a3c57600080fd5b801515610fa757600080fd5b6000806000611a5561150e565b15611a635760149250611a98565b6004546201518090420304915060009050600f821015611a875781600f0360ff1690505b601154610100900461ffff16019150815b5050905600a165627a7a723058200760f28c9d2329e271905b867d5ffa027c4f442684371c435643020b572046bb0029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000019ebe53e7032833fa2ee880fb743a8a5df43724400000000000000000000000000000000000000000000000000000000000001c200000000000000000000000090e12b3066b55bc69c92c2373cc229ae93d835ac0000000000000000000000004afa677075d7260dc810bc3bf9c032c3f20331a8000000000000000000000000000000000000000000000000000000005b38a620000000000000000000000000000000000000000000000000000000005b38a621000000000000000000000000000000000000000000000000000000005b4d89ed000000000000000000000000000000000000000000000000000000005b530420
-----Decoded View---------------
Arg [0] : _token (address): 0x19ebE53E7032833fA2EE880FB743a8a5DF437244
Arg [1] : _initialEtherUsdRate (uint16): 450
Arg [2] : _wallet (address): 0x90E12B3066b55BC69C92c2373cc229ae93d835Ac
Arg [3] : _tokensWallet (address): 0x4afa677075D7260dc810BC3bF9C032C3F20331A8
Arg [4] : _presaleOpeningTime (uint256): 1530439200
Arg [5] : _presaleClosingTime (uint256): 1530439201
Arg [6] : _openingTime (uint256): 1531808237
Arg [7] : _closingTime (uint256): 1532167200
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 00000000000000000000000019ebe53e7032833fa2ee880fb743a8a5df437244
Arg [1] : 00000000000000000000000000000000000000000000000000000000000001c2
Arg [2] : 00000000000000000000000090e12b3066b55bc69c92c2373cc229ae93d835ac
Arg [3] : 0000000000000000000000004afa677075d7260dc810bc3bf9c032c3f20331a8
Arg [4] : 000000000000000000000000000000000000000000000000000000005b38a620
Arg [5] : 000000000000000000000000000000000000000000000000000000005b38a621
Arg [6] : 000000000000000000000000000000000000000000000000000000005b4d89ed
Arg [7] : 000000000000000000000000000000000000000000000000000000005b530420
Swarm Source
bzzr://0760f28c9d2329e271905b867d5ffa027c4f442684371c435643020b572046bb
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.