Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 23 from a total of 23 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 15199045 | 768 days ago | IN | 0 ETH | 0.00009199 | ||||
Transfer | 14493769 | 882 days ago | IN | 0 ETH | 0.00362474 | ||||
Transfer | 14195728 | 928 days ago | IN | 0 ETH | 0.000723 | ||||
Transfer | 14195707 | 928 days ago | IN | 0 ETH | 0.00072178 | ||||
Transfer | 13883858 | 976 days ago | IN | 0 ETH | 0.00583015 | ||||
Transfer | 13880453 | 977 days ago | IN | 0 ETH | 0.00427784 | ||||
Transfer | 12975543 | 1118 days ago | IN | 0 ETH | 0.0037803 | ||||
Transfer | 12975529 | 1118 days ago | IN | 0 ETH | 0.00371849 | ||||
Transfer | 12951569 | 1122 days ago | IN | 0 ETH | 0.00310103 | ||||
Transfer | 12942731 | 1123 days ago | IN | 0 ETH | 0.00063525 | ||||
Transfer | 12921650 | 1127 days ago | IN | 0 ETH | 0.00063 | ||||
Transfer | 12840272 | 1140 days ago | IN | 0 ETH | 0.00236269 | ||||
Transfer | 12835767 | 1140 days ago | IN | 0 ETH | 0.000441 | ||||
Transfer | 12815249 | 1143 days ago | IN | 0 ETH | 0.000483 | ||||
Transfer | 12798429 | 1146 days ago | IN | 0 ETH | 0.00107395 | ||||
Transfer | 12765059 | 1151 days ago | IN | 0 ETH | 0.00074102 | ||||
Transfer | 12758816 | 1152 days ago | IN | 0 ETH | 0.00051549 | ||||
Transfer | 12758748 | 1152 days ago | IN | 0 ETH | 0.00049616 | ||||
Transfer | 12758704 | 1152 days ago | IN | 0 ETH | 0.00064437 | ||||
Transfer | 12743710 | 1155 days ago | IN | 0 ETH | 0.00268487 | ||||
Transfer | 12743688 | 1155 days ago | IN | 0 ETH | 0.0027 | ||||
Transfer | 12741946 | 1155 days ago | IN | 0 ETH | 0.00099 | ||||
0x60806040 | 12722560 | 1158 days ago | IN | 0 ETH | 0.01486328 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
DistributionFREET2
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-06-28 */ 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; } } /** * @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. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. * * _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; } } /** * @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 must be above 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; // calculate token amount to be created uint256 tokens = _getTokenAmount(weiAmount) + 1000000000000000000000; _preValidatePurchase(beneficiary, weiAmount, tokens); // update state _weiRaised = _weiRaised.add(weiAmount); _processPurchase(beneficiary, tokens); emit TokensPurchased(_msgSender(), beneficiary, weiAmount, tokens); _updatePurchasingState(beneficiary, weiAmount, tokens); _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, uint256 tokens) internal view { require(beneficiary != address(0), "Crowdsale: beneficiary is the zero address"); require(weiAmount >= 0, "Crowdsale: weiAmount must 0"); require(tokens != 0, "test warning"); 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, uint256 tokens) 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); } } /** * @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); } /** * @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; } } /** * @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"); } } /** * @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"); } } } /** * @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); } } /** * @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); } } /** * @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]; } } contract PauserRole is Context { using Roles for Roles.Role; event PauserAdded(address indexed account); event PauserRemoved(address indexed account); Roles.Role private _pausers; constructor () internal { _addPauser(_msgSender()); } modifier onlyPauser() { require(isPauser(_msgSender()), "PauserRole: caller does not have the Pauser role"); _; } function isPauser(address account) public view returns (bool) { return _pausers.has(account); } function addPauser(address account) public onlyPauser { _addPauser(account); } function renouncePauser() public { _removePauser(_msgSender()); } function _addPauser(address account) internal { _pausers.add(account); emit PauserAdded(account); } function _removePauser(address account) internal { _pausers.remove(account); emit PauserRemoved(account); } } /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ contract Pausable is Context, PauserRole { /** * @dev Emitted when the pause is triggered by a pauser (`account`). */ event Paused(address account); /** * @dev Emitted when the pause is lifted by a pauser (`account`). */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. Assigns the Pauser role * to the deployer. */ constructor () internal { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!_paused, "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(_paused, "Pausable: not paused"); _; } /** * @dev Called by a pauser to pause, triggers stopped state. */ function pause() public onlyPauser whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Called by a pauser to unpause, returns to normal state. */ function unpause() public onlyPauser whenPaused { _paused = false; emit Unpaused(_msgSender()); } } /** * @title PausableCrowdsale * @dev Extension of Crowdsale contract where purchases can be paused and unpaused by the pauser role. */ contract PausableCrowdsale is Crowdsale, Pausable { /** * @dev Validation of an incoming purchase. Use require statements to revert state when conditions are not met. * Use super to concatenate validations. * Adds the validation that the crowdsale must not be paused. * @param _beneficiary Address performing the token purchase * @param _weiAmount Value in wei involved in the purchase */ function _preValidatePurchase(address _beneficiary, uint256 _weiAmount, uint256 tokens) internal view whenNotPaused { return super._preValidatePurchase(_beneficiary, _weiAmount, tokens); } } 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); } } /** * @title IndividuallyCappedCrowdsale * @dev Crowdsale with per-beneficiary caps. */ contract IndividuallyCappedCrowdsale is Crowdsale, CapperRole { using SafeMath for uint256; mapping(address => uint256) private _contributions; mapping(address => uint256) private _caps; /** * @dev Sets a specific beneficiary's maximum contribution. * @param beneficiary Address to be capped * @param cap Wei limit for individual contribution */ function setCap(address beneficiary, uint256 cap) external onlyCapper { _caps[beneficiary] = cap; } /** * @dev Returns the cap of a specific beneficiary. * @param beneficiary Address whose cap is to be checked * @return Current cap for individual beneficiary */ function getCap(address beneficiary) public view returns (uint256) { return _caps[beneficiary]; } /** * @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, uint256 tokens) internal view { super._preValidatePurchase(beneficiary, weiAmount, tokens); // solhint-disable-next-line max-line-length require(_contributions[beneficiary] <= _caps[beneficiary], "IndividuallyCappedCrowdsale: beneficiary's cap exceeded"); } /** * @dev Extend parent behavior to update beneficiary contributions. * @param beneficiary Token purchaser * @param weiAmount Amount of wei contributed */ function _updatePurchasingState(address beneficiary, uint256 weiAmount, uint256 tokens) internal { super._updatePurchasingState(beneficiary, weiAmount, tokens); _contributions[beneficiary] = _contributions[beneficiary].add(tokens); } } contract DistributionFREET2 is Crowdsale, AllowanceCrowdsale, PausableCrowdsale, IndividuallyCappedCrowdsale { constructor( uint256 rate, uint256 cap, address payable wallet, IERC20 token, address tokenWallet // <- new argument ) AllowanceCrowdsale(tokenWallet) // <- used here Crowdsale(rate, wallet, token) public { } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"},{"internalType":"uint256","name":"cap","type":"uint256"},{"internalType":"address payable","name":"wallet","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"tokenWallet","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":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"PauserAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"PauserRemoved","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","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":"account","type":"address"}],"name":"addPauser","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":[{"internalType":"address","name":"beneficiary","type":"address"}],"name":"getCap","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isCapper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isPauser","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":false,"inputs":[],"name":"renouncePauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"cap","type":"uint256"}],"name":"setCap","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":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","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
60806040523480156200001157600080fd5b506040516200173138038062001731833981810160405260a08110156200003757600080fd5b5080516020820151604083015160608401516080909401516000805460ff1916600117905592939192909190808584846001600160a01b038216620000ae5760405162461bcd60e51b81526004018080602001828103825260258152602001806200170c6025913960400191505060405180910390fd5b6001600160a01b038116620000f55760405162461bcd60e51b8152600401808060200182810382526024815260200180620016c66024913960400191505060405180910390fd5b600292909255600180546001600160a01b0319166001600160a01b0392831617905560008054610100600160a81b03191661010093831693909302929092179091558116620001765760405162461bcd60e51b8152600401808060200182810382526034815260200180620016926034913960400191505060405180910390fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055620001b3620001a4620001ee565b6001600160e01b03620001f216565b6006805460ff19169055620001e3620001d46001600160e01b03620001ee16565b6001600160e01b036200024416565b50505050506200038c565b3390565b6200020d8160056200029660201b62000e171790919060201c565b6040516001600160a01b038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b6200025f8160076200029660201b62000e171790919060201c565b6040516001600160a01b038216907fa7555c95b69d4f5cc847881feb4ab2883a1921319e34fa2043747b793d65b36e90600090a250565b620002ab82826001600160e01b036200032316565b15620002fe576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006001600160a01b0382166200036c5760405162461bcd60e51b8152600401808060200182810382526022815260200180620016ea6022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b6112f6806200039c6000396000f3fe6080604052600436106101145760003560e01c80636ef8d66d116100a0578063b3aefb7511610064578063b3aefb7514610348578063bf5839031461037b578063bff99c6c14610390578063ec8ac4d8146103a5578063fc0c546a146103cb57610114565b80636ef8d66d1461027f57806380ad2cf31461029457806382dc1ec4146102cd5780638456cb59146103005780638dfbcf361461031557610114565b80634042b66f116100e75780634042b66f146101dc57806346fbf68e146101f1578063521eb273146102245780635c975abb146102555780635d5576f81461026a57610114565b806321eff7fc146101265780632c4e722e1461016b57806339564561146101805780633f4ba83a146101c7575b61012461011f6103e0565b6103e4565b005b34801561013257600080fd5b506101596004803603602081101561014957600080fd5b50356001600160a01b0316610511565b60408051918252519081900360200190f35b34801561017757600080fd5b5061015961052c565b34801561018c57600080fd5b506101b3600480360360208110156101a357600080fd5b50356001600160a01b0316610532565b604080519115158252519081900360200190f35b3480156101d357600080fd5b5061012461054b565b3480156101e857600080fd5b50610159610634565b3480156101fd57600080fd5b506101b36004803603602081101561021457600080fd5b50356001600160a01b031661063a565b34801561023057600080fd5b5061023961064d565b604080516001600160a01b039092168252519081900360200190f35b34801561026157600080fd5b506101b361065c565b34801561027657600080fd5b50610124610665565b34801561028b57600080fd5b50610124610677565b3480156102a057600080fd5b50610124600480360360408110156102b757600080fd5b506001600160a01b038135169060200135610687565b3480156102d957600080fd5b50610124600480360360208110156102f057600080fd5b50356001600160a01b03166106ee565b34801561030c57600080fd5b50610124610740565b34801561032157600080fd5b506101246004803603602081101561033857600080fd5b50356001600160a01b0316610807565b34801561035457600080fd5b506101596004803603602081101561036b57600080fd5b50356001600160a01b0316610856565b34801561038757600080fd5b50610159610871565b34801561039c57600080fd5b5061023961098a565b610124600480360360208110156103bb57600080fd5b50356001600160a01b03166103e4565b3480156103d757600080fd5b50610239610999565b3390565b60005460ff1661043b576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff191681553490610450826109ad565b683635c9adc5dea000000190506104688383836109c4565b60035461047b908363ffffffff610a3616565b6003556104888382610a97565b826001600160a01b031661049a6103e0565b6001600160a01b03167f6faf93231a456e552dbc9961f58d9713ee4f2e69d15f1975b050ef0911053a7b8484604051808381526020018281526020019250505060405180910390a36104ed838383610aa5565b6104f5610afa565b6104ff8383610aa1565b50506000805460ff1916600117905550565b6001600160a01b031660009081526008602052604090205490565b60025490565b600061054560078363ffffffff610b3316565b92915050565b61055b6105566103e0565b61063a565b6105965760405162461bcd60e51b81526004018080602001828103825260308152602001806111736030913960400191505060405180910390fd5b60065460ff166105e4576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6006805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6106176103e0565b604080516001600160a01b039092168252519081900360200190a1565b60035490565b600061054560058363ffffffff610b3316565b6001546001600160a01b031690565b60065460ff1690565b6106756106706103e0565b610b9a565b565b6106756106826103e0565b610be2565b6106976106926103e0565b610532565b6106d25760405162461bcd60e51b81526004018080602001828103825260308152602001806112926030913960400191505060405180910390fd5b6001600160a01b03909116600090815260096020526040902055565b6106f96105566103e0565b6107345760405162461bcd60e51b81526004018080602001828103825260308152602001806111736030913960400191505060405180910390fd5b61073d81610c2a565b50565b61074b6105566103e0565b6107865760405162461bcd60e51b81526004018080602001828103825260308152602001806111736030913960400191505060405180910390fd5b60065460ff16156107d1576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6006805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586106176103e0565b6108126106926103e0565b61084d5760405162461bcd60e51b81526004018080602001828103825260308152602001806112926030913960400191505060405180910390fd5b61073d81610c72565b6001600160a01b031660009081526009602052604090205490565b600061098561087e610999565b60048054604080516370a0823160e01b81526001600160a01b0392831693810193909352519216916370a0823191602480820192602092909190829003018186803b1580156108cc57600080fd5b505afa1580156108e0573d6000803e3d6000fd5b505050506040513d60208110156108f657600080fd5b5051610900610999565b6004805460408051636eb1769f60e11b81526001600160a01b03928316938101939093523060248401525192169163dd62ed3e91604480820192602092909190829003018186803b15801561095457600080fd5b505afa158015610968573d6000803e3d6000fd5b505050506040513d602081101561097e57600080fd5b5051610cba565b905090565b6004546001600160a01b031690565b60005461010090046001600160a01b031690565b600061054560025483610cd090919063ffffffff16565b6109cf838383610d29565b6001600160a01b0383166000908152600960209081526040808320546008909252909120541115610a315760405162461bcd60e51b81526004018080602001828103825260378152602001806112316037913960400191505060405180910390fd5b505050565b600082820183811015610a90576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b610aa18282610d7f565b5050565b610ab0838383610a31565b6001600160a01b038316600090815260086020526040902054610ad9908263ffffffff610a3616565b6001600160a01b039093166000908152600860205260409020929092555050565b6001546040516001600160a01b03909116903480156108fc02916000818181858888f1935050505015801561073d573d6000803e3d6000fd5b60006001600160a01b038216610b7a5760405162461bcd60e51b81526004018080602001828103825260228152602001806111e56022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b610bab60078263ffffffff610db016565b6040516001600160a01b038216907f427400d279c506df610224b22ecce89b693fc1865864113f21c8d19c1f0c2a3b90600090a250565b610bf360058263ffffffff610db016565b6040516001600160a01b038216907fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e90600090a250565b610c3b60058263ffffffff610e1716565b6040516001600160a01b038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b610c8360078263ffffffff610e1716565b6040516001600160a01b038216907fa7555c95b69d4f5cc847881feb4ab2883a1921319e34fa2043747b793d65b36e90600090a250565b6000818310610cc95781610a90565b5090919050565b600082610cdf57506000610545565b82820282848281610cec57fe5b0414610a905760405162461bcd60e51b81526004018080602001828103825260218152602001806111c46021913960400191505060405180910390fd5b60065460ff1615610d74576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b610a31838383610e98565b600454610aa1906001600160a01b03168383610d99610999565b6001600160a01b031692919063ffffffff610f1e16565b610dba8282610b33565b610df55760405162461bcd60e51b81526004018080602001828103825260218152602001806111a36021913960400191505060405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b610e218282610b33565b15610e73576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6001600160a01b038316610edd5760405162461bcd60e51b815260040180806020018281038252602a815260200180611207602a913960400191505060405180910390fd5b80610a31576040805162461bcd60e51b815260206004820152600c60248201526b74657374207761726e696e6760a01b604482015290519081900360640190fd5b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610f78908590610f7e565b50505050565b610f90826001600160a01b0316611136565b610fe1576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b6020831061101f5780518252601f199092019160209182019101611000565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611081576040519150601f19603f3d011682016040523d82523d6000602084013e611086565b606091505b5091509150816110dd576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115610f78578080602001905160208110156110f957600080fd5b5051610f785760405162461bcd60e51b815260040180806020018281038252602a815260200180611268602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061116a57508115155b94935050505056fe506175736572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652050617573657220726f6c65526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77526f6c65733a206163636f756e7420697320746865207a65726f206164647265737343726f776473616c653a2062656e656669636961727920697320746865207a65726f2061646472657373496e646976696475616c6c7943617070656443726f776473616c653a2062656e65666963696172792773206361702065786365656465645361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564436170706572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652043617070657220726f6c65a265627a7a723158200bda581b9756c940b3f0e2d4da7a44f0cec83fb3c1fadeb342c527f74e2ff88e64736f6c63430005110032416c6c6f77616e636543726f776473616c653a20746f6b656e2077616c6c657420697320746865207a65726f206164647265737343726f776473616c653a20746f6b656e20697320746865207a65726f2061646472657373526f6c65733a206163636f756e7420697320746865207a65726f206164647265737343726f776473616c653a2077616c6c657420697320746865207a65726f2061646472657373000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003635c9adc5dea0000000000000000000000000000094e30e1e6a38a654745f55ed25032772f55a657a0000000000000000000000008c1b9072f78ffb869c817453de44b2101c4de64500000000000000000000000094e30e1e6a38a654745f55ed25032772f55a657a
Deployed Bytecode
0x6080604052600436106101145760003560e01c80636ef8d66d116100a0578063b3aefb7511610064578063b3aefb7514610348578063bf5839031461037b578063bff99c6c14610390578063ec8ac4d8146103a5578063fc0c546a146103cb57610114565b80636ef8d66d1461027f57806380ad2cf31461029457806382dc1ec4146102cd5780638456cb59146103005780638dfbcf361461031557610114565b80634042b66f116100e75780634042b66f146101dc57806346fbf68e146101f1578063521eb273146102245780635c975abb146102555780635d5576f81461026a57610114565b806321eff7fc146101265780632c4e722e1461016b57806339564561146101805780633f4ba83a146101c7575b61012461011f6103e0565b6103e4565b005b34801561013257600080fd5b506101596004803603602081101561014957600080fd5b50356001600160a01b0316610511565b60408051918252519081900360200190f35b34801561017757600080fd5b5061015961052c565b34801561018c57600080fd5b506101b3600480360360208110156101a357600080fd5b50356001600160a01b0316610532565b604080519115158252519081900360200190f35b3480156101d357600080fd5b5061012461054b565b3480156101e857600080fd5b50610159610634565b3480156101fd57600080fd5b506101b36004803603602081101561021457600080fd5b50356001600160a01b031661063a565b34801561023057600080fd5b5061023961064d565b604080516001600160a01b039092168252519081900360200190f35b34801561026157600080fd5b506101b361065c565b34801561027657600080fd5b50610124610665565b34801561028b57600080fd5b50610124610677565b3480156102a057600080fd5b50610124600480360360408110156102b757600080fd5b506001600160a01b038135169060200135610687565b3480156102d957600080fd5b50610124600480360360208110156102f057600080fd5b50356001600160a01b03166106ee565b34801561030c57600080fd5b50610124610740565b34801561032157600080fd5b506101246004803603602081101561033857600080fd5b50356001600160a01b0316610807565b34801561035457600080fd5b506101596004803603602081101561036b57600080fd5b50356001600160a01b0316610856565b34801561038757600080fd5b50610159610871565b34801561039c57600080fd5b5061023961098a565b610124600480360360208110156103bb57600080fd5b50356001600160a01b03166103e4565b3480156103d757600080fd5b50610239610999565b3390565b60005460ff1661043b576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff191681553490610450826109ad565b683635c9adc5dea000000190506104688383836109c4565b60035461047b908363ffffffff610a3616565b6003556104888382610a97565b826001600160a01b031661049a6103e0565b6001600160a01b03167f6faf93231a456e552dbc9961f58d9713ee4f2e69d15f1975b050ef0911053a7b8484604051808381526020018281526020019250505060405180910390a36104ed838383610aa5565b6104f5610afa565b6104ff8383610aa1565b50506000805460ff1916600117905550565b6001600160a01b031660009081526008602052604090205490565b60025490565b600061054560078363ffffffff610b3316565b92915050565b61055b6105566103e0565b61063a565b6105965760405162461bcd60e51b81526004018080602001828103825260308152602001806111736030913960400191505060405180910390fd5b60065460ff166105e4576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6006805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6106176103e0565b604080516001600160a01b039092168252519081900360200190a1565b60035490565b600061054560058363ffffffff610b3316565b6001546001600160a01b031690565b60065460ff1690565b6106756106706103e0565b610b9a565b565b6106756106826103e0565b610be2565b6106976106926103e0565b610532565b6106d25760405162461bcd60e51b81526004018080602001828103825260308152602001806112926030913960400191505060405180910390fd5b6001600160a01b03909116600090815260096020526040902055565b6106f96105566103e0565b6107345760405162461bcd60e51b81526004018080602001828103825260308152602001806111736030913960400191505060405180910390fd5b61073d81610c2a565b50565b61074b6105566103e0565b6107865760405162461bcd60e51b81526004018080602001828103825260308152602001806111736030913960400191505060405180910390fd5b60065460ff16156107d1576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6006805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586106176103e0565b6108126106926103e0565b61084d5760405162461bcd60e51b81526004018080602001828103825260308152602001806112926030913960400191505060405180910390fd5b61073d81610c72565b6001600160a01b031660009081526009602052604090205490565b600061098561087e610999565b60048054604080516370a0823160e01b81526001600160a01b0392831693810193909352519216916370a0823191602480820192602092909190829003018186803b1580156108cc57600080fd5b505afa1580156108e0573d6000803e3d6000fd5b505050506040513d60208110156108f657600080fd5b5051610900610999565b6004805460408051636eb1769f60e11b81526001600160a01b03928316938101939093523060248401525192169163dd62ed3e91604480820192602092909190829003018186803b15801561095457600080fd5b505afa158015610968573d6000803e3d6000fd5b505050506040513d602081101561097e57600080fd5b5051610cba565b905090565b6004546001600160a01b031690565b60005461010090046001600160a01b031690565b600061054560025483610cd090919063ffffffff16565b6109cf838383610d29565b6001600160a01b0383166000908152600960209081526040808320546008909252909120541115610a315760405162461bcd60e51b81526004018080602001828103825260378152602001806112316037913960400191505060405180910390fd5b505050565b600082820183811015610a90576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b610aa18282610d7f565b5050565b610ab0838383610a31565b6001600160a01b038316600090815260086020526040902054610ad9908263ffffffff610a3616565b6001600160a01b039093166000908152600860205260409020929092555050565b6001546040516001600160a01b03909116903480156108fc02916000818181858888f1935050505015801561073d573d6000803e3d6000fd5b60006001600160a01b038216610b7a5760405162461bcd60e51b81526004018080602001828103825260228152602001806111e56022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b610bab60078263ffffffff610db016565b6040516001600160a01b038216907f427400d279c506df610224b22ecce89b693fc1865864113f21c8d19c1f0c2a3b90600090a250565b610bf360058263ffffffff610db016565b6040516001600160a01b038216907fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e90600090a250565b610c3b60058263ffffffff610e1716565b6040516001600160a01b038216907f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f890600090a250565b610c8360078263ffffffff610e1716565b6040516001600160a01b038216907fa7555c95b69d4f5cc847881feb4ab2883a1921319e34fa2043747b793d65b36e90600090a250565b6000818310610cc95781610a90565b5090919050565b600082610cdf57506000610545565b82820282848281610cec57fe5b0414610a905760405162461bcd60e51b81526004018080602001828103825260218152602001806111c46021913960400191505060405180910390fd5b60065460ff1615610d74576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b610a31838383610e98565b600454610aa1906001600160a01b03168383610d99610999565b6001600160a01b031692919063ffffffff610f1e16565b610dba8282610b33565b610df55760405162461bcd60e51b81526004018080602001828103825260218152602001806111a36021913960400191505060405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b610e218282610b33565b15610e73576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6001600160a01b038316610edd5760405162461bcd60e51b815260040180806020018281038252602a815260200180611207602a913960400191505060405180910390fd5b80610a31576040805162461bcd60e51b815260206004820152600c60248201526b74657374207761726e696e6760a01b604482015290519081900360640190fd5b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610f78908590610f7e565b50505050565b610f90826001600160a01b0316611136565b610fe1576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b6020831061101f5780518252601f199092019160209182019101611000565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611081576040519150601f19603f3d011682016040523d82523d6000602084013e611086565b606091505b5091509150816110dd576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115610f78578080602001905160208110156110f957600080fd5b5051610f785760405162461bcd60e51b815260040180806020018281038252602a815260200180611268602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061116a57508115155b94935050505056fe506175736572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652050617573657220726f6c65526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77526f6c65733a206163636f756e7420697320746865207a65726f206164647265737343726f776473616c653a2062656e656669636961727920697320746865207a65726f2061646472657373496e646976696475616c6c7943617070656443726f776473616c653a2062656e65666963696172792773206361702065786365656465645361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564436170706572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652043617070657220726f6c65a265627a7a723158200bda581b9756c940b3f0e2d4da7a44f0cec83fb3c1fadeb342c527f74e2ff88e64736f6c63430005110032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003635c9adc5dea0000000000000000000000000000094e30e1e6a38a654745f55ed25032772f55a657a0000000000000000000000008c1b9072f78ffb869c817453de44b2101c4de64500000000000000000000000094e30e1e6a38a654745f55ed25032772f55a657a
-----Decoded View---------------
Arg [0] : rate (uint256): 0
Arg [1] : cap (uint256): 1000000000000000000000
Arg [2] : wallet (address): 0x94E30E1e6A38A654745f55ed25032772f55a657a
Arg [3] : token (address): 0x8c1b9072F78FfB869C817453dE44b2101C4DE645
Arg [4] : tokenWallet (address): 0x94E30E1e6A38A654745f55ed25032772f55a657a
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : 00000000000000000000000000000000000000000000003635c9adc5dea00000
Arg [2] : 00000000000000000000000094e30e1e6a38a654745f55ed25032772f55a657a
Arg [3] : 0000000000000000000000008c1b9072f78ffb869c817453de44b2101c4de645
Arg [4] : 00000000000000000000000094e30e1e6a38a654745f55ed25032772f55a657a
Deployed Bytecode Sourcemap
36555:418:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6334:23;6344:12;:10;:12::i;:::-;6334:9;:23::i;:::-;36555:418;35388:129;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35388:129:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35388:129:0;-1:-1:-1;;;;;35388:129:0;;:::i;:::-;;;;;;;;;;;;;;;;6767:77;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6767:77:0;;;:::i;33698:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33698:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33698:109:0;-1:-1:-1;;;;;33698:109:0;;:::i;:::-;;;;;;;;;;;;;;;;;;32352:120;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32352:120:0;;;:::i;6912:87::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6912:87:0;;;:::i;29919:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29919:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29919:109:0;-1:-1:-1;;;;;29919:109:0;;:::i;6588:89::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6588:89:0;;;:::i;:::-;;;;-1:-1:-1;;;;;6588:89:0;;;;;;;;;;;;;;31559:78;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31559:78:0;;;:::i;33915:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33915:79:0;;;:::i;30136:::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30136:79:0;;;:::i;34763:113::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34763:113:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;34763:113:0;;;;;;;;:::i;30036:92::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30036:92:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30036:92:0;-1:-1:-1;;;;;30036:92:0;;:::i;32139:118::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32139:118:0;;;:::i;33815:92::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33815:92:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33815:92:0;-1:-1:-1;;;;;33815:92:0;;:::i;35075:111::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35075:111:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35075:111:0;-1:-1:-1;;;;;35075:111:0;;:::i;27959:172::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27959:172:0;;;:::i;27723:91::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27723:91:0;;;:::i;7264:668::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7264:668:0;-1:-1:-1;;;;;7264:668:0;;:::i;6429:78::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6429:78:0;;;:::i;808:98::-;888:10;808:98;:::o;7264:668::-;3100:11;;;;3092:55;;;;;-1:-1:-1;;;3092:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3239:5;3225:19;;-1:-1:-1;;3225:19:0;;;7364:9;;7456:26;7364:9;7456:15;:26::i;:::-;7485:22;7456:51;7439:68;;7518:52;7539:11;7552:9;7563:6;7518:20;:52::i;:::-;7621:10;;:25;;7636:9;7621:25;:14;:25;:::i;:::-;7608:10;:38;7659:37;7676:11;7689:6;7659:16;:37::i;:::-;7742:11;-1:-1:-1;;;;;7712:61:0;7728:12;:10;:12::i;:::-;-1:-1:-1;;;;;7712:61:0;;7755:9;7766:6;7712:61;;;;;;;;;;;;;;;;;;;;;;;;7786:54;7809:11;7822:9;7833:6;7786:22;:54::i;:::-;7853:15;:13;:15::i;:::-;7879:45;7901:11;7914:9;7879:21;:45::i;:::-;-1:-1:-1;;3405:11:0;:18;;-1:-1:-1;;3405:18:0;3419:4;3405:18;;;-1:-1:-1;7264:668:0:o;35388:129::-;-1:-1:-1;;;;;35482:27:0;35455:7;35482:27;;;:14;:27;;;;;;;35388:129::o;6767:77::-;6831:5;;6767:77;:::o;33698:109::-;33754:4;33778:21;:8;33791:7;33778:21;:12;:21;:::i;:::-;33771:28;33698:109;-1:-1:-1;;33698:109:0:o;32352:120::-;29816:22;29825:12;:10;:12::i;:::-;29816:8;:22::i;:::-;29808:83;;;;-1:-1:-1;;;29808:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31995:7;;;;31987:40;;;;;-1:-1:-1;;;31987:40:0;;;;;;;;;;;;-1:-1:-1;;;31987:40:0;;;;;;;;;;;;;;;32411:7;:15;;-1:-1:-1;;32411:15:0;;;32442:22;32451:12;:10;:12::i;:::-;32442:22;;;-1:-1:-1;;;;;32442:22:0;;;;;;;;;;;;;;32352:120::o;6912:87::-;6981:10;;6912:87;:::o;29919:109::-;29975:4;29999:21;:8;30012:7;29999:21;:12;:21;:::i;6588:89::-;6662:7;;-1:-1:-1;;;;;6662:7:0;6588:89;:::o;31559:78::-;31622:7;;;;31559:78;:::o;33915:79::-;33959:27;33973:12;:10;:12::i;:::-;33959:13;:27::i;:::-;33915:79::o;30136:::-;30180:27;30194:12;:10;:12::i;:::-;30180:13;:27::i;34763:113::-;33595:22;33604:12;:10;:12::i;:::-;33595:8;:22::i;:::-;33587:83;;;;-1:-1:-1;;;33587:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34844:18:0;;;;;;;:5;:18;;;;;:24;34763:113::o;30036:92::-;29816:22;29825:12;:10;:12::i;29816:22::-;29808:83;;;;-1:-1:-1;;;29808:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30101:19;30112:7;30101:10;:19::i;:::-;30036:92;:::o;32139:118::-;29816:22;29825:12;:10;:12::i;29816:22::-;29808:83;;;;-1:-1:-1;;;29808:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31796:7;;;;31795:8;31787:37;;;;;-1:-1:-1;;;31787:37:0;;;;;;;;;;;;-1:-1:-1;;;31787:37:0;;;;;;;;;;;;;;;32199:7;:14;;-1:-1:-1;;32199:14:0;32209:4;32199:14;;;32229:20;32236:12;:10;:12::i;33815:92::-;33595:22;33604:12;:10;:12::i;33595:22::-;33587:83;;;;-1:-1:-1;;;33587:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33880:19;33891:7;33880:10;:19::i;35075:111::-;-1:-1:-1;;;;;35160:18:0;35133:7;35160:18;;;:5;:18;;;;;;;35075:111::o;27959:172::-;28007:7;28034:89;28043:7;:5;:7::i;:::-;28061:12;;;28043:31;;;-1:-1:-1;;;28043:31:0;;-1:-1:-1;;;;;28061:12:0;;;28043:31;;;;;;;;:17;;;;;:31;;;;;;;;;;;;;;;:17;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;28043:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28043:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28043:31:0;28076:7;:5;:7::i;:::-;28094:12;;;28076:46;;;-1:-1:-1;;;28076:46:0;;-1:-1:-1;;;;;28094:12:0;;;28076:46;;;;;;;28116:4;28076:46;;;;;:17;;;;;:46;;;;;;;;;;;;;;;:17;:46;;;5:2:-1;;;;30:1;27;20:12;5:2;28076:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28076:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28076:46:0;28034:8;:89::i;:::-;28027:96;;27959:172;:::o;27723:91::-;27794:12;;-1:-1:-1;;;;;27794:12:0;27723:91;:::o;6429:78::-;6467:6;6493;;;;-1:-1:-1;;;;;6493:6:0;;6429:78::o;10918:122::-;10985:7;11012:20;11026:5;;11012:9;:13;;:20;;;;:::i;35734:359::-;35845:58;35872:11;35885:9;35896:6;35845:26;:58::i;:::-;-1:-1:-1;;;;;36007:18:0;;;;;;:5;:18;;;;;;;;;35976:14;:27;;;;;;;:49;;35968:117;;;;-1:-1:-1;;;35968:117:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35734:359;;;:::o;14859:181::-;14917:7;14949:5;;;14973:6;;;;14965:46;;;;;-1:-1:-1;;;14965:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15031:1;14859:181;-1:-1:-1;;;14859:181:0:o;10085:136::-;10173:40;10188:11;10201;10173:14;:40::i;:::-;10085:136;;:::o;36286:256::-;36394:60;36423:11;36436:9;36447:6;36394:28;:60::i;:::-;-1:-1:-1;;;;;36495:27:0;;;;;;:14;:27;;;;;;:39;;36527:6;36495:39;:31;:39;:::i;:::-;-1:-1:-1;;;;;36465:27:0;;;;;;;:14;:27;;;;;:69;;;;-1:-1:-1;;36286:256:0:o;11132:80::-;11177:7;;:27;;-1:-1:-1;;;;;11177:7:0;;;;11194:9;11177:27;;;;;:7;:27;:7;:27;11194:9;11177:7;:27;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;29277:203:0;29349:4;-1:-1:-1;;;;;29374:21:0;;29366:68;;;;-1:-1:-1;;;29366:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29452:20:0;:11;:20;;;;;;;;;;;;;;;29277:203::o;34132:130::-;34192:24;:8;34208:7;34192:24;:15;:24;:::i;:::-;34232:22;;-1:-1:-1;;;;;34232:22:0;;;;;;;;34132:130;:::o;30353:::-;30413:24;:8;30429:7;30413:24;:15;:24;:::i;:::-;30453:22;;-1:-1:-1;;;;;30453:22:0;;;;;;;;30353:130;:::o;30223:122::-;30280:21;:8;30293:7;30280:21;:12;:21;:::i;:::-;30317:20;;-1:-1:-1;;;;;30317:20:0;;;;;;;;30223:122;:::o;34002:::-;34059:21;:8;34072:7;34059:21;:12;:21;:::i;:::-;34096:20;;-1:-1:-1;;;;;34096:20:0;;;;;;;;34002:122;:::o;26534:106::-;26592:7;26623:1;26619;:5;:13;;26631:1;26619:13;;;-1:-1:-1;26627:1:0;;26612:20;-1:-1:-1;26534:106:0:o;16231:471::-;16289:7;16534:6;16530:47;;-1:-1:-1;16564:1:0;16557:8;;16530:47;16601:5;;;16605:1;16601;:5;:1;16625:5;;;;;:10;16617:56;;;;-1:-1:-1;;;16617:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33059:202;31796:7;;;;31795:8;31787:37;;;;;-1:-1:-1;;;31787:37:0;;;;;;;;;;;;-1:-1:-1;;;31787:37:0;;;;;;;;;;;;;;;33193:60;33220:12;33234:10;33246:6;33193:26;:60::i;28329:158::-;28440:12;;28415:64;;-1:-1:-1;;;;;28440:12:0;28454:11;28467;28415:7;:5;:7::i;:::-;-1:-1:-1;;;;;28415:24:0;;:64;;;:24;:64;:::i;28999:183::-;29079:18;29083:4;29089:7;29079:3;:18::i;:::-;29071:64;;;;-1:-1:-1;;;29071:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29146:20:0;29169:5;29146:20;;;;;;;;;;;:28;;-1:-1:-1;;29146:28:0;;;28999:183::o;28741:178::-;28819:18;28823:4;28829:7;28819:3;:18::i;:::-;28818:19;28810:63;;;;;-1:-1:-1;;;28810:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28884:20:0;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;28884:27:0;28907:4;28884:27;;;28741:178::o;8485:445::-;-1:-1:-1;;;;;8604:25:0;;8596:80;;;;-1:-1:-1;;;8596:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8760:11;8752:36;;;;;-1:-1:-1;;;8752:36:0;;;;;;;;;;;;-1:-1:-1;;;8752:36:0;;;;;;;;;;;;;;23203:204;23330:68;;;-1:-1:-1;;;;;23330:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;23330:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;23304:95:0;;23323:5;;23304:18;:95::i;:::-;23203:204;;;;:::o;25058:1114::-;25662:27;25670:5;-1:-1:-1;;;;;25662:25:0;;:27::i;:::-;25654:71;;;;;-1:-1:-1;;;25654:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;25799:12;25813:23;25848:5;-1:-1:-1;;;;;25840:19:0;25860:4;25840:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;25840: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;;25798:67:0;;;;25884:7;25876:52;;;;;-1:-1:-1;;;25876:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25945:17;;:21;25941:224;;26087:10;26076:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26076:30:0;26068:85;;;;-1:-1:-1;;;26068:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20141:619;20201:4;20669:20;;20512:66;20709:23;;;;;;:42;;-1:-1:-1;20736:15:0;;;20709:42;20701:51;20141:619;-1:-1:-1;;;;20141:619:0:o
Swarm Source
bzzr://0bda581b9756c940b3f0e2d4da7a44f0cec83fb3c1fadeb342c527f74e2ff88e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
BSC | 100.00% | $536.56 | 0.0016 | $0.858497 |
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.