Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 21 from a total of 21 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer To IEO | 8350850 | 1883 days ago | IN | 0 ETH | 0.00049428 | ||||
Add Whitelisted ... | 8347673 | 1883 days ago | IN | 0 ETH | 0.00046403 | ||||
Add Whitelisted ... | 8341012 | 1884 days ago | IN | 0 ETH | 0.00046403 | ||||
Buy Tokens | 8306226 | 1890 days ago | IN | 0.5 ETH | 0.00007669 | ||||
Buy Tokens | 8306095 | 1890 days ago | IN | 3 ETH | 0.00023009 | ||||
Transfer | 8299955 | 1891 days ago | IN | 1.25075 ETH | 0.00306807 | ||||
Add Whitelisted ... | 8298385 | 1891 days ago | IN | 0 ETH | 0.00046403 | ||||
Add Whitelisted ... | 8297020 | 1891 days ago | IN | 0 ETH | 0.00046403 | ||||
Buy Tokens | 8292738 | 1892 days ago | IN | 2.24925 ETH | 0.00007669 | ||||
Add Whitelisted ... | 8290707 | 1892 days ago | IN | 0 ETH | 0.00140803 | ||||
Buy Tokens | 8261663 | 1897 days ago | IN | 0.5 ETH | 0.00137545 | ||||
Add Whitelisted ... | 8261371 | 1897 days ago | IN | 0 ETH | 0.00046403 | ||||
Add Whitelisted ... | 8260991 | 1897 days ago | IN | 0 ETH | 0.00046403 | ||||
Add Whitelisted ... | 8260892 | 1897 days ago | IN | 0 ETH | 0.00070003 | ||||
Add Whitelisted ... | 8260874 | 1897 days ago | IN | 0 ETH | 0.00051215 | ||||
Add Whitelisted ... | 8260872 | 1897 days ago | IN | 0 ETH | 0.00211603 | ||||
Add Whitelisted ... | 8260843 | 1897 days ago | IN | 0 ETH | 0.00237187 | ||||
Add Whitelisted ... | 8260838 | 1897 days ago | IN | 0 ETH | 0.00237187 | ||||
Add Whitelisted ... | 8260831 | 1897 days ago | IN | 0 ETH | 0.00237187 | ||||
Add Whitelisted ... | 8260829 | 1897 days ago | IN | 0 ETH | 0.00258611 | ||||
Add Whitelisted ... | 8259786 | 1897 days ago | IN | 0 ETH | 0.00077602 |
Loading...
Loading
Contract Name:
AsureCrowdsale
Compiler Version
v0.5.10+commit.5a6ea5b1
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-07-25 */ // File: openzeppelin-solidity/contracts/token/ERC20/IERC20.sol pragma solidity ^0.5.0; /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ interface IERC20 { function transfer(address to, uint256 value) external returns (bool); function approve(address spender, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); function totalSupply() external view returns (uint256); function balanceOf(address who) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } // File: openzeppelin-solidity/contracts/math/SafeMath.sol pragma solidity ^0.5.0; /** * @title SafeMath * @dev Unsigned math operations with safety checks that revert on error */ library SafeMath { /** * @dev Multiplies two unsigned integers, reverts on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b); return c; } /** * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); uint256 c = a - b; return c; } /** * @dev Adds two unsigned integers, reverts on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a); return c; } /** * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0); return a % b; } } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20.sol pragma solidity ^0.5.0; /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md * Originally based on code by FirstBlood: * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol * * This implementation emits additional Approval events, allowing applications to reconstruct the allowance status for * all accounts just by listening to said events. Note that this isn't required by the specification, and other * compliant implementations may not do it. */ contract ERC20 is IERC20 { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowed; uint256 private _totalSupply; /** * @dev Total number of tokens in existence */ function totalSupply() public view returns (uint256) { return _totalSupply; } /** * @dev Gets the balance of the specified address. * @param owner The address to query the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address owner) public view returns (uint256) { return _balances[owner]; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param owner address The address which owns the funds. * @param spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address owner, address spender) public view returns (uint256) { return _allowed[owner][spender]; } /** * @dev Transfer token for a specified address * @param to The address to transfer to. * @param value The amount to be transferred. */ function transfer(address to, uint256 value) public returns (bool) { _transfer(msg.sender, to, value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param spender The address which will spend the funds. * @param value The amount of tokens to be spent. */ function approve(address spender, uint256 value) public returns (bool) { require(spender != address(0)); _allowed[msg.sender][spender] = value; emit Approval(msg.sender, spender, value); return true; } /** * @dev Transfer tokens from one address to another. * Note that while this function emits an Approval event, this is not required as per the specification, * and other compliant implementations may not emit the event. * @param from address The address which you want to send tokens from * @param to address The address which you want to transfer to * @param value uint256 the amount of tokens to be transferred */ function transferFrom(address from, address to, uint256 value) public returns (bool) { _allowed[from][msg.sender] = _allowed[from][msg.sender].sub(value); _transfer(from, to, value); emit Approval(from, msg.sender, _allowed[from][msg.sender]); return true; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * approve should be called when allowed_[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * Emits an Approval event. * @param spender The address which will spend the funds. * @param addedValue The amount of tokens to increase the allowance by. */ function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { require(spender != address(0)); _allowed[msg.sender][spender] = _allowed[msg.sender][spender].add(addedValue); emit Approval(msg.sender, spender, _allowed[msg.sender][spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * approve should be called when allowed_[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * Emits an Approval event. * @param spender The address which will spend the funds. * @param subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { require(spender != address(0)); _allowed[msg.sender][spender] = _allowed[msg.sender][spender].sub(subtractedValue); emit Approval(msg.sender, spender, _allowed[msg.sender][spender]); return true; } /** * @dev Transfer token for a specified addresses * @param from The address to transfer from. * @param to The address to transfer to. * @param value The amount to be transferred. */ function _transfer(address from, address to, uint256 value) internal { require(to != address(0)); _balances[from] = _balances[from].sub(value); _balances[to] = _balances[to].add(value); emit Transfer(from, to, value); } /** * @dev Internal function that mints an amount of the token and assigns it to * an account. This encapsulates the modification of balances such that the * proper events are emitted. * @param account The account that will receive the created tokens. * @param value The amount that will be created. */ function _mint(address account, uint256 value) internal { require(account != address(0)); _totalSupply = _totalSupply.add(value); _balances[account] = _balances[account].add(value); emit Transfer(address(0), account, value); } /** * @dev Internal function that burns an amount of the token of a given * account. * @param account The account whose tokens will be burnt. * @param value The amount that will be burnt. */ function _burn(address account, uint256 value) internal { require(account != address(0)); _totalSupply = _totalSupply.sub(value); _balances[account] = _balances[account].sub(value); emit Transfer(account, address(0), value); } /** * @dev Internal function that burns an amount of the token of a given * account, deducting from the sender's allowance for said account. Uses the * internal burn function. * Emits an Approval event (reflecting the reduced allowance). * @param account The account whose tokens will be burnt. * @param value The amount that will be burnt. */ function _burnFrom(address account, uint256 value) internal { _allowed[account][msg.sender] = _allowed[account][msg.sender].sub(value); _burn(account, value); emit Approval(account, msg.sender, _allowed[account][msg.sender]); } } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20Burnable.sol pragma solidity ^0.5.0; /** * @title Burnable Token * @dev Token that can be irreversibly burned (destroyed). */ contract ERC20Burnable is ERC20 { /** * @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); } /** * @dev Burns a specific amount of tokens from the target address and decrements allowance * @param from address The address which you want to send tokens from * @param value uint256 The amount of token to be burned */ function burnFrom(address from, uint256 value) public { _burnFrom(from, value); } } // File: openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol pragma solidity ^0.5.0; /** * @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 { using SafeMath for uint256; function safeTransfer(IERC20 token, address to, uint256 value) internal { require(token.transfer(to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { require(token.transferFrom(from, to, value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require((value == 0) || (token.allowance(address(this), spender) == 0)); require(token.approve(spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); require(token.approve(spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value); require(token.approve(spender, newAllowance)); } } // File: openzeppelin-solidity/contracts/utils/ReentrancyGuard.sol pragma solidity ^0.5.0; /** * @title Helps contracts guard against reentrancy attacks. * @author Remco Bloemen <remco@2π.com>, Eenae <[email protected]> * @dev If you mark a function `nonReentrant`, you should also * mark it `external`. */ contract ReentrancyGuard { /// @dev counter to allow mutex lock with only one SSTORE operation uint256 private _guardCounter; constructor () internal { // The counter starts at one to prevent changing it from zero to a non-zero // value, which is a more expensive operation. _guardCounter = 1; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { _guardCounter += 1; uint256 localCounter = _guardCounter; _; require(localCounter == _guardCounter); } } // File: openzeppelin-solidity/contracts/crowdsale/Crowdsale.sol pragma solidity ^0.5.0; /** * @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 / overridden. * The internal interface conforms the extensible and modifiable surface of crowdsales. Override * the methods to add functionality. Consider using 'super' where appropriate to concatenate * behavior. */ contract Crowdsale is ReentrancyGuard { using SafeMath for uint256; using SafeERC20 for IERC20; // The token being sold IERC20 private _token; // Address where funds are collected address payable private _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 ERC20Detailed token with 3 decimals called TOK // 1 wei will give you 1 unit, or 0.001 TOK. uint256 private _rate; // Amount of wei raised uint256 private _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 TokensPurchased(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount); /** * @param rate Number of token units a buyer gets per wei * @dev 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 ERC20Detailed token * with 3 decimals called TOK, 1 wei will give you 1 unit, or 0.001 TOK. * @param wallet Address where collected funds will be forwarded to * @param token Address of the token being sold */ constructor (uint256 rate, address payable wallet, IERC20 token) public { require(rate > 0); require(wallet != address(0)); require(address(token) != address(0)); _rate = rate; _wallet = wallet; _token = token; } /** * @dev fallback function ***DO NOT OVERRIDE*** * Note that other contracts will transfer fund with a base gas stipend * of 2300, which is not enough to call buyTokens. Consider calling * buyTokens directly when purchasing tokens from a contract. */ function () external payable { buyTokens(msg.sender); } /** * @return the token being sold. */ function token() public view returns (IERC20) { return _token; } /** * @return the address where funds are collected. */ function wallet() public view returns (address payable) { return _wallet; } /** * @return the number of token units a buyer gets per wei. */ function rate() public view returns (uint256) { return _rate; } /** * @return the amount of wei raised. */ function weiRaised() public view returns (uint256) { return _weiRaised; } /** * @dev low level token purchase ***DO NOT OVERRIDE*** * This function has a non-reentrancy guard, so it shouldn't be called by * another `nonReentrant` function. * @param beneficiary Recipient of the token purchase */ function buyTokens(address beneficiary) public nonReentrant 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 TokensPurchased(msg.sender, beneficiary, weiAmount, tokens); _updatePurchasingState(beneficiary, weiAmount); _forwardFunds(); _postValidatePurchase(beneficiary, weiAmount); } /** * @dev Validation of an incoming purchase. Use require statements to revert state when conditions are not met. * Use `super` in contracts that inherit from Crowdsale to extend their validations. * Example from CappedCrowdsale.sol's _preValidatePurchase method: * super._preValidatePurchase(beneficiary, weiAmount); * require(weiRaised().add(weiAmount) <= cap); * @param beneficiary Address performing the token purchase * @param weiAmount Value in wei involved in the purchase */ function _preValidatePurchase(address beneficiary, uint256 weiAmount) internal view { 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 view { // solhint-disable-previous-line no-empty-blocks } /** * @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. Doesn't necessarily emit/send * 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 { // solhint-disable-previous-line no-empty-blocks } /** * @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); } } // File: openzeppelin-solidity/contracts/crowdsale/validation/TimedCrowdsale.sol pragma solidity ^0.5.0; /** * @title TimedCrowdsale * @dev Crowdsale accepting contributions only within a time frame. */ contract TimedCrowdsale is Crowdsale { using SafeMath for uint256; uint256 private _openingTime; uint256 private _closingTime; /** * @dev Reverts if not in crowdsale time range. */ modifier onlyWhileOpen { require(isOpen()); _; } /** * @dev Constructor, takes crowdsale opening and closing times. * @param openingTime Crowdsale opening time * @param closingTime Crowdsale closing time */ constructor (uint256 openingTime, uint256 closingTime) public { // solhint-disable-next-line not-rely-on-time require(openingTime >= block.timestamp); require(closingTime > openingTime); _openingTime = openingTime; _closingTime = closingTime; } /** * @return the crowdsale opening time. */ function openingTime() public view returns (uint256) { return _openingTime; } /** * @return the crowdsale closing time. */ function closingTime() public view returns (uint256) { return _closingTime; } /** * @return true if the crowdsale is open, false otherwise. */ function isOpen() public view returns (bool) { // solhint-disable-next-line not-rely-on-time return block.timestamp >= _openingTime && block.timestamp <= _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) { // solhint-disable-next-line not-rely-on-time 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 view { super._preValidatePurchase(beneficiary, weiAmount); } } // File: openzeppelin-solidity/contracts/access/Roles.sol pragma solidity ^0.5.0; /** * @title Roles * @dev Library for managing addresses assigned to a Role. */ library Roles { struct Role { mapping (address => bool) bearer; } /** * @dev give an account access to this role */ function add(Role storage role, address account) internal { require(account != address(0)); require(!has(role, account)); role.bearer[account] = true; } /** * @dev remove an account's access to this role */ function remove(Role storage role, address account) internal { require(account != address(0)); require(has(role, account)); role.bearer[account] = false; } /** * @dev check if an account has this role * @return bool */ function has(Role storage role, address account) internal view returns (bool) { require(account != address(0)); return role.bearer[account]; } } // File: openzeppelin-solidity/contracts/access/roles/WhitelistAdminRole.sol pragma solidity ^0.5.0; /** * @title WhitelistAdminRole * @dev WhitelistAdmins are responsible for assigning and removing Whitelisted accounts. */ contract WhitelistAdminRole { using Roles for Roles.Role; event WhitelistAdminAdded(address indexed account); event WhitelistAdminRemoved(address indexed account); Roles.Role private _whitelistAdmins; constructor () internal { _addWhitelistAdmin(msg.sender); } modifier onlyWhitelistAdmin() { require(isWhitelistAdmin(msg.sender)); _; } function isWhitelistAdmin(address account) public view returns (bool) { return _whitelistAdmins.has(account); } function addWhitelistAdmin(address account) public onlyWhitelistAdmin { _addWhitelistAdmin(account); } function renounceWhitelistAdmin() public { _removeWhitelistAdmin(msg.sender); } function _addWhitelistAdmin(address account) internal { _whitelistAdmins.add(account); emit WhitelistAdminAdded(account); } function _removeWhitelistAdmin(address account) internal { _whitelistAdmins.remove(account); emit WhitelistAdminRemoved(account); } } // File: openzeppelin-solidity/contracts/access/roles/WhitelistedRole.sol pragma solidity ^0.5.0; /** * @title WhitelistedRole * @dev Whitelisted accounts have been approved by a WhitelistAdmin to perform certain actions (e.g. participate in a * crowdsale). This role is special in that the only accounts that can add it are WhitelistAdmins (who can also remove * it), and not Whitelisteds themselves. */ contract WhitelistedRole is WhitelistAdminRole { using Roles for Roles.Role; event WhitelistedAdded(address indexed account); event WhitelistedRemoved(address indexed account); Roles.Role private _whitelisteds; modifier onlyWhitelisted() { require(isWhitelisted(msg.sender)); _; } function isWhitelisted(address account) public view returns (bool) { return _whitelisteds.has(account); } function addWhitelisted(address account) public onlyWhitelistAdmin { _addWhitelisted(account); } function removeWhitelisted(address account) public onlyWhitelistAdmin { _removeWhitelisted(account); } function renounceWhitelisted() public { _removeWhitelisted(msg.sender); } function _addWhitelisted(address account) internal { _whitelisteds.add(account); emit WhitelistedAdded(account); } function _removeWhitelisted(address account) internal { _whitelisteds.remove(account); emit WhitelistedRemoved(account); } } // File: openzeppelin-solidity/contracts/crowdsale/validation/WhitelistCrowdsale.sol pragma solidity ^0.5.0; /** * @title WhitelistCrowdsale * @dev Crowdsale in which only whitelisted users can contribute. */ contract WhitelistCrowdsale is WhitelistedRole, Crowdsale { /** * @dev Extend parent behavior requiring beneficiary to be whitelisted. Note that no * restriction is imposed on the account sending the transaction. * @param _beneficiary Token beneficiary * @param _weiAmount Amount of wei contributed */ function _preValidatePurchase(address _beneficiary, uint256 _weiAmount) internal view { require(isWhitelisted(_beneficiary)); super._preValidatePurchase(_beneficiary, _weiAmount); } } // File: openzeppelin-solidity/contracts/crowdsale/validation/CappedCrowdsale.sol pragma solidity ^0.5.0; /** * @title CappedCrowdsale * @dev Crowdsale with a limit for total contributions. */ contract CappedCrowdsale is Crowdsale { using SafeMath for uint256; uint256 private _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; } /** * @return the cap of the crowdsale. */ function cap() public view returns (uint256) { return _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 view { super._preValidatePurchase(beneficiary, weiAmount); require(weiRaised().add(weiAmount) <= _cap); } } // File: openzeppelin-solidity/contracts/ownership/Ownable.sol pragma solidity ^0.5.0; /** * @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 private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor () internal { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } /** * @return the address of the owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner()); _; } /** * @return true if `msg.sender` is the owner of the contract. */ function isOwner() public view returns (bool) { return 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 OwnershipTransferred(_owner, address(0)); _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; } } // File: contracts/AsureBonusesCrowdsale.sol pragma solidity ^0.5.0; /** * @title AsureBonusesCrowdsale, * @dev Crowdsale with bonus rate which will be lowered to default rate after * bonus time is reached. */ contract AsureBonusesCrowdsale is TimedCrowdsale, Ownable { using SafeMath for uint256; uint256 private _bonusRate; uint256 private _bonusTime; uint256 private _defaultRate; event RatesUpdated(uint256 bonusRate, uint256 bonusTime, uint256 defaultRate); /** * @dev Constructor, takes initial and bonus rates of tokens received per wei contributed. * @param bonusRate Number of token units a buyer gets per wei before bonus time * @param bonusTime The crowdsale bonus time in unix epoch seconds * @param defaultRate Number of token units a buyer gets per wei after the bonus time * @param owner of the crowdsale */ constructor (uint256 bonusRate, uint256 bonusTime, uint256 defaultRate, address owner) public { updateRates(bonusRate, bonusTime, defaultRate); transferOwnership(owner); } /** * The base rate function is overridden to revert, since this crowdsale doesn't use it, and * all calls to it are a mistake. */ function rate() public view returns (uint256) { revert(); } /** * @return the number of token units a buyer gets per wei before the bonus time. */ function bonusRate() public view returns (uint256) { return _bonusRate; } /** * @return the crowdsale bonus time in unix epoch seconds. */ function bonusTime() public view returns (uint256) { return _bonusTime; } /** * @return the number of token units a buyer gets per wei after the bonus time. */ function defaultRate() public view returns (uint256) { return _defaultRate; } /** * @dev Owner can update bonus rate, bonus time, and default rate before crowdsale opened. * @param newBonusRate Number of token units a buyer gets per wei before bonus time * @param newBonusTime The crowdsale bonus time in unix epoch seconds * @param newDefaultRate Number of token units a buyer gets per wei after the bonus time */ function updateRates(uint256 newBonusRate, uint256 newBonusTime, uint256 newDefaultRate) public onlyOwner { require(!isOpen() && !hasClosed()); require(newBonusRate > 0); require(newBonusTime >= openingTime() && newBonusTime < closingTime()); require(newDefaultRate > 0); _bonusRate = newBonusRate; _bonusTime = newBonusTime; _defaultRate = newDefaultRate; emit RatesUpdated(_bonusRate, _bonusTime, _defaultRate); } /** * @dev Returns the rate of tokens per wei at the present time. * Note that, rate can be changed by the owner until the crowdsale is open. * @return The number of tokens a buyer gets per wei at a given time */ function getCurrentRate() public view returns (uint256) { if (!isOpen()) { return 0; } if (block.timestamp <= _bonusTime) { return _bonusRate; } return _defaultRate; } /** * @dev Overrides parent method taking into account variable rate. * @param weiAmount The value in wei to be converted into tokens * @return The number of tokens _weiAmount wei will buy at present time */ function _getTokenAmount(uint256 weiAmount) internal view returns (uint256) { uint256 currentRate = getCurrentRate(); return currentRate.mul(weiAmount); } } // File: contracts/AsureCrowdsale.sol pragma solidity ^0.5.0; contract AsureCrowdsale is Crowdsale, TimedCrowdsale, WhitelistCrowdsale, AsureBonusesCrowdsale { using SafeERC20 for ERC20; uint256 private constant PURCHASE_MINIMUM_AMOUNT_WEI = 5 * 10 ** 17; // 0.5 ETH constructor( uint256 bonusRate, uint256 bonusTime, uint256 defaultRate, address owner, address payable wallet, IERC20 token, uint256 openingTime, uint256 closingTime ) public Crowdsale(1, wallet, token) TimedCrowdsale(openingTime, closingTime) AsureBonusesCrowdsale(bonusRate, bonusTime, defaultRate, owner) { if (!isWhitelistAdmin(owner)) { addWhitelistAdmin(owner); } } function addWhitelistedAccounts(address[] memory accounts) public onlyWhitelistAdmin { for (uint i = 0; i < accounts.length; i++) { _addWhitelisted(accounts[i]); } } function burn() public { require(hasClosed()); ERC20Burnable burnableToken = ERC20Burnable(address(token())); burnableToken.burn(burnableToken.balanceOf(address(this))); } /** * @dev Transfer tokens originally intended to be sold as part of this crowdsale to an IEO. * @param to Token beneficiary * @param value Amount of wei to transfer */ function transferToIEO(address to, uint256 value) onlyOwner public { require(!hasClosed()); token().safeTransfer(to, value); } /** * @dev Extend parent behavior requiring a minimum contribution of 0.5 ETH. * @param _beneficiary Token beneficiary * @param _weiAmount Amount of wei contributed */ function _preValidatePurchase(address _beneficiary, uint256 _weiAmount) internal view { require(_weiAmount >= PURCHASE_MINIMUM_AMOUNT_WEI); super._preValidatePurchase(_beneficiary, _weiAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addWhitelisted","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":"defaultRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"removeWhitelisted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"accounts","type":"address[]"}],"name":"addWhitelistedAccounts","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isWhitelisted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"weiRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isOpen","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":"renounceWhitelistAdmin","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":"bonusRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addWhitelistAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","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":true,"inputs":[],"name":"bonusTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferToIEO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isWhitelistAdmin","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newBonusRate","type":"uint256"},{"name":"newBonusTime","type":"uint256"},{"name":"newDefaultRate","type":"uint256"}],"name":"updateRates","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceWhitelisted","outputs":[],"payable":false,"stateMutability":"nonpayable","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":"getCurrentRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"bonusRate","type":"uint256"},{"name":"bonusTime","type":"uint256"},{"name":"defaultRate","type":"uint256"},{"name":"owner","type":"address"},{"name":"wallet","type":"address"},{"name":"token","type":"address"},{"name":"openingTime","type":"uint256"},{"name":"closingTime","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"bonusRate","type":"uint256"},{"indexed":false,"name":"bonusTime","type":"uint256"},{"indexed":false,"name":"defaultRate","type":"uint256"}],"name":"RatesUpdated","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":"TokensPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"WhitelistedAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"WhitelistedRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"WhitelistAdminAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"WhitelistAdminRemoved","type":"event"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162001ec538038062001ec583398181016040526101008110156200003857600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505087878787858560018a8a620000aa336200030960201b60201c565b600160028190555060008311620000c057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620000fb57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200013657600080fd5b8260058190555081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505042821015620001d057600080fd5b818111620001dd57600080fd5b8160078190555080600881905550505033600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3620002be8484846200036a60201b60201c565b620002cf816200047460201b60201c565b50505050620002e485620004a260201b60201c565b620002fb57620002fa85620004c660201b60201c565b5b5050505050505050620007cd565b62000324816000620004f560201b620014f11790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129960405160405180910390a250565b6200037a620005ab60201b60201c565b6200038457600080fd5b620003946200060360201b60201c565b158015620003af5750620003ad6200061f60201b60201c565b155b620003b957600080fd5b60008311620003c757600080fd5b620003d76200062b60201b60201c565b8210158015620003f55750620003f26200063560201b60201c565b82105b620003ff57600080fd5b600081116200040d57600080fd5b82600a8190555081600b8190555080600c819055507f023010bc68e7f4c0be9887f513c570c7a0f5f511b9716abccd42bf3b8943532b600a54600b54600c5460405180848152602001838152602001828152602001935050505060405180910390a1505050565b62000484620005ab60201b60201c565b6200048e57600080fd5b6200049f816200063f60201b60201c565b50565b6000620004bf8260006200073a60201b620011361790919060201c565b9050919050565b620004d733620004a260201b60201c565b620004e157600080fd5b620004f2816200030960201b60201c565b50565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200053057600080fd5b6200054282826200073a60201b60201c565b156200054d57600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b600060075442101580156200061a57506008544211155b905090565b60006008544211905090565b6000600754905090565b6000600854905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200067a57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200077657600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6116e880620007dd6000396000f3fe6080604052600436106101b75760003560e01c8063715018a6116100ec578063bb5f747b1161008a578063ec8ac4d811610064578063ec8ac4d8146107ba578063f2fde38b146107fe578063f7fb07b01461084f578063fc0c546a1461087a576101b7565b8063bb5f747b146106eb578063c0f3622c14610754578063d6cd9473146107a3576101b7565b80638f32d59b116100c65780638f32d59b1461060b578063b7a8807c1461063a578063b82a0ce814610665578063b8d9141614610690576101b7565b8063715018a61461054c5780637362d9c8146105635780638da5cb5b146105b4576101b7565b80634042b66f116101595780634b6753bc116101335780634b6753bc146104885780634c5a628c146104b3578063521eb273146104ca5780635af123f414610521576101b7565b80634042b66f1461041757806344df8e701461044257806347535d7b14610459576101b7565b8063291d954911610195578063291d95491461026d5780632a4bc321146102be5780632c4e722e146103835780633af32abf146103ae576101b7565b806310154bad146101c25780631515bc2b146102135780632616501d14610242575b6101c0336108d1565b005b3480156101ce57600080fd5b50610211600480360360208110156101e557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109c7565b005b34801561021f57600080fd5b506102286109e5565b604051808215151515815260200191505060405180910390f35b34801561024e57600080fd5b506102576109f1565b6040518082815260200191505060405180910390f35b34801561027957600080fd5b506102bc6004803603602081101561029057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109fb565b005b3480156102ca57600080fd5b50610381600480360360208110156102e157600080fd5b81019080803590602001906401000000008111156102fe57600080fd5b82018360208201111561031057600080fd5b8035906020019184602083028401116401000000008311171561033257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050610a19565b005b34801561038f57600080fd5b50610398610a67565b6040518082815260200191505060405180910390f35b3480156103ba57600080fd5b506103fd600480360360208110156103d157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a6e565b604051808215151515815260200191505060405180910390f35b34801561042357600080fd5b5061042c610a8b565b6040518082815260200191505060405180910390f35b34801561044e57600080fd5b50610457610a95565b005b34801561046557600080fd5b5061046e610bd7565b604051808215151515815260200191505060405180910390f35b34801561049457600080fd5b5061049d610bf2565b6040518082815260200191505060405180910390f35b3480156104bf57600080fd5b506104c8610bfc565b005b3480156104d657600080fd5b506104df610c07565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561052d57600080fd5b50610536610c31565b6040518082815260200191505060405180910390f35b34801561055857600080fd5b50610561610c3b565b005b34801561056f57600080fd5b506105b26004803603602081101561058657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d0d565b005b3480156105c057600080fd5b506105c9610d2b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561061757600080fd5b50610620610d55565b604051808215151515815260200191505060405180910390f35b34801561064657600080fd5b5061064f610dad565b6040518082815260200191505060405180910390f35b34801561067157600080fd5b5061067a610db7565b6040518082815260200191505060405180910390f35b34801561069c57600080fd5b506106e9600480360360408110156106b357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610dc1565b005b3480156106f757600080fd5b5061073a6004803603602081101561070e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e1a565b604051808215151515815260200191505060405180910390f35b34801561076057600080fd5b506107a16004803603606081101561077757600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050610e37565b005b3480156107af57600080fd5b506107b8610f12565b005b6107fc600480360360208110156107d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108d1565b005b34801561080a57600080fd5b5061084d6004803603602081101561082157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f1d565b005b34801561085b57600080fd5b50610864610f3a565b6040518082815260200191505060405180910390f35b34801561088657600080fd5b5061088f610f6d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60016002600082825401925050819055506000600254905060003490506108f88382610f97565b600061090382610fba565b905061091a82600654610fe290919063ffffffff16565b60068190555061092a8482611001565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f6faf93231a456e552dbc9961f58d9713ee4f2e69d15f1975b050ef0911053a7b8484604051808381526020018281526020019250505060405180910390a36109a1848361100f565b6109a9611013565b6109b3848361107e565b505060025481146109c357600080fd5b5050565b6109d033610e1a565b6109d957600080fd5b6109e281611082565b50565b60006008544211905090565b6000600c54905090565b610a0433610e1a565b610a0d57600080fd5b610a16816110dc565b50565b610a2233610e1a565b610a2b57600080fd5b60008090505b8151811015610a6357610a56828281518110610a4957fe5b6020026020010151611082565b8080600101915050610a31565b5050565b6000806000fd5b6000610a8482600161113690919063ffffffff16565b9050919050565b6000600654905090565b610a9d6109e5565b610aa657600080fd5b6000610ab0610f6d565b90508073ffffffffffffffffffffffffffffffffffffffff166342966c688273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610b4b57600080fd5b505afa158015610b5f573d6000803e3d6000fd5b505050506040513d6020811015610b7557600080fd5b81019080805190602001909291905050506040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610bbc57600080fd5b505af1158015610bd0573d6000803e3d6000fd5b5050505050565b60006007544210158015610bed57506008544211155b905090565b6000600854905090565b610c05336111c8565b565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600a54905090565b610c43610d55565b610c4c57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610d1633610e1a565b610d1f57600080fd5b610d2881611222565b50565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6000600754905090565b6000600b54905090565b610dc9610d55565b610dd257600080fd5b610dda6109e5565b15610de457600080fd5b610e168282610df1610f6d565b73ffffffffffffffffffffffffffffffffffffffff1661127c9092919063ffffffff16565b5050565b6000610e3082600061113690919063ffffffff16565b9050919050565b610e3f610d55565b610e4857600080fd5b610e50610bd7565b158015610e625750610e606109e5565b155b610e6b57600080fd5b60008311610e7857600080fd5b610e80610dad565b8210158015610e955750610e92610bf2565b82105b610e9e57600080fd5b60008111610eab57600080fd5b82600a8190555081600b8190555080600c819055507f023010bc68e7f4c0be9887f513c570c7a0f5f511b9716abccd42bf3b8943532b600a54600b54600c5460405180848152602001838152602001828152602001935050505060405180910390a1505050565b610f1b336110dc565b565b610f25610d55565b610f2e57600080fd5b610f378161134c565b50565b6000610f44610bd7565b610f515760009050610f6a565b600b544211610f6457600a549050610f6a565b600c5490505b90565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6706f05b59d3b20000811015610fac57600080fd5b610fb68282611446565b5050565b600080610fc5610f3a565b9050610fda838261146690919063ffffffff16565b915050919050565b600080828401905083811015610ff757600080fd5b8091505092915050565b61100b82826114a0565b5050565b5050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015801561107b573d6000803e3d6000fd5b50565b5050565b6110968160016114f190919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f60405160405180910390a250565b6110f081600161159d90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b660405160405180910390a250565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561117157600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6111dc81600061159d90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16560405160405180910390a250565b6112368160006114f190919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129960405160405180910390a250565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561130357600080fd5b505af1158015611317573d6000803e3d6000fd5b505050506040513d602081101561132d57600080fd5b810190808051906020019092919050505061134757600080fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561138657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61144f82610a6e565b61145857600080fd5b6114628282611648565b5050565b600080831415611479576000905061149a565b600082840290508284828161148a57fe5b041461149557600080fd5b809150505b92915050565b6114ed8282600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661127c9092919063ffffffff16565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561152b57600080fd5b6115358282611136565b1561153f57600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115d757600080fd5b6115e18282611136565b6115ea57600080fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611650610bd7565b61165957600080fd5b6116638282611667565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116a157600080fd5b60008114156116af57600080fd5b505056fea265627a7a72305820e145afcd98bdc57d77227fd4188facc5bb6fe87280b4fb59a566178262e85fbf64736f6c634300050a00320000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000005d4b6600000000000000000000000000000000000000000000000000000000000000010b000000000000000000000000bb6194fbfc974d848722dcab1ef990dc4738df32000000000000000000000000cbbc3d3d381f3a9a48cbae9ca701ac3c92e0aea500000000000000000000000015dfc197e7ac7d81a07250b5bdebaa96fc1c5dfa000000000000000000000000000000000000000000000000000000005d422b80000000000000000000000000000000000000000000000000000000005d54a080
Deployed Bytecode
0x6080604052600436106101b75760003560e01c8063715018a6116100ec578063bb5f747b1161008a578063ec8ac4d811610064578063ec8ac4d8146107ba578063f2fde38b146107fe578063f7fb07b01461084f578063fc0c546a1461087a576101b7565b8063bb5f747b146106eb578063c0f3622c14610754578063d6cd9473146107a3576101b7565b80638f32d59b116100c65780638f32d59b1461060b578063b7a8807c1461063a578063b82a0ce814610665578063b8d9141614610690576101b7565b8063715018a61461054c5780637362d9c8146105635780638da5cb5b146105b4576101b7565b80634042b66f116101595780634b6753bc116101335780634b6753bc146104885780634c5a628c146104b3578063521eb273146104ca5780635af123f414610521576101b7565b80634042b66f1461041757806344df8e701461044257806347535d7b14610459576101b7565b8063291d954911610195578063291d95491461026d5780632a4bc321146102be5780632c4e722e146103835780633af32abf146103ae576101b7565b806310154bad146101c25780631515bc2b146102135780632616501d14610242575b6101c0336108d1565b005b3480156101ce57600080fd5b50610211600480360360208110156101e557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109c7565b005b34801561021f57600080fd5b506102286109e5565b604051808215151515815260200191505060405180910390f35b34801561024e57600080fd5b506102576109f1565b6040518082815260200191505060405180910390f35b34801561027957600080fd5b506102bc6004803603602081101561029057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109fb565b005b3480156102ca57600080fd5b50610381600480360360208110156102e157600080fd5b81019080803590602001906401000000008111156102fe57600080fd5b82018360208201111561031057600080fd5b8035906020019184602083028401116401000000008311171561033257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050610a19565b005b34801561038f57600080fd5b50610398610a67565b6040518082815260200191505060405180910390f35b3480156103ba57600080fd5b506103fd600480360360208110156103d157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a6e565b604051808215151515815260200191505060405180910390f35b34801561042357600080fd5b5061042c610a8b565b6040518082815260200191505060405180910390f35b34801561044e57600080fd5b50610457610a95565b005b34801561046557600080fd5b5061046e610bd7565b604051808215151515815260200191505060405180910390f35b34801561049457600080fd5b5061049d610bf2565b6040518082815260200191505060405180910390f35b3480156104bf57600080fd5b506104c8610bfc565b005b3480156104d657600080fd5b506104df610c07565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561052d57600080fd5b50610536610c31565b6040518082815260200191505060405180910390f35b34801561055857600080fd5b50610561610c3b565b005b34801561056f57600080fd5b506105b26004803603602081101561058657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d0d565b005b3480156105c057600080fd5b506105c9610d2b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561061757600080fd5b50610620610d55565b604051808215151515815260200191505060405180910390f35b34801561064657600080fd5b5061064f610dad565b6040518082815260200191505060405180910390f35b34801561067157600080fd5b5061067a610db7565b6040518082815260200191505060405180910390f35b34801561069c57600080fd5b506106e9600480360360408110156106b357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610dc1565b005b3480156106f757600080fd5b5061073a6004803603602081101561070e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e1a565b604051808215151515815260200191505060405180910390f35b34801561076057600080fd5b506107a16004803603606081101561077757600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050610e37565b005b3480156107af57600080fd5b506107b8610f12565b005b6107fc600480360360208110156107d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108d1565b005b34801561080a57600080fd5b5061084d6004803603602081101561082157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f1d565b005b34801561085b57600080fd5b50610864610f3a565b6040518082815260200191505060405180910390f35b34801561088657600080fd5b5061088f610f6d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60016002600082825401925050819055506000600254905060003490506108f88382610f97565b600061090382610fba565b905061091a82600654610fe290919063ffffffff16565b60068190555061092a8482611001565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f6faf93231a456e552dbc9961f58d9713ee4f2e69d15f1975b050ef0911053a7b8484604051808381526020018281526020019250505060405180910390a36109a1848361100f565b6109a9611013565b6109b3848361107e565b505060025481146109c357600080fd5b5050565b6109d033610e1a565b6109d957600080fd5b6109e281611082565b50565b60006008544211905090565b6000600c54905090565b610a0433610e1a565b610a0d57600080fd5b610a16816110dc565b50565b610a2233610e1a565b610a2b57600080fd5b60008090505b8151811015610a6357610a56828281518110610a4957fe5b6020026020010151611082565b8080600101915050610a31565b5050565b6000806000fd5b6000610a8482600161113690919063ffffffff16565b9050919050565b6000600654905090565b610a9d6109e5565b610aa657600080fd5b6000610ab0610f6d565b90508073ffffffffffffffffffffffffffffffffffffffff166342966c688273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610b4b57600080fd5b505afa158015610b5f573d6000803e3d6000fd5b505050506040513d6020811015610b7557600080fd5b81019080805190602001909291905050506040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610bbc57600080fd5b505af1158015610bd0573d6000803e3d6000fd5b5050505050565b60006007544210158015610bed57506008544211155b905090565b6000600854905090565b610c05336111c8565b565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600a54905090565b610c43610d55565b610c4c57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610d1633610e1a565b610d1f57600080fd5b610d2881611222565b50565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6000600754905090565b6000600b54905090565b610dc9610d55565b610dd257600080fd5b610dda6109e5565b15610de457600080fd5b610e168282610df1610f6d565b73ffffffffffffffffffffffffffffffffffffffff1661127c9092919063ffffffff16565b5050565b6000610e3082600061113690919063ffffffff16565b9050919050565b610e3f610d55565b610e4857600080fd5b610e50610bd7565b158015610e625750610e606109e5565b155b610e6b57600080fd5b60008311610e7857600080fd5b610e80610dad565b8210158015610e955750610e92610bf2565b82105b610e9e57600080fd5b60008111610eab57600080fd5b82600a8190555081600b8190555080600c819055507f023010bc68e7f4c0be9887f513c570c7a0f5f511b9716abccd42bf3b8943532b600a54600b54600c5460405180848152602001838152602001828152602001935050505060405180910390a1505050565b610f1b336110dc565b565b610f25610d55565b610f2e57600080fd5b610f378161134c565b50565b6000610f44610bd7565b610f515760009050610f6a565b600b544211610f6457600a549050610f6a565b600c5490505b90565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6706f05b59d3b20000811015610fac57600080fd5b610fb68282611446565b5050565b600080610fc5610f3a565b9050610fda838261146690919063ffffffff16565b915050919050565b600080828401905083811015610ff757600080fd5b8091505092915050565b61100b82826114a0565b5050565b5050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015801561107b573d6000803e3d6000fd5b50565b5050565b6110968160016114f190919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f60405160405180910390a250565b6110f081600161159d90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b660405160405180910390a250565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561117157600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6111dc81600061159d90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16560405160405180910390a250565b6112368160006114f190919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129960405160405180910390a250565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561130357600080fd5b505af1158015611317573d6000803e3d6000fd5b505050506040513d602081101561132d57600080fd5b810190808051906020019092919050505061134757600080fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561138657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61144f82610a6e565b61145857600080fd5b6114628282611648565b5050565b600080831415611479576000905061149a565b600082840290508284828161148a57fe5b041461149557600080fd5b809150505b92915050565b6114ed8282600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661127c9092919063ffffffff16565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561152b57600080fd5b6115358282611136565b1561153f57600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115d757600080fd5b6115e18282611136565b6115ea57600080fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611650610bd7565b61165957600080fd5b6116638282611667565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116a157600080fd5b60008114156116af57600080fd5b505056fea265627a7a72305820e145afcd98bdc57d77227fd4188facc5bb6fe87280b4fb59a566178262e85fbf64736f6c634300050a0032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000005d4b6600000000000000000000000000000000000000000000000000000000000000010b000000000000000000000000bb6194fbfc974d848722dcab1ef990dc4738df32000000000000000000000000cbbc3d3d381f3a9a48cbae9ca701ac3c92e0aea500000000000000000000000015dfc197e7ac7d81a07250b5bdebaa96fc1c5dfa000000000000000000000000000000000000000000000000000000005d422b80000000000000000000000000000000000000000000000000000000005d54a080
-----Decoded View---------------
Arg [0] : bonusRate (uint256): 400
Arg [1] : bonusTime (uint256): 1565222400
Arg [2] : defaultRate (uint256): 267
Arg [3] : owner (address): 0xbB6194FBFc974d848722DCAb1ef990DC4738df32
Arg [4] : wallet (address): 0xcbBc3D3d381f3A9a48CbAE9Ca701aC3c92e0aEA5
Arg [5] : token (address): 0x15DfC197E7ac7D81a07250B5bdebAa96Fc1C5dfA
Arg [6] : openingTime (uint256): 1564617600
Arg [7] : closingTime (uint256): 1565827200
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000190
Arg [1] : 000000000000000000000000000000000000000000000000000000005d4b6600
Arg [2] : 000000000000000000000000000000000000000000000000000000000000010b
Arg [3] : 000000000000000000000000bb6194fbfc974d848722dcab1ef990dc4738df32
Arg [4] : 000000000000000000000000cbbc3d3d381f3a9a48cbae9ca701ac3c92e0aea5
Arg [5] : 00000000000000000000000015dfc197e7ac7d81a07250b5bdebaa96fc1c5dfa
Arg [6] : 000000000000000000000000000000000000000000000000000000005d422b80
Arg [7] : 000000000000000000000000000000000000000000000000000000005d54a080
Deployed Bytecode Sourcemap
35920:1799:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17188:21;17198:10;17188:9;:21::i;:::-;35920:1799;27323:110;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27323:110:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27323:110:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;23511:159;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23511:159:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;34065:85;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34065:85:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27441:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27441:116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27441:116:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;36594:185;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36594:185:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;36594:185:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;36594:185:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;36594:185:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;36594:185:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;36594:185:0;;;;;;;;;;;;;;;:::i;:::-;;33547:67;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33547:67:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27196:119;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27196:119:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27196:119:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17764:87;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17764:87:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36785:189;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36785:189:0;;;:::i;:::-;;23149:192;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23149:192:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22968:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22968:91:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26012:93;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26012:93:0;;;:::i;:::-;;17440:89;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17440:89:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33718:81;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33718:81:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31535:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31535:140:0;;;:::i;:::-;;25888:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25888:116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25888:116:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;30822:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30822:79:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;31157:92;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31157:92:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22807:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22807:91:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33881:81;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33881:81:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37172:139;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37172:139:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;37172:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25755:125;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25755:125:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25755:125:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;34516:462;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34516:462:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;34516:462:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27565:87;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27565:87:0;;;:::i;:::-;;18116:620;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18116:620:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;31852:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31852:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31852:109:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;35216:213;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35216:213:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17281:78;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17281:78:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18116:620;14192:1;14175:13;;:18;;;;;;;;;;;14204:20;14227:13;;14204:36;;18195:17;18215:9;18195:29;;18235:44;18256:11;18269:9;18235:20;:44::i;:::-;18341:14;18358:26;18374:9;18358:15;:26::i;:::-;18341:43;;18435:25;18450:9;18435:10;;:14;;:25;;;;:::i;:::-;18422:10;:38;;;;18473:37;18490:11;18503:6;18473:16;:37::i;:::-;18554:11;18526:59;;18542:10;18526:59;;;18567:9;18578:6;18526:59;;;;;;;;;;;;;;;;;;;;;;;;18598:46;18621:11;18634:9;18598:22;:46::i;:::-;18657:15;:13;:15::i;:::-;18683:45;18705:11;18718:9;18683:21;:45::i;:::-;14251:1;;14287:13;;14271:12;:29;14263:38;;;;;;18116:620;;:::o;27323:110::-;25698:28;25715:10;25698:16;:28::i;:::-;25690:37;;;;;;27401:24;27417:7;27401:15;:24::i;:::-;27323:110;:::o;23511:159::-;23553:4;23650:12;;23632:15;:30;23625:37;;23511:159;:::o;34065:85::-;34109:7;34132:12;;34125:19;;34065:85;:::o;27441:116::-;25698:28;25715:10;25698:16;:28::i;:::-;25690:37;;;;;;27522:27;27541:7;27522:18;:27::i;:::-;27441:116;:::o;36594:185::-;25698:28;25715:10;25698:16;:28::i;:::-;25690:37;;;;;;36691:6;36700:1;36691:10;;36686:88;36707:8;:15;36703:1;:19;36686:88;;;36738:28;36754:8;36763:1;36754:11;;;;;;;;;;;;;;36738:15;:28::i;:::-;36724:3;;;;;;;36686:88;;;;36594:185;:::o;33547:67::-;33584:7;33600:8;;;27196:119;27257:4;27281:26;27299:7;27281:13;:17;;:26;;;;:::i;:::-;27274:33;;27196:119;;;:::o;17764:87::-;17806:7;17833:10;;17826:17;;17764:87;:::o;36785:189::-;36823:11;:9;:11::i;:::-;36815:20;;;;;;36842:27;36894:7;:5;:7::i;:::-;36842:61;;36910:13;:18;;;36929:13;:23;;;36961:4;36929:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36929:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36929:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;36929:38:0;;;;;;;;;;;;;;;;36910:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36910:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36910:58:0;;;;36785:189;:::o;23149:192::-;23188:4;23286:12;;23267:15;:31;;:66;;;;;23321:12;;23302:15;:31;;23267:66;23260:73;;23149:192;:::o;22968:91::-;23012:7;23039:12;;23032:19;;22968:91;:::o;26012:93::-;26064:33;26086:10;26064:21;:33::i;:::-;26012:93::o;17440:89::-;17479:15;17514:7;;;;;;;;;;;17507:14;;17440:89;:::o;33718:81::-;33760:7;33783:10;;33776:17;;33718:81;:::o;31535:140::-;31034:9;:7;:9::i;:::-;31026:18;;;;;;31634:1;31597:40;;31618:6;;;;;;;;;;;31597:40;;;;;;;;;;;;31665:1;31648:6;;:19;;;;;;;;;;;;;;;;;;31535:140::o;25888:116::-;25698:28;25715:10;25698:16;:28::i;:::-;25690:37;;;;;;25969:27;25988:7;25969:18;:27::i;:::-;25888:116;:::o;30822:79::-;30860:7;30887:6;;;;;;;;;;;30880:13;;30822:79;:::o;31157:92::-;31197:4;31235:6;;;;;;;;;;;31221:20;;:10;:20;;;31214:27;;31157:92;:::o;22807:91::-;22851:7;22878:12;;22871:19;;22807:91;:::o;33881:81::-;33923:7;33946:10;;33939:17;;33881:81;:::o;37172:139::-;31034:9;:7;:9::i;:::-;31026:18;;;;;;37255:11;:9;:11::i;:::-;37254:12;37246:21;;;;;;37274:31;37295:2;37299:5;37274:7;:5;:7::i;:::-;:20;;;;:31;;;;;:::i;:::-;37172:139;;:::o;25755:125::-;25819:4;25843:29;25864:7;25843:16;:20;;:29;;;;:::i;:::-;25836:36;;25755:125;;;:::o;34516:462::-;31034:9;:7;:9::i;:::-;31026:18;;;;;;34638:8;:6;:8::i;:::-;34637:9;:25;;;;;34651:11;:9;:11::i;:::-;34650:12;34637:25;34629:34;;;;;;34693:1;34678:12;:16;34670:25;;;;;;34726:13;:11;:13::i;:::-;34710:12;:29;;:61;;;;;34758:13;:11;:13::i;:::-;34743:12;:28;34710:61;34702:70;;;;;;34804:1;34787:14;:18;34779:27;;;;;;34828:12;34815:10;:25;;;;34860:12;34847:10;:25;;;;34894:14;34879:12;:29;;;;34922:50;34935:10;;34947;;34959:12;;34922:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34516:462;;;:::o;27565:87::-;27614:30;27633:10;27614:18;:30::i;:::-;27565:87::o;31852:109::-;31034:9;:7;:9::i;:::-;31026:18;;;;;;31925:28;31944:8;31925:18;:28::i;:::-;31852:109;:::o;35216:213::-;35263:7;35284:8;:6;:8::i;:::-;35279:40;;35310:1;35303:8;;;;35279:40;35350:10;;35331:15;:29;35327:69;;35378:10;;35371:17;;;;35327:69;35411:12;;35404:19;;35216:213;;:::o;17281:78::-;17319:6;17345;;;;;;;;;;;17338:13;;17281:78;:::o;37508:208::-;36108:12;37609:10;:41;;37601:50;;;;;;37658:52;37685:12;37699:10;37658:26;:52::i;:::-;37508:208;;:::o;35662:167::-;35729:7;35745:19;35767:16;:14;:16::i;:::-;35745:38;;35797:26;35813:9;35797:11;:15;;:26;;;;:::i;:::-;35790:33;;;35662:167;;;:::o;2397:150::-;2455:7;2475:9;2491:1;2487;:5;2475:17;;2516:1;2511;:6;;2503:15;;;;;;2538:1;2531:8;;;2397:150;;;;:::o;20615:136::-;20703:40;20718:11;20731;20703:14;:40::i;:::-;20615:136;;:::o;21029:147::-;;;:::o;21646:80::-;21691:7;;;;;;;;;;;:16;;:27;21708:9;21691:27;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21691:27:0;21646:80::o;19763:151::-;;;:::o;27660:137::-;27722:26;27740:7;27722:13;:17;;:26;;;;:::i;:::-;27781:7;27764:25;;;;;;;;;;;;27660:137;:::o;27805:145::-;27870:29;27891:7;27870:13;:20;;:29;;;;:::i;:::-;27934:7;27915:27;;;;;;;;;;;;27805:145;:::o;24925:165::-;24997:4;25041:1;25022:21;;:7;:21;;;;25014:30;;;;;;25062:4;:11;;:20;25074:7;25062:20;;;;;;;;;;;;;;;;;;;;;;;;;25055:27;;24925:165;;;;:::o;26267:154::-;26335:32;26359:7;26335:16;:23;;:32;;;;:::i;:::-;26405:7;26383:30;;;;;;;;;;;;26267:154;:::o;26113:146::-;26178:29;26199:7;26178:16;:20;;:29;;;;:::i;:::-;26243:7;26223:28;;;;;;;;;;;;26113:146;:::o;11866:125::-;11957:5;:14;;;11972:2;11976:5;11957:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11957:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11957:25:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11957:25:0;;;;;;;;;;;;;;;;11949:34;;;;;;11866:125;;;:::o;32111:187::-;32205:1;32185:22;;:8;:22;;;;32177:31;;;;;;32253:8;32224:38;;32245:6;;;;;;;;;;;32224:38;;;;;;;;;;;;32282:8;32273:6;;:17;;;;;;;;;;;;;;;;;;32111:187;:::o;28522:204::-;28627:27;28641:12;28627:13;:27::i;:::-;28619:36;;;;;;28666:52;28693:12;28707:10;28666:26;:52::i;:::-;28522:204;;:::o;1156:433::-;1214:7;1463:1;1458;:6;1454:47;;;1488:1;1481:8;;;;1454:47;1513:9;1529:1;1525;:5;1513:17;;1558:1;1553;1549;:5;;;;;;:10;1541:19;;;;;;1580:1;1573:8;;;1156:433;;;;;:::o;20202:139::-;20288:45;20308:11;20321;20288:6;;;;;;;;;;;:19;;;;:45;;;;;:::i;:::-;20202:139;;:::o;24377:186::-;24473:1;24454:21;;:7;:21;;;;24446:30;;;;;;24496:18;24500:4;24506:7;24496:3;:18::i;:::-;24495:19;24487:28;;;;;;24551:4;24528;:11;;:20;24540:7;24528:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;24377:186;;:::o;24642:189::-;24741:1;24722:21;;:7;:21;;;;24714:30;;;;;;24763:18;24767:4;24773:7;24763:3;:18::i;:::-;24755:27;;;;;;24818:5;24795:4;:11;;:20;24807:7;24795:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;24642:189;;:::o;23869:167::-;22217:8;:6;:8::i;:::-;22209:17;;;;;;23978:50;24005:11;24018:9;23978:26;:50::i;:::-;23869:167;;:::o;19289:171::-;19415:1;19392:25;;:11;:25;;;;19384:34;;;;;;19450:1;19437:9;:14;;19429:23;;;;;;19289:171;;:::o
Swarm Source
bzzr://e145afcd98bdc57d77227fd4188facc5bb6fe87280b4fb59a566178262e85fbf
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 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.