Contract Overview
Balance:
9.3 MATIC
MATIC Value:
$10.30 (@ $1.11/MATIC)
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Contract Name:
VoySale
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2023-01-03 */ // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.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 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. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/security/Pausable.sol // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; /** * @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. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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 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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // File: EnvoyNew/Polygon/VoySale.sol pragma solidity ^0.8.0; interface IVesting { function addUser(address _userAddress, uint256 _amount) external; } interface IVoyToken { function mint(address to, uint256 amount) external; } /** * VoySale contract in the Polygon network */ contract VoySale is Ownable, Pausable { uint256 public priceMatic = 130000000000000000; //Equivalent to USD 0.12 mapping(address=>bool) public whitelist; address public voyToken; address public vesting; constructor(address _voyToken, address _vesting) { voyToken = _voyToken; vesting = _vesting; setWhitelist(msg.sender, true); } event Purchase(address indexed user, uint256 amount); function buy(uint256 _amount) public payable whenNotPaused { require(whitelist[msg.sender], "Not whitelisted"); require(msg.value == _amount * priceMatic / 1e18, "Invalid value"); IVoyToken(voyToken).mint(address(vesting), _amount); IVesting(vesting).addUser(msg.sender, _amount); emit Purchase(msg.sender, _amount); } function setWhitelist(address _who, bool _enabled) public onlyOwner { whitelist[_who] = _enabled; } function setMultiWhitelist(address[] memory _who, bool _enabled) public onlyOwner { for(uint i=0; i<_who.length;i++) { whitelist[_who[i]] = _enabled; } } function recoverTokens(uint256 _amount, address _token) public onlyOwner { ERC20(_token).transfer(msg.sender, _amount); } function recoverETH(uint256 _amount) public onlyOwner { (bool sent, bytes memory data) = msg.sender.call{value: _amount}(""); require(sent, "Failed to send Ether"); } function updatePrice(uint256 _priceMatic) public onlyOwner { priceMatic = _priceMatic; } function pause() external onlyOwner { _pause(); } function unpause() external onlyOwner { _unpause(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_voyToken","type":"address"},{"internalType":"address","name":"_vesting","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Purchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceMatic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"recoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"recoverTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_who","type":"address[]"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setMultiWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_who","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_priceMatic","type":"uint256"}],"name":"updatePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vesting","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"voyToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526701cdda4faccd000060015534801561001c57600080fd5b50604051610da4380380610da483398101604081905261003b91610192565b61004433610093565b6000805460ff60a01b19169055600380546001600160a01b038085166001600160a01b031992831617909255600480549284169290911691909117905561008c3360016100e3565b50506101c5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6100eb610116565b6001600160a01b03919091166000908152600260205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146101745760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b565b80516001600160a01b038116811461018d57600080fd5b919050565b600080604083850312156101a557600080fd5b6101ae83610176565b91506101bc60208401610176565b90509250929050565b610bd0806101d46000396000f3fe6080604052600436106100f35760003560e01c80638b9e02a61161008a578063d333555311610059578063d333555314610293578063d96a094a146102b3578063e394372c146102c6578063f2fde38b146102e657600080fd5b80638b9e02a6146102055780638d6cc56d146102255780638da5cb5b146102455780639b19251a1461026357600080fd5b806353d6fd59116100c657806353d6fd59146101905780635c975abb146101b0578063715018a6146101db5780638456cb59146101f057600080fd5b80632ec91737146100f85780633f4ba83a1461011a57806344c63eec1461012f578063489711f51461016c575b600080fd5b34801561010457600080fd5b50610118610113366004610ac2565b610306565b005b34801561012657600080fd5b50610118610393565b34801561013b57600080fd5b5060045461014f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561017857600080fd5b5061018260015481565b604051908152602001610163565b34801561019c57600080fd5b506101186101ab366004610977565b6103a5565b3480156101bc57600080fd5b50600054600160a01b900460ff165b6040519015158152602001610163565b3480156101e757600080fd5b506101186103d8565b3480156101fc57600080fd5b506101186103ea565b34801561021157600080fd5b5060035461014f906001600160a01b031681565b34801561023157600080fd5b50610118610240366004610aa9565b6103fa565b34801561025157600080fd5b506000546001600160a01b031661014f565b34801561026f57600080fd5b506101cb61027e366004610955565b60026020526000908152604090205460ff1681565b34801561029f57600080fd5b506101186102ae366004610aa9565b610407565b6101186102c1366004610aa9565b6104a6565b3480156102d257600080fd5b506101186102e13660046109ae565b610667565b3480156102f257600080fd5b50610118610301366004610955565b6106d6565b61030e61074f565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0382169063a9059cbb90604401602060405180830381600087803b15801561035657600080fd5b505af115801561036a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038e9190610a8c565b505050565b61039b61074f565b6103a36107a9565b565b6103ad61074f565b6001600160a01b03919091166000908152600260205260409020805460ff1916911515919091179055565b6103e061074f565b6103a360006107fe565b6103f261074f565b6103a361084e565b61040261074f565b600155565b61040f61074f565b6040516000908190339084908381818185875af1925050503d8060008114610453576040519150601f19603f3d011682016040523d82523d6000602084013e610458565b606091505b50915091508161038e5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b60448201526064015b60405180910390fd5b6104ae610891565b3360009081526002602052604090205460ff166104ff5760405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b604482015260640161049d565b670de0b6b3a7640000600154826105169190610b10565b6105209190610aee565b341461055e5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c69642076616c756560981b604482015260640161049d565b600354600480546040516340c10f1960e01b81526001600160a01b039182169281019290925260248201849052909116906340c10f1990604401600060405180830381600087803b1580156105b257600080fd5b505af11580156105c6573d6000803e3d6000fd5b50506004805460405163d301719360e01b81523392810192909252602482018590526001600160a01b0316925063d30171939150604401600060405180830381600087803b15801561061757600080fd5b505af115801561062b573d6000803e3d6000fd5b50506040518381523392507f2499a5330ab0979cc612135e7883ebc3cd5c9f7a8508f042540c34723348f632915060200160405180910390a250565b61066f61074f565b60005b825181101561038e57816002600085848151811061069257610692610b60565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806106ce81610b2f565b915050610672565b6106de61074f565b6001600160a01b0381166107435760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161049d565b61074c816107fe565b50565b6000546001600160a01b031633146103a35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161049d565b6107b16108de565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610856610891565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107e13390565b600054600160a01b900460ff16156103a35760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161049d565b600054600160a01b900460ff166103a35760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161049d565b80356001600160a01b038116811461094557600080fd5b919050565b803561094581610b8c565b60006020828403121561096757600080fd5b6109708261092e565b9392505050565b6000806040838503121561098a57600080fd5b6109938361092e565b915060208301356109a381610b8c565b809150509250929050565b600080604083850312156109c157600080fd5b823567ffffffffffffffff808211156109d957600080fd5b818501915085601f8301126109ed57600080fd5b8135602082821115610a0157610a01610b76565b8160051b604051601f19603f83011681018181108682111715610a2657610a26610b76565b604052838152828101945085830182870184018b1015610a4557600080fd5b600096505b84871015610a6f57610a5b8161092e565b865260019690960195948301948301610a4a565b509650610a7f905087820161094a565b9450505050509250929050565b600060208284031215610a9e57600080fd5b815161097081610b8c565b600060208284031215610abb57600080fd5b5035919050565b60008060408385031215610ad557600080fd5b82359150610ae56020840161092e565b90509250929050565b600082610b0b57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615610b2a57610b2a610b4a565b500290565b6000600019821415610b4357610b43610b4a565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b801515811461074c57600080fdfea26469706673582212200363ab2690fe20e4429fab9de3b275eb49956db9f8fa0a8f217d242cf2f263f564736f6c63430008070033000000000000000000000000823bbb870b0eb86bd7ec0bcc98c84b46a0f99ac70000000000000000000000005a68c37b15a74310890c78b34ba7cdd4d1a368c1
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000823bbb870b0eb86bd7ec0bcc98c84b46a0f99ac70000000000000000000000005a68c37b15a74310890c78b34ba7cdd4d1a368c1
-----Decoded View---------------
Arg [0] : _voyToken (address): 0x823bbb870b0eb86bd7ec0bcc98c84b46a0f99ac7
Arg [1] : _vesting (address): 0x5a68c37b15a74310890c78b34ba7cdd4d1a368c1
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000823bbb870b0eb86bd7ec0bcc98c84b46a0f99ac7
Arg [1] : 0000000000000000000000005a68c37b15a74310890c78b34ba7cdd4d1a368c1
Deployed ByteCode Sourcemap
23508:1755:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24671:135;;;;;;;;;;-1:-1:-1;24671:135:0;;;;;:::i;:::-;;:::i;:::-;;25193:67;;;;;;;;;;;;;:::i;23711:22::-;;;;;;;;;;-1:-1:-1;23711:22:0;;;;-1:-1:-1;;;;;23711:22:0;;;;;;-1:-1:-1;;;;;3111:32:1;;;3093:51;;3081:2;3066:18;23711:22:0;;;;;;;;23553:46;;;;;;;;;;;;;;;;;;;6269:25:1;;;6257:2;6242:18;23553:46:0;6123:177:1;24353:113:0;;;;;;;;;;-1:-1:-1;24353:113:0;;;;;:::i;:::-;;:::i;2566:86::-;;;;;;;;;;-1:-1:-1;2613:4:0;2637:7;-1:-1:-1;;;2637:7:0;;;;2566:86;;;3599:14:1;;3592:22;3574:41;;3562:2;3547:18;2566:86:0;3434:187:1;5431:103:0;;;;;;;;;;;;;:::i;25122:63::-;;;;;;;;;;;;;:::i;23681:23::-;;;;;;;;;;-1:-1:-1;23681:23:0;;;;-1:-1:-1;;;;;23681:23:0;;;25012:102;;;;;;;;;;-1:-1:-1;25012:102:0;;;;;:::i;:::-;;:::i;4783:87::-;;;;;;;;;;-1:-1:-1;4829:7:0;4856:6;-1:-1:-1;;;;;4856:6:0;4783:87;;23633:39;;;;;;;;;;-1:-1:-1;23633:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24814:190;;;;;;;;;;-1:-1:-1;24814:190:0;;;;;:::i;:::-;;:::i;23971:374::-;;;;;;:::i;:::-;;:::i;24474:189::-;;;;;;;;;;-1:-1:-1;24474:189:0;;;;;:::i;:::-;;:::i;5689:201::-;;;;;;;;;;-1:-1:-1;5689:201:0;;;;;:::i;:::-;;:::i;24671:135::-;4669:13;:11;:13::i;:::-;24755:43:::1;::::0;-1:-1:-1;;;24755:43:0;;24778:10:::1;24755:43;::::0;::::1;3329:51:1::0;3396:18;;;3389:34;;;-1:-1:-1;;;;;24755:22:0;::::1;::::0;::::1;::::0;3302:18:1;;24755:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24671:135:::0;;:::o;25193:67::-;4669:13;:11;:13::i;:::-;25242:10:::1;:8;:10::i;:::-;25193:67::o:0;24353:113::-;4669:13;:11;:13::i;:::-;-1:-1:-1;;;;;24432:15:0;;;::::1;;::::0;;;:9:::1;:15;::::0;;;;:26;;-1:-1:-1;;24432:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24353:113::o;5431:103::-;4669:13;:11;:13::i;:::-;5496:30:::1;5523:1;5496:18;:30::i;25122:63::-:0;4669:13;:11;:13::i;:::-;25169:8:::1;:6;:8::i;25012:102::-:0;4669:13;:11;:13::i;:::-;25082:10:::1;:24:::0;25012:102::o;24814:190::-;4669:13;:11;:13::i;:::-;24913:35:::1;::::0;24881:9:::1;::::0;;;24913:10:::1;::::0;24936:7;;24881:9;24913:35;24881:9;24913:35;24936:7;24913:10;:35:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24880:68;;;;24967:4;24959:37;;;::::0;-1:-1:-1;;;24959:37:0;;4584:2:1;24959:37:0::1;::::0;::::1;4566:21:1::0;4623:2;4603:18;;;4596:30;-1:-1:-1;;;4642:18:1;;;4635:50;4702:18;;24959:37:0::1;;;;;;;;23971:374:::0;2171:19;:17;:19::i;:::-;24059:10:::1;24049:21;::::0;;;:9:::1;:21;::::0;;;;;::::1;;24041:49;;;::::0;-1:-1:-1;;;24041:49:0;;5278:2:1;24041:49:0::1;::::0;::::1;5260:21:1::0;5317:2;5297:18;;;5290:30;-1:-1:-1;;;5336:18:1;;;5329:45;5391:18;;24041:49:0::1;5076:339:1::0;24041:49:0::1;24147:4;24134:10;;24124:7;:20;;;;:::i;:::-;:27;;;;:::i;:::-;24111:9;:40;24103:66;;;::::0;-1:-1:-1;;;24103:66:0;;5983:2:1;24103:66:0::1;::::0;::::1;5965:21:1::0;6022:2;6002:18;;;5995:30;-1:-1:-1;;;6041:18:1;;;6034:43;6094:18;;24103:66:0::1;5781:337:1::0;24103:66:0::1;24192:8;::::0;24215:7:::1;::::0;;24182:51:::1;::::0;-1:-1:-1;;;24182:51:0;;-1:-1:-1;;;;;24215:7:0;;::::1;24182:51:::0;;::::1;3329::1::0;;;;3396:18;;;3389:34;;;24192:8:0;;::::1;::::0;24182:24:::1;::::0;3302:18:1;;24182:51:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;24253:7:0::1;::::0;;24244:46:::1;::::0;-1:-1:-1;;;24244:46:0;;24270:10:::1;24244:46:::0;;::::1;3329:51:1::0;;;;3396:18;;;3389:34;;;-1:-1:-1;;;;;24253:7:0::1;::::0;-1:-1:-1;24244:25:0::1;::::0;-1:-1:-1;3302:18:1;;24244:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;24308:29:0::1;::::0;6269:25:1;;;24317:10:0::1;::::0;-1:-1:-1;24308:29:0::1;::::0;-1:-1:-1;6257:2:1;6242:18;24308:29:0::1;;;;;;;23971:374:::0;:::o;24474:189::-;4669:13;:11;:13::i;:::-;24571:6:::1;24567:89;24583:4;:11;24581:1;:13;24567:89;;;24636:8;24615:9;:18;24625:4;24630:1;24625:7;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;24615:18:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;24615:18:0;:29;;-1:-1:-1;;24615:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24595:3;::::1;::::0;::::1;:::i;:::-;;;;24567:89;;5689:201:::0;4669:13;:11;:13::i;:::-;-1:-1:-1;;;;;5778:22:0;::::1;5770:73;;;::::0;-1:-1:-1;;;5770:73:0;;4177:2:1;5770:73:0::1;::::0;::::1;4159:21:1::0;4216:2;4196:18;;;4189:30;4255:34;4235:18;;;4228:62;-1:-1:-1;;;4306:18:1;;;4299:36;4352:19;;5770:73:0::1;3975:402:1::0;5770:73:0::1;5854:28;5873:8;5854:18;:28::i;:::-;5689:201:::0;:::o;4948:132::-;4829:7;4856:6;-1:-1:-1;;;;;4856:6:0;759:10;5012:23;5004:68;;;;-1:-1:-1;;;5004:68:0;;5622:2:1;5004:68:0;;;5604:21:1;;;5641:18;;;5634:30;5700:34;5680:18;;;5673:62;5752:18;;5004:68:0;5420:356:1;3421:120:0;2430:16;:14;:16::i;:::-;3490:5:::1;3480:15:::0;;-1:-1:-1;;;;3480:15:0::1;::::0;;3511:22:::1;759:10:::0;3520:12:::1;3511:22;::::0;-1:-1:-1;;;;;3111:32:1;;;3093:51;;3081:2;3066:18;3511:22:0::1;;;;;;;3421:120::o:0;6050:191::-;6124:16;6143:6;;-1:-1:-1;;;;;6160:17:0;;;-1:-1:-1;;;;;;6160:17:0;;;;;;6193:40;;6143:6;;;;;;;6193:40;;6124:16;6193:40;6113:128;6050:191;:::o;3162:118::-;2171:19;:17;:19::i;:::-;3222:7:::1;:14:::0;;-1:-1:-1;;;;3222:14:0::1;-1:-1:-1::0;;;3222:14:0::1;::::0;;3252:20:::1;3259:12;759:10:::0;;679:98;2725:108;2613:4;2637:7;-1:-1:-1;;;2637:7:0;;;;2795:9;2787:38;;;;-1:-1:-1;;;2787:38:0;;4933:2:1;2787:38:0;;;4915:21:1;4972:2;4952:18;;;4945:30;-1:-1:-1;;;4991:18:1;;;4984:46;5047:18;;2787:38:0;4731:340:1;2910:108:0;2613:4;2637:7;-1:-1:-1;;;2637:7:0;;;;2969:41;;;;-1:-1:-1;;;2969:41:0;;3828:2:1;2969:41:0;;;3810:21:1;3867:2;3847:18;;;3840:30;-1:-1:-1;;;3886:18:1;;;3879:50;3946:18;;2969:41:0;3626:344:1;14:173;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:128::-;257:20;;286:28;257:20;286:28;:::i;325:186::-;384:6;437:2;425:9;416:7;412:23;408:32;405:52;;;453:1;450;443:12;405:52;476:29;495:9;476:29;:::i;:::-;466:39;325:186;-1:-1:-1;;;325:186:1:o;516:315::-;581:6;589;642:2;630:9;621:7;617:23;613:32;610:52;;;658:1;655;648:12;610:52;681:29;700:9;681:29;:::i;:::-;671:39;;760:2;749:9;745:18;732:32;773:28;795:5;773:28;:::i;:::-;820:5;810:15;;;516:315;;;;;:::o;836:1202::-;926:6;934;987:2;975:9;966:7;962:23;958:32;955:52;;;1003:1;1000;993:12;955:52;1043:9;1030:23;1072:18;1113:2;1105:6;1102:14;1099:34;;;1129:1;1126;1119:12;1099:34;1167:6;1156:9;1152:22;1142:32;;1212:7;1205:4;1201:2;1197:13;1193:27;1183:55;;1234:1;1231;1224:12;1183:55;1270:2;1257:16;1292:4;1315:2;1311;1308:10;1305:36;;;1321:18;;:::i;:::-;1367:2;1364:1;1360:10;1399:2;1393:9;1462:2;1458:7;1453:2;1449;1445:11;1441:25;1433:6;1429:38;1517:6;1505:10;1502:22;1497:2;1485:10;1482:18;1479:46;1476:72;;;1528:18;;:::i;:::-;1564:2;1557:22;1614:18;;;1648:15;;;;-1:-1:-1;1683:11:1;;;1713;;;1709:20;;1706:33;-1:-1:-1;1703:53:1;;;1752:1;1749;1742:12;1703:53;1774:1;1765:10;;1784:169;1798:2;1795:1;1792:9;1784:169;;;1855:23;1874:3;1855:23;:::i;:::-;1843:36;;1816:1;1809:9;;;;;1899:12;;;;1931;;1784:169;;;-1:-1:-1;1972:6:1;-1:-1:-1;1997:35:1;;-1:-1:-1;2013:18:1;;;1997:35;:::i;:::-;1987:45;;;;;;836:1202;;;;;:::o;2043:245::-;2110:6;2163:2;2151:9;2142:7;2138:23;2134:32;2131:52;;;2179:1;2176;2169:12;2131:52;2211:9;2205:16;2230:28;2252:5;2230:28;:::i;2293:180::-;2352:6;2405:2;2393:9;2384:7;2380:23;2376:32;2373:52;;;2421:1;2418;2411:12;2373:52;-1:-1:-1;2444:23:1;;2293:180;-1:-1:-1;2293:180:1:o;2478:254::-;2546:6;2554;2607:2;2595:9;2586:7;2582:23;2578:32;2575:52;;;2623:1;2620;2613:12;2575:52;2659:9;2646:23;2636:33;;2688:38;2722:2;2711:9;2707:18;2688:38;:::i;:::-;2678:48;;2478:254;;;;;:::o;6305:217::-;6345:1;6371;6361:132;;6415:10;6410:3;6406:20;6403:1;6396:31;6450:4;6447:1;6440:15;6478:4;6475:1;6468:15;6361:132;-1:-1:-1;6507:9:1;;6305:217::o;6527:168::-;6567:7;6633:1;6629;6625:6;6621:14;6618:1;6615:21;6610:1;6603:9;6596:17;6592:45;6589:71;;;6640:18;;:::i;:::-;-1:-1:-1;6680:9:1;;6527:168::o;6700:135::-;6739:3;-1:-1:-1;;6760:17:1;;6757:43;;;6780:18;;:::i;:::-;-1:-1:-1;6827:1:1;6816:13;;6700:135::o;6840:127::-;6901:10;6896:3;6892:20;6889:1;6882:31;6932:4;6929:1;6922:15;6956:4;6953:1;6946:15;6972:127;7033:10;7028:3;7024:20;7021:1;7014:31;7064:4;7061:1;7054:15;7088:4;7085:1;7078:15;7104:127;7165:10;7160:3;7156:20;7153:1;7146:31;7196:4;7193:1;7186:15;7220:4;7217:1;7210:15;7236:118;7322:5;7315:13;7308:21;7301:5;7298:32;7288:60;;7344:1;7341;7334:12
Swarm Source
ipfs://0363ab2690fe20e4429fab9de3b275eb49956db9f8fa0a8f217d242cf2f263f5
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.