Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Name:
HBDVAuction
Compiler Version
v0.5.13+commit.5b0b510c
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-02-11 */ pragma solidity ^0.5.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see {ERC20Detailed}. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: 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 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } pragma solidity ^0.5.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * _Since v2.5.0:_ this module is now much more gas efficient, given net gas * metering changes introduced in the Istanbul hardfork. */ contract ReentrancyGuard { bool private _notEntered; constructor () internal { // Storing an initial non-zero value makes deployment a bit more // expensive, but in exchange the refund on every call to nonReentrant // will be lower in amount. Since refunds are capped to a percetange of // the total transaction's gas, it is best to keep them low in cases // like this one, to increase the likelihood of the full refund coming // into effect. _notEntered = true; } /** * @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() { // On the first call to nonReentrant, _notEntered will be true require(_notEntered, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _notEntered = false; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _notEntered = true; } } pragma solidity ^0.5.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor () internal { } // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } pragma solidity ^0.5.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * _Available since v2.4.0._ */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot 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-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } pragma solidity ^0.5.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Converts an `address` into `address payable`. Note that this is * simply a type cast: the actual underlying value is not changed. * * _Available since v2.4.0._ */ function toPayable(address account) internal pure returns (address payable) { return address(uint160(account)); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. * * _Available since v2.4.0._ */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-call-value (bool success, ) = recipient.call.value(amount)(""); require(success, "Address: unable to send value, recipient may have reverted"); } } pragma solidity ^0.5.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * 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; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, 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' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } pragma solidity ^0.5.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow, so we distribute return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); } } 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(!has(role, account), "Roles: account already has role"); role.bearer[account] = true; } /** * @dev Remove an account's access to this role. */ function remove(Role storage role, address account) internal { require(has(role, account), "Roles: account does not have role"); 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), "Roles: account is the zero address"); return role.bearer[account]; } } pragma solidity ^0.5.0; contract CapperRole is Context { using Roles for Roles.Role; event CapperAdded(address indexed account); event CapperRemoved(address indexed account); Roles.Role private _cappers; constructor () internal { _addCapper(_msgSender()); } modifier onlyCapper() { require(isCapper(_msgSender()), "CapperRole: caller does not have the Capper role"); _; } function isCapper(address account) public view returns (bool) { return _cappers.has(account); } function addCapper(address account) public onlyCapper { _addCapper(account); } function renounceCapper() public { _removeCapper(_msgSender()); } function _addCapper(address account) internal { _cappers.add(account); emit CapperAdded(account); } function _removeCapper(address account) internal { _cappers.remove(account); emit CapperRemoved(account); } } 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 conforms * the base architecture for crowdsales. It is *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 Context, 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, "Crowdsale: rate is 0"); require(wallet != address(0), "Crowdsale: wallet is the zero address"); require(address(token) != address(0), "Crowdsale: token is the zero address"); _rate = rate; _wallet = wallet; _token = token; } /** * @dev fallback function ***DO NOT OVERRIDE*** * Note that other contracts will transfer funds 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(_msgSender()); } /** * @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(_msgSender(), 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), "Crowdsale: beneficiary is the zero address"); require(weiAmount != 0, "Crowdsale: weiAmount is 0"); this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 } /** * @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); } } pragma solidity ^0.5.0; /** * @title IndividuallyCappedCrowdsale * @dev Crowdsale with per-beneficiary caps. */ contract IndividuallyCappedCrowdsale is Crowdsale, CapperRole { using SafeMath for uint256; mapping(address => uint256) private _contributions; uint256 private _cap; constructor (uint256 cap) public { require(cap > 0, "CappedCrowdsale: Minimum cap is 0"); _cap = cap; } /** * @dev Returns the amount contributed so far by a specific beneficiary. * @param beneficiary Address of contributor * @return Beneficiary contribution so far */ function getContribution(address beneficiary) public view returns (uint256) { return _contributions[beneficiary]; } /** * @dev Extend parent behavior requiring purchase to respect the beneficiary's funding cap. * @param beneficiary Token purchaser * @param weiAmount Amount of wei contributed */ function _preValidatePurchase(address beneficiary, uint256 weiAmount) internal view { super._preValidatePurchase(beneficiary, weiAmount); // solhint-disable-next-line max-line-length require(_contributions[beneficiary].add(weiAmount) >= _cap, "IndividuallyCappedCrowdsale: beneficiary's min cap not reached"); } /** * @dev Extend parent behavior to update beneficiary contributions. * @param beneficiary Token purchaser * @param weiAmount Amount of wei contributed */ function _updatePurchasingState(address beneficiary, uint256 weiAmount) internal { super._updatePurchasingState(beneficiary, weiAmount); _contributions[beneficiary] = _contributions[beneficiary].add(weiAmount); } } pragma solidity ^0.5.0; /** * @title AllowanceCrowdsale * @dev Extension of Crowdsale where tokens are held by a wallet, which approves an allowance to the crowdsale. */ contract AllowanceCrowdsale is Crowdsale { using SafeMath for uint256; using SafeERC20 for IERC20; address private _tokenWallet; /** * @dev Constructor, takes token wallet address. * @param tokenWallet Address holding the tokens, which has approved allowance to the crowdsale. */ constructor (address tokenWallet) public { require(tokenWallet != address(0), "AllowanceCrowdsale: token wallet is the zero address"); _tokenWallet = tokenWallet; } /** * @return the address of the wallet that will hold the tokens. */ function tokenWallet() public view returns (address) { return _tokenWallet; } /** * @dev Checks the amount of tokens left in the allowance. * @return Amount of tokens left in the allowance */ function remainingTokens() public view returns (uint256) { return Math.min(token().balanceOf(_tokenWallet), token().allowance(_tokenWallet, address(this))); } /** * @dev Overrides parent behavior by transferring tokens from wallet. * @param beneficiary Token purchaser * @param tokenAmount Amount of tokens purchased */ function _deliverTokens(address beneficiary, uint256 tokenAmount) internal { token().safeTransferFrom(_tokenWallet, beneficiary, tokenAmount); } } 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; /** * Event for crowdsale extending * @param newClosingTime new closing time * @param prevClosingTime old closing time */ event TimedCrowdsaleExtended(uint256 prevClosingTime, uint256 newClosingTime); /** * @dev Reverts if not in crowdsale time range. */ modifier onlyWhileOpen { require(isOpen(), "TimedCrowdsale: not open"); _; } /** * @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, "TimedCrowdsale: opening time is before current time"); // solhint-disable-next-line max-line-length require(closingTime > openingTime, "TimedCrowdsale: opening time is not before closing time"); _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); } /** * @dev Extend crowdsale. * @param newClosingTime Crowdsale closing time */ function _extendTime(uint256 newClosingTime) internal { require(!hasClosed(), "TimedCrowdsale: already closed"); // solhint-disable-next-line max-line-length require(newClosingTime > _closingTime, "TimedCrowdsale: new closing time is before current closing time"); emit TimedCrowdsaleExtended(_closingTime, newClosingTime); _closingTime = newClosingTime; } } pragma solidity ^0.5.0; /** * @title IncreasingPriceCrowdsale * @dev Extension of Crowdsale contract that increases the price of tokens linearly in time. * Note that what should be provided to the constructor is the initial and final _rates_, that is, * the amount of tokens per wei contributed. Thus, the initial rate must be greater than the final rate. */ contract IncreasingPriceCrowdsale is TimedCrowdsale { using SafeMath for uint256; uint256 private _initialRate; uint256 private _finalRate; /** * @dev Constructor, takes initial and final rates of tokens received per wei contributed. * @param initialRate Number of tokens a buyer gets per wei at the start of the crowdsale * @param finalRate Number of tokens a buyer gets per wei at the end of the crowdsale */ constructor (uint256 initialRate, uint256 finalRate) public { require(finalRate > 0, "IncreasingPriceCrowdsale: final rate is 0"); // solhint-disable-next-line max-line-length require(initialRate > finalRate, "IncreasingPriceCrowdsale: initial rate is not greater than final rate"); _initialRate = initialRate; _finalRate = finalRate; } /** * 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("IncreasingPriceCrowdsale: rate() called"); } /** * @return the initial rate of the crowdsale. */ function initialRate() public view returns (uint256) { return _initialRate; } /** * @return the final rate of the crowdsale. */ function finalRate() public view returns (uint256) { return _finalRate; } /** * @dev Returns the rate of tokens per wei at the present time. * Note that, as price _increases_ with time, the rate _decreases_. * @return The number of tokens a buyer gets per wei at a given time */ function getCurrentRate() public view returns (uint256) { if (!isOpen()) { return 0; } // solhint-disable-next-line not-rely-on-time uint256 elapsedTime = block.timestamp.sub(openingTime()); uint256 timeRange = closingTime().sub(openingTime()); uint256 rateRange = _initialRate.sub(_finalRate); return _initialRate.sub(elapsedTime.mul(rateRange).div(timeRange)); } /** * @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); } } pragma solidity ^0.5.0; contract HBDVAuction is Crowdsale, IndividuallyCappedCrowdsale, TimedCrowdsale, AllowanceCrowdsale, IncreasingPriceCrowdsale { constructor( uint256 _cap, uint256 _openingTime, uint256 _closingTime, uint256 _rate, address payable _wallet, address _tokenWallet, uint256 _initialRate, uint256 _finalRate, IERC20 _token ) public IndividuallyCappedCrowdsale (_cap) AllowanceCrowdsale(_tokenWallet) TimedCrowdsale(_openingTime, _closingTime) IncreasingPriceCrowdsale (_initialRate, _finalRate) Crowdsale (_rate, _wallet, _token) { } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"_cap","type":"uint256"},{"internalType":"uint256","name":"_openingTime","type":"uint256"},{"internalType":"uint256","name":"_closingTime","type":"uint256"},{"internalType":"uint256","name":"_rate","type":"uint256"},{"internalType":"address payable","name":"_wallet","type":"address"},{"internalType":"address","name":"_tokenWallet","type":"address"},{"internalType":"uint256","name":"_initialRate","type":"uint256"},{"internalType":"uint256","name":"_finalRate","type":"uint256"},{"internalType":"contract IERC20","name":"_token","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"CapperAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"CapperRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevClosingTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newClosingTime","type":"uint256"}],"name":"TimedCrowdsaleExtended","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"purchaser","type":"address"},{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensPurchased","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addCapper","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"beneficiary","type":"address"}],"name":"buyTokens","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"closingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"finalRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"beneficiary","type":"address"}],"name":"getContribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"hasClosed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"initialRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isCapper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"openingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"remainingTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceCapper","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"wallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"weiRaised","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620024ad380380620024ad83398181016040526101208110156200003857600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050508282858a8a8d8b8b8860016000806101000a81548160ff0219169083151502179055506000831162000133576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f43726f776473616c653a2072617465206973203000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620001bb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180620024886025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000243576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180620024216024913960400191505060405180910390fd5b8260028190555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050620002ef620002e3620005b560201b60201c565b620005bd60201b60201c565b600081116200034a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180620024676021913960400191505060405180910390fd5b806006819055505042821015620003ad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526033815260200180620023156033913960400191505060405180910390fd5b81811162000407576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526037815260200180620023c16037913960400191505060405180910390fd5b81600781905550806008819055505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200049f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001806200238d6034913960400191505060405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600081116200053c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180620023f86029913960400191505060405180910390fd5b80821162000596576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526045815260200180620023486045913960600191505060405180910390fd5b81600a8190555080600b819055505050505050505050505050620007e2565b600033905090565b620005d88160046200061e60201b620012a31790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167fa7555c95b69d4f5cc847881feb4ab2883a1921319e34fa2043747b793d65b36e60405160405180910390a250565b6200063082826200070260201b60201c565b15620006a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200078b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180620024456022913960400191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b2380620007f26000396000f3fe6080604052600436106101095760003560e01c80635d5576f811610095578063bf58390311610064578063bf58390314610408578063bff99c6c14610433578063ec8ac4d81461048a578063f7fb07b0146104ce578063fc0c546a146104f957610109565b80635d5576f81461034a5780638dfbcf36146103615780639e51051f146103b2578063b7a8807c146103dd57610109565b806339564561116100dc57806339564561146102055780634042b66f1461026e57806347535d7b146102995780634b6753bc146102c8578063521eb273146102f357610109565b80631515bc2b1461011b578063211061091461014a57806321eff7fc146101755780632c4e722e146101da575b610119610114610550565b610558565b005b34801561012757600080fd5b506101306106e3565b604051808215151515815260200191505060405180910390f35b34801561015657600080fd5b5061015f6106ef565b6040518082815260200191505060405180910390f35b34801561018157600080fd5b506101c46004803603602081101561019857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106f9565b6040518082815260200191505060405180910390f35b3480156101e657600080fd5b506101ef610742565b6040518082815260200191505060405180910390f35b34801561021157600080fd5b506102546004803603602081101561022857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610795565b604051808215151515815260200191505060405180910390f35b34801561027a57600080fd5b506102836107b2565b6040518082815260200191505060405180910390f35b3480156102a557600080fd5b506102ae6107bc565b604051808215151515815260200191505060405180910390f35b3480156102d457600080fd5b506102dd6107d7565b6040518082815260200191505060405180910390f35b3480156102ff57600080fd5b506103086107e1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561035657600080fd5b5061035f61080b565b005b34801561036d57600080fd5b506103b06004803603602081101561038457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061081d565b005b3480156103be57600080fd5b506103c761088e565b6040518082815260200191505060405180910390f35b3480156103e957600080fd5b506103f2610898565b6040518082815260200191505060405180910390f35b34801561041457600080fd5b5061041d6108a2565b6040518082815260200191505060405180910390f35b34801561043f57600080fd5b50610448610aa7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104cc600480360360208110156104a057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610558565b005b3480156104da57600080fd5b506104e3610ad1565b6040518082815260200191505060405180910390f35b34801561050557600080fd5b5061050e610b88565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600033905090565b6000809054906101000a900460ff166105d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60008060006101000a81548160ff02191690831515021790555060003490506106028282610bb1565b600061060d82610c39565b905061062482600354610c6190919063ffffffff16565b6003819055506106348382610ce9565b8273ffffffffffffffffffffffffffffffffffffffff16610653610550565b73ffffffffffffffffffffffffffffffffffffffff167f6faf93231a456e552dbc9961f58d9713ee4f2e69d15f1975b050ef0911053a7b8484604051808381526020018281526020019250505060405180910390a36106b28383610cf7565b6106ba610d9a565b6106c48383610e05565b505060016000806101000a81548160ff02191690831515021790555050565b60006008544211905090565b6000600b54905090565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806119a26027913960400191505060405180910390fd5b60006107ab826004610e0990919063ffffffff16565b9050919050565b6000600354905090565b600060075442101580156107d257506008544211155b905090565b6000600854905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61081b610816610550565b610ee7565b565b61082d610828610550565b610795565b610882576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180611abf6030913960400191505060405180910390fd5b61088b81610f41565b50565b6000600a54905090565b6000600754905090565b6000610aa26108af610b88565b73ffffffffffffffffffffffffffffffffffffffff166370a08231600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561094d57600080fd5b505afa158015610961573d6000803e3d6000fd5b505050506040513d602081101561097757600080fd5b8101908080519060200190929190505050610990610b88565b73ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015610a6257600080fd5b505afa158015610a76573d6000803e3d6000fd5b505050506040513d6020811015610a8c57600080fd5b8101908080519060200190929190505050610f9b565b905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610adb6107bc565b610ae85760009050610b85565b6000610b04610af5610898565b42610fb490919063ffffffff16565b90506000610b29610b13610898565b610b1b6107d7565b610fb490919063ffffffff16565b90506000610b44600b54600a54610fb490919063ffffffff16565b9050610b7f610b6e83610b608487610ffe90919063ffffffff16565b61108490919063ffffffff16565b600a54610fb490919063ffffffff16565b93505050505b90565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610bb96107bc565b610c2b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f54696d656443726f776473616c653a206e6f74206f70656e000000000000000081525060200191505060405180910390fd5b610c3582826110ce565b5050565b600080610c44610ad1565b9050610c598382610ffe90919063ffffffff16565b915050919050565b600080828401905083811015610cdf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b610cf38282611188565b5050565b610d0182826111e2565b610d5381600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c6190919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610e02573d6000803e3d6000fd5b50565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611a496022913960400191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610efb8160046111e690919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f427400d279c506df610224b22ecce89b693fc1865864113f21c8d19c1f0c2a3b60405160405180910390a250565b610f558160046112a390919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fa7555c95b69d4f5cc847881feb4ab2883a1921319e34fa2043747b793d65b36e60405160405180910390a250565b6000818310610faa5781610fac565b825b905092915050565b6000610ff683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061137e565b905092915050565b600080831415611011576000905061107e565b600082840290508284828161102257fe5b0414611079576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611a286021913960400191505060405180910390fd5b809150505b92915050565b60006110c683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061143e565b905092915050565b6110d88282611504565b60065461112d82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c6190919063ffffffff16565b1015611184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001806119c9603e913960400191505060405180910390fd5b5050565b6111de600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683836111b8610b88565b73ffffffffffffffffffffffffffffffffffffffff16611605909392919063ffffffff16565b5050565b5050565b6111f08282610e09565b611245576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611a076021913960400191505060405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6112ad8282610e09565b15611320576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600083831115829061142b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156113f05780820151818401526020810190506113d5565b50505050905090810190601f16801561141d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080831182906114ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156114af578082015181840152602081019050611494565b50505050905090810190601f1680156114dc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816114f657fe5b049050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561158a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611a6b602a913960400191505060405180910390fd5b6000811415611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f43726f776473616c653a20776569416d6f756e7420697320300000000000000081525060200191505060405180910390fd5b5050565b611705848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061170b565b50505050565b61172a8273ffffffffffffffffffffffffffffffffffffffff16611956565b61179c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b602083106117eb57805182526020820191506020810190506020830392506117c8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461184d576040519150601f19603f3d011682016040523d82523d6000602084013e611852565b606091505b5091509150816118ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b600081511115611950578080602001905160208110156118e957600080fd5b810190808051906020019092919050505061194f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611a95602a913960400191505060405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561199857506000801b8214155b9250505091905056fe496e6372656173696e67507269636543726f776473616c653a207261746528292063616c6c6564496e646976696475616c6c7943617070656443726f776473616c653a2062656e65666963696172792773206d696e20636170206e6f742072656163686564526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77526f6c65733a206163636f756e7420697320746865207a65726f206164647265737343726f776473616c653a2062656e656669636961727920697320746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564436170706572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652043617070657220726f6c65a265627a7a72315820fe4ce4457d7039edfbdabdec945c6f1effd2293d0c6bfbabe451c5a01563afea64736f6c634300050d003254696d656443726f776473616c653a206f70656e696e672074696d65206973206265666f72652063757272656e742074696d65496e6372656173696e67507269636543726f776473616c653a20696e697469616c2072617465206973206e6f742067726561746572207468616e2066696e616c2072617465416c6c6f77616e636543726f776473616c653a20746f6b656e2077616c6c657420697320746865207a65726f206164647265737354696d656443726f776473616c653a206f70656e696e672074696d65206973206e6f74206265666f726520636c6f73696e672074696d65496e6372656173696e67507269636543726f776473616c653a2066696e616c2072617465206973203043726f776473616c653a20746f6b656e20697320746865207a65726f2061646472657373526f6c65733a206163636f756e7420697320746865207a65726f206164647265737343617070656443726f776473616c653a204d696e696d756d20636170206973203043726f776473616c653a2077616c6c657420697320746865207a65726f2061646472657373000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000005e43dab0000000000000000000000000000000000000000000000000000000005e7b39b0000000000000000000000000000000000000000000000000000886c98b760000000000000000000000000000b34c3f28f90ac9cdd10b8d5c6e2fd89904340e970000000000000000000000000b83d67b302a8222c44dfeca76d6908b1ac7c6f4000000000000000000000000000000000000000000000000000b5e620f480000000000000000000000000000000000000000000000000000000886c98b7600000000000000000000000000003f00bb267775bc700ad2e8548f38db281309e869
Deployed Bytecode
0x6080604052600436106101095760003560e01c80635d5576f811610095578063bf58390311610064578063bf58390314610408578063bff99c6c14610433578063ec8ac4d81461048a578063f7fb07b0146104ce578063fc0c546a146104f957610109565b80635d5576f81461034a5780638dfbcf36146103615780639e51051f146103b2578063b7a8807c146103dd57610109565b806339564561116100dc57806339564561146102055780634042b66f1461026e57806347535d7b146102995780634b6753bc146102c8578063521eb273146102f357610109565b80631515bc2b1461011b578063211061091461014a57806321eff7fc146101755780632c4e722e146101da575b610119610114610550565b610558565b005b34801561012757600080fd5b506101306106e3565b604051808215151515815260200191505060405180910390f35b34801561015657600080fd5b5061015f6106ef565b6040518082815260200191505060405180910390f35b34801561018157600080fd5b506101c46004803603602081101561019857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106f9565b6040518082815260200191505060405180910390f35b3480156101e657600080fd5b506101ef610742565b6040518082815260200191505060405180910390f35b34801561021157600080fd5b506102546004803603602081101561022857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610795565b604051808215151515815260200191505060405180910390f35b34801561027a57600080fd5b506102836107b2565b6040518082815260200191505060405180910390f35b3480156102a557600080fd5b506102ae6107bc565b604051808215151515815260200191505060405180910390f35b3480156102d457600080fd5b506102dd6107d7565b6040518082815260200191505060405180910390f35b3480156102ff57600080fd5b506103086107e1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561035657600080fd5b5061035f61080b565b005b34801561036d57600080fd5b506103b06004803603602081101561038457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061081d565b005b3480156103be57600080fd5b506103c761088e565b6040518082815260200191505060405180910390f35b3480156103e957600080fd5b506103f2610898565b6040518082815260200191505060405180910390f35b34801561041457600080fd5b5061041d6108a2565b6040518082815260200191505060405180910390f35b34801561043f57600080fd5b50610448610aa7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104cc600480360360208110156104a057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610558565b005b3480156104da57600080fd5b506104e3610ad1565b6040518082815260200191505060405180910390f35b34801561050557600080fd5b5061050e610b88565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600033905090565b6000809054906101000a900460ff166105d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60008060006101000a81548160ff02191690831515021790555060003490506106028282610bb1565b600061060d82610c39565b905061062482600354610c6190919063ffffffff16565b6003819055506106348382610ce9565b8273ffffffffffffffffffffffffffffffffffffffff16610653610550565b73ffffffffffffffffffffffffffffffffffffffff167f6faf93231a456e552dbc9961f58d9713ee4f2e69d15f1975b050ef0911053a7b8484604051808381526020018281526020019250505060405180910390a36106b28383610cf7565b6106ba610d9a565b6106c48383610e05565b505060016000806101000a81548160ff02191690831515021790555050565b60006008544211905090565b6000600b54905090565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806119a26027913960400191505060405180910390fd5b60006107ab826004610e0990919063ffffffff16565b9050919050565b6000600354905090565b600060075442101580156107d257506008544211155b905090565b6000600854905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61081b610816610550565b610ee7565b565b61082d610828610550565b610795565b610882576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180611abf6030913960400191505060405180910390fd5b61088b81610f41565b50565b6000600a54905090565b6000600754905090565b6000610aa26108af610b88565b73ffffffffffffffffffffffffffffffffffffffff166370a08231600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561094d57600080fd5b505afa158015610961573d6000803e3d6000fd5b505050506040513d602081101561097757600080fd5b8101908080519060200190929190505050610990610b88565b73ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015610a6257600080fd5b505afa158015610a76573d6000803e3d6000fd5b505050506040513d6020811015610a8c57600080fd5b8101908080519060200190929190505050610f9b565b905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610adb6107bc565b610ae85760009050610b85565b6000610b04610af5610898565b42610fb490919063ffffffff16565b90506000610b29610b13610898565b610b1b6107d7565b610fb490919063ffffffff16565b90506000610b44600b54600a54610fb490919063ffffffff16565b9050610b7f610b6e83610b608487610ffe90919063ffffffff16565b61108490919063ffffffff16565b600a54610fb490919063ffffffff16565b93505050505b90565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610bb96107bc565b610c2b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f54696d656443726f776473616c653a206e6f74206f70656e000000000000000081525060200191505060405180910390fd5b610c3582826110ce565b5050565b600080610c44610ad1565b9050610c598382610ffe90919063ffffffff16565b915050919050565b600080828401905083811015610cdf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b610cf38282611188565b5050565b610d0182826111e2565b610d5381600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c6190919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610e02573d6000803e3d6000fd5b50565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611a496022913960400191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610efb8160046111e690919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f427400d279c506df610224b22ecce89b693fc1865864113f21c8d19c1f0c2a3b60405160405180910390a250565b610f558160046112a390919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fa7555c95b69d4f5cc847881feb4ab2883a1921319e34fa2043747b793d65b36e60405160405180910390a250565b6000818310610faa5781610fac565b825b905092915050565b6000610ff683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061137e565b905092915050565b600080831415611011576000905061107e565b600082840290508284828161102257fe5b0414611079576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611a286021913960400191505060405180910390fd5b809150505b92915050565b60006110c683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061143e565b905092915050565b6110d88282611504565b60065461112d82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c6190919063ffffffff16565b1015611184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e8152602001806119c9603e913960400191505060405180910390fd5b5050565b6111de600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683836111b8610b88565b73ffffffffffffffffffffffffffffffffffffffff16611605909392919063ffffffff16565b5050565b5050565b6111f08282610e09565b611245576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611a076021913960400191505060405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6112ad8282610e09565b15611320576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600083831115829061142b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156113f05780820151818401526020810190506113d5565b50505050905090810190601f16801561141d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080831182906114ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156114af578082015181840152602081019050611494565b50505050905090810190601f1680156114dc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816114f657fe5b049050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561158a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611a6b602a913960400191505060405180910390fd5b6000811415611601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f43726f776473616c653a20776569416d6f756e7420697320300000000000000081525060200191505060405180910390fd5b5050565b611705848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061170b565b50505050565b61172a8273ffffffffffffffffffffffffffffffffffffffff16611956565b61179c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b602083106117eb57805182526020820191506020810190506020830392506117c8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461184d576040519150601f19603f3d011682016040523d82523d6000602084013e611852565b606091505b5091509150816118ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b600081511115611950578080602001905160208110156118e957600080fd5b810190808051906020019092919050505061194f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611a95602a913960400191505060405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561199857506000801b8214155b9250505091905056fe496e6372656173696e67507269636543726f776473616c653a207261746528292063616c6c6564496e646976696475616c6c7943617070656443726f776473616c653a2062656e65666963696172792773206d696e20636170206e6f742072656163686564526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77526f6c65733a206163636f756e7420697320746865207a65726f206164647265737343726f776473616c653a2062656e656669636961727920697320746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564436170706572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652043617070657220726f6c65a265627a7a72315820fe4ce4457d7039edfbdabdec945c6f1effd2293d0c6bfbabe451c5a01563afea64736f6c634300050d0032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000005e43dab0000000000000000000000000000000000000000000000000000000005e7b39b0000000000000000000000000000000000000000000000000000886c98b760000000000000000000000000000b34c3f28f90ac9cdd10b8d5c6e2fd89904340e970000000000000000000000000b83d67b302a8222c44dfeca76d6908b1ac7c6f4000000000000000000000000000000000000000000000000000b5e620f480000000000000000000000000000000000000000000000000000000886c98b7600000000000000000000000000003f00bb267775bc700ad2e8548f38db281309e869
-----Decoded View---------------
Arg [0] : _cap (uint256): 50000000000000000000
Arg [1] : _openingTime (uint256): 1581505200
Arg [2] : _closingTime (uint256): 1585134000
Arg [3] : _rate (uint256): 2400000000000000
Arg [4] : _wallet (address): 0xb34c3F28F90Ac9CdD10B8D5c6e2fd89904340e97
Arg [5] : _tokenWallet (address): 0x0b83D67b302a8222C44dfEca76d6908B1aC7C6f4
Arg [6] : _initialRate (uint256): 3200000000000000
Arg [7] : _finalRate (uint256): 2400000000000000
Arg [8] : _token (address): 0x3f00Bb267775bC700aD2e8548f38Db281309E869
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000002b5e3af16b1880000
Arg [1] : 000000000000000000000000000000000000000000000000000000005e43dab0
Arg [2] : 000000000000000000000000000000000000000000000000000000005e7b39b0
Arg [3] : 000000000000000000000000000000000000000000000000000886c98b760000
Arg [4] : 000000000000000000000000b34c3f28f90ac9cdd10b8d5c6e2fd89904340e97
Arg [5] : 0000000000000000000000000b83d67b302a8222c44dfeca76d6908b1ac7c6f4
Arg [6] : 000000000000000000000000000000000000000000000000000b5e620f480000
Arg [7] : 000000000000000000000000000000000000000000000000000886c98b760000
Arg [8] : 0000000000000000000000003f00bb267775bc700ad2e8548f38db281309e869
Deployed Bytecode Sourcemap
38285:611:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24047:23;24057:12;:10;:12::i;:::-;24047:9;:23::i;:::-;38285:611;34256:159;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34256:159:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;37051:87;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37051:87:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29445:129;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29445:129:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29445:129:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36694:114;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36694:114:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20569:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20569:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20569:109:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;24625:87;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24625:87:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33894:192;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33894:192:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33713:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33713:91:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24301:89;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24301:89:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;20786:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20786:79:0;;;:::i;:::-;;20686:92;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20686:92:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20686:92:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;36885:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36885:91:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33552;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33552:91:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31596:172;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31596:172:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31360:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31360:91:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;24977:622;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24977:622:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;37380:447;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37380:447:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24142:78;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24142:78:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;5723:98;5768:15;5803:10;5796:17;;5723:98;:::o;24977:622::-;4575:11;;;;;;;;;;;4567:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4714:5;4700:11;;:19;;;;;;;;;;;;;;;;;;25056:17;25076:9;25056:29;;25096:44;25117:11;25130:9;25096:20;:44::i;:::-;25202:14;25219:26;25235:9;25219:15;:26::i;:::-;25202:43;;25296:25;25311:9;25296:10;;:14;;:25;;;;:::i;:::-;25283:10;:38;;;;25334:37;25351:11;25364:6;25334:16;:37::i;:::-;25417:11;25387:61;;25403:12;:10;:12::i;:::-;25387:61;;;25430:9;25441:6;25387:61;;;;;;;;;;;;;;;;;;;;;;;;25461:46;25484:11;25497:9;25461:22;:46::i;:::-;25520:15;:13;:15::i;:::-;25546:45;25568:11;25581:9;25546:21;:45::i;:::-;4732:1;;4894:4;4880:11;;:18;;;;;;;;;;;;;;;;;;24977:622;:::o;34256:159::-;34298:4;34395:12;;34377:15;:30;34370:37;;34256:159;:::o;37051:87::-;37093:7;37120:10;;37113:17;;37051:87;:::o;29445:129::-;29512:7;29539:14;:27;29554:11;29539:27;;;;;;;;;;;;;;;;29532:34;;29445:129;;;:::o;36694:114::-;36731:7;36751:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20569:109;20625:4;20649:21;20662:7;20649:8;:12;;:21;;;;:::i;:::-;20642:28;;20569:109;;;:::o;24625:87::-;24667:7;24694:10;;24687:17;;24625:87;:::o;33894:192::-;33933:4;34031:12;;34012:15;:31;;:66;;;;;34066:12;;34047:15;:31;;34012:66;34005:73;;33894:192;:::o;33713:91::-;33757:7;33784:12;;33777:19;;33713:91;:::o;24301:89::-;24340:15;24375:7;;;;;;;;;;;24368:14;;24301:89;:::o;20786:79::-;20830:27;20844:12;:10;:12::i;:::-;20830:13;:27::i;:::-;20786:79::o;20686:92::-;20466:22;20475:12;:10;:12::i;:::-;20466:8;:22::i;:::-;20458:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20751:19;20762:7;20751:10;:19::i;:::-;20686:92;:::o;36885:91::-;36929:7;36956:12;;36949:19;;36885:91;:::o;33552:::-;33596:7;33623:12;;33616:19;;33552:91;:::o;31596:172::-;31644:7;31671:89;31680:7;:5;:7::i;:::-;:17;;;31698:12;;;;;;;;;;;31680:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31680:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31680:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31680:31:0;;;;;;;;;;;;;;;;31713:7;:5;:7::i;:::-;:17;;;31731:12;;;;;;;;;;;31753:4;31713:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31713:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31713:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31713:46:0;;;;;;;;;;;;;;;;31671:8;:89::i;:::-;31664:96;;31596:172;:::o;31360:91::-;31404:7;31431:12;;;;;;;;;;;31424:19;;31360:91;:::o;37380:447::-;37427:7;37452:8;:6;:8::i;:::-;37447:50;;37484:1;37477:8;;;;37447:50;37564:19;37586:34;37606:13;:11;:13::i;:::-;37586:15;:19;;:34;;;;:::i;:::-;37564:56;;37631:17;37651:32;37669:13;:11;:13::i;:::-;37651;:11;:13::i;:::-;:17;;:32;;;;:::i;:::-;37631:52;;37694:17;37714:28;37731:10;;37714:12;;:16;;:28;;;;:::i;:::-;37694:48;;37760:59;37777:41;37808:9;37777:26;37793:9;37777:11;:15;;:26;;;;:::i;:::-;:30;;:41;;;;:::i;:::-;37760:12;;:16;;:59;;;;:::i;:::-;37753:66;;;;;37380:447;;:::o;24142:78::-;24180:6;24206;;;;;;;;;;;24199:13;;24142:78;:::o;34615:167::-;32766:8;:6;:8::i;:::-;32758:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34724:50;34751:11;34764:9;34724:26;:50::i;:::-;34615:167;;:::o;38072:177::-;38139:7;38159:19;38181:16;:14;:16::i;:::-;38159:38;;38215:26;38231:9;38215:11;:15;;:26;;;;:::i;:::-;38208:33;;;38072:177;;;:::o;6920:181::-;6978:7;6998:9;7014:1;7010;:5;6998:17;;7039:1;7034;:6;;7026:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7092:1;7085:8;;;6920:181;;;;:::o;27687:136::-;27775:40;27790:11;27803;27775:14;:40::i;:::-;27687:136;;:::o;30327:235::-;30419:52;30448:11;30461:9;30419:28;:52::i;:::-;30512:42;30544:9;30512:14;:27;30527:11;30512:27;;;;;;;;;;;;;;;;:31;;:42;;;;:::i;:::-;30482:14;:27;30497:11;30482:27;;;;;;;;;;;;;;;:72;;;;30327:235;;:::o;28718:80::-;28763:7;;;;;;;;;;;:16;;:27;28780:9;28763:27;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28763:27:0;28718:80::o;26835:151::-;;;:::o;19902:203::-;19974:4;20018:1;19999:21;;:7;:21;;;;19991:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20077:4;:11;;:20;20089:7;20077:20;;;;;;;;;;;;;;;;;;;;;;;;;20070:27;;19902:203;;;;:::o;21003:130::-;21063:24;21079:7;21063:8;:15;;:24;;;;:::i;:::-;21117:7;21103:22;;;;;;;;;;;;21003:130;:::o;20873:122::-;20930:21;20943:7;20930:8;:12;;:21;;;;:::i;:::-;20979:7;20967:20;;;;;;;;;;;;20873:122;:::o;18667:106::-;18725:7;18756:1;18752;:5;:13;;18764:1;18752:13;;;18760:1;18752:13;18745:20;;18667:106;;;;:::o;7376:136::-;7434:7;7461:43;7465:1;7468;7461:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;7454:50;;7376:136;;;;:::o;8292:471::-;8350:7;8600:1;8595;:6;8591:47;;;8625:1;8618:8;;;;8591:47;8650:9;8666:1;8662;:5;8650:17;;8695:1;8690;8686;:5;;;;;;:10;8678:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8754:1;8747:8;;;8292:471;;;;;:::o;9231:132::-;9289:7;9316:39;9320:1;9323;9316:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9309:46;;9231:132;;;;:::o;29791:343::-;29886:50;29913:11;29926:9;29886:26;:50::i;:::-;30055:4;;30009:42;30041:9;30009:14;:27;30024:11;30009:27;;;;;;;;;;;;;;;;:31;;:42;;;;:::i;:::-;:50;;30001:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29791:343;;:::o;31966:158::-;32052:64;32077:12;;;;;;;;;;;32091:11;32104;32052:7;:5;:7::i;:::-;:24;;;;:64;;;;;;:::i;:::-;31966:158;;:::o;28101:147::-;;;:::o;19624:183::-;19704:18;19708:4;19714:7;19704:3;:18::i;:::-;19696:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19794:5;19771:4;:11;;:20;19783:7;19771:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;19624:183;;:::o;19366:178::-;19444:18;19448:4;19454:7;19444:3;:18::i;:::-;19443:19;19435:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19532:4;19509;:11;;:20;19521:7;19509:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;19366:178;;:::o;7849:192::-;7935:7;7968:1;7963;:6;;7971:12;7955:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;7955:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7995:9;8011:1;8007;:5;7995:17;;8032:1;8025:8;;;7849:192;;;;;:::o;9893:345::-;9979:7;10078:1;10074;:5;10081:12;10066:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10066:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10105:9;10121:1;10117;:5;;;;;;10105:17;;10229:1;10222:8;;;9893:345;;;;;:::o;26152:380::-;26278:1;26255:25;;:11;:25;;;;26247:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26359:1;26346:9;:14;;26338:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26152:380;;:::o;15317:204::-;15418:95;15437:5;15467;:18;;;:27;;;;15496:4;15502:2;15506:5;15444:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15444:68:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;15444:68:0;15418:18;:95::i;:::-;15317:204;;;;:::o;17172:1114::-;17776:27;17784:5;17776:25;;;:27::i;:::-;17768:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17913:12;17927:23;17962:5;17954:19;;17974:4;17954:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;17954:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;17912:67:0;;;;17998:7;17990:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18079:1;18059:10;:17;:21;18055:224;;;18201:10;18190:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18190:30:0;;;;;;;;;;;;;;;;18182:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18055:224;17172:1114;;;;:::o;12226:619::-;12286:4;12548:16;12575:19;12597:66;12575:88;;;;12766:7;12754:20;12742:32;;12806:11;12794:8;:23;;:42;;;;;12833:3;12821:15;;:8;:15;;12794:42;12786:51;;;;12226:619;;;:::o
Swarm Source
bzzr://fe4ce4457d7039edfbdabdec945c6f1effd2293d0c6bfbabe451c5a01563afea
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.